[{"data":1,"prerenderedAt":173094},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-mo-fa-ming-ling-time":3,"wiki-doc-nav":136},{"id":4,"title":5,"body":6,"description":128,"extension":129,"meta":130,"navigation":131,"path":132,"seo":133,"stem":134,"__hash__":135},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":8,"toc":126},"minimark",[9,13,17,20,23,26,116,122],[10,11,5],"h1",{"id":12},"_16魔法命令time",[14,15,16],"p",{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,18,19],{},"%:行模式",[14,21,22],{},"%%:单元格模式",[14,24,25],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[27,28,33],"pre",{"className":29,"code":30,"language":31,"meta":32,"style":32},"language-python shiki shiki-themes github-light github-dark","#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n","python","",[34,35,36,45,56,62,74,90,95,105],"code",{"__ignoreMap":32},[37,38,41],"span",{"class":39,"line":40},"line",1,[37,42,44],{"class":43},"sJ8bj","#程序执行时间\n",[37,46,48,52],{"class":39,"line":47},2,[37,49,51],{"class":50},"szBVR","import",[37,53,55],{"class":54},"sVt8B"," time \n",[37,57,59],{"class":39,"line":58},3,[37,60,61],{"class":43},"#获取时间\n",[37,63,65,68,71],{"class":39,"line":64},4,[37,66,67],{"class":54},"start",[37,69,70],{"class":50},"=",[37,72,73],{"class":54},"time.time()\n",[37,75,77,80,84,87],{"class":39,"line":76},5,[37,78,79],{"class":54},"time.sleep(",[37,81,83],{"class":82},"sj4cs","0.4",[37,85,86],{"class":54},")",[37,88,89],{"class":43},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[37,91,93],{"class":39,"line":92},6,[37,94,61],{"class":43},[37,96,98,101,103],{"class":39,"line":97},7,[37,99,100],{"class":54},"end",[37,102,70],{"class":50},[37,104,73],{"class":54},[37,106,108,110,113],{"class":39,"line":107},8,[37,109,100],{"class":54},[37,111,112],{"class":50},"-",[37,114,115],{"class":54},"start\n",[14,117,118],{},[119,120],"img",{"alt":32,"src":121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[123,124,125],"style",{},"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":32,"searchDepth":47,"depth":47,"links":127},[],null,"md",{},true,"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":5,"description":128},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",[137,5234,6342,7762,10751,12102,13591,14680,23443,23455,24054,24080,24204,24445,24510,24528,24541,24588,24712,24881,25080,25260,25465,25601,25696,25733,25746,26056,26797,27505,27526,28546,30177,30328,30341,30353,30651,50461,50476,50493,50526,53398,76746,92891,92912,93025,93146,93916,94579,94940,94978,95084,95163,95206,95232,95293,96947,97048,97073,97564,98064,99144,99427,100169,100671,100683,102699,104363,105866,107564,109481,111400,113422,116892,117324,117787,118536,121480,121828,121850,122206,125513,125525,125928,125951,126098,126265,126470,126771,127328,127985,129916,131514,132163,133657,135088,136323,138017,139769,142179,142295,143230,143441,144326,145561,145789,145802,146957,149369,151737,155058,157535,159179,160956,162969,166021,168201,170728,172922],{"id":138,"title":139,"body":140,"description":32,"extension":129,"meta":5229,"navigation":131,"path":5230,"seo":5231,"stem":5232,"__hash__":5233},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":141,"toc":5201},[142,145,150,153,157,170,174,179,182,185,188,191,194,222,226,229,232,235,238,288,292,311,313,327,330,338,341,1202,1209,1226,1230,1316,1320,1326,1414,1418,1456,1460,1524,1528,1532,1538,1549,1553,1558,1562,1567,1571,1576,1580,1584,1589,1859,1864,2002,2007,2264,2267,2275,2279,2284,2387,2390,2696,2705,2806,2809,2812,2815,2818,3078,3083,3223,3226,3405,3408,3536,3539,3691,3695,3700,3703,3714,3722,3725,3832,3836,3840,3845,3895,3900,3905,3929,3934,3987,3990,3995,4172,4177,4462,4467,4864,4868,4873,4930,4935,4943,4946,5086,5089,5198],[10,143,139],{"id":144},"_1基础入门",[146,147,149],"h2",{"id":148},"_11注释","1.1注释",[14,151,152],{},"\u002F\u002F或者\u002F* *\u002F",[146,154,156],{"id":155},"_12命名","1.2命名",[158,159,160,164,167],"ol",{},[161,162,163],"li",{},"字母数字下划线",[161,165,166],{},"开头必须是字母或_",[161,168,169],{},"不能使用关键词",[146,171,173],{"id":172},"_13数据类型","1.3数据类型",[175,176,178],"h3",{"id":177},"_131整形","1.3.1整形",[14,180,181],{},"short 短整形 2",[14,183,184],{},"int 整形 4",[14,186,187],{},"long 长整形 win4 linux32位4 linux64位8",[14,189,190],{},"long long 长长整形 8",[14,192,193],{},"利用sizeof可以求数据类型占用的内存空间大小",[27,195,199],{"className":196,"code":197,"language":198,"meta":32,"style":32},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[34,200,201,215],{"__ignoreMap":32},[37,202,203,206,209,212],{"class":39,"line":40},[37,204,205],{"class":50},"sizeof",[37,207,208],{"class":54},"(",[37,210,211],{"class":50},"int",[37,213,214],{"class":54},")\n",[37,216,217,219],{"class":39,"line":47},[37,218,205],{"class":50},[37,220,221],{"class":54},"(num)\n",[175,223,225],{"id":224},"_132浮点型","1.3.2浮点型",[14,227,228],{},"float 单精度 4节 7位有效数字",[14,230,231],{},"double 双精度 8节 15-16有效数字",[14,233,234],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,236,237],{},"注意点：",[27,239,241],{"className":196,"code":240,"language":198,"meta":32,"style":32},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[34,242,243,265],{"__ignoreMap":32},[37,244,245,248,251,253,256,259,262],{"class":39,"line":40},[37,246,247],{"class":50},"float",[37,249,250],{"class":54}," f1",[37,252,70],{"class":50},[37,254,255],{"class":82},"3.14",[37,257,258],{"class":50},"f",[37,260,261],{"class":54},";",[37,263,264],{"class":43}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[37,266,267,269,272,274,277,280,283,285],{"class":39,"line":47},[37,268,247],{"class":50},[37,270,271],{"class":54}," f2",[37,273,70],{"class":50},[37,275,276],{"class":82},"3",[37,278,279],{"class":50},"e",[37,281,282],{"class":82},"2",[37,284,261],{"class":54},[37,286,287],{"class":43}," \u002F\u002F科学记数法\n",[175,289,291],{"id":290},"_133字符型","1.3.3字符型",[27,293,295],{"className":196,"code":294,"language":198,"meta":32,"style":32},"char ch='a'\n",[34,296,297],{"__ignoreMap":32},[37,298,299,302,305,307],{"class":39,"line":40},[37,300,301],{"class":50},"char",[37,303,304],{"class":54}," ch",[37,306,70],{"class":50},[37,308,310],{"class":309},"sZZnC","'a'\n",[14,312,237],{},[158,314,315,318,321,324],{},[161,316,317],{},"在显示字符型变量时，只能单引号，双引号x",[161,319,320],{},"单引号内只能一个字符，不能字符串",[161,322,323],{},"c和c++字符型变量只占用一个字符",[161,325,326],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,328,329],{},"ASCII码大致由以下两部分组成：",[158,331,332,335],{},[161,333,334],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[161,336,337],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,339,340],{},"ASCII码表格：",[342,343,344,388],"table",{},[345,346,347],"thead",{},[348,349,350,358,363,367,372,376,380,384],"tr",{},[351,352,353,357],"th",{},[354,355,356],"strong",{},"ASCII","值",[351,359,360],{},[354,361,362],{},"控制字符",[351,364,365,357],{},[354,366,356],{},[351,368,369],{},[354,370,371],{},"字符",[351,373,374,357],{},[354,375,356],{},[351,377,378],{},[354,379,371],{},[351,381,382,357],{},[354,383,356],{},[351,385,386],{},[354,387,371],{},[389,390,391,418,444,469,494,520,545,570,596,621,646,672,698,723,748,774,800,824,849,874,899,924,949,974,999,1024,1049,1075,1100,1125,1150,1176],"tbody",{},[348,392,393,397,400,403,406,409,412,415],{},[394,395,396],"td",{},"0",[394,398,399],{},"NUT",[394,401,402],{},"32",[394,404,405],{},"(space)",[394,407,408],{},"64",[394,410,411],{},"@",[394,413,414],{},"96",[394,416,417],{},"、",[348,419,420,423,426,429,432,435,438,441],{},[394,421,422],{},"1",[394,424,425],{},"SOH",[394,427,428],{},"33",[394,430,431],{},"!",[394,433,434],{},"65",[394,436,437],{},"A",[394,439,440],{},"97",[394,442,443],{},"a",[348,445,446,448,451,454,457,460,463,466],{},[394,447,282],{},[394,449,450],{},"STX",[394,452,453],{},"34",[394,455,456],{},"\"",[394,458,459],{},"66",[394,461,462],{},"B",[394,464,465],{},"98",[394,467,468],{},"b",[348,470,471,473,476,479,482,485,488,491],{},[394,472,276],{},[394,474,475],{},"ETX",[394,477,478],{},"35",[394,480,481],{},"#",[394,483,484],{},"67",[394,486,487],{},"C",[394,489,490],{},"99",[394,492,493],{},"c",[348,495,496,499,502,505,508,511,514,517],{},[394,497,498],{},"4",[394,500,501],{},"EOT",[394,503,504],{},"36",[394,506,507],{},"$",[394,509,510],{},"68",[394,512,513],{},"D",[394,515,516],{},"100",[394,518,519],{},"d",[348,521,522,525,528,531,534,537,540,543],{},[394,523,524],{},"5",[394,526,527],{},"ENQ",[394,529,530],{},"37",[394,532,533],{},"%",[394,535,536],{},"69",[394,538,539],{},"E",[394,541,542],{},"101",[394,544,279],{},[348,546,547,550,553,556,559,562,565,568],{},[394,548,549],{},"6",[394,551,552],{},"ACK",[394,554,555],{},"38",[394,557,558],{},"&",[394,560,561],{},"70",[394,563,564],{},"F",[394,566,567],{},"102",[394,569,258],{},[348,571,572,575,578,581,584,587,590,593],{},[394,573,574],{},"7",[394,576,577],{},"BEL",[394,579,580],{},"39",[394,582,583],{},",",[394,585,586],{},"71",[394,588,589],{},"G",[394,591,592],{},"103",[394,594,595],{},"g",[348,597,598,601,604,607,609,612,615,618],{},[394,599,600],{},"8",[394,602,603],{},"BS",[394,605,606],{},"40",[394,608,208],{},[394,610,611],{},"72",[394,613,614],{},"H",[394,616,617],{},"104",[394,619,620],{},"h",[348,622,623,626,629,632,634,637,640,643],{},[394,624,625],{},"9",[394,627,628],{},"HT",[394,630,631],{},"41",[394,633,86],{},[394,635,636],{},"73",[394,638,639],{},"I",[394,641,642],{},"105",[394,644,645],{},"i",[348,647,648,651,654,657,660,663,666,669],{},[394,649,650],{},"10",[394,652,653],{},"LF",[394,655,656],{},"42",[394,658,659],{},"*",[394,661,662],{},"74",[394,664,665],{},"J",[394,667,668],{},"106",[394,670,671],{},"j",[348,673,674,677,680,683,686,689,692,695],{},[394,675,676],{},"11",[394,678,679],{},"VT",[394,681,682],{},"43",[394,684,685],{},"+",[394,687,688],{},"75",[394,690,691],{},"K",[394,693,694],{},"107",[394,696,697],{},"k",[348,699,700,703,706,709,711,714,717,720],{},[394,701,702],{},"12",[394,704,705],{},"FF",[394,707,708],{},"44",[394,710,583],{},[394,712,713],{},"76",[394,715,716],{},"L",[394,718,719],{},"108",[394,721,722],{},"l",[348,724,725,728,731,734,736,739,742,745],{},[394,726,727],{},"13",[394,729,730],{},"CR",[394,732,733],{},"45",[394,735,112],{},[394,737,738],{},"77",[394,740,741],{},"M",[394,743,744],{},"109",[394,746,747],{},"m",[348,749,750,753,756,759,762,765,768,771],{},[394,751,752],{},"14",[394,754,755],{},"SO",[394,757,758],{},"46",[394,760,761],{},".",[394,763,764],{},"78",[394,766,767],{},"N",[394,769,770],{},"110",[394,772,773],{},"n",[348,775,776,779,782,785,788,791,794,797],{},[394,777,778],{},"15",[394,780,781],{},"SI",[394,783,784],{},"47",[394,786,787],{},"\u002F",[394,789,790],{},"79",[394,792,793],{},"O",[394,795,796],{},"111",[394,798,799],{},"o",[348,801,802,805,808,811,813,816,819,822],{},[394,803,804],{},"16",[394,806,807],{},"DLE",[394,809,810],{},"48",[394,812,396],{},[394,814,815],{},"80",[394,817,818],{},"P",[394,820,821],{},"112",[394,823,14],{},[348,825,826,829,832,835,837,840,843,846],{},[394,827,828],{},"17",[394,830,831],{},"DCI",[394,833,834],{},"49",[394,836,422],{},[394,838,839],{},"81",[394,841,842],{},"Q",[394,844,845],{},"113",[394,847,848],{},"q",[348,850,851,854,857,860,862,865,868,871],{},[394,852,853],{},"18",[394,855,856],{},"DC2",[394,858,859],{},"50",[394,861,282],{},[394,863,864],{},"82",[394,866,867],{},"R",[394,869,870],{},"114",[394,872,873],{},"r",[348,875,876,879,882,885,887,890,893,896],{},[394,877,878],{},"19",[394,880,881],{},"DC3",[394,883,884],{},"51",[394,886,276],{},[394,888,889],{},"83",[394,891,892],{},"S",[394,894,895],{},"115",[394,897,898],{},"s",[348,900,901,904,907,910,912,915,918,921],{},[394,902,903],{},"20",[394,905,906],{},"DC4",[394,908,909],{},"52",[394,911,498],{},[394,913,914],{},"84",[394,916,917],{},"T",[394,919,920],{},"116",[394,922,923],{},"t",[348,925,926,929,932,935,937,940,943,946],{},[394,927,928],{},"21",[394,930,931],{},"NAK",[394,933,934],{},"53",[394,936,524],{},[394,938,939],{},"85",[394,941,942],{},"U",[394,944,945],{},"117",[394,947,948],{},"u",[348,950,951,954,957,960,962,965,968,971],{},[394,952,953],{},"22",[394,955,956],{},"SYN",[394,958,959],{},"54",[394,961,549],{},[394,963,964],{},"86",[394,966,967],{},"V",[394,969,970],{},"118",[394,972,973],{},"v",[348,975,976,979,982,985,987,990,993,996],{},[394,977,978],{},"23",[394,980,981],{},"TB",[394,983,984],{},"55",[394,986,574],{},[394,988,989],{},"87",[394,991,992],{},"W",[394,994,995],{},"119",[394,997,998],{},"w",[348,1000,1001,1004,1007,1010,1012,1015,1018,1021],{},[394,1002,1003],{},"24",[394,1005,1006],{},"CAN",[394,1008,1009],{},"56",[394,1011,600],{},[394,1013,1014],{},"88",[394,1016,1017],{},"X",[394,1019,1020],{},"120",[394,1022,1023],{},"x",[348,1025,1026,1029,1032,1035,1037,1040,1043,1046],{},[394,1027,1028],{},"25",[394,1030,1031],{},"EM",[394,1033,1034],{},"57",[394,1036,625],{},[394,1038,1039],{},"89",[394,1041,1042],{},"Y",[394,1044,1045],{},"121",[394,1047,1048],{},"y",[348,1050,1051,1054,1057,1060,1063,1066,1069,1072],{},[394,1052,1053],{},"26",[394,1055,1056],{},"SUB",[394,1058,1059],{},"58",[394,1061,1062],{},":",[394,1064,1065],{},"90",[394,1067,1068],{},"Z",[394,1070,1071],{},"122",[394,1073,1074],{},"z",[348,1076,1077,1080,1083,1086,1088,1091,1094,1097],{},[394,1078,1079],{},"27",[394,1081,1082],{},"ESC",[394,1084,1085],{},"59",[394,1087,261],{},[394,1089,1090],{},"91",[394,1092,1093],{},"[",[394,1095,1096],{},"123",[394,1098,1099],{},"{",[348,1101,1102,1105,1108,1111,1114,1117,1119,1122],{},[394,1103,1104],{},"28",[394,1106,1107],{},"FS",[394,1109,1110],{},"60",[394,1112,1113],{},"\u003C",[394,1115,1116],{},"92",[394,1118,787],{},[394,1120,1121],{},"124",[394,1123,1124],{},"|",[348,1126,1127,1130,1133,1136,1138,1141,1144,1147],{},[394,1128,1129],{},"29",[394,1131,1132],{},"GS",[394,1134,1135],{},"61",[394,1137,70],{},[394,1139,1140],{},"93",[394,1142,1143],{},"]",[394,1145,1146],{},"125",[394,1148,1149],{},"}",[348,1151,1152,1155,1158,1161,1164,1167,1170,1173],{},[394,1153,1154],{},"30",[394,1156,1157],{},"RS",[394,1159,1160],{},"62",[394,1162,1163],{},">",[394,1165,1166],{},"94",[394,1168,1169],{},"^",[394,1171,1172],{},"126",[394,1174,1175],{},"`",[348,1177,1178,1181,1184,1187,1190,1193,1196,1199],{},[394,1179,1180],{},"31",[394,1182,1183],{},"US",[394,1185,1186],{},"63",[394,1188,1189],{},"?",[394,1191,1192],{},"95",[394,1194,1195],{},"_",[394,1197,1198],{},"127",[394,1200,1201],{},"DEL",[14,1203,1204,1205,1208],{},"ASCII 码大致由以下",[354,1206,1207],{},"两部分组","成：",[1210,1211,1212,1219],"ul",{},[161,1213,1214,1215,1218],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[354,1216,1217],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[161,1220,1221,1222,1225],{},"ASCII 打印字符：数字 ",[354,1223,1224],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[175,1227,1229],{"id":1228},"_134转义字符","1.3.4转义字符",[27,1231,1233],{"className":196,"code":1232,"language":198,"meta":32,"style":32},"\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",[34,1234,1235,1240,1256,1270,1275,1288,1293],{"__ignoreMap":32},[37,1236,1237],{"class":39,"line":40},[37,1238,1239],{"class":43},"\u002F\u002F换行符\n",[37,1241,1242,1245,1248,1251,1253],{"class":39,"line":47},[37,1243,1244],{"class":54},"cout ",[37,1246,1247],{"class":50},"\u003C\u003C",[37,1249,1250],{"class":309},"\"hello world\u002Fn\"",[37,1252,261],{"class":54},[37,1254,1255],{"class":43}," \u002F\u002F就等同于如下：\n",[37,1257,1258,1260,1262,1265,1267],{"class":39,"line":58},[37,1259,1244],{"class":54},[37,1261,1247],{"class":50},[37,1263,1264],{"class":309},"\"hello world\"",[37,1266,1247],{"class":50},[37,1268,1269],{"class":54},"endl;\n",[37,1271,1272],{"class":39,"line":64},[37,1273,1274],{"class":43},"\u002F\u002F反斜杠\n",[37,1276,1277,1279,1281,1284,1286],{"class":39,"line":76},[37,1278,1244],{"class":54},[37,1280,1247],{"class":50},[37,1282,1283],{"class":309},"\"\u002F\u002F\"",[37,1285,1247],{"class":50},[37,1287,1269],{"class":54},[37,1289,1290],{"class":39,"line":92},[37,1291,1292],{"class":43},"\u002F\u002F水平制表符\n",[37,1294,1295,1297,1299,1302,1305,1308,1310,1313],{"class":39,"line":97},[37,1296,1244],{"class":54},[37,1298,1247],{"class":50},[37,1300,1301],{"class":309},"\"aaaa",[37,1303,1304],{"class":82},"\\t",[37,1306,1307],{"class":309},"helloworld\"",[37,1309,1247],{"class":50},[37,1311,1312],{"class":54},"endl;",[37,1314,1315],{"class":43}," \u002F\u002F输出窗口时有对齐效果\n",[175,1317,1319],{"id":1318},"_135字符串型","1.3.5字符串型",[14,1321,1322,1323,1325],{},"char 变量名",[37,1324],{},"=\"字符串值\"",[27,1327,1329],{"className":196,"code":1328,"language":198,"meta":32,"style":32},"\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",[34,1330,1331,1336,1341,1346,1351,1365,1378,1383,1388,1400],{"__ignoreMap":32},[37,1332,1333],{"class":39,"line":40},[37,1334,1335],{"class":43},"\u002F\u002Fc风格字符串\n",[37,1337,1338],{"class":39,"line":47},[37,1339,1340],{"class":43},"\u002F\u002F注意事项：\n",[37,1342,1343],{"class":39,"line":58},[37,1344,1345],{"class":43},"\u002F\u002F1.char字符串名[]\n",[37,1347,1348],{"class":39,"line":64},[37,1349,1350],{"class":43},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[37,1352,1353,1355,1358,1360,1362],{"class":39,"line":76},[37,1354,301],{"class":50},[37,1356,1357],{"class":54}," str[]",[37,1359,70],{"class":50},[37,1361,1264],{"class":309},[37,1363,1364],{"class":54},";\n",[37,1366,1367,1369,1371,1374,1376],{"class":39,"line":92},[37,1368,1244],{"class":54},[37,1370,1247],{"class":50},[37,1372,1373],{"class":54},"str",[37,1375,1247],{"class":50},[37,1377,1269],{"class":54},[37,1379,1380],{"class":39,"line":97},[37,1381,1382],{"class":43},"\u002F\u002Fc++风格字符串\n",[37,1384,1385],{"class":39,"line":107},[37,1386,1387],{"class":43},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[37,1389,1391,1394,1396,1398],{"class":39,"line":1390},9,[37,1392,1393],{"class":54},"string str2",[37,1395,70],{"class":50},[37,1397,1264],{"class":309},[37,1399,1364],{"class":54},[37,1401,1403,1405,1407,1410,1412],{"class":39,"line":1402},10,[37,1404,1244],{"class":54},[37,1406,1247],{"class":50},[37,1408,1409],{"class":54},"str2",[37,1411,1247],{"class":50},[37,1413,1269],{"class":54},[175,1415,1417],{"id":1416},"_136布尔类型bool","1.3.6布尔类型bool",[27,1419,1421],{"className":196,"code":1420,"language":198,"meta":32,"style":32},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[34,1422,1423,1438],{"__ignoreMap":32},[37,1424,1425,1428,1431,1433,1436],{"class":39,"line":40},[37,1426,1427],{"class":50},"bool",[37,1429,1430],{"class":54}," flag",[37,1432,70],{"class":50},[37,1434,1435],{"class":82},"true",[37,1437,1364],{"class":54},[37,1439,1440,1443,1446,1449,1451,1453],{"class":39,"line":47},[37,1441,1442],{"class":54},"cout",[37,1444,1445],{"class":50},"\u003C\u003Csizeof",[37,1447,1448],{"class":54},"(flag)",[37,1450,1247],{"class":50},[37,1452,1312],{"class":54},[37,1454,1455],{"class":43}," \u002F\u002F查看布尔占内存空间\n",[146,1457,1459],{"id":1458},"_14键盘输入cin","1.4键盘输入cin",[27,1461,1463],{"className":196,"code":1462,"language":198,"meta":32,"style":32},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[34,1464,1465,1478,1495,1506],{"__ignoreMap":32},[37,1466,1467,1469,1472,1474,1476],{"class":39,"line":40},[37,1468,211],{"class":50},[37,1470,1471],{"class":54}," a",[37,1473,70],{"class":50},[37,1475,396],{"class":82},[37,1477,1364],{"class":54},[37,1479,1480,1482,1484,1487,1489,1491,1493],{"class":39,"line":47},[37,1481,1442],{"class":54},[37,1483,1247],{"class":50},[37,1485,1486],{"class":309},"\"请给整型变量a赋值\"",[37,1488,1247],{"class":50},[37,1490,443],{"class":54},[37,1492,1247],{"class":50},[37,1494,1269],{"class":54},[37,1496,1497,1500,1503],{"class":39,"line":58},[37,1498,1499],{"class":54},"cin ",[37,1501,1502],{"class":50},">>",[37,1504,1505],{"class":54}," a;\n",[37,1507,1508,1510,1512,1515,1518,1520,1522],{"class":39,"line":64},[37,1509,1244],{"class":54},[37,1511,1247],{"class":50},[37,1513,1514],{"class":309}," \"整型变量a=\"",[37,1516,1517],{"class":50}," \u003C\u003C",[37,1519,443],{"class":54},[37,1521,1247],{"class":50},[37,1523,1269],{"class":54},[146,1525,1527],{"id":1526},"_15运算符","1.5运算符",[175,1529,1531],{"id":1530},"_151算术运算符","1.5.1算术运算符",[14,1533,1534,1537],{},[119,1535],{"alt":32,"src":1536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[158,1539,1540,1543,1546],{},[161,1541,1542],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[161,1544,1545],{},"两个小数不可以做取模运算",[161,1547,1548],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[175,1550,1552],{"id":1551},"_152赋值运算符","1.5.2赋值运算符",[14,1554,1555],{},[119,1556],{"alt":32,"src":1557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[175,1559,1561],{"id":1560},"_153比较运算符","1.5.3比较运算符",[14,1563,1564],{},[119,1565],{"alt":32,"src":1566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[175,1568,1570],{"id":1569},"_154逻辑运算符","1.5.4逻辑运算符",[14,1572,1573],{},[119,1574],{"alt":32,"src":1575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[146,1577,1579],{"id":1578},"_16程序流程结构","1.6程序流程结构",[175,1581,1583],{"id":1582},"_161选择结构","1.6.1选择结构",[158,1585,1586],{},[161,1587,1588],{},"if语句\n单行、多行、多条件if语句",[27,1590,1592],{"className":196,"code":1591,"language":198,"meta":32,"style":32},"\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",[34,1593,1594,1599,1614,1619,1633,1638,1643,1652,1665,1669,1682,1687,1693,1698,1712,1717,1723,1744,1749,1763,1768,1797,1802,1819,1824,1829,1834,1848,1853],{"__ignoreMap":32},[37,1595,1596],{"class":39,"line":40},[37,1597,1598],{"class":43},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[37,1600,1601,1604,1607,1609,1612],{"class":39,"line":47},[37,1602,1603],{"class":50},"if",[37,1605,1606],{"class":54},"(score",[37,1608,1163],{"class":50},[37,1610,1611],{"class":82},"600",[37,1613,214],{"class":54},[37,1615,1616],{"class":39,"line":58},[37,1617,1618],{"class":54},"{\n",[37,1620,1621,1624,1626,1629,1631],{"class":39,"line":64},[37,1622,1623],{"class":54},"    cout",[37,1625,1247],{"class":50},[37,1627,1628],{"class":309},"'这是单行if语句'",[37,1630,1247],{"class":50},[37,1632,1269],{"class":54},[37,1634,1635],{"class":39,"line":76},[37,1636,1637],{"class":54},"}\n",[37,1639,1640],{"class":39,"line":92},[37,1641,1642],{"class":43},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[37,1644,1645,1647,1649],{"class":39,"line":97},[37,1646,1499],{"class":54},[37,1648,1502],{"class":50},[37,1650,1651],{"class":54}," score\n",[37,1653,1654,1656,1658,1661,1663],{"class":39,"line":107},[37,1655,1603],{"class":50},[37,1657,1606],{"class":54},[37,1659,1660],{"class":50},"\u003C=",[37,1662,1611],{"class":82},[37,1664,214],{"class":54},[37,1666,1667],{"class":39,"line":1390},[37,1668,1618],{"class":54},[37,1670,1671,1673,1675,1678,1680],{"class":39,"line":1402},[37,1672,1623],{"class":54},[37,1674,1502],{"class":50},[37,1676,1677],{"class":309},"\"小于等于600\"",[37,1679,1247],{"class":50},[37,1681,1269],{"class":54},[37,1683,1685],{"class":39,"line":1684},11,[37,1686,1637],{"class":54},[37,1688,1690],{"class":39,"line":1689},12,[37,1691,1692],{"class":50},"else\n",[37,1694,1696],{"class":39,"line":1695},13,[37,1697,1618],{"class":54},[37,1699,1701,1703,1705,1708,1710],{"class":39,"line":1700},14,[37,1702,1623],{"class":54},[37,1704,1502],{"class":50},[37,1706,1707],{"class":309},"\"大于600\"",[37,1709,1502],{"class":50},[37,1711,1269],{"class":54},[37,1713,1715],{"class":39,"line":1714},15,[37,1716,1637],{"class":54},[37,1718,1720],{"class":39,"line":1719},16,[37,1721,1722],{"class":43},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[37,1724,1726,1728,1731,1733,1735,1738,1740,1742],{"class":39,"line":1725},17,[37,1727,1603],{"class":50},[37,1729,1730],{"class":54}," (",[37,1732,396],{"class":82},[37,1734,1113],{"class":50},[37,1736,1737],{"class":54},"num",[37,1739,1113],{"class":50},[37,1741,516],{"class":82},[37,1743,214],{"class":54},[37,1745,1747],{"class":39,"line":1746},18,[37,1748,1618],{"class":54},[37,1750,1752,1754,1756,1759,1761],{"class":39,"line":1751},19,[37,1753,1623],{"class":54},[37,1755,1247],{"class":50},[37,1757,1758],{"class":309},"\"小于100\"",[37,1760,1247],{"class":50},[37,1762,1269],{"class":54},[37,1764,1766],{"class":39,"line":1765},20,[37,1767,1637],{"class":54},[37,1769,1771,1774,1777,1780,1783,1785,1788,1790,1792,1795],{"class":39,"line":1770},21,[37,1772,1773],{"class":50},"else",[37,1775,1776],{"class":50}," if",[37,1778,1779],{"class":54}," (nmu",[37,1781,1782],{"class":50},">=",[37,1784,516],{"class":82},[37,1786,1787],{"class":50},"&&",[37,1789,1737],{"class":54},[37,1791,1113],{"class":50},[37,1793,1794],{"class":82},"200",[37,1796,214],{"class":54},[37,1798,1800],{"class":39,"line":1799},22,[37,1801,1618],{"class":54},[37,1803,1805,1807,1809,1812,1814,1816],{"class":39,"line":1804},23,[37,1806,1623],{"class":54},[37,1808,1247],{"class":50},[37,1810,1811],{"class":309},"\"不小于100且小于200\"",[37,1813,1247],{"class":50},[37,1815,1312],{"class":54},[37,1817,1818],{"class":43}," \u002F\u002F可以无限else if,python中是elif：\n",[37,1820,1822],{"class":39,"line":1821},24,[37,1823,1637],{"class":54},[37,1825,1827],{"class":39,"line":1826},25,[37,1828,1692],{"class":50},[37,1830,1832],{"class":39,"line":1831},26,[37,1833,1618],{"class":54},[37,1835,1837,1839,1841,1844,1846],{"class":39,"line":1836},27,[37,1838,1623],{"class":54},[37,1840,1247],{"class":50},[37,1842,1843],{"class":309},"\"不小于200\"",[37,1845,1247],{"class":50},[37,1847,1269],{"class":54},[37,1849,1851],{"class":39,"line":1850},28,[37,1852,1637],{"class":54},[37,1854,1856],{"class":39,"line":1855},29,[37,1857,1858],{"class":43},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[158,1860,1861],{"start":47},[161,1862,1863],{},"三目运算符",[27,1865,1867],{"className":196,"code":1866,"language":198,"meta":32,"style":32},"\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",[34,1868,1869,1874,1879,1905,1927,1944,1949,1972,1987],{"__ignoreMap":32},[37,1870,1871],{"class":39,"line":40},[37,1872,1873],{"class":43},"\u002F\u002F创建三个变量a,b,c\n",[37,1875,1876],{"class":39,"line":47},[37,1877,1878],{"class":43},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[37,1880,1881,1883,1885,1887,1889,1892,1894,1896,1899,1901,1903],{"class":39,"line":58},[37,1882,211],{"class":50},[37,1884,1471],{"class":54},[37,1886,70],{"class":50},[37,1888,903],{"class":82},[37,1890,1891],{"class":54},",b",[37,1893,70],{"class":50},[37,1895,650],{"class":82},[37,1897,1898],{"class":54},",c",[37,1900,70],{"class":50},[37,1902,396],{"class":82},[37,1904,1364],{"class":54},[37,1906,1907,1909,1911,1914,1916,1918,1920,1922,1924],{"class":39,"line":64},[37,1908,493],{"class":54},[37,1910,70],{"class":50},[37,1912,1913],{"class":54},"(a",[37,1915,1163],{"class":50},[37,1917,468],{"class":54},[37,1919,1189],{"class":50},[37,1921,443],{"class":54},[37,1923,1062],{"class":50},[37,1925,1926],{"class":54},"b)\n",[37,1928,1929,1931,1933,1936,1938,1940,1942],{"class":39,"line":76},[37,1930,1442],{"class":54},[37,1932,1247],{"class":50},[37,1934,1935],{"class":309},"\"c=\"",[37,1937,1247],{"class":50},[37,1939,493],{"class":54},[37,1941,1247],{"class":50},[37,1943,1269],{"class":54},[37,1945,1946],{"class":39,"line":92},[37,1947,1948],{"class":43},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[37,1950,1951,1953,1955,1957,1959,1961,1963,1966,1968,1970],{"class":39,"line":97},[37,1952,1913],{"class":54},[37,1954,1163],{"class":50},[37,1956,468],{"class":54},[37,1958,1189],{"class":50},[37,1960,443],{"class":54},[37,1962,1062],{"class":50},[37,1964,1965],{"class":54},"b)",[37,1967,70],{"class":50},[37,1969,516],{"class":82},[37,1971,1364],{"class":54},[37,1973,1974,1976,1978,1980,1982,1984],{"class":39,"line":107},[37,1975,1442],{"class":54},[37,1977,1247],{"class":50},[37,1979,443],{"class":54},[37,1981,1247],{"class":50},[37,1983,1312],{"class":54},[37,1985,1986],{"class":43}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[37,1988,1989,1991,1993,1995,1997,1999],{"class":39,"line":1390},[37,1990,1442],{"class":54},[37,1992,1247],{"class":50},[37,1994,468],{"class":54},[37,1996,1247],{"class":50},[37,1998,1312],{"class":54},[37,2000,2001],{"class":43}," \u002F\u002F10   a>b,b还是原值\n",[158,2003,2004],{"start":58},[161,2005,2006],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[27,2008,2010],{"className":196,"code":2009,"language":198,"meta":32,"style":32},"\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",[34,2011,2012,2017,2025,2039,2049,2053,2067,2080,2090,2098,2103,2128,2149,2171,2192,2214,2235,2255,2260],{"__ignoreMap":32},[37,2013,2014],{"class":39,"line":40},[37,2015,2016],{"class":43},"\u002F\u002F案例-电影打分\n",[37,2018,2019,2022],{"class":39,"line":47},[37,2020,2021],{"class":50},"#include",[37,2023,2024],{"class":309},"\u003Ciostream>\n",[37,2026,2027,2030,2033,2037],{"class":39,"line":58},[37,2028,2029],{"class":50},"using",[37,2031,2032],{"class":50}," namespace",[37,2034,2036],{"class":2035},"sScJk"," std",[37,2038,1364],{"class":54},[37,2040,2041,2043,2046],{"class":39,"line":64},[37,2042,211],{"class":50},[37,2044,2045],{"class":2035}," main",[37,2047,2048],{"class":54},"()\n",[37,2050,2051],{"class":39,"line":76},[37,2052,1618],{"class":54},[37,2054,2055,2058,2061,2063,2065],{"class":39,"line":92},[37,2056,2057],{"class":50},"    int",[37,2059,2060],{"class":54}," score",[37,2062,70],{"class":50},[37,2064,396],{"class":82},[37,2066,1364],{"class":54},[37,2068,2069,2071,2073,2076,2078],{"class":39,"line":97},[37,2070,1623],{"class":54},[37,2072,1247],{"class":50},[37,2074,2075],{"class":309},"\"电影打分：\"",[37,2077,1247],{"class":50},[37,2079,1269],{"class":54},[37,2081,2082,2085,2087],{"class":39,"line":107},[37,2083,2084],{"class":54},"    cin",[37,2086,1502],{"class":50},[37,2088,2089],{"class":54},"score;\n",[37,2091,2092,2095],{"class":39,"line":1390},[37,2093,2094],{"class":50},"    switch",[37,2096,2097],{"class":54},"(score)\n",[37,2099,2100],{"class":39,"line":1402},[37,2101,2102],{"class":54},"    {\n",[37,2104,2105,2108,2111,2114,2116,2119,2121,2123,2126],{"class":39,"line":1684},[37,2106,2107],{"class":50},"        case",[37,2109,2110],{"class":82}," 10",[37,2112,2113],{"class":54},":cout",[37,2115,1247],{"class":50},[37,2117,2118],{"class":309},"\"经典\"",[37,2120,1247],{"class":50},[37,2122,1312],{"class":54},[37,2124,2125],{"class":50},"break",[37,2127,1364],{"class":54},[37,2129,2130,2132,2135,2137,2139,2141,2143,2145,2147],{"class":39,"line":1689},[37,2131,2107],{"class":50},[37,2133,2134],{"class":82}," 9",[37,2136,2113],{"class":54},[37,2138,1247],{"class":50},[37,2140,2118],{"class":309},[37,2142,1247],{"class":50},[37,2144,1312],{"class":54},[37,2146,2125],{"class":50},[37,2148,1364],{"class":54},[37,2150,2151,2153,2156,2158,2160,2163,2165,2167,2169],{"class":39,"line":1695},[37,2152,2107],{"class":50},[37,2154,2155],{"class":82}," 8",[37,2157,2113],{"class":54},[37,2159,1247],{"class":50},[37,2161,2162],{"class":309},"\"非常好\"",[37,2164,1247],{"class":50},[37,2166,1312],{"class":54},[37,2168,2125],{"class":50},[37,2170,1364],{"class":54},[37,2172,2173,2175,2178,2180,2182,2184,2186,2188,2190],{"class":39,"line":1700},[37,2174,2107],{"class":50},[37,2176,2177],{"class":82}," 7",[37,2179,2113],{"class":54},[37,2181,1247],{"class":50},[37,2183,2162],{"class":309},[37,2185,1247],{"class":50},[37,2187,1312],{"class":54},[37,2189,2125],{"class":50},[37,2191,1364],{"class":54},[37,2193,2194,2196,2199,2201,2203,2206,2208,2210,2212],{"class":39,"line":1714},[37,2195,2107],{"class":50},[37,2197,2198],{"class":82}," 6",[37,2200,2113],{"class":54},[37,2202,1247],{"class":50},[37,2204,2205],{"class":309},"\"一般\"",[37,2207,1247],{"class":50},[37,2209,1312],{"class":54},[37,2211,2125],{"class":50},[37,2213,1364],{"class":54},[37,2215,2216,2218,2221,2223,2225,2227,2229,2231,2233],{"class":39,"line":1719},[37,2217,2107],{"class":50},[37,2219,2220],{"class":82}," 5",[37,2222,2113],{"class":54},[37,2224,1247],{"class":50},[37,2226,2205],{"class":309},[37,2228,1247],{"class":50},[37,2230,1312],{"class":54},[37,2232,2125],{"class":50},[37,2234,1364],{"class":54},[37,2236,2237,2240,2242,2244,2247,2249,2251,2253],{"class":39,"line":1725},[37,2238,2239],{"class":50},"        default",[37,2241,2113],{"class":54},[37,2243,1247],{"class":50},[37,2245,2246],{"class":309},"\"烂片\"",[37,2248,1247],{"class":50},[37,2250,1312],{"class":54},[37,2252,2125],{"class":50},[37,2254,1364],{"class":54},[37,2256,2257],{"class":39,"line":1746},[37,2258,2259],{"class":54},"    }\n",[37,2261,2262],{"class":39,"line":1751},[37,2263,1637],{"class":54},[14,2265,2266],{},"if和switch区别：",[1210,2268,2269,2272],{},[161,2270,2271],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[161,2273,2274],{},"switch优点：结构清晰，执行效率高",[175,2276,2278],{"id":2277},"_162循环结构","1.6.2循环结构",[158,2280,2281],{},[161,2282,2283],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[27,2285,2287],{"className":196,"code":2286,"language":198,"meta":32,"style":32},"\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",[34,2288,2289,2294,2302,2306,2319,2333,2337,2357,2367,2371,2383],{"__ignoreMap":32},[37,2290,2291],{"class":39,"line":40},[37,2292,2293],{"class":43},"\u002F\u002F打印0-9数字\n",[37,2295,2296,2298,2300],{"class":39,"line":47},[37,2297,211],{"class":50},[37,2299,2045],{"class":2035},[37,2301,2048],{"class":54},[37,2303,2304],{"class":39,"line":58},[37,2305,1618],{"class":54},[37,2307,2308,2310,2313,2315,2317],{"class":39,"line":64},[37,2309,2057],{"class":50},[37,2311,2312],{"class":54}," num",[37,2314,70],{"class":50},[37,2316,396],{"class":82},[37,2318,1364],{"class":54},[37,2320,2321,2324,2327,2329,2331],{"class":39,"line":76},[37,2322,2323],{"class":50},"    while",[37,2325,2326],{"class":54},"(num",[37,2328,1113],{"class":50},[37,2330,650],{"class":82},[37,2332,214],{"class":54},[37,2334,2335],{"class":39,"line":92},[37,2336,2102],{"class":54},[37,2338,2339,2342,2345,2347,2349,2351,2354],{"class":39,"line":97},[37,2340,2341],{"class":2035},"       std",[37,2343,2344],{"class":54},"::cout",[37,2346,1247],{"class":50},[37,2348,1737],{"class":54},[37,2350,1247],{"class":50},[37,2352,2353],{"class":2035},"std",[37,2355,2356],{"class":54},"::endl;\n",[37,2358,2359,2362,2365],{"class":39,"line":107},[37,2360,2361],{"class":54},"        num",[37,2363,2364],{"class":50},"++",[37,2366,1364],{"class":54},[37,2368,2369],{"class":39,"line":1390},[37,2370,2259],{"class":54},[37,2372,2373,2376,2378,2381],{"class":39,"line":1402},[37,2374,2375],{"class":2035},"    system",[37,2377,208],{"class":54},[37,2379,2380],{"class":309},"\"pause\"",[37,2382,214],{"class":54},[37,2384,2385],{"class":39,"line":1684},[37,2386,1637],{"class":54},[14,2388,2389],{},"注意：写好循环条件，避免死循环情况",[27,2391,2393],{"className":196,"code":2392,"language":198,"meta":32,"style":32},"\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",[34,2394,2395,2400,2407,2414,2424,2432,2436,2441,2468,2473,2478,2486,2513,2518,2523,2536,2546,2550,2560,2565,2578,2583,2597,2602,2617,2621,2634,2638,2643,2647,2661,2669,2674,2680,2686,2691],{"__ignoreMap":32},[37,2396,2397],{"class":39,"line":40},[37,2398,2399],{"class":43},"\u002F\u002F循环结构-猜数字\n",[37,2401,2402,2404],{"class":39,"line":47},[37,2403,2021],{"class":50},[37,2405,2406],{"class":309}," \u003Ciostream>\n",[37,2408,2409,2411],{"class":39,"line":58},[37,2410,2021],{"class":50},[37,2412,2413],{"class":309}," \u003Cctime>\n",[37,2415,2416,2418,2420,2422],{"class":39,"line":64},[37,2417,2029],{"class":50},[37,2419,2032],{"class":50},[37,2421,2036],{"class":2035},[37,2423,1364],{"class":54},[37,2425,2426,2428,2430],{"class":39,"line":76},[37,2427,211],{"class":50},[37,2429,2045],{"class":2035},[37,2431,2048],{"class":54},[37,2433,2434],{"class":39,"line":92},[37,2435,1618],{"class":54},[37,2437,2438],{"class":39,"line":97},[37,2439,2440],{"class":43},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[37,2442,2443,2446,2449,2452,2455,2457,2460,2462,2465],{"class":39,"line":107},[37,2444,2445],{"class":2035},"    srand",[37,2447,2448],{"class":54},"((",[37,2450,2451],{"class":50},"unsigned",[37,2453,2454],{"class":50}," int",[37,2456,86],{"class":54},[37,2458,2459],{"class":2035},"time",[37,2461,208],{"class":54},[37,2463,2464],{"class":82},"NULL",[37,2466,2467],{"class":54},"));\n",[37,2469,2470],{"class":39,"line":1390},[37,2471,2472],{"emptyLinePlaceholder":131},"\n",[37,2474,2475],{"class":39,"line":1402},[37,2476,2477],{"class":43},"    \u002F\u002F1.系统生成随机数\n",[37,2479,2480,2483],{"class":39,"line":1684},[37,2481,2482],{"class":43},"    \u002F\u002Frand()%100",[37,2484,2485],{"class":43}," \u002F\u002F生成0-99的随机数\n",[37,2487,2488,2490,2492,2494,2497,2500,2502,2504,2506,2508,2510],{"class":39,"line":1689},[37,2489,2057],{"class":50},[37,2491,2312],{"class":54},[37,2493,70],{"class":50},[37,2495,2496],{"class":2035},"rand",[37,2498,2499],{"class":54},"()",[37,2501,533],{"class":50},[37,2503,516],{"class":82},[37,2505,685],{"class":50},[37,2507,422],{"class":82},[37,2509,261],{"class":54},[37,2511,2512],{"class":43}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[37,2514,2515],{"class":39,"line":1695},[37,2516,2517],{"class":43},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[37,2519,2520],{"class":39,"line":1700},[37,2521,2522],{"class":43},"    \u002F\u002F2.玩家猜测\n",[37,2524,2525,2527,2530,2532,2534],{"class":39,"line":1714},[37,2526,2057],{"class":50},[37,2528,2529],{"class":54}," val",[37,2531,70],{"class":50},[37,2533,396],{"class":82},[37,2535,1364],{"class":54},[37,2537,2538,2540,2542,2544],{"class":39,"line":1719},[37,2539,2323],{"class":50},[37,2541,1730],{"class":54},[37,2543,422],{"class":82},[37,2545,214],{"class":54},[37,2547,2548],{"class":39,"line":1725},[37,2549,2102],{"class":54},[37,2551,2552,2555,2557],{"class":39,"line":1746},[37,2553,2554],{"class":54},"        cin",[37,2556,1502],{"class":50},[37,2558,2559],{"class":54},"val;\n",[37,2561,2562],{"class":39,"line":1751},[37,2563,2564],{"class":43},"        \u002F\u002F3.判断玩家猜测\n",[37,2566,2567,2570,2573,2575],{"class":39,"line":1765},[37,2568,2569],{"class":50},"        if",[37,2571,2572],{"class":54},"(val",[37,2574,1113],{"class":50},[37,2576,2577],{"class":54},"num) \n",[37,2579,2580],{"class":39,"line":1770},[37,2581,2582],{"class":54},"        {\n",[37,2584,2585,2588,2590,2593,2595],{"class":39,"line":1799},[37,2586,2587],{"class":54},"            cout",[37,2589,1247],{"class":50},[37,2591,2592],{"class":309},"\"猜小了！\"",[37,2594,1247],{"class":50},[37,2596,1269],{"class":54},[37,2598,2599],{"class":39,"line":1804},[37,2600,2601],{"class":54},"        }\n",[37,2603,2604,2607,2609,2612,2614],{"class":39,"line":1821},[37,2605,2606],{"class":50},"        else",[37,2608,1776],{"class":50},[37,2610,2611],{"class":54}," (val",[37,2613,1163],{"class":50},[37,2615,2616],{"class":54},"num)\n",[37,2618,2619],{"class":39,"line":1826},[37,2620,2582],{"class":54},[37,2622,2623,2625,2627,2630,2632],{"class":39,"line":1831},[37,2624,2587],{"class":54},[37,2626,1247],{"class":50},[37,2628,2629],{"class":309},"\"猜大了！\"",[37,2631,1247],{"class":50},[37,2633,1269],{"class":54},[37,2635,2636],{"class":39,"line":1836},[37,2637,2601],{"class":54},[37,2639,2640],{"class":39,"line":1850},[37,2641,2642],{"class":50},"        else\n",[37,2644,2645],{"class":39,"line":1855},[37,2646,2582],{"class":54},[37,2648,2650,2652,2654,2657,2659],{"class":39,"line":2649},30,[37,2651,2587],{"class":54},[37,2653,1247],{"class":50},[37,2655,2656],{"class":309},"\"猜对了！\"",[37,2658,1247],{"class":50},[37,2660,1269],{"class":54},[37,2662,2664,2667],{"class":39,"line":2663},31,[37,2665,2666],{"class":50},"            break",[37,2668,1364],{"class":54},[37,2670,2672],{"class":39,"line":2671},32,[37,2673,2601],{"class":54},[37,2675,2677],{"class":39,"line":2676},33,[37,2678,2679],{"class":43},"        \u002F\u002F猜对 退出游戏\n",[37,2681,2683],{"class":39,"line":2682},34,[37,2684,2685],{"class":43},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[37,2687,2689],{"class":39,"line":2688},35,[37,2690,2259],{"class":54},[37,2692,2694],{"class":39,"line":2693},36,[37,2695,1637],{"class":54},[158,2697,2698],{"start":47},[161,2699,2700,2701,2704],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[354,2702,2703],{},"do...while会先执行一次循环语句","，在判断循环语句",[27,2706,2708],{"className":196,"code":2707,"language":198,"meta":32,"style":32},"\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",[34,2709,2710,2715,2723,2727,2739,2747,2751,2768,2775,2779,2792,2802],{"__ignoreMap":32},[37,2711,2712],{"class":39,"line":40},[37,2713,2714],{"class":43},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[37,2716,2717,2719,2721],{"class":39,"line":47},[37,2718,211],{"class":50},[37,2720,2045],{"class":2035},[37,2722,2048],{"class":54},[37,2724,2725],{"class":39,"line":58},[37,2726,1618],{"class":54},[37,2728,2729,2731,2733,2735,2737],{"class":39,"line":64},[37,2730,2057],{"class":50},[37,2732,2312],{"class":54},[37,2734,70],{"class":50},[37,2736,396],{"class":82},[37,2738,1364],{"class":54},[37,2740,2741,2744],{"class":39,"line":76},[37,2742,2743],{"class":50},"    do",[37,2745,2746],{"class":54}," \n",[37,2748,2749],{"class":39,"line":92},[37,2750,2102],{"class":54},[37,2752,2753,2756,2758,2760,2762,2764,2766],{"class":39,"line":97},[37,2754,2755],{"class":2035},"        std",[37,2757,2344],{"class":54},[37,2759,1247],{"class":50},[37,2761,1737],{"class":54},[37,2763,1247],{"class":50},[37,2765,2353],{"class":2035},[37,2767,2356],{"class":54},[37,2769,2770,2772],{"class":39,"line":107},[37,2771,2361],{"class":54},[37,2773,2774],{"class":50},"++\n",[37,2776,2777],{"class":39,"line":1390},[37,2778,2259],{"class":54},[37,2780,2781,2783,2785,2787,2789],{"class":39,"line":1402},[37,2782,2323],{"class":50},[37,2784,2326],{"class":54},[37,2786,1113],{"class":50},[37,2788,650],{"class":82},[37,2790,2791],{"class":54},");\n",[37,2793,2794,2796,2798,2800],{"class":39,"line":1684},[37,2795,2375],{"class":2035},[37,2797,208],{"class":54},[37,2799,2380],{"class":309},[37,2801,2791],{"class":54},[37,2803,2804],{"class":39,"line":1689},[37,2805,1637],{"class":54},[14,2807,2808],{},"案例-水仙花数",[14,2810,2811],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,2813,2814],{},"例如：1^3+5^3+3^3=153",[14,2816,2817],{},"请用do...while语句，求出所有3位数的水仙花数",[27,2819,2821],{"className":196,"code":2820,"language":198,"meta":32,"style":32},"#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",[34,2822,2823,2829,2839,2847,2851,2856,2868,2874,2878,2883,2899,2915,2931,2946,2965,2980,3028,3032,3044,3048,3056,3060,3074],{"__ignoreMap":32},[37,2824,2825,2827],{"class":39,"line":40},[37,2826,2021],{"class":50},[37,2828,2406],{"class":309},[37,2830,2831,2833,2835,2837],{"class":39,"line":47},[37,2832,2029],{"class":50},[37,2834,2032],{"class":50},[37,2836,2036],{"class":2035},[37,2838,1364],{"class":54},[37,2840,2841,2843,2845],{"class":39,"line":58},[37,2842,211],{"class":50},[37,2844,2045],{"class":2035},[37,2846,2048],{"class":54},[37,2848,2849],{"class":39,"line":64},[37,2850,1618],{"class":54},[37,2852,2853],{"class":39,"line":76},[37,2854,2855],{"class":43},"    \u002F\u002F1.先打印所有三位数字\n",[37,2857,2858,2860,2862,2864,2866],{"class":39,"line":92},[37,2859,2057],{"class":50},[37,2861,2312],{"class":54},[37,2863,70],{"class":50},[37,2865,516],{"class":82},[37,2867,1364],{"class":54},[37,2869,2870,2872],{"class":39,"line":97},[37,2871,2743],{"class":50},[37,2873,2746],{"class":54},[37,2875,2876],{"class":39,"line":107},[37,2877,2102],{"class":54},[37,2879,2880],{"class":39,"line":1390},[37,2881,2882],{"class":43},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[37,2884,2885,2888,2890,2892,2894,2896],{"class":39,"line":1402},[37,2886,2887],{"class":50},"        int",[37,2889,1471],{"class":54},[37,2891,70],{"class":50},[37,2893,396],{"class":82},[37,2895,261],{"class":54},[37,2897,2898],{"class":43}," \u002F\u002F个位\n",[37,2900,2901,2903,2906,2908,2910,2912],{"class":39,"line":1684},[37,2902,2887],{"class":50},[37,2904,2905],{"class":54}," b",[37,2907,70],{"class":50},[37,2909,396],{"class":82},[37,2911,261],{"class":54},[37,2913,2914],{"class":43}," \u002F\u002F十位\n",[37,2916,2917,2919,2922,2924,2926,2928],{"class":39,"line":1689},[37,2918,2887],{"class":50},[37,2920,2921],{"class":54}," c",[37,2923,70],{"class":50},[37,2925,396],{"class":82},[37,2927,261],{"class":54},[37,2929,2930],{"class":43}," \u002F\u002F百位\n",[37,2932,2933,2936,2938,2940,2942,2944],{"class":39,"line":1695},[37,2934,2935],{"class":54},"        a",[37,2937,70],{"class":50},[37,2939,1737],{"class":54},[37,2941,533],{"class":50},[37,2943,650],{"class":82},[37,2945,1364],{"class":54},[37,2947,2948,2951,2953,2955,2957,2959,2961,2963],{"class":39,"line":1700},[37,2949,2950],{"class":54},"        b",[37,2952,70],{"class":50},[37,2954,1737],{"class":54},[37,2956,787],{"class":50},[37,2958,650],{"class":82},[37,2960,533],{"class":50},[37,2962,650],{"class":82},[37,2964,1364],{"class":54},[37,2966,2967,2970,2972,2974,2976,2978],{"class":39,"line":1714},[37,2968,2969],{"class":54},"        c",[37,2971,70],{"class":50},[37,2973,1737],{"class":54},[37,2975,787],{"class":50},[37,2977,516],{"class":82},[37,2979,1364],{"class":54},[37,2981,2982,2984,2986,2988,2990,2992,2994,2996,2998,3000,3002,3004,3006,3008,3010,3012,3014,3016,3019,3022,3025],{"class":39,"line":1719},[37,2983,2569],{"class":50},[37,2985,1913],{"class":54},[37,2987,659],{"class":50},[37,2989,443],{"class":54},[37,2991,659],{"class":50},[37,2993,443],{"class":54},[37,2995,685],{"class":50},[37,2997,468],{"class":54},[37,2999,659],{"class":50},[37,3001,468],{"class":54},[37,3003,659],{"class":50},[37,3005,468],{"class":54},[37,3007,685],{"class":50},[37,3009,493],{"class":54},[37,3011,659],{"class":50},[37,3013,493],{"class":54},[37,3015,659],{"class":50},[37,3017,3018],{"class":54},"c ",[37,3020,3021],{"class":50},"==",[37,3023,3024],{"class":54}," num)",[37,3026,3027],{"class":43}," \u002F\u002F如果是水仙花数，才打印\n",[37,3029,3030],{"class":39,"line":1725},[37,3031,2582],{"class":54},[37,3033,3034,3036,3038,3040,3042],{"class":39,"line":1746},[37,3035,2587],{"class":54},[37,3037,1247],{"class":50},[37,3039,1737],{"class":54},[37,3041,1247],{"class":50},[37,3043,1269],{"class":54},[37,3045,3046],{"class":39,"line":1751},[37,3047,2601],{"class":54},[37,3049,3050,3052,3054],{"class":39,"line":1765},[37,3051,2361],{"class":54},[37,3053,2364],{"class":50},[37,3055,1364],{"class":54},[37,3057,3058],{"class":39,"line":1770},[37,3059,2259],{"class":54},[37,3061,3062,3064,3067,3069,3072],{"class":39,"line":1799},[37,3063,2323],{"class":50},[37,3065,3066],{"class":54}," (num ",[37,3068,1113],{"class":50},[37,3070,3071],{"class":82}," 1000",[37,3073,2791],{"class":54},[37,3075,3076],{"class":39,"line":1804},[37,3077,1637],{"class":54},[158,3079,3080],{"start":58},[161,3081,3082],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[27,3084,3086],{"className":196,"code":3085,"language":198,"meta":32,"style":32},"\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",[34,3087,3088,3093,3122,3126,3138,3142,3147,3158,3165,3169,3183,3187,3194,3198,3210,3219],{"__ignoreMap":32},[37,3089,3090],{"class":39,"line":40},[37,3091,3092],{"class":43},"\u002F\u002F从数字0-9打印\n",[37,3094,3095,3098,3100,3102,3105,3107,3109,3112,3114,3116,3118,3120],{"class":39,"line":47},[37,3096,3097],{"class":50},"for",[37,3099,208],{"class":54},[37,3101,211],{"class":50},[37,3103,3104],{"class":54}," i",[37,3106,70],{"class":50},[37,3108,396],{"class":82},[37,3110,3111],{"class":54},";i",[37,3113,1113],{"class":50},[37,3115,650],{"class":82},[37,3117,3111],{"class":54},[37,3119,2364],{"class":50},[37,3121,214],{"class":54},[37,3123,3124],{"class":39,"line":58},[37,3125,1618],{"class":54},[37,3127,3128,3130,3132,3134,3136],{"class":39,"line":64},[37,3129,1623],{"class":54},[37,3131,1247],{"class":50},[37,3133,645],{"class":54},[37,3135,1247],{"class":50},[37,3137,1269],{"class":54},[37,3139,3140],{"class":39,"line":76},[37,3141,1637],{"class":54},[37,3143,3144],{"class":39,"line":92},[37,3145,3146],{"class":43},"\u002F\u002F上式可以进行拆分\n",[37,3148,3149,3151,3153,3155],{"class":39,"line":97},[37,3150,211],{"class":50},[37,3152,3104],{"class":54},[37,3154,70],{"class":50},[37,3156,3157],{"class":82},"0\n",[37,3159,3160,3162],{"class":39,"line":107},[37,3161,3097],{"class":50},[37,3163,3164],{"class":54},"(;;;)\n",[37,3166,3167],{"class":39,"line":1390},[37,3168,1618],{"class":54},[37,3170,3171,3174,3177,3179,3181],{"class":39,"line":1402},[37,3172,3173],{"class":50},"    if",[37,3175,3176],{"class":54},"(i",[37,3178,1782],{"class":50},[37,3180,650],{"class":82},[37,3182,214],{"class":54},[37,3184,3185],{"class":39,"line":1684},[37,3186,2102],{"class":54},[37,3188,3189,3192],{"class":39,"line":1689},[37,3190,3191],{"class":50},"        break",[37,3193,1364],{"class":54},[37,3195,3196],{"class":39,"line":1695},[37,3197,2259],{"class":54},[37,3199,3200,3202,3204,3206,3208],{"class":39,"line":1700},[37,3201,1623],{"class":54},[37,3203,1247],{"class":50},[37,3205,645],{"class":54},[37,3207,1247],{"class":50},[37,3209,1269],{"class":54},[37,3211,3212,3215,3217],{"class":39,"line":1714},[37,3213,3214],{"class":54},"    i",[37,3216,2364],{"class":50},[37,3218,1364],{"class":54},[37,3220,3221],{"class":39,"line":1719},[37,3222,1637],{"class":54},[14,3224,3225],{},"小练习",[27,3227,3229],{"className":196,"code":3228,"language":198,"meta":32,"style":32},"#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",[34,3230,3231,3237,3247,3255,3259,3264,3269,3297,3301,3306,3311,3352,3356,3369,3373,3377,3381,3393,3397,3401],{"__ignoreMap":32},[37,3232,3233,3235],{"class":39,"line":40},[37,3234,2021],{"class":50},[37,3236,2024],{"class":309},[37,3238,3239,3241,3243,3245],{"class":39,"line":47},[37,3240,2029],{"class":50},[37,3242,2032],{"class":50},[37,3244,2036],{"class":2035},[37,3246,1364],{"class":54},[37,3248,3249,3251,3253],{"class":39,"line":58},[37,3250,211],{"class":50},[37,3252,2045],{"class":2035},[37,3254,2048],{"class":54},[37,3256,3257],{"class":39,"line":64},[37,3258,1618],{"class":54},[37,3260,3261],{"class":39,"line":76},[37,3262,3263],{"class":43},"    \u002F\u002F敲桌子案例\n",[37,3265,3266],{"class":39,"line":92},[37,3267,3268],{"class":43},"    \u002F\u002F1.先输出1-100的数字\n",[37,3270,3271,3274,3276,3278,3280,3282,3284,3287,3289,3291,3293,3295],{"class":39,"line":97},[37,3272,3273],{"class":50},"    for",[37,3275,208],{"class":54},[37,3277,211],{"class":50},[37,3279,3104],{"class":54},[37,3281,70],{"class":50},[37,3283,422],{"class":82},[37,3285,3286],{"class":54},"; i",[37,3288,1660],{"class":50},[37,3290,516],{"class":82},[37,3292,3286],{"class":54},[37,3294,2364],{"class":50},[37,3296,214],{"class":54},[37,3298,3299],{"class":39,"line":107},[37,3300,2102],{"class":54},[37,3302,3303],{"class":39,"line":1390},[37,3304,3305],{"class":43},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[37,3307,3308],{"class":39,"line":1402},[37,3309,3310],{"class":43},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[37,3312,3313,3315,3317,3319,3321,3323,3325,3328,3330,3332,3334,3336,3338,3340,3342,3344,3346,3348,3350],{"class":39,"line":1684},[37,3314,2569],{"class":50},[37,3316,3176],{"class":54},[37,3318,533],{"class":50},[37,3320,574],{"class":82},[37,3322,3021],{"class":50},[37,3324,396],{"class":82},[37,3326,3327],{"class":50}," ||",[37,3329,3104],{"class":54},[37,3331,533],{"class":50},[37,3333,650],{"class":82},[37,3335,3021],{"class":50},[37,3337,574],{"class":82},[37,3339,3327],{"class":50},[37,3341,3104],{"class":54},[37,3343,787],{"class":50},[37,3345,650],{"class":82},[37,3347,3021],{"class":50},[37,3349,574],{"class":82},[37,3351,214],{"class":54},[37,3353,3354],{"class":39,"line":1689},[37,3355,2582],{"class":54},[37,3357,3358,3360,3362,3365,3367],{"class":39,"line":1695},[37,3359,2587],{"class":54},[37,3361,1247],{"class":50},[37,3363,3364],{"class":309},"\"敲桌子\"",[37,3366,1247],{"class":50},[37,3368,1269],{"class":54},[37,3370,3371],{"class":39,"line":1700},[37,3372,2601],{"class":54},[37,3374,3375],{"class":39,"line":1714},[37,3376,2642],{"class":50},[37,3378,3379],{"class":39,"line":1719},[37,3380,2582],{"class":54},[37,3382,3383,3385,3387,3389,3391],{"class":39,"line":1725},[37,3384,2587],{"class":54},[37,3386,1247],{"class":50},[37,3388,645],{"class":54},[37,3390,1247],{"class":50},[37,3392,1269],{"class":54},[37,3394,3395],{"class":39,"line":1746},[37,3396,2601],{"class":54},[37,3398,3399],{"class":39,"line":1751},[37,3400,2259],{"class":54},[37,3402,3403],{"class":39,"line":1765},[37,3404,1637],{"class":54},[14,3406,3407],{},"嵌套实现星图",[27,3409,3411],{"className":196,"code":3410,"language":198,"meta":32,"style":32},"#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",[34,3412,3413,3419,3429,3437,3441,3467,3471,3500,3504,3515,3519,3528,3532],{"__ignoreMap":32},[37,3414,3415,3417],{"class":39,"line":40},[37,3416,2021],{"class":50},[37,3418,2024],{"class":309},[37,3420,3421,3423,3425,3427],{"class":39,"line":47},[37,3422,2029],{"class":50},[37,3424,2032],{"class":50},[37,3426,2036],{"class":2035},[37,3428,1364],{"class":54},[37,3430,3431,3433,3435],{"class":39,"line":58},[37,3432,211],{"class":50},[37,3434,2045],{"class":2035},[37,3436,2048],{"class":54},[37,3438,3439],{"class":39,"line":64},[37,3440,1618],{"class":54},[37,3442,3443,3445,3447,3449,3451,3453,3455,3457,3459,3461,3463,3465],{"class":39,"line":76},[37,3444,3273],{"class":50},[37,3446,1730],{"class":54},[37,3448,211],{"class":50},[37,3450,3104],{"class":54},[37,3452,70],{"class":50},[37,3454,396],{"class":82},[37,3456,3111],{"class":54},[37,3458,1113],{"class":50},[37,3460,650],{"class":82},[37,3462,3111],{"class":54},[37,3464,2364],{"class":50},[37,3466,214],{"class":54},[37,3468,3469],{"class":39,"line":92},[37,3470,2102],{"class":54},[37,3472,3473,3476,3478,3480,3483,3485,3487,3490,3492,3494,3496,3498],{"class":39,"line":97},[37,3474,3475],{"class":50},"        for",[37,3477,1730],{"class":54},[37,3479,211],{"class":50},[37,3481,3482],{"class":54}," j",[37,3484,70],{"class":50},[37,3486,396],{"class":82},[37,3488,3489],{"class":54},";j",[37,3491,1113],{"class":50},[37,3493,650],{"class":82},[37,3495,3489],{"class":54},[37,3497,2364],{"class":50},[37,3499,214],{"class":54},[37,3501,3502],{"class":39,"line":107},[37,3503,2582],{"class":54},[37,3505,3506,3508,3510,3513],{"class":39,"line":1390},[37,3507,2587],{"class":54},[37,3509,1247],{"class":50},[37,3511,3512],{"class":309},"\"*\"",[37,3514,1364],{"class":54},[37,3516,3517],{"class":39,"line":1402},[37,3518,2601],{"class":54},[37,3520,3521,3524,3526],{"class":39,"line":1684},[37,3522,3523],{"class":54},"        cout",[37,3525,1247],{"class":50},[37,3527,1269],{"class":54},[37,3529,3530],{"class":39,"line":1689},[37,3531,2259],{"class":54},[37,3533,3534],{"class":39,"line":1695},[37,3535,1637],{"class":54},[14,3537,3538],{},"乘法口诀表",[27,3540,3542],{"className":196,"code":3541,"language":198,"meta":32,"style":32},"#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",[34,3543,3544,3550,3560,3568,3572,3598,3602,3627,3631,3671,3675,3683,3687],{"__ignoreMap":32},[37,3545,3546,3548],{"class":39,"line":40},[37,3547,2021],{"class":50},[37,3549,2406],{"class":309},[37,3551,3552,3554,3556,3558],{"class":39,"line":47},[37,3553,2029],{"class":50},[37,3555,2032],{"class":50},[37,3557,2036],{"class":2035},[37,3559,1364],{"class":54},[37,3561,3562,3564,3566],{"class":39,"line":58},[37,3563,211],{"class":50},[37,3565,2045],{"class":2035},[37,3567,2048],{"class":54},[37,3569,3570],{"class":39,"line":64},[37,3571,1618],{"class":54},[37,3573,3574,3576,3578,3580,3582,3584,3586,3588,3590,3592,3594,3596],{"class":39,"line":76},[37,3575,3273],{"class":50},[37,3577,208],{"class":54},[37,3579,211],{"class":50},[37,3581,3104],{"class":54},[37,3583,70],{"class":50},[37,3585,422],{"class":82},[37,3587,3111],{"class":54},[37,3589,1113],{"class":50},[37,3591,650],{"class":82},[37,3593,3111],{"class":54},[37,3595,2364],{"class":50},[37,3597,214],{"class":54},[37,3599,3600],{"class":39,"line":92},[37,3601,2102],{"class":54},[37,3603,3604,3606,3608,3610,3612,3614,3616,3618,3620,3623,3625],{"class":39,"line":97},[37,3605,3475],{"class":50},[37,3607,208],{"class":54},[37,3609,211],{"class":50},[37,3611,3482],{"class":54},[37,3613,70],{"class":50},[37,3615,422],{"class":82},[37,3617,3489],{"class":54},[37,3619,1660],{"class":50},[37,3621,3622],{"class":54},"i;j",[37,3624,2364],{"class":50},[37,3626,214],{"class":54},[37,3628,3629],{"class":39,"line":107},[37,3630,2582],{"class":54},[37,3632,3633,3635,3637,3639,3641,3643,3645,3647,3649,3652,3654,3656,3658,3660,3662,3665,3667,3669],{"class":39,"line":1390},[37,3634,2587],{"class":54},[37,3636,1247],{"class":50},[37,3638,671],{"class":54},[37,3640,1247],{"class":50},[37,3642,3512],{"class":309},[37,3644,1247],{"class":50},[37,3646,645],{"class":54},[37,3648,1247],{"class":50},[37,3650,3651],{"class":309},"\"=\"",[37,3653,1247],{"class":50},[37,3655,645],{"class":54},[37,3657,659],{"class":50},[37,3659,671],{"class":54},[37,3661,1247],{"class":50},[37,3663,3664],{"class":309},"'",[37,3666,1304],{"class":82},[37,3668,3664],{"class":309},[37,3670,1364],{"class":54},[37,3672,3673],{"class":39,"line":1402},[37,3674,2601],{"class":54},[37,3676,3677,3679,3681],{"class":39,"line":1684},[37,3678,3523],{"class":54},[37,3680,1247],{"class":50},[37,3682,1269],{"class":54},[37,3684,3685],{"class":39,"line":1689},[37,3686,2259],{"class":54},[37,3688,3689],{"class":39,"line":1695},[37,3690,1637],{"class":54},[175,3692,3694],{"id":3693},"_163跳出语句","1.6.3跳出语句",[158,3696,3697],{},[161,3698,3699],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,3701,3702],{},"break使用时机：",[1210,3704,3705,3708,3711],{},[161,3706,3707],{},"出现在switch条件语句中，作用是终止case并跳出switch",[161,3709,3710],{},"出现在循环结构中，作用是跳出当前的循环结构",[161,3712,3713],{},"出现在嵌套循环中，跳出最近的内层循环语句",[158,3715,3716,3719],{"start":47},[161,3717,3718],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[161,3720,3721],{},"goto语句\n语法：goto 标记;",[14,3723,3724],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[27,3726,3728],{"className":196,"code":3727,"language":198,"meta":32,"style":32},"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",[34,3729,3730,3738,3742,3755,3765,3778,3791,3804,3812,3828],{"__ignoreMap":32},[37,3731,3732,3734,3736],{"class":39,"line":40},[37,3733,211],{"class":50},[37,3735,2045],{"class":2035},[37,3737,2048],{"class":54},[37,3739,3740],{"class":39,"line":47},[37,3741,1618],{"class":54},[37,3743,3744,3746,3748,3751,3753],{"class":39,"line":58},[37,3745,1623],{"class":54},[37,3747,1247],{"class":50},[37,3749,3750],{"class":309},"\"1\"",[37,3752,1247],{"class":50},[37,3754,1269],{"class":54},[37,3756,3757,3760,3763],{"class":39,"line":64},[37,3758,3759],{"class":50},"    goto",[37,3761,3762],{"class":2035}," FLAG",[37,3764,1364],{"class":54},[37,3766,3767,3769,3771,3774,3776],{"class":39,"line":76},[37,3768,1623],{"class":54},[37,3770,1247],{"class":50},[37,3772,3773],{"class":309},"\"2\"",[37,3775,1247],{"class":50},[37,3777,1269],{"class":54},[37,3779,3780,3782,3784,3787,3789],{"class":39,"line":92},[37,3781,1623],{"class":54},[37,3783,1247],{"class":50},[37,3785,3786],{"class":309},"\"3\"",[37,3788,1247],{"class":50},[37,3790,1269],{"class":54},[37,3792,3793,3795,3797,3800,3802],{"class":39,"line":97},[37,3794,1623],{"class":54},[37,3796,1247],{"class":50},[37,3798,3799],{"class":309},"\"4\"",[37,3801,1247],{"class":50},[37,3803,1269],{"class":54},[37,3805,3806,3809],{"class":39,"line":107},[37,3807,3808],{"class":2035},"    FLAG",[37,3810,3811],{"class":54},":\n",[37,3813,3814,3816,3818,3821,3823,3825],{"class":39,"line":1390},[37,3815,1623],{"class":54},[37,3817,1247],{"class":50},[37,3819,3820],{"class":309},"\"5\"",[37,3822,1247],{"class":50},[37,3824,1312],{"class":54},[37,3826,3827],{"class":43},"\u002F\u002F跳过了2,3,4,直接到5\n",[37,3829,3830],{"class":39,"line":1402},[37,3831,1637],{"class":54},[146,3833,3835],{"id":3834},"_17数组","1.7数组",[175,3837,3839],{"id":3838},"_171一维数组","1.7.1一维数组",[158,3841,3842],{},[161,3843,3844],{},"一维数组定义方式",[342,3846,3847,3857],{},[345,3848,3849],{},[348,3850,3851,3854],{},[351,3852,3853],{},"方式",[351,3855,3856],{},"注意事项",[389,3858,3859,3873,3883],{},[348,3860,3861,3867],{},[394,3862,3863,3864,261],{},"数据类型 数组名",[37,3865,3866],{},"数组长度",[394,3868,3869,3870,3872],{},"这种方式是先定义再arr",[37,3871,645],{},"赋值",[348,3874,3875,3880],{},[394,3876,3863,3877,3879],{},[37,3878,3866],{},"={值1,值2....};",[394,3881,3882],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[348,3884,3885,3889],{},[394,3886,3863,3887,3879],{},[37,3888],{},[394,3890,3891,3892,3894],{},"int arr",[37,3893],{},";这是不正确的，按照这样的方式定义必须有初始长度",[158,3896,3897],{"start":47},[161,3898,3899],{},"一维数组数组名\n用途：",[1210,3901,3902],{},[161,3903,3904],{},"1.可以统计整个数组在内存中的长度：",[27,3906,3908],{"className":196,"code":3907,"language":198,"meta":32,"style":32},"sizeof(arr);\nsizeof(arr[0]);\n",[34,3909,3910,3917],{"__ignoreMap":32},[37,3911,3912,3914],{"class":39,"line":40},[37,3913,205],{"class":50},[37,3915,3916],{"class":54},"(arr);\n",[37,3918,3919,3921,3924,3926],{"class":39,"line":47},[37,3920,205],{"class":50},[37,3922,3923],{"class":54},"(arr[",[37,3925,396],{"class":82},[37,3927,3928],{"class":54},"]);\n",[1210,3930,3931],{},[161,3932,3933],{},"2.可以获取数组在内存中的首地址:",[27,3935,3937],{"className":196,"code":3936,"language":198,"meta":32,"style":32},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[34,3938,3939,3944,3957,3962],{"__ignoreMap":32},[37,3940,3941],{"class":39,"line":40},[37,3942,3943],{"class":43},"\u002F\u002F查看16进制的首地址\n",[37,3945,3946,3948,3950,3953,3955],{"class":39,"line":47},[37,3947,1442],{"class":54},[37,3949,1247],{"class":50},[37,3951,3952],{"class":54},"arr",[37,3954,1247],{"class":50},[37,3956,1269],{"class":54},[37,3958,3959],{"class":39,"line":58},[37,3960,3961],{"class":43},"\u002F\u002F看10进制数\n",[37,3963,3964,3966,3968,3970,3972,3974,3976,3979,3981,3983,3985],{"class":39,"line":64},[37,3965,1442],{"class":54},[37,3967,1247],{"class":50},[37,3969,208],{"class":54},[37,3971,211],{"class":50},[37,3973,86],{"class":54},[37,3975,558],{"class":50},[37,3977,3978],{"class":54},"arr[",[37,3980,396],{"class":82},[37,3982,1143],{"class":54},[37,3984,1247],{"class":50},[37,3986,1269],{"class":54},[14,3988,3989],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1210,3991,3992],{},[161,3993,3994],{},"1️⃣五只小猪称体重",[27,3996,3998],{"className":196,"code":3997,"language":198,"meta":32,"style":32},"#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",[34,3999,4000,4006,4016,4024,4028,4068,4081,4107,4111,4123,4127,4137,4141,4145,4158,4168],{"__ignoreMap":32},[37,4001,4002,4004],{"class":39,"line":40},[37,4003,2021],{"class":50},[37,4005,2024],{"class":309},[37,4007,4008,4010,4012,4014],{"class":39,"line":47},[37,4009,2029],{"class":50},[37,4011,2032],{"class":50},[37,4013,2036],{"class":2035},[37,4015,1364],{"class":54},[37,4017,4018,4020,4022],{"class":39,"line":58},[37,4019,211],{"class":50},[37,4021,2045],{"class":2035},[37,4023,2048],{"class":54},[37,4025,4026],{"class":39,"line":64},[37,4027,1618],{"class":54},[37,4029,4030,4032,4035,4037,4039,4041,4043,4046,4048,4051,4053,4055,4057,4060,4062,4065],{"class":39,"line":76},[37,4031,2057],{"class":50},[37,4033,4034],{"class":54}," arr[",[37,4036,524],{"class":82},[37,4038,1143],{"class":54},[37,4040,70],{"class":50},[37,4042,1099],{"class":54},[37,4044,4045],{"class":82},"300",[37,4047,583],{"class":54},[37,4049,4050],{"class":82},"350",[37,4052,583],{"class":54},[37,4054,1794],{"class":82},[37,4056,583],{"class":54},[37,4058,4059],{"class":82},"400",[37,4061,583],{"class":54},[37,4063,4064],{"class":82},"250",[37,4066,4067],{"class":54},"};\n",[37,4069,4070,4072,4075,4077,4079],{"class":39,"line":92},[37,4071,2057],{"class":50},[37,4073,4074],{"class":54}," tmp",[37,4076,70],{"class":50},[37,4078,396],{"class":82},[37,4080,1364],{"class":54},[37,4082,4083,4085,4087,4089,4091,4093,4095,4097,4099,4101,4103,4105],{"class":39,"line":97},[37,4084,3273],{"class":50},[37,4086,1730],{"class":54},[37,4088,211],{"class":50},[37,4090,3104],{"class":54},[37,4092,70],{"class":50},[37,4094,396],{"class":82},[37,4096,3111],{"class":54},[37,4098,1113],{"class":50},[37,4100,524],{"class":82},[37,4102,3111],{"class":54},[37,4104,2364],{"class":50},[37,4106,214],{"class":54},[37,4108,4109],{"class":39,"line":107},[37,4110,2102],{"class":54},[37,4112,4113,4115,4118,4120],{"class":39,"line":1390},[37,4114,2569],{"class":50},[37,4116,4117],{"class":54},"(tmp",[37,4119,1113],{"class":50},[37,4121,4122],{"class":54},"arr[i])\n",[37,4124,4125],{"class":39,"line":1402},[37,4126,2582],{"class":54},[37,4128,4129,4132,4134],{"class":39,"line":1684},[37,4130,4131],{"class":54},"            tmp",[37,4133,70],{"class":50},[37,4135,4136],{"class":54},"arr[i];\n",[37,4138,4139],{"class":39,"line":1689},[37,4140,2601],{"class":54},[37,4142,4143],{"class":39,"line":1695},[37,4144,2259],{"class":54},[37,4146,4147,4149,4151,4154,4156],{"class":39,"line":1700},[37,4148,1623],{"class":54},[37,4150,1247],{"class":50},[37,4152,4153],{"class":54},"tmp",[37,4155,1247],{"class":50},[37,4157,1269],{"class":54},[37,4159,4160,4163,4166],{"class":39,"line":1714},[37,4161,4162],{"class":50},"    return",[37,4164,4165],{"class":82}," 0",[37,4167,1364],{"class":54},[37,4169,4170],{"class":39,"line":1719},[37,4171,1637],{"class":54},[1210,4173,4174],{},[161,4175,4176],{},"2️⃣数组元素逆置",[27,4178,4180],{"className":196,"code":4179,"language":198,"meta":32,"style":32},"\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",[34,4181,4182,4187,4193,4203,4211,4215,4250,4266,4298,4311,4316,4321,4333,4343,4353,4358,4367,4377,4382,4387,4414,4418,4434,4438,4449,4458],{"__ignoreMap":32},[37,4183,4184],{"class":39,"line":40},[37,4185,4186],{"class":43},"\u002F\u002F元素逆置\n",[37,4188,4189,4191],{"class":39,"line":47},[37,4190,2021],{"class":50},[37,4192,2024],{"class":309},[37,4194,4195,4197,4199,4201],{"class":39,"line":58},[37,4196,2029],{"class":50},[37,4198,2032],{"class":50},[37,4200,2036],{"class":2035},[37,4202,1364],{"class":54},[37,4204,4205,4207,4209],{"class":39,"line":64},[37,4206,211],{"class":50},[37,4208,2045],{"class":2035},[37,4210,2048],{"class":54},[37,4212,4213],{"class":39,"line":76},[37,4214,1618],{"class":54},[37,4216,4217,4220,4222,4224,4226,4228,4230,4232,4234,4236,4238,4240,4242,4244,4246,4248],{"class":39,"line":92},[37,4218,4219],{"class":50},"   int",[37,4221,4034],{"class":54},[37,4223,524],{"class":82},[37,4225,1143],{"class":54},[37,4227,70],{"class":50},[37,4229,1099],{"class":54},[37,4231,422],{"class":82},[37,4233,583],{"class":54},[37,4235,282],{"class":82},[37,4237,583],{"class":54},[37,4239,276],{"class":82},[37,4241,583],{"class":54},[37,4243,498],{"class":82},[37,4245,583],{"class":54},[37,4247,524],{"class":82},[37,4249,4067],{"class":54},[37,4251,4252,4254,4257,4259,4261,4263],{"class":39,"line":97},[37,4253,4219],{"class":50},[37,4255,4256],{"class":54}," start",[37,4258,70],{"class":50},[37,4260,396],{"class":82},[37,4262,261],{"class":54},[37,4264,4265],{"class":43},"\u002F\u002F起始下标\n",[37,4267,4268,4270,4273,4276,4279,4282,4284,4286,4289,4291,4293,4295],{"class":39,"line":107},[37,4269,4219],{"class":50},[37,4271,4272],{"class":54}," end",[37,4274,4275],{"class":50},"=sizeof",[37,4277,4278],{"class":54},"(arr)",[37,4280,4281],{"class":50},"\u002Fsizeof",[37,4283,3923],{"class":54},[37,4285,396],{"class":82},[37,4287,4288],{"class":54},"])",[37,4290,112],{"class":50},[37,4292,422],{"class":82},[37,4294,261],{"class":54},[37,4296,4297],{"class":43},"\u002F\u002F结束下标\n",[37,4299,4300,4303,4306,4308],{"class":39,"line":1390},[37,4301,4302],{"class":50},"   while",[37,4304,4305],{"class":54}," (start",[37,4307,1113],{"class":50},[37,4309,4310],{"class":54},"end)\n",[37,4312,4313],{"class":39,"line":1402},[37,4314,4315],{"class":54},"   {\n",[37,4317,4318],{"class":39,"line":1684},[37,4319,4320],{"class":43},"    \u002F\u002F实现元素互换代码\n",[37,4322,4323,4325,4328,4330],{"class":39,"line":1689},[37,4324,2057],{"class":50},[37,4326,4327],{"class":54}," temp",[37,4329,70],{"class":50},[37,4331,4332],{"class":54},"arr[start];\n",[37,4334,4335,4338,4340],{"class":39,"line":1695},[37,4336,4337],{"class":54},"    arr[start]",[37,4339,70],{"class":50},[37,4341,4342],{"class":54},"arr[end];\n",[37,4344,4345,4348,4350],{"class":39,"line":1700},[37,4346,4347],{"class":54},"    arr[end]",[37,4349,70],{"class":50},[37,4351,4352],{"class":54},"temp;\n",[37,4354,4355],{"class":39,"line":1714},[37,4356,4357],{"class":43},"    \u002F\u002F下标更新\n",[37,4359,4360,4363,4365],{"class":39,"line":1719},[37,4361,4362],{"class":54},"    start",[37,4364,2364],{"class":50},[37,4366,1364],{"class":54},[37,4368,4369,4372,4375],{"class":39,"line":1725},[37,4370,4371],{"class":54},"    end",[37,4373,4374],{"class":50},"--",[37,4376,1364],{"class":54},[37,4378,4379],{"class":39,"line":1746},[37,4380,4381],{"class":54},"   }\n",[37,4383,4384],{"class":39,"line":1751},[37,4385,4386],{"class":43},"   \u002F\u002F输出逆置后的数组\n",[37,4388,4389,4392,4394,4396,4398,4400,4402,4404,4406,4408,4410,4412],{"class":39,"line":1765},[37,4390,4391],{"class":50},"   for",[37,4393,1730],{"class":54},[37,4395,211],{"class":50},[37,4397,3104],{"class":54},[37,4399,70],{"class":50},[37,4401,396],{"class":82},[37,4403,3111],{"class":54},[37,4405,1113],{"class":50},[37,4407,524],{"class":82},[37,4409,3111],{"class":54},[37,4411,2364],{"class":50},[37,4413,214],{"class":54},[37,4415,4416],{"class":39,"line":1770},[37,4417,4315],{"class":54},[37,4419,4420,4422,4424,4427,4429,4432],{"class":39,"line":1799},[37,4421,1623],{"class":54},[37,4423,1247],{"class":50},[37,4425,4426],{"class":54},"arr[i]",[37,4428,1247],{"class":50},[37,4430,4431],{"class":309},"\" \"",[37,4433,1364],{"class":54},[37,4435,4436],{"class":39,"line":1804},[37,4437,4381],{"class":54},[37,4439,4440,4443,4445,4447],{"class":39,"line":1821},[37,4441,4442],{"class":2035},"   system",[37,4444,208],{"class":54},[37,4446,2380],{"class":309},[37,4448,2791],{"class":54},[37,4450,4451,4454,4456],{"class":39,"line":1826},[37,4452,4453],{"class":50},"   return",[37,4455,4165],{"class":82},[37,4457,1364],{"class":54},[37,4459,4460],{"class":39,"line":1831},[37,4461,1637],{"class":54},[1210,4463,4464],{},[161,4465,4466],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[27,4468,4470],{"className":196,"code":4469,"language":198,"meta":32,"style":32},"\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",[34,4471,4472,4477,4483,4493,4501,4505,4557,4570,4596,4600,4614,4618,4623,4628,4658,4662,4667,4701,4705,4710,4730,4735,4747,4763,4778,4783,4787,4791,4804,4830,4834,4848,4852,4860],{"__ignoreMap":32},[37,4473,4474],{"class":39,"line":40},[37,4475,4476],{"class":43},"\u002F\u002F冒泡排序,升序\n",[37,4478,4479,4481],{"class":39,"line":47},[37,4480,2021],{"class":50},[37,4482,2024],{"class":309},[37,4484,4485,4487,4489,4491],{"class":39,"line":58},[37,4486,2029],{"class":50},[37,4488,2032],{"class":50},[37,4490,2036],{"class":2035},[37,4492,1364],{"class":54},[37,4494,4495,4497,4499],{"class":39,"line":64},[37,4496,211],{"class":50},[37,4498,2045],{"class":2035},[37,4500,2048],{"class":54},[37,4502,4503],{"class":39,"line":76},[37,4504,1618],{"class":54},[37,4506,4507,4509,4511,4513,4516,4518,4521,4523,4525,4527,4529,4531,4533,4535,4537,4539,4541,4543,4545,4547,4549,4551,4553,4555],{"class":39,"line":92},[37,4508,2057],{"class":50},[37,4510,4034],{"class":54},[37,4512,625],{"class":82},[37,4514,4515],{"class":54},"] ",[37,4517,70],{"class":50},[37,4519,4520],{"class":54}," {",[37,4522,498],{"class":82},[37,4524,583],{"class":54},[37,4526,282],{"class":82},[37,4528,583],{"class":54},[37,4530,600],{"class":82},[37,4532,583],{"class":54},[37,4534,396],{"class":82},[37,4536,583],{"class":54},[37,4538,524],{"class":82},[37,4540,583],{"class":54},[37,4542,574],{"class":82},[37,4544,583],{"class":54},[37,4546,422],{"class":82},[37,4548,583],{"class":54},[37,4550,276],{"class":82},[37,4552,583],{"class":54},[37,4554,625],{"class":82},[37,4556,4067],{"class":54},[37,4558,4559,4561,4563,4566,4568],{"class":39,"line":97},[37,4560,1623],{"class":54},[37,4562,1247],{"class":50},[37,4564,4565],{"class":309},"\"排序前：\"",[37,4567,1247],{"class":50},[37,4569,1269],{"class":54},[37,4571,4572,4574,4576,4578,4580,4582,4584,4586,4588,4590,4592,4594],{"class":39,"line":107},[37,4573,3273],{"class":50},[37,4575,1730],{"class":54},[37,4577,211],{"class":50},[37,4579,3104],{"class":54},[37,4581,70],{"class":50},[37,4583,396],{"class":82},[37,4585,3111],{"class":54},[37,4587,1113],{"class":50},[37,4589,625],{"class":82},[37,4591,3111],{"class":54},[37,4593,2364],{"class":50},[37,4595,214],{"class":54},[37,4597,4598],{"class":39,"line":1390},[37,4599,2102],{"class":54},[37,4601,4602,4604,4606,4608,4610,4612],{"class":39,"line":1402},[37,4603,3523],{"class":54},[37,4605,1247],{"class":50},[37,4607,4426],{"class":54},[37,4609,1247],{"class":50},[37,4611,4431],{"class":309},[37,4613,1364],{"class":54},[37,4615,4616],{"class":39,"line":1684},[37,4617,2259],{"class":54},[37,4619,4620],{"class":39,"line":1689},[37,4621,4622],{"class":43},"    \u002F\u002F开始冒泡排序\n",[37,4624,4625],{"class":39,"line":1695},[37,4626,4627],{"class":43},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[37,4629,4630,4632,4634,4636,4638,4640,4642,4644,4646,4648,4650,4652,4654,4656],{"class":39,"line":1700},[37,4631,3273],{"class":50},[37,4633,1730],{"class":54},[37,4635,211],{"class":50},[37,4637,3104],{"class":54},[37,4639,70],{"class":50},[37,4641,396],{"class":82},[37,4643,3111],{"class":54},[37,4645,1113],{"class":50},[37,4647,625],{"class":82},[37,4649,112],{"class":50},[37,4651,422],{"class":82},[37,4653,3111],{"class":54},[37,4655,2364],{"class":50},[37,4657,214],{"class":54},[37,4659,4660],{"class":39,"line":1714},[37,4661,2102],{"class":54},[37,4663,4664],{"class":39,"line":1719},[37,4665,4666],{"class":43},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[37,4668,4669,4671,4673,4675,4677,4679,4681,4683,4685,4687,4689,4691,4693,4695,4697,4699],{"class":39,"line":1725},[37,4670,3475],{"class":50},[37,4672,1730],{"class":54},[37,4674,211],{"class":50},[37,4676,3482],{"class":54},[37,4678,70],{"class":50},[37,4680,396],{"class":82},[37,4682,3489],{"class":54},[37,4684,1113],{"class":50},[37,4686,625],{"class":82},[37,4688,112],{"class":50},[37,4690,645],{"class":54},[37,4692,112],{"class":50},[37,4694,422],{"class":82},[37,4696,3489],{"class":54},[37,4698,2364],{"class":50},[37,4700,214],{"class":54},[37,4702,4703],{"class":39,"line":1746},[37,4704,2582],{"class":54},[37,4706,4707],{"class":39,"line":1751},[37,4708,4709],{"class":43},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[37,4711,4712,4715,4718,4720,4723,4725,4727],{"class":39,"line":1765},[37,4713,4714],{"class":50},"            if",[37,4716,4717],{"class":54},"(arr[j]",[37,4719,1163],{"class":50},[37,4721,4722],{"class":54},"arr[j",[37,4724,685],{"class":50},[37,4726,422],{"class":82},[37,4728,4729],{"class":54},"])\n",[37,4731,4732],{"class":39,"line":1770},[37,4733,4734],{"class":54},"            {\n",[37,4736,4737,4740,4742,4744],{"class":39,"line":1799},[37,4738,4739],{"class":50},"                int",[37,4741,4327],{"class":54},[37,4743,70],{"class":50},[37,4745,4746],{"class":54},"arr[j];\n",[37,4748,4749,4752,4754,4756,4758,4760],{"class":39,"line":1804},[37,4750,4751],{"class":54},"                arr[j]",[37,4753,70],{"class":50},[37,4755,4722],{"class":54},[37,4757,685],{"class":50},[37,4759,422],{"class":82},[37,4761,4762],{"class":54},"];\n",[37,4764,4765,4768,4770,4772,4774,4776],{"class":39,"line":1821},[37,4766,4767],{"class":54},"                arr[j",[37,4769,685],{"class":50},[37,4771,422],{"class":82},[37,4773,1143],{"class":54},[37,4775,70],{"class":50},[37,4777,4352],{"class":54},[37,4779,4780],{"class":39,"line":1826},[37,4781,4782],{"class":54},"            }\n",[37,4784,4785],{"class":39,"line":1831},[37,4786,2601],{"class":54},[37,4788,4789],{"class":39,"line":1836},[37,4790,2259],{"class":54},[37,4792,4793,4795,4797,4800,4802],{"class":39,"line":1850},[37,4794,1623],{"class":54},[37,4796,1247],{"class":50},[37,4798,4799],{"class":309},"\"排序后：\"",[37,4801,1247],{"class":50},[37,4803,1269],{"class":54},[37,4805,4806,4808,4810,4812,4814,4816,4818,4820,4822,4824,4826,4828],{"class":39,"line":1855},[37,4807,3273],{"class":50},[37,4809,1730],{"class":54},[37,4811,211],{"class":50},[37,4813,3104],{"class":54},[37,4815,70],{"class":50},[37,4817,396],{"class":82},[37,4819,3111],{"class":54},[37,4821,1113],{"class":50},[37,4823,625],{"class":82},[37,4825,3111],{"class":54},[37,4827,2364],{"class":50},[37,4829,214],{"class":54},[37,4831,4832],{"class":39,"line":2649},[37,4833,2102],{"class":54},[37,4835,4836,4838,4840,4842,4844,4846],{"class":39,"line":2663},[37,4837,3523],{"class":54},[37,4839,1247],{"class":50},[37,4841,4426],{"class":54},[37,4843,1247],{"class":50},[37,4845,4431],{"class":309},[37,4847,1364],{"class":54},[37,4849,4850],{"class":39,"line":2671},[37,4851,2259],{"class":54},[37,4853,4854,4856,4858],{"class":39,"line":2676},[37,4855,4162],{"class":50},[37,4857,4165],{"class":82},[37,4859,1364],{"class":54},[37,4861,4862],{"class":39,"line":2682},[37,4863,1637],{"class":54},[175,4865,4867],{"id":4866},"_172二维数组","1.7.2二维数组",[158,4869,4870],{},[161,4871,4872],{},"二维数组的四种定义方式",[342,4874,4875,4884],{},[345,4876,4877],{},[348,4878,4879,4882],{},[351,4880,4881],{},"序号",[351,4883,3853],{},[389,4885,4886,4896,4905,4914,4923],{},[348,4887,4888,4890],{},[394,4889,422],{},[394,4891,4892,4893,261],{},"数据类型 数组名[行数]",[37,4894,4895],{},"列数",[348,4897,4898,4900],{},[394,4899,282],{},[394,4901,4892,4902,4904],{},[37,4903,4895],{},"={ {数据1,数据2}，{数据3，数据4}... }",[348,4906,4907,4909],{},[394,4908,276],{},[394,4910,4892,4911,4913],{},[37,4912,4895],{},"={数据1,数据2,数据3...}",[348,4915,4916,4918],{},[394,4917,498],{},[394,4919,4920,4921,4913],{},"数据类型 数组名[]",[37,4922,4895],{},[348,4924,4925,4928],{},[394,4926,4927],{},"注意：不能只省略列数",[394,4929],{},[158,4931,4932],{"start":47},[161,4933,4934],{},"二维数组数组名",[1210,4936,4937,4940],{},[161,4938,4939],{},"1.查看二维数组所占内存空间",[161,4941,4942],{},"2.获取二维数组首地址",[14,4944,4945],{},"已知二维数组，求二维数组的行数与列数",[27,4947,4949],{"className":196,"code":4948,"language":198,"meta":32,"style":32},"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",[34,4950,4951,4959,4963,4981,4985,5003,5019,5024,5049,5082],{"__ignoreMap":32},[37,4952,4953,4955,4957],{"class":39,"line":40},[37,4954,211],{"class":50},[37,4956,2045],{"class":2035},[37,4958,2048],{"class":54},[37,4960,4961],{"class":39,"line":47},[37,4962,1618],{"class":54},[37,4964,4965,4967,4969,4971,4974,4976,4978],{"class":39,"line":58},[37,4966,2057],{"class":50},[37,4968,4034],{"class":54},[37,4970,282],{"class":82},[37,4972,4973],{"class":54},"][",[37,4975,276],{"class":82},[37,4977,1143],{"class":54},[37,4979,4980],{"class":50},"=\n",[37,4982,4983],{"class":39,"line":64},[37,4984,2102],{"class":54},[37,4986,4987,4990,4992,4994,4996,4998,5000],{"class":39,"line":76},[37,4988,4989],{"class":54},"        {",[37,4991,422],{"class":82},[37,4993,583],{"class":54},[37,4995,282],{"class":82},[37,4997,583],{"class":54},[37,4999,276],{"class":82},[37,5001,5002],{"class":54},"},\n",[37,5004,5005,5007,5009,5011,5013,5015,5017],{"class":39,"line":92},[37,5006,4989],{"class":54},[37,5008,498],{"class":82},[37,5010,583],{"class":54},[37,5012,524],{"class":82},[37,5014,583],{"class":54},[37,5016,549],{"class":82},[37,5018,1637],{"class":54},[37,5020,5021],{"class":39,"line":97},[37,5022,5023],{"class":54},"    };\n",[37,5025,5026,5028,5030,5033,5035,5037,5039,5041,5043,5045,5047],{"class":39,"line":107},[37,5027,1623],{"class":54},[37,5029,1247],{"class":50},[37,5031,5032],{"class":309},"\"二维数组的行数\"",[37,5034,1445],{"class":50},[37,5036,4278],{"class":54},[37,5038,4281],{"class":50},[37,5040,3923],{"class":54},[37,5042,396],{"class":82},[37,5044,4288],{"class":54},[37,5046,1247],{"class":50},[37,5048,1269],{"class":54},[37,5050,5051,5053,5055,5058,5060,5062,5064,5066,5068,5070,5072,5074,5076,5078,5080],{"class":39,"line":1390},[37,5052,1623],{"class":54},[37,5054,1247],{"class":50},[37,5056,5057],{"class":309},"\"二维数组的列数\"",[37,5059,1445],{"class":50},[37,5061,3923],{"class":54},[37,5063,396],{"class":82},[37,5065,4288],{"class":54},[37,5067,4281],{"class":50},[37,5069,3923],{"class":54},[37,5071,396],{"class":82},[37,5073,4973],{"class":54},[37,5075,396],{"class":82},[37,5077,4288],{"class":54},[37,5079,1247],{"class":50},[37,5081,1269],{"class":54},[37,5083,5084],{"class":39,"line":1402},[37,5085,1637],{"class":54},[14,5087,5088],{},"查看二维数组首地址",[27,5090,5092],{"className":196,"code":5091,"language":198,"meta":32,"style":32},"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",[34,5093,5094,5111,5137,5162],{"__ignoreMap":32},[37,5095,5096,5098,5100,5103,5105,5107,5109],{"class":39,"line":40},[37,5097,1442],{"class":54},[37,5099,1247],{"class":50},[37,5101,5102],{"class":309},"\"二维数组首地址：\"",[37,5104,1247],{"class":50},[37,5106,3952],{"class":54},[37,5108,1247],{"class":50},[37,5110,1269],{"class":54},[37,5112,5113,5115,5117,5120,5122,5124,5126,5129,5131,5133,5135],{"class":39,"line":47},[37,5114,1442],{"class":54},[37,5116,1247],{"class":50},[37,5118,5119],{"class":309},"\"二维数组第一行的首地址：\"",[37,5121,1247],{"class":50},[37,5123,208],{"class":54},[37,5125,211],{"class":50},[37,5127,5128],{"class":54},")arr[",[37,5130,396],{"class":82},[37,5132,1143],{"class":54},[37,5134,1247],{"class":50},[37,5136,1269],{"class":54},[37,5138,5139,5141,5143,5146,5148,5150,5152,5154,5156,5158,5160],{"class":39,"line":58},[37,5140,1442],{"class":54},[37,5142,1247],{"class":50},[37,5144,5145],{"class":309},"\"二维数组第二行的首地址：\"",[37,5147,1247],{"class":50},[37,5149,208],{"class":54},[37,5151,211],{"class":50},[37,5153,5128],{"class":54},[37,5155,422],{"class":82},[37,5157,1143],{"class":54},[37,5159,1247],{"class":50},[37,5161,1269],{"class":54},[37,5163,5164,5166,5168,5171,5173,5175,5177,5179,5181,5183,5185,5187,5189,5191,5193,5195],{"class":39,"line":64},[37,5165,1442],{"class":54},[37,5167,1247],{"class":50},[37,5169,5170],{"class":309},"\"二维数组第一个元素的首地址:\"",[37,5172,1247],{"class":50},[37,5174,208],{"class":54},[37,5176,211],{"class":50},[37,5178,86],{"class":54},[37,5180,558],{"class":50},[37,5182,3978],{"class":54},[37,5184,396],{"class":82},[37,5186,4973],{"class":54},[37,5188,396],{"class":82},[37,5190,1143],{"class":54},[37,5192,1247],{"class":50},[37,5194,1312],{"class":54},[37,5196,5197],{"class":43},"\u002F\u002F对于数，要加取址符\n",[123,5199,5200],{},"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":32,"searchDepth":47,"depth":47,"links":5202},[5203,5204,5205,5213,5214,5220,5225],{"id":148,"depth":47,"text":149},{"id":155,"depth":47,"text":156},{"id":172,"depth":47,"text":173,"children":5206},[5207,5208,5209,5210,5211,5212],{"id":177,"depth":58,"text":178},{"id":224,"depth":58,"text":225},{"id":290,"depth":58,"text":291},{"id":1228,"depth":58,"text":1229},{"id":1318,"depth":58,"text":1319},{"id":1416,"depth":58,"text":1417},{"id":1458,"depth":47,"text":1459},{"id":1526,"depth":47,"text":1527,"children":5215},[5216,5217,5218,5219],{"id":1530,"depth":58,"text":1531},{"id":1551,"depth":58,"text":1552},{"id":1560,"depth":58,"text":1561},{"id":1569,"depth":58,"text":1570},{"id":1578,"depth":47,"text":1579,"children":5221},[5222,5223,5224],{"id":1582,"depth":58,"text":1583},{"id":2277,"depth":58,"text":2278},{"id":3693,"depth":58,"text":3694},{"id":3834,"depth":47,"text":3835,"children":5226},[5227,5228],{"id":3838,"depth":58,"text":3839},{"id":4866,"depth":58,"text":4867},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":139,"description":32},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5235,"title":5236,"body":5237,"description":32,"extension":129,"meta":6337,"navigation":131,"path":6338,"seo":6339,"stem":6340,"__hash__":6341},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5238,"toc":6329},[5239,5242,5246,5254,5262,5265,5331,5335,5338,5414,5418,5421,5424,5427,5640,5644,5649,5713,5718,5785,5790,5881,5884,5989,5993,5996,6002,6146,6150,6153,6167,6170,6215,6218,6326],[10,5240,5236],{"id":5241},"_2函数",[146,5243,5245],{"id":5244},"_21函数概述","2.1函数概述",[158,5247,5248,5251],{},[161,5249,5250],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[161,5252,5253],{},"语法：",[27,5255,5260],{"className":5256,"code":5258,"language":5259,"meta":32},[5257],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[34,5261,5258],{"__ignoreMap":32},[14,5263,5264],{},"小案例",[27,5266,5268],{"className":196,"code":5267,"language":198,"meta":32,"style":32},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[34,5269,5270,5275,5299,5303,5320,5327],{"__ignoreMap":32},[37,5271,5272],{"class":39,"line":40},[37,5273,5274],{"class":43},"\u002F\u002Fnum1,num2形参\n",[37,5276,5277,5279,5282,5284,5286,5290,5292,5294,5297],{"class":39,"line":47},[37,5278,211],{"class":50},[37,5280,5281],{"class":2035}," add",[37,5283,208],{"class":54},[37,5285,211],{"class":50},[37,5287,5289],{"class":5288},"s4XuR"," num1",[37,5291,583],{"class":54},[37,5293,211],{"class":50},[37,5295,5296],{"class":5288}," num2",[37,5298,214],{"class":54},[37,5300,5301],{"class":39,"line":58},[37,5302,1618],{"class":54},[37,5304,5305,5307,5310,5312,5315,5317],{"class":39,"line":64},[37,5306,2057],{"class":50},[37,5308,5309],{"class":54}," sum",[37,5311,70],{"class":50},[37,5313,5314],{"class":54},"num1",[37,5316,685],{"class":50},[37,5318,5319],{"class":54},"num2;\n",[37,5321,5322,5324],{"class":39,"line":76},[37,5323,4162],{"class":50},[37,5325,5326],{"class":54}," sum;\n",[37,5328,5329],{"class":39,"line":92},[37,5330,1637],{"class":54},[146,5332,5334],{"id":5333},"_22函数调用","2.2函数调用",[14,5336,5337],{},"调用刚刚写的求和函数",[27,5339,5341],{"className":196,"code":5340,"language":198,"meta":32,"style":32},"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",[34,5342,5343,5351,5355,5360,5372,5384,5393,5398,5410],{"__ignoreMap":32},[37,5344,5345,5347,5349],{"class":39,"line":40},[37,5346,211],{"class":50},[37,5348,2045],{"class":2035},[37,5350,2048],{"class":54},[37,5352,5353],{"class":39,"line":47},[37,5354,1618],{"class":54},[37,5356,5357],{"class":39,"line":58},[37,5358,5359],{"class":43},"    \u002F\u002Fa,b实参\n",[37,5361,5362,5364,5366,5368,5370],{"class":39,"line":64},[37,5363,2057],{"class":50},[37,5365,1471],{"class":54},[37,5367,70],{"class":50},[37,5369,396],{"class":82},[37,5371,1364],{"class":54},[37,5373,5374,5376,5378,5380,5382],{"class":39,"line":76},[37,5375,2057],{"class":50},[37,5377,2905],{"class":54},[37,5379,70],{"class":50},[37,5381,396],{"class":82},[37,5383,1364],{"class":54},[37,5385,5386,5388,5390],{"class":39,"line":92},[37,5387,2084],{"class":54},[37,5389,1502],{"class":50},[37,5391,5392],{"class":54},"a,b;\n",[37,5394,5395],{"class":39,"line":97},[37,5396,5397],{"class":43},"    \u002F\u002F调用函数时，实参值传给了形参\n",[37,5399,5400,5402,5404,5407],{"class":39,"line":107},[37,5401,1623],{"class":54},[37,5403,1247],{"class":50},[37,5405,5406],{"class":2035},"add",[37,5408,5409],{"class":54},"(a,b);\n",[37,5411,5412],{"class":39,"line":1390},[37,5413,1637],{"class":54},[146,5415,5417],{"id":5416},"_23值传递","2.3值传递",[14,5419,5420],{},"值传递就是函数调用时实参将数值传给形参",[14,5422,5423],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,5425,5426],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[27,5428,5430],{"className":196,"code":5429,"language":198,"meta":32,"style":32},"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",[34,5431,5432,5454,5458,5471,5488,5506,5517,5526,5535,5548,5564,5580,5589,5593,5601,5605,5617,5629,5636],{"__ignoreMap":32},[37,5433,5434,5437,5440,5442,5444,5446,5448,5450,5452],{"class":39,"line":40},[37,5435,5436],{"class":50},"void",[37,5438,5439],{"class":2035}," swap",[37,5441,208],{"class":54},[37,5443,211],{"class":50},[37,5445,5289],{"class":5288},[37,5447,583],{"class":54},[37,5449,211],{"class":50},[37,5451,5296],{"class":5288},[37,5453,214],{"class":54},[37,5455,5456],{"class":39,"line":47},[37,5457,1618],{"class":54},[37,5459,5460,5462,5464,5467,5469],{"class":39,"line":58},[37,5461,1623],{"class":54},[37,5463,1247],{"class":50},[37,5465,5466],{"class":309},"\"交换前：\"",[37,5468,1247],{"class":50},[37,5470,1269],{"class":54},[37,5472,5473,5475,5477,5480,5482,5484,5486],{"class":39,"line":64},[37,5474,1623],{"class":54},[37,5476,1247],{"class":50},[37,5478,5479],{"class":309},"\"num1=\"",[37,5481,1247],{"class":50},[37,5483,5314],{"class":54},[37,5485,1247],{"class":50},[37,5487,1269],{"class":54},[37,5489,5490,5492,5494,5497,5499,5502,5504],{"class":39,"line":76},[37,5491,1623],{"class":54},[37,5493,1247],{"class":50},[37,5495,5496],{"class":309},"\"num2=\"",[37,5498,1247],{"class":50},[37,5500,5501],{"class":54},"num2",[37,5503,1247],{"class":50},[37,5505,1269],{"class":54},[37,5507,5508,5510,5512,5514],{"class":39,"line":92},[37,5509,2057],{"class":50},[37,5511,4327],{"class":54},[37,5513,70],{"class":50},[37,5515,5516],{"class":54},"num1;\n",[37,5518,5519,5522,5524],{"class":39,"line":97},[37,5520,5521],{"class":54},"    num1",[37,5523,70],{"class":50},[37,5525,5319],{"class":54},[37,5527,5528,5531,5533],{"class":39,"line":107},[37,5529,5530],{"class":54},"    num2",[37,5532,70],{"class":50},[37,5534,4352],{"class":54},[37,5536,5537,5539,5541,5544,5546],{"class":39,"line":1390},[37,5538,1623],{"class":54},[37,5540,1247],{"class":50},[37,5542,5543],{"class":309},"\"交换后：\"",[37,5545,1247],{"class":50},[37,5547,1269],{"class":54},[37,5549,5550,5552,5554,5556,5558,5560,5562],{"class":39,"line":1402},[37,5551,1623],{"class":54},[37,5553,1247],{"class":50},[37,5555,5479],{"class":309},[37,5557,1247],{"class":50},[37,5559,5314],{"class":54},[37,5561,1247],{"class":50},[37,5563,1269],{"class":54},[37,5565,5566,5568,5570,5572,5574,5576,5578],{"class":39,"line":1684},[37,5567,1623],{"class":54},[37,5569,1247],{"class":50},[37,5571,5496],{"class":309},[37,5573,1247],{"class":50},[37,5575,5501],{"class":54},[37,5577,1247],{"class":50},[37,5579,1269],{"class":54},[37,5581,5582,5584,5586],{"class":39,"line":1689},[37,5583,4162],{"class":50},[37,5585,261],{"class":54},[37,5587,5588],{"class":43},"\u002F\u002F或者不写\n",[37,5590,5591],{"class":39,"line":1695},[37,5592,1637],{"class":54},[37,5594,5595,5597,5599],{"class":39,"line":1700},[37,5596,211],{"class":50},[37,5598,2045],{"class":2035},[37,5600,2048],{"class":54},[37,5602,5603],{"class":39,"line":1714},[37,5604,1618],{"class":54},[37,5606,5607,5609,5611,5613,5615],{"class":39,"line":1719},[37,5608,2057],{"class":50},[37,5610,1471],{"class":54},[37,5612,70],{"class":50},[37,5614,650],{"class":82},[37,5616,1364],{"class":54},[37,5618,5619,5621,5623,5625,5627],{"class":39,"line":1725},[37,5620,2057],{"class":50},[37,5622,2905],{"class":54},[37,5624,70],{"class":50},[37,5626,903],{"class":82},[37,5628,1364],{"class":54},[37,5630,5631,5634],{"class":39,"line":1746},[37,5632,5633],{"class":2035},"    swap",[37,5635,5409],{"class":54},[37,5637,5638],{"class":39,"line":1751},[37,5639,1637],{"class":54},[146,5641,5643],{"id":5642},"_24函数的常见形式","2.4函数的常见形式",[158,5645,5646],{},[161,5647,5648],{},"无参无返",[27,5650,5652],{"className":196,"code":5651,"language":198,"meta":32,"style":32},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[34,5653,5654,5663,5667,5680,5684,5692,5696,5701,5709],{"__ignoreMap":32},[37,5655,5656,5658,5661],{"class":39,"line":40},[37,5657,5436],{"class":50},[37,5659,5660],{"class":2035}," test01",[37,5662,2048],{"class":54},[37,5664,5665],{"class":39,"line":47},[37,5666,1618],{"class":54},[37,5668,5669,5671,5673,5676,5678],{"class":39,"line":58},[37,5670,1623],{"class":54},[37,5672,1247],{"class":50},[37,5674,5675],{"class":309},"\"你好\"",[37,5677,1247],{"class":50},[37,5679,1269],{"class":54},[37,5681,5682],{"class":39,"line":64},[37,5683,1637],{"class":54},[37,5685,5686,5688,5690],{"class":39,"line":76},[37,5687,211],{"class":50},[37,5689,2045],{"class":2035},[37,5691,2048],{"class":54},[37,5693,5694],{"class":39,"line":92},[37,5695,1618],{"class":54},[37,5697,5698],{"class":39,"line":97},[37,5699,5700],{"class":43},"    \u002F\u002F函数调用\n",[37,5702,5703,5706],{"class":39,"line":107},[37,5704,5705],{"class":2035},"    test01",[37,5707,5708],{"class":54},"();\n",[37,5710,5711],{"class":39,"line":1390},[37,5712,1637],{"class":54},[158,5714,5715],{"start":47},[161,5716,5717],{},"有参无返",[27,5719,5721],{"className":196,"code":5720,"language":198,"meta":32,"style":32},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[34,5722,5723,5738,5742,5754,5758,5766,5770,5781],{"__ignoreMap":32},[37,5724,5725,5727,5730,5732,5734,5736],{"class":39,"line":40},[37,5726,5436],{"class":50},[37,5728,5729],{"class":2035}," test02",[37,5731,208],{"class":54},[37,5733,211],{"class":50},[37,5735,1471],{"class":5288},[37,5737,214],{"class":54},[37,5739,5740],{"class":39,"line":47},[37,5741,1618],{"class":54},[37,5743,5744,5746,5748,5750,5752],{"class":39,"line":58},[37,5745,1623],{"class":54},[37,5747,1247],{"class":50},[37,5749,5675],{"class":309},[37,5751,1247],{"class":50},[37,5753,1269],{"class":54},[37,5755,5756],{"class":39,"line":64},[37,5757,1637],{"class":54},[37,5759,5760,5762,5764],{"class":39,"line":76},[37,5761,211],{"class":50},[37,5763,2045],{"class":2035},[37,5765,2048],{"class":54},[37,5767,5768],{"class":39,"line":92},[37,5769,1618],{"class":54},[37,5771,5772,5775,5777,5779],{"class":39,"line":97},[37,5773,5774],{"class":2035},"    test02",[37,5776,208],{"class":54},[37,5778,516],{"class":82},[37,5780,2791],{"class":54},[37,5782,5783],{"class":39,"line":107},[37,5784,1637],{"class":54},[158,5786,5787],{"start":58},[161,5788,5789],{},"无参有返",[27,5791,5793],{"className":196,"code":5792,"language":198,"meta":32,"style":32},"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",[34,5794,5795,5804,5808,5820,5829,5833,5841,5845,5858,5877],{"__ignoreMap":32},[37,5796,5797,5799,5802],{"class":39,"line":40},[37,5798,211],{"class":50},[37,5800,5801],{"class":2035}," test03",[37,5803,2048],{"class":54},[37,5805,5806],{"class":39,"line":47},[37,5807,1618],{"class":54},[37,5809,5810,5812,5814,5816,5818],{"class":39,"line":58},[37,5811,1623],{"class":54},[37,5813,1247],{"class":50},[37,5815,5675],{"class":309},[37,5817,1247],{"class":50},[37,5819,1269],{"class":54},[37,5821,5822,5824,5827],{"class":39,"line":64},[37,5823,4162],{"class":50},[37,5825,5826],{"class":82}," 100",[37,5828,1364],{"class":54},[37,5830,5831],{"class":39,"line":76},[37,5832,1637],{"class":54},[37,5834,5835,5837,5839],{"class":39,"line":92},[37,5836,211],{"class":50},[37,5838,2045],{"class":2035},[37,5840,2048],{"class":54},[37,5842,5843],{"class":39,"line":97},[37,5844,1618],{"class":54},[37,5846,5847,5849,5851,5853,5856],{"class":39,"line":107},[37,5848,2057],{"class":50},[37,5850,5289],{"class":54},[37,5852,70],{"class":50},[37,5854,5855],{"class":2035},"test03",[37,5857,5708],{"class":54},[37,5859,5860,5862,5864,5866,5868,5870,5872,5874],{"class":39,"line":1390},[37,5861,1623],{"class":54},[37,5863,1247],{"class":50},[37,5865,5479],{"class":309},[37,5867,1247],{"class":50},[37,5869,5314],{"class":54},[37,5871,1247],{"class":50},[37,5873,1312],{"class":54},[37,5875,5876],{"class":43}," \u002F\u002F100\n",[37,5878,5879],{"class":39,"line":1402},[37,5880,1637],{"class":54},[14,5882,5883],{},"4.有参有返",[27,5885,5887],{"className":196,"code":5886,"language":198,"meta":32,"style":32},"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",[34,5888,5889,5904,5908,5921,5927,5931,5940,5944,5956,5970,5985],{"__ignoreMap":32},[37,5890,5891,5893,5896,5898,5900,5902],{"class":39,"line":40},[37,5892,211],{"class":50},[37,5894,5895],{"class":2035}," test04",[37,5897,208],{"class":54},[37,5899,211],{"class":50},[37,5901,1471],{"class":5288},[37,5903,214],{"class":54},[37,5905,5906],{"class":39,"line":47},[37,5907,1618],{"class":54},[37,5909,5910,5912,5914,5917,5919],{"class":39,"line":58},[37,5911,1623],{"class":54},[37,5913,1247],{"class":50},[37,5915,5916],{"class":309},"\"hello\"",[37,5918,1247],{"class":50},[37,5920,1269],{"class":54},[37,5922,5923,5925],{"class":39,"line":64},[37,5924,4162],{"class":50},[37,5926,1505],{"class":54},[37,5928,5929],{"class":39,"line":76},[37,5930,1637],{"class":54},[37,5932,5933,5935,5938],{"class":39,"line":92},[37,5934,211],{"class":50},[37,5936,5937],{"class":2035}," mian",[37,5939,2048],{"class":54},[37,5941,5942],{"class":39,"line":97},[37,5943,1618],{"class":54},[37,5945,5946,5948,5950,5952,5954],{"class":39,"line":107},[37,5947,2057],{"class":50},[37,5949,2905],{"class":54},[37,5951,70],{"class":50},[37,5953,422],{"class":82},[37,5955,1364],{"class":54},[37,5957,5958,5960,5962,5964,5967],{"class":39,"line":1390},[37,5959,2057],{"class":50},[37,5961,2921],{"class":54},[37,5963,70],{"class":50},[37,5965,5966],{"class":2035},"test04",[37,5968,5969],{"class":54},"(b);\n",[37,5971,5972,5974,5976,5978,5980,5982],{"class":39,"line":1402},[37,5973,1623],{"class":54},[37,5975,1247],{"class":50},[37,5977,493],{"class":54},[37,5979,1247],{"class":50},[37,5981,1312],{"class":54},[37,5983,5984],{"class":43}," \u002F\u002F1\n",[37,5986,5987],{"class":39,"line":1684},[37,5988,1637],{"class":54},[146,5990,5992],{"id":5991},"_25函数的声明","2.5函数的声明",[14,5994,5995],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,5997,5998,5999],{},"函数的",[354,6000,6001],{},"声明可以多次，但是函数的定义只能有一次",[27,6003,6005],{"className":196,"code":6004,"language":198,"meta":32,"style":32},"\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",[34,6006,6007,6012,6017,6042,6051,6055,6067,6079,6095,6099,6119,6123,6142],{"__ignoreMap":32},[37,6008,6009],{"class":39,"line":40},[37,6010,6011],{"class":43},"\u002F\u002F函数声明\n",[37,6013,6014],{"class":39,"line":47},[37,6015,6016],{"class":43},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[37,6018,6019,6021,6024,6026,6028,6030,6032,6034,6036,6039],{"class":39,"line":58},[37,6020,211],{"class":50},[37,6022,6023],{"class":2035}," max",[37,6025,208],{"class":54},[37,6027,211],{"class":50},[37,6029,1471],{"class":5288},[37,6031,583],{"class":54},[37,6033,211],{"class":50},[37,6035,2905],{"class":5288},[37,6037,6038],{"class":54},");",[37,6040,6041],{"class":43},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[37,6043,6044,6046,6048],{"class":39,"line":64},[37,6045,211],{"class":50},[37,6047,2045],{"class":2035},[37,6049,6050],{"class":54},"() \n",[37,6052,6053],{"class":39,"line":76},[37,6054,1618],{"class":54},[37,6056,6057,6059,6061,6063,6065],{"class":39,"line":92},[37,6058,2057],{"class":50},[37,6060,1471],{"class":54},[37,6062,70],{"class":50},[37,6064,650],{"class":82},[37,6066,1364],{"class":54},[37,6068,6069,6071,6073,6075,6077],{"class":39,"line":97},[37,6070,2057],{"class":50},[37,6072,2905],{"class":54},[37,6074,70],{"class":50},[37,6076,903],{"class":82},[37,6078,1364],{"class":54},[37,6080,6081,6083,6085,6088,6091,6093],{"class":39,"line":107},[37,6082,1623],{"class":54},[37,6084,1247],{"class":50},[37,6086,6087],{"class":2035},"max",[37,6089,6090],{"class":54},"(a,b)",[37,6092,1247],{"class":50},[37,6094,1269],{"class":54},[37,6096,6097],{"class":39,"line":1390},[37,6098,1637],{"class":54},[37,6100,6101,6103,6105,6107,6109,6111,6113,6115,6117],{"class":39,"line":1402},[37,6102,211],{"class":50},[37,6104,6023],{"class":2035},[37,6106,208],{"class":54},[37,6108,211],{"class":50},[37,6110,1471],{"class":5288},[37,6112,583],{"class":54},[37,6114,211],{"class":50},[37,6116,2905],{"class":5288},[37,6118,214],{"class":54},[37,6120,6121],{"class":39,"line":1684},[37,6122,1618],{"class":54},[37,6124,6125,6127,6129,6131,6133,6135,6137,6139],{"class":39,"line":1689},[37,6126,4162],{"class":50},[37,6128,1471],{"class":54},[37,6130,1163],{"class":50},[37,6132,468],{"class":54},[37,6134,1189],{"class":50},[37,6136,443],{"class":54},[37,6138,1062],{"class":50},[37,6140,6141],{"class":54},"b;\n",[37,6143,6144],{"class":39,"line":1695},[37,6145,1637],{"class":54},[146,6147,6149],{"id":6148},"_26函数的分文件编写","2.6函数的分文件编写",[14,6151,6152],{},"4个步骤：",[1210,6154,6155,6158,6161,6164],{},[161,6156,6157],{},"1.创建后缀名为.h的头文件",[161,6159,6160],{},"2.创建后缀名为.cpp的源文件",[161,6162,6163],{},"3.在头文件中写函数的定义",[161,6165,6166],{},"4.在源文件中写函数的定义\n示例：",[14,6168,6169],{},"头文件：swap.h",[27,6171,6173],{"className":196,"code":6172,"language":198,"meta":32,"style":32},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[34,6174,6175,6181,6191,6195],{"__ignoreMap":32},[37,6176,6177,6179],{"class":39,"line":40},[37,6178,2021],{"class":50},[37,6180,2024],{"class":309},[37,6182,6183,6185,6187,6189],{"class":39,"line":47},[37,6184,2029],{"class":50},[37,6186,2032],{"class":50},[37,6188,2036],{"class":2035},[37,6190,1364],{"class":54},[37,6192,6193],{"class":39,"line":58},[37,6194,6011],{"class":43},[37,6196,6197,6199,6201,6203,6205,6207,6209,6211,6213],{"class":39,"line":64},[37,6198,5436],{"class":50},[37,6200,5439],{"class":2035},[37,6202,208],{"class":54},[37,6204,211],{"class":50},[37,6206,1471],{"class":5288},[37,6208,583],{"class":54},[37,6210,211],{"class":50},[37,6212,2905],{"class":5288},[37,6214,2791],{"class":54},[14,6216,6217],{},"源文件：swap.cpp",[27,6219,6221],{"className":196,"code":6220,"language":198,"meta":32,"style":32},"#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",[34,6222,6223,6230,6235,6255,6259,6270,6279,6288,6305,6322],{"__ignoreMap":32},[37,6224,6225,6227],{"class":39,"line":40},[37,6226,2021],{"class":50},[37,6228,6229],{"class":309}," \"swap.h\"\n",[37,6231,6232],{"class":39,"line":47},[37,6233,6234],{"class":43},"\u002F\u002F函数的定义\n",[37,6236,6237,6239,6241,6243,6245,6247,6249,6251,6253],{"class":39,"line":58},[37,6238,5436],{"class":50},[37,6240,5439],{"class":2035},[37,6242,208],{"class":54},[37,6244,211],{"class":50},[37,6246,1471],{"class":5288},[37,6248,583],{"class":54},[37,6250,211],{"class":50},[37,6252,2905],{"class":5288},[37,6254,214],{"class":54},[37,6256,6257],{"class":39,"line":64},[37,6258,1618],{"class":54},[37,6260,6261,6263,6265,6267],{"class":39,"line":76},[37,6262,2057],{"class":50},[37,6264,4327],{"class":54},[37,6266,70],{"class":50},[37,6268,6269],{"class":54},"a;\n",[37,6271,6272,6275,6277],{"class":39,"line":92},[37,6273,6274],{"class":54},"    a",[37,6276,70],{"class":50},[37,6278,6141],{"class":54},[37,6280,6281,6284,6286],{"class":39,"line":97},[37,6282,6283],{"class":54},"    b",[37,6285,70],{"class":50},[37,6287,4352],{"class":54},[37,6289,6290,6292,6294,6297,6299,6301,6303],{"class":39,"line":107},[37,6291,1623],{"class":54},[37,6293,1247],{"class":50},[37,6295,6296],{"class":309},"\"a=\"",[37,6298,1247],{"class":50},[37,6300,443],{"class":54},[37,6302,1247],{"class":50},[37,6304,1269],{"class":54},[37,6306,6307,6309,6311,6314,6316,6318,6320],{"class":39,"line":1390},[37,6308,1623],{"class":54},[37,6310,1247],{"class":50},[37,6312,6313],{"class":309},"\"b=\"",[37,6315,1247],{"class":50},[37,6317,468],{"class":54},[37,6319,1247],{"class":50},[37,6321,1269],{"class":54},[37,6323,6324],{"class":39,"line":1402},[37,6325,1637],{"class":54},[123,6327,6328],{},"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":32,"searchDepth":47,"depth":47,"links":6330},[6331,6332,6333,6334,6335,6336],{"id":5244,"depth":47,"text":5245},{"id":5333,"depth":47,"text":5334},{"id":5416,"depth":47,"text":5417},{"id":5642,"depth":47,"text":5643},{"id":5991,"depth":47,"text":5992},{"id":6148,"depth":47,"text":6149},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5236,"description":32},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6343,"title":6344,"body":6345,"description":6352,"extension":129,"meta":7757,"navigation":131,"path":7758,"seo":7759,"stem":7760,"__hash__":7761},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6346,"toc":7747},[6347,6350,6353,6357,6519,6523,6526,6529,6532,6535,6675,6679,6682,6685,6688,6753,6757,6762,6829,6832,6836,6839,6850,6855,6875,6878,6883,6902,6905,6909,6928,6931,6935,7170,7174,7177,7180,7183,7345,7348,7352,7355,7361,7744],[10,6348,6344],{"id":6349},"_3指针",[14,6351,6352],{},"通过指针保存一个地址，指针就是个地址",[146,6354,6356],{"id":6355},"_31定义指针","3.1定义指针",[27,6358,6360],{"className":196,"code":6359,"language":198,"meta":32,"style":32},"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",[34,6361,6362,6370,6374,6379,6391,6396,6404,6414,6432,6452,6456,6461,6466,6471,6485,6501,6515],{"__ignoreMap":32},[37,6363,6364,6366,6368],{"class":39,"line":40},[37,6365,211],{"class":50},[37,6367,2045],{"class":2035},[37,6369,2048],{"class":54},[37,6371,6372],{"class":39,"line":47},[37,6373,1618],{"class":54},[37,6375,6376],{"class":39,"line":58},[37,6377,6378],{"class":43},"    \u002F\u002F1.定义指针\n",[37,6380,6381,6383,6385,6387,6389],{"class":39,"line":64},[37,6382,2057],{"class":50},[37,6384,1471],{"class":54},[37,6386,70],{"class":50},[37,6388,650],{"class":82},[37,6390,1364],{"class":54},[37,6392,6393],{"class":39,"line":76},[37,6394,6395],{"class":43},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[37,6397,6398,6401],{"class":39,"line":92},[37,6399,6400],{"class":50},"    int*",[37,6402,6403],{"class":54},"p;\n",[37,6405,6406,6409,6412],{"class":39,"line":97},[37,6407,6408],{"class":54},"    p",[37,6410,6411],{"class":50},"=&",[37,6413,6269],{"class":54},[37,6415,6416,6418,6420,6423,6426,6428,6430],{"class":39,"line":107},[37,6417,1623],{"class":54},[37,6419,1247],{"class":50},[37,6421,6422],{"class":309},"\"a的地址为：\"",[37,6424,6425],{"class":50},"\u003C\u003C&",[37,6427,443],{"class":54},[37,6429,1247],{"class":50},[37,6431,1269],{"class":54},[37,6433,6434,6436,6438,6441,6443,6445,6447,6449],{"class":39,"line":1390},[37,6435,1623],{"class":54},[37,6437,1247],{"class":50},[37,6439,6440],{"class":309},"\"指针p为：\"",[37,6442,1247],{"class":50},[37,6444,14],{"class":54},[37,6446,1247],{"class":50},[37,6448,1312],{"class":54},[37,6450,6451],{"class":43},"\u002F\u002F指针p表示的就是a的地址\n",[37,6453,6454],{"class":39,"line":1402},[37,6455,2472],{"emptyLinePlaceholder":131},[37,6457,6458],{"class":39,"line":1684},[37,6459,6460],{"class":43},"    \u002F\u002F2.使用指针\n",[37,6462,6463],{"class":39,"line":1689},[37,6464,6465],{"class":43},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[37,6467,6468],{"class":39,"line":1695},[37,6469,6470],{"class":43},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[37,6472,6473,6476,6478,6480,6483],{"class":39,"line":1700},[37,6474,6475],{"class":50},"    *",[37,6477,14],{"class":54},[37,6479,70],{"class":50},[37,6481,6482],{"class":82},"1000",[37,6484,1364],{"class":54},[37,6486,6487,6489,6492,6494,6496,6498],{"class":39,"line":1714},[37,6488,1623],{"class":54},[37,6490,6491],{"class":50},"\u003C\u003C*",[37,6493,14],{"class":54},[37,6495,1247],{"class":50},[37,6497,1312],{"class":54},[37,6499,6500],{"class":43},"\u002F\u002F1000\n",[37,6502,6503,6505,6507,6509,6511,6513],{"class":39,"line":1719},[37,6504,1623],{"class":54},[37,6506,1247],{"class":50},[37,6508,443],{"class":54},[37,6510,1247],{"class":50},[37,6512,1312],{"class":54},[37,6514,6500],{"class":43},[37,6516,6517],{"class":39,"line":1725},[37,6518,1637],{"class":54},[146,6520,6522],{"id":6521},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,6524,6525],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,6527,6528],{},"在32位操作系统下：占用4个字节空间",[14,6530,6531],{},"在64位操作系统下：占用8个字节空间",[14,6533,6534],{},"上方是不管啥数据类型的",[27,6536,6538],{"className":196,"code":6537,"language":198,"meta":32,"style":32},"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",[34,6539,6540,6548,6552,6557,6569,6574,6579,6584,6597,6619,6645,6671],{"__ignoreMap":32},[37,6541,6542,6544,6546],{"class":39,"line":40},[37,6543,211],{"class":50},[37,6545,2045],{"class":2035},[37,6547,2048],{"class":54},[37,6549,6550],{"class":39,"line":47},[37,6551,1618],{"class":54},[37,6553,6554],{"class":39,"line":58},[37,6555,6556],{"class":43},"    \u002F\u002F指针所占内存空间\n",[37,6558,6559,6561,6563,6565,6567],{"class":39,"line":64},[37,6560,2057],{"class":50},[37,6562,1471],{"class":54},[37,6564,70],{"class":50},[37,6566,650],{"class":82},[37,6568,1364],{"class":54},[37,6570,6571],{"class":39,"line":76},[37,6572,6573],{"class":43},"    \u002F\u002Fint *p;\n",[37,6575,6576],{"class":39,"line":92},[37,6577,6578],{"class":43},"    \u002F\u002Fp=&a;\n",[37,6580,6581],{"class":39,"line":97},[37,6582,6583],{"class":43},"    \u002F\u002F上述可以写为以下：\n",[37,6585,6586,6588,6591,6593,6595],{"class":39,"line":107},[37,6587,2057],{"class":50},[37,6589,6590],{"class":50}," *",[37,6592,14],{"class":54},[37,6594,6411],{"class":50},[37,6596,6269],{"class":54},[37,6598,6599,6602,6604,6607,6609,6612,6614,6616],{"class":39,"line":1390},[37,6600,6601],{"class":54},"    cout ",[37,6603,1247],{"class":50},[37,6605,6606],{"class":309},"\"sizeof(int *)\"",[37,6608,1445],{"class":50},[37,6610,6611],{"class":54},"(p)",[37,6613,1247],{"class":50},[37,6615,1312],{"class":54},[37,6617,6618],{"class":43},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[37,6620,6621,6623,6625,6627,6629,6631,6633,6635,6637,6639,6642],{"class":39,"line":1402},[37,6622,6601],{"class":54},[37,6624,1247],{"class":50},[37,6626,6606],{"class":309},[37,6628,1445],{"class":50},[37,6630,208],{"class":54},[37,6632,211],{"class":50},[37,6634,6590],{"class":50},[37,6636,86],{"class":54},[37,6638,1247],{"class":50},[37,6640,6641],{"class":54},"endl",[37,6643,6644],{"class":43},"  \u002F\u002F4字节(32位的话)\n",[37,6646,6647,6649,6651,6654,6656,6658,6660,6662,6664,6666,6668],{"class":39,"line":1684},[37,6648,6601],{"class":54},[37,6650,1247],{"class":50},[37,6652,6653],{"class":309},"\"sizeof(char *)\"",[37,6655,1445],{"class":50},[37,6657,208],{"class":54},[37,6659,301],{"class":50},[37,6661,6590],{"class":50},[37,6663,86],{"class":54},[37,6665,1247],{"class":50},[37,6667,1312],{"class":54},[37,6669,6670],{"class":43}," \u002F\u002F4字节(32位的话)\n",[37,6672,6673],{"class":39,"line":1689},[37,6674,1637],{"class":54},[146,6676,6678],{"id":6677},"_33空指针","3.3空指针",[14,6680,6681],{},"空指针：指针变量指向内存中编号为0的空间",[14,6683,6684],{},"用途：初始化指针变量",[14,6686,6687],{},"注意：空指针指向的内存是不可以访问的",[27,6689,6691],{"className":196,"code":6690,"language":198,"meta":32,"style":32},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[34,6692,6693,6701,6705,6710,6724,6729,6744,6749],{"__ignoreMap":32},[37,6694,6695,6697,6699],{"class":39,"line":40},[37,6696,211],{"class":50},[37,6698,2045],{"class":2035},[37,6700,2048],{"class":54},[37,6702,6703],{"class":39,"line":47},[37,6704,1618],{"class":54},[37,6706,6707],{"class":39,"line":58},[37,6708,6709],{"class":43},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[37,6711,6712,6714,6716,6718,6720,6722],{"class":39,"line":64},[37,6713,2057],{"class":50},[37,6715,6590],{"class":50},[37,6717,14],{"class":54},[37,6719,70],{"class":50},[37,6721,2464],{"class":82},[37,6723,1364],{"class":54},[37,6725,6726],{"class":39,"line":76},[37,6727,6728],{"class":43},"    \u002F\u002F2.空指针不能进行访问\n",[37,6730,6731,6733,6735,6737,6739,6741],{"class":39,"line":92},[37,6732,6475],{"class":50},[37,6734,14],{"class":54},[37,6736,70],{"class":50},[37,6738,516],{"class":82},[37,6740,261],{"class":54},[37,6742,6743],{"class":43},"\u002F\u002F直接报错，压根不能访问\n",[37,6745,6746],{"class":39,"line":97},[37,6747,6748],{"class":43},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[37,6750,6751],{"class":39,"line":107},[37,6752,1637],{"class":54},[146,6754,6756],{"id":6755},"_34野指针","3.4野指针",[14,6758,6759],{},[354,6760,6761],{},"指针变量指向非法的内存空间",[27,6763,6765],{"className":196,"code":6764,"language":198,"meta":32,"style":32},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[34,6766,6767,6775,6779,6808,6813,6825],{"__ignoreMap":32},[37,6768,6769,6771,6773],{"class":39,"line":40},[37,6770,211],{"class":50},[37,6772,2045],{"class":2035},[37,6774,2048],{"class":54},[37,6776,6777],{"class":39,"line":47},[37,6778,1618],{"class":54},[37,6780,6781,6783,6785,6787,6789,6791,6793,6795,6797,6800,6803,6805],{"class":39,"line":58},[37,6782,2057],{"class":50},[37,6784,6590],{"class":50},[37,6786,14],{"class":54},[37,6788,70],{"class":50},[37,6790,208],{"class":54},[37,6792,211],{"class":50},[37,6794,6590],{"class":50},[37,6796,86],{"class":54},[37,6798,6799],{"class":50},"0x",[37,6801,6802],{"class":82},"1100",[37,6804,261],{"class":54},[37,6806,6807],{"class":43}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[37,6809,6810],{"class":39,"line":64},[37,6811,6812],{"class":43},"    \u002F\u002F访问野指针报错\n",[37,6814,6815,6817,6819,6821,6823],{"class":39,"line":76},[37,6816,1623],{"class":54},[37,6818,6491],{"class":50},[37,6820,14],{"class":54},[37,6822,1247],{"class":50},[37,6824,1269],{"class":54},[37,6826,6827],{"class":39,"line":92},[37,6828,1637],{"class":54},[14,6830,6831],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[146,6833,6835],{"id":6834},"_35const修饰指针","3.5const修饰指针",[14,6837,6838],{},"三种情况：",[1210,6840,6841,6844,6847],{},[161,6842,6843],{},"const修饰指针 常量指针",[161,6845,6846],{},"const修饰常量 指针常量",[161,6848,6849],{},"const即修饰指针，又修饰常量",[158,6851,6852],{},[161,6853,6854],{},"常量指针",[27,6856,6858],{"className":196,"code":6857,"language":198,"meta":32,"style":32},"const int *p=&a;\n",[34,6859,6860],{"__ignoreMap":32},[37,6861,6862,6865,6867,6869,6871,6873],{"class":39,"line":40},[37,6863,6864],{"class":50},"const",[37,6866,2454],{"class":50},[37,6868,6590],{"class":50},[37,6870,14],{"class":54},[37,6872,6411],{"class":50},[37,6874,6269],{"class":54},[14,6876,6877],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[158,6879,6880],{"start":47},[161,6881,6882],{},"指针常量",[27,6884,6886],{"className":196,"code":6885,"language":198,"meta":32,"style":32},"int *const p=&a;\n",[34,6887,6888],{"__ignoreMap":32},[37,6889,6890,6892,6895,6898,6900],{"class":39,"line":40},[37,6891,211],{"class":50},[37,6893,6894],{"class":50}," *const",[37,6896,6897],{"class":54}," p",[37,6899,6411],{"class":50},[37,6901,6269],{"class":54},[14,6903,6904],{},"指针的指向不可以改，指针指向的值可以改",[158,6906,6907],{"start":58},[161,6908,6849],{},[27,6910,6912],{"className":196,"code":6911,"language":198,"meta":32,"style":32},"const int *const p=&a;\n",[34,6913,6914],{"__ignoreMap":32},[37,6915,6916,6918,6920,6922,6924,6926],{"class":39,"line":40},[37,6917,6864],{"class":50},[37,6919,2454],{"class":50},[37,6921,6894],{"class":50},[37,6923,6897],{"class":54},[37,6925,6411],{"class":50},[37,6927,6269],{"class":54},[14,6929,6930],{},"指针的指向和指针指向的值都不可以改变",[146,6932,6934],{"id":6933},"_36指针和数组","3.6指针和数组",[27,6936,6938],{"className":196,"code":6937,"language":198,"meta":32,"style":32},"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",[34,6939,6940,6948,6952,6957,7011,7032,7048,7064,7075,7092,7097,7111,7137,7141,7153,7162,7166],{"__ignoreMap":32},[37,6941,6942,6944,6946],{"class":39,"line":40},[37,6943,211],{"class":50},[37,6945,2045],{"class":2035},[37,6947,2048],{"class":54},[37,6949,6950],{"class":39,"line":47},[37,6951,1618],{"class":54},[37,6953,6954],{"class":39,"line":58},[37,6955,6956],{"class":43},"    \u002F\u002F利用指针访问数组中的元素\n",[37,6958,6959,6961,6963,6965,6967,6969,6971,6973,6975,6977,6979,6981,6983,6985,6987,6989,6991,6993,6995,6997,6999,7001,7003,7005,7007,7009],{"class":39,"line":64},[37,6960,2057],{"class":50},[37,6962,4034],{"class":54},[37,6964,650],{"class":82},[37,6966,1143],{"class":54},[37,6968,70],{"class":50},[37,6970,1099],{"class":54},[37,6972,422],{"class":82},[37,6974,583],{"class":54},[37,6976,282],{"class":82},[37,6978,583],{"class":54},[37,6980,276],{"class":82},[37,6982,583],{"class":54},[37,6984,498],{"class":82},[37,6986,583],{"class":54},[37,6988,524],{"class":82},[37,6990,583],{"class":54},[37,6992,549],{"class":82},[37,6994,583],{"class":54},[37,6996,574],{"class":82},[37,6998,583],{"class":54},[37,7000,600],{"class":82},[37,7002,583],{"class":54},[37,7004,625],{"class":82},[37,7006,583],{"class":54},[37,7008,650],{"class":82},[37,7010,4067],{"class":54},[37,7012,7013,7015,7017,7020,7022,7024,7026,7028,7030],{"class":39,"line":76},[37,7014,1623],{"class":54},[37,7016,1247],{"class":50},[37,7018,7019],{"class":309},"\"数组的第一个元素为：\"",[37,7021,1247],{"class":50},[37,7023,3978],{"class":54},[37,7025,396],{"class":82},[37,7027,1143],{"class":54},[37,7029,1247],{"class":50},[37,7031,1269],{"class":54},[37,7033,7034,7036,7038,7040,7042,7045],{"class":39,"line":92},[37,7035,2057],{"class":50},[37,7037,6590],{"class":50},[37,7039,14],{"class":54},[37,7041,70],{"class":50},[37,7043,7044],{"class":54},"arr;",[37,7046,7047],{"class":43},"\u002F\u002F注意数才要加取地址符号&\n",[37,7049,7050,7052,7054,7056,7058,7060,7062],{"class":39,"line":97},[37,7051,1623],{"class":54},[37,7053,1247],{"class":50},[37,7055,7019],{"class":309},[37,7057,6491],{"class":50},[37,7059,14],{"class":54},[37,7061,1247],{"class":50},[37,7063,1269],{"class":54},[37,7065,7066,7068,7070,7072],{"class":39,"line":107},[37,7067,6408],{"class":54},[37,7069,2364],{"class":50},[37,7071,261],{"class":54},[37,7073,7074],{"class":43}," \u002F\u002F让指针向后偏移4个字节\n",[37,7076,7077,7079,7081,7084,7086,7088,7090],{"class":39,"line":1390},[37,7078,1623],{"class":54},[37,7080,1247],{"class":50},[37,7082,7083],{"class":309},"\"数组的第二个元素为：\"",[37,7085,6491],{"class":50},[37,7087,14],{"class":54},[37,7089,1247],{"class":50},[37,7091,1269],{"class":54},[37,7093,7094],{"class":39,"line":1402},[37,7095,7096],{"class":43},"    \u002F\u002F利用指针遍历数组\n",[37,7098,7099,7101,7103,7106,7108],{"class":39,"line":1684},[37,7100,2057],{"class":50},[37,7102,6590],{"class":50},[37,7104,7105],{"class":54},"p2",[37,7107,70],{"class":50},[37,7109,7110],{"class":54},"arr;\n",[37,7112,7113,7115,7117,7119,7121,7123,7125,7127,7129,7131,7133,7135],{"class":39,"line":1689},[37,7114,3273],{"class":50},[37,7116,1730],{"class":54},[37,7118,211],{"class":50},[37,7120,3104],{"class":54},[37,7122,70],{"class":50},[37,7124,396],{"class":82},[37,7126,3111],{"class":54},[37,7128,1113],{"class":50},[37,7130,650],{"class":82},[37,7132,3111],{"class":54},[37,7134,2364],{"class":50},[37,7136,214],{"class":54},[37,7138,7139],{"class":39,"line":1695},[37,7140,2102],{"class":54},[37,7142,7143,7145,7147,7149,7151],{"class":39,"line":1700},[37,7144,3523],{"class":54},[37,7146,6491],{"class":50},[37,7148,7105],{"class":54},[37,7150,1247],{"class":50},[37,7152,1269],{"class":54},[37,7154,7155,7158,7160],{"class":39,"line":1714},[37,7156,7157],{"class":54},"        p2",[37,7159,2364],{"class":50},[37,7161,1364],{"class":54},[37,7163,7164],{"class":39,"line":1719},[37,7165,2259],{"class":54},[37,7167,7168],{"class":39,"line":1725},[37,7169,1637],{"class":54},[146,7171,7173],{"id":7172},"_37指针和函数","3.7指针和函数",[14,7175,7176],{},"利用指针做函数参数，可以修改实参的值",[14,7178,7179],{},"值传递：只改变形参，不改变实参",[14,7181,7182],{},"地址传递：",[27,7184,7186],{"className":196,"code":7185,"language":198,"meta":32,"style":32},"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",[34,7187,7188,7213,7217,7229,7240,7250,7254,7262,7266,7278,7290,7295,7311,7326,7341],{"__ignoreMap":32},[37,7189,7190,7192,7194,7196,7198,7200,7203,7205,7207,7209,7211],{"class":39,"line":40},[37,7191,5436],{"class":50},[37,7193,5439],{"class":2035},[37,7195,208],{"class":54},[37,7197,211],{"class":50},[37,7199,6590],{"class":50},[37,7201,7202],{"class":5288},"p1",[37,7204,583],{"class":54},[37,7206,211],{"class":50},[37,7208,6590],{"class":50},[37,7210,7105],{"class":5288},[37,7212,214],{"class":54},[37,7214,7215],{"class":39,"line":47},[37,7216,1618],{"class":54},[37,7218,7219,7221,7223,7226],{"class":39,"line":58},[37,7220,2057],{"class":50},[37,7222,4327],{"class":54},[37,7224,7225],{"class":50},"=*",[37,7227,7228],{"class":54},"p1;\n",[37,7230,7231,7233,7235,7237],{"class":39,"line":64},[37,7232,6475],{"class":50},[37,7234,7202],{"class":54},[37,7236,7225],{"class":50},[37,7238,7239],{"class":54},"p2;\n",[37,7241,7242,7244,7246,7248],{"class":39,"line":76},[37,7243,6475],{"class":50},[37,7245,7105],{"class":54},[37,7247,70],{"class":50},[37,7249,4352],{"class":54},[37,7251,7252],{"class":39,"line":92},[37,7253,1637],{"class":54},[37,7255,7256,7258,7260],{"class":39,"line":97},[37,7257,211],{"class":50},[37,7259,2045],{"class":2035},[37,7261,2048],{"class":54},[37,7263,7264],{"class":39,"line":107},[37,7265,1618],{"class":54},[37,7267,7268,7270,7272,7274,7276],{"class":39,"line":1390},[37,7269,2057],{"class":50},[37,7271,1471],{"class":54},[37,7273,70],{"class":50},[37,7275,650],{"class":82},[37,7277,1364],{"class":54},[37,7279,7280,7282,7284,7286,7288],{"class":39,"line":1402},[37,7281,2057],{"class":50},[37,7283,2905],{"class":54},[37,7285,70],{"class":50},[37,7287,903],{"class":82},[37,7289,1364],{"class":54},[37,7291,7292],{"class":39,"line":1684},[37,7293,7294],{"class":43},"    \u002F\u002F地址传递\n",[37,7296,7297,7299,7301,7303,7306,7308],{"class":39,"line":1689},[37,7298,5633],{"class":2035},[37,7300,208],{"class":54},[37,7302,558],{"class":50},[37,7304,7305],{"class":54},"a,",[37,7307,558],{"class":50},[37,7309,7310],{"class":54},"b);\n",[37,7312,7313,7315,7317,7319,7321,7323],{"class":39,"line":1695},[37,7314,1623],{"class":54},[37,7316,1247],{"class":50},[37,7318,443],{"class":54},[37,7320,1247],{"class":50},[37,7322,1312],{"class":54},[37,7324,7325],{"class":43},"\u002F\u002F20\n",[37,7327,7328,7330,7332,7334,7336,7338],{"class":39,"line":1700},[37,7329,1623],{"class":54},[37,7331,1247],{"class":50},[37,7333,468],{"class":54},[37,7335,1247],{"class":50},[37,7337,1312],{"class":54},[37,7339,7340],{"class":43},"\u002F\u002F10\n",[37,7342,7343],{"class":39,"line":1714},[37,7344,1637],{"class":54},[14,7346,7347],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[146,7349,7351],{"id":7350},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,7353,7354],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,7356,7357,7358,7360],{},"例如数组：int arr",[37,7359,650],{},"={4,3,6,9,1,2,10,8,7,5}",[27,7362,7364],{"className":196,"code":7363,"language":198,"meta":32,"style":32},"#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",[34,7365,7366,7372,7382,7406,7410,7441,7445,7479,7483,7501,7505,7516,7531,7546,7550,7554,7558,7562,7566,7574,7578,7583,7637,7649,7661,7666,7674,7678,7683,7708,7712,7727,7736,7740],{"__ignoreMap":32},[37,7367,7368,7370],{"class":39,"line":40},[37,7369,2021],{"class":50},[37,7371,2024],{"class":309},[37,7373,7374,7376,7378,7380],{"class":39,"line":47},[37,7375,2029],{"class":50},[37,7377,2032],{"class":50},[37,7379,2036],{"class":2035},[37,7381,1364],{"class":54},[37,7383,7384,7386,7389,7391,7393,7395,7397,7399,7401,7404],{"class":39,"line":58},[37,7385,5436],{"class":50},[37,7387,7388],{"class":2035}," bubbleSort",[37,7390,208],{"class":54},[37,7392,211],{"class":50},[37,7394,6590],{"class":50},[37,7396,14],{"class":5288},[37,7398,583],{"class":54},[37,7400,211],{"class":50},[37,7402,7403],{"class":5288}," len",[37,7405,214],{"class":54},[37,7407,7408],{"class":39,"line":64},[37,7409,1618],{"class":54},[37,7411,7412,7414,7416,7418,7420,7422,7424,7426,7428,7431,7433,7435,7437,7439],{"class":39,"line":76},[37,7413,3273],{"class":50},[37,7415,208],{"class":54},[37,7417,211],{"class":50},[37,7419,3104],{"class":54},[37,7421,70],{"class":50},[37,7423,396],{"class":82},[37,7425,3111],{"class":54},[37,7427,1113],{"class":50},[37,7429,7430],{"class":54},"len",[37,7432,112],{"class":50},[37,7434,422],{"class":82},[37,7436,3111],{"class":54},[37,7438,2364],{"class":50},[37,7440,214],{"class":54},[37,7442,7443],{"class":39,"line":92},[37,7444,2102],{"class":54},[37,7446,7447,7449,7451,7453,7455,7457,7459,7461,7463,7465,7467,7469,7471,7473,7475,7477],{"class":39,"line":97},[37,7448,3475],{"class":50},[37,7450,208],{"class":54},[37,7452,211],{"class":50},[37,7454,3482],{"class":54},[37,7456,70],{"class":50},[37,7458,396],{"class":82},[37,7460,3489],{"class":54},[37,7462,1113],{"class":50},[37,7464,7430],{"class":54},[37,7466,112],{"class":50},[37,7468,645],{"class":54},[37,7470,112],{"class":50},[37,7472,422],{"class":82},[37,7474,3489],{"class":54},[37,7476,2364],{"class":50},[37,7478,214],{"class":54},[37,7480,7481],{"class":39,"line":107},[37,7482,2582],{"class":54},[37,7484,7485,7487,7490,7492,7495,7497,7499],{"class":39,"line":1390},[37,7486,4714],{"class":50},[37,7488,7489],{"class":54},"(p[j]",[37,7491,1163],{"class":50},[37,7493,7494],{"class":54},"p[j",[37,7496,685],{"class":50},[37,7498,422],{"class":82},[37,7500,4729],{"class":54},[37,7502,7503],{"class":39,"line":1402},[37,7504,4734],{"class":54},[37,7506,7507,7509,7511,7513],{"class":39,"line":1684},[37,7508,4739],{"class":50},[37,7510,4327],{"class":54},[37,7512,70],{"class":50},[37,7514,7515],{"class":54},"p[j];\n",[37,7517,7518,7521,7523,7525,7527,7529],{"class":39,"line":1689},[37,7519,7520],{"class":54},"                p[j]",[37,7522,70],{"class":50},[37,7524,7494],{"class":54},[37,7526,685],{"class":50},[37,7528,422],{"class":82},[37,7530,4762],{"class":54},[37,7532,7533,7536,7538,7540,7542,7544],{"class":39,"line":1695},[37,7534,7535],{"class":54},"                p[j",[37,7537,685],{"class":50},[37,7539,422],{"class":82},[37,7541,1143],{"class":54},[37,7543,70],{"class":50},[37,7545,4352],{"class":54},[37,7547,7548],{"class":39,"line":1700},[37,7549,4782],{"class":54},[37,7551,7552],{"class":39,"line":1714},[37,7553,2601],{"class":54},[37,7555,7556],{"class":39,"line":1719},[37,7557,2259],{"class":54},[37,7559,7560],{"class":39,"line":1725},[37,7561,1637],{"class":54},[37,7563,7564],{"class":39,"line":1746},[37,7565,2472],{"emptyLinePlaceholder":131},[37,7567,7568,7570,7572],{"class":39,"line":1751},[37,7569,211],{"class":50},[37,7571,2045],{"class":2035},[37,7573,2048],{"class":54},[37,7575,7576],{"class":39,"line":1765},[37,7577,1618],{"class":54},[37,7579,7580],{"class":39,"line":1770},[37,7581,7582],{"class":43},"    \u002F\u002F 1.创建数组\n",[37,7584,7585,7587,7589,7591,7593,7595,7597,7599,7601,7603,7605,7607,7609,7611,7613,7615,7617,7619,7621,7623,7625,7627,7629,7631,7633,7635],{"class":39,"line":1799},[37,7586,2057],{"class":50},[37,7588,4034],{"class":54},[37,7590,650],{"class":82},[37,7592,1143],{"class":54},[37,7594,70],{"class":50},[37,7596,1099],{"class":54},[37,7598,498],{"class":82},[37,7600,583],{"class":54},[37,7602,276],{"class":82},[37,7604,583],{"class":54},[37,7606,549],{"class":82},[37,7608,583],{"class":54},[37,7610,625],{"class":82},[37,7612,583],{"class":54},[37,7614,422],{"class":82},[37,7616,583],{"class":54},[37,7618,282],{"class":82},[37,7620,583],{"class":54},[37,7622,650],{"class":82},[37,7624,583],{"class":54},[37,7626,600],{"class":82},[37,7628,583],{"class":54},[37,7630,574],{"class":82},[37,7632,583],{"class":54},[37,7634,524],{"class":82},[37,7636,4067],{"class":54},[37,7638,7639,7641,7643,7645,7647],{"class":39,"line":1804},[37,7640,2057],{"class":50},[37,7642,7403],{"class":54},[37,7644,70],{"class":50},[37,7646,650],{"class":82},[37,7648,1364],{"class":54},[37,7650,7651,7653,7655,7657,7659],{"class":39,"line":1821},[37,7652,2057],{"class":50},[37,7654,6590],{"class":50},[37,7656,14],{"class":54},[37,7658,70],{"class":50},[37,7660,7110],{"class":54},[37,7662,7663],{"class":39,"line":1826},[37,7664,7665],{"class":43},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[37,7667,7668,7671],{"class":39,"line":1831},[37,7669,7670],{"class":2035},"    bubbleSort",[37,7672,7673],{"class":54},"(p,len);\n",[37,7675,7676],{"class":39,"line":1836},[37,7677,2472],{"emptyLinePlaceholder":131},[37,7679,7680],{"class":39,"line":1850},[37,7681,7682],{"class":43},"    \u002F\u002F 3.打印排序后的数组\n",[37,7684,7685,7687,7689,7691,7693,7695,7697,7699,7701,7704,7706],{"class":39,"line":1855},[37,7686,3273],{"class":50},[37,7688,1730],{"class":54},[37,7690,211],{"class":50},[37,7692,3104],{"class":54},[37,7694,70],{"class":50},[37,7696,396],{"class":82},[37,7698,3286],{"class":54},[37,7700,1113],{"class":50},[37,7702,7703],{"class":54},"len; i",[37,7705,2364],{"class":50},[37,7707,214],{"class":54},[37,7709,7710],{"class":39,"line":2649},[37,7711,2102],{"class":54},[37,7713,7714,7716,7718,7720,7722,7725],{"class":39,"line":2663},[37,7715,3523],{"class":54},[37,7717,6491],{"class":50},[37,7719,14],{"class":54},[37,7721,1247],{"class":50},[37,7723,7724],{"class":309},"\"\"",[37,7726,1364],{"class":54},[37,7728,7729,7732,7734],{"class":39,"line":2671},[37,7730,7731],{"class":54},"        p",[37,7733,2364],{"class":50},[37,7735,1364],{"class":54},[37,7737,7738],{"class":39,"line":2676},[37,7739,2259],{"class":54},[37,7741,7742],{"class":39,"line":2682},[37,7743,1637],{"class":54},[123,7745,7746],{},"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":32,"searchDepth":47,"depth":47,"links":7748},[7749,7750,7751,7752,7753,7754,7755,7756],{"id":6355,"depth":47,"text":6356},{"id":6521,"depth":47,"text":6522},{"id":6677,"depth":47,"text":6678},{"id":6755,"depth":47,"text":6756},{"id":6834,"depth":47,"text":6835},{"id":6933,"depth":47,"text":6934},{"id":7172,"depth":47,"text":7173},{"id":7350,"depth":47,"text":7351},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6344,"description":6352},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7763,"title":7764,"body":7765,"description":7772,"extension":129,"meta":10746,"navigation":131,"path":10747,"seo":10748,"stem":10749,"__hash__":10750},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7766,"toc":10737},[7767,7770,7773,7777,7780,7783,7794,8132,8135,8139,8142,8149,8404,8408,8411,8414,8569,8573,8576,8579,8785,8789,8792,9095,9098,9106,9110,9113,9264,9266,9277,9334,9338,9343,10000,10008,10011,10105,10108,10728,10734],[10,7768,7764],{"id":7769},"_4结构体",[14,7771,7772],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[146,7774,7776],{"id":7775},"_41结构体定义与使用","4.1结构体定义与使用",[14,7778,7779],{},"语法：struct 结构体名 {结构体成员列表}；",[14,7781,7782],{},"通过结构体创建变量的方式：",[1210,7784,7785,7788,7791],{},[161,7786,7787],{},"struct 结构体名 变量名",[161,7789,7790],{},"struct 结构体名 变量名={成员1值，成员2值...}",[161,7792,7793],{},"定义结构体时顺便创建变量",[27,7795,7797],{"className":196,"code":7796,"language":198,"meta":32,"style":32},"#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",[34,7798,7799,7805,7815,7822,7827,7835,7839,7844,7848,7853,7858,7863,7870,7875,7882,7886,7893,7897,7901,7905,7909,7913,7917,7923,7927,7933,7941,7949,7953,7958,7963,7974,7979,7991,8002,8013,8018,8042,8047,8053,8080,8085,8091,8103,8115,8127],{"__ignoreMap":32},[37,7800,7801,7803],{"class":39,"line":40},[37,7802,2021],{"class":50},[37,7804,2024],{"class":309},[37,7806,7807,7809,7811,7813],{"class":39,"line":47},[37,7808,2029],{"class":50},[37,7810,2032],{"class":50},[37,7812,2036],{"class":2035},[37,7814,1364],{"class":54},[37,7816,7817,7819],{"class":39,"line":58},[37,7818,2021],{"class":50},[37,7820,7821],{"class":309},"\u003Cstring>\n",[37,7823,7824],{"class":39,"line":64},[37,7825,7826],{"class":43},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[37,7828,7829,7832],{"class":39,"line":76},[37,7830,7831],{"class":50},"struct",[37,7833,7834],{"class":2035}," Student\n",[37,7836,7837],{"class":39,"line":92},[37,7838,1618],{"class":54},[37,7840,7841],{"class":39,"line":97},[37,7842,7843],{"class":43},"    \u002F\u002F成员列表\n",[37,7845,7846],{"class":39,"line":107},[37,7847,2472],{"emptyLinePlaceholder":131},[37,7849,7850],{"class":39,"line":1390},[37,7851,7852],{"class":43},"    \u002F\u002F姓名\n",[37,7854,7855],{"class":39,"line":1402},[37,7856,7857],{"class":54},"    string name;\n",[37,7859,7860],{"class":39,"line":1684},[37,7861,7862],{"class":43},"    \u002F\u002F年龄\n",[37,7864,7865,7867],{"class":39,"line":1689},[37,7866,2057],{"class":50},[37,7868,7869],{"class":54}," age;\n",[37,7871,7872],{"class":39,"line":1695},[37,7873,7874],{"class":43},"    \u002F\u002F分数\n",[37,7876,7877,7879],{"class":39,"line":1700},[37,7878,2057],{"class":50},[37,7880,7881],{"class":54}," score;\n",[37,7883,7884],{"class":39,"line":1714},[37,7885,4067],{"class":54},[37,7887,7888,7890],{"class":39,"line":1719},[37,7889,7831],{"class":50},[37,7891,7892],{"class":2035}," School\n",[37,7894,7895],{"class":39,"line":1725},[37,7896,1618],{"class":54},[37,7898,7899],{"class":39,"line":1746},[37,7900,7843],{"class":43},[37,7902,7903],{"class":39,"line":1751},[37,7904,2472],{"emptyLinePlaceholder":131},[37,7906,7907],{"class":39,"line":1765},[37,7908,7852],{"class":43},[37,7910,7911],{"class":39,"line":1770},[37,7912,7857],{"class":54},[37,7914,7915],{"class":39,"line":1799},[37,7916,7862],{"class":43},[37,7918,7919,7921],{"class":39,"line":1804},[37,7920,2057],{"class":50},[37,7922,7869],{"class":54},[37,7924,7925],{"class":39,"line":1821},[37,7926,7874],{"class":43},[37,7928,7929,7931],{"class":39,"line":1826},[37,7930,2057],{"class":50},[37,7932,7881],{"class":54},[37,7934,7935,7938],{"class":39,"line":1831},[37,7936,7937],{"class":54},"} s3;",[37,7939,7940],{"class":43}," \u002F\u002F创建结构体时就创建了变量\n",[37,7942,7943,7945,7947],{"class":39,"line":1836},[37,7944,211],{"class":50},[37,7946,2045],{"class":2035},[37,7948,2048],{"class":54},[37,7950,7951],{"class":39,"line":1850},[37,7952,1618],{"class":54},[37,7954,7955],{"class":39,"line":1855},[37,7956,7957],{"class":43},"    \u002F\u002F2.通过学生类型创建具体学生\n",[37,7959,7960],{"class":39,"line":2649},[37,7961,7962],{"class":43},"    \u002F\u002F2.1 struct Student s1;\n",[37,7964,7965,7968,7971],{"class":39,"line":2663},[37,7966,7967],{"class":50},"    struct",[37,7969,7970],{"class":2035}," Student",[37,7972,7973],{"class":54}," s1;\n",[37,7975,7976],{"class":39,"line":2671},[37,7977,7978],{"class":43},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[37,7980,7981,7984,7986,7989],{"class":39,"line":2676},[37,7982,7983],{"class":54},"    s1.name",[37,7985,70],{"class":50},[37,7987,7988],{"class":309},"\"张三\"",[37,7990,1364],{"class":54},[37,7992,7993,7996,7998,8000],{"class":39,"line":2682},[37,7994,7995],{"class":54},"    s1.age",[37,7997,70],{"class":50},[37,7999,853],{"class":82},[37,8001,1364],{"class":54},[37,8003,8004,8007,8009,8011],{"class":39,"line":2688},[37,8005,8006],{"class":54},"    s1.score",[37,8008,70],{"class":50},[37,8010,459],{"class":82},[37,8012,1364],{"class":54},[37,8014,8015],{"class":39,"line":2693},[37,8016,8017],{"class":43},"    \u002F\u002F输出结果\n",[37,8019,8021,8023,8025,8028,8030,8033,8035,8038,8040],{"class":39,"line":8020},37,[37,8022,1623],{"class":54},[37,8024,1247],{"class":50},[37,8026,8027],{"class":54},"s1.name",[37,8029,1247],{"class":50},[37,8031,8032],{"class":54},"s1.age",[37,8034,1247],{"class":50},[37,8036,8037],{"class":54},"s1.score",[37,8039,1247],{"class":50},[37,8041,1269],{"class":54},[37,8043,8045],{"class":39,"line":8044},38,[37,8046,2472],{"emptyLinePlaceholder":131},[37,8048,8050],{"class":39,"line":8049},39,[37,8051,8052],{"class":43},"    \u002F\u002F2.2 struct Student s2={...}\n",[37,8054,8056,8058,8060,8063,8065,8067,8070,8072,8074,8076,8078],{"class":39,"line":8055},40,[37,8057,7967],{"class":50},[37,8059,7970],{"class":2035},[37,8061,8062],{"class":54}," s2",[37,8064,70],{"class":50},[37,8066,1099],{"class":54},[37,8068,8069],{"class":309},"\"王五\"",[37,8071,583],{"class":54},[37,8073,853],{"class":82},[37,8075,583],{"class":54},[37,8077,459],{"class":82},[37,8079,4067],{"class":54},[37,8081,8083],{"class":39,"line":8082},41,[37,8084,2472],{"emptyLinePlaceholder":131},[37,8086,8088],{"class":39,"line":8087},42,[37,8089,8090],{"class":43},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[37,8092,8094,8097,8099,8101],{"class":39,"line":8093},43,[37,8095,8096],{"class":54},"    s3.name",[37,8098,70],{"class":50},[37,8100,3750],{"class":309},[37,8102,1364],{"class":54},[37,8104,8106,8109,8111,8113],{"class":39,"line":8105},44,[37,8107,8108],{"class":54},"    s3.age",[37,8110,70],{"class":50},[37,8112,853],{"class":82},[37,8114,1364],{"class":54},[37,8116,8118,8121,8123,8125],{"class":39,"line":8117},45,[37,8119,8120],{"class":54},"    s3.score",[37,8122,70],{"class":50},[37,8124,903],{"class":82},[37,8126,1364],{"class":54},[37,8128,8130],{"class":39,"line":8129},46,[37,8131,1637],{"class":54},[14,8133,8134],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[146,8136,8138],{"id":8137},"_42结构体数组","4.2结构体数组",[14,8140,8141],{},"将自定义的结构体放入到数组中方便维护",[14,8143,8144,8145,8148],{},"语法：struct 结构体名 数组名",[37,8146,8147],{},"元素个数","={ {}，{},...{} };",[27,8150,8152],{"className":196,"code":8151,"language":198,"meta":32,"style":32},"#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",[34,8153,8154,8160,8170,8176,8181,8187,8191,8195,8201,8207,8211,8215,8223,8227,8232,8247,8251,8267,8283,8287,8292,8308,8323,8338,8343,8369,8373,8396,8400],{"__ignoreMap":32},[37,8155,8156,8158],{"class":39,"line":40},[37,8157,2021],{"class":50},[37,8159,2024],{"class":309},[37,8161,8162,8164,8166,8168],{"class":39,"line":47},[37,8163,2029],{"class":50},[37,8165,2032],{"class":50},[37,8167,2036],{"class":2035},[37,8169,1364],{"class":54},[37,8171,8172,8174],{"class":39,"line":58},[37,8173,2021],{"class":50},[37,8175,7821],{"class":309},[37,8177,8178],{"class":39,"line":64},[37,8179,8180],{"class":43},"\u002F\u002F1.定义结构体\n",[37,8182,8183,8185],{"class":39,"line":76},[37,8184,7831],{"class":50},[37,8186,7834],{"class":2035},[37,8188,8189],{"class":39,"line":92},[37,8190,1618],{"class":54},[37,8192,8193],{"class":39,"line":97},[37,8194,7857],{"class":54},[37,8196,8197,8199],{"class":39,"line":107},[37,8198,2057],{"class":50},[37,8200,7869],{"class":54},[37,8202,8203,8205],{"class":39,"line":1390},[37,8204,2057],{"class":50},[37,8206,7881],{"class":54},[37,8208,8209],{"class":39,"line":1402},[37,8210,2472],{"emptyLinePlaceholder":131},[37,8212,8213],{"class":39,"line":1684},[37,8214,4067],{"class":54},[37,8216,8217,8219,8221],{"class":39,"line":1689},[37,8218,211],{"class":50},[37,8220,2045],{"class":2035},[37,8222,2048],{"class":54},[37,8224,8225],{"class":39,"line":1695},[37,8226,1618],{"class":54},[37,8228,8229],{"class":39,"line":1700},[37,8230,8231],{"class":43},"    \u002F\u002F2.创建结构体数组\n",[37,8233,8234,8236,8238,8241,8243,8245],{"class":39,"line":1714},[37,8235,7967],{"class":50},[37,8237,7970],{"class":2035},[37,8239,8240],{"class":54}," stuArray[",[37,8242,282],{"class":82},[37,8244,1143],{"class":54},[37,8246,4980],{"class":50},[37,8248,8249],{"class":39,"line":1719},[37,8250,2102],{"class":54},[37,8252,8253,8255,8257,8259,8261,8263,8265],{"class":39,"line":1725},[37,8254,4989],{"class":54},[37,8256,7988],{"class":309},[37,8258,583],{"class":54},[37,8260,853],{"class":82},[37,8262,583],{"class":54},[37,8264,516],{"class":82},[37,8266,5002],{"class":54},[37,8268,8269,8271,8273,8275,8277,8279,8281],{"class":39,"line":1746},[37,8270,4989],{"class":54},[37,8272,3750],{"class":309},[37,8274,583],{"class":54},[37,8276,778],{"class":82},[37,8278,583],{"class":54},[37,8280,778],{"class":82},[37,8282,1637],{"class":54},[37,8284,8285],{"class":39,"line":1751},[37,8286,2259],{"class":54},[37,8288,8289],{"class":39,"line":1765},[37,8290,8291],{"class":43},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[37,8293,8294,8297,8299,8302,8304,8306],{"class":39,"line":1770},[37,8295,8296],{"class":54},"    stuArray[",[37,8298,422],{"class":82},[37,8300,8301],{"class":54},"].name",[37,8303,70],{"class":50},[37,8305,3773],{"class":309},[37,8307,1364],{"class":54},[37,8309,8310,8312,8314,8317,8319,8321],{"class":39,"line":1799},[37,8311,8296],{"class":54},[37,8313,422],{"class":82},[37,8315,8316],{"class":54},"].age",[37,8318,70],{"class":50},[37,8320,282],{"class":82},[37,8322,1364],{"class":54},[37,8324,8325,8327,8329,8332,8334,8336],{"class":39,"line":1804},[37,8326,8296],{"class":54},[37,8328,422],{"class":82},[37,8330,8331],{"class":54},"].score",[37,8333,70],{"class":50},[37,8335,282],{"class":82},[37,8337,1364],{"class":54},[37,8339,8340],{"class":39,"line":1821},[37,8341,8342],{"class":43},"    \u002F\u002F4.遍历结构体数组\n",[37,8344,8345,8347,8349,8351,8353,8355,8357,8359,8361,8363,8365,8367],{"class":39,"line":1826},[37,8346,3273],{"class":50},[37,8348,1730],{"class":54},[37,8350,211],{"class":50},[37,8352,3104],{"class":54},[37,8354,70],{"class":50},[37,8356,396],{"class":82},[37,8358,3111],{"class":54},[37,8360,1113],{"class":50},[37,8362,282],{"class":82},[37,8364,3111],{"class":54},[37,8366,2364],{"class":50},[37,8368,214],{"class":54},[37,8370,8371],{"class":39,"line":1831},[37,8372,2102],{"class":54},[37,8374,8375,8377,8379,8382,8384,8387,8389,8392,8394],{"class":39,"line":1836},[37,8376,3523],{"class":54},[37,8378,1247],{"class":50},[37,8380,8381],{"class":54},"stuArray[i].name",[37,8383,1247],{"class":50},[37,8385,8386],{"class":54},"stuArray[i].age",[37,8388,1247],{"class":50},[37,8390,8391],{"class":54},"stuArray[i].score",[37,8393,1247],{"class":50},[37,8395,1269],{"class":54},[37,8397,8398],{"class":39,"line":1850},[37,8399,2259],{"class":54},[37,8401,8402],{"class":39,"line":1855},[37,8403,1637],{"class":54},[146,8405,8407],{"id":8406},"_43结构体指针","4.3结构体指针",[14,8409,8410],{},"作用：通过指针访问结构体中的成员",[14,8412,8413],{},"利用操作符->可以通过结构体指针访问结构体属性",[27,8415,8417],{"className":196,"code":8416,"language":198,"meta":32,"style":32},"#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",[34,8418,8419,8425,8435,8441,8445,8451,8455,8459,8465,8471,8475,8483,8487,8492,8517,8522,8537,8542,8565],{"__ignoreMap":32},[37,8420,8421,8423],{"class":39,"line":40},[37,8422,2021],{"class":50},[37,8424,2024],{"class":309},[37,8426,8427,8429,8431,8433],{"class":39,"line":47},[37,8428,2029],{"class":50},[37,8430,2032],{"class":50},[37,8432,2036],{"class":2035},[37,8434,1364],{"class":54},[37,8436,8437,8439],{"class":39,"line":58},[37,8438,2021],{"class":50},[37,8440,7821],{"class":309},[37,8442,8443],{"class":39,"line":64},[37,8444,8180],{"class":43},[37,8446,8447,8449],{"class":39,"line":76},[37,8448,7831],{"class":50},[37,8450,7834],{"class":2035},[37,8452,8453],{"class":39,"line":92},[37,8454,1618],{"class":54},[37,8456,8457],{"class":39,"line":97},[37,8458,7857],{"class":54},[37,8460,8461,8463],{"class":39,"line":107},[37,8462,2057],{"class":50},[37,8464,7869],{"class":54},[37,8466,8467,8469],{"class":39,"line":1390},[37,8468,2057],{"class":50},[37,8470,7881],{"class":54},[37,8472,8473],{"class":39,"line":1402},[37,8474,4067],{"class":54},[37,8476,8477,8479,8481],{"class":39,"line":1684},[37,8478,211],{"class":50},[37,8480,2045],{"class":2035},[37,8482,2048],{"class":54},[37,8484,8485],{"class":39,"line":1689},[37,8486,1618],{"class":54},[37,8488,8489],{"class":39,"line":1695},[37,8490,8491],{"class":43},"    \u002F\u002F创建学生结构体变量\n",[37,8493,8494,8496,8498,8501,8503,8505,8507,8509,8511,8513,8515],{"class":39,"line":1700},[37,8495,7967],{"class":50},[37,8497,7970],{"class":2035},[37,8499,8500],{"class":54}," s",[37,8502,70],{"class":50},[37,8504,1099],{"class":54},[37,8506,7988],{"class":309},[37,8508,583],{"class":54},[37,8510,853],{"class":82},[37,8512,583],{"class":54},[37,8514,1794],{"class":82},[37,8516,4067],{"class":54},[37,8518,8519],{"class":39,"line":1714},[37,8520,8521],{"class":43},"    \u002F\u002F通过指针指向结构体变量\n",[37,8523,8524,8526,8528,8530,8532,8534],{"class":39,"line":1719},[37,8525,7967],{"class":50},[37,8527,7970],{"class":2035},[37,8529,6590],{"class":50},[37,8531,14],{"class":54},[37,8533,6411],{"class":50},[37,8535,8536],{"class":54},"s\n",[37,8538,8539],{"class":39,"line":1725},[37,8540,8541],{"class":43},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[37,8543,8544,8546,8548,8551,8553,8556,8558,8561,8563],{"class":39,"line":1746},[37,8545,1623],{"class":54},[37,8547,1247],{"class":50},[37,8549,8550],{"class":54},"p->name",[37,8552,1247],{"class":50},[37,8554,8555],{"class":54},"p->age",[37,8557,1247],{"class":50},[37,8559,8560],{"class":54},"p->score",[37,8562,1247],{"class":50},[37,8564,1269],{"class":54},[37,8566,8567],{"class":39,"line":1751},[37,8568,1637],{"class":54},[146,8570,8572],{"id":8571},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,8574,8575],{},"作用：结构体中的成员可以是另一个结构体",[14,8577,8578],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[27,8580,8582],{"className":196,"code":8581,"language":198,"meta":32,"style":32},"#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",[34,8583,8584,8590,8600,8606,8611,8619,8623,8627,8633,8639,8643,8648,8655,8659,8666,8670,8676,8681,8685,8693,8697,8702,8707,8712,8723,8735,8746,8759,8770,8781],{"__ignoreMap":32},[37,8585,8586,8588],{"class":39,"line":40},[37,8587,2021],{"class":50},[37,8589,2024],{"class":309},[37,8591,8592,8594,8596,8598],{"class":39,"line":47},[37,8593,2029],{"class":50},[37,8595,2032],{"class":50},[37,8597,2036],{"class":2035},[37,8599,1364],{"class":54},[37,8601,8602,8604],{"class":39,"line":58},[37,8603,2021],{"class":50},[37,8605,7821],{"class":309},[37,8607,8608],{"class":39,"line":64},[37,8609,8610],{"class":43},"\u002F\u002F定义学生结构体\n",[37,8612,8613,8615,8617],{"class":39,"line":76},[37,8614,7831],{"class":50},[37,8616,7970],{"class":2035},[37,8618,2746],{"class":54},[37,8620,8621],{"class":39,"line":92},[37,8622,1618],{"class":54},[37,8624,8625],{"class":39,"line":97},[37,8626,7857],{"class":54},[37,8628,8629,8631],{"class":39,"line":107},[37,8630,2057],{"class":50},[37,8632,7869],{"class":54},[37,8634,8635,8637],{"class":39,"line":1390},[37,8636,2057],{"class":50},[37,8638,7881],{"class":54},[37,8640,8641],{"class":39,"line":1402},[37,8642,1637],{"class":54},[37,8644,8645],{"class":39,"line":1684},[37,8646,8647],{"class":43},"\u002F\u002F定义老师结构体\n",[37,8649,8650,8652],{"class":39,"line":1689},[37,8651,7831],{"class":50},[37,8653,8654],{"class":2035}," Teacher\n",[37,8656,8657],{"class":39,"line":1695},[37,8658,1618],{"class":54},[37,8660,8661,8663],{"class":39,"line":1700},[37,8662,2057],{"class":50},[37,8664,8665],{"class":54}," id;\n",[37,8667,8668],{"class":39,"line":1714},[37,8669,7857],{"class":54},[37,8671,8672,8674],{"class":39,"line":1719},[37,8673,2057],{"class":50},[37,8675,7869],{"class":54},[37,8677,8678],{"class":39,"line":1725},[37,8679,8680],{"class":54},"    Student stu;\n",[37,8682,8683],{"class":39,"line":1746},[37,8684,1637],{"class":54},[37,8686,8687,8689,8691],{"class":39,"line":1751},[37,8688,211],{"class":50},[37,8690,2045],{"class":2035},[37,8692,6050],{"class":54},[37,8694,8695],{"class":39,"line":1765},[37,8696,1618],{"class":54},[37,8698,8699],{"class":39,"line":1770},[37,8700,8701],{"class":43},"    \u002F\u002F结构体嵌套结构体\n",[37,8703,8704],{"class":39,"line":1799},[37,8705,8706],{"class":43},"    \u002F\u002F创建老师\n",[37,8708,8709],{"class":39,"line":1804},[37,8710,8711],{"class":54},"    Teacher t;\n",[37,8713,8714,8717,8719,8721],{"class":39,"line":1821},[37,8715,8716],{"class":54},"    t.id",[37,8718,70],{"class":50},[37,8720,516],{"class":82},[37,8722,1364],{"class":54},[37,8724,8725,8728,8730,8733],{"class":39,"line":1826},[37,8726,8727],{"class":54},"    t.name",[37,8729,70],{"class":50},[37,8731,8732],{"class":309},"\"老王\"",[37,8734,1364],{"class":54},[37,8736,8737,8740,8742,8744],{"class":39,"line":1831},[37,8738,8739],{"class":54},"    t.age",[37,8741,70],{"class":50},[37,8743,853],{"class":82},[37,8745,1364],{"class":54},[37,8747,8748,8751,8753,8756],{"class":39,"line":1836},[37,8749,8750],{"class":54},"    t.stu.name",[37,8752,70],{"class":50},[37,8754,8755],{"class":309},"\"小王\"",[37,8757,8758],{"class":54},"；\n",[37,8760,8761,8764,8766,8768],{"class":39,"line":1850},[37,8762,8763],{"class":54},"    t.stu.age",[37,8765,70],{"class":50},[37,8767,903],{"class":82},[37,8769,1364],{"class":54},[37,8771,8772,8775,8777,8779],{"class":39,"line":1855},[37,8773,8774],{"class":54},"    t.stu.score",[37,8776,70],{"class":50},[37,8778,549],{"class":82},[37,8780,1364],{"class":54},[37,8782,8783],{"class":39,"line":2649},[37,8784,1637],{"class":54},[146,8786,8788],{"id":8787},"_45结构体做函数参数","4.5结构体做函数参数",[14,8790,8791],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[27,8793,8795],{"className":196,"code":8794,"language":198,"meta":32,"style":32},"#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",[34,8796,8797,8803,8813,8819,8825,8829,8833,8839,8845,8849,8854,8859,8876,8880,8913,8917,8922,8941,8945,8976,8980,8988,8992,9001,9013,9025,9037,9050,9058,9071,9083,9091],{"__ignoreMap":32},[37,8798,8799,8801],{"class":39,"line":40},[37,8800,2021],{"class":50},[37,8802,2024],{"class":309},[37,8804,8805,8807,8809,8811],{"class":39,"line":47},[37,8806,2029],{"class":50},[37,8808,2032],{"class":50},[37,8810,2036],{"class":2035},[37,8812,1364],{"class":54},[37,8814,8815,8817],{"class":39,"line":58},[37,8816,2021],{"class":50},[37,8818,7821],{"class":309},[37,8820,8821,8823],{"class":39,"line":64},[37,8822,7831],{"class":50},[37,8824,7834],{"class":2035},[37,8826,8827],{"class":39,"line":76},[37,8828,1618],{"class":54},[37,8830,8831],{"class":39,"line":92},[37,8832,7857],{"class":54},[37,8834,8835,8837],{"class":39,"line":97},[37,8836,2057],{"class":50},[37,8838,7869],{"class":54},[37,8840,8841,8843],{"class":39,"line":107},[37,8842,2057],{"class":50},[37,8844,7881],{"class":54},[37,8846,8847],{"class":39,"line":1390},[37,8848,4067],{"class":54},[37,8850,8851],{"class":39,"line":1402},[37,8852,8853],{"class":43},"\u002F\u002F打印学生信息的函数\n",[37,8855,8856],{"class":39,"line":1684},[37,8857,8858],{"class":43},"\u002F\u002F值传递\n",[37,8860,8861,8863,8866,8868,8870,8872,8874],{"class":39,"line":1689},[37,8862,5436],{"class":50},[37,8864,8865],{"class":2035}," printStudent1",[37,8867,208],{"class":54},[37,8869,7831],{"class":50},[37,8871,7970],{"class":2035},[37,8873,8500],{"class":5288},[37,8875,214],{"class":54},[37,8877,8878],{"class":39,"line":1695},[37,8879,1618],{"class":54},[37,8881,8882,8884,8886,8889,8891,8894,8896,8899,8901,8903,8905,8908,8910],{"class":39,"line":1700},[37,8883,6601],{"class":54},[37,8885,1247],{"class":50},[37,8887,8888],{"class":54}," s.name ",[37,8890,1247],{"class":50},[37,8892,8893],{"class":309}," \" \"",[37,8895,1517],{"class":50},[37,8897,8898],{"class":54}," s.age ",[37,8900,1247],{"class":50},[37,8902,8893],{"class":309},[37,8904,1517],{"class":50},[37,8906,8907],{"class":54}," s.score ",[37,8909,1247],{"class":50},[37,8911,8912],{"class":54}," endl;\n",[37,8914,8915],{"class":39,"line":1714},[37,8916,1637],{"class":54},[37,8918,8919],{"class":39,"line":1719},[37,8920,8921],{"class":43},"\u002F\u002F地址传递\n",[37,8923,8924,8926,8929,8931,8933,8935,8937,8939],{"class":39,"line":1725},[37,8925,5436],{"class":50},[37,8927,8928],{"class":2035}," printStudent2",[37,8930,208],{"class":54},[37,8932,7831],{"class":50},[37,8934,7970],{"class":2035},[37,8936,6590],{"class":50},[37,8938,898],{"class":5288},[37,8940,214],{"class":54},[37,8942,8943],{"class":39,"line":1746},[37,8944,1618],{"class":54},[37,8946,8947,8949,8951,8954,8956,8958,8960,8963,8965,8967,8969,8972,8974],{"class":39,"line":1751},[37,8948,6601],{"class":54},[37,8950,1247],{"class":50},[37,8952,8953],{"class":54}," s->name ",[37,8955,1247],{"class":50},[37,8957,8893],{"class":309},[37,8959,1517],{"class":50},[37,8961,8962],{"class":54}," s->age ",[37,8964,1247],{"class":50},[37,8966,8893],{"class":309},[37,8968,1517],{"class":50},[37,8970,8971],{"class":54}," s->score ",[37,8973,1247],{"class":50},[37,8975,8912],{"class":54},[37,8977,8978],{"class":39,"line":1765},[37,8979,1637],{"class":54},[37,8981,8982,8984,8986],{"class":39,"line":1770},[37,8983,211],{"class":50},[37,8985,2045],{"class":2035},[37,8987,2048],{"class":54},[37,8989,8990],{"class":39,"line":1799},[37,8991,1618],{"class":54},[37,8993,8994,8996,8998],{"class":39,"line":1804},[37,8995,7967],{"class":50},[37,8997,7970],{"class":2035},[37,8999,9000],{"class":54}," s;\n",[37,9002,9003,9006,9008,9011],{"class":39,"line":1821},[37,9004,9005],{"class":54},"    s.name ",[37,9007,70],{"class":50},[37,9009,9010],{"class":309}," \"张三\"",[37,9012,1364],{"class":54},[37,9014,9015,9018,9020,9023],{"class":39,"line":1826},[37,9016,9017],{"class":54},"    s.age ",[37,9019,70],{"class":50},[37,9021,9022],{"class":82}," 20",[37,9024,1364],{"class":54},[37,9026,9027,9030,9032,9035],{"class":39,"line":1831},[37,9028,9029],{"class":54},"    s.score ",[37,9031,70],{"class":50},[37,9033,9034],{"class":82}," 85",[37,9036,1364],{"class":54},[37,9038,9039,9041,9043,9046,9048],{"class":39,"line":1836},[37,9040,1623],{"class":54},[37,9042,1247],{"class":50},[37,9044,9045],{"class":309},"\"值传递:\"",[37,9047,1247],{"class":50},[37,9049,1269],{"class":54},[37,9051,9052,9055],{"class":39,"line":1850},[37,9053,9054],{"class":2035},"    printStudent1",[37,9056,9057],{"class":54},"(s);\n",[37,9059,9060,9062,9064,9067,9069],{"class":39,"line":1855},[37,9061,1623],{"class":54},[37,9063,1247],{"class":50},[37,9065,9066],{"class":309},"\"地址传递:\"",[37,9068,1247],{"class":50},[37,9070,1269],{"class":54},[37,9072,9073,9076,9078,9080],{"class":39,"line":2649},[37,9074,9075],{"class":2035},"    printStudent2",[37,9077,208],{"class":54},[37,9079,558],{"class":50},[37,9081,9082],{"class":54},"s); \n",[37,9084,9085,9087,9089],{"class":39,"line":2663},[37,9086,4162],{"class":50},[37,9088,4165],{"class":82},[37,9090,1364],{"class":54},[37,9092,9093],{"class":39,"line":2671},[37,9094,1637],{"class":54},[14,9096,9097],{},"注意：",[1210,9099,9100,9103],{},[161,9101,9102],{},"1.先定义结构体，不要在函数中写结构体的定义",[161,9104,9105],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[146,9107,9109],{"id":9108},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9111,9112],{},"用const防止误操作",[27,9114,9116],{"className":196,"code":9115,"language":198,"meta":32,"style":32},"#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",[34,9117,9118,9124,9134,9140,9145,9149,9153,9159,9165,9169,9185,9189,9212,9216,9224,9228,9249,9256,9260],{"__ignoreMap":32},[37,9119,9120,9122],{"class":39,"line":40},[37,9121,2021],{"class":50},[37,9123,2024],{"class":309},[37,9125,9126,9128,9130,9132],{"class":39,"line":47},[37,9127,2029],{"class":50},[37,9129,2032],{"class":50},[37,9131,2036],{"class":2035},[37,9133,1364],{"class":54},[37,9135,9136,9138],{"class":39,"line":58},[37,9137,2021],{"class":50},[37,9139,7821],{"class":309},[37,9141,9142],{"class":39,"line":64},[37,9143,9144],{"class":54},"sctuct Student\n",[37,9146,9147],{"class":39,"line":76},[37,9148,1618],{"class":54},[37,9150,9151],{"class":39,"line":92},[37,9152,7857],{"class":54},[37,9154,9155,9157],{"class":39,"line":97},[37,9156,2057],{"class":50},[37,9158,7869],{"class":54},[37,9160,9161,9163],{"class":39,"line":107},[37,9162,2057],{"class":50},[37,9164,7881],{"class":54},[37,9166,9167],{"class":39,"line":1390},[37,9168,4067],{"class":54},[37,9170,9171,9173,9176,9178,9181,9183],{"class":39,"line":1402},[37,9172,5436],{"class":50},[37,9174,9175],{"class":2035}," printStudents",[37,9177,208],{"class":54},[37,9179,9180],{"class":2035},"student",[37,9182,8500],{"class":5288},[37,9184,214],{"class":54},[37,9186,9187],{"class":39,"line":1684},[37,9188,1618],{"class":54},[37,9190,9191,9193,9195,9198,9200,9203,9205,9208,9210],{"class":39,"line":1689},[37,9192,1623],{"class":54},[37,9194,1247],{"class":50},[37,9196,9197],{"class":54},"s.name",[37,9199,1247],{"class":50},[37,9201,9202],{"class":54},"s.age",[37,9204,1247],{"class":50},[37,9206,9207],{"class":54},"s.score",[37,9209,1247],{"class":50},[37,9211,1269],{"class":54},[37,9213,9214],{"class":39,"line":1695},[37,9215,1637],{"class":54},[37,9217,9218,9220,9222],{"class":39,"line":1700},[37,9219,211],{"class":50},[37,9221,2045],{"class":2035},[37,9223,6050],{"class":54},[37,9225,9226],{"class":39,"line":1714},[37,9227,1618],{"class":54},[37,9229,9230,9233,9235,9237,9239,9241,9243,9245,9247],{"class":39,"line":1719},[37,9231,9232],{"class":54},"    Student s",[37,9234,70],{"class":50},[37,9236,1099],{"class":54},[37,9238,7988],{"class":309},[37,9240,583],{"class":54},[37,9242,853],{"class":82},[37,9244,583],{"class":54},[37,9246,853],{"class":82},[37,9248,4067],{"class":54},[37,9250,9251,9254],{"class":39,"line":1725},[37,9252,9253],{"class":2035},"    printStudent",[37,9255,9057],{"class":54},[37,9257,9258],{"class":39,"line":1746},[37,9259,2472],{"emptyLinePlaceholder":131},[37,9261,9262],{"class":39,"line":1751},[37,9263,1637],{"class":54},[14,9265,9097],{},[1210,9267,9268,9271,9274],{},[161,9269,9270],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[161,9272,9273],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[161,9275,9276],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[27,9278,9280],{"className":196,"code":9279,"language":198,"meta":32,"style":32},"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",[34,9281,9282,9301,9305,9310,9330],{"__ignoreMap":32},[37,9283,9284,9286,9288,9290,9292,9295,9297,9299],{"class":39,"line":40},[37,9285,5436],{"class":50},[37,9287,9175],{"class":2035},[37,9289,208],{"class":54},[37,9291,6864],{"class":50},[37,9293,9294],{"class":2035}," student",[37,9296,6590],{"class":50},[37,9298,898],{"class":5288},[37,9300,214],{"class":54},[37,9302,9303],{"class":39,"line":47},[37,9304,1618],{"class":54},[37,9306,9307],{"class":39,"line":58},[37,9308,9309],{"class":43},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[37,9311,9312,9314,9316,9318,9320,9322,9324,9326,9328],{"class":39,"line":64},[37,9313,1623],{"class":54},[37,9315,1247],{"class":50},[37,9317,9197],{"class":54},[37,9319,1247],{"class":50},[37,9321,9202],{"class":54},[37,9323,1247],{"class":50},[37,9325,9207],{"class":54},[37,9327,1247],{"class":50},[37,9329,1269],{"class":54},[37,9331,9332],{"class":39,"line":76},[37,9333,1637],{"class":54},[146,9335,9337],{"id":9336},"_47案例","4.7案例",[158,9339,9340],{},[161,9341,9342],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[27,9344,9346],{"className":196,"code":9345,"language":198,"meta":32,"style":32},"#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",[34,9347,9348,9354,9364,9370,9377,9381,9387,9391,9396,9402,9408,9412,9416,9422,9426,9431,9436,9449,9453,9458,9484,9488,9500,9527,9531,9543,9553,9557,9562,9591,9595,9607,9616,9643,9654,9664,9668,9672,9676,9681,9705,9709,9733,9737,9756,9782,9786,9811,9834,9858,9863,9868,9873,9882,9887,9893,9914,9920,9934,9940,9967,9976,9982,9990,9995],{"__ignoreMap":32},[37,9349,9350,9352],{"class":39,"line":40},[37,9351,2021],{"class":50},[37,9353,2024],{"class":309},[37,9355,9356,9358,9360,9362],{"class":39,"line":47},[37,9357,2029],{"class":50},[37,9359,2032],{"class":50},[37,9361,2036],{"class":2035},[37,9363,1364],{"class":54},[37,9365,9366,9368],{"class":39,"line":58},[37,9367,2021],{"class":50},[37,9369,7821],{"class":309},[37,9371,9372,9374],{"class":39,"line":64},[37,9373,2021],{"class":50},[37,9375,9376],{"class":309},"\u003Cctime>\n",[37,9378,9379],{"class":39,"line":76},[37,9380,8610],{"class":43},[37,9382,9383,9385],{"class":39,"line":92},[37,9384,7831],{"class":50},[37,9386,7834],{"class":2035},[37,9388,9389],{"class":39,"line":97},[37,9390,1618],{"class":54},[37,9392,9393],{"class":39,"line":107},[37,9394,9395],{"class":54},"    string sName;\n",[37,9397,9398,9400],{"class":39,"line":1390},[37,9399,2057],{"class":50},[37,9401,7869],{"class":54},[37,9403,9404,9406],{"class":39,"line":1402},[37,9405,2057],{"class":50},[37,9407,7881],{"class":54},[37,9409,9410],{"class":39,"line":1684},[37,9411,4067],{"class":54},[37,9413,9414],{"class":39,"line":1689},[37,9415,8647],{"class":43},[37,9417,9418,9420],{"class":39,"line":1695},[37,9419,7831],{"class":50},[37,9421,8654],{"class":2035},[37,9423,9424],{"class":39,"line":1700},[37,9425,1618],{"class":54},[37,9427,9428],{"class":39,"line":1714},[37,9429,9430],{"class":54},"    string tName;\n",[37,9432,9433],{"class":39,"line":1719},[37,9434,9435],{"class":43},"    \u002F\u002F学生数组\n",[37,9437,9438,9440,9442,9445,9447],{"class":39,"line":1725},[37,9439,7967],{"class":50},[37,9441,7970],{"class":2035},[37,9443,9444],{"class":54}," sArray[",[37,9446,524],{"class":82},[37,9448,4762],{"class":54},[37,9450,9451],{"class":39,"line":1746},[37,9452,4067],{"class":54},[37,9454,9455],{"class":39,"line":1751},[37,9456,9457],{"class":43},"\u002F\u002F给老师和学生赋值的函数\n",[37,9459,9460,9462,9465,9467,9469,9472,9475,9478,9480,9482],{"class":39,"line":1765},[37,9461,5436],{"class":50},[37,9463,9464],{"class":2035}," allocateSpace",[37,9466,208],{"class":54},[37,9468,7831],{"class":50},[37,9470,9471],{"class":2035}," Teacher",[37,9473,9474],{"class":5288}," tArray",[37,9476,9477],{"class":54},"[],",[37,9479,211],{"class":50},[37,9481,7403],{"class":5288},[37,9483,214],{"class":54},[37,9485,9486],{"class":39,"line":1770},[37,9487,1618],{"class":54},[37,9489,9490,9493,9495,9498],{"class":39,"line":1799},[37,9491,9492],{"class":54},"    string nameSeed",[37,9494,70],{"class":50},[37,9496,9497],{"class":309},"\"ABCDE\"",[37,9499,1364],{"class":54},[37,9501,9502,9504,9506,9508,9511,9513,9515,9518,9520,9523,9525],{"class":39,"line":1804},[37,9503,3273],{"class":50},[37,9505,1730],{"class":54},[37,9507,211],{"class":50},[37,9509,9510],{"class":54}," i ",[37,9512,70],{"class":50},[37,9514,4165],{"class":82},[37,9516,9517],{"class":54},"; i ",[37,9519,1113],{"class":50},[37,9521,9522],{"class":54}," len; i",[37,9524,2364],{"class":50},[37,9526,214],{"class":54},[37,9528,9529],{"class":39,"line":1821},[37,9530,2102],{"class":54},[37,9532,9533,9536,9538,9541],{"class":39,"line":1826},[37,9534,9535],{"class":54},"        tArray[i].tName ",[37,9537,70],{"class":50},[37,9539,9540],{"class":309}," \"Teacher_\"",[37,9542,1364],{"class":54},[37,9544,9545,9547,9550],{"class":39,"line":1831},[37,9546,9535],{"class":54},[37,9548,9549],{"class":50},"+=",[37,9551,9552],{"class":54},"nameSeed[i];\n",[37,9554,9555],{"class":39,"line":1836},[37,9556,2472],{"emptyLinePlaceholder":131},[37,9558,9559],{"class":39,"line":1850},[37,9560,9561],{"class":43},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[37,9563,9564,9566,9568,9570,9573,9575,9577,9580,9582,9584,9587,9589],{"class":39,"line":1855},[37,9565,3475],{"class":50},[37,9567,1730],{"class":54},[37,9569,211],{"class":50},[37,9571,9572],{"class":54}," j ",[37,9574,70],{"class":50},[37,9576,4165],{"class":82},[37,9578,9579],{"class":54},"; j ",[37,9581,1113],{"class":50},[37,9583,2220],{"class":82},[37,9585,9586],{"class":54},"; j",[37,9588,2364],{"class":50},[37,9590,214],{"class":54},[37,9592,9593],{"class":39,"line":2649},[37,9594,2582],{"class":54},[37,9596,9597,9600,9602,9605],{"class":39,"line":2663},[37,9598,9599],{"class":54},"            tArray[i].sArray[j].sName ",[37,9601,70],{"class":50},[37,9603,9604],{"class":309}," \"Student_\"",[37,9606,1364],{"class":54},[37,9608,9609,9611,9613],{"class":39,"line":2671},[37,9610,9599],{"class":54},[37,9612,9549],{"class":50},[37,9614,9615],{"class":54}," nameSeed[j];\n",[37,9617,9618,9621,9624,9626,9628,9630,9632,9634,9636,9638,9640],{"class":39,"line":2676},[37,9619,9620],{"class":50},"            int",[37,9622,9623],{"class":54}," random",[37,9625,70],{"class":50},[37,9627,2496],{"class":2035},[37,9629,2499],{"class":54},[37,9631,533],{"class":50},[37,9633,1110],{"class":82},[37,9635,685],{"class":50},[37,9637,606],{"class":82},[37,9639,261],{"class":54},[37,9641,9642],{"class":43},"\u002F\u002F40~99\n",[37,9644,9645,9648,9650,9652],{"class":39,"line":2682},[37,9646,9647],{"class":54},"            tArray[i].sArray[j].age ",[37,9649,70],{"class":50},[37,9651,9022],{"class":82},[37,9653,1364],{"class":54},[37,9655,9656,9659,9661],{"class":39,"line":2688},[37,9657,9658],{"class":54},"            tArray[i].sArray[j].score ",[37,9660,70],{"class":50},[37,9662,9663],{"class":54}," random;\n",[37,9665,9666],{"class":39,"line":2693},[37,9667,2601],{"class":54},[37,9669,9670],{"class":39,"line":8020},[37,9671,2259],{"class":54},[37,9673,9674],{"class":39,"line":8044},[37,9675,1637],{"class":54},[37,9677,9678],{"class":39,"line":8049},[37,9679,9680],{"class":43},"\u002F\u002F打印所有信息的函数\n",[37,9682,9683,9685,9688,9690,9692,9694,9696,9699,9701,9703],{"class":39,"line":8055},[37,9684,5436],{"class":50},[37,9686,9687],{"class":2035}," printInfo",[37,9689,208],{"class":54},[37,9691,7831],{"class":50},[37,9693,9471],{"class":2035},[37,9695,9474],{"class":5288},[37,9697,9698],{"class":54},"[], ",[37,9700,211],{"class":50},[37,9702,7403],{"class":5288},[37,9704,214],{"class":54},[37,9706,9707],{"class":39,"line":8082},[37,9708,1618],{"class":54},[37,9710,9711,9713,9715,9717,9719,9721,9723,9725,9727,9729,9731],{"class":39,"line":8087},[37,9712,3273],{"class":50},[37,9714,1730],{"class":54},[37,9716,211],{"class":50},[37,9718,9510],{"class":54},[37,9720,70],{"class":50},[37,9722,4165],{"class":82},[37,9724,9517],{"class":54},[37,9726,1113],{"class":50},[37,9728,9522],{"class":54},[37,9730,2364],{"class":50},[37,9732,214],{"class":54},[37,9734,9735],{"class":39,"line":8093},[37,9736,2102],{"class":54},[37,9738,9739,9742,9744,9747,9749,9752,9754],{"class":39,"line":8105},[37,9740,9741],{"class":54},"        cout ",[37,9743,1247],{"class":50},[37,9745,9746],{"class":309}," \"Teacher: \"",[37,9748,1517],{"class":50},[37,9750,9751],{"class":54}," tArray[i].tName ",[37,9753,1247],{"class":50},[37,9755,8912],{"class":54},[37,9757,9758,9760,9762,9764,9766,9768,9770,9772,9774,9776,9778,9780],{"class":39,"line":8117},[37,9759,3475],{"class":50},[37,9761,1730],{"class":54},[37,9763,211],{"class":50},[37,9765,9572],{"class":54},[37,9767,70],{"class":50},[37,9769,4165],{"class":82},[37,9771,9579],{"class":54},[37,9773,1113],{"class":50},[37,9775,2220],{"class":82},[37,9777,9586],{"class":54},[37,9779,2364],{"class":50},[37,9781,214],{"class":54},[37,9783,9784],{"class":39,"line":8129},[37,9785,2582],{"class":54},[37,9787,9789,9792,9794,9797,9799,9802,9804,9807,9809],{"class":39,"line":9788},47,[37,9790,9791],{"class":54},"            cout ",[37,9793,1247],{"class":50},[37,9795,9796],{"class":309}," \"",[37,9798,1304],{"class":82},[37,9800,9801],{"class":309},"Student: \"",[37,9803,1517],{"class":50},[37,9805,9806],{"class":54}," tArray[i].sArray[j].sName",[37,9808,1247],{"class":50},[37,9810,1269],{"class":54},[37,9812,9814,9816,9818,9820,9822,9825,9827,9830,9832],{"class":39,"line":9813},48,[37,9815,9791],{"class":54},[37,9817,1247],{"class":50},[37,9819,9796],{"class":309},[37,9821,1304],{"class":82},[37,9823,9824],{"class":309},"Age: \"",[37,9826,1517],{"class":50},[37,9828,9829],{"class":54}," tArray[i].sArray[j].age ",[37,9831,1247],{"class":50},[37,9833,8912],{"class":54},[37,9835,9837,9839,9841,9843,9845,9848,9850,9853,9855],{"class":39,"line":9836},49,[37,9838,9791],{"class":54},[37,9840,1247],{"class":50},[37,9842,9796],{"class":309},[37,9844,1304],{"class":82},[37,9846,9847],{"class":309},"Score: \"",[37,9849,1517],{"class":50},[37,9851,9852],{"class":54}," tArray[i].sArray[j].score ",[37,9854,1247],{"class":50},[37,9856,9857],{"class":54}," endl;   \n",[37,9859,9861],{"class":39,"line":9860},50,[37,9862,2601],{"class":54},[37,9864,9866],{"class":39,"line":9865},51,[37,9867,2259],{"class":54},[37,9869,9871],{"class":39,"line":9870},52,[37,9872,1637],{"class":54},[37,9874,9876,9878,9880],{"class":39,"line":9875},53,[37,9877,211],{"class":50},[37,9879,2045],{"class":2035},[37,9881,2048],{"class":54},[37,9883,9885],{"class":39,"line":9884},54,[37,9886,1618],{"class":54},[37,9888,9890],{"class":39,"line":9889},55,[37,9891,9892],{"class":43},"    \u002F\u002F随机数种子\n",[37,9894,9896,9898,9900,9902,9904,9906,9908,9910,9912],{"class":39,"line":9895},56,[37,9897,2445],{"class":2035},[37,9899,2448],{"class":54},[37,9901,2451],{"class":50},[37,9903,2454],{"class":50},[37,9905,86],{"class":54},[37,9907,2459],{"class":2035},[37,9909,208],{"class":54},[37,9911,2464],{"class":82},[37,9913,2467],{"class":54},[37,9915,9917],{"class":39,"line":9916},57,[37,9918,9919],{"class":43},"    \u002F\u002F1.创建3名老师的数组\n",[37,9921,9923,9925,9927,9930,9932],{"class":39,"line":9922},58,[37,9924,7967],{"class":50},[37,9926,9471],{"class":2035},[37,9928,9929],{"class":54}," tArray[",[37,9931,276],{"class":82},[37,9933,4762],{"class":54},[37,9935,9937],{"class":39,"line":9936},59,[37,9938,9939],{"class":43},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[37,9941,9943,9945,9948,9950,9953,9956,9958,9960,9963,9965],{"class":39,"line":9942},60,[37,9944,2057],{"class":50},[37,9946,9947],{"class":54}," len ",[37,9949,70],{"class":50},[37,9951,9952],{"class":50}," sizeof",[37,9954,9955],{"class":54},"(tArray) ",[37,9957,787],{"class":50},[37,9959,9952],{"class":50},[37,9961,9962],{"class":54},"(tArray[",[37,9964,396],{"class":82},[37,9966,3928],{"class":54},[37,9968,9970,9973],{"class":39,"line":9969},61,[37,9971,9972],{"class":2035},"    allocateSpace",[37,9974,9975],{"class":54},"(tArray, len);\n",[37,9977,9979],{"class":39,"line":9978},62,[37,9980,9981],{"class":43},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[37,9983,9985,9988],{"class":39,"line":9984},63,[37,9986,9987],{"class":2035},"    printInfo",[37,9989,9975],{"class":54},[37,9991,9993],{"class":39,"line":9992},64,[37,9994,2472],{"emptyLinePlaceholder":131},[37,9996,9998],{"class":39,"line":9997},65,[37,9999,1637],{"class":54},[158,10001,10002],{"start":47},[161,10003,10004,10007],{},[354,10005,10006],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,10009,10010],{},"五名英雄信息如下：",[27,10012,10016],{"className":10013,"code":10014,"language":10015,"meta":32,"style":32},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[34,10017,10018,10036,10053,10070,10087],{"__ignoreMap":32},[37,10019,10020,10022,10025,10027,10029,10031,10034],{"class":39,"line":40},[37,10021,4989],{"class":54},[37,10023,10024],{"class":309},"\"刘备\"",[37,10026,583],{"class":54},[37,10028,978],{"class":82},[37,10030,583],{"class":54},[37,10032,10033],{"class":309},"\"男\"",[37,10035,5002],{"class":54},[37,10037,10038,10040,10043,10045,10047,10049,10051],{"class":39,"line":47},[37,10039,4989],{"class":54},[37,10041,10042],{"class":309},"\"关羽\"",[37,10044,583],{"class":54},[37,10046,953],{"class":82},[37,10048,583],{"class":54},[37,10050,10033],{"class":309},[37,10052,5002],{"class":54},[37,10054,10055,10057,10060,10062,10064,10066,10068],{"class":39,"line":58},[37,10056,4989],{"class":54},[37,10058,10059],{"class":309},"\"张飞\"",[37,10061,583],{"class":54},[37,10063,903],{"class":82},[37,10065,583],{"class":54},[37,10067,10033],{"class":309},[37,10069,5002],{"class":54},[37,10071,10072,10074,10077,10079,10081,10083,10085],{"class":39,"line":64},[37,10073,4989],{"class":54},[37,10075,10076],{"class":309},"\"赵云\"",[37,10078,583],{"class":54},[37,10080,928],{"class":82},[37,10082,583],{"class":54},[37,10084,10033],{"class":309},[37,10086,5002],{"class":54},[37,10088,10089,10091,10094,10096,10098,10100,10103],{"class":39,"line":76},[37,10090,4989],{"class":54},[37,10092,10093],{"class":309},"\"貂蝉\"",[37,10095,583],{"class":54},[37,10097,878],{"class":82},[37,10099,583],{"class":54},[37,10101,10102],{"class":309},"\"女\"",[37,10104,5002],{"class":54},[14,10106,10107],{},"代码：",[27,10109,10111],{"className":196,"code":10110,"language":198,"meta":32,"style":32},"#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",[34,10112,10113,10119,10129,10135,10142,10146,10150,10156,10161,10165,10170,10193,10197,10222,10226,10259,10264,10293,10298,10313,10339,10359,10364,10369,10373,10377,10382,10404,10408,10432,10436,10498,10502,10506,10514,10518,10523,10534,10538,10554,10570,10586,10602,10618,10622,10642,10664,10669,10682,10689,10694,10700,10705,10718,10724],{"__ignoreMap":32},[37,10114,10115,10117],{"class":39,"line":40},[37,10116,2021],{"class":50},[37,10118,2024],{"class":309},[37,10120,10121,10123,10125,10127],{"class":39,"line":47},[37,10122,2029],{"class":50},[37,10124,2032],{"class":50},[37,10126,2036],{"class":2035},[37,10128,1364],{"class":54},[37,10130,10131,10133],{"class":39,"line":58},[37,10132,2021],{"class":50},[37,10134,7821],{"class":309},[37,10136,10137,10139],{"class":39,"line":64},[37,10138,7831],{"class":50},[37,10140,10141],{"class":2035}," Sanguo\n",[37,10143,10144],{"class":39,"line":76},[37,10145,1618],{"class":54},[37,10147,10148],{"class":39,"line":92},[37,10149,7857],{"class":54},[37,10151,10152,10154],{"class":39,"line":97},[37,10153,2057],{"class":50},[37,10155,7869],{"class":54},[37,10157,10158],{"class":39,"line":107},[37,10159,10160],{"class":54},"    string gender;\n",[37,10162,10163],{"class":39,"line":1390},[37,10164,4067],{"class":54},[37,10166,10167],{"class":39,"line":1402},[37,10168,10169],{"class":43},"\u002F\u002F定义排序函数\n",[37,10171,10172,10174,10176,10178,10181,10183,10185,10187,10189,10191],{"class":39,"line":1684},[37,10173,5436],{"class":50},[37,10175,7388],{"class":2035},[37,10177,208],{"class":54},[37,10179,10180],{"class":2035},"Sanguo",[37,10182,6590],{"class":50},[37,10184,898],{"class":5288},[37,10186,583],{"class":54},[37,10188,211],{"class":50},[37,10190,7403],{"class":5288},[37,10192,214],{"class":54},[37,10194,10195],{"class":39,"line":1689},[37,10196,1618],{"class":54},[37,10198,10199,10201,10203,10205,10207,10209,10211,10213,10215,10218,10220],{"class":39,"line":1695},[37,10200,3273],{"class":50},[37,10202,208],{"class":54},[37,10204,211],{"class":50},[37,10206,3104],{"class":54},[37,10208,70],{"class":50},[37,10210,396],{"class":82},[37,10212,3111],{"class":54},[37,10214,1113],{"class":50},[37,10216,10217],{"class":54},"len;i",[37,10219,2364],{"class":50},[37,10221,214],{"class":54},[37,10223,10224],{"class":39,"line":1700},[37,10225,2102],{"class":54},[37,10227,10228,10231,10233,10235,10237,10239,10241,10243,10245,10247,10249,10251,10253,10255,10257],{"class":39,"line":1714},[37,10229,10230],{"class":50},"     for",[37,10232,1730],{"class":54},[37,10234,211],{"class":50},[37,10236,3482],{"class":54},[37,10238,70],{"class":50},[37,10240,396],{"class":82},[37,10242,3489],{"class":54},[37,10244,1113],{"class":50},[37,10246,7430],{"class":54},[37,10248,112],{"class":50},[37,10250,422],{"class":82},[37,10252,112],{"class":50},[37,10254,3622],{"class":54},[37,10256,2364],{"class":50},[37,10258,214],{"class":54},[37,10260,10261],{"class":39,"line":1719},[37,10262,10263],{"class":54},"     {\n",[37,10265,10266,10269,10272,10274,10277,10279,10282,10284,10286,10288,10290],{"class":39,"line":1725},[37,10267,10268],{"class":50},"         if",[37,10270,10271],{"class":54}," ((s",[37,10273,685],{"class":50},[37,10275,10276],{"class":54},"j)->age ",[37,10278,1163],{"class":50},[37,10280,10281],{"class":54}," (s",[37,10283,685],{"class":50},[37,10285,671],{"class":54},[37,10287,685],{"class":50},[37,10289,422],{"class":82},[37,10291,10292],{"class":54},")->age)\n",[37,10294,10295],{"class":39,"line":1746},[37,10296,10297],{"class":54},"         {\n",[37,10299,10300,10303,10305,10308,10310],{"class":39,"line":1751},[37,10301,10302],{"class":54},"             Sanguo temp",[37,10304,7225],{"class":50},[37,10306,10307],{"class":54},"(s",[37,10309,685],{"class":50},[37,10311,10312],{"class":54},"j);\n",[37,10314,10315,10318,10320,10322,10325,10327,10329,10331,10333,10335,10337],{"class":39,"line":1765},[37,10316,10317],{"class":50},"             *",[37,10319,10307],{"class":54},[37,10321,685],{"class":50},[37,10323,10324],{"class":54},"j)",[37,10326,7225],{"class":50},[37,10328,10307],{"class":54},[37,10330,685],{"class":50},[37,10332,671],{"class":54},[37,10334,685],{"class":50},[37,10336,422],{"class":82},[37,10338,2791],{"class":54},[37,10340,10341,10343,10345,10347,10349,10351,10353,10355,10357],{"class":39,"line":1770},[37,10342,10317],{"class":50},[37,10344,10307],{"class":54},[37,10346,685],{"class":50},[37,10348,671],{"class":54},[37,10350,685],{"class":50},[37,10352,422],{"class":82},[37,10354,86],{"class":54},[37,10356,70],{"class":50},[37,10358,4352],{"class":54},[37,10360,10361],{"class":39,"line":1799},[37,10362,10363],{"class":54},"         }\n",[37,10365,10366],{"class":39,"line":1804},[37,10367,10368],{"class":54},"     }\n",[37,10370,10371],{"class":39,"line":1821},[37,10372,2259],{"class":54},[37,10374,10375],{"class":39,"line":1826},[37,10376,1637],{"class":54},[37,10378,10379],{"class":39,"line":1831},[37,10380,10381],{"class":43},"\u002F\u002F定义打印函数\n",[37,10383,10384,10386,10388,10390,10392,10394,10396,10398,10400,10402],{"class":39,"line":1836},[37,10385,5436],{"class":50},[37,10387,9687],{"class":2035},[37,10389,208],{"class":54},[37,10391,10180],{"class":2035},[37,10393,6590],{"class":50},[37,10395,898],{"class":5288},[37,10397,583],{"class":54},[37,10399,211],{"class":50},[37,10401,7403],{"class":5288},[37,10403,214],{"class":54},[37,10405,10406],{"class":39,"line":1850},[37,10407,1618],{"class":54},[37,10409,10410,10412,10414,10416,10418,10420,10422,10424,10426,10428,10430],{"class":39,"line":1855},[37,10411,3273],{"class":50},[37,10413,1730],{"class":54},[37,10415,211],{"class":50},[37,10417,3104],{"class":54},[37,10419,70],{"class":50},[37,10421,396],{"class":82},[37,10423,3111],{"class":54},[37,10425,1113],{"class":50},[37,10427,10217],{"class":54},[37,10429,2364],{"class":50},[37,10431,214],{"class":54},[37,10433,10434],{"class":39,"line":2649},[37,10435,2102],{"class":54},[37,10437,10438,10440,10442,10444,10446,10449,10451,10453,10455,10458,10460,10462,10464,10467,10469,10471,10473,10476,10478,10480,10482,10485,10487,10489,10491,10494,10496],{"class":39,"line":2663},[37,10439,3523],{"class":54},[37,10441,1247],{"class":50},[37,10443,456],{"class":309},[37,10445,1304],{"class":82},[37,10447,10448],{"class":309},"姓名：\"",[37,10450,1247],{"class":50},[37,10452,10307],{"class":54},[37,10454,685],{"class":50},[37,10456,10457],{"class":54},"i)->name",[37,10459,1247],{"class":50},[37,10461,456],{"class":309},[37,10463,1304],{"class":82},[37,10465,10466],{"class":309},"年龄：\"",[37,10468,1247],{"class":50},[37,10470,10307],{"class":54},[37,10472,685],{"class":50},[37,10474,10475],{"class":54},"i)->age",[37,10477,1247],{"class":50},[37,10479,456],{"class":309},[37,10481,1304],{"class":82},[37,10483,10484],{"class":309},"性别：\"",[37,10486,1247],{"class":50},[37,10488,10307],{"class":54},[37,10490,685],{"class":50},[37,10492,10493],{"class":54},"i)->gender",[37,10495,1247],{"class":50},[37,10497,1269],{"class":54},[37,10499,10500],{"class":39,"line":2671},[37,10501,2259],{"class":54},[37,10503,10504],{"class":39,"line":2676},[37,10505,1637],{"class":54},[37,10507,10508,10510,10512],{"class":39,"line":2682},[37,10509,211],{"class":50},[37,10511,2045],{"class":2035},[37,10513,2048],{"class":54},[37,10515,10516],{"class":39,"line":2688},[37,10517,1618],{"class":54},[37,10519,10520],{"class":39,"line":2693},[37,10521,10522],{"class":43},"    \u002F\u002F定义结构体变量\n",[37,10524,10525,10528,10530,10532],{"class":39,"line":8020},[37,10526,10527],{"class":54},"    Sanguo s1[",[37,10529,524],{"class":82},[37,10531,1143],{"class":54},[37,10533,4980],{"class":50},[37,10535,10536],{"class":39,"line":8044},[37,10537,2102],{"class":54},[37,10539,10540,10542,10544,10546,10548,10550,10552],{"class":39,"line":8049},[37,10541,4989],{"class":54},[37,10543,10024],{"class":309},[37,10545,583],{"class":54},[37,10547,978],{"class":82},[37,10549,583],{"class":54},[37,10551,10033],{"class":309},[37,10553,5002],{"class":54},[37,10555,10556,10558,10560,10562,10564,10566,10568],{"class":39,"line":8055},[37,10557,4989],{"class":54},[37,10559,10042],{"class":309},[37,10561,583],{"class":54},[37,10563,953],{"class":82},[37,10565,583],{"class":54},[37,10567,10033],{"class":309},[37,10569,5002],{"class":54},[37,10571,10572,10574,10576,10578,10580,10582,10584],{"class":39,"line":8082},[37,10573,4989],{"class":54},[37,10575,10059],{"class":309},[37,10577,583],{"class":54},[37,10579,903],{"class":82},[37,10581,583],{"class":54},[37,10583,10033],{"class":309},[37,10585,5002],{"class":54},[37,10587,10588,10590,10592,10594,10596,10598,10600],{"class":39,"line":8087},[37,10589,4989],{"class":54},[37,10591,10076],{"class":309},[37,10593,583],{"class":54},[37,10595,928],{"class":82},[37,10597,583],{"class":54},[37,10599,10033],{"class":309},[37,10601,5002],{"class":54},[37,10603,10604,10606,10608,10610,10612,10614,10616],{"class":39,"line":8093},[37,10605,4989],{"class":54},[37,10607,10093],{"class":309},[37,10609,583],{"class":54},[37,10611,878],{"class":82},[37,10613,583],{"class":54},[37,10615,10102],{"class":309},[37,10617,5002],{"class":54},[37,10619,10620],{"class":39,"line":8105},[37,10621,5023],{"class":54},[37,10623,10624,10626,10628,10630,10633,10635,10638,10640],{"class":39,"line":8117},[37,10625,2057],{"class":50},[37,10627,7403],{"class":54},[37,10629,4275],{"class":50},[37,10631,10632],{"class":54},"(s1)",[37,10634,4281],{"class":50},[37,10636,10637],{"class":54},"(s1[",[37,10639,396],{"class":82},[37,10641,3928],{"class":54},[37,10643,10644,10647,10649,10652,10654,10657,10660,10662],{"class":39,"line":8129},[37,10645,10646],{"class":54},"    Sanguo ",[37,10648,659],{"class":50},[37,10650,10651],{"class":54},"s ",[37,10653,70],{"class":50},[37,10655,10656],{"class":50}," &",[37,10658,10659],{"class":54},"s1[",[37,10661,396],{"class":82},[37,10663,4762],{"class":54},[37,10665,10666],{"class":39,"line":9788},[37,10667,10668],{"class":43},"    \u002F\u002F排序前：\n",[37,10670,10671,10673,10675,10678,10680],{"class":39,"line":9813},[37,10672,6601],{"class":54},[37,10674,1247],{"class":50},[37,10676,10677],{"class":309}," \"排序前：\"",[37,10679,1517],{"class":50},[37,10681,8912],{"class":54},[37,10683,10684,10686],{"class":39,"line":9836},[37,10685,9987],{"class":2035},[37,10687,10688],{"class":54},"(s,len);\n",[37,10690,10691],{"class":39,"line":9860},[37,10692,10693],{"class":43},"    \u002F\u002F调用排序函数\n",[37,10695,10696,10698],{"class":39,"line":9865},[37,10697,7670],{"class":2035},[37,10699,10688],{"class":54},[37,10701,10702],{"class":39,"line":9870},[37,10703,10704],{"class":43},"    \u002F\u002F排序后\n",[37,10706,10707,10709,10711,10714,10716],{"class":39,"line":9875},[37,10708,6601],{"class":54},[37,10710,1247],{"class":50},[37,10712,10713],{"class":309}," \"排序后：\"",[37,10715,1517],{"class":50},[37,10717,8912],{"class":54},[37,10719,10720,10722],{"class":39,"line":9884},[37,10721,9987],{"class":2035},[37,10723,10688],{"class":54},[37,10725,10726],{"class":39,"line":9889},[37,10727,1637],{"class":54},[14,10729,10730,10731,10733],{},"注意：使用指针时直接用传首地址**&s",[37,10732,396],{},"**",[123,10735,10736],{},"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":32,"searchDepth":47,"depth":47,"links":10738},[10739,10740,10741,10742,10743,10744,10745],{"id":7775,"depth":47,"text":7776},{"id":8137,"depth":47,"text":8138},{"id":8406,"depth":47,"text":8407},{"id":8571,"depth":47,"text":8572},{"id":8787,"depth":47,"text":8788},{"id":9108,"depth":47,"text":9109},{"id":9336,"depth":47,"text":9337},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7764,"description":7772},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10752,"title":10753,"body":10754,"description":32,"extension":129,"meta":12097,"navigation":131,"path":12098,"seo":12099,"stem":12100,"__hash__":12101},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10755,"toc":12091},[10756,10759,10763,10769,10783,10788,10791,10795,10802,10808,10811,10818,10824,10829,10832,10835,10838,11402,11405,11419,11423,11428,11444,11584,11587,11593,11596,11601,11609,11717,11720,11725,11728,11733,11736,11742,11745,12088],[10,10757,10753],{"id":10758},"_5程序内存模型",[146,10760,10762],{"id":10761},"_51内存分区模型","5.1内存分区模型",[14,10764,10765,10766],{},"C++程序在执行时，将内存大方向划分为",[354,10767,10768],{},"4个区域",[1210,10770,10771,10774,10777,10780],{},[161,10772,10773],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[161,10775,10776],{},"全局区：存放全局变量和静态变量以及常量",[161,10778,10779],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[161,10781,10782],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,10784,10785],{},[354,10786,10787],{},"内存四区意义：",[14,10789,10790],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[175,10792,10794],{"id":10793},"_511程序运行前","5.1.1程序运行前",[14,10796,10797,10798,10801],{},"​\t在程序编译后，生成了exe可执行程序，",[354,10799,10800],{},"未执行该程序前","分为两个区域",[14,10803,10804,10805],{},"​\t",[354,10806,10807],{},"代码区：",[14,10809,10810],{},"​\t\t存放 CPU 执行的机器指令",[14,10812,10813,10814,10817],{},"​\t\t代码区是",[354,10815,10816],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,10819,10813,10820,10823],{},[354,10821,10822],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,10825,10804,10826],{},[354,10827,10828],{},"全局区：",[14,10830,10831],{},"​\t\t全局变量和静态变量存放在此.",[14,10833,10834],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,10836,10837],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[27,10839,10841],{"className":196,"code":10840,"language":198,"meta":32,"style":32},"\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",[34,10842,10843,10848,10861,10874,10878,10883,10898,10913,10917,10926,10930,10935,10948,10961,10965,10970,10996,11022,11026,11053,11079,11083,11088,11104,11119,11123,11149,11175,11179,11204,11229,11233,11259,11285,11289,11305,11320,11346,11372,11376,11386,11390,11398],{"__ignoreMap":32},[37,10844,10845],{"class":39,"line":40},[37,10846,10847],{"class":43},"\u002F\u002F全局变量\n",[37,10849,10850,10852,10855,10857,10859],{"class":39,"line":47},[37,10851,211],{"class":50},[37,10853,10854],{"class":54}," g_a ",[37,10856,70],{"class":50},[37,10858,2110],{"class":82},[37,10860,1364],{"class":54},[37,10862,10863,10865,10868,10870,10872],{"class":39,"line":58},[37,10864,211],{"class":50},[37,10866,10867],{"class":54}," g_b ",[37,10869,70],{"class":50},[37,10871,2110],{"class":82},[37,10873,1364],{"class":54},[37,10875,10876],{"class":39,"line":64},[37,10877,2472],{"emptyLinePlaceholder":131},[37,10879,10880],{"class":39,"line":76},[37,10881,10882],{"class":43},"\u002F\u002F全局常量\n",[37,10884,10885,10887,10889,10892,10894,10896],{"class":39,"line":92},[37,10886,6864],{"class":50},[37,10888,2454],{"class":50},[37,10890,10891],{"class":54}," c_g_a ",[37,10893,70],{"class":50},[37,10895,2110],{"class":82},[37,10897,1364],{"class":54},[37,10899,10900,10902,10904,10907,10909,10911],{"class":39,"line":97},[37,10901,6864],{"class":50},[37,10903,2454],{"class":50},[37,10905,10906],{"class":54}," c_g_b ",[37,10908,70],{"class":50},[37,10910,2110],{"class":82},[37,10912,1364],{"class":54},[37,10914,10915],{"class":39,"line":107},[37,10916,2472],{"emptyLinePlaceholder":131},[37,10918,10919,10921,10923],{"class":39,"line":1390},[37,10920,211],{"class":50},[37,10922,2045],{"class":2035},[37,10924,10925],{"class":54},"() {\n",[37,10927,10928],{"class":39,"line":1402},[37,10929,2472],{"emptyLinePlaceholder":131},[37,10931,10932],{"class":39,"line":1684},[37,10933,10934],{"class":43},"    \u002F\u002F局部变量\n",[37,10936,10937,10939,10942,10944,10946],{"class":39,"line":1689},[37,10938,2057],{"class":50},[37,10940,10941],{"class":54}," a ",[37,10943,70],{"class":50},[37,10945,2110],{"class":82},[37,10947,1364],{"class":54},[37,10949,10950,10952,10955,10957,10959],{"class":39,"line":1695},[37,10951,2057],{"class":50},[37,10953,10954],{"class":54}," b ",[37,10956,70],{"class":50},[37,10958,2110],{"class":82},[37,10960,1364],{"class":54},[37,10962,10963],{"class":39,"line":1700},[37,10964,2472],{"emptyLinePlaceholder":131},[37,10966,10967],{"class":39,"line":1714},[37,10968,10969],{"class":43},"    \u002F\u002F打印地址\n",[37,10971,10972,10974,10976,10979,10981,10983,10985,10987,10989,10992,10994],{"class":39,"line":1719},[37,10973,6601],{"class":54},[37,10975,1247],{"class":50},[37,10977,10978],{"class":309}," \"局部变量a地址为： \"",[37,10980,1517],{"class":50},[37,10982,1730],{"class":54},[37,10984,211],{"class":50},[37,10986,86],{"class":54},[37,10988,558],{"class":50},[37,10990,10991],{"class":54},"a ",[37,10993,1247],{"class":50},[37,10995,8912],{"class":54},[37,10997,10998,11000,11002,11005,11007,11009,11011,11013,11015,11018,11020],{"class":39,"line":1725},[37,10999,6601],{"class":54},[37,11001,1247],{"class":50},[37,11003,11004],{"class":309}," \"局部变量b地址为： \"",[37,11006,1517],{"class":50},[37,11008,1730],{"class":54},[37,11010,211],{"class":50},[37,11012,86],{"class":54},[37,11014,558],{"class":50},[37,11016,11017],{"class":54},"b ",[37,11019,1247],{"class":50},[37,11021,8912],{"class":54},[37,11023,11024],{"class":39,"line":1746},[37,11025,2472],{"emptyLinePlaceholder":131},[37,11027,11028,11030,11032,11035,11037,11040,11042,11044,11046,11049,11051],{"class":39,"line":1751},[37,11029,6601],{"class":54},[37,11031,1247],{"class":50},[37,11033,11034],{"class":309}," \"全局变量g_a地址为： \"",[37,11036,1517],{"class":50},[37,11038,11039],{"class":54},"  (",[37,11041,211],{"class":50},[37,11043,86],{"class":54},[37,11045,558],{"class":50},[37,11047,11048],{"class":54},"g_a ",[37,11050,1247],{"class":50},[37,11052,8912],{"class":54},[37,11054,11055,11057,11059,11062,11064,11066,11068,11070,11072,11075,11077],{"class":39,"line":1765},[37,11056,6601],{"class":54},[37,11058,1247],{"class":50},[37,11060,11061],{"class":309}," \"全局变量g_b地址为： \"",[37,11063,1517],{"class":50},[37,11065,11039],{"class":54},[37,11067,211],{"class":50},[37,11069,86],{"class":54},[37,11071,558],{"class":50},[37,11073,11074],{"class":54},"g_b ",[37,11076,1247],{"class":50},[37,11078,8912],{"class":54},[37,11080,11081],{"class":39,"line":1770},[37,11082,2472],{"emptyLinePlaceholder":131},[37,11084,11085],{"class":39,"line":1799},[37,11086,11087],{"class":43},"    \u002F\u002F静态变量\n",[37,11089,11090,11093,11095,11098,11100,11102],{"class":39,"line":1804},[37,11091,11092],{"class":50},"    static",[37,11094,2454],{"class":50},[37,11096,11097],{"class":54}," s_a ",[37,11099,70],{"class":50},[37,11101,2110],{"class":82},[37,11103,1364],{"class":54},[37,11105,11106,11108,11110,11113,11115,11117],{"class":39,"line":1821},[37,11107,11092],{"class":50},[37,11109,2454],{"class":50},[37,11111,11112],{"class":54}," s_b ",[37,11114,70],{"class":50},[37,11116,2110],{"class":82},[37,11118,1364],{"class":54},[37,11120,11121],{"class":39,"line":1826},[37,11122,2472],{"emptyLinePlaceholder":131},[37,11124,11125,11127,11129,11132,11134,11136,11138,11140,11142,11145,11147],{"class":39,"line":1831},[37,11126,6601],{"class":54},[37,11128,1247],{"class":50},[37,11130,11131],{"class":309}," \"静态变量s_a地址为： \"",[37,11133,1517],{"class":50},[37,11135,1730],{"class":54},[37,11137,211],{"class":50},[37,11139,86],{"class":54},[37,11141,558],{"class":50},[37,11143,11144],{"class":54},"s_a ",[37,11146,1247],{"class":50},[37,11148,8912],{"class":54},[37,11150,11151,11153,11155,11158,11160,11162,11164,11166,11168,11171,11173],{"class":39,"line":1836},[37,11152,6601],{"class":54},[37,11154,1247],{"class":50},[37,11156,11157],{"class":309}," \"静态变量s_b地址为： \"",[37,11159,1517],{"class":50},[37,11161,1730],{"class":54},[37,11163,211],{"class":50},[37,11165,86],{"class":54},[37,11167,558],{"class":50},[37,11169,11170],{"class":54},"s_b ",[37,11172,1247],{"class":50},[37,11174,8912],{"class":54},[37,11176,11177],{"class":39,"line":1850},[37,11178,2472],{"emptyLinePlaceholder":131},[37,11180,11181,11183,11185,11188,11190,11192,11194,11196,11198,11200,11202],{"class":39,"line":1855},[37,11182,6601],{"class":54},[37,11184,1247],{"class":50},[37,11186,11187],{"class":309}," \"字符串常量地址为： \"",[37,11189,1517],{"class":50},[37,11191,1730],{"class":54},[37,11193,211],{"class":50},[37,11195,86],{"class":54},[37,11197,558],{"class":50},[37,11199,1264],{"class":309},[37,11201,1517],{"class":50},[37,11203,8912],{"class":54},[37,11205,11206,11208,11210,11212,11214,11216,11218,11220,11222,11225,11227],{"class":39,"line":2649},[37,11207,6601],{"class":54},[37,11209,1247],{"class":50},[37,11211,11187],{"class":309},[37,11213,1517],{"class":50},[37,11215,1730],{"class":54},[37,11217,211],{"class":50},[37,11219,86],{"class":54},[37,11221,558],{"class":50},[37,11223,11224],{"class":309},"\"hello world1\"",[37,11226,1517],{"class":50},[37,11228,8912],{"class":54},[37,11230,11231],{"class":39,"line":2663},[37,11232,2472],{"emptyLinePlaceholder":131},[37,11234,11235,11237,11239,11242,11244,11246,11248,11250,11252,11255,11257],{"class":39,"line":2671},[37,11236,6601],{"class":54},[37,11238,1247],{"class":50},[37,11240,11241],{"class":309}," \"全局常量c_g_a地址为： \"",[37,11243,1517],{"class":50},[37,11245,1730],{"class":54},[37,11247,211],{"class":50},[37,11249,86],{"class":54},[37,11251,558],{"class":50},[37,11253,11254],{"class":54},"c_g_a ",[37,11256,1247],{"class":50},[37,11258,8912],{"class":54},[37,11260,11261,11263,11265,11268,11270,11272,11274,11276,11278,11281,11283],{"class":39,"line":2676},[37,11262,6601],{"class":54},[37,11264,1247],{"class":50},[37,11266,11267],{"class":309}," \"全局常量c_g_b地址为： \"",[37,11269,1517],{"class":50},[37,11271,1730],{"class":54},[37,11273,211],{"class":50},[37,11275,86],{"class":54},[37,11277,558],{"class":50},[37,11279,11280],{"class":54},"c_g_b ",[37,11282,1247],{"class":50},[37,11284,8912],{"class":54},[37,11286,11287],{"class":39,"line":2682},[37,11288,2472],{"emptyLinePlaceholder":131},[37,11290,11291,11294,11296,11299,11301,11303],{"class":39,"line":2688},[37,11292,11293],{"class":50},"    const",[37,11295,2454],{"class":50},[37,11297,11298],{"class":54}," c_l_a ",[37,11300,70],{"class":50},[37,11302,2110],{"class":82},[37,11304,1364],{"class":54},[37,11306,11307,11309,11311,11314,11316,11318],{"class":39,"line":2693},[37,11308,11293],{"class":50},[37,11310,2454],{"class":50},[37,11312,11313],{"class":54}," c_l_b ",[37,11315,70],{"class":50},[37,11317,2110],{"class":82},[37,11319,1364],{"class":54},[37,11321,11322,11324,11326,11329,11331,11333,11335,11337,11339,11342,11344],{"class":39,"line":8020},[37,11323,6601],{"class":54},[37,11325,1247],{"class":50},[37,11327,11328],{"class":309}," \"局部常量c_l_a地址为： \"",[37,11330,1517],{"class":50},[37,11332,1730],{"class":54},[37,11334,211],{"class":50},[37,11336,86],{"class":54},[37,11338,558],{"class":50},[37,11340,11341],{"class":54},"c_l_a ",[37,11343,1247],{"class":50},[37,11345,8912],{"class":54},[37,11347,11348,11350,11352,11355,11357,11359,11361,11363,11365,11368,11370],{"class":39,"line":8044},[37,11349,6601],{"class":54},[37,11351,1247],{"class":50},[37,11353,11354],{"class":309}," \"局部常量c_l_b地址为： \"",[37,11356,1517],{"class":50},[37,11358,1730],{"class":54},[37,11360,211],{"class":50},[37,11362,86],{"class":54},[37,11364,558],{"class":50},[37,11366,11367],{"class":54},"c_l_b ",[37,11369,1247],{"class":50},[37,11371,8912],{"class":54},[37,11373,11374],{"class":39,"line":8049},[37,11375,2472],{"emptyLinePlaceholder":131},[37,11377,11378,11380,11382,11384],{"class":39,"line":8055},[37,11379,2375],{"class":2035},[37,11381,208],{"class":54},[37,11383,2380],{"class":309},[37,11385,2791],{"class":54},[37,11387,11388],{"class":39,"line":8082},[37,11389,2472],{"emptyLinePlaceholder":131},[37,11391,11392,11394,11396],{"class":39,"line":8087},[37,11393,4162],{"class":50},[37,11395,4165],{"class":82},[37,11397,1364],{"class":54},[37,11399,11400],{"class":39,"line":8093},[37,11401,1637],{"class":54},[14,11403,11404],{},"总结：",[1210,11406,11407,11410,11413,11416],{},[161,11408,11409],{},"c++中程序运行前分为全局区和代码区",[161,11411,11412],{},"代码区特点是共享和只读",[161,11414,11415],{},"全局区中存放全局变量、静态变量、常量",[161,11417,11418],{},"常量区中存放const修饰的全局常量和字符串常量",[175,11420,11422],{"id":11421},"_512程序运行后","5.1.2程序运行后",[158,11424,11425],{},[161,11426,11427],{},"栈区：",[1210,11429,11430,11437],{},[161,11431,11432,11433,11436],{},"由编译器自动分配释放, 存放",[354,11434,11435],{},"函数的参数值,局部变量","等",[161,11438,11439,11440,11443],{},"注意事项：",[354,11441,11442],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[27,11445,11447],{"className":196,"code":11446,"language":198,"meta":32,"style":32},"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",[34,11448,11449,11460,11464,11479,11491,11495,11499,11507,11512,11527,11545,11562,11572,11580],{"__ignoreMap":32},[37,11450,11451,11453,11455,11458],{"class":39,"line":40},[37,11452,211],{"class":50},[37,11454,6590],{"class":50},[37,11456,11457],{"class":2035}," func",[37,11459,2048],{"class":54},[37,11461,11462],{"class":39,"line":47},[37,11463,1618],{"class":54},[37,11465,11466,11468,11470,11472,11474,11476],{"class":39,"line":58},[37,11467,2057],{"class":50},[37,11469,10941],{"class":54},[37,11471,70],{"class":50},[37,11473,2110],{"class":82},[37,11475,261],{"class":54},[37,11477,11478],{"class":43}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[37,11480,11481,11483,11485,11488],{"class":39,"line":64},[37,11482,4162],{"class":50},[37,11484,10656],{"class":50},[37,11486,11487],{"class":54},"a;",[37,11489,11490],{"class":43}," \u002F\u002F放回局部变量的地址\n",[37,11492,11493],{"class":39,"line":76},[37,11494,1637],{"class":54},[37,11496,11497],{"class":39,"line":92},[37,11498,2472],{"emptyLinePlaceholder":131},[37,11500,11501,11503,11505],{"class":39,"line":97},[37,11502,211],{"class":50},[37,11504,2045],{"class":2035},[37,11506,10925],{"class":54},[37,11508,11509],{"class":39,"line":107},[37,11510,11511],{"class":43},"    \u002F\u002F接受func的返回值\n",[37,11513,11514,11516,11518,11521,11523,11525],{"class":39,"line":1390},[37,11515,2057],{"class":50},[37,11517,6590],{"class":50},[37,11519,11520],{"class":54},"p ",[37,11522,70],{"class":50},[37,11524,11457],{"class":2035},[37,11526,5708],{"class":54},[37,11528,11529,11531,11533,11535,11537,11539,11542],{"class":39,"line":1402},[37,11530,6601],{"class":54},[37,11532,1247],{"class":50},[37,11534,6590],{"class":50},[37,11536,11520],{"class":54},[37,11538,1247],{"class":50},[37,11540,11541],{"class":54}," endl;",[37,11543,11544],{"class":43}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[37,11546,11547,11549,11551,11553,11555,11557,11559],{"class":39,"line":1684},[37,11548,6601],{"class":54},[37,11550,1247],{"class":50},[37,11552,6590],{"class":50},[37,11554,11520],{"class":54},[37,11556,1247],{"class":50},[37,11558,11541],{"class":54},[37,11560,11561],{"class":43}," \u002F\u002F第二次这个数据不再保留\n",[37,11563,11564,11566,11568,11570],{"class":39,"line":1689},[37,11565,2375],{"class":2035},[37,11567,208],{"class":54},[37,11569,2380],{"class":309},[37,11571,2791],{"class":54},[37,11573,11574,11576,11578],{"class":39,"line":1695},[37,11575,4162],{"class":50},[37,11577,4165],{"class":82},[37,11579,1364],{"class":54},[37,11581,11582],{"class":39,"line":1700},[37,11583,1637],{"class":54},[14,11585,11586],{},"输出结果：",[14,11588,11589],{},[119,11590],{"alt":11591,"src":11592},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,11594,11595],{},"总结：不要返回局部变量的地址",[158,11597,11598],{"start":47},[161,11599,11600],{},"堆区",[1210,11602,11603,11606],{},[161,11604,11605],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[161,11607,11608],{},"在c++中主要利用new在堆区开辟内存",[27,11610,11612],{"className":196,"code":11611,"language":198,"meta":32,"style":32},"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",[34,11613,11614,11629,11633,11638,11659,11666,11670,11678,11682,11687,11701,11713],{"__ignoreMap":32},[37,11615,11616,11618,11621,11624,11626],{"class":39,"line":40},[37,11617,211],{"class":50},[37,11619,11620],{"class":50},"  *",[37,11622,11623],{"class":2035},"func",[37,11625,2499],{"class":54},[37,11627,11628],{"class":43},"  \u002F\u002F函数返回指针\n",[37,11630,11631],{"class":39,"line":47},[37,11632,1618],{"class":54},[37,11634,11635],{"class":39,"line":58},[37,11636,11637],{"class":43},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[37,11639,11640,11642,11644,11646,11648,11651,11653,11655,11657],{"class":39,"line":64},[37,11641,4219],{"class":50},[37,11643,6590],{"class":50},[37,11645,14],{"class":54},[37,11647,70],{"class":50},[37,11649,11650],{"class":50}," new",[37,11652,2454],{"class":50},[37,11654,208],{"class":54},[37,11656,650],{"class":82},[37,11658,2791],{"class":54},[37,11660,11661,11663],{"class":39,"line":76},[37,11662,4453],{"class":50},[37,11664,11665],{"class":54}," p;\n",[37,11667,11668],{"class":39,"line":92},[37,11669,1637],{"class":54},[37,11671,11672,11674,11676],{"class":39,"line":97},[37,11673,211],{"class":50},[37,11675,2045],{"class":2035},[37,11677,2048],{"class":54},[37,11679,11680],{"class":39,"line":107},[37,11681,1618],{"class":54},[37,11683,11684],{"class":39,"line":1390},[37,11685,11686],{"class":43},"    \u002F\u002F在堆区开辟数据\n",[37,11688,11689,11691,11693,11695,11697,11699],{"class":39,"line":1402},[37,11690,2057],{"class":50},[37,11692,6590],{"class":50},[37,11694,14],{"class":54},[37,11696,70],{"class":50},[37,11698,11623],{"class":2035},[37,11700,5708],{"class":54},[37,11702,11703,11705,11707,11709,11711],{"class":39,"line":1684},[37,11704,1623],{"class":54},[37,11706,6491],{"class":50},[37,11708,14],{"class":54},[37,11710,1247],{"class":50},[37,11712,1269],{"class":54},[37,11714,11715],{"class":39,"line":1689},[37,11716,1637],{"class":54},[14,11718,11719],{},"图片展示：",[14,11721,11722],{},[119,11723],{"alt":11591,"src":11724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,11726,11727],{},"堆区内存由程序员管生死！！！",[158,11729,11730],{"start":58},[161,11731,11732],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,11734,11735],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,11737,11738,11739],{},"​语法：",[34,11740,11741],{}," new 数据类型",[14,11743,11744],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[27,11746,11748],{"className":196,"code":11747,"language":198,"meta":32,"style":32},"\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",[34,11749,11750,11755,11765,11769,11774,11779,11801,11805,11813,11817,11831,11843,11855,11867,11872,11877,11888,11892,11897,11905,11909,11914,11936,11962,11966,11984,11988,12014,12018,12030,12034,12039,12044,12052,12056,12060,12068,12072,12078,12084],{"__ignoreMap":32},[37,11751,11752],{"class":39,"line":40},[37,11753,11754],{"class":43},"\u002F\u002F1.new的基本语法\n",[37,11756,11757,11759,11761,11763],{"class":39,"line":47},[37,11758,211],{"class":50},[37,11760,6590],{"class":50},[37,11762,11623],{"class":2035},[37,11764,2048],{"class":54},[37,11766,11767],{"class":39,"line":58},[37,11768,1618],{"class":54},[37,11770,11771],{"class":39,"line":64},[37,11772,11773],{"class":43},"    \u002F\u002F在堆区创建整型数据\n",[37,11775,11776],{"class":39,"line":76},[37,11777,11778],{"class":43},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[37,11780,11781,11783,11785,11787,11790,11792,11794,11796,11798],{"class":39,"line":92},[37,11782,2057],{"class":50},[37,11784,6590],{"class":50},[37,11786,14],{"class":54},[37,11788,11789],{"class":50},"=new",[37,11791,2454],{"class":50},[37,11793,208],{"class":54},[37,11795,650],{"class":82},[37,11797,6038],{"class":54},[37,11799,11800],{"class":43},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[37,11802,11803],{"class":39,"line":97},[37,11804,1637],{"class":54},[37,11806,11807,11809,11811],{"class":39,"line":107},[37,11808,5436],{"class":50},[37,11810,5660],{"class":2035},[37,11812,2048],{"class":54},[37,11814,11815],{"class":39,"line":1390},[37,11816,1618],{"class":54},[37,11818,11819,11821,11823,11825,11827,11829],{"class":39,"line":1402},[37,11820,2057],{"class":50},[37,11822,6590],{"class":50},[37,11824,14],{"class":54},[37,11826,70],{"class":50},[37,11828,11623],{"class":2035},[37,11830,5708],{"class":54},[37,11832,11833,11835,11837,11839,11841],{"class":39,"line":1684},[37,11834,1623],{"class":54},[37,11836,6491],{"class":50},[37,11838,14],{"class":54},[37,11840,1247],{"class":50},[37,11842,1269],{"class":54},[37,11844,11845,11847,11849,11851,11853],{"class":39,"line":1689},[37,11846,1623],{"class":54},[37,11848,6491],{"class":50},[37,11850,14],{"class":54},[37,11852,1247],{"class":50},[37,11854,1269],{"class":54},[37,11856,11857,11859,11861,11863,11865],{"class":39,"line":1695},[37,11858,1623],{"class":54},[37,11860,6491],{"class":50},[37,11862,14],{"class":54},[37,11864,1247],{"class":50},[37,11866,1269],{"class":54},[37,11868,11869],{"class":39,"line":1700},[37,11870,11871],{"class":43},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[37,11873,11874],{"class":39,"line":1714},[37,11875,11876],{"class":43},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[37,11878,11879,11882,11885],{"class":39,"line":1719},[37,11880,11881],{"class":50},"    delete",[37,11883,11884],{"class":54}," p;",[37,11886,11887],{"class":43},"\u002F\u002F删除这块地址\n",[37,11889,11890],{"class":39,"line":1725},[37,11891,1637],{"class":54},[37,11893,11894],{"class":39,"line":1746},[37,11895,11896],{"class":43},"\u002F\u002F2.在堆区利用new开辟数组\n",[37,11898,11899,11901,11903],{"class":39,"line":1751},[37,11900,5436],{"class":50},[37,11902,5729],{"class":2035},[37,11904,2048],{"class":54},[37,11906,11907],{"class":39,"line":1765},[37,11908,1618],{"class":54},[37,11910,11911],{"class":39,"line":1770},[37,11912,11913],{"class":43},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[37,11915,11916,11918,11920,11922,11924,11926,11928,11930,11933],{"class":39,"line":1799},[37,11917,2057],{"class":50},[37,11919,6590],{"class":50},[37,11921,3952],{"class":54},[37,11923,11789],{"class":50},[37,11925,2454],{"class":50},[37,11927,1093],{"class":54},[37,11929,650],{"class":82},[37,11931,11932],{"class":54},"];",[37,11934,11935],{"class":43},"\u002F\u002F10代表数组有10个元素\n",[37,11937,11938,11940,11942,11944,11946,11948,11950,11952,11954,11956,11958,11960],{"class":39,"line":1804},[37,11939,3273],{"class":50},[37,11941,1730],{"class":54},[37,11943,211],{"class":50},[37,11945,3104],{"class":54},[37,11947,70],{"class":50},[37,11949,396],{"class":82},[37,11951,3111],{"class":54},[37,11953,1113],{"class":50},[37,11955,650],{"class":82},[37,11957,3111],{"class":54},[37,11959,2364],{"class":50},[37,11961,214],{"class":54},[37,11963,11964],{"class":39,"line":1821},[37,11965,2102],{"class":54},[37,11967,11968,11971,11973,11975,11977,11979,11981],{"class":39,"line":1826},[37,11969,11970],{"class":54},"        arr[i]",[37,11972,70],{"class":50},[37,11974,645],{"class":54},[37,11976,685],{"class":50},[37,11978,516],{"class":82},[37,11980,261],{"class":54},[37,11982,11983],{"class":43},"\u002F\u002F给10个元素赋值100～109\n",[37,11985,11986],{"class":39,"line":1831},[37,11987,2259],{"class":54},[37,11989,11990,11992,11994,11996,11998,12000,12002,12004,12006,12008,12010,12012],{"class":39,"line":1836},[37,11991,3273],{"class":50},[37,11993,1730],{"class":54},[37,11995,211],{"class":50},[37,11997,3104],{"class":54},[37,11999,70],{"class":50},[37,12001,396],{"class":82},[37,12003,3111],{"class":54},[37,12005,1113],{"class":50},[37,12007,650],{"class":82},[37,12009,3111],{"class":54},[37,12011,2364],{"class":50},[37,12013,214],{"class":54},[37,12015,12016],{"class":39,"line":1850},[37,12017,2102],{"class":54},[37,12019,12020,12022,12024,12026,12028],{"class":39,"line":1855},[37,12021,3523],{"class":54},[37,12023,1247],{"class":50},[37,12025,4426],{"class":54},[37,12027,1247],{"class":50},[37,12029,1269],{"class":54},[37,12031,12032],{"class":39,"line":2649},[37,12033,2259],{"class":54},[37,12035,12036],{"class":39,"line":2663},[37,12037,12038],{"class":43},"    \u002F\u002F释放堆区数组\n",[37,12040,12041],{"class":39,"line":2671},[37,12042,12043],{"class":43},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[37,12045,12046,12049],{"class":39,"line":2676},[37,12047,12048],{"class":50},"    delete[]",[37,12050,12051],{"class":54}," arr;\n",[37,12053,12054],{"class":39,"line":2682},[37,12055,1637],{"class":54},[37,12057,12058],{"class":39,"line":2688},[37,12059,2472],{"emptyLinePlaceholder":131},[37,12061,12062,12064,12066],{"class":39,"line":2693},[37,12063,211],{"class":50},[37,12065,2045],{"class":2035},[37,12067,2048],{"class":54},[37,12069,12070],{"class":39,"line":8020},[37,12071,1618],{"class":54},[37,12073,12074,12076],{"class":39,"line":8044},[37,12075,5705],{"class":2035},[37,12077,5708],{"class":54},[37,12079,12080,12082],{"class":39,"line":8049},[37,12081,5774],{"class":2035},[37,12083,5708],{"class":54},[37,12085,12086],{"class":39,"line":8055},[37,12087,1637],{"class":54},[123,12089,12090],{},"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":32,"searchDepth":47,"depth":47,"links":12092},[12093],{"id":10761,"depth":47,"text":10762,"children":12094},[12095,12096],{"id":10793,"depth":58,"text":10794},{"id":11421,"depth":58,"text":11422},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10753,"description":32},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12103,"title":12104,"body":12105,"description":32,"extension":129,"meta":13586,"navigation":131,"path":13587,"seo":13588,"stem":13589,"__hash__":13590},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12106,"toc":13578},[12107,12110,12114,12117,12120,12289,12293,12298,12315,12320,12472,12476,12479,12482,12876,12880,12883,12888,12891,13203,13207,13213,13373,13375,13383,13387,13390,13397,13575],[10,12108,12104],{"id":12109},"_6引用",[146,12111,12113],{"id":12112},"_61引用基本用法","6.1引用基本用法",[14,12115,12116],{},"引用的本质：给变量起别名",[14,12118,12119],{},"语法：数据类型 &别名=原名",[27,12121,12123],{"className":196,"code":12122,"language":198,"meta":32,"style":32},"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",[34,12124,12125,12133,12137,12149,12161,12165,12184,12203,12207,12218,12222,12241,12259,12263,12273,12277,12285],{"__ignoreMap":32},[37,12126,12127,12129,12131],{"class":39,"line":40},[37,12128,211],{"class":50},[37,12130,2045],{"class":2035},[37,12132,10925],{"class":54},[37,12134,12135],{"class":39,"line":47},[37,12136,2472],{"emptyLinePlaceholder":131},[37,12138,12139,12141,12143,12145,12147],{"class":39,"line":58},[37,12140,2057],{"class":50},[37,12142,10941],{"class":54},[37,12144,70],{"class":50},[37,12146,2110],{"class":82},[37,12148,1364],{"class":54},[37,12150,12151,12153,12155,12157,12159],{"class":39,"line":64},[37,12152,2057],{"class":50},[37,12154,10656],{"class":50},[37,12156,11017],{"class":54},[37,12158,70],{"class":50},[37,12160,1505],{"class":54},[37,12162,12163],{"class":39,"line":76},[37,12164,2472],{"emptyLinePlaceholder":131},[37,12166,12167,12169,12171,12174,12176,12178,12180,12182],{"class":39,"line":92},[37,12168,6601],{"class":54},[37,12170,1247],{"class":50},[37,12172,12173],{"class":309}," \"a = \"",[37,12175,1517],{"class":50},[37,12177,10941],{"class":54},[37,12179,1247],{"class":50},[37,12181,11541],{"class":54},[37,12183,7340],{"class":43},[37,12185,12186,12188,12190,12193,12195,12197,12199,12201],{"class":39,"line":97},[37,12187,6601],{"class":54},[37,12189,1247],{"class":50},[37,12191,12192],{"class":309}," \"b = \"",[37,12194,1517],{"class":50},[37,12196,10954],{"class":54},[37,12198,1247],{"class":50},[37,12200,11541],{"class":54},[37,12202,7340],{"class":43},[37,12204,12205],{"class":39,"line":107},[37,12206,2472],{"emptyLinePlaceholder":131},[37,12208,12209,12212,12214,12216],{"class":39,"line":1390},[37,12210,12211],{"class":54},"    b ",[37,12213,70],{"class":50},[37,12215,5826],{"class":82},[37,12217,1364],{"class":54},[37,12219,12220],{"class":39,"line":1402},[37,12221,2472],{"emptyLinePlaceholder":131},[37,12223,12224,12226,12228,12230,12232,12234,12236,12238],{"class":39,"line":1684},[37,12225,6601],{"class":54},[37,12227,1247],{"class":50},[37,12229,12173],{"class":309},[37,12231,1517],{"class":50},[37,12233,10941],{"class":54},[37,12235,1247],{"class":50},[37,12237,11541],{"class":54},[37,12239,12240],{"class":43},"\u002F\u002F100\n",[37,12242,12243,12245,12247,12249,12251,12253,12255,12257],{"class":39,"line":1689},[37,12244,6601],{"class":54},[37,12246,1247],{"class":50},[37,12248,12192],{"class":309},[37,12250,1517],{"class":50},[37,12252,10954],{"class":54},[37,12254,1247],{"class":50},[37,12256,11541],{"class":54},[37,12258,12240],{"class":43},[37,12260,12261],{"class":39,"line":1695},[37,12262,2472],{"emptyLinePlaceholder":131},[37,12264,12265,12267,12269,12271],{"class":39,"line":1700},[37,12266,2375],{"class":2035},[37,12268,208],{"class":54},[37,12270,2380],{"class":309},[37,12272,2791],{"class":54},[37,12274,12275],{"class":39,"line":1714},[37,12276,2472],{"emptyLinePlaceholder":131},[37,12278,12279,12281,12283],{"class":39,"line":1719},[37,12280,4162],{"class":50},[37,12282,4165],{"class":82},[37,12284,1364],{"class":54},[37,12286,12287],{"class":39,"line":1725},[37,12288,1637],{"class":54},[146,12290,12292],{"id":12291},"_62引用的注意事项","6.2引用的注意事项",[158,12294,12295],{},[161,12296,12297],{},"引用必须要初始化",[27,12299,12301],{"className":196,"code":12300,"language":198,"meta":32,"style":32},"int &b;\u002F\u002F非常错误！\n",[34,12302,12303],{"__ignoreMap":32},[37,12304,12305,12307,12309,12312],{"class":39,"line":40},[37,12306,211],{"class":50},[37,12308,10656],{"class":50},[37,12310,12311],{"class":54},"b;",[37,12313,12314],{"class":43},"\u002F\u002F非常错误！\n",[158,12316,12317],{"start":47},[161,12318,12319],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[27,12321,12323],{"className":196,"code":12322,"language":198,"meta":32,"style":32},"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",[34,12324,12325,12333,12345,12357,12365,12381,12394,12412,12430,12450,12460,12468],{"__ignoreMap":32},[37,12326,12327,12329,12331],{"class":39,"line":40},[37,12328,211],{"class":50},[37,12330,2045],{"class":2035},[37,12332,10925],{"class":54},[37,12334,12335,12337,12339,12341,12343],{"class":39,"line":47},[37,12336,2057],{"class":50},[37,12338,10941],{"class":54},[37,12340,70],{"class":50},[37,12342,2110],{"class":82},[37,12344,1364],{"class":54},[37,12346,12347,12349,12351,12353,12355],{"class":39,"line":58},[37,12348,2057],{"class":50},[37,12350,10954],{"class":54},[37,12352,70],{"class":50},[37,12354,9022],{"class":82},[37,12356,1364],{"class":54},[37,12358,12359,12362],{"class":39,"line":64},[37,12360,12361],{"class":43},"    \u002F\u002Fint &c;",[37,12363,12364],{"class":43}," \u002F\u002F错误，引用必须初始化\n",[37,12366,12367,12369,12371,12373,12375,12378],{"class":39,"line":76},[37,12368,2057],{"class":50},[37,12370,10656],{"class":50},[37,12372,3018],{"class":54},[37,12374,70],{"class":50},[37,12376,12377],{"class":54}," a;",[37,12379,12380],{"class":43}," \u002F\u002F一旦初始化后，就不可以更改\n",[37,12382,12383,12386,12388,12391],{"class":39,"line":92},[37,12384,12385],{"class":54},"    c ",[37,12387,70],{"class":50},[37,12389,12390],{"class":54}," b;",[37,12392,12393],{"class":43}," \u002F\u002F这是赋值操作，不是更改引用\n",[37,12395,12396,12398,12400,12402,12404,12406,12408,12410],{"class":39,"line":97},[37,12397,6601],{"class":54},[37,12399,1247],{"class":50},[37,12401,12173],{"class":309},[37,12403,1517],{"class":50},[37,12405,10941],{"class":54},[37,12407,1247],{"class":50},[37,12409,11541],{"class":54},[37,12411,7325],{"class":43},[37,12413,12414,12416,12418,12420,12422,12424,12426,12428],{"class":39,"line":107},[37,12415,6601],{"class":54},[37,12417,1247],{"class":50},[37,12419,12192],{"class":309},[37,12421,1517],{"class":50},[37,12423,10954],{"class":54},[37,12425,1247],{"class":50},[37,12427,11541],{"class":54},[37,12429,7325],{"class":43},[37,12431,12432,12434,12436,12439,12441,12444,12446,12448],{"class":39,"line":1390},[37,12433,6601],{"class":54},[37,12435,1247],{"class":50},[37,12437,12438],{"class":309}," \"c = \"",[37,12440,1517],{"class":50},[37,12442,12443],{"class":54}," c ",[37,12445,1247],{"class":50},[37,12447,11541],{"class":54},[37,12449,7325],{"class":43},[37,12451,12452,12454,12456,12458],{"class":39,"line":1402},[37,12453,2375],{"class":2035},[37,12455,208],{"class":54},[37,12457,2380],{"class":309},[37,12459,2791],{"class":54},[37,12461,12462,12464,12466],{"class":39,"line":1684},[37,12463,4162],{"class":50},[37,12465,4165],{"class":82},[37,12467,1364],{"class":54},[37,12469,12470],{"class":39,"line":1689},[37,12471,1637],{"class":54},[146,12473,12475],{"id":12474},"_63引用做函数参数","6.3引用做函数参数",[14,12477,12478],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,12480,12481],{},"优点：可以简化指针修改实参",[27,12483,12485],{"className":196,"code":12484,"language":198,"meta":32,"style":32},"\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",[34,12486,12487,12492,12515,12526,12536,12545,12549,12553,12558,12580,12592,12604,12614,12618,12622,12627,12649,12659,12667,12675,12679,12683,12691,12695,12707,12719,12723,12734,12760,12764,12784,12808,12812,12822,12846,12850,12860,12864,12872],{"__ignoreMap":32},[37,12488,12489],{"class":39,"line":40},[37,12490,12491],{"class":43},"\u002F\u002F1. 值传递\n",[37,12493,12494,12496,12499,12501,12503,12505,12508,12510,12512],{"class":39,"line":47},[37,12495,5436],{"class":50},[37,12497,12498],{"class":2035}," mySwap01",[37,12500,208],{"class":54},[37,12502,211],{"class":50},[37,12504,1471],{"class":5288},[37,12506,12507],{"class":54},", ",[37,12509,211],{"class":50},[37,12511,2905],{"class":5288},[37,12513,12514],{"class":54},") {\n",[37,12516,12517,12519,12522,12524],{"class":39,"line":58},[37,12518,2057],{"class":50},[37,12520,12521],{"class":54}," temp ",[37,12523,70],{"class":50},[37,12525,1505],{"class":54},[37,12527,12528,12531,12533],{"class":39,"line":64},[37,12529,12530],{"class":54},"    a ",[37,12532,70],{"class":50},[37,12534,12535],{"class":54}," b;\n",[37,12537,12538,12540,12542],{"class":39,"line":76},[37,12539,12211],{"class":54},[37,12541,70],{"class":50},[37,12543,12544],{"class":54}," temp;\n",[37,12546,12547],{"class":39,"line":92},[37,12548,1637],{"class":54},[37,12550,12551],{"class":39,"line":97},[37,12552,2472],{"emptyLinePlaceholder":131},[37,12554,12555],{"class":39,"line":107},[37,12556,12557],{"class":43},"\u002F\u002F2. 地址传递\n",[37,12559,12560,12562,12565,12567,12570,12572,12574,12576,12578],{"class":39,"line":1390},[37,12561,5436],{"class":50},[37,12563,12564],{"class":2035}," mySwap02",[37,12566,208],{"class":54},[37,12568,12569],{"class":50},"int*",[37,12571,1471],{"class":5288},[37,12573,12507],{"class":54},[37,12575,12569],{"class":50},[37,12577,2905],{"class":5288},[37,12579,12514],{"class":54},[37,12581,12582,12584,12586,12588,12590],{"class":39,"line":1402},[37,12583,2057],{"class":50},[37,12585,12521],{"class":54},[37,12587,70],{"class":50},[37,12589,6590],{"class":50},[37,12591,6269],{"class":54},[37,12593,12594,12596,12598,12600,12602],{"class":39,"line":1684},[37,12595,6475],{"class":50},[37,12597,10991],{"class":54},[37,12599,70],{"class":50},[37,12601,6590],{"class":50},[37,12603,6141],{"class":54},[37,12605,12606,12608,12610,12612],{"class":39,"line":1689},[37,12607,6475],{"class":50},[37,12609,11017],{"class":54},[37,12611,70],{"class":50},[37,12613,12544],{"class":54},[37,12615,12616],{"class":39,"line":1695},[37,12617,1637],{"class":54},[37,12619,12620],{"class":39,"line":1700},[37,12621,2472],{"emptyLinePlaceholder":131},[37,12623,12624],{"class":39,"line":1714},[37,12625,12626],{"class":43},"\u002F\u002F3. 引用传递\n",[37,12628,12629,12631,12634,12636,12639,12641,12643,12645,12647],{"class":39,"line":1719},[37,12630,5436],{"class":50},[37,12632,12633],{"class":2035}," mySwap03",[37,12635,208],{"class":54},[37,12637,12638],{"class":50},"int&",[37,12640,1471],{"class":5288},[37,12642,12507],{"class":54},[37,12644,12638],{"class":50},[37,12646,2905],{"class":5288},[37,12648,12514],{"class":54},[37,12650,12651,12653,12655,12657],{"class":39,"line":1725},[37,12652,2057],{"class":50},[37,12654,12521],{"class":54},[37,12656,70],{"class":50},[37,12658,1505],{"class":54},[37,12660,12661,12663,12665],{"class":39,"line":1746},[37,12662,12530],{"class":54},[37,12664,70],{"class":50},[37,12666,12535],{"class":54},[37,12668,12669,12671,12673],{"class":39,"line":1751},[37,12670,12211],{"class":54},[37,12672,70],{"class":50},[37,12674,12544],{"class":54},[37,12676,12677],{"class":39,"line":1765},[37,12678,1637],{"class":54},[37,12680,12681],{"class":39,"line":1770},[37,12682,2472],{"emptyLinePlaceholder":131},[37,12684,12685,12687,12689],{"class":39,"line":1799},[37,12686,211],{"class":50},[37,12688,2045],{"class":2035},[37,12690,10925],{"class":54},[37,12692,12693],{"class":39,"line":1804},[37,12694,2472],{"emptyLinePlaceholder":131},[37,12696,12697,12699,12701,12703,12705],{"class":39,"line":1821},[37,12698,2057],{"class":50},[37,12700,10941],{"class":54},[37,12702,70],{"class":50},[37,12704,2110],{"class":82},[37,12706,1364],{"class":54},[37,12708,12709,12711,12713,12715,12717],{"class":39,"line":1826},[37,12710,2057],{"class":50},[37,12712,10954],{"class":54},[37,12714,70],{"class":50},[37,12716,9022],{"class":82},[37,12718,1364],{"class":54},[37,12720,12721],{"class":39,"line":1831},[37,12722,2472],{"emptyLinePlaceholder":131},[37,12724,12725,12728,12731],{"class":39,"line":1836},[37,12726,12727],{"class":2035},"    mySwap01",[37,12729,12730],{"class":54},"(a, b);",[37,12732,12733],{"class":43},"\u002F\u002F值传递，形参不会修饰实参\n",[37,12735,12736,12738,12740,12743,12745,12747,12749,12752,12754,12756,12758],{"class":39,"line":1850},[37,12737,6601],{"class":54},[37,12739,1247],{"class":50},[37,12741,12742],{"class":309}," \"a:\"",[37,12744,1517],{"class":50},[37,12746,10941],{"class":54},[37,12748,1247],{"class":50},[37,12750,12751],{"class":309}," \" b:\"",[37,12753,1517],{"class":50},[37,12755,10954],{"class":54},[37,12757,1247],{"class":50},[37,12759,8912],{"class":54},[37,12761,12762],{"class":39,"line":1855},[37,12763,2472],{"emptyLinePlaceholder":131},[37,12765,12766,12769,12771,12773,12776,12778,12781],{"class":39,"line":2649},[37,12767,12768],{"class":2035},"    mySwap02",[37,12770,208],{"class":54},[37,12772,558],{"class":50},[37,12774,12775],{"class":54},"a, ",[37,12777,558],{"class":50},[37,12779,12780],{"class":54},"b);",[37,12782,12783],{"class":43},"\u002F\u002F地址传递，形参会修饰实参\n",[37,12785,12786,12788,12790,12792,12794,12796,12798,12800,12802,12804,12806],{"class":39,"line":2663},[37,12787,6601],{"class":54},[37,12789,1247],{"class":50},[37,12791,12742],{"class":309},[37,12793,1517],{"class":50},[37,12795,10941],{"class":54},[37,12797,1247],{"class":50},[37,12799,12751],{"class":309},[37,12801,1517],{"class":50},[37,12803,10954],{"class":54},[37,12805,1247],{"class":50},[37,12807,8912],{"class":54},[37,12809,12810],{"class":39,"line":2671},[37,12811,2472],{"emptyLinePlaceholder":131},[37,12813,12814,12817,12819],{"class":39,"line":2676},[37,12815,12816],{"class":2035},"    mySwap03",[37,12818,12730],{"class":54},[37,12820,12821],{"class":43},"\u002F\u002F引用传递，形参会修饰实参\n",[37,12823,12824,12826,12828,12830,12832,12834,12836,12838,12840,12842,12844],{"class":39,"line":2682},[37,12825,6601],{"class":54},[37,12827,1247],{"class":50},[37,12829,12742],{"class":309},[37,12831,1517],{"class":50},[37,12833,10941],{"class":54},[37,12835,1247],{"class":50},[37,12837,12751],{"class":309},[37,12839,1517],{"class":50},[37,12841,10954],{"class":54},[37,12843,1247],{"class":50},[37,12845,8912],{"class":54},[37,12847,12848],{"class":39,"line":2688},[37,12849,2472],{"emptyLinePlaceholder":131},[37,12851,12852,12854,12856,12858],{"class":39,"line":2693},[37,12853,2375],{"class":2035},[37,12855,208],{"class":54},[37,12857,2380],{"class":309},[37,12859,2791],{"class":54},[37,12861,12862],{"class":39,"line":8020},[37,12863,2472],{"emptyLinePlaceholder":131},[37,12865,12866,12868,12870],{"class":39,"line":8044},[37,12867,4162],{"class":50},[37,12869,4165],{"class":82},[37,12871,1364],{"class":54},[37,12873,12874],{"class":39,"line":8049},[37,12875,1637],{"class":54},[146,12877,12879],{"id":12878},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,12881,12882],{},"作用：引用是可以作为函数的返回值存在的",[14,12884,9097,12885],{},[354,12886,12887],{},"不要返回局部变量引用",[14,12889,12890],{},"用法：函数调用作为左值",[27,12892,12894],{"className":10013,"code":12893,"language":10015,"meta":32,"style":32},"\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",[34,12895,12896,12901,12909,12924,12930,12934,12938,12943,12951,12968,12974,12978,12982,12990,12994,12999,13013,13033,13052,13056,13061,13074,13094,13112,13116,13132,13136,13155,13173,13177,13187,13191,13199],{"__ignoreMap":32},[37,12897,12898],{"class":39,"line":40},[37,12899,12900],{"class":43},"\u002F\u002F返回局部变量引用\n",[37,12902,12903,12905,12907],{"class":39,"line":47},[37,12904,12638],{"class":50},[37,12906,5660],{"class":2035},[37,12908,10925],{"class":54},[37,12910,12911,12913,12915,12917,12919,12921],{"class":39,"line":58},[37,12912,2057],{"class":50},[37,12914,10941],{"class":54},[37,12916,70],{"class":50},[37,12918,2110],{"class":82},[37,12920,261],{"class":54},[37,12922,12923],{"class":43}," \u002F\u002F局部变量\n",[37,12925,12926,12928],{"class":39,"line":64},[37,12927,4162],{"class":50},[37,12929,1505],{"class":54},[37,12931,12932],{"class":39,"line":76},[37,12933,1637],{"class":54},[37,12935,12936],{"class":39,"line":92},[37,12937,2472],{"emptyLinePlaceholder":131},[37,12939,12940],{"class":39,"line":97},[37,12941,12942],{"class":43},"\u002F\u002F返回静态变量引用\n",[37,12944,12945,12947,12949],{"class":39,"line":107},[37,12946,12638],{"class":50},[37,12948,5729],{"class":2035},[37,12950,10925],{"class":54},[37,12952,12953,12955,12957,12959,12961,12963,12965],{"class":39,"line":1390},[37,12954,11092],{"class":50},[37,12956,2454],{"class":50},[37,12958,10941],{"class":54},[37,12960,70],{"class":50},[37,12962,9022],{"class":82},[37,12964,261],{"class":54},[37,12966,12967],{"class":43},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[37,12969,12970,12972],{"class":39,"line":1402},[37,12971,4162],{"class":50},[37,12973,1505],{"class":54},[37,12975,12976],{"class":39,"line":1684},[37,12977,1637],{"class":54},[37,12979,12980],{"class":39,"line":1689},[37,12981,2472],{"emptyLinePlaceholder":131},[37,12983,12984,12986,12988],{"class":39,"line":1695},[37,12985,211],{"class":50},[37,12987,2045],{"class":2035},[37,12989,10925],{"class":54},[37,12991,12992],{"class":39,"line":1700},[37,12993,2472],{"emptyLinePlaceholder":131},[37,12995,12996],{"class":39,"line":1714},[37,12997,12998],{"class":43},"    \u002F\u002F不能返回局部变量的引用\n",[37,13000,13001,13004,13007,13009,13011],{"class":39,"line":1719},[37,13002,13003],{"class":50},"    int&",[37,13005,13006],{"class":54}," ref ",[37,13008,70],{"class":50},[37,13010,5660],{"class":2035},[37,13012,5708],{"class":54},[37,13014,13015,13017,13019,13022,13024,13026,13028,13030],{"class":39,"line":1725},[37,13016,6601],{"class":54},[37,13018,1247],{"class":50},[37,13020,13021],{"class":309}," \"ref = \"",[37,13023,1517],{"class":50},[37,13025,13006],{"class":54},[37,13027,1247],{"class":50},[37,13029,11541],{"class":54},[37,13031,13032],{"class":43},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[37,13034,13035,13037,13039,13041,13043,13045,13047,13049],{"class":39,"line":1746},[37,13036,6601],{"class":54},[37,13038,1247],{"class":50},[37,13040,13021],{"class":309},[37,13042,1517],{"class":50},[37,13044,13006],{"class":54},[37,13046,1247],{"class":50},[37,13048,11541],{"class":54},[37,13050,13051],{"class":43},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[37,13053,13054],{"class":39,"line":1751},[37,13055,2472],{"emptyLinePlaceholder":131},[37,13057,13058],{"class":39,"line":1765},[37,13059,13060],{"class":43},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[37,13062,13063,13065,13068,13070,13072],{"class":39,"line":1770},[37,13064,13003],{"class":50},[37,13066,13067],{"class":54}," ref2 ",[37,13069,70],{"class":50},[37,13071,5729],{"class":2035},[37,13073,5708],{"class":54},[37,13075,13076,13078,13080,13083,13085,13087,13089,13091],{"class":39,"line":1799},[37,13077,6601],{"class":54},[37,13079,1247],{"class":50},[37,13081,13082],{"class":309}," \"ref2 = \"",[37,13084,1517],{"class":50},[37,13086,13067],{"class":54},[37,13088,1247],{"class":50},[37,13090,11541],{"class":54},[37,13092,13093],{"class":43}," \u002F\u002F20\n",[37,13095,13096,13098,13100,13102,13104,13106,13108,13110],{"class":39,"line":1804},[37,13097,6601],{"class":54},[37,13099,1247],{"class":50},[37,13101,13082],{"class":309},[37,13103,1517],{"class":50},[37,13105,13067],{"class":54},[37,13107,1247],{"class":50},[37,13109,11541],{"class":54},[37,13111,13093],{"class":43},[37,13113,13114],{"class":39,"line":1821},[37,13115,2472],{"emptyLinePlaceholder":131},[37,13117,13118,13120,13123,13125,13127,13129],{"class":39,"line":1826},[37,13119,5774],{"class":2035},[37,13121,13122],{"class":54},"() ",[37,13124,70],{"class":50},[37,13126,3071],{"class":82},[37,13128,261],{"class":54},[37,13130,13131],{"class":43},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[37,13133,13134],{"class":39,"line":1831},[37,13135,2472],{"emptyLinePlaceholder":131},[37,13137,13138,13140,13142,13144,13146,13148,13150,13152],{"class":39,"line":1836},[37,13139,6601],{"class":54},[37,13141,1247],{"class":50},[37,13143,13082],{"class":309},[37,13145,1517],{"class":50},[37,13147,13067],{"class":54},[37,13149,1247],{"class":50},[37,13151,11541],{"class":54},[37,13153,13154],{"class":43}," \u002F\u002F1000\n",[37,13156,13157,13159,13161,13163,13165,13167,13169,13171],{"class":39,"line":1850},[37,13158,6601],{"class":54},[37,13160,1247],{"class":50},[37,13162,13082],{"class":309},[37,13164,1517],{"class":50},[37,13166,13067],{"class":54},[37,13168,1247],{"class":50},[37,13170,11541],{"class":54},[37,13172,13154],{"class":43},[37,13174,13175],{"class":39,"line":1855},[37,13176,2472],{"emptyLinePlaceholder":131},[37,13178,13179,13181,13183,13185],{"class":39,"line":2649},[37,13180,2375],{"class":2035},[37,13182,208],{"class":54},[37,13184,2380],{"class":309},[37,13186,2791],{"class":54},[37,13188,13189],{"class":39,"line":2663},[37,13190,2472],{"emptyLinePlaceholder":131},[37,13192,13193,13195,13197],{"class":39,"line":2671},[37,13194,4162],{"class":50},[37,13196,4165],{"class":82},[37,13198,1364],{"class":54},[37,13200,13201],{"class":39,"line":2676},[37,13202,1637],{"class":54},[146,13204,13206],{"id":13205},"_65引用的本质","6.5引用的本质",[14,13208,13209,13210],{},"本质：",[354,13211,13212],{},"引用的本质在c++内部实现是一个指针常量.",[27,13214,13216],{"className":196,"code":13215,"language":198,"meta":32,"style":32},"\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",[34,13217,13218,13223,13239,13253,13257,13266,13278,13283,13288,13299,13312,13316,13332,13349,13353,13361,13369],{"__ignoreMap":32},[37,13219,13220],{"class":39,"line":40},[37,13221,13222],{"class":43},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[37,13224,13225,13227,13229,13231,13233,13236],{"class":39,"line":47},[37,13226,5436],{"class":50},[37,13228,11457],{"class":2035},[37,13230,208],{"class":54},[37,13232,12638],{"class":50},[37,13234,13235],{"class":5288}," ref",[37,13237,13238],{"class":54},"){\n",[37,13240,13241,13244,13246,13248,13250],{"class":39,"line":58},[37,13242,13243],{"class":54},"    ref ",[37,13245,70],{"class":50},[37,13247,5826],{"class":82},[37,13249,261],{"class":54},[37,13251,13252],{"class":43}," \u002F\u002F ref是引用，转换为*ref = 100\n",[37,13254,13255],{"class":39,"line":64},[37,13256,1637],{"class":54},[37,13258,13259,13261,13263],{"class":39,"line":76},[37,13260,211],{"class":50},[37,13262,2045],{"class":2035},[37,13264,13265],{"class":54},"(){\n",[37,13267,13268,13270,13272,13274,13276],{"class":39,"line":92},[37,13269,2057],{"class":50},[37,13271,10941],{"class":54},[37,13273,70],{"class":50},[37,13275,2110],{"class":82},[37,13277,1364],{"class":54},[37,13279,13280],{"class":39,"line":97},[37,13281,13282],{"class":54},"    \n",[37,13284,13285],{"class":39,"line":107},[37,13286,13287],{"class":43},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[37,13289,13290,13292,13294,13296],{"class":39,"line":1390},[37,13291,13003],{"class":50},[37,13293,13006],{"class":54},[37,13295,70],{"class":50},[37,13297,13298],{"class":54}," a; \n",[37,13300,13301,13303,13305,13307,13309],{"class":39,"line":1402},[37,13302,13243],{"class":54},[37,13304,70],{"class":50},[37,13306,9022],{"class":82},[37,13308,261],{"class":54},[37,13310,13311],{"class":43}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[37,13313,13314],{"class":39,"line":1684},[37,13315,13282],{"class":54},[37,13317,13318,13320,13322,13324,13326,13328,13330],{"class":39,"line":1689},[37,13319,6601],{"class":54},[37,13321,1247],{"class":50},[37,13323,12742],{"class":309},[37,13325,1517],{"class":50},[37,13327,10941],{"class":54},[37,13329,1247],{"class":50},[37,13331,8912],{"class":54},[37,13333,13334,13336,13338,13341,13343,13345,13347],{"class":39,"line":1695},[37,13335,6601],{"class":54},[37,13337,1247],{"class":50},[37,13339,13340],{"class":309}," \"ref:\"",[37,13342,1517],{"class":50},[37,13344,13006],{"class":54},[37,13346,1247],{"class":50},[37,13348,8912],{"class":54},[37,13350,13351],{"class":39,"line":1700},[37,13352,13282],{"class":54},[37,13354,13355,13358],{"class":39,"line":1714},[37,13356,13357],{"class":2035},"    func",[37,13359,13360],{"class":54},"(a);\n",[37,13362,13363,13365,13367],{"class":39,"line":1719},[37,13364,4162],{"class":50},[37,13366,4165],{"class":82},[37,13368,1364],{"class":54},[37,13370,13371],{"class":39,"line":1725},[37,13372,1637],{"class":54},[14,13374,11404],{},[158,13376,13377,13380],{},[161,13378,13379],{},"引用的本质，就是一个指针常量",[161,13381,13382],{},"引用一旦初始化，就不可以发生改变",[146,13384,13386],{"id":13385},"_66常量引用","6.6常量引用",[14,13388,13389],{},"作用：常量引用主要用来修饰形参",[14,13391,13392,13393,13396],{},"在函数形参列表中，可以加",[354,13394,13395],{},"const修饰形参","，防止形参改变实参",[27,13398,13400],{"className":196,"code":13399,"language":198,"meta":32,"style":32},"\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",[34,13401,13402,13407,13412,13431,13436,13449,13453,13457,13465,13469,13474,13479,13493,13497,13505,13517,13521,13526,13538,13545,13549,13559,13563,13571],{"__ignoreMap":32},[37,13403,13404],{"class":39,"line":40},[37,13405,13406],{"class":43},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[37,13408,13409],{"class":39,"line":47},[37,13410,13411],{"class":43},"\u002F\u002F加上const就不能修改实参的\n",[37,13413,13414,13416,13419,13421,13423,13426,13429],{"class":39,"line":58},[37,13415,5436],{"class":50},[37,13417,13418],{"class":2035}," showValue",[37,13420,208],{"class":54},[37,13422,6864],{"class":50},[37,13424,13425],{"class":50}," int&",[37,13427,13428],{"class":5288}," v",[37,13430,12514],{"class":54},[37,13432,13433],{"class":39,"line":64},[37,13434,13435],{"class":43},"    \u002F\u002Fv += 100;\n",[37,13437,13438,13440,13442,13445,13447],{"class":39,"line":76},[37,13439,6601],{"class":54},[37,13441,1247],{"class":50},[37,13443,13444],{"class":54}," v ",[37,13446,1247],{"class":50},[37,13448,8912],{"class":54},[37,13450,13451],{"class":39,"line":92},[37,13452,1637],{"class":54},[37,13454,13455],{"class":39,"line":97},[37,13456,2472],{"emptyLinePlaceholder":131},[37,13458,13459,13461,13463],{"class":39,"line":107},[37,13460,211],{"class":50},[37,13462,2045],{"class":2035},[37,13464,10925],{"class":54},[37,13466,13467],{"class":39,"line":1390},[37,13468,2472],{"emptyLinePlaceholder":131},[37,13470,13471],{"class":39,"line":1402},[37,13472,13473],{"class":43},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[37,13475,13476],{"class":39,"line":1684},[37,13477,13478],{"class":43},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[37,13480,13481,13483,13485,13487,13489,13491],{"class":39,"line":1689},[37,13482,11293],{"class":50},[37,13484,13425],{"class":50},[37,13486,13006],{"class":54},[37,13488,70],{"class":50},[37,13490,2110],{"class":82},[37,13492,1364],{"class":54},[37,13494,13495],{"class":39,"line":1695},[37,13496,2472],{"emptyLinePlaceholder":131},[37,13498,13499,13502],{"class":39,"line":1700},[37,13500,13501],{"class":43},"    \u002F\u002Fref = 100;",[37,13503,13504],{"class":43},"  \u002F\u002F加入const后不可以修改变量\n",[37,13506,13507,13509,13511,13513,13515],{"class":39,"line":1714},[37,13508,6601],{"class":54},[37,13510,1247],{"class":50},[37,13512,13006],{"class":54},[37,13514,1247],{"class":50},[37,13516,8912],{"class":54},[37,13518,13519],{"class":39,"line":1719},[37,13520,2472],{"emptyLinePlaceholder":131},[37,13522,13523],{"class":39,"line":1725},[37,13524,13525],{"class":43},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[37,13527,13528,13530,13532,13534,13536],{"class":39,"line":1746},[37,13529,2057],{"class":50},[37,13531,10941],{"class":54},[37,13533,70],{"class":50},[37,13535,2110],{"class":82},[37,13537,1364],{"class":54},[37,13539,13540,13543],{"class":39,"line":1751},[37,13541,13542],{"class":2035},"    showValue",[37,13544,13360],{"class":54},[37,13546,13547],{"class":39,"line":1765},[37,13548,2472],{"emptyLinePlaceholder":131},[37,13550,13551,13553,13555,13557],{"class":39,"line":1770},[37,13552,2375],{"class":2035},[37,13554,208],{"class":54},[37,13556,2380],{"class":309},[37,13558,2791],{"class":54},[37,13560,13561],{"class":39,"line":1799},[37,13562,2472],{"emptyLinePlaceholder":131},[37,13564,13565,13567,13569],{"class":39,"line":1804},[37,13566,4162],{"class":50},[37,13568,4165],{"class":82},[37,13570,1364],{"class":54},[37,13572,13573],{"class":39,"line":1821},[37,13574,1637],{"class":54},[123,13576,13577],{},"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":32,"searchDepth":47,"depth":47,"links":13579},[13580,13581,13582,13583,13584,13585],{"id":12112,"depth":47,"text":12113},{"id":12291,"depth":47,"text":12292},{"id":12474,"depth":47,"text":12475},{"id":12878,"depth":47,"text":12879},{"id":13205,"depth":47,"text":13206},{"id":13385,"depth":47,"text":13386},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12104,"description":32},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13592,"title":13593,"body":13594,"description":32,"extension":129,"meta":14675,"navigation":131,"path":14676,"seo":14677,"stem":14678,"__hash__":14679},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13595,"toc":14667},[13596,13599,13603,13606,13611,13843,13845,13856,13860,13863,13871,13975,13978,13982,13985,13989,13992,13997,14019,14025,14352,14355,14359,14367,14664],[10,13597,13593],{"id":13598},"_7函数高级部分",[146,13600,13602],{"id":13601},"_71函数默认参数","7.1函数默认参数",[14,13604,13605],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,13607,5253,13608],{},[34,13609,13610],{}," 返回值类型  函数名 （参数= 默认值）{}",[27,13612,13614],{"className":196,"code":13613,"language":198,"meta":32,"style":32},"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",[34,13615,13616,13651,13666,13670,13674,13679,13684,13713,13733,13743,13747,13751,13759,13763,13791,13813,13817,13827,13831,13839],{"__ignoreMap":32},[37,13617,13618,13620,13622,13624,13626,13628,13630,13632,13634,13637,13639,13641,13643,13645,13647,13649],{"class":39,"line":40},[37,13619,211],{"class":50},[37,13621,11457],{"class":2035},[37,13623,208],{"class":54},[37,13625,211],{"class":50},[37,13627,1471],{"class":5288},[37,13629,12507],{"class":54},[37,13631,211],{"class":50},[37,13633,2905],{"class":5288},[37,13635,13636],{"class":50}," =",[37,13638,2110],{"class":82},[37,13640,12507],{"class":54},[37,13642,211],{"class":50},[37,13644,2921],{"class":5288},[37,13646,13636],{"class":50},[37,13648,2110],{"class":82},[37,13650,12514],{"class":54},[37,13652,13653,13655,13657,13659,13661,13663],{"class":39,"line":47},[37,13654,4162],{"class":50},[37,13656,10941],{"class":54},[37,13658,685],{"class":50},[37,13660,10954],{"class":54},[37,13662,685],{"class":50},[37,13664,13665],{"class":54}," c;\n",[37,13667,13668],{"class":39,"line":58},[37,13669,1637],{"class":54},[37,13671,13672],{"class":39,"line":64},[37,13673,2472],{"emptyLinePlaceholder":131},[37,13675,13676],{"class":39,"line":76},[37,13677,13678],{"class":43},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[37,13680,13681],{"class":39,"line":92},[37,13682,13683],{"class":43},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[37,13685,13686,13688,13691,13693,13695,13697,13699,13701,13703,13705,13707,13709,13711],{"class":39,"line":97},[37,13687,211],{"class":50},[37,13689,13690],{"class":2035}," func2",[37,13692,208],{"class":54},[37,13694,211],{"class":50},[37,13696,1471],{"class":5288},[37,13698,13636],{"class":50},[37,13700,2110],{"class":82},[37,13702,12507],{"class":54},[37,13704,211],{"class":50},[37,13706,2905],{"class":5288},[37,13708,13636],{"class":50},[37,13710,2110],{"class":82},[37,13712,2791],{"class":54},[37,13714,13715,13717,13719,13721,13723,13725,13727,13729,13731],{"class":39,"line":107},[37,13716,211],{"class":50},[37,13718,13690],{"class":2035},[37,13720,208],{"class":54},[37,13722,211],{"class":50},[37,13724,1471],{"class":5288},[37,13726,12507],{"class":54},[37,13728,211],{"class":50},[37,13730,2905],{"class":5288},[37,13732,12514],{"class":54},[37,13734,13735,13737,13739,13741],{"class":39,"line":1390},[37,13736,4162],{"class":50},[37,13738,10941],{"class":54},[37,13740,685],{"class":50},[37,13742,12535],{"class":54},[37,13744,13745],{"class":39,"line":1402},[37,13746,1637],{"class":54},[37,13748,13749],{"class":39,"line":1684},[37,13750,2472],{"emptyLinePlaceholder":131},[37,13752,13753,13755,13757],{"class":39,"line":1689},[37,13754,211],{"class":50},[37,13756,2045],{"class":2035},[37,13758,10925],{"class":54},[37,13760,13761],{"class":39,"line":1695},[37,13762,2472],{"emptyLinePlaceholder":131},[37,13764,13765,13767,13769,13772,13774,13776,13778,13780,13782,13784,13787,13789],{"class":39,"line":1700},[37,13766,6601],{"class":54},[37,13768,1247],{"class":50},[37,13770,13771],{"class":309}," \"ret = \"",[37,13773,1517],{"class":50},[37,13775,11457],{"class":2035},[37,13777,208],{"class":54},[37,13779,903],{"class":82},[37,13781,12507],{"class":54},[37,13783,903],{"class":82},[37,13785,13786],{"class":54},") ",[37,13788,1247],{"class":50},[37,13790,8912],{"class":54},[37,13792,13793,13795,13797,13799,13801,13803,13805,13807,13809,13811],{"class":39,"line":1714},[37,13794,6601],{"class":54},[37,13796,1247],{"class":50},[37,13798,13771],{"class":309},[37,13800,1517],{"class":50},[37,13802,11457],{"class":2035},[37,13804,208],{"class":54},[37,13806,516],{"class":82},[37,13808,13786],{"class":54},[37,13810,1247],{"class":50},[37,13812,8912],{"class":54},[37,13814,13815],{"class":39,"line":1719},[37,13816,2472],{"emptyLinePlaceholder":131},[37,13818,13819,13821,13823,13825],{"class":39,"line":1725},[37,13820,2375],{"class":2035},[37,13822,208],{"class":54},[37,13824,2380],{"class":309},[37,13826,2791],{"class":54},[37,13828,13829],{"class":39,"line":1746},[37,13830,2472],{"emptyLinePlaceholder":131},[37,13832,13833,13835,13837],{"class":39,"line":1751},[37,13834,4162],{"class":50},[37,13836,4165],{"class":82},[37,13838,1364],{"class":54},[37,13840,13841],{"class":39,"line":1765},[37,13842,1637],{"class":54},[14,13844,11404],{},[158,13846,13847,13850,13853],{},[161,13848,13849],{},"我传就用我；没传就用你",[161,13851,13852],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[161,13854,13855],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[146,13857,13859],{"id":13858},"_72函数的占位参数","7.2函数的占位参数",[14,13861,13862],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,13864,13865,13867,13868],{},[354,13866,5253],{}," ",[34,13869,13870],{},"返回值类型 函数名 (数据类型){}",[27,13872,13874],{"className":196,"code":13873,"language":198,"meta":32,"style":32},"\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",[34,13875,13876,13881,13899,13912,13916,13924,13928,13945,13949,13959,13963,13971],{"__ignoreMap":32},[37,13877,13878],{"class":39,"line":40},[37,13879,13880],{"class":43},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[37,13882,13883,13885,13887,13889,13891,13893,13895,13897],{"class":39,"line":47},[37,13884,5436],{"class":50},[37,13886,11457],{"class":2035},[37,13888,208],{"class":54},[37,13890,211],{"class":50},[37,13892,1471],{"class":5288},[37,13894,12507],{"class":54},[37,13896,211],{"class":50},[37,13898,12514],{"class":54},[37,13900,13901,13903,13905,13908,13910],{"class":39,"line":58},[37,13902,6601],{"class":54},[37,13904,1247],{"class":50},[37,13906,13907],{"class":309}," \"this is func\"",[37,13909,1517],{"class":50},[37,13911,8912],{"class":54},[37,13913,13914],{"class":39,"line":64},[37,13915,1637],{"class":54},[37,13917,13918,13920,13922],{"class":39,"line":76},[37,13919,211],{"class":50},[37,13921,2045],{"class":2035},[37,13923,10925],{"class":54},[37,13925,13926],{"class":39,"line":92},[37,13927,2472],{"emptyLinePlaceholder":131},[37,13929,13930,13932,13934,13936,13938,13940,13942],{"class":39,"line":97},[37,13931,13357],{"class":2035},[37,13933,208],{"class":54},[37,13935,650],{"class":82},[37,13937,583],{"class":54},[37,13939,650],{"class":82},[37,13941,6038],{"class":54},[37,13943,13944],{"class":43}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[37,13946,13947],{"class":39,"line":107},[37,13948,2472],{"emptyLinePlaceholder":131},[37,13950,13951,13953,13955,13957],{"class":39,"line":1390},[37,13952,2375],{"class":2035},[37,13954,208],{"class":54},[37,13956,2380],{"class":309},[37,13958,2791],{"class":54},[37,13960,13961],{"class":39,"line":1402},[37,13962,2472],{"emptyLinePlaceholder":131},[37,13964,13965,13967,13969],{"class":39,"line":1684},[37,13966,4162],{"class":50},[37,13968,4165],{"class":82},[37,13970,1364],{"class":54},[37,13972,13973],{"class":39,"line":1689},[37,13974,1637],{"class":54},[14,13976,13977],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[146,13979,13981],{"id":13980},"_73函数重载","7.3函数重载",[14,13983,13984],{},"意思是函数名是可以相同的",[175,13986,13988],{"id":13987},"_731基本语法","7.3.1基本语法",[14,13990,13991],{},"作用：函数名可以相同，提高复用性",[14,13993,13994],{},[354,13995,13996],{},"函数重载满足条件：",[1210,13998,13999,14002,14005],{},[161,14000,14001],{},"同一个作用域下",[161,14003,14004],{},"函数名称相同",[161,14006,14007,14008,14011,14012,14015,14016],{},"函数参数",[354,14009,14010],{},"类型不同","  或者 ",[354,14013,14014],{},"个数不同"," 或者 ",[354,14017,14018],{},"顺序不同",[14,14020,14021,14024],{},[354,14022,14023],{},"注意:","  函数的返回值不可以作为函数重载的条件",[27,14026,14028],{"className":10013,"code":14027,"language":10015,"meta":32,"style":32},"\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",[34,14029,14030,14035,14043,14047,14060,14064,14078,14082,14095,14099,14114,14118,14131,14135,14156,14160,14173,14177,14197,14201,14214,14218,14222,14227,14232,14237,14242,14247,14251,14255,14263,14267,14273,14283,14293,14307,14322,14326,14336,14340,14348],{"__ignoreMap":32},[37,14031,14032],{"class":39,"line":40},[37,14033,14034],{"class":43},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[37,14036,14037,14039,14041],{"class":39,"line":47},[37,14038,5436],{"class":50},[37,14040,11457],{"class":2035},[37,14042,2048],{"class":54},[37,14044,14045],{"class":39,"line":58},[37,14046,1618],{"class":54},[37,14048,14049,14051,14053,14056,14058],{"class":39,"line":64},[37,14050,6601],{"class":54},[37,14052,1247],{"class":50},[37,14054,14055],{"class":309}," \"func 的调用！\"",[37,14057,1517],{"class":50},[37,14059,8912],{"class":54},[37,14061,14062],{"class":39,"line":76},[37,14063,1637],{"class":54},[37,14065,14066,14068,14070,14072,14074,14076],{"class":39,"line":92},[37,14067,5436],{"class":50},[37,14069,11457],{"class":2035},[37,14071,208],{"class":54},[37,14073,211],{"class":50},[37,14075,1471],{"class":5288},[37,14077,214],{"class":54},[37,14079,14080],{"class":39,"line":97},[37,14081,1618],{"class":54},[37,14083,14084,14086,14088,14091,14093],{"class":39,"line":107},[37,14085,6601],{"class":54},[37,14087,1247],{"class":50},[37,14089,14090],{"class":309}," \"func (int a) 的调用！\"",[37,14092,1517],{"class":50},[37,14094,8912],{"class":54},[37,14096,14097],{"class":39,"line":1390},[37,14098,1637],{"class":54},[37,14100,14101,14103,14105,14107,14110,14112],{"class":39,"line":1402},[37,14102,5436],{"class":50},[37,14104,11457],{"class":2035},[37,14106,208],{"class":54},[37,14108,14109],{"class":50},"double",[37,14111,1471],{"class":5288},[37,14113,214],{"class":54},[37,14115,14116],{"class":39,"line":1684},[37,14117,1618],{"class":54},[37,14119,14120,14122,14124,14127,14129],{"class":39,"line":1689},[37,14121,6601],{"class":54},[37,14123,1247],{"class":50},[37,14125,14126],{"class":309}," \"func (double a)的调用！\"",[37,14128,1517],{"class":50},[37,14130,8912],{"class":54},[37,14132,14133],{"class":39,"line":1695},[37,14134,1637],{"class":54},[37,14136,14137,14139,14141,14143,14145,14147,14150,14152,14154],{"class":39,"line":1700},[37,14138,5436],{"class":50},[37,14140,11457],{"class":2035},[37,14142,208],{"class":54},[37,14144,211],{"class":50},[37,14146,1471],{"class":5288},[37,14148,14149],{"class":54}," ,",[37,14151,14109],{"class":50},[37,14153,2905],{"class":5288},[37,14155,214],{"class":54},[37,14157,14158],{"class":39,"line":1714},[37,14159,1618],{"class":54},[37,14161,14162,14164,14166,14169,14171],{"class":39,"line":1719},[37,14163,6601],{"class":54},[37,14165,1247],{"class":50},[37,14167,14168],{"class":309}," \"func (int a ,double b) 的调用！\"",[37,14170,1517],{"class":50},[37,14172,8912],{"class":54},[37,14174,14175],{"class":39,"line":1725},[37,14176,1637],{"class":54},[37,14178,14179,14181,14183,14185,14187,14189,14191,14193,14195],{"class":39,"line":1746},[37,14180,5436],{"class":50},[37,14182,11457],{"class":2035},[37,14184,208],{"class":54},[37,14186,14109],{"class":50},[37,14188,1471],{"class":5288},[37,14190,14149],{"class":54},[37,14192,211],{"class":50},[37,14194,2905],{"class":5288},[37,14196,214],{"class":54},[37,14198,14199],{"class":39,"line":1751},[37,14200,1618],{"class":54},[37,14202,14203,14205,14207,14210,14212],{"class":39,"line":1765},[37,14204,6601],{"class":54},[37,14206,1247],{"class":50},[37,14208,14209],{"class":309}," \"func (double a ,int b)的调用！\"",[37,14211,1517],{"class":50},[37,14213,8912],{"class":54},[37,14215,14216],{"class":39,"line":1770},[37,14217,1637],{"class":54},[37,14219,14220],{"class":39,"line":1799},[37,14221,2472],{"emptyLinePlaceholder":131},[37,14223,14224],{"class":39,"line":1804},[37,14225,14226],{"class":43},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[37,14228,14229],{"class":39,"line":1821},[37,14230,14231],{"class":43},"\u002F\u002Fint func(double a, int b)\n",[37,14233,14234],{"class":39,"line":1826},[37,14235,14236],{"class":43},"\u002F\u002F{\n",[37,14238,14239],{"class":39,"line":1831},[37,14240,14241],{"class":43},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[37,14243,14244],{"class":39,"line":1836},[37,14245,14246],{"class":43},"\u002F\u002F}\n",[37,14248,14249],{"class":39,"line":1850},[37,14250,2472],{"emptyLinePlaceholder":131},[37,14252,14253],{"class":39,"line":1855},[37,14254,2472],{"emptyLinePlaceholder":131},[37,14256,14257,14259,14261],{"class":39,"line":2649},[37,14258,211],{"class":50},[37,14260,2045],{"class":2035},[37,14262,10925],{"class":54},[37,14264,14265],{"class":39,"line":2663},[37,14266,2472],{"emptyLinePlaceholder":131},[37,14268,14269,14271],{"class":39,"line":2671},[37,14270,13357],{"class":2035},[37,14272,5708],{"class":54},[37,14274,14275,14277,14279,14281],{"class":39,"line":2676},[37,14276,13357],{"class":2035},[37,14278,208],{"class":54},[37,14280,650],{"class":82},[37,14282,2791],{"class":54},[37,14284,14285,14287,14289,14291],{"class":39,"line":2682},[37,14286,13357],{"class":2035},[37,14288,208],{"class":54},[37,14290,255],{"class":82},[37,14292,2791],{"class":54},[37,14294,14295,14297,14299,14301,14303,14305],{"class":39,"line":2688},[37,14296,13357],{"class":2035},[37,14298,208],{"class":54},[37,14300,650],{"class":82},[37,14302,583],{"class":54},[37,14304,255],{"class":82},[37,14306,2791],{"class":54},[37,14308,14309,14311,14313,14315,14318,14320],{"class":39,"line":2693},[37,14310,13357],{"class":2035},[37,14312,208],{"class":54},[37,14314,255],{"class":82},[37,14316,14317],{"class":54}," , ",[37,14319,650],{"class":82},[37,14321,2791],{"class":54},[37,14323,14324],{"class":39,"line":8020},[37,14325,13282],{"class":54},[37,14327,14328,14330,14332,14334],{"class":39,"line":8044},[37,14329,2375],{"class":2035},[37,14331,208],{"class":54},[37,14333,2380],{"class":309},[37,14335,2791],{"class":54},[37,14337,14338],{"class":39,"line":8049},[37,14339,2472],{"emptyLinePlaceholder":131},[37,14341,14342,14344,14346],{"class":39,"line":8055},[37,14343,4162],{"class":50},[37,14345,4165],{"class":82},[37,14347,1364],{"class":54},[37,14349,14350],{"class":39,"line":8082},[37,14351,1637],{"class":54},[14,14353,14354],{},"重点：函数返回值不可以作为函数重载条件！",[175,14356,14358],{"id":14357},"_732注意事项","7.3.2注意事项",[1210,14360,14361,14364],{},[161,14362,14363],{},"引用作为重载条件!!!",[161,14365,14366],{},"函数重载碰到函数默认参数",[27,14368,14370],{"className":196,"code":14369,"language":198,"meta":32,"style":32},"\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",[34,14371,14372,14377,14382,14386,14402,14406,14419,14423,14427,14445,14449,14462,14466,14470,14474,14479,14483,14507,14511,14524,14528,14532,14546,14550,14563,14567,14571,14579,14583,14595,14605,14618,14622,14626,14634,14638,14648,14652,14660],{"__ignoreMap":32},[37,14373,14374],{"class":39,"line":40},[37,14375,14376],{"class":43},"\u002F\u002F函数重载注意事项\n",[37,14378,14379],{"class":39,"line":47},[37,14380,14381],{"class":43},"\u002F\u002F1、引用作为重载条件\n",[37,14383,14384],{"class":39,"line":58},[37,14385,2472],{"emptyLinePlaceholder":131},[37,14387,14388,14390,14392,14394,14396,14398,14400],{"class":39,"line":64},[37,14389,5436],{"class":50},[37,14391,11457],{"class":2035},[37,14393,208],{"class":54},[37,14395,211],{"class":50},[37,14397,10656],{"class":50},[37,14399,443],{"class":5288},[37,14401,214],{"class":54},[37,14403,14404],{"class":39,"line":76},[37,14405,1618],{"class":54},[37,14407,14408,14410,14412,14415,14417],{"class":39,"line":92},[37,14409,6601],{"class":54},[37,14411,1247],{"class":50},[37,14413,14414],{"class":309}," \"func (int &a) 调用 \"",[37,14416,1517],{"class":50},[37,14418,8912],{"class":54},[37,14420,14421],{"class":39,"line":97},[37,14422,1637],{"class":54},[37,14424,14425],{"class":39,"line":107},[37,14426,2472],{"emptyLinePlaceholder":131},[37,14428,14429,14431,14433,14435,14437,14439,14441,14443],{"class":39,"line":1390},[37,14430,5436],{"class":50},[37,14432,11457],{"class":2035},[37,14434,208],{"class":54},[37,14436,6864],{"class":50},[37,14438,2454],{"class":50},[37,14440,10656],{"class":50},[37,14442,443],{"class":5288},[37,14444,214],{"class":54},[37,14446,14447],{"class":39,"line":1402},[37,14448,1618],{"class":54},[37,14450,14451,14453,14455,14458,14460],{"class":39,"line":1684},[37,14452,6601],{"class":54},[37,14454,1247],{"class":50},[37,14456,14457],{"class":309}," \"func (const int &a) 调用 \"",[37,14459,1517],{"class":50},[37,14461,8912],{"class":54},[37,14463,14464],{"class":39,"line":1689},[37,14465,1637],{"class":54},[37,14467,14468],{"class":39,"line":1695},[37,14469,2472],{"emptyLinePlaceholder":131},[37,14471,14472],{"class":39,"line":1700},[37,14473,2472],{"emptyLinePlaceholder":131},[37,14475,14476],{"class":39,"line":1714},[37,14477,14478],{"class":43},"\u002F\u002F2、函数重载碰到函数默认参数\n",[37,14480,14481],{"class":39,"line":1719},[37,14482,2472],{"emptyLinePlaceholder":131},[37,14484,14485,14487,14489,14491,14493,14495,14497,14499,14501,14503,14505],{"class":39,"line":1725},[37,14486,5436],{"class":50},[37,14488,13690],{"class":2035},[37,14490,208],{"class":54},[37,14492,211],{"class":50},[37,14494,1471],{"class":5288},[37,14496,12507],{"class":54},[37,14498,211],{"class":50},[37,14500,2905],{"class":5288},[37,14502,13636],{"class":50},[37,14504,2110],{"class":82},[37,14506,214],{"class":54},[37,14508,14509],{"class":39,"line":1746},[37,14510,1618],{"class":54},[37,14512,14513,14515,14517,14520,14522],{"class":39,"line":1751},[37,14514,6601],{"class":54},[37,14516,1247],{"class":50},[37,14518,14519],{"class":309}," \"func2(int a, int b = 10) 调用\"",[37,14521,1517],{"class":50},[37,14523,8912],{"class":54},[37,14525,14526],{"class":39,"line":1765},[37,14527,1637],{"class":54},[37,14529,14530],{"class":39,"line":1770},[37,14531,2472],{"emptyLinePlaceholder":131},[37,14533,14534,14536,14538,14540,14542,14544],{"class":39,"line":1799},[37,14535,5436],{"class":50},[37,14537,13690],{"class":2035},[37,14539,208],{"class":54},[37,14541,211],{"class":50},[37,14543,1471],{"class":5288},[37,14545,214],{"class":54},[37,14547,14548],{"class":39,"line":1804},[37,14549,1618],{"class":54},[37,14551,14552,14554,14556,14559,14561],{"class":39,"line":1821},[37,14553,6601],{"class":54},[37,14555,1247],{"class":50},[37,14557,14558],{"class":309}," \"func2(int a) 调用\"",[37,14560,1517],{"class":50},[37,14562,8912],{"class":54},[37,14564,14565],{"class":39,"line":1826},[37,14566,1637],{"class":54},[37,14568,14569],{"class":39,"line":1831},[37,14570,2472],{"emptyLinePlaceholder":131},[37,14572,14573,14575,14577],{"class":39,"line":1836},[37,14574,211],{"class":50},[37,14576,2045],{"class":2035},[37,14578,10925],{"class":54},[37,14580,14581],{"class":39,"line":1850},[37,14582,13282],{"class":54},[37,14584,14585,14587,14589,14591,14593],{"class":39,"line":1855},[37,14586,2057],{"class":50},[37,14588,10941],{"class":54},[37,14590,70],{"class":50},[37,14592,2110],{"class":82},[37,14594,1364],{"class":54},[37,14596,14597,14599,14602],{"class":39,"line":2649},[37,14598,13357],{"class":2035},[37,14600,14601],{"class":54},"(a);",[37,14603,14604],{"class":43}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[37,14606,14607,14609,14611,14613,14615],{"class":39,"line":2663},[37,14608,13357],{"class":2035},[37,14610,208],{"class":54},[37,14612,650],{"class":82},[37,14614,6038],{"class":54},[37,14616,14617],{"class":43},"\u002F\u002F调用有const   10是个常量\n",[37,14619,14620],{"class":39,"line":2671},[37,14621,2472],{"emptyLinePlaceholder":131},[37,14623,14624],{"class":39,"line":2676},[37,14625,2472],{"emptyLinePlaceholder":131},[37,14627,14628,14631],{"class":39,"line":2682},[37,14629,14630],{"class":43},"    \u002F\u002Ffunc2(10);",[37,14632,14633],{"class":43}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[37,14635,14636],{"class":39,"line":2688},[37,14637,2472],{"emptyLinePlaceholder":131},[37,14639,14640,14642,14644,14646],{"class":39,"line":2693},[37,14641,2375],{"class":2035},[37,14643,208],{"class":54},[37,14645,2380],{"class":309},[37,14647,2791],{"class":54},[37,14649,14650],{"class":39,"line":8020},[37,14651,2472],{"emptyLinePlaceholder":131},[37,14653,14654,14656,14658],{"class":39,"line":8044},[37,14655,4162],{"class":50},[37,14657,4165],{"class":82},[37,14659,1364],{"class":54},[37,14661,14662],{"class":39,"line":8049},[37,14663,1637],{"class":54},[123,14665,14666],{},"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":32,"searchDepth":47,"depth":47,"links":14668},[14669,14670,14671],{"id":13601,"depth":47,"text":13602},{"id":13858,"depth":47,"text":13859},{"id":13980,"depth":47,"text":13981,"children":14672},[14673,14674],{"id":13987,"depth":58,"text":13988},{"id":14357,"depth":58,"text":14358},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13593,"description":32},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14681,"title":14682,"body":14683,"description":23437,"extension":129,"meta":23438,"navigation":131,"path":23439,"seo":23440,"stem":23441,"__hash__":23442},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14684,"toc":23418},[14685,14688,14694,14701,14706,14709,14712,14715,14719,14723,14726,14729,14737,14742,14745,14752,14757,14916,14919,15172,15175,15178,15181,15186,15189,15192,15203,15208,15444,15448,15458,15461,15469,15616,15620,15623,15626,15630,16075,16079,16087,16095,17007,17014,17019,17647,17650,17653,17656,17775,17778,17865,17868,17994,17997,18091,18094,18447,18451,18459,18463,18470,18473,18476,18487,18493,18498,18510,18518,18538,18546,18563,18749,18752,18756,18759,18762,18765,18768,18771,18774,18777,19237,19243,19247,19250,19261,19848,19851,20340,20344,20347,20350,20353,20356,20359,20367,20763,20767,20770,20773,21220,21223,21226,21231,21234,21239,21242,21246,21249,21251,21257,21260,21566,21576,21617,21621,21624,21626,21659,21662,21969,21971,21986,21989,22012,22021,22027,22030,22034,22037,22040,22045,22056,22061,22069,22074,22204,22207,22210,22385,22390,22602,22606,22609,22723,22728,22967,22971,22975,22978,22981,22986,23091,23094,23097,23100,23104,23215,23218,23221,23226,23278,23281,23284,23289,23335,23338,23343,23411,23413,23416],[10,14686,14682],{"id":14687},"_8类和对象",[14,14689,14690,14691],{},"C++面向对象的三大特性为",[354,14692,14693],{},"封装、继承、多态",[14,14695,14696,14697,14700],{},"C++认为",[354,14698,14699],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,14702,14703],{},[354,14704,14705],{},"例如：",[14,14707,14708],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,14710,14711],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,14713,14714],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[146,14716,14718],{"id":14717},"_81封装","8.1封装",[175,14720,14722],{"id":14721},"_811封装的意义","8.1.1封装的意义",[14,14724,14725],{},"封装是C++面向对象三大特性之一",[14,14727,14728],{},"封装的意义：",[1210,14730,14731,14734],{},[161,14732,14733],{},"将属性和行为作为一个整体，表现生活中的事物",[161,14735,14736],{},"将属性和行为加以权限控制",[14,14738,14739],{},[354,14740,14741],{},"封装意义一：",[14,14743,14744],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,14746,14747,13867,14749],{},[354,14748,5253],{},[34,14750,14751],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[158,14753,14754],{},[161,14755,14756],{},"**示例1：**设计一个圆类，求圆的周长",[27,14758,14760],{"className":196,"code":14759,"language":198,"meta":32,"style":32},"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",[34,14761,14762,14770,14774,14779,14784,14789,14794,14801,14806,14816,14820,14838,14842,14846,14854,14858,14863,14868,14873,14878,14889,14912],{"__ignoreMap":32},[37,14763,14764,14767],{"class":39,"line":40},[37,14765,14766],{"class":50},"class",[37,14768,14769],{"class":2035}," Circle\n",[37,14771,14772],{"class":39,"line":47},[37,14773,1618],{"class":54},[37,14775,14776],{"class":39,"line":58},[37,14777,14778],{"class":43},"    \u002F\u002F访问权限\n",[37,14780,14781],{"class":39,"line":64},[37,14782,14783],{"class":43},"    \u002F\u002F公共权限\n",[37,14785,14786],{"class":39,"line":76},[37,14787,14788],{"class":50},"public:\n",[37,14790,14791],{"class":39,"line":92},[37,14792,14793],{"class":43},"    \u002F\u002F属性\n",[37,14795,14796,14798],{"class":39,"line":97},[37,14797,2057],{"class":50},[37,14799,14800],{"class":54}," m_r;\n",[37,14802,14803],{"class":39,"line":107},[37,14804,14805],{"class":43},"    \u002F\u002F行为\n",[37,14807,14808,14811,14814],{"class":39,"line":1390},[37,14809,14810],{"class":50},"    double",[37,14812,14813],{"class":2035}," calculateZC",[37,14815,2048],{"class":54},[37,14817,14818],{"class":39,"line":1402},[37,14819,2102],{"class":54},[37,14821,14822,14825,14828,14830,14833,14835],{"class":39,"line":1684},[37,14823,14824],{"class":50},"        return",[37,14826,14827],{"class":82}," 2",[37,14829,659],{"class":50},[37,14831,14832],{"class":54},"PI",[37,14834,659],{"class":50},[37,14836,14837],{"class":54},"m_r;\n",[37,14839,14840],{"class":39,"line":1689},[37,14841,2259],{"class":54},[37,14843,14844],{"class":39,"line":1695},[37,14845,4067],{"class":54},[37,14847,14848,14850,14852],{"class":39,"line":1700},[37,14849,211],{"class":50},[37,14851,2045],{"class":2035},[37,14853,2048],{"class":54},[37,14855,14856],{"class":39,"line":1714},[37,14857,1618],{"class":54},[37,14859,14860],{"class":39,"line":1719},[37,14861,14862],{"class":43},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[37,14864,14865],{"class":39,"line":1725},[37,14866,14867],{"class":43},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[37,14869,14870],{"class":39,"line":1746},[37,14871,14872],{"class":54},"    Circle c1;\n",[37,14874,14875],{"class":39,"line":1751},[37,14876,14877],{"class":43},"    \u002F\u002F给圆对象 的属性进行赋值\n",[37,14879,14880,14883,14885,14887],{"class":39,"line":1765},[37,14881,14882],{"class":54},"    c1.m_r",[37,14884,70],{"class":50},[37,14886,650],{"class":82},[37,14888,1364],{"class":54},[37,14890,14891,14893,14895,14898,14900,14903,14906,14908,14910],{"class":39,"line":1770},[37,14892,1623],{"class":54},[37,14894,1247],{"class":50},[37,14896,14897],{"class":309},"\"圆的周长\"",[37,14899,1247],{"class":50},[37,14901,14902],{"class":54},"c1.",[37,14904,14905],{"class":2035},"calculateZC",[37,14907,2499],{"class":54},[37,14909,1247],{"class":50},[37,14911,1269],{"class":54},[37,14913,14914],{"class":39,"line":1799},[37,14915,1637],{"class":54},[14,14917,14918],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[27,14920,14922],{"className":196,"code":14921,"language":198,"meta":32,"style":32},"#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",[34,14923,14924,14930,14940,14946,14952,14956,14960,14965,14972,14977,14995,14999,15009,15013,15018,15034,15038,15048,15052,15057,15065,15069,15101,15105,15109,15117,15121,15126,15131,15145,15159,15168],{"__ignoreMap":32},[37,14925,14926,14928],{"class":39,"line":40},[37,14927,2021],{"class":50},[37,14929,2024],{"class":309},[37,14931,14932,14934,14936,14938],{"class":39,"line":47},[37,14933,2029],{"class":50},[37,14935,2032],{"class":50},[37,14937,2036],{"class":2035},[37,14939,1364],{"class":54},[37,14941,14942,14944],{"class":39,"line":58},[37,14943,2021],{"class":50},[37,14945,7821],{"class":309},[37,14947,14948,14950],{"class":39,"line":64},[37,14949,14766],{"class":50},[37,14951,7834],{"class":2035},[37,14953,14954],{"class":39,"line":76},[37,14955,1618],{"class":54},[37,14957,14958],{"class":39,"line":92},[37,14959,14788],{"class":50},[37,14961,14962],{"class":39,"line":97},[37,14963,14964],{"class":54},"    string m_name;\n",[37,14966,14967,14969],{"class":39,"line":107},[37,14968,2057],{"class":50},[37,14970,14971],{"class":54}," m_id;\n",[37,14973,14974],{"class":39,"line":1390},[37,14975,14976],{"class":43},"    \u002F\u002F赋值姓名\n",[37,14978,14979,14982,14985,14987,14990,14993],{"class":39,"line":1402},[37,14980,14981],{"class":50},"    void",[37,14983,14984],{"class":2035}," setName",[37,14986,208],{"class":54},[37,14988,14989],{"class":2035},"string",[37,14991,14992],{"class":5288}," name",[37,14994,214],{"class":54},[37,14996,14997],{"class":39,"line":1684},[37,14998,2102],{"class":54},[37,15000,15001,15004,15006],{"class":39,"line":1689},[37,15002,15003],{"class":54},"        m_name",[37,15005,70],{"class":50},[37,15007,15008],{"class":54},"name;\n",[37,15010,15011],{"class":39,"line":1695},[37,15012,2259],{"class":54},[37,15014,15015],{"class":39,"line":1700},[37,15016,15017],{"class":43},"    \u002F\u002F赋值学号\n",[37,15019,15020,15022,15025,15027,15029,15032],{"class":39,"line":1714},[37,15021,14981],{"class":50},[37,15023,15024],{"class":2035}," setId",[37,15026,208],{"class":54},[37,15028,211],{"class":50},[37,15030,15031],{"class":5288}," id",[37,15033,214],{"class":54},[37,15035,15036],{"class":39,"line":1719},[37,15037,2102],{"class":54},[37,15039,15040,15043,15045],{"class":39,"line":1725},[37,15041,15042],{"class":54},"        m_id",[37,15044,70],{"class":50},[37,15046,15047],{"class":54},"id;\n",[37,15049,15050],{"class":39,"line":1746},[37,15051,2259],{"class":54},[37,15053,15054],{"class":39,"line":1751},[37,15055,15056],{"class":43},"    \u002F\u002F打印学生信息\n",[37,15058,15059,15061,15063],{"class":39,"line":1765},[37,15060,14981],{"class":50},[37,15062,9687],{"class":2035},[37,15064,2048],{"class":54},[37,15066,15067],{"class":39,"line":1770},[37,15068,2102],{"class":54},[37,15070,15071,15073,15075,15078,15080,15083,15085,15087,15089,15092,15094,15097,15099],{"class":39,"line":1799},[37,15072,3523],{"class":54},[37,15074,1247],{"class":50},[37,15076,15077],{"class":309},"\"姓名：\"",[37,15079,1247],{"class":50},[37,15081,15082],{"class":54},"m_name",[37,15084,1247],{"class":50},[37,15086,4431],{"class":309},[37,15088,1247],{"class":50},[37,15090,15091],{"class":309},"\"学号：\"",[37,15093,1247],{"class":50},[37,15095,15096],{"class":54},"m_id",[37,15098,1247],{"class":50},[37,15100,1269],{"class":54},[37,15102,15103],{"class":39,"line":1804},[37,15104,2259],{"class":54},[37,15106,15107],{"class":39,"line":1821},[37,15108,4067],{"class":54},[37,15110,15111,15113,15115],{"class":39,"line":1826},[37,15112,211],{"class":50},[37,15114,2045],{"class":2035},[37,15116,2048],{"class":54},[37,15118,15119],{"class":39,"line":1831},[37,15120,1618],{"class":54},[37,15122,15123],{"class":39,"line":1836},[37,15124,15125],{"class":43},"    \u002F\u002F实例化\n",[37,15127,15128],{"class":39,"line":1850},[37,15129,15130],{"class":54},"    Student s1;\n",[37,15132,15133,15136,15139,15141,15143],{"class":39,"line":1855},[37,15134,15135],{"class":54},"    s1.",[37,15137,15138],{"class":2035},"setName",[37,15140,208],{"class":54},[37,15142,7988],{"class":309},[37,15144,2791],{"class":54},[37,15146,15147,15149,15152,15154,15157],{"class":39,"line":2649},[37,15148,15135],{"class":54},[37,15150,15151],{"class":2035},"setId",[37,15153,208],{"class":54},[37,15155,15156],{"class":82},"123456",[37,15158,2791],{"class":54},[37,15160,15161,15163,15166],{"class":39,"line":2663},[37,15162,15135],{"class":54},[37,15164,15165],{"class":2035},"printInfo",[37,15167,5708],{"class":54},[37,15169,15170],{"class":39,"line":2671},[37,15171,1637],{"class":54},[14,15173,15174],{},"类中的属性和行为统称为成员",[14,15176,15177],{},"属性：成员属性(成员变量)",[14,15179,15180],{},"方法：成员函数(成员方法)",[14,15182,15183],{},[354,15184,15185],{},"封装意义二：",[14,15187,15188],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15190,15191],{},"访问权限有三种：",[158,15193,15194,15197,15200],{},[161,15195,15196],{},"public        公共权限",[161,15198,15199],{},"protected 保护权限",[161,15201,15202],{},"private      私有权限",[14,15204,15205],{},[354,15206,15207],{},"示例：",[27,15209,15211],{"className":10013,"code":15210,"language":10015,"meta":32,"style":32},"\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",[34,15212,15213,15218,15223,15228,15233,15237,15244,15248,15253,15257,15262,15266,15271,15276,15281,15285,15290,15295,15302,15306,15310,15318,15322,15333,15345,15357,15361,15365,15369,15377,15381,15386,15398,15406,15414,15418,15428,15432,15440],{"__ignoreMap":32},[37,15214,15215],{"class":39,"line":40},[37,15216,15217],{"class":43},"\u002F\u002F三种权限\n",[37,15219,15220],{"class":39,"line":47},[37,15221,15222],{"class":43},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[37,15224,15225],{"class":39,"line":58},[37,15226,15227],{"class":43},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[37,15229,15230],{"class":39,"line":64},[37,15231,15232],{"class":43},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[37,15234,15235],{"class":39,"line":76},[37,15236,2472],{"emptyLinePlaceholder":131},[37,15238,15239,15241],{"class":39,"line":92},[37,15240,14766],{"class":50},[37,15242,15243],{"class":2035}," Person\n",[37,15245,15246],{"class":39,"line":97},[37,15247,1618],{"class":54},[37,15249,15250],{"class":39,"line":107},[37,15251,15252],{"class":43},"    \u002F\u002F姓名  公共权限\n",[37,15254,15255],{"class":39,"line":1390},[37,15256,14788],{"class":50},[37,15258,15259],{"class":39,"line":1402},[37,15260,15261],{"class":54},"    string m_Name;\n",[37,15263,15264],{"class":39,"line":1684},[37,15265,2472],{"emptyLinePlaceholder":131},[37,15267,15268],{"class":39,"line":1689},[37,15269,15270],{"class":43},"    \u002F\u002F汽车  保护权限\n",[37,15272,15273],{"class":39,"line":1695},[37,15274,15275],{"class":50},"protected:\n",[37,15277,15278],{"class":39,"line":1700},[37,15279,15280],{"class":54},"    string m_Car;\n",[37,15282,15283],{"class":39,"line":1714},[37,15284,2472],{"emptyLinePlaceholder":131},[37,15286,15287],{"class":39,"line":1719},[37,15288,15289],{"class":43},"    \u002F\u002F银行卡密码  私有权限\n",[37,15291,15292],{"class":39,"line":1725},[37,15293,15294],{"class":50},"private:\n",[37,15296,15297,15299],{"class":39,"line":1746},[37,15298,2057],{"class":50},[37,15300,15301],{"class":54}," m_Password;\n",[37,15303,15304],{"class":39,"line":1751},[37,15305,2472],{"emptyLinePlaceholder":131},[37,15307,15308],{"class":39,"line":1765},[37,15309,14788],{"class":50},[37,15311,15312,15314,15316],{"class":39,"line":1770},[37,15313,14981],{"class":50},[37,15315,11457],{"class":2035},[37,15317,2048],{"class":54},[37,15319,15320],{"class":39,"line":1799},[37,15321,2102],{"class":54},[37,15323,15324,15327,15329,15331],{"class":39,"line":1804},[37,15325,15326],{"class":54},"        m_Name ",[37,15328,70],{"class":50},[37,15330,9010],{"class":309},[37,15332,1364],{"class":54},[37,15334,15335,15338,15340,15343],{"class":39,"line":1821},[37,15336,15337],{"class":54},"        m_Car ",[37,15339,70],{"class":50},[37,15341,15342],{"class":309}," \"拖拉机\"",[37,15344,1364],{"class":54},[37,15346,15347,15350,15352,15355],{"class":39,"line":1826},[37,15348,15349],{"class":54},"        m_Password ",[37,15351,70],{"class":50},[37,15353,15354],{"class":82}," 123456",[37,15356,1364],{"class":54},[37,15358,15359],{"class":39,"line":1831},[37,15360,2259],{"class":54},[37,15362,15363],{"class":39,"line":1836},[37,15364,4067],{"class":54},[37,15366,15367],{"class":39,"line":1850},[37,15368,2472],{"emptyLinePlaceholder":131},[37,15370,15371,15373,15375],{"class":39,"line":1855},[37,15372,211],{"class":50},[37,15374,2045],{"class":2035},[37,15376,10925],{"class":54},[37,15378,15379],{"class":39,"line":2649},[37,15380,2472],{"emptyLinePlaceholder":131},[37,15382,15383],{"class":39,"line":2663},[37,15384,15385],{"class":54},"    Person p;\n",[37,15387,15388,15391,15393,15396],{"class":39,"line":2671},[37,15389,15390],{"class":54},"    p.m_Name ",[37,15392,70],{"class":50},[37,15394,15395],{"class":309}," \"李四\"",[37,15397,1364],{"class":54},[37,15399,15400,15403],{"class":39,"line":2676},[37,15401,15402],{"class":43},"    \u002F\u002Fp.m_Car = \"奔驰\";",[37,15404,15405],{"class":43},"  \u002F\u002F保护权限类外访问不到\n",[37,15407,15408,15411],{"class":39,"line":2682},[37,15409,15410],{"class":43},"    \u002F\u002Fp.m_Password = 123;",[37,15412,15413],{"class":43}," \u002F\u002F私有权限类外访问不到\n",[37,15415,15416],{"class":39,"line":2688},[37,15417,2472],{"emptyLinePlaceholder":131},[37,15419,15420,15422,15424,15426],{"class":39,"line":2693},[37,15421,2375],{"class":2035},[37,15423,208],{"class":54},[37,15425,2380],{"class":309},[37,15427,2791],{"class":54},[37,15429,15430],{"class":39,"line":8020},[37,15431,2472],{"emptyLinePlaceholder":131},[37,15433,15434,15436,15438],{"class":39,"line":8044},[37,15435,4162],{"class":50},[37,15437,4165],{"class":82},[37,15439,1364],{"class":54},[37,15441,15442],{"class":39,"line":8049},[37,15443,1637],{"class":54},[175,15445,15447],{"id":15446},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,15449,15450,15451,15454,15455],{},"在C++中 struct和class唯一的",[354,15452,15453],{},"区别","就在于 ",[354,15456,15457],{},"默认的访问权限不同",[14,15459,15460],{},"区别：",[1210,15462,15463,15466],{},[161,15464,15465],{},"struct 默认权限为公共",[161,15467,15468],{},"class   默认权限为私有",[27,15470,15472],{"className":10013,"code":15471,"language":10015,"meta":32,"style":32},"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",[34,15473,15474,15481,15485,15495,15499,15503,15510,15514,15524,15528,15532,15540,15544,15549,15563,15567,15572,15586,15590,15600,15604,15612],{"__ignoreMap":32},[37,15475,15476,15478],{"class":39,"line":40},[37,15477,14766],{"class":50},[37,15479,15480],{"class":2035}," C1\n",[37,15482,15483],{"class":39,"line":47},[37,15484,1618],{"class":54},[37,15486,15487,15489,15492],{"class":39,"line":58},[37,15488,2057],{"class":50},[37,15490,15491],{"class":54},"  m_A;",[37,15493,15494],{"class":43}," \u002F\u002F默认是私有权限\n",[37,15496,15497],{"class":39,"line":64},[37,15498,4067],{"class":54},[37,15500,15501],{"class":39,"line":76},[37,15502,2472],{"emptyLinePlaceholder":131},[37,15504,15505,15507],{"class":39,"line":92},[37,15506,7831],{"class":50},[37,15508,15509],{"class":2035}," C2\n",[37,15511,15512],{"class":39,"line":97},[37,15513,1618],{"class":54},[37,15515,15516,15518,15521],{"class":39,"line":107},[37,15517,2057],{"class":50},[37,15519,15520],{"class":54}," m_A;",[37,15522,15523],{"class":43},"  \u002F\u002F默认是公共权限\n",[37,15525,15526],{"class":39,"line":1390},[37,15527,4067],{"class":54},[37,15529,15530],{"class":39,"line":1402},[37,15531,2472],{"emptyLinePlaceholder":131},[37,15533,15534,15536,15538],{"class":39,"line":1684},[37,15535,211],{"class":50},[37,15537,2045],{"class":2035},[37,15539,10925],{"class":54},[37,15541,15542],{"class":39,"line":1689},[37,15543,2472],{"emptyLinePlaceholder":131},[37,15545,15546],{"class":39,"line":1695},[37,15547,15548],{"class":54},"    C1 c1;\n",[37,15550,15551,15554,15556,15558,15560],{"class":39,"line":1700},[37,15552,15553],{"class":54},"    c1.m_A ",[37,15555,70],{"class":50},[37,15557,2110],{"class":82},[37,15559,261],{"class":54},[37,15561,15562],{"class":43}," \u002F\u002F错误，访问权限是私有\n",[37,15564,15565],{"class":39,"line":1714},[37,15566,2472],{"emptyLinePlaceholder":131},[37,15568,15569],{"class":39,"line":1719},[37,15570,15571],{"class":54},"    C2 c2;\n",[37,15573,15574,15577,15579,15581,15583],{"class":39,"line":1725},[37,15575,15576],{"class":54},"    c2.m_A ",[37,15578,70],{"class":50},[37,15580,2110],{"class":82},[37,15582,261],{"class":54},[37,15584,15585],{"class":43}," \u002F\u002F正确，访问权限是公共\n",[37,15587,15588],{"class":39,"line":1746},[37,15589,2472],{"emptyLinePlaceholder":131},[37,15591,15592,15594,15596,15598],{"class":39,"line":1751},[37,15593,2375],{"class":2035},[37,15595,208],{"class":54},[37,15597,2380],{"class":309},[37,15599,2791],{"class":54},[37,15601,15602],{"class":39,"line":1765},[37,15603,2472],{"emptyLinePlaceholder":131},[37,15605,15606,15608,15610],{"class":39,"line":1770},[37,15607,4162],{"class":50},[37,15609,4165],{"class":82},[37,15611,1364],{"class":54},[37,15613,15614],{"class":39,"line":1799},[37,15615,1637],{"class":54},[175,15617,15619],{"id":15618},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,15621,15622],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,15624,15625],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,15627,15628],{},[354,15629,15207],{},[27,15631,15633],{"className":10013,"code":15632,"language":10015,"meta":32,"style":32},"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",[34,15634,15635,15645,15649,15653,15658,15672,15681,15685,15695,15699,15706,15710,15714,15718,15723,15732,15739,15743,15748,15764,15787,15800,15807,15811,15820,15824,15828,15833,15849,15859,15863,15867,15871,15879,15883,15893,15897,15905,15909,15913,15921,15925,15929,15934,15947,15970,15974,15979,15992,16014,16018,16023,16037,16045,16049,16059,16063,16071],{"__ignoreMap":32},[37,15636,15637,15639,15642],{"class":39,"line":40},[37,15638,14766],{"class":50},[37,15640,15641],{"class":2035}," Person",[37,15643,15644],{"class":54}," {\n",[37,15646,15647],{"class":39,"line":47},[37,15648,14788],{"class":50},[37,15650,15651],{"class":39,"line":58},[37,15652,2472],{"emptyLinePlaceholder":131},[37,15654,15655],{"class":39,"line":64},[37,15656,15657],{"class":43},"    \u002F\u002F姓名设置可读可写\n",[37,15659,15660,15662,15664,15666,15668,15670],{"class":39,"line":76},[37,15661,14981],{"class":50},[37,15663,14984],{"class":2035},[37,15665,208],{"class":54},[37,15667,14989],{"class":2035},[37,15669,14992],{"class":5288},[37,15671,12514],{"class":54},[37,15673,15674,15676,15678],{"class":39,"line":92},[37,15675,15326],{"class":54},[37,15677,70],{"class":50},[37,15679,15680],{"class":54}," name;\n",[37,15682,15683],{"class":39,"line":97},[37,15684,2259],{"class":54},[37,15686,15687,15690,15693],{"class":39,"line":107},[37,15688,15689],{"class":2035},"    string",[37,15691,15692],{"class":2035}," getName",[37,15694,2048],{"class":54},[37,15696,15697],{"class":39,"line":1390},[37,15698,2102],{"class":54},[37,15700,15701,15703],{"class":39,"line":1402},[37,15702,14824],{"class":50},[37,15704,15705],{"class":54}," m_Name;\n",[37,15707,15708],{"class":39,"line":1684},[37,15709,2259],{"class":54},[37,15711,15712],{"class":39,"line":1689},[37,15713,2472],{"emptyLinePlaceholder":131},[37,15715,15716],{"class":39,"line":1695},[37,15717,2472],{"emptyLinePlaceholder":131},[37,15719,15720],{"class":39,"line":1700},[37,15721,15722],{"class":43},"    \u002F\u002F获取年龄 \n",[37,15724,15725,15727,15730],{"class":39,"line":1714},[37,15726,2057],{"class":50},[37,15728,15729],{"class":2035}," getAge",[37,15731,10925],{"class":54},[37,15733,15734,15736],{"class":39,"line":1719},[37,15735,14824],{"class":50},[37,15737,15738],{"class":54}," m_Age;\n",[37,15740,15741],{"class":39,"line":1725},[37,15742,2259],{"class":54},[37,15744,15745],{"class":39,"line":1746},[37,15746,15747],{"class":43},"    \u002F\u002F设置年龄\n",[37,15749,15750,15752,15755,15757,15759,15762],{"class":39,"line":1751},[37,15751,14981],{"class":50},[37,15753,15754],{"class":2035}," setAge",[37,15756,208],{"class":54},[37,15758,211],{"class":50},[37,15760,15761],{"class":5288}," age",[37,15763,12514],{"class":54},[37,15765,15766,15768,15771,15773,15775,15777,15780,15782,15785],{"class":39,"line":1765},[37,15767,2569],{"class":50},[37,15769,15770],{"class":54}," (age ",[37,15772,1113],{"class":50},[37,15774,4165],{"class":82},[37,15776,3327],{"class":50},[37,15778,15779],{"class":54}," age ",[37,15781,1163],{"class":50},[37,15783,15784],{"class":82}," 150",[37,15786,12514],{"class":54},[37,15788,15789,15791,15793,15796,15798],{"class":39,"line":1770},[37,15790,9791],{"class":54},[37,15792,1247],{"class":50},[37,15794,15795],{"class":309}," \"你个老妖精!\"",[37,15797,1517],{"class":50},[37,15799,8912],{"class":54},[37,15801,15802,15805],{"class":39,"line":1799},[37,15803,15804],{"class":50},"            return",[37,15806,1364],{"class":54},[37,15808,15809],{"class":39,"line":1804},[37,15810,2601],{"class":54},[37,15812,15813,15816,15818],{"class":39,"line":1821},[37,15814,15815],{"class":54},"        m_Age ",[37,15817,70],{"class":50},[37,15819,7869],{"class":54},[37,15821,15822],{"class":39,"line":1826},[37,15823,2259],{"class":54},[37,15825,15826],{"class":39,"line":1831},[37,15827,2472],{"emptyLinePlaceholder":131},[37,15829,15830],{"class":39,"line":1836},[37,15831,15832],{"class":43},"    \u002F\u002F情人设置为只写\n",[37,15834,15835,15837,15840,15842,15844,15847],{"class":39,"line":1850},[37,15836,14981],{"class":50},[37,15838,15839],{"class":2035}," setLover",[37,15841,208],{"class":54},[37,15843,14989],{"class":2035},[37,15845,15846],{"class":5288}," lover",[37,15848,12514],{"class":54},[37,15850,15851,15854,15856],{"class":39,"line":1855},[37,15852,15853],{"class":54},"        m_Lover ",[37,15855,70],{"class":50},[37,15857,15858],{"class":54}," lover;\n",[37,15860,15861],{"class":39,"line":2649},[37,15862,2259],{"class":54},[37,15864,15865],{"class":39,"line":2663},[37,15866,2472],{"emptyLinePlaceholder":131},[37,15868,15869],{"class":39,"line":2671},[37,15870,15294],{"class":50},[37,15872,15873,15876],{"class":39,"line":2676},[37,15874,15875],{"class":54},"    string m_Name;",[37,15877,15878],{"class":43}," \u002F\u002F可读可写  姓名\n",[37,15880,15881],{"class":39,"line":2682},[37,15882,13282],{"class":54},[37,15884,15885,15887,15890],{"class":39,"line":2688},[37,15886,2057],{"class":50},[37,15888,15889],{"class":54}," m_Age;",[37,15891,15892],{"class":43}," \u002F\u002F只读  年龄\n",[37,15894,15895],{"class":39,"line":2693},[37,15896,2472],{"emptyLinePlaceholder":131},[37,15898,15899,15902],{"class":39,"line":8020},[37,15900,15901],{"class":54},"    string m_Lover;",[37,15903,15904],{"class":43}," \u002F\u002F只写  情人\n",[37,15906,15907],{"class":39,"line":8044},[37,15908,4067],{"class":54},[37,15910,15911],{"class":39,"line":8049},[37,15912,2472],{"emptyLinePlaceholder":131},[37,15914,15915,15917,15919],{"class":39,"line":8055},[37,15916,211],{"class":50},[37,15918,2045],{"class":2035},[37,15920,10925],{"class":54},[37,15922,15923],{"class":39,"line":8082},[37,15924,2472],{"emptyLinePlaceholder":131},[37,15926,15927],{"class":39,"line":8087},[37,15928,15385],{"class":54},[37,15930,15931],{"class":39,"line":8093},[37,15932,15933],{"class":43},"    \u002F\u002F姓名设置\n",[37,15935,15936,15939,15941,15943,15945],{"class":39,"line":8105},[37,15937,15938],{"class":54},"    p.",[37,15940,15138],{"class":2035},[37,15942,208],{"class":54},[37,15944,7988],{"class":309},[37,15946,2791],{"class":54},[37,15948,15949,15951,15953,15956,15958,15961,15964,15966,15968],{"class":39,"line":8117},[37,15950,6601],{"class":54},[37,15952,1247],{"class":50},[37,15954,15955],{"class":309}," \"姓名： \"",[37,15957,1517],{"class":50},[37,15959,15960],{"class":54}," p.",[37,15962,15963],{"class":2035},"getName",[37,15965,13122],{"class":54},[37,15967,1247],{"class":50},[37,15969,8912],{"class":54},[37,15971,15972],{"class":39,"line":8129},[37,15973,2472],{"emptyLinePlaceholder":131},[37,15975,15976],{"class":39,"line":9788},[37,15977,15978],{"class":43},"    \u002F\u002F年龄设置\n",[37,15980,15981,15983,15986,15988,15990],{"class":39,"line":9813},[37,15982,15938],{"class":54},[37,15984,15985],{"class":2035},"setAge",[37,15987,208],{"class":54},[37,15989,859],{"class":82},[37,15991,2791],{"class":54},[37,15993,15994,15996,15998,16001,16003,16005,16008,16010,16012],{"class":39,"line":9836},[37,15995,6601],{"class":54},[37,15997,1247],{"class":50},[37,15999,16000],{"class":309}," \"年龄： \"",[37,16002,1517],{"class":50},[37,16004,15960],{"class":54},[37,16006,16007],{"class":2035},"getAge",[37,16009,13122],{"class":54},[37,16011,1247],{"class":50},[37,16013,8912],{"class":54},[37,16015,16016],{"class":39,"line":9860},[37,16017,2472],{"emptyLinePlaceholder":131},[37,16019,16020],{"class":39,"line":9865},[37,16021,16022],{"class":43},"    \u002F\u002F情人设置\n",[37,16024,16025,16027,16030,16032,16035],{"class":39,"line":9870},[37,16026,15938],{"class":54},[37,16028,16029],{"class":2035},"setLover",[37,16031,208],{"class":54},[37,16033,16034],{"class":309},"\"苍井\"",[37,16036,2791],{"class":54},[37,16038,16039,16042],{"class":39,"line":9875},[37,16040,16041],{"class":43},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[37,16043,16044],{"class":43},"  \u002F\u002F只写属性，不可以读取\n",[37,16046,16047],{"class":39,"line":9884},[37,16048,2472],{"emptyLinePlaceholder":131},[37,16050,16051,16053,16055,16057],{"class":39,"line":9889},[37,16052,2375],{"class":2035},[37,16054,208],{"class":54},[37,16056,2380],{"class":309},[37,16058,2791],{"class":54},[37,16060,16061],{"class":39,"line":9895},[37,16062,2472],{"emptyLinePlaceholder":131},[37,16064,16065,16067,16069],{"class":39,"line":9916},[37,16066,4162],{"class":50},[37,16068,4165],{"class":82},[37,16070,1364],{"class":54},[37,16072,16073],{"class":39,"line":9922},[37,16074,1637],{"class":54},[175,16076,16078],{"id":16077},"_814封装案例","8.1.4封装案例",[158,16080,16081],{},[161,16082,16083,16086],{},[354,16084,16085],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1210,16088,16089,16092],{},[161,16090,16091],{},"求出立方体的面积和体积",[161,16093,16094],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[27,16096,16098],{"className":196,"code":16097,"language":198,"meta":32,"style":32},"#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",[34,16099,16100,16106,16116,16123,16127,16131,16136,16166,16170,16180,16190,16200,16204,16213,16217,16253,16257,16266,16270,16286,16290,16295,16304,16308,16315,16319,16328,16332,16339,16343,16352,16356,16363,16367,16372,16389,16393,16439,16443,16452,16456,16460,16464,16473,16477,16481,16486,16490,16496,16502,16508,16512,16516,16521,16543,16547,16601,16605,16613,16617,16622,16627,16640,16647,16663,16674,16680,16703,16709,16732,16746,16766,16772,16783,16806,16828,16833,16839,16853,16866,16871,16885,16890,16896,16901,16915,16920,16925,16939,16951,16956,16969,16974,16979,16984,16997,17002],{"__ignoreMap":32},[37,16101,16102,16104],{"class":39,"line":40},[37,16103,2021],{"class":50},[37,16105,2024],{"class":309},[37,16107,16108,16110,16112,16114],{"class":39,"line":47},[37,16109,2029],{"class":50},[37,16111,2032],{"class":50},[37,16113,2036],{"class":2035},[37,16115,1364],{"class":54},[37,16117,16118,16120],{"class":39,"line":58},[37,16119,14766],{"class":50},[37,16121,16122],{"class":2035}," Cube\n",[37,16124,16125],{"class":39,"line":64},[37,16126,1618],{"class":54},[37,16128,16129],{"class":39,"line":76},[37,16130,14788],{"class":50},[37,16132,16133],{"class":39,"line":92},[37,16134,16135],{"class":43},"    \u002F\u002F输入长宽高\n",[37,16137,16138,16140,16143,16145,16147,16150,16152,16154,16157,16159,16161,16164],{"class":39,"line":97},[37,16139,14981],{"class":50},[37,16141,16142],{"class":2035}," setLwh",[37,16144,208],{"class":54},[37,16146,211],{"class":50},[37,16148,16149],{"class":5288}," l",[37,16151,583],{"class":54},[37,16153,211],{"class":50},[37,16155,16156],{"class":5288}," w",[37,16158,583],{"class":54},[37,16160,211],{"class":50},[37,16162,16163],{"class":5288}," h",[37,16165,214],{"class":54},[37,16167,16168],{"class":39,"line":107},[37,16169,2102],{"class":54},[37,16171,16172,16175,16177],{"class":39,"line":1390},[37,16173,16174],{"class":54},"        m_L",[37,16176,70],{"class":50},[37,16178,16179],{"class":54},"l;\n",[37,16181,16182,16185,16187],{"class":39,"line":1402},[37,16183,16184],{"class":54},"        m_W",[37,16186,70],{"class":50},[37,16188,16189],{"class":54},"w;\n",[37,16191,16192,16195,16197],{"class":39,"line":1684},[37,16193,16194],{"class":54},"        m_H",[37,16196,70],{"class":50},[37,16198,16199],{"class":54},"h;\n",[37,16201,16202],{"class":39,"line":1689},[37,16203,2259],{"class":54},[37,16205,16206,16208,16211],{"class":39,"line":1695},[37,16207,2057],{"class":50},[37,16209,16210],{"class":2035}," mianji",[37,16212,2048],{"class":54},[37,16214,16215],{"class":39,"line":1700},[37,16216,2102],{"class":54},[37,16218,16219,16221,16223,16225,16228,16230,16233,16235,16238,16240,16243,16245,16248,16250],{"class":39,"line":1714},[37,16220,14824],{"class":50},[37,16222,14827],{"class":82},[37,16224,659],{"class":50},[37,16226,16227],{"class":54},"(m_L",[37,16229,659],{"class":50},[37,16231,16232],{"class":54},"m_W ",[37,16234,685],{"class":50},[37,16236,16237],{"class":54}," m_L",[37,16239,659],{"class":50},[37,16241,16242],{"class":54},"m_H ",[37,16244,685],{"class":50},[37,16246,16247],{"class":54}," m_W",[37,16249,659],{"class":50},[37,16251,16252],{"class":54},"m_H);\n",[37,16254,16255],{"class":39,"line":1719},[37,16256,2259],{"class":54},[37,16258,16259,16261,16264],{"class":39,"line":1725},[37,16260,2057],{"class":50},[37,16262,16263],{"class":2035}," tiji",[37,16265,2048],{"class":54},[37,16267,16268],{"class":39,"line":1746},[37,16269,2102],{"class":54},[37,16271,16272,16274,16276,16278,16281,16283],{"class":39,"line":1751},[37,16273,14824],{"class":50},[37,16275,16237],{"class":54},[37,16277,659],{"class":50},[37,16279,16280],{"class":54},"m_W",[37,16282,659],{"class":50},[37,16284,16285],{"class":54},"m_H;\n",[37,16287,16288],{"class":39,"line":1765},[37,16289,2259],{"class":54},[37,16291,16292],{"class":39,"line":1770},[37,16293,16294],{"class":43},"    \u002F\u002F获取长宽高\n",[37,16296,16297,16299,16302],{"class":39,"line":1799},[37,16298,2057],{"class":50},[37,16300,16301],{"class":2035}," getLength",[37,16303,2048],{"class":54},[37,16305,16306],{"class":39,"line":1804},[37,16307,2102],{"class":54},[37,16309,16310,16312],{"class":39,"line":1821},[37,16311,14824],{"class":50},[37,16313,16314],{"class":54}," m_L;\n",[37,16316,16317],{"class":39,"line":1826},[37,16318,2259],{"class":54},[37,16320,16321,16323,16326],{"class":39,"line":1831},[37,16322,2057],{"class":50},[37,16324,16325],{"class":2035}," getWidth",[37,16327,2048],{"class":54},[37,16329,16330],{"class":39,"line":1836},[37,16331,2102],{"class":54},[37,16333,16334,16336],{"class":39,"line":1850},[37,16335,14824],{"class":50},[37,16337,16338],{"class":54}," m_W;\n",[37,16340,16341],{"class":39,"line":1855},[37,16342,2259],{"class":54},[37,16344,16345,16347,16350],{"class":39,"line":2649},[37,16346,2057],{"class":50},[37,16348,16349],{"class":2035}," getHeight",[37,16351,2048],{"class":54},[37,16353,16354],{"class":39,"line":2663},[37,16355,2102],{"class":54},[37,16357,16358,16360],{"class":39,"line":2671},[37,16359,14824],{"class":50},[37,16361,16362],{"class":54}," m_H;\n",[37,16364,16365],{"class":39,"line":2676},[37,16366,2259],{"class":54},[37,16368,16369],{"class":39,"line":2682},[37,16370,16371],{"class":43},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[37,16373,16374,16377,16380,16382,16385,16387],{"class":39,"line":2688},[37,16375,16376],{"class":50},"    bool",[37,16378,16379],{"class":2035}," isEqual",[37,16381,208],{"class":54},[37,16383,16384],{"class":2035},"Cube",[37,16386,2921],{"class":5288},[37,16388,214],{"class":54},[37,16390,16391],{"class":39,"line":2693},[37,16392,2102],{"class":54},[37,16394,16395,16397,16400,16403,16405,16407,16410,16412,16415,16418,16420,16422,16425,16427,16429,16432,16434,16436],{"class":39,"line":8020},[37,16396,2569],{"class":50},[37,16398,16399],{"class":54}," (c.",[37,16401,16402],{"class":2035},"getLength",[37,16404,13122],{"class":54},[37,16406,3021],{"class":50},[37,16408,16409],{"class":54}," m_L ",[37,16411,1787],{"class":50},[37,16413,16414],{"class":54}," c.",[37,16416,16417],{"class":2035},"getWidth",[37,16419,13122],{"class":54},[37,16421,3021],{"class":50},[37,16423,16424],{"class":54}," m_W ",[37,16426,1787],{"class":50},[37,16428,16414],{"class":54},[37,16430,16431],{"class":2035},"getHeight",[37,16433,13122],{"class":54},[37,16435,3021],{"class":50},[37,16437,16438],{"class":54}," m_H)\n",[37,16440,16441],{"class":39,"line":8044},[37,16442,2582],{"class":54},[37,16444,16445,16447,16450],{"class":39,"line":8049},[37,16446,15804],{"class":50},[37,16448,16449],{"class":82}," true",[37,16451,1364],{"class":54},[37,16453,16454],{"class":39,"line":8055},[37,16455,2601],{"class":54},[37,16457,16458],{"class":39,"line":8082},[37,16459,2642],{"class":50},[37,16461,16462],{"class":39,"line":8087},[37,16463,2582],{"class":54},[37,16465,16466,16468,16471],{"class":39,"line":8093},[37,16467,15804],{"class":50},[37,16469,16470],{"class":82}," false",[37,16472,1364],{"class":54},[37,16474,16475],{"class":39,"line":8105},[37,16476,2601],{"class":54},[37,16478,16479],{"class":39,"line":8117},[37,16480,2259],{"class":54},[37,16482,16483],{"class":39,"line":8129},[37,16484,16485],{"class":43},"    \u002F\u002F私有属性\n",[37,16487,16488],{"class":39,"line":9788},[37,16489,15294],{"class":50},[37,16491,16492,16494],{"class":39,"line":9813},[37,16493,2057],{"class":50},[37,16495,16314],{"class":54},[37,16497,16498,16500],{"class":39,"line":9836},[37,16499,2057],{"class":50},[37,16501,16338],{"class":54},[37,16503,16504,16506],{"class":39,"line":9860},[37,16505,2057],{"class":50},[37,16507,16362],{"class":54},[37,16509,16510],{"class":39,"line":9865},[37,16511,2472],{"emptyLinePlaceholder":131},[37,16513,16514],{"class":39,"line":9870},[37,16515,4067],{"class":54},[37,16517,16518],{"class":39,"line":9875},[37,16519,16520],{"class":43},"\u002F\u002F全局函数判断两个立方体是否相等\n",[37,16522,16523,16525,16527,16529,16531,16534,16536,16538,16541],{"class":39,"line":9884},[37,16524,1427],{"class":50},[37,16526,16379],{"class":2035},[37,16528,208],{"class":54},[37,16530,16384],{"class":2035},[37,16532,16533],{"class":5288}," c1",[37,16535,583],{"class":54},[37,16537,16384],{"class":2035},[37,16539,16540],{"class":5288}," c2",[37,16542,214],{"class":54},[37,16544,16545],{"class":39,"line":9889},[37,16546,1618],{"class":54},[37,16548,16549,16551,16554,16556,16558,16560,16563,16565,16568,16570,16572,16574,16576,16578,16580,16582,16584,16586,16588,16590,16592,16594,16596,16598],{"class":39,"line":9895},[37,16550,4162],{"class":50},[37,16552,16553],{"class":54}," (c1.",[37,16555,16402],{"class":2035},[37,16557,13122],{"class":54},[37,16559,3021],{"class":50},[37,16561,16562],{"class":54}," c2.",[37,16564,16402],{"class":2035},[37,16566,16567],{"class":54},"()) ",[37,16569,1787],{"class":50},[37,16571,16553],{"class":54},[37,16573,16417],{"class":2035},[37,16575,13122],{"class":54},[37,16577,3021],{"class":50},[37,16579,16562],{"class":54},[37,16581,16417],{"class":2035},[37,16583,16567],{"class":54},[37,16585,1787],{"class":50},[37,16587,16553],{"class":54},[37,16589,16431],{"class":2035},[37,16591,13122],{"class":54},[37,16593,3021],{"class":50},[37,16595,16562],{"class":54},[37,16597,16431],{"class":2035},[37,16599,16600],{"class":54},"());\n",[37,16602,16603],{"class":39,"line":9916},[37,16604,1637],{"class":54},[37,16606,16607,16609,16611],{"class":39,"line":9922},[37,16608,211],{"class":50},[37,16610,2045],{"class":2035},[37,16612,2048],{"class":54},[37,16614,16615],{"class":39,"line":9936},[37,16616,1618],{"class":54},[37,16618,16619],{"class":39,"line":9942},[37,16620,16621],{"class":54},"    Cube c1;\n",[37,16623,16624],{"class":39,"line":9969},[37,16625,16626],{"class":43},"    \u002F\u002F输入立方体的长宽高\n",[37,16628,16629,16631,16633,16636,16638],{"class":39,"line":9978},[37,16630,1623],{"class":54},[37,16632,1247],{"class":50},[37,16634,16635],{"class":309},"\"请输入第一个立方体的长、宽、高：\"",[37,16637,1247],{"class":50},[37,16639,1269],{"class":54},[37,16641,16642,16644],{"class":39,"line":9984},[37,16643,2057],{"class":50},[37,16645,16646],{"class":54}," l,w,h,l1,w1,h1;\n",[37,16648,16649,16651,16653,16655,16657,16659,16661],{"class":39,"line":9992},[37,16650,2084],{"class":54},[37,16652,1502],{"class":50},[37,16654,722],{"class":54},[37,16656,1502],{"class":50},[37,16658,998],{"class":54},[37,16660,1502],{"class":50},[37,16662,16199],{"class":54},[37,16664,16665,16668,16671],{"class":39,"line":9997},[37,16666,16667],{"class":54},"    c1.",[37,16669,16670],{"class":2035},"setLwh",[37,16672,16673],{"class":54},"(l,w,h);\n",[37,16675,16677],{"class":39,"line":16676},66,[37,16678,16679],{"class":43},"    \u002F\u002F面积\n",[37,16681,16683,16685,16687,16690,16692,16694,16697,16699,16701],{"class":39,"line":16682},67,[37,16684,1623],{"class":54},[37,16686,1247],{"class":50},[37,16688,16689],{"class":309},"\"立方体的表面积为：\"",[37,16691,1247],{"class":50},[37,16693,14902],{"class":54},[37,16695,16696],{"class":2035},"mianji",[37,16698,2499],{"class":54},[37,16700,1247],{"class":50},[37,16702,1269],{"class":54},[37,16704,16706],{"class":39,"line":16705},68,[37,16707,16708],{"class":43},"    \u002F\u002F体积\n",[37,16710,16712,16714,16716,16719,16721,16723,16726,16728,16730],{"class":39,"line":16711},69,[37,16713,1623],{"class":54},[37,16715,1247],{"class":50},[37,16717,16718],{"class":309},"\"立方体的体积为：\"",[37,16720,1247],{"class":50},[37,16722,14902],{"class":54},[37,16724,16725],{"class":2035},"tiji",[37,16727,2499],{"class":54},[37,16729,1247],{"class":50},[37,16731,1269],{"class":54},[37,16733,16735,16737,16739,16742,16744],{"class":39,"line":16734},70,[37,16736,1623],{"class":54},[37,16738,1247],{"class":50},[37,16740,16741],{"class":309},"\"请输入第二个立方体的长、宽、高：\"",[37,16743,1247],{"class":50},[37,16745,1269],{"class":54},[37,16747,16749,16751,16753,16756,16758,16761,16763],{"class":39,"line":16748},71,[37,16750,2084],{"class":54},[37,16752,1502],{"class":50},[37,16754,16755],{"class":54},"l1",[37,16757,1502],{"class":50},[37,16759,16760],{"class":54},"w1",[37,16762,1502],{"class":50},[37,16764,16765],{"class":54},"h1;\n",[37,16767,16769],{"class":39,"line":16768},72,[37,16770,16771],{"class":54},"    Cube c2;\n",[37,16773,16775,16778,16780],{"class":39,"line":16774},73,[37,16776,16777],{"class":54},"    c2.",[37,16779,16670],{"class":2035},[37,16781,16782],{"class":54},"(l1,w1,h1);\n",[37,16784,16786,16788,16790,16793,16795,16798,16800,16802,16804],{"class":39,"line":16785},74,[37,16787,1623],{"class":54},[37,16789,1247],{"class":50},[37,16791,16792],{"class":309},"\"第二个立方体的表面积为：\"",[37,16794,1247],{"class":50},[37,16796,16797],{"class":54},"c2.",[37,16799,16696],{"class":2035},[37,16801,2499],{"class":54},[37,16803,1247],{"class":50},[37,16805,1269],{"class":54},[37,16807,16809,16811,16813,16816,16818,16820,16822,16824,16826],{"class":39,"line":16808},75,[37,16810,1623],{"class":54},[37,16812,1247],{"class":50},[37,16814,16815],{"class":309},"\"第二个立方体的体积为：\"",[37,16817,1247],{"class":50},[37,16819,16797],{"class":54},[37,16821,16725],{"class":2035},[37,16823,2499],{"class":54},[37,16825,1247],{"class":50},[37,16827,1269],{"class":54},[37,16829,16831],{"class":39,"line":16830},76,[37,16832,2472],{"emptyLinePlaceholder":131},[37,16834,16836],{"class":39,"line":16835},77,[37,16837,16838],{"class":43},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[37,16840,16842,16844,16846,16849,16851],{"class":39,"line":16841},78,[37,16843,1623],{"class":54},[37,16845,1247],{"class":50},[37,16847,16848],{"class":309},"\"内部函数判断结果：\"",[37,16850,1247],{"class":50},[37,16852,1269],{"class":54},[37,16854,16856,16858,16860,16863],{"class":39,"line":16855},79,[37,16857,3173],{"class":50},[37,16859,16553],{"class":54},[37,16861,16862],{"class":2035},"isEqual",[37,16864,16865],{"class":54},"(c2))\n",[37,16867,16869],{"class":39,"line":16868},80,[37,16870,2102],{"class":54},[37,16872,16874,16876,16878,16881,16883],{"class":39,"line":16873},81,[37,16875,3523],{"class":54},[37,16877,1247],{"class":50},[37,16879,16880],{"class":309},"\"两个立方体相等\"",[37,16882,1247],{"class":50},[37,16884,1269],{"class":54},[37,16886,16888],{"class":39,"line":16887},82,[37,16889,2259],{"class":54},[37,16891,16893],{"class":39,"line":16892},83,[37,16894,16895],{"class":50},"    else\n",[37,16897,16899],{"class":39,"line":16898},84,[37,16900,2102],{"class":54},[37,16902,16904,16906,16908,16911,16913],{"class":39,"line":16903},85,[37,16905,3523],{"class":54},[37,16907,1247],{"class":50},[37,16909,16910],{"class":309},"\"两个立方体不相等\"",[37,16912,1247],{"class":50},[37,16914,1269],{"class":54},[37,16916,16918],{"class":39,"line":16917},86,[37,16919,2259],{"class":54},[37,16921,16923],{"class":39,"line":16922},87,[37,16924,2472],{"emptyLinePlaceholder":131},[37,16926,16928,16930,16932,16935,16937],{"class":39,"line":16927},88,[37,16929,1623],{"class":54},[37,16931,1247],{"class":50},[37,16933,16934],{"class":309},"\"全局函数判断结果：\"",[37,16936,1247],{"class":50},[37,16938,1269],{"class":54},[37,16940,16942,16944,16946,16948],{"class":39,"line":16941},89,[37,16943,3173],{"class":50},[37,16945,1730],{"class":54},[37,16947,16862],{"class":2035},[37,16949,16950],{"class":54},"(c1, c2))\n",[37,16952,16954],{"class":39,"line":16953},90,[37,16955,2102],{"class":54},[37,16957,16959,16961,16963,16965,16967],{"class":39,"line":16958},91,[37,16960,3523],{"class":54},[37,16962,1247],{"class":50},[37,16964,16880],{"class":309},[37,16966,1247],{"class":50},[37,16968,1269],{"class":54},[37,16970,16972],{"class":39,"line":16971},92,[37,16973,2259],{"class":54},[37,16975,16977],{"class":39,"line":16976},93,[37,16978,16895],{"class":50},[37,16980,16982],{"class":39,"line":16981},94,[37,16983,2102],{"class":54},[37,16985,16987,16989,16991,16993,16995],{"class":39,"line":16986},95,[37,16988,3523],{"class":54},[37,16990,1247],{"class":50},[37,16992,16910],{"class":309},[37,16994,1247],{"class":50},[37,16996,1269],{"class":54},[37,16998,17000],{"class":39,"line":16999},96,[37,17001,2259],{"class":54},[37,17003,17005],{"class":39,"line":17004},97,[37,17006,1637],{"class":54},[158,17008,17009],{"start":47},[161,17010,17011],{},[354,17012,17013],{},"练习案例2：点和圆的关系",[1210,17015,17016],{},[161,17017,17018],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[27,17020,17022],{"className":196,"code":17021,"language":198,"meta":32,"style":32},"#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",[34,17023,17024,17030,17040,17047,17054,17058,17062,17067,17101,17106,17122,17136,17140,17144,17151,17158,17162,17168,17172,17176,17180,17202,17225,17230,17244,17259,17263,17267,17273,17278,17283,17287,17313,17317,17347,17375,17403,17420,17424,17437,17441,17445,17449,17462,17466,17470,17478,17482,17486,17490,17495,17499,17510,17517,17526,17536,17547,17554,17567,17578,17588,17599,17606,17620,17625,17635,17643],{"__ignoreMap":32},[37,17025,17026,17028],{"class":39,"line":40},[37,17027,2021],{"class":50},[37,17029,2024],{"class":309},[37,17031,17032,17034,17036,17038],{"class":39,"line":47},[37,17033,2029],{"class":50},[37,17035,2032],{"class":50},[37,17037,2036],{"class":2035},[37,17039,1364],{"class":54},[37,17041,17042,17044],{"class":39,"line":58},[37,17043,2021],{"class":50},[37,17045,17046],{"class":309},"\u003Ccmath>\n",[37,17048,17049,17051],{"class":39,"line":64},[37,17050,14766],{"class":50},[37,17052,17053],{"class":2035}," Point\n",[37,17055,17056],{"class":39,"line":76},[37,17057,1618],{"class":54},[37,17059,17060],{"class":39,"line":92},[37,17061,14788],{"class":50},[37,17063,17064],{"class":39,"line":97},[37,17065,17066],{"class":43},"    \u002F\u002F赋值\n",[37,17068,17069,17071,17074,17076,17078,17081,17083,17085,17088,17091,17093,17096,17098],{"class":39,"line":107},[37,17070,14981],{"class":50},[37,17072,17073],{"class":2035}," setPoint",[37,17075,208],{"class":54},[37,17077,14109],{"class":50},[37,17079,17080],{"class":5288}," x",[37,17082,12507],{"class":54},[37,17084,14109],{"class":50},[37,17086,17087],{"class":5288}," y",[37,17089,17090],{"class":54},") { m_x ",[37,17092,70],{"class":50},[37,17094,17095],{"class":54}," x; m_y ",[37,17097,70],{"class":50},[37,17099,17100],{"class":54}," y; }\n",[37,17102,17103],{"class":39,"line":1390},[37,17104,17105],{"class":43},"    \u002F\u002F获取坐标\n",[37,17107,17108,17110,17113,17116,17119],{"class":39,"line":1402},[37,17109,14810],{"class":50},[37,17111,17112],{"class":2035}," getX",[37,17114,17115],{"class":54},"() { ",[37,17117,17118],{"class":50},"return",[37,17120,17121],{"class":54}," m_x; }\n",[37,17123,17124,17126,17129,17131,17133],{"class":39,"line":1684},[37,17125,14810],{"class":50},[37,17127,17128],{"class":2035}," getY",[37,17130,17115],{"class":54},[37,17132,17118],{"class":50},[37,17134,17135],{"class":54}," m_y; }\n",[37,17137,17138],{"class":39,"line":1689},[37,17139,2472],{"emptyLinePlaceholder":131},[37,17141,17142],{"class":39,"line":1695},[37,17143,15294],{"class":50},[37,17145,17146,17148],{"class":39,"line":1700},[37,17147,14810],{"class":50},[37,17149,17150],{"class":54}," m_x;\n",[37,17152,17153,17155],{"class":39,"line":1714},[37,17154,14810],{"class":50},[37,17156,17157],{"class":54}," m_y;\n",[37,17159,17160],{"class":39,"line":1719},[37,17161,4067],{"class":54},[37,17163,17164,17166],{"class":39,"line":1725},[37,17165,14766],{"class":50},[37,17167,14769],{"class":2035},[37,17169,17170],{"class":39,"line":1746},[37,17171,1618],{"class":54},[37,17173,17174],{"class":39,"line":1751},[37,17175,14788],{"class":50},[37,17177,17178],{"class":39,"line":1765},[37,17179,17066],{"class":43},[37,17181,17182,17184,17187,17189,17191,17194,17197,17199],{"class":39,"line":1770},[37,17183,14981],{"class":50},[37,17185,17186],{"class":2035}," setRadius",[37,17188,208],{"class":54},[37,17190,14109],{"class":50},[37,17192,17193],{"class":5288}," r",[37,17195,17196],{"class":54},") { m_r ",[37,17198,70],{"class":50},[37,17200,17201],{"class":54}," r; }\n",[37,17203,17204,17206,17209,17211,17214,17217,17220,17222],{"class":39,"line":1799},[37,17205,14981],{"class":50},[37,17207,17208],{"class":2035}," setCenter",[37,17210,208],{"class":54},[37,17212,17213],{"class":2035},"Point",[37,17215,17216],{"class":5288}," center",[37,17218,17219],{"class":54},") { m_center ",[37,17221,70],{"class":50},[37,17223,17224],{"class":54}," center; }\n",[37,17226,17227],{"class":39,"line":1804},[37,17228,17229],{"class":43},"    \u002F\u002F获取属性\n",[37,17231,17232,17234,17237,17239,17241],{"class":39,"line":1821},[37,17233,14810],{"class":50},[37,17235,17236],{"class":2035}," getRadius",[37,17238,17115],{"class":54},[37,17240,17118],{"class":50},[37,17242,17243],{"class":54}," m_r; }\n",[37,17245,17246,17249,17252,17254,17256],{"class":39,"line":1826},[37,17247,17248],{"class":2035},"    Point",[37,17250,17251],{"class":2035}," getCenter",[37,17253,17115],{"class":54},[37,17255,17118],{"class":50},[37,17257,17258],{"class":54}," m_center; }\n",[37,17260,17261],{"class":39,"line":1831},[37,17262,2472],{"emptyLinePlaceholder":131},[37,17264,17265],{"class":39,"line":1836},[37,17266,15294],{"class":50},[37,17268,17269,17271],{"class":39,"line":1850},[37,17270,14810],{"class":50},[37,17272,14800],{"class":54},[37,17274,17275],{"class":39,"line":1855},[37,17276,17277],{"class":43},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[37,17279,17280],{"class":39,"line":2649},[37,17281,17282],{"class":54},"    Point m_center;\n",[37,17284,17285],{"class":39,"line":2663},[37,17286,4067],{"class":54},[37,17288,17289,17291,17294,17296,17299,17301,17303,17305,17307,17309,17311],{"class":39,"line":2671},[37,17290,5436],{"class":50},[37,17292,17293],{"class":2035}," isInCircle",[37,17295,208],{"class":54},[37,17297,17298],{"class":2035},"Circle",[37,17300,10656],{"class":50},[37,17302,493],{"class":5288},[37,17304,583],{"class":54},[37,17306,17213],{"class":2035},[37,17308,10656],{"class":50},[37,17310,14],{"class":5288},[37,17312,214],{"class":54},[37,17314,17315],{"class":39,"line":2676},[37,17316,1618],{"class":54},[37,17318,17319,17321,17324,17326,17328,17331,17334,17337,17339,17341,17343,17345],{"class":39,"line":2682},[37,17320,14810],{"class":50},[37,17322,17323],{"class":54}," dx ",[37,17325,70],{"class":50},[37,17327,16414],{"class":54},[37,17329,17330],{"class":2035},"getCenter",[37,17332,17333],{"class":54},"().",[37,17335,17336],{"class":2035},"getX",[37,17338,13122],{"class":54},[37,17340,112],{"class":50},[37,17342,15960],{"class":54},[37,17344,17336],{"class":2035},[37,17346,5708],{"class":54},[37,17348,17349,17351,17354,17356,17358,17360,17362,17365,17367,17369,17371,17373],{"class":39,"line":2688},[37,17350,14810],{"class":50},[37,17352,17353],{"class":54}," dy ",[37,17355,70],{"class":50},[37,17357,16414],{"class":54},[37,17359,17330],{"class":2035},[37,17361,17333],{"class":54},[37,17363,17364],{"class":2035},"getY",[37,17366,13122],{"class":54},[37,17368,112],{"class":50},[37,17370,15960],{"class":54},[37,17372,17364],{"class":2035},[37,17374,5708],{"class":54},[37,17376,17377,17379,17382,17384,17387,17390,17392,17394,17396,17398,17400],{"class":39,"line":2693},[37,17378,14810],{"class":50},[37,17380,17381],{"class":54}," distance ",[37,17383,70],{"class":50},[37,17385,17386],{"class":2035}," sqrt",[37,17388,17389],{"class":54},"(dx ",[37,17391,659],{"class":50},[37,17393,17323],{"class":54},[37,17395,685],{"class":50},[37,17397,17353],{"class":54},[37,17399,659],{"class":50},[37,17401,17402],{"class":54}," dy);\n",[37,17404,17405,17407,17410,17412,17414,17417],{"class":39,"line":8020},[37,17406,3173],{"class":50},[37,17408,17409],{"class":54}," (distance ",[37,17411,1113],{"class":50},[37,17413,16414],{"class":54},[37,17415,17416],{"class":2035},"getRadius",[37,17418,17419],{"class":54},"())\n",[37,17421,17422],{"class":39,"line":8044},[37,17423,2102],{"class":54},[37,17425,17426,17428,17430,17433,17435],{"class":39,"line":8049},[37,17427,9741],{"class":54},[37,17429,1247],{"class":50},[37,17431,17432],{"class":309}," \"点在圆内\"",[37,17434,1517],{"class":50},[37,17436,8912],{"class":54},[37,17438,17439],{"class":39,"line":8055},[37,17440,2259],{"class":54},[37,17442,17443],{"class":39,"line":8082},[37,17444,16895],{"class":50},[37,17446,17447],{"class":39,"line":8087},[37,17448,2102],{"class":54},[37,17450,17451,17453,17455,17458,17460],{"class":39,"line":8093},[37,17452,9741],{"class":54},[37,17454,1247],{"class":50},[37,17456,17457],{"class":309}," \"点在圆外\"",[37,17459,1517],{"class":50},[37,17461,8912],{"class":54},[37,17463,17464],{"class":39,"line":8105},[37,17465,2259],{"class":54},[37,17467,17468],{"class":39,"line":8117},[37,17469,1637],{"class":54},[37,17471,17472,17474,17476],{"class":39,"line":8129},[37,17473,211],{"class":50},[37,17475,2045],{"class":2035},[37,17477,2048],{"class":54},[37,17479,17480],{"class":39,"line":9788},[37,17481,1618],{"class":54},[37,17483,17484],{"class":39,"line":9813},[37,17485,15125],{"class":43},[37,17487,17488],{"class":39,"line":9836},[37,17489,14872],{"class":54},[37,17491,17492],{"class":39,"line":9860},[37,17493,17494],{"class":54},"    Point p1;\n",[37,17496,17497],{"class":39,"line":9865},[37,17498,17066],{"class":43},[37,17500,17501,17503,17505,17508],{"class":39,"line":9870},[37,17502,1623],{"class":54},[37,17504,1247],{"class":50},[37,17506,17507],{"class":309},"\"请输入圆的半径：\"",[37,17509,1364],{"class":54},[37,17511,17512,17514],{"class":39,"line":9875},[37,17513,14810],{"class":50},[37,17515,17516],{"class":54}," r;\n",[37,17518,17519,17521,17523],{"class":39,"line":9884},[37,17520,2084],{"class":54},[37,17522,1502],{"class":50},[37,17524,17525],{"class":54},"r;\n",[37,17527,17528,17530,17533],{"class":39,"line":9889},[37,17529,16667],{"class":54},[37,17531,17532],{"class":2035},"setRadius",[37,17534,17535],{"class":54},"(r);\n",[37,17537,17538,17540,17542,17545],{"class":39,"line":9895},[37,17539,1623],{"class":54},[37,17541,1247],{"class":50},[37,17543,17544],{"class":309},"\"请输入圆心坐标：\"",[37,17546,1364],{"class":54},[37,17548,17549,17551],{"class":39,"line":9916},[37,17550,14810],{"class":50},[37,17552,17553],{"class":54}," x, y;\n",[37,17555,17556,17558,17560,17562,17564],{"class":39,"line":9922},[37,17557,2084],{"class":54},[37,17559,1502],{"class":50},[37,17561,1023],{"class":54},[37,17563,1502],{"class":50},[37,17565,17566],{"class":54},"y;\n",[37,17568,17569,17572,17575],{"class":39,"line":9936},[37,17570,17571],{"class":54},"    p1.",[37,17573,17574],{"class":2035},"setPoint",[37,17576,17577],{"class":54},"(x, y);\n",[37,17579,17580,17582,17585],{"class":39,"line":9942},[37,17581,16667],{"class":54},[37,17583,17584],{"class":2035},"setCenter",[37,17586,17587],{"class":54},"(p1);\n",[37,17589,17590,17592,17594,17597],{"class":39,"line":9969},[37,17591,1623],{"class":54},[37,17593,1247],{"class":50},[37,17595,17596],{"class":309},"\"请输入测试点坐标：\"",[37,17598,1364],{"class":54},[37,17600,17601,17603],{"class":39,"line":9978},[37,17602,14810],{"class":50},[37,17604,17605],{"class":54}," x1, y1;\n",[37,17607,17608,17610,17612,17615,17617],{"class":39,"line":9984},[37,17609,2084],{"class":54},[37,17611,1502],{"class":50},[37,17613,17614],{"class":54},"x1",[37,17616,1502],{"class":50},[37,17618,17619],{"class":54},"y1;\n",[37,17621,17622],{"class":39,"line":9992},[37,17623,17624],{"class":54},"    Point p2;\n",[37,17626,17627,17630,17632],{"class":39,"line":9997},[37,17628,17629],{"class":54},"    p2.",[37,17631,17574],{"class":2035},[37,17633,17634],{"class":54},"(x1, y1);\n",[37,17636,17637,17640],{"class":39,"line":16676},[37,17638,17639],{"class":2035},"    isInCircle",[37,17641,17642],{"class":54},"(c1, p2);\n",[37,17644,17645],{"class":39,"line":16682},[37,17646,1637],{"class":54},[14,17648,17649],{},"在类中可以让另一个类作为本来的成员",[14,17651,17652],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,17654,17655],{},"创建point.h",[27,17657,17659],{"className":196,"code":17658,"language":198,"meta":32,"style":32},"#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",[34,17660,17661,17672,17678,17688,17694,17698,17703,17707,17711,17731,17735,17743,17751,17755,17759,17765,17771],{"__ignoreMap":32},[37,17662,17663,17666,17669],{"class":39,"line":40},[37,17664,17665],{"class":50},"#pragma",[37,17667,17668],{"class":2035}," once",[37,17670,17671],{"class":43}," \u002F\u002F防止头文件重复包含\n",[37,17673,17674,17676],{"class":39,"line":47},[37,17675,2021],{"class":50},[37,17677,2024],{"class":309},[37,17679,17680,17682,17684,17686],{"class":39,"line":58},[37,17681,2029],{"class":50},[37,17683,2032],{"class":50},[37,17685,2036],{"class":2035},[37,17687,1364],{"class":54},[37,17689,17690,17692],{"class":39,"line":64},[37,17691,14766],{"class":50},[37,17693,17053],{"class":2035},[37,17695,17696],{"class":39,"line":76},[37,17697,1618],{"class":54},[37,17699,17700],{"class":39,"line":92},[37,17701,17702],{"class":43},"\u002F\u002F做好声明与变量定义就可以\n",[37,17704,17705],{"class":39,"line":97},[37,17706,14788],{"class":50},[37,17708,17709],{"class":39,"line":107},[37,17710,17066],{"class":43},[37,17712,17713,17715,17717,17719,17721,17723,17725,17727,17729],{"class":39,"line":1390},[37,17714,14981],{"class":50},[37,17716,17073],{"class":2035},[37,17718,208],{"class":54},[37,17720,14109],{"class":50},[37,17722,17080],{"class":5288},[37,17724,12507],{"class":54},[37,17726,14109],{"class":50},[37,17728,17087],{"class":5288},[37,17730,2791],{"class":54},[37,17732,17733],{"class":39,"line":1402},[37,17734,17105],{"class":43},[37,17736,17737,17739,17741],{"class":39,"line":1684},[37,17738,14810],{"class":50},[37,17740,17112],{"class":2035},[37,17742,5708],{"class":54},[37,17744,17745,17747,17749],{"class":39,"line":1689},[37,17746,14810],{"class":50},[37,17748,17128],{"class":2035},[37,17750,5708],{"class":54},[37,17752,17753],{"class":39,"line":1695},[37,17754,2472],{"emptyLinePlaceholder":131},[37,17756,17757],{"class":39,"line":1700},[37,17758,15294],{"class":50},[37,17760,17761,17763],{"class":39,"line":1714},[37,17762,14810],{"class":50},[37,17764,17150],{"class":54},[37,17766,17767,17769],{"class":39,"line":1719},[37,17768,14810],{"class":50},[37,17770,17157],{"class":54},[37,17772,17773],{"class":39,"line":1725},[37,17774,4067],{"class":54},[14,17776,17777],{},"创建point.cpp",[27,17779,17781],{"className":196,"code":17780,"language":198,"meta":32,"style":32},"#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",[34,17782,17783,17790,17795,17829,17833,17849],{"__ignoreMap":32},[37,17784,17785,17787],{"class":39,"line":40},[37,17786,2021],{"class":50},[37,17788,17789],{"class":309},"\u003Cpoint.h>\n",[37,17791,17792],{"class":39,"line":47},[37,17793,17794],{"class":43},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[37,17796,17797,17799,17802,17805,17807,17809,17811,17813,17815,17817,17819,17821,17823,17825,17827],{"class":39,"line":58},[37,17798,14981],{"class":50},[37,17800,17801],{"class":2035}," Point",[37,17803,17804],{"class":54},"::",[37,17806,17574],{"class":2035},[37,17808,208],{"class":54},[37,17810,14109],{"class":50},[37,17812,17080],{"class":5288},[37,17814,12507],{"class":54},[37,17816,14109],{"class":50},[37,17818,17087],{"class":5288},[37,17820,17090],{"class":54},[37,17822,70],{"class":50},[37,17824,17095],{"class":54},[37,17826,70],{"class":50},[37,17828,17100],{"class":54},[37,17830,17831],{"class":39,"line":64},[37,17832,17105],{"class":43},[37,17834,17835,17837,17839,17841,17843,17845,17847],{"class":39,"line":76},[37,17836,14810],{"class":50},[37,17838,17801],{"class":2035},[37,17840,17804],{"class":54},[37,17842,17336],{"class":2035},[37,17844,17115],{"class":54},[37,17846,17118],{"class":50},[37,17848,17121],{"class":54},[37,17850,17851,17853,17855,17857,17859,17861,17863],{"class":39,"line":92},[37,17852,14810],{"class":50},[37,17854,17801],{"class":2035},[37,17856,17804],{"class":54},[37,17858,17364],{"class":2035},[37,17860,17115],{"class":54},[37,17862,17118],{"class":50},[37,17864,17135],{"class":54},[14,17866,17867],{},"创建circle.h",[27,17869,17871],{"className":196,"code":17870,"language":198,"meta":32,"style":32},"#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",[34,17872,17873,17880,17886,17896,17902,17908,17912,17916,17920,17934,17948,17952,17960,17968,17972,17976,17982,17986,17990],{"__ignoreMap":32},[37,17874,17875,17877],{"class":39,"line":40},[37,17876,17665],{"class":50},[37,17878,17879],{"class":2035}," once\n",[37,17881,17882,17884],{"class":39,"line":47},[37,17883,2021],{"class":50},[37,17885,2024],{"class":309},[37,17887,17888,17890,17892,17894],{"class":39,"line":58},[37,17889,2029],{"class":50},[37,17891,2032],{"class":50},[37,17893,2036],{"class":2035},[37,17895,1364],{"class":54},[37,17897,17898,17900],{"class":39,"line":64},[37,17899,2021],{"class":50},[37,17901,17789],{"class":309},[37,17903,17904,17906],{"class":39,"line":76},[37,17905,14766],{"class":50},[37,17907,14769],{"class":2035},[37,17909,17910],{"class":39,"line":92},[37,17911,1618],{"class":54},[37,17913,17914],{"class":39,"line":97},[37,17915,14788],{"class":50},[37,17917,17918],{"class":39,"line":107},[37,17919,17066],{"class":43},[37,17921,17922,17924,17926,17928,17930,17932],{"class":39,"line":1390},[37,17923,14981],{"class":50},[37,17925,17186],{"class":2035},[37,17927,208],{"class":54},[37,17929,14109],{"class":50},[37,17931,17193],{"class":5288},[37,17933,2791],{"class":54},[37,17935,17936,17938,17940,17942,17944,17946],{"class":39,"line":1402},[37,17937,14981],{"class":50},[37,17939,17208],{"class":2035},[37,17941,208],{"class":54},[37,17943,17213],{"class":2035},[37,17945,17216],{"class":5288},[37,17947,2791],{"class":54},[37,17949,17950],{"class":39,"line":1684},[37,17951,17229],{"class":43},[37,17953,17954,17956,17958],{"class":39,"line":1689},[37,17955,14810],{"class":50},[37,17957,17236],{"class":2035},[37,17959,5708],{"class":54},[37,17961,17962,17964,17966],{"class":39,"line":1695},[37,17963,17248],{"class":2035},[37,17965,17251],{"class":2035},[37,17967,5708],{"class":54},[37,17969,17970],{"class":39,"line":1700},[37,17971,2472],{"emptyLinePlaceholder":131},[37,17973,17974],{"class":39,"line":1714},[37,17975,15294],{"class":50},[37,17977,17978,17980],{"class":39,"line":1719},[37,17979,14810],{"class":50},[37,17981,14800],{"class":54},[37,17983,17984],{"class":39,"line":1725},[37,17985,17277],{"class":43},[37,17987,17988],{"class":39,"line":1746},[37,17989,17282],{"class":54},[37,17991,17992],{"class":39,"line":1751},[37,17993,4067],{"class":54},[14,17995,17996],{},"创建circle.cpp",[27,17998,18000],{"className":196,"code":17999,"language":198,"meta":32,"style":32},"#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",[34,18001,18002,18009,18032,18054,18059,18075],{"__ignoreMap":32},[37,18003,18004,18006],{"class":39,"line":40},[37,18005,2021],{"class":50},[37,18007,18008],{"class":309},"\u003Ccircle.h>\n",[37,18010,18011,18013,18016,18018,18020,18022,18024,18026,18028,18030],{"class":39,"line":47},[37,18012,5436],{"class":50},[37,18014,18015],{"class":2035}," Circle",[37,18017,17804],{"class":54},[37,18019,17532],{"class":2035},[37,18021,208],{"class":54},[37,18023,14109],{"class":50},[37,18025,17193],{"class":5288},[37,18027,17196],{"class":54},[37,18029,70],{"class":50},[37,18031,17201],{"class":54},[37,18033,18034,18036,18038,18040,18042,18044,18046,18048,18050,18052],{"class":39,"line":58},[37,18035,5436],{"class":50},[37,18037,18015],{"class":2035},[37,18039,17804],{"class":54},[37,18041,17584],{"class":2035},[37,18043,208],{"class":54},[37,18045,17213],{"class":2035},[37,18047,17216],{"class":5288},[37,18049,17219],{"class":54},[37,18051,70],{"class":50},[37,18053,17224],{"class":54},[37,18055,18056],{"class":39,"line":64},[37,18057,18058],{"class":43},"\u002F\u002F获取属性\n",[37,18060,18061,18063,18065,18067,18069,18071,18073],{"class":39,"line":76},[37,18062,14109],{"class":50},[37,18064,18015],{"class":2035},[37,18066,17804],{"class":54},[37,18068,17416],{"class":2035},[37,18070,17115],{"class":54},[37,18072,17118],{"class":50},[37,18074,17243],{"class":54},[37,18076,18077,18079,18081,18083,18085,18087,18089],{"class":39,"line":92},[37,18078,17213],{"class":2035},[37,18080,18015],{"class":2035},[37,18082,17804],{"class":54},[37,18084,17330],{"class":2035},[37,18086,17115],{"class":54},[37,18088,17118],{"class":50},[37,18090,17258],{"class":54},[14,18092,18093],{},"使用封装的类",[27,18095,18097],{"className":196,"code":18096,"language":198,"meta":32,"style":32},"#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",[34,18098,18099,18105,18115,18121,18127,18151,18155,18181,18207,18231,18245,18249,18261,18265,18269,18273,18285,18289,18293,18301,18305,18309,18313,18317,18321,18331,18337,18345,18353,18363,18369,18381,18389,18397,18407,18413,18425,18429,18437,18443],{"__ignoreMap":32},[37,18100,18101,18103],{"class":39,"line":40},[37,18102,2021],{"class":50},[37,18104,2024],{"class":309},[37,18106,18107,18109,18111,18113],{"class":39,"line":47},[37,18108,2029],{"class":50},[37,18110,2032],{"class":50},[37,18112,2036],{"class":2035},[37,18114,1364],{"class":54},[37,18116,18117,18119],{"class":39,"line":58},[37,18118,2021],{"class":50},[37,18120,18008],{"class":309},[37,18122,18123,18125],{"class":39,"line":64},[37,18124,2021],{"class":50},[37,18126,17789],{"class":309},[37,18128,18129,18131,18133,18135,18137,18139,18141,18143,18145,18147,18149],{"class":39,"line":76},[37,18130,5436],{"class":50},[37,18132,17293],{"class":2035},[37,18134,208],{"class":54},[37,18136,17298],{"class":2035},[37,18138,10656],{"class":50},[37,18140,493],{"class":5288},[37,18142,583],{"class":54},[37,18144,17213],{"class":2035},[37,18146,10656],{"class":50},[37,18148,14],{"class":5288},[37,18150,214],{"class":54},[37,18152,18153],{"class":39,"line":92},[37,18154,1618],{"class":54},[37,18156,18157,18159,18161,18163,18165,18167,18169,18171,18173,18175,18177,18179],{"class":39,"line":97},[37,18158,14810],{"class":50},[37,18160,17323],{"class":54},[37,18162,70],{"class":50},[37,18164,16414],{"class":54},[37,18166,17330],{"class":2035},[37,18168,17333],{"class":54},[37,18170,17336],{"class":2035},[37,18172,13122],{"class":54},[37,18174,112],{"class":50},[37,18176,15960],{"class":54},[37,18178,17336],{"class":2035},[37,18180,5708],{"class":54},[37,18182,18183,18185,18187,18189,18191,18193,18195,18197,18199,18201,18203,18205],{"class":39,"line":107},[37,18184,14810],{"class":50},[37,18186,17353],{"class":54},[37,18188,70],{"class":50},[37,18190,16414],{"class":54},[37,18192,17330],{"class":2035},[37,18194,17333],{"class":54},[37,18196,17364],{"class":2035},[37,18198,13122],{"class":54},[37,18200,112],{"class":50},[37,18202,15960],{"class":54},[37,18204,17364],{"class":2035},[37,18206,5708],{"class":54},[37,18208,18209,18211,18213,18215,18217,18219,18221,18223,18225,18227,18229],{"class":39,"line":1390},[37,18210,14810],{"class":50},[37,18212,17381],{"class":54},[37,18214,70],{"class":50},[37,18216,17386],{"class":2035},[37,18218,17389],{"class":54},[37,18220,659],{"class":50},[37,18222,17323],{"class":54},[37,18224,685],{"class":50},[37,18226,17353],{"class":54},[37,18228,659],{"class":50},[37,18230,17402],{"class":54},[37,18232,18233,18235,18237,18239,18241,18243],{"class":39,"line":1402},[37,18234,3173],{"class":50},[37,18236,17409],{"class":54},[37,18238,1113],{"class":50},[37,18240,16414],{"class":54},[37,18242,17416],{"class":2035},[37,18244,17419],{"class":54},[37,18246,18247],{"class":39,"line":1684},[37,18248,2102],{"class":54},[37,18250,18251,18253,18255,18257,18259],{"class":39,"line":1689},[37,18252,9741],{"class":54},[37,18254,1247],{"class":50},[37,18256,17432],{"class":309},[37,18258,1517],{"class":50},[37,18260,8912],{"class":54},[37,18262,18263],{"class":39,"line":1695},[37,18264,2259],{"class":54},[37,18266,18267],{"class":39,"line":1700},[37,18268,16895],{"class":50},[37,18270,18271],{"class":39,"line":1714},[37,18272,2102],{"class":54},[37,18274,18275,18277,18279,18281,18283],{"class":39,"line":1719},[37,18276,9741],{"class":54},[37,18278,1247],{"class":50},[37,18280,17457],{"class":309},[37,18282,1517],{"class":50},[37,18284,8912],{"class":54},[37,18286,18287],{"class":39,"line":1725},[37,18288,2259],{"class":54},[37,18290,18291],{"class":39,"line":1746},[37,18292,1637],{"class":54},[37,18294,18295,18297,18299],{"class":39,"line":1751},[37,18296,211],{"class":50},[37,18298,2045],{"class":2035},[37,18300,2048],{"class":54},[37,18302,18303],{"class":39,"line":1765},[37,18304,1618],{"class":54},[37,18306,18307],{"class":39,"line":1770},[37,18308,15125],{"class":43},[37,18310,18311],{"class":39,"line":1799},[37,18312,14872],{"class":54},[37,18314,18315],{"class":39,"line":1804},[37,18316,17494],{"class":54},[37,18318,18319],{"class":39,"line":1821},[37,18320,17066],{"class":43},[37,18322,18323,18325,18327,18329],{"class":39,"line":1826},[37,18324,1623],{"class":54},[37,18326,1247],{"class":50},[37,18328,17507],{"class":309},[37,18330,1364],{"class":54},[37,18332,18333,18335],{"class":39,"line":1831},[37,18334,14810],{"class":50},[37,18336,17516],{"class":54},[37,18338,18339,18341,18343],{"class":39,"line":1836},[37,18340,2084],{"class":54},[37,18342,1502],{"class":50},[37,18344,17525],{"class":54},[37,18346,18347,18349,18351],{"class":39,"line":1850},[37,18348,16667],{"class":54},[37,18350,17532],{"class":2035},[37,18352,17535],{"class":54},[37,18354,18355,18357,18359,18361],{"class":39,"line":1855},[37,18356,1623],{"class":54},[37,18358,1247],{"class":50},[37,18360,17544],{"class":309},[37,18362,1364],{"class":54},[37,18364,18365,18367],{"class":39,"line":2649},[37,18366,14810],{"class":50},[37,18368,17553],{"class":54},[37,18370,18371,18373,18375,18377,18379],{"class":39,"line":2663},[37,18372,2084],{"class":54},[37,18374,1502],{"class":50},[37,18376,1023],{"class":54},[37,18378,1502],{"class":50},[37,18380,17566],{"class":54},[37,18382,18383,18385,18387],{"class":39,"line":2671},[37,18384,17571],{"class":54},[37,18386,17574],{"class":2035},[37,18388,17577],{"class":54},[37,18390,18391,18393,18395],{"class":39,"line":2676},[37,18392,16667],{"class":54},[37,18394,17584],{"class":2035},[37,18396,17587],{"class":54},[37,18398,18399,18401,18403,18405],{"class":39,"line":2682},[37,18400,1623],{"class":54},[37,18402,1247],{"class":50},[37,18404,17596],{"class":309},[37,18406,1364],{"class":54},[37,18408,18409,18411],{"class":39,"line":2688},[37,18410,14810],{"class":50},[37,18412,17605],{"class":54},[37,18414,18415,18417,18419,18421,18423],{"class":39,"line":2693},[37,18416,2084],{"class":54},[37,18418,1502],{"class":50},[37,18420,17614],{"class":54},[37,18422,1502],{"class":50},[37,18424,17619],{"class":54},[37,18426,18427],{"class":39,"line":8020},[37,18428,17624],{"class":54},[37,18430,18431,18433,18435],{"class":39,"line":8044},[37,18432,17629],{"class":54},[37,18434,17574],{"class":2035},[37,18436,17634],{"class":54},[37,18438,18439,18441],{"class":39,"line":8049},[37,18440,17639],{"class":2035},[37,18442,17642],{"class":54},[37,18444,18445],{"class":39,"line":8055},[37,18446,1637],{"class":54},[146,18448,18450],{"id":18449},"_82对象的初始化清理","8.2对象的初始化清理",[1210,18452,18453,18456],{},[161,18454,18455],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[161,18457,18458],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[175,18460,18462],{"id":18461},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,18464,18465,18466,18469],{},"对象的",[354,18467,18468],{},"初始化和清理","也是两个非常重要的安全问题",[14,18471,18472],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,18474,18475],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,18477,18478,18479,18482,18483,18486],{},"c++利用了",[354,18480,18481],{},"构造函数","和",[354,18484,18485],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,18488,18489,18490],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[354,18491,18492],{},"我们不提供构造和析构，编译器会提供",[14,18494,18495],{},[354,18496,18497],{},"编译器提供的构造函数和析构函数是空实现。",[1210,18499,18500,18503],{},[161,18501,18502],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[161,18504,18505,18506,18509],{},"析构函数：主要作用在于对象",[354,18507,18508],{},"销毁前","系统自动调用，执行一些清理工作。",[14,18511,18512,18515],{},[354,18513,18514],{},"构造函数语法：",[34,18516,18517],{},"类名(){}",[158,18519,18520,18523,18526,18529,18532],{},[161,18521,18522],{},"构造函数，没有返回值也不写void",[161,18524,18525],{},"函数名称与类名相同",[161,18527,18528],{},"构造函数可以有参数，因此可以发生重载",[161,18530,18531],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[161,18533,18534,18535,86],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[34,18536,18537],{},"Person(){}",[14,18539,18540,13867,18543],{},[354,18541,18542],{},"析构函数语法：",[34,18544,18545],{},"~类名(){}",[158,18547,18548,18551,18554,18560],{},[161,18549,18550],{},"析构函数，没有返回值也不写void",[161,18552,18553],{},"函数名称与类名相同,在名称前加上符号  ~",[161,18555,18556,18557],{},"析构函数不可以有参数，因此",[354,18558,18559],{},"不可以发生重载",[161,18561,18562],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[27,18564,18566],{"className":196,"code":18565,"language":198,"meta":32,"style":32},"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",[34,18567,18568,18574,18578,18582,18587,18594,18598,18611,18615,18620,18627,18631,18644,18648,18652,18656,18660,18668,18672,18680,18684,18688,18696,18700,18705,18709,18716,18720,18733,18737,18745],{"__ignoreMap":32},[37,18569,18570,18572],{"class":39,"line":40},[37,18571,14766],{"class":50},[37,18573,15243],{"class":2035},[37,18575,18576],{"class":39,"line":47},[37,18577,1618],{"class":54},[37,18579,18580],{"class":39,"line":58},[37,18581,14788],{"class":50},[37,18583,18584],{"class":39,"line":64},[37,18585,18586],{"class":43},"    \u002F\u002F构造函数\n",[37,18588,18589,18592],{"class":39,"line":76},[37,18590,18591],{"class":2035},"    Person",[37,18593,2048],{"class":54},[37,18595,18596],{"class":39,"line":92},[37,18597,2102],{"class":54},[37,18599,18600,18602,18604,18607,18609],{"class":39,"line":97},[37,18601,9741],{"class":54},[37,18603,1247],{"class":50},[37,18605,18606],{"class":309}," \"Person的构造函数调用\"",[37,18608,1517],{"class":50},[37,18610,8912],{"class":54},[37,18612,18613],{"class":39,"line":107},[37,18614,2259],{"class":54},[37,18616,18617],{"class":39,"line":1390},[37,18618,18619],{"class":43},"    \u002F\u002F析构函数\n",[37,18621,18622,18625],{"class":39,"line":1402},[37,18623,18624],{"class":2035},"    ~Person",[37,18626,2048],{"class":54},[37,18628,18629],{"class":39,"line":1684},[37,18630,2102],{"class":54},[37,18632,18633,18635,18637,18640,18642],{"class":39,"line":1689},[37,18634,9741],{"class":54},[37,18636,1247],{"class":50},[37,18638,18639],{"class":309}," \"Person的析构函数调用\"",[37,18641,1517],{"class":50},[37,18643,8912],{"class":54},[37,18645,18646],{"class":39,"line":1695},[37,18647,2259],{"class":54},[37,18649,18650],{"class":39,"line":1700},[37,18651,2472],{"emptyLinePlaceholder":131},[37,18653,18654],{"class":39,"line":1714},[37,18655,4067],{"class":54},[37,18657,18658],{"class":39,"line":1719},[37,18659,2472],{"emptyLinePlaceholder":131},[37,18661,18662,18664,18666],{"class":39,"line":1725},[37,18663,5436],{"class":50},[37,18665,5660],{"class":2035},[37,18667,2048],{"class":54},[37,18669,18670],{"class":39,"line":1746},[37,18671,1618],{"class":54},[37,18673,18674,18677],{"class":39,"line":1751},[37,18675,18676],{"class":54},"    Person p;",[37,18678,18679],{"class":43},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[37,18681,18682],{"class":39,"line":1765},[37,18683,1637],{"class":54},[37,18685,18686],{"class":39,"line":1770},[37,18687,2472],{"emptyLinePlaceholder":131},[37,18689,18690,18692,18694],{"class":39,"line":1799},[37,18691,211],{"class":50},[37,18693,2045],{"class":2035},[37,18695,10925],{"class":54},[37,18697,18698],{"class":39,"line":1804},[37,18699,13282],{"class":54},[37,18701,18702],{"class":39,"line":1821},[37,18703,18704],{"class":43},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[37,18706,18707],{"class":39,"line":1826},[37,18708,2472],{"emptyLinePlaceholder":131},[37,18710,18711,18713],{"class":39,"line":1831},[37,18712,18676],{"class":54},[37,18714,18715],{"class":43},"\u002F\u002F只有构造函数\n",[37,18717,18718],{"class":39,"line":1836},[37,18719,2472],{"emptyLinePlaceholder":131},[37,18721,18722,18724,18726,18728,18730],{"class":39,"line":1850},[37,18723,2375],{"class":2035},[37,18725,208],{"class":54},[37,18727,2380],{"class":309},[37,18729,6038],{"class":54},[37,18731,18732],{"class":43},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[37,18734,18735],{"class":39,"line":1855},[37,18736,2472],{"emptyLinePlaceholder":131},[37,18738,18739,18741,18743],{"class":39,"line":2649},[37,18740,4162],{"class":50},[37,18742,4165],{"class":82},[37,18744,1364],{"class":54},[37,18746,18747],{"class":39,"line":2663},[37,18748,1637],{"class":54},[14,18750,18751],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[175,18753,18755],{"id":18754},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,18757,18758],{},"两种分类方式：",[14,18760,18761],{},"​\t按参数分为： 有参构造和无参构造",[14,18763,18764],{},"​\t按类型分为： 普通构造和拷贝构造",[14,18766,18767],{},"三种调用方式：",[14,18769,18770],{},"​\t括号法",[14,18772,18773],{},"​\t显示法",[14,18775,18776],{},"​\t隐式转换法",[27,18778,18780],{"className":196,"code":18779,"language":198,"meta":32,"style":32},"#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",[34,18781,18782,18788,18798,18803,18808,18813,18818,18822,18830,18834,18838,18842,18848,18852,18865,18869,18881,18885,18894,18907,18911,18915,18921,18925,18938,18942,18947,18963,18967,18972,18981,18994,18998,19004,19008,19013,19021,19025,19030,19034,19042,19046,19051,19056,19061,19066,19071,19075,19080,19085,19090,19095,19099,19104,19109,19125,19137,19142,19146,19151,19156,19161,19165,19170,19184,19197,19201,19209,19213,19219,19225,19233],{"__ignoreMap":32},[37,18783,18784,18786],{"class":39,"line":40},[37,18785,2021],{"class":50},[37,18787,2024],{"class":309},[37,18789,18790,18792,18794,18796],{"class":39,"line":47},[37,18791,2029],{"class":50},[37,18793,2032],{"class":50},[37,18795,2036],{"class":2035},[37,18797,1364],{"class":54},[37,18799,18800],{"class":39,"line":58},[37,18801,18802],{"class":43},"\u002F\u002F1.构造函数的分类及调用\n",[37,18804,18805],{"class":39,"line":64},[37,18806,18807],{"class":43},"\u002F\u002F分类\n",[37,18809,18810],{"class":39,"line":76},[37,18811,18812],{"class":43},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[37,18814,18815],{"class":39,"line":92},[37,18816,18817],{"class":43},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[37,18819,18820],{"class":39,"line":97},[37,18821,2472],{"emptyLinePlaceholder":131},[37,18823,18824,18826,18828],{"class":39,"line":107},[37,18825,14766],{"class":50},[37,18827,15641],{"class":2035},[37,18829,2746],{"class":54},[37,18831,18832],{"class":39,"line":1390},[37,18833,1618],{"class":54},[37,18835,18836],{"class":39,"line":1402},[37,18837,14788],{"class":50},[37,18839,18840],{"class":39,"line":1684},[37,18841,18586],{"class":43},[37,18843,18844,18846],{"class":39,"line":1689},[37,18845,18591],{"class":2035},[37,18847,2048],{"class":54},[37,18849,18850],{"class":39,"line":1695},[37,18851,2102],{"class":54},[37,18853,18854,18856,18858,18861,18863],{"class":39,"line":1700},[37,18855,3523],{"class":54},[37,18857,1247],{"class":50},[37,18859,18860],{"class":309},"\"Person构造函数无参构造\"",[37,18862,1247],{"class":50},[37,18864,1269],{"class":54},[37,18866,18867],{"class":39,"line":1714},[37,18868,2259],{"class":54},[37,18870,18871,18873,18875,18877,18879],{"class":39,"line":1719},[37,18872,18591],{"class":2035},[37,18874,208],{"class":54},[37,18876,211],{"class":50},[37,18878,1471],{"class":5288},[37,18880,214],{"class":54},[37,18882,18883],{"class":39,"line":1725},[37,18884,2102],{"class":54},[37,18886,18887,18890,18892],{"class":39,"line":1746},[37,18888,18889],{"class":54},"        age",[37,18891,70],{"class":50},[37,18893,6269],{"class":54},[37,18895,18896,18898,18900,18903,18905],{"class":39,"line":1751},[37,18897,3523],{"class":54},[37,18899,1247],{"class":50},[37,18901,18902],{"class":309},"\"Person构造函数有参构造\"",[37,18904,1247],{"class":50},[37,18906,1269],{"class":54},[37,18908,18909],{"class":39,"line":1765},[37,18910,2259],{"class":54},[37,18912,18913],{"class":39,"line":1770},[37,18914,18619],{"class":43},[37,18916,18917,18919],{"class":39,"line":1799},[37,18918,18624],{"class":2035},[37,18920,2048],{"class":54},[37,18922,18923],{"class":39,"line":1804},[37,18924,2102],{"class":54},[37,18926,18927,18929,18931,18934,18936],{"class":39,"line":1821},[37,18928,3523],{"class":54},[37,18930,1247],{"class":50},[37,18932,18933],{"class":309},"\"Person析构函数被调用\"",[37,18935,1247],{"class":50},[37,18937,1269],{"class":54},[37,18939,18940],{"class":39,"line":1826},[37,18941,2259],{"class":54},[37,18943,18944],{"class":39,"line":1831},[37,18945,18946],{"class":43},"    \u002F\u002F拷贝构造函数\n",[37,18948,18949,18951,18953,18955,18957,18959,18961],{"class":39,"line":1836},[37,18950,18591],{"class":2035},[37,18952,208],{"class":54},[37,18954,6864],{"class":50},[37,18956,15641],{"class":2035},[37,18958,10656],{"class":50},[37,18960,14],{"class":5288},[37,18962,214],{"class":54},[37,18964,18965],{"class":39,"line":1850},[37,18966,2102],{"class":54},[37,18968,18969],{"class":39,"line":1855},[37,18970,18971],{"class":43},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[37,18973,18974,18976,18978],{"class":39,"line":2649},[37,18975,18889],{"class":54},[37,18977,70],{"class":50},[37,18979,18980],{"class":54},"p.age;\n",[37,18982,18983,18985,18987,18990,18992],{"class":39,"line":2663},[37,18984,3523],{"class":54},[37,18986,1247],{"class":50},[37,18988,18989],{"class":309},"\"Person拷贝构造函数被调用\"",[37,18991,1247],{"class":50},[37,18993,1269],{"class":54},[37,18995,18996],{"class":39,"line":2671},[37,18997,2259],{"class":54},[37,18999,19000,19002],{"class":39,"line":2676},[37,19001,2057],{"class":50},[37,19003,7869],{"class":54},[37,19005,19006],{"class":39,"line":2682},[37,19007,4067],{"class":54},[37,19009,19010],{"class":39,"line":2688},[37,19011,19012],{"class":43},"\u002F\u002F调用\n",[37,19014,19015,19017,19019],{"class":39,"line":2693},[37,19016,5436],{"class":50},[37,19018,5660],{"class":2035},[37,19020,2048],{"class":54},[37,19022,19023],{"class":39,"line":8020},[37,19024,1618],{"class":54},[37,19026,19027],{"class":39,"line":8044},[37,19028,19029],{"class":43},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[37,19031,19032],{"class":39,"line":8049},[37,19033,1637],{"class":54},[37,19035,19036,19038,19040],{"class":39,"line":8055},[37,19037,5436],{"class":50},[37,19039,5729],{"class":2035},[37,19041,2048],{"class":54},[37,19043,19044],{"class":39,"line":8082},[37,19045,1618],{"class":54},[37,19047,19048],{"class":39,"line":8087},[37,19049,19050],{"class":43},"    \u002F\u002F1.括号法\n",[37,19052,19053],{"class":39,"line":8093},[37,19054,19055],{"class":43},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[37,19057,19058],{"class":39,"line":8105},[37,19059,19060],{"class":43},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[37,19062,19063],{"class":39,"line":8117},[37,19064,19065],{"class":43},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[37,19067,19068],{"class":39,"line":8129},[37,19069,19070],{"class":43},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[37,19072,19073],{"class":39,"line":9788},[37,19074,2472],{"emptyLinePlaceholder":131},[37,19076,19077],{"class":39,"line":9813},[37,19078,19079],{"class":43},"    \u002F\u002F注意事项\n",[37,19081,19082],{"class":39,"line":9836},[37,19083,19084],{"class":43},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[37,19086,19087],{"class":39,"line":9860},[37,19088,19089],{"class":43},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[37,19091,19092],{"class":39,"line":9865},[37,19093,19094],{"class":43},"    \u002F\u002F Person p4();\n",[37,19096,19097],{"class":39,"line":9870},[37,19098,2472],{"emptyLinePlaceholder":131},[37,19100,19101],{"class":39,"line":9875},[37,19102,19103],{"class":43},"    \u002F\u002F2.显示法\n",[37,19105,19106],{"class":39,"line":9884},[37,19107,19108],{"class":54},"    Person p1;\n",[37,19110,19111,19114,19116,19119,19121,19123],{"class":39,"line":9889},[37,19112,19113],{"class":54},"    Person p2",[37,19115,70],{"class":50},[37,19117,19118],{"class":2035},"Person",[37,19120,208],{"class":54},[37,19122,650],{"class":82},[37,19124,2791],{"class":54},[37,19126,19127,19130,19132,19134],{"class":39,"line":9895},[37,19128,19129],{"class":54},"    Person p3",[37,19131,70],{"class":50},[37,19133,19118],{"class":2035},[37,19135,19136],{"class":54},"(p2);\n",[37,19138,19139],{"class":39,"line":9916},[37,19140,19141],{"class":43},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[37,19143,19144],{"class":39,"line":9922},[37,19145,2472],{"emptyLinePlaceholder":131},[37,19147,19148],{"class":39,"line":9936},[37,19149,19150],{"class":43},"    \u002F\u002F 注意事项2\n",[37,19152,19153],{"class":39,"line":9942},[37,19154,19155],{"class":43},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[37,19157,19158],{"class":39,"line":9969},[37,19159,19160],{"class":43},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[37,19162,19163],{"class":39,"line":9978},[37,19164,2472],{"emptyLinePlaceholder":131},[37,19166,19167],{"class":39,"line":9984},[37,19168,19169],{"class":43},"    \u002F\u002F3.隐士转换法\n",[37,19171,19172,19175,19177,19179,19181],{"class":39,"line":9992},[37,19173,19174],{"class":54},"    Person p4",[37,19176,70],{"class":50},[37,19178,650],{"class":82},[37,19180,261],{"class":54},[37,19182,19183],{"class":43},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[37,19185,19186,19189,19191,19194],{"class":39,"line":9997},[37,19187,19188],{"class":54},"    Person p5",[37,19190,70],{"class":50},[37,19192,19193],{"class":54},"p4;",[37,19195,19196],{"class":43}," \u002F\u002F 这里会调用拷贝构造函数\n",[37,19198,19199],{"class":39,"line":16676},[37,19200,1637],{"class":54},[37,19202,19203,19205,19207],{"class":39,"line":16682},[37,19204,211],{"class":50},[37,19206,2045],{"class":2035},[37,19208,2048],{"class":54},[37,19210,19211],{"class":39,"line":16705},[37,19212,1618],{"class":54},[37,19214,19215,19217],{"class":39,"line":16711},[37,19216,5705],{"class":2035},[37,19218,5708],{"class":54},[37,19220,19221,19223],{"class":39,"line":16734},[37,19222,5774],{"class":2035},[37,19224,5708],{"class":54},[37,19226,19227,19229,19231],{"class":39,"line":16748},[37,19228,4162],{"class":50},[37,19230,4165],{"class":82},[37,19232,1364],{"class":54},[37,19234,19235],{"class":39,"line":16768},[37,19236,1637],{"class":54},[14,19238,19239,19242],{},[354,19240,19241],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[175,19244,19246],{"id":19245},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19248,19249],{},"C++中拷贝构造函数调用时机通常有三种情况",[1210,19251,19252,19255,19258],{},[161,19253,19254],{},"使用一个已经创建完毕的对象来初始化一个新对象",[161,19256,19257],{},"值传递的方式给函数参数传值",[161,19259,19260],{},"以值方式返回局部对象",[27,19262,19264],{"className":196,"code":19263,"language":198,"meta":32,"style":32},"#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",[34,19265,19266,19272,19282,19286,19291,19295,19300,19305,19310,19316,19320,19324,19330,19334,19347,19351,19356,19368,19372,19380,19393,19397,19401,19417,19421,19430,19443,19447,19453,19457,19469,19473,19479,19483,19487,19495,19499,19512,19520,19538,19542,19547,19552,19567,19571,19584,19588,19596,19600,19604,19612,19616,19621,19630,19634,19638,19663,19673,19677,19685,19689,19700,19725,19729,19733,19737,19745,19749,19754,19759,19766,19771,19776,19781,19786,19790,19795,19799,19804,19808,19813,19818,19822,19826,19831,19836,19844],{"__ignoreMap":32},[37,19267,19268,19270],{"class":39,"line":40},[37,19269,2021],{"class":50},[37,19271,2024],{"class":309},[37,19273,19274,19276,19278,19280],{"class":39,"line":47},[37,19275,2029],{"class":50},[37,19277,2032],{"class":50},[37,19279,2036],{"class":2035},[37,19281,1364],{"class":54},[37,19283,19284],{"class":39,"line":58},[37,19285,2472],{"emptyLinePlaceholder":131},[37,19287,19288],{"class":39,"line":64},[37,19289,19290],{"class":43},"\u002F\u002F拷贝构造函数调用时机\n",[37,19292,19293],{"class":39,"line":76},[37,19294,2472],{"emptyLinePlaceholder":131},[37,19296,19297],{"class":39,"line":92},[37,19298,19299],{"class":43},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[37,19301,19302],{"class":39,"line":97},[37,19303,19304],{"class":43},"\u002F\u002F2.值传递的方式给函数参数传值\n",[37,19306,19307],{"class":39,"line":107},[37,19308,19309],{"class":43},"\u002F\u002F3.以值方式返回局部对象\n",[37,19311,19312,19314],{"class":39,"line":1390},[37,19313,14766],{"class":50},[37,19315,15243],{"class":2035},[37,19317,19318],{"class":39,"line":1402},[37,19319,1618],{"class":54},[37,19321,19322],{"class":39,"line":1684},[37,19323,14788],{"class":50},[37,19325,19326,19328],{"class":39,"line":1689},[37,19327,18591],{"class":2035},[37,19329,2048],{"class":54},[37,19331,19332],{"class":39,"line":1695},[37,19333,2102],{"class":54},[37,19335,19336,19338,19340,19343,19345],{"class":39,"line":1700},[37,19337,9741],{"class":54},[37,19339,1247],{"class":50},[37,19341,19342],{"class":309}," \"Person的默认构造函数调用\"",[37,19344,1517],{"class":50},[37,19346,8912],{"class":54},[37,19348,19349],{"class":39,"line":1714},[37,19350,2259],{"class":54},[37,19352,19353],{"class":39,"line":1719},[37,19354,19355],{"class":43},"    \u002F\u002F有参构造\n",[37,19357,19358,19360,19362,19364,19366],{"class":39,"line":1725},[37,19359,18591],{"class":2035},[37,19361,208],{"class":54},[37,19363,211],{"class":50},[37,19365,15761],{"class":5288},[37,19367,214],{"class":54},[37,19369,19370],{"class":39,"line":1746},[37,19371,2102],{"class":54},[37,19373,19374,19376,19378],{"class":39,"line":1751},[37,19375,15815],{"class":54},[37,19377,70],{"class":50},[37,19379,7869],{"class":54},[37,19381,19382,19384,19386,19389,19391],{"class":39,"line":1765},[37,19383,9741],{"class":54},[37,19385,1247],{"class":50},[37,19387,19388],{"class":309}," \"Person的有参构造函数调用\"",[37,19390,1517],{"class":50},[37,19392,8912],{"class":54},[37,19394,19395],{"class":39,"line":1770},[37,19396,2259],{"class":54},[37,19398,19399],{"class":39,"line":1799},[37,19400,18946],{"class":43},[37,19402,19403,19405,19407,19409,19411,19413,19415],{"class":39,"line":1804},[37,19404,18591],{"class":2035},[37,19406,208],{"class":54},[37,19408,6864],{"class":50},[37,19410,15641],{"class":2035},[37,19412,10656],{"class":50},[37,19414,14],{"class":5288},[37,19416,214],{"class":54},[37,19418,19419],{"class":39,"line":1821},[37,19420,2102],{"class":54},[37,19422,19423,19425,19427],{"class":39,"line":1826},[37,19424,15815],{"class":54},[37,19426,70],{"class":50},[37,19428,19429],{"class":54}," p.m_Age;\n",[37,19431,19432,19434,19436,19439,19441],{"class":39,"line":1831},[37,19433,9741],{"class":54},[37,19435,1247],{"class":50},[37,19437,19438],{"class":309}," \"Person的拷贝构造函数调用\"",[37,19440,1517],{"class":50},[37,19442,8912],{"class":54},[37,19444,19445],{"class":39,"line":1836},[37,19446,2259],{"class":54},[37,19448,19449,19451],{"class":39,"line":1850},[37,19450,18624],{"class":2035},[37,19452,2048],{"class":54},[37,19454,19455],{"class":39,"line":1855},[37,19456,2102],{"class":54},[37,19458,19459,19461,19463,19465,19467],{"class":39,"line":2649},[37,19460,9741],{"class":54},[37,19462,1247],{"class":50},[37,19464,18639],{"class":309},[37,19466,1517],{"class":50},[37,19468,8912],{"class":54},[37,19470,19471],{"class":39,"line":2663},[37,19472,2259],{"class":54},[37,19474,19475,19477],{"class":39,"line":2671},[37,19476,2057],{"class":50},[37,19478,15738],{"class":54},[37,19480,19481],{"class":39,"line":2676},[37,19482,4067],{"class":54},[37,19484,19485],{"class":39,"line":2682},[37,19486,19299],{"class":43},[37,19488,19489,19491,19493],{"class":39,"line":2688},[37,19490,5436],{"class":50},[37,19492,5660],{"class":2035},[37,19494,2048],{"class":54},[37,19496,19497],{"class":39,"line":2693},[37,19498,1618],{"class":54},[37,19500,19501,19504,19506,19508,19510],{"class":39,"line":8020},[37,19502,19503],{"class":54},"    Person ",[37,19505,7202],{"class":2035},[37,19507,208],{"class":54},[37,19509,903],{"class":82},[37,19511,2791],{"class":54},[37,19513,19514,19516,19518],{"class":39,"line":8044},[37,19515,19503],{"class":54},[37,19517,7105],{"class":2035},[37,19519,17587],{"class":54},[37,19521,19522,19524,19526,19529,19531,19534,19536],{"class":39,"line":8049},[37,19523,1623],{"class":54},[37,19525,1247],{"class":50},[37,19527,19528],{"class":309},"\"P2的年龄为：\"",[37,19530,1247],{"class":50},[37,19532,19533],{"class":54},"p2.m_Age",[37,19535,1247],{"class":50},[37,19537,1269],{"class":54},[37,19539,19540],{"class":39,"line":8055},[37,19541,1637],{"class":54},[37,19543,19544],{"class":39,"line":8082},[37,19545,19546],{"class":43},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[37,19548,19549],{"class":39,"line":8087},[37,19550,19551],{"class":43},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[37,19553,19554,19556,19559,19561,19563,19565],{"class":39,"line":8093},[37,19555,5436],{"class":50},[37,19557,19558],{"class":2035}," doWork",[37,19560,208],{"class":54},[37,19562,19118],{"class":2035},[37,19564,6897],{"class":5288},[37,19566,214],{"class":54},[37,19568,19569],{"class":39,"line":8105},[37,19570,1618],{"class":54},[37,19572,19573,19575,19577,19580,19582],{"class":39,"line":8117},[37,19574,6601],{"class":54},[37,19576,1247],{"class":50},[37,19578,19579],{"class":309}," \"doWork函数调用\"",[37,19581,1517],{"class":50},[37,19583,8912],{"class":54},[37,19585,19586],{"class":39,"line":8129},[37,19587,1637],{"class":54},[37,19589,19590,19592,19594],{"class":39,"line":9788},[37,19591,5436],{"class":50},[37,19593,5729],{"class":2035},[37,19595,2048],{"class":54},[37,19597,19598],{"class":39,"line":9813},[37,19599,1618],{"class":54},[37,19601,19602],{"class":39,"line":9836},[37,19603,15385],{"class":54},[37,19605,19606,19609],{"class":39,"line":9860},[37,19607,19608],{"class":2035},"    doWork",[37,19610,19611],{"class":54},"(p);\n",[37,19613,19614],{"class":39,"line":9865},[37,19615,1637],{"class":54},[37,19617,19618],{"class":39,"line":9870},[37,19619,19620],{"class":43},"\u002F\u002F 3.以值方式返回局部对象\n",[37,19622,19623,19625,19628],{"class":39,"line":9875},[37,19624,19118],{"class":2035},[37,19626,19627],{"class":2035}," doWork2",[37,19629,2048],{"class":54},[37,19631,19632],{"class":39,"line":9884},[37,19633,1618],{"class":54},[37,19635,19636],{"class":39,"line":9889},[37,19637,19108],{"class":54},[37,19639,19640,19642,19644,19646,19648,19650,19652,19654,19656,19658,19660],{"class":39,"line":9895},[37,19641,1623],{"class":54},[37,19643,1247],{"class":50},[37,19645,208],{"class":54},[37,19647,211],{"class":50},[37,19649,6590],{"class":50},[37,19651,86],{"class":54},[37,19653,558],{"class":50},[37,19655,7202],{"class":54},[37,19657,1247],{"class":50},[37,19659,1312],{"class":54},[37,19661,19662],{"class":43},"\u002F\u002F打印p1的地址\n",[37,19664,19665,19667,19670],{"class":39,"line":9916},[37,19666,4162],{"class":50},[37,19668,19669],{"class":54}," p1;",[37,19671,19672],{"class":43},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[37,19674,19675],{"class":39,"line":9922},[37,19676,1637],{"class":54},[37,19678,19679,19681,19683],{"class":39,"line":9936},[37,19680,5436],{"class":50},[37,19682,5801],{"class":2035},[37,19684,2048],{"class":54},[37,19686,19687],{"class":39,"line":9942},[37,19688,1618],{"class":54},[37,19690,19691,19694,19696,19698],{"class":39,"line":9969},[37,19692,19693],{"class":54},"    Person p ",[37,19695,70],{"class":50},[37,19697,19627],{"class":2035},[37,19699,5708],{"class":54},[37,19701,19702,19704,19706,19708,19710,19712,19714,19716,19718,19720,19722],{"class":39,"line":9978},[37,19703,1623],{"class":54},[37,19705,1247],{"class":50},[37,19707,208],{"class":54},[37,19709,211],{"class":50},[37,19711,6590],{"class":50},[37,19713,86],{"class":54},[37,19715,558],{"class":50},[37,19717,14],{"class":54},[37,19719,1247],{"class":50},[37,19721,1312],{"class":54},[37,19723,19724],{"class":43},"\u002F\u002F打印p的地址\n",[37,19726,19727],{"class":39,"line":9984},[37,19728,1637],{"class":54},[37,19730,19731],{"class":39,"line":9992},[37,19732,2472],{"emptyLinePlaceholder":131},[37,19734,19735],{"class":39,"line":9997},[37,19736,2472],{"emptyLinePlaceholder":131},[37,19738,19739,19741,19743],{"class":39,"line":16676},[37,19740,211],{"class":50},[37,19742,2045],{"class":2035},[37,19744,2048],{"class":54},[37,19746,19747],{"class":39,"line":16682},[37,19748,1618],{"class":54},[37,19750,19751],{"class":39,"line":16705},[37,19752,19753],{"class":43},"    \u002F\u002F test01();\n",[37,19755,19756],{"class":39,"line":16711},[37,19757,19758],{"class":43},"    \u002F\u002F test02();\n",[37,19760,19761,19764],{"class":39,"line":16734},[37,19762,19763],{"class":2035},"    test03",[37,19765,5708],{"class":54},[37,19767,19768],{"class":39,"line":16748},[37,19769,19770],{"class":43},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[37,19772,19773],{"class":39,"line":16768},[37,19774,19775],{"class":43},"\u002F\u002F 输出结果如下：\n",[37,19777,19778],{"class":39,"line":16774},[37,19779,19780],{"class":43},"\u002F\u002F Person的默认构造函数调用\n",[37,19782,19783],{"class":39,"line":16785},[37,19784,19785],{"class":43},"\u002F\u002F 0x7fffffffceec\n",[37,19787,19788],{"class":39,"line":16808},[37,19789,19785],{"class":43},[37,19791,19792],{"class":39,"line":16830},[37,19793,19794],{"class":43},"\u002F\u002F Person的析构函数调用\n",[37,19796,19797],{"class":39,"line":16835},[37,19798,2472],{"emptyLinePlaceholder":131},[37,19800,19801],{"class":39,"line":16841},[37,19802,19803],{"class":43},"\u002F\u002F 之前的输出结果如下：\n",[37,19805,19806],{"class":39,"line":16855},[37,19807,19780],{"class":43},[37,19809,19810],{"class":39,"line":16868},[37,19811,19812],{"class":43},"\u002F\u002F 地址\n",[37,19814,19815],{"class":39,"line":16873},[37,19816,19817],{"class":43},"\u002F\u002F Person的拷贝构造函数调用\n",[37,19819,19820],{"class":39,"line":16887},[37,19821,19794],{"class":43},[37,19823,19824],{"class":39,"line":16892},[37,19825,19812],{"class":43},[37,19827,19828],{"class":39,"line":16898},[37,19829,19830],{"class":43},"\u002F\u002F (这两次输出的地址也是不同的) \n",[37,19832,19833],{"class":39,"line":16903},[37,19834,19835],{"class":43},"\u002F\u002F Person的析构函数调用     \n",[37,19837,19838,19840,19842],{"class":39,"line":16917},[37,19839,4162],{"class":50},[37,19841,4165],{"class":82},[37,19843,1364],{"class":54},[37,19845,19846],{"class":39,"line":16922},[37,19847,1637],{"class":54},[14,19849,19850],{},"简化版理解",[27,19852,19854],{"className":196,"code":19853,"language":198,"meta":32,"style":32},"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",[34,19855,19856,19864,19868,19874,19887,19898,19902,19914,19927,19935,19939,19955,19968,19977,19981,19986,19992,20005,20009,20013,20020,20024,20028,20033,20041,20045,20061,20074,20087,20091,20096,20104,20108,20112,20117,20122,20138,20146,20153,20159,20163,20167,20172,20180,20184,20188,20211,20218,20222,20226,20234,20238,20248,20270,20274,20278,20282,20290,20294,20299,20304,20310,20314,20324,20328,20336],{"__ignoreMap":32},[37,19857,19858,19860,19862],{"class":39,"line":40},[37,19859,14766],{"class":50},[37,19861,15641],{"class":2035},[37,19863,15644],{"class":54},[37,19865,19866],{"class":39,"line":47},[37,19867,14788],{"class":50},[37,19869,19870,19872],{"class":39,"line":58},[37,19871,18591],{"class":2035},[37,19873,10925],{"class":54},[37,19875,19876,19878,19880,19883,19885],{"class":39,"line":64},[37,19877,9741],{"class":54},[37,19879,1247],{"class":50},[37,19881,19882],{"class":309}," \"无参构造函数!\"",[37,19884,1517],{"class":50},[37,19886,8912],{"class":54},[37,19888,19889,19892,19894,19896],{"class":39,"line":76},[37,19890,19891],{"class":54},"        mAge ",[37,19893,70],{"class":50},[37,19895,4165],{"class":82},[37,19897,1364],{"class":54},[37,19899,19900],{"class":39,"line":92},[37,19901,2259],{"class":54},[37,19903,19904,19906,19908,19910,19912],{"class":39,"line":97},[37,19905,18591],{"class":2035},[37,19907,208],{"class":54},[37,19909,211],{"class":50},[37,19911,15761],{"class":5288},[37,19913,12514],{"class":54},[37,19915,19916,19918,19920,19923,19925],{"class":39,"line":107},[37,19917,9741],{"class":54},[37,19919,1247],{"class":50},[37,19921,19922],{"class":309}," \"有参构造函数!\"",[37,19924,1517],{"class":50},[37,19926,8912],{"class":54},[37,19928,19929,19931,19933],{"class":39,"line":1390},[37,19930,19891],{"class":54},[37,19932,70],{"class":50},[37,19934,7869],{"class":54},[37,19936,19937],{"class":39,"line":1402},[37,19938,2259],{"class":54},[37,19940,19941,19943,19945,19947,19949,19951,19953],{"class":39,"line":1684},[37,19942,18591],{"class":2035},[37,19944,208],{"class":54},[37,19946,6864],{"class":50},[37,19948,15641],{"class":2035},[37,19950,558],{"class":50},[37,19952,6897],{"class":5288},[37,19954,12514],{"class":54},[37,19956,19957,19959,19961,19964,19966],{"class":39,"line":1689},[37,19958,9741],{"class":54},[37,19960,1247],{"class":50},[37,19962,19963],{"class":309}," \"拷贝构造函数!\"",[37,19965,1517],{"class":50},[37,19967,8912],{"class":54},[37,19969,19970,19972,19974],{"class":39,"line":1695},[37,19971,19891],{"class":54},[37,19973,70],{"class":50},[37,19975,19976],{"class":54}," p.mAge;\n",[37,19978,19979],{"class":39,"line":1700},[37,19980,2259],{"class":54},[37,19982,19983],{"class":39,"line":1714},[37,19984,19985],{"class":43},"    \u002F\u002F析构函数在释放内存之前调用\n",[37,19987,19988,19990],{"class":39,"line":1719},[37,19989,18624],{"class":2035},[37,19991,10925],{"class":54},[37,19993,19994,19996,19998,20001,20003],{"class":39,"line":1725},[37,19995,9741],{"class":54},[37,19997,1247],{"class":50},[37,19999,20000],{"class":309}," \"析构函数!\"",[37,20002,1517],{"class":50},[37,20004,8912],{"class":54},[37,20006,20007],{"class":39,"line":1746},[37,20008,2259],{"class":54},[37,20010,20011],{"class":39,"line":1751},[37,20012,14788],{"class":50},[37,20014,20015,20017],{"class":39,"line":1765},[37,20016,2057],{"class":50},[37,20018,20019],{"class":54}," mAge;\n",[37,20021,20022],{"class":39,"line":1770},[37,20023,4067],{"class":54},[37,20025,20026],{"class":39,"line":1799},[37,20027,2472],{"emptyLinePlaceholder":131},[37,20029,20030],{"class":39,"line":1804},[37,20031,20032],{"class":43},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[37,20034,20035,20037,20039],{"class":39,"line":1821},[37,20036,5436],{"class":50},[37,20038,5660],{"class":2035},[37,20040,10925],{"class":54},[37,20042,20043],{"class":39,"line":1826},[37,20044,2472],{"emptyLinePlaceholder":131},[37,20046,20047,20049,20052,20054,20056,20058],{"class":39,"line":1831},[37,20048,19503],{"class":54},[37,20050,20051],{"class":2035},"man",[37,20053,208],{"class":54},[37,20055,516],{"class":82},[37,20057,6038],{"class":54},[37,20059,20060],{"class":43}," \u002F\u002Fp对象已经创建完毕\n",[37,20062,20063,20065,20068,20071],{"class":39,"line":1836},[37,20064,19503],{"class":54},[37,20066,20067],{"class":2035},"newman",[37,20069,20070],{"class":54},"(man);",[37,20072,20073],{"class":43}," \u002F\u002F调用拷贝构造函数\n",[37,20075,20076,20079,20081,20084],{"class":39,"line":1850},[37,20077,20078],{"class":54},"    Person newman2 ",[37,20080,70],{"class":50},[37,20082,20083],{"class":54}," man;",[37,20085,20086],{"class":43}," \u002F\u002F拷贝构造\n",[37,20088,20089],{"class":39,"line":1855},[37,20090,2472],{"emptyLinePlaceholder":131},[37,20092,20093],{"class":39,"line":2649},[37,20094,20095],{"class":43},"    \u002F\u002FPerson newman3;\n",[37,20097,20098,20101],{"class":39,"line":2663},[37,20099,20100],{"class":43},"    \u002F\u002Fnewman3 = man;",[37,20102,20103],{"class":43}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[37,20105,20106],{"class":39,"line":2671},[37,20107,1637],{"class":54},[37,20109,20110],{"class":39,"line":2676},[37,20111,2472],{"emptyLinePlaceholder":131},[37,20113,20114],{"class":39,"line":2682},[37,20115,20116],{"class":43},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[37,20118,20119],{"class":39,"line":2688},[37,20120,20121],{"class":43},"\u002F\u002F相当于Person p1 = p;\n",[37,20123,20124,20126,20128,20130,20132,20135],{"class":39,"line":2693},[37,20125,5436],{"class":50},[37,20127,19558],{"class":2035},[37,20129,208],{"class":54},[37,20131,19118],{"class":2035},[37,20133,20134],{"class":5288}," p1",[37,20136,20137],{"class":54},") {}\n",[37,20139,20140,20142,20144],{"class":39,"line":8020},[37,20141,5436],{"class":50},[37,20143,5729],{"class":2035},[37,20145,10925],{"class":54},[37,20147,20148,20150],{"class":39,"line":8044},[37,20149,18676],{"class":54},[37,20151,20152],{"class":43}," \u002F\u002F无参构造函数\n",[37,20154,20155,20157],{"class":39,"line":8049},[37,20156,19608],{"class":2035},[37,20158,19611],{"class":54},[37,20160,20161],{"class":39,"line":8055},[37,20162,1637],{"class":54},[37,20164,20165],{"class":39,"line":8082},[37,20166,2472],{"emptyLinePlaceholder":131},[37,20168,20169],{"class":39,"line":8087},[37,20170,20171],{"class":43},"\u002F\u002F3. 以值方式返回局部对象\n",[37,20173,20174,20176,20178],{"class":39,"line":8093},[37,20175,19118],{"class":2035},[37,20177,19627],{"class":2035},[37,20179,2048],{"class":54},[37,20181,20182],{"class":39,"line":8105},[37,20183,1618],{"class":54},[37,20185,20186],{"class":39,"line":8117},[37,20187,19108],{"class":54},[37,20189,20190,20192,20194,20196,20198,20200,20202,20204,20207,20209],{"class":39,"line":8129},[37,20191,6601],{"class":54},[37,20193,1247],{"class":50},[37,20195,1730],{"class":54},[37,20197,211],{"class":50},[37,20199,6590],{"class":50},[37,20201,86],{"class":54},[37,20203,558],{"class":50},[37,20205,20206],{"class":54},"p1 ",[37,20208,1247],{"class":50},[37,20210,8912],{"class":54},[37,20212,20213,20215],{"class":39,"line":9788},[37,20214,4162],{"class":50},[37,20216,20217],{"class":54}," p1;\n",[37,20219,20220],{"class":39,"line":9813},[37,20221,1637],{"class":54},[37,20223,20224],{"class":39,"line":9836},[37,20225,2472],{"emptyLinePlaceholder":131},[37,20227,20228,20230,20232],{"class":39,"line":9860},[37,20229,5436],{"class":50},[37,20231,5801],{"class":2035},[37,20233,2048],{"class":54},[37,20235,20236],{"class":39,"line":9865},[37,20237,1618],{"class":54},[37,20239,20240,20242,20244,20246],{"class":39,"line":9870},[37,20241,19693],{"class":54},[37,20243,70],{"class":50},[37,20245,19627],{"class":2035},[37,20247,5708],{"class":54},[37,20249,20250,20252,20254,20256,20258,20260,20262,20264,20266,20268],{"class":39,"line":9875},[37,20251,6601],{"class":54},[37,20253,1247],{"class":50},[37,20255,1730],{"class":54},[37,20257,211],{"class":50},[37,20259,6590],{"class":50},[37,20261,86],{"class":54},[37,20263,558],{"class":50},[37,20265,11520],{"class":54},[37,20267,1247],{"class":50},[37,20269,8912],{"class":54},[37,20271,20272],{"class":39,"line":9884},[37,20273,1637],{"class":54},[37,20275,20276],{"class":39,"line":9889},[37,20277,2472],{"emptyLinePlaceholder":131},[37,20279,20280],{"class":39,"line":9895},[37,20281,2472],{"emptyLinePlaceholder":131},[37,20283,20284,20286,20288],{"class":39,"line":9916},[37,20285,211],{"class":50},[37,20287,2045],{"class":2035},[37,20289,10925],{"class":54},[37,20291,20292],{"class":39,"line":9922},[37,20293,2472],{"emptyLinePlaceholder":131},[37,20295,20296],{"class":39,"line":9936},[37,20297,20298],{"class":43},"    \u002F\u002Ftest01();\n",[37,20300,20301],{"class":39,"line":9942},[37,20302,20303],{"class":43},"    \u002F\u002Ftest02();\n",[37,20305,20306,20308],{"class":39,"line":9969},[37,20307,19763],{"class":2035},[37,20309,5708],{"class":54},[37,20311,20312],{"class":39,"line":9978},[37,20313,2472],{"emptyLinePlaceholder":131},[37,20315,20316,20318,20320,20322],{"class":39,"line":9984},[37,20317,2375],{"class":2035},[37,20319,208],{"class":54},[37,20321,2380],{"class":309},[37,20323,2791],{"class":54},[37,20325,20326],{"class":39,"line":9992},[37,20327,2472],{"emptyLinePlaceholder":131},[37,20329,20330,20332,20334],{"class":39,"line":9997},[37,20331,4162],{"class":50},[37,20333,4165],{"class":82},[37,20335,1364],{"class":54},[37,20337,20338],{"class":39,"line":16676},[37,20339,1637],{"class":54},[175,20341,20343],{"id":20342},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,20345,20346],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,20348,20349],{},"1．默认构造函数(无参，函数体为空)",[14,20351,20352],{},"2．默认析构函数(无参，函数体为空)",[14,20354,20355],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,20357,20358],{},"构造函数调用规则如下：",[1210,20360,20361,20364],{},[161,20362,20363],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[161,20365,20366],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[27,20368,20370],{"className":196,"code":20369,"language":198,"meta":32,"style":32},"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",[34,20371,20372,20380,20384,20389,20395,20407,20411,20416,20428,20437,20449,20453,20457,20473,20482,20494,20498,20502,20508,20520,20524,20528,20534,20538,20542,20550,20554,20566,20571,20579,20583,20601,20605,20609,20617,20621,20626,20634,20649,20662,20666,20671,20678,20694,20707,20711,20715,20723,20727,20733,20737,20747,20751,20759],{"__ignoreMap":32},[37,20373,20374,20376,20378],{"class":39,"line":40},[37,20375,14766],{"class":50},[37,20377,15641],{"class":2035},[37,20379,15644],{"class":54},[37,20381,20382],{"class":39,"line":47},[37,20383,14788],{"class":50},[37,20385,20386],{"class":39,"line":58},[37,20387,20388],{"class":43},"    \u002F\u002F无参（默认）构造函数\n",[37,20390,20391,20393],{"class":39,"line":64},[37,20392,18591],{"class":2035},[37,20394,10925],{"class":54},[37,20396,20397,20399,20401,20403,20405],{"class":39,"line":76},[37,20398,9741],{"class":54},[37,20400,1247],{"class":50},[37,20402,19882],{"class":309},[37,20404,1517],{"class":50},[37,20406,8912],{"class":54},[37,20408,20409],{"class":39,"line":92},[37,20410,2259],{"class":54},[37,20412,20413],{"class":39,"line":97},[37,20414,20415],{"class":43},"    \u002F\u002F有参构造函数\n",[37,20417,20418,20420,20422,20424,20426],{"class":39,"line":107},[37,20419,18591],{"class":2035},[37,20421,208],{"class":54},[37,20423,211],{"class":50},[37,20425,1471],{"class":5288},[37,20427,12514],{"class":54},[37,20429,20430,20433,20435],{"class":39,"line":1390},[37,20431,20432],{"class":54},"        age ",[37,20434,70],{"class":50},[37,20436,1505],{"class":54},[37,20438,20439,20441,20443,20445,20447],{"class":39,"line":1402},[37,20440,9741],{"class":54},[37,20442,1247],{"class":50},[37,20444,19922],{"class":309},[37,20446,1517],{"class":50},[37,20448,8912],{"class":54},[37,20450,20451],{"class":39,"line":1684},[37,20452,2259],{"class":54},[37,20454,20455],{"class":39,"line":1689},[37,20456,18946],{"class":43},[37,20458,20459,20461,20463,20465,20467,20469,20471],{"class":39,"line":1695},[37,20460,18591],{"class":2035},[37,20462,208],{"class":54},[37,20464,6864],{"class":50},[37,20466,15641],{"class":2035},[37,20468,558],{"class":50},[37,20470,6897],{"class":5288},[37,20472,12514],{"class":54},[37,20474,20475,20477,20479],{"class":39,"line":1700},[37,20476,20432],{"class":54},[37,20478,70],{"class":50},[37,20480,20481],{"class":54}," p.age;\n",[37,20483,20484,20486,20488,20490,20492],{"class":39,"line":1714},[37,20485,9741],{"class":54},[37,20487,1247],{"class":50},[37,20489,19963],{"class":309},[37,20491,1517],{"class":50},[37,20493,8912],{"class":54},[37,20495,20496],{"class":39,"line":1719},[37,20497,2259],{"class":54},[37,20499,20500],{"class":39,"line":1725},[37,20501,18619],{"class":43},[37,20503,20504,20506],{"class":39,"line":1746},[37,20505,18624],{"class":2035},[37,20507,10925],{"class":54},[37,20509,20510,20512,20514,20516,20518],{"class":39,"line":1751},[37,20511,9741],{"class":54},[37,20513,1247],{"class":50},[37,20515,20000],{"class":309},[37,20517,1517],{"class":50},[37,20519,8912],{"class":54},[37,20521,20522],{"class":39,"line":1765},[37,20523,2259],{"class":54},[37,20525,20526],{"class":39,"line":1770},[37,20527,14788],{"class":50},[37,20529,20530,20532],{"class":39,"line":1799},[37,20531,2057],{"class":50},[37,20533,7869],{"class":54},[37,20535,20536],{"class":39,"line":1804},[37,20537,4067],{"class":54},[37,20539,20540],{"class":39,"line":1821},[37,20541,2472],{"emptyLinePlaceholder":131},[37,20543,20544,20546,20548],{"class":39,"line":1826},[37,20545,5436],{"class":50},[37,20547,5660],{"class":2035},[37,20549,2048],{"class":54},[37,20551,20552],{"class":39,"line":1831},[37,20553,1618],{"class":54},[37,20555,20556,20558,20560,20562,20564],{"class":39,"line":1836},[37,20557,19503],{"class":54},[37,20559,7202],{"class":2035},[37,20561,208],{"class":54},[37,20563,853],{"class":82},[37,20565,2791],{"class":54},[37,20567,20568],{"class":39,"line":1850},[37,20569,20570],{"class":43},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[37,20572,20573,20575,20577],{"class":39,"line":1855},[37,20574,19503],{"class":54},[37,20576,7105],{"class":2035},[37,20578,17587],{"class":54},[37,20580,20581],{"class":39,"line":2649},[37,20582,2472],{"emptyLinePlaceholder":131},[37,20584,20585,20587,20589,20592,20594,20597,20599],{"class":39,"line":2663},[37,20586,6601],{"class":54},[37,20588,1247],{"class":50},[37,20590,20591],{"class":309}," \"p2的年龄为： \"",[37,20593,1517],{"class":50},[37,20595,20596],{"class":54}," p2.age ",[37,20598,1247],{"class":50},[37,20600,8912],{"class":54},[37,20602,20603],{"class":39,"line":2671},[37,20604,1637],{"class":54},[37,20606,20607],{"class":39,"line":2676},[37,20608,2472],{"emptyLinePlaceholder":131},[37,20610,20611,20613,20615],{"class":39,"line":2682},[37,20612,5436],{"class":50},[37,20614,5729],{"class":2035},[37,20616,2048],{"class":54},[37,20618,20619],{"class":39,"line":2688},[37,20620,1618],{"class":54},[37,20622,20623],{"class":39,"line":2693},[37,20624,20625],{"class":43},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[37,20627,20628,20631],{"class":39,"line":8020},[37,20629,20630],{"class":54},"    Person p1;",[37,20632,20633],{"class":43}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[37,20635,20636,20638,20640,20642,20644,20646],{"class":39,"line":8044},[37,20637,19503],{"class":54},[37,20639,7105],{"class":2035},[37,20641,208],{"class":54},[37,20643,650],{"class":82},[37,20645,6038],{"class":54},[37,20647,20648],{"class":43}," \u002F\u002F用户提供的有参\n",[37,20650,20651,20653,20656,20659],{"class":39,"line":8049},[37,20652,19503],{"class":54},[37,20654,20655],{"class":2035},"p3",[37,20657,20658],{"class":54},"(p2);",[37,20660,20661],{"class":43}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[37,20663,20664],{"class":39,"line":8055},[37,20665,2472],{"emptyLinePlaceholder":131},[37,20667,20668],{"class":39,"line":8082},[37,20669,20670],{"class":43},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[37,20672,20673,20676],{"class":39,"line":8087},[37,20674,20675],{"class":54},"    Person p4;",[37,20677,20633],{"class":43},[37,20679,20680,20682,20685,20687,20689,20691],{"class":39,"line":8093},[37,20681,19503],{"class":54},[37,20683,20684],{"class":2035},"p5",[37,20686,208],{"class":54},[37,20688,650],{"class":82},[37,20690,6038],{"class":54},[37,20692,20693],{"class":43}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[37,20695,20696,20698,20701,20704],{"class":39,"line":8105},[37,20697,19503],{"class":54},[37,20699,20700],{"class":2035},"p6",[37,20702,20703],{"class":54},"(p5);",[37,20705,20706],{"class":43}," \u002F\u002F用户自己提供拷贝构造\n",[37,20708,20709],{"class":39,"line":8117},[37,20710,1637],{"class":54},[37,20712,20713],{"class":39,"line":8129},[37,20714,2472],{"emptyLinePlaceholder":131},[37,20716,20717,20719,20721],{"class":39,"line":9788},[37,20718,211],{"class":50},[37,20720,2045],{"class":2035},[37,20722,10925],{"class":54},[37,20724,20725],{"class":39,"line":9813},[37,20726,2472],{"emptyLinePlaceholder":131},[37,20728,20729,20731],{"class":39,"line":9836},[37,20730,5705],{"class":2035},[37,20732,5708],{"class":54},[37,20734,20735],{"class":39,"line":9860},[37,20736,2472],{"emptyLinePlaceholder":131},[37,20738,20739,20741,20743,20745],{"class":39,"line":9865},[37,20740,2375],{"class":2035},[37,20742,208],{"class":54},[37,20744,2380],{"class":309},[37,20746,2791],{"class":54},[37,20748,20749],{"class":39,"line":9870},[37,20750,2472],{"emptyLinePlaceholder":131},[37,20752,20753,20755,20757],{"class":39,"line":9875},[37,20754,4162],{"class":50},[37,20756,4165],{"class":82},[37,20758,1364],{"class":54},[37,20760,20761],{"class":39,"line":9884},[37,20762,1637],{"class":54},[175,20764,20766],{"id":20765},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,20768,20769],{},"浅拷贝：简单的赋值拷贝操作",[14,20771,20772],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[27,20774,20776],{"className":196,"code":20775,"language":198,"meta":32,"style":32},"#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",[34,20777,20778,20784,20794,20800,20804,20808,20813,20819,20823,20836,20840,20844,20851,20855,20865,20880,20893,20897,20902,20907,20923,20927,20940,20945,20950,20955,20964,20969,20984,20988,20992,20996,21002,21006,21011,21026,21030,21041,21055,21059,21068,21072,21078,21090,21094,21102,21106,21123,21154,21162,21190,21194,21198,21206,21210,21216],{"__ignoreMap":32},[37,20779,20780,20782],{"class":39,"line":40},[37,20781,2021],{"class":50},[37,20783,2024],{"class":309},[37,20785,20786,20788,20790,20792],{"class":39,"line":47},[37,20787,2029],{"class":50},[37,20789,2032],{"class":50},[37,20791,2036],{"class":2035},[37,20793,1364],{"class":54},[37,20795,20796,20798],{"class":39,"line":58},[37,20797,14766],{"class":50},[37,20799,15243],{"class":2035},[37,20801,20802],{"class":39,"line":64},[37,20803,1618],{"class":54},[37,20805,20806],{"class":39,"line":76},[37,20807,14788],{"class":50},[37,20809,20810],{"class":39,"line":92},[37,20811,20812],{"class":43},"    \u002F\u002F默认构造函数\n",[37,20814,20815,20817],{"class":39,"line":97},[37,20816,18591],{"class":2035},[37,20818,2048],{"class":54},[37,20820,20821],{"class":39,"line":107},[37,20822,2102],{"class":54},[37,20824,20825,20827,20829,20832,20834],{"class":39,"line":1390},[37,20826,3523],{"class":54},[37,20828,1247],{"class":50},[37,20830,20831],{"class":309},"\"默认构造函数\"",[37,20833,1247],{"class":50},[37,20835,1269],{"class":54},[37,20837,20838],{"class":39,"line":1402},[37,20839,2259],{"class":54},[37,20841,20842],{"class":39,"line":1684},[37,20843,20415],{"class":43},[37,20845,20846,20848],{"class":39,"line":1689},[37,20847,18624],{"class":2035},[37,20849,20850],{"class":54},"(int age,int height)\n",[37,20852,20853],{"class":39,"line":1695},[37,20854,2102],{"class":54},[37,20856,20857,20860,20862],{"class":39,"line":1700},[37,20858,20859],{"class":54},"        m_Age",[37,20861,70],{"class":50},[37,20863,20864],{"class":54},"age;\n",[37,20866,20867,20870,20872,20874,20877],{"class":39,"line":1714},[37,20868,20869],{"class":54},"        m_Height",[37,20871,11789],{"class":50},[37,20873,2454],{"class":50},[37,20875,20876],{"class":54},"(height);",[37,20878,20879],{"class":43},"\u002F\u002F放到堆区\n",[37,20881,20882,20884,20886,20889,20891],{"class":39,"line":1719},[37,20883,3523],{"class":54},[37,20885,1247],{"class":50},[37,20887,20888],{"class":309},"\"有参构造函数\"",[37,20890,1247],{"class":50},[37,20892,1269],{"class":54},[37,20894,20895],{"class":39,"line":1725},[37,20896,2259],{"class":54},[37,20898,20899],{"class":39,"line":1746},[37,20900,20901],{"class":43},"    \u002F\u002F深拷贝解决上述问题\n",[37,20903,20904],{"class":39,"line":1751},[37,20905,20906],{"class":43},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[37,20908,20909,20911,20913,20915,20917,20919,20921],{"class":39,"line":1765},[37,20910,18591],{"class":2035},[37,20912,208],{"class":54},[37,20914,6864],{"class":50},[37,20916,15641],{"class":2035},[37,20918,10656],{"class":50},[37,20920,14],{"class":5288},[37,20922,214],{"class":54},[37,20924,20925],{"class":39,"line":1770},[37,20926,2102],{"class":54},[37,20928,20929,20931,20933,20936,20938],{"class":39,"line":1799},[37,20930,3523],{"class":54},[37,20932,1247],{"class":50},[37,20934,20935],{"class":309},"\"拷贝构造函数\"",[37,20937,1247],{"class":50},[37,20939,1269],{"class":54},[37,20941,20942],{"class":39,"line":1804},[37,20943,20944],{"class":43},"        \u002F\u002F编译器默认的写如下注释部分\n",[37,20946,20947],{"class":39,"line":1821},[37,20948,20949],{"class":43},"        \u002F\u002Fm_Age=p.m_Age;\n",[37,20951,20952],{"class":39,"line":1826},[37,20953,20954],{"class":43},"        \u002F\u002Fm_Height=p.m_Height;\n",[37,20956,20957,20959,20961],{"class":39,"line":1831},[37,20958,20859],{"class":54},[37,20960,70],{"class":50},[37,20962,20963],{"class":54},"p.m_Age;\n",[37,20965,20966],{"class":39,"line":1836},[37,20967,20968],{"class":43},"        \u002F\u002F深拷贝操作\n",[37,20970,20971,20973,20975,20977,20979,20981],{"class":39,"line":1850},[37,20972,20869],{"class":54},[37,20974,11789],{"class":50},[37,20976,2454],{"class":50},[37,20978,208],{"class":54},[37,20980,659],{"class":50},[37,20982,20983],{"class":54},"p.m_Height);\n",[37,20985,20986],{"class":39,"line":1855},[37,20987,2259],{"class":54},[37,20989,20990],{"class":39,"line":2649},[37,20991,2472],{"emptyLinePlaceholder":131},[37,20993,20994],{"class":39,"line":2663},[37,20995,18619],{"class":43},[37,20997,20998,21000],{"class":39,"line":2671},[37,20999,18624],{"class":2035},[37,21001,2048],{"class":54},[37,21003,21004],{"class":39,"line":2676},[37,21005,2102],{"class":54},[37,21007,21008],{"class":39,"line":2682},[37,21009,21010],{"class":43},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[37,21012,21013,21015,21018,21021,21024],{"class":39,"line":2688},[37,21014,2569],{"class":50},[37,21016,21017],{"class":54},"(m_Height ",[37,21019,21020],{"class":50},"!=",[37,21022,21023],{"class":82}," NULL",[37,21025,214],{"class":54},[37,21027,21028],{"class":39,"line":2693},[37,21029,2582],{"class":54},[37,21031,21032,21035,21038],{"class":39,"line":8020},[37,21033,21034],{"class":50},"            delete",[37,21036,21037],{"class":54}," m_Height;",[37,21039,21040],{"class":43}," \u002F\u002F释放堆区内存\n",[37,21042,21043,21046,21048,21050,21052],{"class":39,"line":8044},[37,21044,21045],{"class":54},"            m_Height",[37,21047,70],{"class":50},[37,21049,2464],{"class":82},[37,21051,261],{"class":54},[37,21053,21054],{"class":43}," \u002F\u002F防止野指针\n",[37,21056,21057],{"class":39,"line":8049},[37,21058,2601],{"class":54},[37,21060,21061,21063,21065],{"class":39,"line":8055},[37,21062,3523],{"class":54},[37,21064,1247],{"class":50},[37,21066,21067],{"class":309},"\"Person的析构函数调用\"\n",[37,21069,21070],{"class":39,"line":8082},[37,21071,2259],{"class":54},[37,21073,21074,21076],{"class":39,"line":8087},[37,21075,2057],{"class":50},[37,21077,15738],{"class":54},[37,21079,21080,21082,21084,21087],{"class":39,"line":8093},[37,21081,2057],{"class":50},[37,21083,6590],{"class":50},[37,21085,21086],{"class":54},"m_Height;",[37,21088,21089],{"class":43}," \u002F\u002F定义一个指针，指向身高\n",[37,21091,21092],{"class":39,"line":8105},[37,21093,4067],{"class":54},[37,21095,21096,21098,21100],{"class":39,"line":8117},[37,21097,5436],{"class":50},[37,21099,5660],{"class":2035},[37,21101,2048],{"class":54},[37,21103,21104],{"class":39,"line":8129},[37,21105,1618],{"class":54},[37,21107,21108,21110,21112,21114,21116,21118,21121],{"class":39,"line":9788},[37,21109,19503],{"class":54},[37,21111,7202],{"class":2035},[37,21113,208],{"class":54},[37,21115,853],{"class":82},[37,21117,583],{"class":54},[37,21119,21120],{"class":82},"160",[37,21122,2791],{"class":54},[37,21124,21125,21127,21129,21132,21134,21137,21139,21142,21144,21147,21149,21151],{"class":39,"line":9813},[37,21126,1623],{"class":54},[37,21128,1247],{"class":50},[37,21130,21131],{"class":309},"\"p1的年龄为:\"",[37,21133,1247],{"class":50},[37,21135,21136],{"class":54},"p1.m_Age",[37,21138,1247],{"class":50},[37,21140,21141],{"class":309},"\"身高为：\"",[37,21143,6491],{"class":50},[37,21145,21146],{"class":54},"p1.m_Height",[37,21148,1247],{"class":50},[37,21150,1312],{"class":54},[37,21152,21153],{"class":43},"  \u002F\u002F18\n",[37,21155,21156,21158,21160],{"class":39,"line":9836},[37,21157,19503],{"class":54},[37,21159,7105],{"class":2035},[37,21161,17587],{"class":54},[37,21163,21164,21166,21168,21171,21173,21175,21177,21179,21181,21184,21186,21188],{"class":39,"line":9860},[37,21165,1623],{"class":54},[37,21167,1247],{"class":50},[37,21169,21170],{"class":309},"\"p2的年龄为：\"",[37,21172,1247],{"class":50},[37,21174,19533],{"class":54},[37,21176,1247],{"class":50},[37,21178,21141],{"class":309},[37,21180,6491],{"class":50},[37,21182,21183],{"class":54},"p2.m_Height",[37,21185,1247],{"class":50},[37,21187,1312],{"class":54},[37,21189,21153],{"class":43},[37,21191,21192],{"class":39,"line":9865},[37,21193,13282],{"class":54},[37,21195,21196],{"class":39,"line":9870},[37,21197,1637],{"class":54},[37,21199,21200,21202,21204],{"class":39,"line":9875},[37,21201,211],{"class":50},[37,21203,2045],{"class":2035},[37,21205,2048],{"class":54},[37,21207,21208],{"class":39,"line":9884},[37,21209,1618],{"class":54},[37,21211,21212,21214],{"class":39,"line":9889},[37,21213,5705],{"class":2035},[37,21215,5708],{"class":54},[37,21217,21218],{"class":39,"line":9895},[37,21219,1637],{"class":54},[14,21221,21222],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21224,21225],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21227,21228],{},[119,21229],{"alt":32,"src":21230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21232,21233],{},"浅拷贝问题要使用深拷贝来解决",[14,21235,21236],{},[119,21237],{"alt":32,"src":21238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21240,21241],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[175,21243,21245],{"id":21244},"_826初始化列表","8.2.6初始化列表",[14,21247,21248],{},"作用：初始化属性",[14,21250,5253],{},[27,21252,21255],{"className":21253,"code":21254,"language":5259},[5257],"构造函数():属性1(值1),属性2(值2).....{}\n",[34,21256,21254],{"__ignoreMap":32},[14,21258,21259],{},"例子",[27,21261,21263],{"className":196,"code":21262,"language":198,"meta":32,"style":32},"#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",[34,21264,21265,21271,21281,21287,21291,21296,21300,21305,21310,21315,21320,21325,21330,21334,21339,21344,21387,21396,21414,21432,21450,21454,21458,21465,21472,21479,21483,21487,21495,21499,21503,21523,21532,21536,21540,21550,21554,21562],{"__ignoreMap":32},[37,21266,21267,21269],{"class":39,"line":40},[37,21268,2021],{"class":50},[37,21270,2024],{"class":309},[37,21272,21273,21275,21277,21279],{"class":39,"line":47},[37,21274,2029],{"class":50},[37,21276,2032],{"class":50},[37,21278,2036],{"class":2035},[37,21280,1364],{"class":54},[37,21282,21283,21285],{"class":39,"line":58},[37,21284,14766],{"class":50},[37,21286,15243],{"class":2035},[37,21288,21289],{"class":39,"line":64},[37,21290,1618],{"class":54},[37,21292,21293],{"class":39,"line":76},[37,21294,21295],{"class":50},"    public:\n",[37,21297,21298],{"class":39,"line":92},[37,21299,2472],{"emptyLinePlaceholder":131},[37,21301,21302],{"class":39,"line":97},[37,21303,21304],{"class":43},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[37,21306,21307],{"class":39,"line":107},[37,21308,21309],{"class":43},"    \u002F\u002FPerson(int a, int b, int c) {\n",[37,21311,21312],{"class":39,"line":1390},[37,21313,21314],{"class":43},"    \u002F\u002F  m_A = a;\n",[37,21316,21317],{"class":39,"line":1402},[37,21318,21319],{"class":43},"    \u002F\u002F  m_B = b;\n",[37,21321,21322],{"class":39,"line":1684},[37,21323,21324],{"class":43},"    \u002F\u002F  m_C = c;\n",[37,21326,21327],{"class":39,"line":1689},[37,21328,21329],{"class":43},"    \u002F\u002F}\n",[37,21331,21332],{"class":39,"line":1695},[37,21333,2472],{"emptyLinePlaceholder":131},[37,21335,21336],{"class":39,"line":1700},[37,21337,21338],{"class":43},"    \u002F\u002F初始化列表方式初始化\n",[37,21340,21341],{"class":39,"line":1714},[37,21342,21343],{"class":43},"    \u002F\u002F使用有参构造函数\n",[37,21345,21346,21348,21350,21352,21354,21356,21358,21360,21362,21364,21366,21369,21372,21375,21378,21381,21384],{"class":39,"line":1719},[37,21347,18591],{"class":2035},[37,21349,208],{"class":54},[37,21351,211],{"class":50},[37,21353,1471],{"class":5288},[37,21355,12507],{"class":54},[37,21357,211],{"class":50},[37,21359,2905],{"class":5288},[37,21361,12507],{"class":54},[37,21363,211],{"class":50},[37,21365,2921],{"class":5288},[37,21367,21368],{"class":54},") :",[37,21370,21371],{"class":2035},"m_A",[37,21373,21374],{"class":54},"(a), ",[37,21376,21377],{"class":2035},"m_B",[37,21379,21380],{"class":54},"(b), ",[37,21382,21383],{"class":2035},"m_C",[37,21385,21386],{"class":54},"(c) {}\n",[37,21388,21389,21391,21394],{"class":39,"line":1725},[37,21390,14981],{"class":50},[37,21392,21393],{"class":2035}," PrintPerson",[37,21395,10925],{"class":54},[37,21397,21398,21400,21402,21405,21407,21410,21412],{"class":39,"line":1746},[37,21399,9741],{"class":54},[37,21401,1247],{"class":50},[37,21403,21404],{"class":309}," \"mA:\"",[37,21406,1517],{"class":50},[37,21408,21409],{"class":54}," m_A ",[37,21411,1247],{"class":50},[37,21413,8912],{"class":54},[37,21415,21416,21418,21420,21423,21425,21428,21430],{"class":39,"line":1751},[37,21417,9741],{"class":54},[37,21419,1247],{"class":50},[37,21421,21422],{"class":309}," \"mB:\"",[37,21424,1517],{"class":50},[37,21426,21427],{"class":54}," m_B ",[37,21429,1247],{"class":50},[37,21431,8912],{"class":54},[37,21433,21434,21436,21438,21441,21443,21446,21448],{"class":39,"line":1765},[37,21435,9741],{"class":54},[37,21437,1247],{"class":50},[37,21439,21440],{"class":309}," \"mC:\"",[37,21442,1517],{"class":50},[37,21444,21445],{"class":54}," m_C ",[37,21447,1247],{"class":50},[37,21449,8912],{"class":54},[37,21451,21452],{"class":39,"line":1770},[37,21453,2259],{"class":54},[37,21455,21456],{"class":39,"line":1799},[37,21457,15294],{"class":50},[37,21459,21460,21462],{"class":39,"line":1804},[37,21461,2057],{"class":50},[37,21463,21464],{"class":54}," m_A;\n",[37,21466,21467,21469],{"class":39,"line":1821},[37,21468,2057],{"class":50},[37,21470,21471],{"class":54}," m_B;\n",[37,21473,21474,21476],{"class":39,"line":1826},[37,21475,2057],{"class":50},[37,21477,21478],{"class":54}," m_C;\n",[37,21480,21481],{"class":39,"line":1831},[37,21482,4067],{"class":54},[37,21484,21485],{"class":39,"line":1836},[37,21486,2472],{"emptyLinePlaceholder":131},[37,21488,21489,21491,21493],{"class":39,"line":1850},[37,21490,211],{"class":50},[37,21492,2045],{"class":2035},[37,21494,6050],{"class":54},[37,21496,21497],{"class":39,"line":1855},[37,21498,1618],{"class":54},[37,21500,21501],{"class":39,"line":2649},[37,21502,2472],{"emptyLinePlaceholder":131},[37,21504,21505,21507,21509,21511,21513,21515,21517,21519,21521],{"class":39,"line":2663},[37,21506,19503],{"class":54},[37,21508,14],{"class":2035},[37,21510,208],{"class":54},[37,21512,422],{"class":82},[37,21514,12507],{"class":54},[37,21516,282],{"class":82},[37,21518,12507],{"class":54},[37,21520,276],{"class":82},[37,21522,2791],{"class":54},[37,21524,21525,21527,21530],{"class":39,"line":2671},[37,21526,15938],{"class":54},[37,21528,21529],{"class":2035},"PrintPerson",[37,21531,5708],{"class":54},[37,21533,21534],{"class":39,"line":2676},[37,21535,2472],{"emptyLinePlaceholder":131},[37,21537,21538],{"class":39,"line":2682},[37,21539,2472],{"emptyLinePlaceholder":131},[37,21541,21542,21544,21546,21548],{"class":39,"line":2688},[37,21543,2375],{"class":2035},[37,21545,208],{"class":54},[37,21547,2380],{"class":309},[37,21549,2791],{"class":54},[37,21551,21552],{"class":39,"line":2693},[37,21553,2472],{"emptyLinePlaceholder":131},[37,21555,21556,21558,21560],{"class":39,"line":8020},[37,21557,4162],{"class":50},[37,21559,4165],{"class":82},[37,21561,1364],{"class":54},[37,21563,21564],{"class":39,"line":8044},[37,21565,1637],{"class":54},[14,21567,21568,21569,21572,21573],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[354,21570,21571],{},"参数名就是定义的对象属性","，",[354,21574,21575],{},"属性后面的值为有参构造函数的形参",[27,21577,21579],{"className":196,"code":21578,"language":198,"meta":32,"style":32},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[34,21580,21581],{"__ignoreMap":32},[37,21582,21583,21585,21587,21589,21592,21594,21597,21599,21602,21604,21607,21609,21612,21614],{"class":39,"line":40},[37,21584,19118],{"class":2035},[37,21586,208],{"class":54},[37,21588,211],{"class":50},[37,21590,21591],{"class":54}," a.",[37,21593,211],{"class":50},[37,21595,21596],{"class":54}," b,",[37,21598,211],{"class":50},[37,21600,21601],{"class":54}," b):",[37,21603,21371],{"class":2035},[37,21605,21606],{"class":54},"(a),",[37,21608,21377],{"class":2035},[37,21610,21611],{"class":54},"(c),",[37,21613,21383],{"class":2035},[37,21615,21616],{"class":54},"(b) {}\n",[175,21618,21620],{"id":21619},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,21622,21623],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,21625,14705],{},[27,21627,21629],{"className":196,"code":21628,"language":198,"meta":32,"style":32},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[34,21630,21631,21636,21641,21645,21650,21654],{"__ignoreMap":32},[37,21632,21633],{"class":39,"line":40},[37,21634,21635],{"class":54},"A{};\n",[37,21637,21638],{"class":39,"line":47},[37,21639,21640],{"class":54},"B\n",[37,21642,21643],{"class":39,"line":58},[37,21644,1618],{"class":54},[37,21646,21647],{"class":39,"line":64},[37,21648,21649],{"class":54},"    A a;\n",[37,21651,21652],{"class":39,"line":76},[37,21653,1637],{"class":54},[37,21655,21656],{"class":39,"line":92},[37,21657,21658],{"class":43},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,21660,21661],{},"案例",[27,21663,21665],{"className":196,"code":21664,"language":198,"meta":32,"style":32},"\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",[34,21666,21667,21672,21679,21683,21688,21693,21707,21711,21721,21732,21736,21743,21747,21760,21764,21769,21774,21778,21784,21788,21792,21796,21827,21831,21842,21846,21852,21856,21869,21873,21877,21881,21886,21891,21895,21903,21907,21924,21943,21947,21955,21959,21965],{"__ignoreMap":32},[37,21668,21669],{"class":39,"line":40},[37,21670,21671],{"class":43},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[37,21673,21674,21676],{"class":39,"line":47},[37,21675,14766],{"class":50},[37,21677,21678],{"class":2035}," Phone\n",[37,21680,21681],{"class":39,"line":58},[37,21682,1618],{"class":54},[37,21684,21685],{"class":39,"line":64},[37,21686,21687],{"class":54},"public：\n",[37,21689,21690],{"class":39,"line":76},[37,21691,21692],{"class":43},"    \u002F\u002F 赋值(构造函数)\n",[37,21694,21695,21698,21700,21702,21705],{"class":39,"line":92},[37,21696,21697],{"class":2035},"    Phone",[37,21699,208],{"class":54},[37,21701,14989],{"class":2035},[37,21703,21704],{"class":5288}," pName",[37,21706,214],{"class":54},[37,21708,21709],{"class":39,"line":97},[37,21710,2102],{"class":54},[37,21712,21713,21716,21718],{"class":39,"line":107},[37,21714,21715],{"class":54},"        m_pName",[37,21717,70],{"class":50},[37,21719,21720],{"class":54},"pName;\n",[37,21722,21723,21725,21727,21730],{"class":39,"line":1390},[37,21724,3523],{"class":54},[37,21726,1247],{"class":50},[37,21728,21729],{"class":309},"\"Phone的构造函数调用\"",[37,21731,1364],{"class":54},[37,21733,21734],{"class":39,"line":1402},[37,21735,2259],{"class":54},[37,21737,21738,21741],{"class":39,"line":1684},[37,21739,21740],{"class":2035},"    ~Phone",[37,21742,2048],{"class":54},[37,21744,21745],{"class":39,"line":1689},[37,21746,2102],{"class":54},[37,21748,21749,21751,21753,21756,21758],{"class":39,"line":1695},[37,21750,3523],{"class":54},[37,21752,1247],{"class":50},[37,21754,21755],{"class":309},"\"Phone析构函数调用\"",[37,21757,1247],{"class":50},[37,21759,1269],{"class":54},[37,21761,21762],{"class":39,"line":1700},[37,21763,2259],{"class":54},[37,21765,21766],{"class":39,"line":1714},[37,21767,21768],{"class":43},"    \u002F\u002F\n",[37,21770,21771],{"class":39,"line":1719},[37,21772,21773],{"class":54},"    string m_PName;\n",[37,21775,21776],{"class":39,"line":1725},[37,21777,4067],{"class":54},[37,21779,21780,21782],{"class":39,"line":1746},[37,21781,14766],{"class":50},[37,21783,15243],{"class":2035},[37,21785,21786],{"class":39,"line":1751},[37,21787,1618],{"class":54},[37,21789,21790],{"class":39,"line":1765},[37,21791,14788],{"class":50},[37,21793,21794],{"class":39,"line":1770},[37,21795,17066],{"class":43},[37,21797,21798,21800,21802,21804,21806,21808,21810,21813,21816,21818,21821,21824],{"class":39,"line":1799},[37,21799,18591],{"class":2035},[37,21801,208],{"class":54},[37,21803,14989],{"class":2035},[37,21805,14992],{"class":5288},[37,21807,583],{"class":54},[37,21809,14989],{"class":2035},[37,21811,21812],{"class":5288}," pname",[37,21814,21815],{"class":54},"):",[37,21817,15082],{"class":2035},[37,21819,21820],{"class":54},"(name),m_phone.",[37,21822,21823],{"class":2035},"m_PName",[37,21825,21826],{"class":54},"(pname) \n",[37,21828,21829],{"class":39,"line":1804},[37,21830,2102],{"class":54},[37,21832,21833,21835,21837,21840],{"class":39,"line":1821},[37,21834,3523],{"class":54},[37,21836,1247],{"class":50},[37,21838,21839],{"class":309},"\"Person的构造函数调用\"",[37,21841,1364],{"class":54},[37,21843,21844],{"class":39,"line":1826},[37,21845,2259],{"class":54},[37,21847,21848,21850],{"class":39,"line":1831},[37,21849,18624],{"class":2035},[37,21851,2048],{"class":54},[37,21853,21854],{"class":39,"line":1836},[37,21855,2102],{"class":54},[37,21857,21858,21860,21862,21865,21867],{"class":39,"line":1850},[37,21859,3523],{"class":54},[37,21861,1247],{"class":50},[37,21863,21864],{"class":309},"\"Person析构函数调用\"",[37,21866,1247],{"class":50},[37,21868,1269],{"class":54},[37,21870,21871],{"class":39,"line":1855},[37,21872,2259],{"class":54},[37,21874,21875],{"class":39,"line":2649},[37,21876,7852],{"class":43},[37,21878,21879],{"class":39,"line":2663},[37,21880,14964],{"class":54},[37,21882,21883],{"class":39,"line":2671},[37,21884,21885],{"class":43},"    \u002F\u002F手机\n",[37,21887,21888],{"class":39,"line":2676},[37,21889,21890],{"class":54},"    Phone m_Phone;\n",[37,21892,21893],{"class":39,"line":2682},[37,21894,4067],{"class":54},[37,21896,21897,21899,21901],{"class":39,"line":2688},[37,21898,5436],{"class":50},[37,21900,5660],{"class":2035},[37,21902,2048],{"class":54},[37,21904,21905],{"class":39,"line":2693},[37,21906,1618],{"class":54},[37,21908,21909,21911,21913,21915,21917,21919,21922],{"class":39,"line":8020},[37,21910,19503],{"class":54},[37,21912,14],{"class":2035},[37,21914,208],{"class":54},[37,21916,7988],{"class":309},[37,21918,583],{"class":54},[37,21920,21921],{"class":309},"\"安卓\"",[37,21923,2791],{"class":54},[37,21925,21926,21928,21930,21933,21935,21938,21940],{"class":39,"line":8044},[37,21927,1623],{"class":54},[37,21929,1247],{"class":50},[37,21931,21932],{"class":54},"p.Name",[37,21934,1247],{"class":50},[37,21936,21937],{"class":309},"\"拿着：\"",[37,21939,1247],{"class":50},[37,21941,21942],{"class":54},"p.m_phone.m_PName;\n",[37,21944,21945],{"class":39,"line":8049},[37,21946,1637],{"class":54},[37,21948,21949,21951,21953],{"class":39,"line":8055},[37,21950,211],{"class":50},[37,21952,2045],{"class":2035},[37,21954,2048],{"class":54},[37,21956,21957],{"class":39,"line":8082},[37,21958,1618],{"class":54},[37,21960,21961,21963],{"class":39,"line":8087},[37,21962,5705],{"class":2035},[37,21964,5708],{"class":54},[37,21966,21967],{"class":39,"line":8093},[37,21968,1637],{"class":54},[14,21970,9097],{},[27,21972,21974],{"className":196,"code":21973,"language":198,"meta":32,"style":32},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[34,21975,21976,21981],{"__ignoreMap":32},[37,21977,21978],{"class":39,"line":40},[37,21979,21980],{"class":43},"    \u002F\u002F不需要写这个：\n",[37,21982,21983],{"class":39,"line":47},[37,21984,21985],{"class":43},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,21987,21988],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[27,21990,21992],{"className":196,"code":21991,"language":198,"meta":32,"style":32},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[34,21993,21994],{"__ignoreMap":32},[37,21995,21996,21998,22001,22003,22006,22009],{"class":39,"line":40},[37,21997,19118],{"class":2035},[37,21999,22000],{"class":54},"(string name.string pname):",[37,22002,15082],{"class":2035},[37,22004,22005],{"class":54},"(name),",[37,22007,22008],{"class":2035},"m_phone",[37,22010,22011],{"class":54},"(pname) {}\n",[14,22013,22014,22015,70,22018],{},"采用的是隐式转换法，实际为如下：\n",[34,22016,22017],{},"m_phone(pname)",[34,22019,22020],{},"Phone m_phone=pname",[14,22022,22023,22026],{},[354,22024,22025],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,22028,22029],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[175,22031,22033],{"id":22032},"_828静态对象","8.2.8静态对象",[14,22035,22036],{},"静态对象在成员对象前static，称为静态对象",[14,22038,22039],{},"静态对象分为两类：",[158,22041,22042],{},[161,22043,22044],{},"静态成员变量",[1210,22046,22047,22050,22053],{},[161,22048,22049],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[161,22051,22052],{},"②在编译阶段分配内存",[161,22054,22055],{},"③类内声明，类外初始化",[158,22057,22058],{"start":47},[161,22059,22060],{},"静态成员函数",[1210,22062,22063,22066],{},[161,22064,22065],{},"①所有对象共享同一个函数",[161,22067,22068],{},"②静态成员函数只能访问静态成员变量",[22070,22071,22073],"h4",{"id":22072},"_8281静态成员变量","8.2.8.1静态成员变量",[27,22075,22077],{"className":196,"code":22076,"language":198,"meta":32,"style":32},"#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",[34,22078,22079,22085,22095,22101,22105,22109,22114,22119,22124,22132,22136,22140,22144,22152,22156,22160,22165,22178,22182,22190,22194,22200],{"__ignoreMap":32},[37,22080,22081,22083],{"class":39,"line":40},[37,22082,2021],{"class":50},[37,22084,2024],{"class":309},[37,22086,22087,22089,22091,22093],{"class":39,"line":47},[37,22088,2029],{"class":50},[37,22090,2032],{"class":50},[37,22092,2036],{"class":2035},[37,22094,1364],{"class":54},[37,22096,22097,22099],{"class":39,"line":58},[37,22098,14766],{"class":50},[37,22100,15243],{"class":2035},[37,22102,22103],{"class":39,"line":64},[37,22104,1618],{"class":54},[37,22106,22107],{"class":39,"line":76},[37,22108,14788],{"class":50},[37,22110,22111],{"class":39,"line":92},[37,22112,22113],{"class":43},"    \u002F\u002F非静态成员变量\n",[37,22115,22116],{"class":39,"line":97},[37,22117,22118],{"class":43},"    \u002F\u002F int m_A;\n",[37,22120,22121],{"class":39,"line":107},[37,22122,22123],{"class":43},"    \u002F\u002F定义静态成员变量\n",[37,22125,22126,22128,22130],{"class":39,"line":1390},[37,22127,11092],{"class":50},[37,22129,2454],{"class":50},[37,22131,21464],{"class":54},[37,22133,22134],{"class":39,"line":1402},[37,22135,2472],{"emptyLinePlaceholder":131},[37,22137,22138],{"class":39,"line":1684},[37,22139,2472],{"emptyLinePlaceholder":131},[37,22141,22142],{"class":39,"line":1689},[37,22143,4067],{"class":54},[37,22145,22146,22148,22150],{"class":39,"line":1695},[37,22147,5436],{"class":50},[37,22149,5660],{"class":2035},[37,22151,2048],{"class":54},[37,22153,22154],{"class":39,"line":1700},[37,22155,1618],{"class":54},[37,22157,22158],{"class":39,"line":1714},[37,22159,15385],{"class":54},[37,22161,22162],{"class":39,"line":1719},[37,22163,22164],{"class":43},"    \u002F\u002F输出类成员变量这块内存\n",[37,22166,22167,22169,22171,22174,22176],{"class":39,"line":1725},[37,22168,1623],{"class":54},[37,22170,1247],{"class":50},[37,22172,22173],{"class":54},"p.m_A",[37,22175,1247],{"class":50},[37,22177,1269],{"class":54},[37,22179,22180],{"class":39,"line":1746},[37,22181,1637],{"class":54},[37,22183,22184,22186,22188],{"class":39,"line":1751},[37,22185,211],{"class":50},[37,22187,2045],{"class":2035},[37,22189,2048],{"class":54},[37,22191,22192],{"class":39,"line":1765},[37,22193,1618],{"class":54},[37,22195,22196,22198],{"class":39,"line":1770},[37,22197,5705],{"class":2035},[37,22199,2048],{"class":54},[37,22201,22202],{"class":39,"line":1799},[37,22203,1637],{"class":54},[14,22205,22206],{},"此时输出是报错的：无法解析外部命令",[14,22208,22209],{},"解决这一问题：必须用到类内声明，类外初始化操作",[27,22211,22213],{"className":196,"code":22212,"language":198,"meta":32,"style":32},"#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",[34,22214,22215,22221,22231,22237,22241,22245,22250,22258,22262,22267,22282,22290,22294,22298,22303,22308,22320,22325,22336,22341,22346,22359,22363,22371,22375,22381],{"__ignoreMap":32},[37,22216,22217,22219],{"class":39,"line":40},[37,22218,2021],{"class":50},[37,22220,2024],{"class":309},[37,22222,22223,22225,22227,22229],{"class":39,"line":47},[37,22224,2029],{"class":50},[37,22226,2032],{"class":50},[37,22228,2036],{"class":2035},[37,22230,1364],{"class":54},[37,22232,22233,22235],{"class":39,"line":58},[37,22234,14766],{"class":50},[37,22236,15243],{"class":2035},[37,22238,22239],{"class":39,"line":64},[37,22240,1618],{"class":54},[37,22242,22243],{"class":39,"line":76},[37,22244,14788],{"class":50},[37,22246,22247],{"class":39,"line":92},[37,22248,22249],{"class":43},"    \u002F\u002F类内声明\n",[37,22251,22252,22254,22256],{"class":39,"line":97},[37,22253,11092],{"class":50},[37,22255,2454],{"class":50},[37,22257,21464],{"class":54},[37,22259,22260],{"class":39,"line":107},[37,22261,4067],{"class":54},[37,22263,22264],{"class":39,"line":1390},[37,22265,22266],{"class":43},"\u002F\u002F类外初始化\n",[37,22268,22269,22271,22273,22276,22278,22280],{"class":39,"line":1402},[37,22270,211],{"class":50},[37,22272,15641],{"class":2035},[37,22274,22275],{"class":54},"::m_A",[37,22277,70],{"class":50},[37,22279,650],{"class":82},[37,22281,1364],{"class":54},[37,22283,22284,22286,22288],{"class":39,"line":1684},[37,22285,5436],{"class":50},[37,22287,5660],{"class":2035},[37,22289,2048],{"class":54},[37,22291,22292],{"class":39,"line":1689},[37,22293,1618],{"class":54},[37,22295,22296],{"class":39,"line":1695},[37,22297,15385],{"class":54},[37,22299,22300],{"class":39,"line":1700},[37,22301,22302],{"class":43},"    \u002F\u002F访问变量的原内存空间\n",[37,22304,22305],{"class":39,"line":1714},[37,22306,22307],{"class":43},"    \u002F\u002F100\n",[37,22309,22310,22312,22314,22316,22318],{"class":39,"line":1719},[37,22311,1623],{"class":54},[37,22313,1247],{"class":50},[37,22315,22173],{"class":54},[37,22317,1247],{"class":50},[37,22319,1269],{"class":54},[37,22321,22322],{"class":39,"line":1725},[37,22323,22324],{"class":54},"    Person p2;\n",[37,22326,22327,22330,22332,22334],{"class":39,"line":1746},[37,22328,22329],{"class":54},"    p2.m_A",[37,22331,70],{"class":50},[37,22333,1794],{"class":82},[37,22335,1364],{"class":54},[37,22337,22338],{"class":39,"line":1751},[37,22339,22340],{"class":43},"    \u002F\u002F继续访问这片空间\n",[37,22342,22343],{"class":39,"line":1765},[37,22344,22345],{"class":43},"    \u002F\u002F200\n",[37,22347,22348,22350,22352,22355,22357],{"class":39,"line":1770},[37,22349,1623],{"class":54},[37,22351,1247],{"class":50},[37,22353,22354],{"class":54},"p2.m_A",[37,22356,1247],{"class":50},[37,22358,1269],{"class":54},[37,22360,22361],{"class":39,"line":1799},[37,22362,1637],{"class":54},[37,22364,22365,22367,22369],{"class":39,"line":1804},[37,22366,211],{"class":50},[37,22368,2045],{"class":2035},[37,22370,2048],{"class":54},[37,22372,22373],{"class":39,"line":1821},[37,22374,1618],{"class":54},[37,22376,22377,22379],{"class":39,"line":1826},[37,22378,5705],{"class":2035},[37,22380,5708],{"class":54},[37,22382,22383],{"class":39,"line":1831},[37,22384,1637],{"class":54},[14,22386,22387],{},[354,22388,22389],{},"静态变量的访问",[27,22391,22393],{"className":196,"code":22392,"language":198,"meta":32,"style":32},"#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",[34,22394,22395,22401,22411,22417,22421,22425,22429,22437,22441,22446,22454,22458,22462,22476,22491,22499,22503,22508,22513,22518,22523,22535,22540,22545,22559,22576,22580,22588,22592,22598],{"__ignoreMap":32},[37,22396,22397,22399],{"class":39,"line":40},[37,22398,2021],{"class":50},[37,22400,2024],{"class":309},[37,22402,22403,22405,22407,22409],{"class":39,"line":47},[37,22404,2029],{"class":50},[37,22406,2032],{"class":50},[37,22408,2036],{"class":2035},[37,22410,1364],{"class":54},[37,22412,22413,22415],{"class":39,"line":58},[37,22414,14766],{"class":50},[37,22416,15243],{"class":2035},[37,22418,22419],{"class":39,"line":64},[37,22420,1618],{"class":54},[37,22422,22423],{"class":39,"line":76},[37,22424,14788],{"class":50},[37,22426,22427],{"class":39,"line":92},[37,22428,22249],{"class":43},[37,22430,22431,22433,22435],{"class":39,"line":97},[37,22432,11092],{"class":50},[37,22434,2454],{"class":50},[37,22436,21464],{"class":54},[37,22438,22439],{"class":39,"line":107},[37,22440,15294],{"class":50},[37,22442,22443],{"class":39,"line":1390},[37,22444,22445],{"class":43},"    \u002F\u002F静态成员变量也是有访问权限的\n",[37,22447,22448,22450,22452],{"class":39,"line":1402},[37,22449,11092],{"class":50},[37,22451,2454],{"class":50},[37,22453,21471],{"class":54},[37,22455,22456],{"class":39,"line":1684},[37,22457,4067],{"class":54},[37,22459,22460],{"class":39,"line":1689},[37,22461,22266],{"class":43},[37,22463,22464,22466,22468,22470,22472,22474],{"class":39,"line":1695},[37,22465,211],{"class":50},[37,22467,15641],{"class":2035},[37,22469,22275],{"class":54},[37,22471,70],{"class":50},[37,22473,650],{"class":82},[37,22475,1364],{"class":54},[37,22477,22478,22480,22482,22485,22487,22489],{"class":39,"line":1700},[37,22479,211],{"class":50},[37,22481,15641],{"class":2035},[37,22483,22484],{"class":54},"::m_B",[37,22486,70],{"class":50},[37,22488,903],{"class":82},[37,22490,1364],{"class":54},[37,22492,22493,22495,22497],{"class":39,"line":1714},[37,22494,5436],{"class":50},[37,22496,5729],{"class":2035},[37,22498,2048],{"class":54},[37,22500,22501],{"class":39,"line":1719},[37,22502,1618],{"class":54},[37,22504,22505],{"class":39,"line":1725},[37,22506,22507],{"class":43},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[37,22509,22510],{"class":39,"line":1746},[37,22511,22512],{"class":43},"    \u002F\u002F静态成员变量有两种访问方式：\n",[37,22514,22515],{"class":39,"line":1751},[37,22516,22517],{"class":43},"    \u002F\u002F1.通过对象进行访问\n",[37,22519,22520],{"class":39,"line":1765},[37,22521,22522],{"class":54},"    Person p;  \n",[37,22524,22525,22527,22529,22531,22533],{"class":39,"line":1770},[37,22526,1623],{"class":54},[37,22528,1247],{"class":50},[37,22530,22173],{"class":54},[37,22532,1247],{"class":50},[37,22534,1269],{"class":54},[37,22536,22537],{"class":39,"line":1799},[37,22538,22539],{"class":43},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[37,22541,22542],{"class":39,"line":1804},[37,22543,22544],{"class":43},"    \u002F\u002F2.通过类名进行访问\n",[37,22546,22547,22549,22551,22553,22555,22557],{"class":39,"line":1821},[37,22548,1623],{"class":54},[37,22550,1247],{"class":50},[37,22552,19118],{"class":2035},[37,22554,22275],{"class":54},[37,22556,1247],{"class":50},[37,22558,1269],{"class":54},[37,22560,22561,22563,22565,22567,22569,22571,22573],{"class":39,"line":1826},[37,22562,1623],{"class":54},[37,22564,1247],{"class":50},[37,22566,19118],{"class":2035},[37,22568,22484],{"class":54},[37,22570,1247],{"class":50},[37,22572,1312],{"class":54},[37,22574,22575],{"class":43}," \u002F\u002F没有访问权限，报错\n",[37,22577,22578],{"class":39,"line":1831},[37,22579,1637],{"class":54},[37,22581,22582,22584,22586],{"class":39,"line":1836},[37,22583,211],{"class":50},[37,22585,2045],{"class":2035},[37,22587,2048],{"class":54},[37,22589,22590],{"class":39,"line":1850},[37,22591,1618],{"class":54},[37,22593,22594,22596],{"class":39,"line":1855},[37,22595,5774],{"class":2035},[37,22597,5708],{"class":54},[37,22599,22600],{"class":39,"line":2649},[37,22601,1637],{"class":54},[22070,22603,22605],{"id":22604},"_8282静态成员函数","8.2.8.2静态成员函数",[14,22607,22608],{},"1.静态成员函数定义与访问",[27,22610,22612],{"className":196,"code":22611,"language":198,"meta":32,"style":32},"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",[34,22613,22614,22620,22624,22628,22633,22644,22648,22662,22666,22670,22678,22682,22687,22692,22696,22704,22709,22719],{"__ignoreMap":32},[37,22615,22616,22618],{"class":39,"line":40},[37,22617,14766],{"class":50},[37,22619,15243],{"class":2035},[37,22621,22622],{"class":39,"line":47},[37,22623,1618],{"class":54},[37,22625,22626],{"class":39,"line":58},[37,22627,14788],{"class":50},[37,22629,22630],{"class":39,"line":64},[37,22631,22632],{"class":43},"    \u002F\u002F在公共权限下定义静态成员函数\n",[37,22634,22635,22637,22640,22642],{"class":39,"line":76},[37,22636,11092],{"class":50},[37,22638,22639],{"class":50}," void",[37,22641,11457],{"class":2035},[37,22643,2048],{"class":54},[37,22645,22646],{"class":39,"line":92},[37,22647,2102],{"class":54},[37,22649,22650,22653,22655,22658,22660],{"class":39,"line":97},[37,22651,22652],{"class":54},"        coout",[37,22654,1247],{"class":50},[37,22656,22657],{"class":309},"\"静态成员函数的调用\"",[37,22659,1247],{"class":50},[37,22661,1269],{"class":54},[37,22663,22664],{"class":39,"line":107},[37,22665,2259],{"class":54},[37,22667,22668],{"class":39,"line":1390},[37,22669,4067],{"class":54},[37,22671,22672,22674,22676],{"class":39,"line":1402},[37,22673,5436],{"class":50},[37,22675,5660],{"class":2035},[37,22677,2048],{"class":54},[37,22679,22680],{"class":39,"line":1684},[37,22681,1618],{"class":54},[37,22683,22684],{"class":39,"line":1689},[37,22685,22686],{"class":43},"    \u002F\u002F静态成员函数的调用方式:\n",[37,22688,22689],{"class":39,"line":1695},[37,22690,22691],{"class":43},"    \u002F\u002F1.通过对象访问\n",[37,22693,22694],{"class":39,"line":1700},[37,22695,15385],{"class":54},[37,22697,22698,22700,22702],{"class":39,"line":1714},[37,22699,15938],{"class":54},[37,22701,11623],{"class":2035},[37,22703,5708],{"class":54},[37,22705,22706],{"class":39,"line":1719},[37,22707,22708],{"class":43},"    \u002F\u002F2.通过类名访问\n",[37,22710,22711,22713,22715,22717],{"class":39,"line":1725},[37,22712,18591],{"class":2035},[37,22714,17804],{"class":54},[37,22716,11623],{"class":2035},[37,22718,5708],{"class":54},[37,22720,22721],{"class":39,"line":1746},[37,22722,1637],{"class":54},[158,22724,22725],{"start":47},[161,22726,22727],{},"静态成员函数只能访问静态成员变量",[27,22729,22731],{"className":196,"code":22730,"language":198,"meta":32,"style":32},"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",[34,22732,22733,22739,22743,22747,22751,22761,22765,22779,22784,22796,22800,22811,22821,22825,22829,22833,22843,22847,22860,22864,22868,22872,22876,22890,22898,22902,22906,22910,22914,22922,22926,22936,22941,22945,22953,22957,22963],{"__ignoreMap":32},[37,22734,22735,22737],{"class":39,"line":40},[37,22736,14766],{"class":50},[37,22738,15243],{"class":2035},[37,22740,22741],{"class":39,"line":47},[37,22742,1618],{"class":54},[37,22744,22745],{"class":39,"line":58},[37,22746,14788],{"class":50},[37,22748,22749],{"class":39,"line":64},[37,22750,22632],{"class":43},[37,22752,22753,22755,22757,22759],{"class":39,"line":76},[37,22754,11092],{"class":50},[37,22756,22639],{"class":50},[37,22758,11457],{"class":2035},[37,22760,2048],{"class":54},[37,22762,22763],{"class":39,"line":92},[37,22764,2102],{"class":54},[37,22766,22767,22770,22772,22774,22776],{"class":39,"line":97},[37,22768,22769],{"class":54},"        m_A",[37,22771,70],{"class":50},[37,22773,516],{"class":82},[37,22775,261],{"class":54},[37,22777,22778],{"class":43}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[37,22780,22781],{"class":39,"line":107},[37,22782,22783],{"class":43},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[37,22785,22786,22788,22790,22792,22794],{"class":39,"line":1390},[37,22787,22652],{"class":54},[37,22789,1247],{"class":50},[37,22791,22657],{"class":309},[37,22793,1247],{"class":50},[37,22795,1269],{"class":54},[37,22797,22798],{"class":39,"line":1402},[37,22799,2259],{"class":54},[37,22801,22802,22804,22806,22808],{"class":39,"line":1684},[37,22803,11092],{"class":50},[37,22805,2454],{"class":50},[37,22807,15520],{"class":54},[37,22809,22810],{"class":43}," \u002F\u002F静态成员变量\n",[37,22812,22813,22815,22818],{"class":39,"line":1689},[37,22814,2057],{"class":50},[37,22816,22817],{"class":54}," m_B;",[37,22819,22820],{"class":43}," \u002F\u002F非静态成员变量\n",[37,22822,22823],{"class":39,"line":1695},[37,22824,2472],{"emptyLinePlaceholder":131},[37,22826,22827],{"class":39,"line":1700},[37,22828,15294],{"class":50},[37,22830,22831],{"class":39,"line":1714},[37,22832,22445],{"class":43},[37,22834,22835,22837,22839,22841],{"class":39,"line":1719},[37,22836,11092],{"class":50},[37,22838,22639],{"class":50},[37,22840,13690],{"class":2035},[37,22842,2048],{"class":54},[37,22844,22845],{"class":39,"line":1725},[37,22846,2102],{"class":54},[37,22848,22849,22851,22853,22856,22858],{"class":39,"line":1746},[37,22850,3523],{"class":54},[37,22852,1247],{"class":50},[37,22854,22855],{"class":309},"\"这是私有权限下的静态函数调用\"",[37,22857,1247],{"class":50},[37,22859,1269],{"class":54},[37,22861,22862],{"class":39,"line":1751},[37,22863,2259],{"class":54},[37,22865,22866],{"class":39,"line":1765},[37,22867,2472],{"emptyLinePlaceholder":131},[37,22869,22870],{"class":39,"line":1770},[37,22871,2472],{"emptyLinePlaceholder":131},[37,22873,22874],{"class":39,"line":1799},[37,22875,4067],{"class":54},[37,22877,22878,22880,22882,22884,22886,22888],{"class":39,"line":1804},[37,22879,211],{"class":50},[37,22881,15641],{"class":2035},[37,22883,22275],{"class":54},[37,22885,70],{"class":50},[37,22887,396],{"class":82},[37,22889,1364],{"class":54},[37,22891,22892,22894,22896],{"class":39,"line":1821},[37,22893,5436],{"class":50},[37,22895,5660],{"class":2035},[37,22897,2048],{"class":54},[37,22899,22900],{"class":39,"line":1826},[37,22901,1618],{"class":54},[37,22903,22904],{"class":39,"line":1831},[37,22905,22686],{"class":43},[37,22907,22908],{"class":39,"line":1836},[37,22909,22691],{"class":43},[37,22911,22912],{"class":39,"line":1850},[37,22913,15385],{"class":54},[37,22915,22916,22918,22920],{"class":39,"line":1855},[37,22917,15938],{"class":54},[37,22919,11623],{"class":2035},[37,22921,5708],{"class":54},[37,22923,22924],{"class":39,"line":2649},[37,22925,22708],{"class":43},[37,22927,22928,22930,22932,22934],{"class":39,"line":2663},[37,22929,18591],{"class":2035},[37,22931,17804],{"class":54},[37,22933,11623],{"class":2035},[37,22935,5708],{"class":54},[37,22937,22938],{"class":39,"line":2671},[37,22939,22940],{"class":43},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[37,22942,22943],{"class":39,"line":2676},[37,22944,1637],{"class":54},[37,22946,22947,22949,22951],{"class":39,"line":2682},[37,22948,211],{"class":50},[37,22950,2045],{"class":2035},[37,22952,2048],{"class":54},[37,22954,22955],{"class":39,"line":2688},[37,22956,1618],{"class":54},[37,22958,22959,22961],{"class":39,"line":2693},[37,22960,5705],{"class":2035},[37,22962,5708],{"class":54},[37,22964,22965],{"class":39,"line":8020},[37,22966,1637],{"class":54},[175,22968,22970],{"id":22969},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22070,22972,22974],{"id":22973},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,22976,22977],{},"在c++中，类内的成员变量和成员函数分开存储",[14,22979,22980],{},"只有非静态成员变量才属于类的对象上",[22982,22983,22985],"h5",{"id":22984},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[27,22987,22989],{"className":196,"code":22988,"language":198,"meta":32,"style":32},"#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",[34,22990,22991,22998,23008,23014,23018,23022,23026,23034,23038,23042,23065,23069,23077,23081,23087],{"__ignoreMap":32},[37,22992,22993,22995],{"class":39,"line":40},[37,22994,2021],{"class":50},[37,22996,22997],{"class":309},"\u003Ciostraem>\n",[37,22999,23000,23002,23004,23006],{"class":39,"line":47},[37,23001,2029],{"class":50},[37,23003,2032],{"class":50},[37,23005,2036],{"class":2035},[37,23007,1364],{"class":54},[37,23009,23010,23012],{"class":39,"line":58},[37,23011,14766],{"class":50},[37,23013,15243],{"class":2035},[37,23015,23016],{"class":39,"line":64},[37,23017,1618],{"class":54},[37,23019,23020],{"class":39,"line":76},[37,23021,2472],{"emptyLinePlaceholder":131},[37,23023,23024],{"class":39,"line":92},[37,23025,4067],{"class":54},[37,23027,23028,23030,23032],{"class":39,"line":97},[37,23029,5436],{"class":50},[37,23031,5660],{"class":2035},[37,23033,2048],{"class":54},[37,23035,23036],{"class":39,"line":107},[37,23037,1618],{"class":54},[37,23039,23040],{"class":39,"line":1390},[37,23041,15385],{"class":54},[37,23043,23044,23046,23048,23051,23053,23056,23058,23060,23062],{"class":39,"line":1402},[37,23045,1623],{"class":54},[37,23047,1247],{"class":50},[37,23049,23050],{"class":309},"\"size of p=\"",[37,23052,1247],{"class":50},[37,23054,23055],{"class":2035},"sizeoif",[37,23057,6611],{"class":54},[37,23059,1247],{"class":50},[37,23061,1312],{"class":54},[37,23063,23064],{"class":43}," \u002F\u002F查看这个空类的占用的内存空间\n",[37,23066,23067],{"class":39,"line":1684},[37,23068,1637],{"class":54},[37,23070,23071,23073,23075],{"class":39,"line":1689},[37,23072,211],{"class":50},[37,23074,2045],{"class":2035},[37,23076,2048],{"class":54},[37,23078,23079],{"class":39,"line":1695},[37,23080,1618],{"class":54},[37,23082,23083,23085],{"class":39,"line":1700},[37,23084,5705],{"class":2035},[37,23086,5708],{"class":54},[37,23088,23089],{"class":39,"line":1714},[37,23090,1637],{"class":54},[14,23092,23093],{},"输出结果为：size of p=1",[14,23095,23096],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23098,23099],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22982,23101,23103],{"id":23102},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[27,23105,23107],{"className":196,"code":23106,"language":198,"meta":32,"style":32},"#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",[34,23108,23109,23115,23125,23133,23137,23146,23150,23158,23162,23166,23185,23189,23193,23201,23205,23211],{"__ignoreMap":32},[37,23110,23111,23113],{"class":39,"line":40},[37,23112,2021],{"class":50},[37,23114,2024],{"class":309},[37,23116,23117,23119,23121,23123],{"class":39,"line":47},[37,23118,2029],{"class":50},[37,23120,2032],{"class":50},[37,23122,2036],{"class":2035},[37,23124,1364],{"class":54},[37,23126,23127,23129,23131],{"class":39,"line":58},[37,23128,14766],{"class":50},[37,23130,15641],{"class":2035},[37,23132,2746],{"class":54},[37,23134,23135],{"class":39,"line":64},[37,23136,1618],{"class":54},[37,23138,23139,23141,23143],{"class":39,"line":76},[37,23140,2057],{"class":50},[37,23142,15520],{"class":54},[37,23144,23145],{"class":43},"\u002F\u002F非静态成员变量\n",[37,23147,23148],{"class":39,"line":92},[37,23149,4067],{"class":54},[37,23151,23152,23154,23156],{"class":39,"line":97},[37,23153,5436],{"class":50},[37,23155,5660],{"class":2035},[37,23157,2048],{"class":54},[37,23159,23160],{"class":39,"line":107},[37,23161,1618],{"class":54},[37,23163,23164],{"class":39,"line":1390},[37,23165,15385],{"class":54},[37,23167,23168,23170,23172,23174,23176,23178,23180,23182],{"class":39,"line":1402},[37,23169,1623],{"class":54},[37,23171,1247],{"class":50},[37,23173,23050],{"class":309},[37,23175,1445],{"class":50},[37,23177,6611],{"class":54},[37,23179,1247],{"class":50},[37,23181,1312],{"class":54},[37,23183,23184],{"class":43}," \u002F\u002F查看不是空对象时占用多少内存\n",[37,23186,23187],{"class":39,"line":1684},[37,23188,2472],{"emptyLinePlaceholder":131},[37,23190,23191],{"class":39,"line":1689},[37,23192,1637],{"class":54},[37,23194,23195,23197,23199],{"class":39,"line":1695},[37,23196,211],{"class":50},[37,23198,2045],{"class":2035},[37,23200,2048],{"class":54},[37,23202,23203],{"class":39,"line":1700},[37,23204,1618],{"class":54},[37,23206,23207,23209],{"class":39,"line":1714},[37,23208,5705],{"class":2035},[37,23210,5708],{"class":54},[37,23212,23213],{"class":39,"line":1719},[37,23214,1637],{"class":54},[14,23216,23217],{},"输出结果：size of p=4",[14,23219,23220],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[158,23222,23223],{},[161,23224,23225],{},"如果加上非静态成员变量，Person类修改如下",[27,23227,23229],{"className":196,"code":23228,"language":198,"meta":32,"style":32},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[34,23230,23231,23237,23241,23247,23255,23259,23264],{"__ignoreMap":32},[37,23232,23233,23235],{"class":39,"line":40},[37,23234,14766],{"class":50},[37,23236,15243],{"class":2035},[37,23238,23239],{"class":39,"line":47},[37,23240,1618],{"class":54},[37,23242,23243,23245],{"class":39,"line":58},[37,23244,2057],{"class":50},[37,23246,21464],{"class":54},[37,23248,23249,23251,23253],{"class":39,"line":64},[37,23250,11092],{"class":50},[37,23252,2454],{"class":50},[37,23254,21471],{"class":54},[37,23256,23257],{"class":39,"line":76},[37,23258,4067],{"class":54},[37,23260,23261],{"class":39,"line":92},[37,23262,23263],{"class":43},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[37,23265,23266,23268,23270,23272,23274,23276],{"class":39,"line":97},[37,23267,211],{"class":50},[37,23269,15641],{"class":2035},[37,23271,22484],{"class":54},[37,23273,70],{"class":50},[37,23275,396],{"class":82},[37,23277,1364],{"class":54},[14,23279,23280],{},"输出结果：4",[14,23282,23283],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[158,23285,23286],{"start":47},[161,23287,23288],{},"加上非静态成员函数",[27,23290,23292],{"className":196,"code":23291,"language":198,"meta":32,"style":32},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[34,23293,23294,23301,23305,23311,23319,23323,23327,23331],{"__ignoreMap":32},[37,23295,23296,23298],{"class":39,"line":40},[37,23297,14766],{"class":50},[37,23299,23300],{"class":2035},"  Person\n",[37,23302,23303],{"class":39,"line":47},[37,23304,1618],{"class":54},[37,23306,23307,23309],{"class":39,"line":58},[37,23308,2057],{"class":50},[37,23310,21464],{"class":54},[37,23312,23313,23315,23317],{"class":39,"line":64},[37,23314,14981],{"class":50},[37,23316,11457],{"class":2035},[37,23318,2048],{"class":54},[37,23320,23321],{"class":39,"line":76},[37,23322,2102],{"class":54},[37,23324,23325],{"class":39,"line":92},[37,23326,2472],{"emptyLinePlaceholder":131},[37,23328,23329],{"class":39,"line":97},[37,23330,2259],{"class":54},[37,23332,23333],{"class":39,"line":107},[37,23334,4067],{"class":54},[14,23336,23337],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[158,23339,23340],{"start":58},[161,23341,23342],{},"加上静态成员函数",[27,23344,23346],{"className":196,"code":23345,"language":198,"meta":32,"style":32},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[34,23347,23348,23354,23358,23364,23372,23376,23380,23384,23395,23399,23403,23407],{"__ignoreMap":32},[37,23349,23350,23352],{"class":39,"line":40},[37,23351,14766],{"class":50},[37,23353,23300],{"class":2035},[37,23355,23356],{"class":39,"line":47},[37,23357,1618],{"class":54},[37,23359,23360,23362],{"class":39,"line":58},[37,23361,2057],{"class":50},[37,23363,21464],{"class":54},[37,23365,23366,23368,23370],{"class":39,"line":64},[37,23367,14981],{"class":50},[37,23369,11457],{"class":2035},[37,23371,2048],{"class":54},[37,23373,23374],{"class":39,"line":76},[37,23375,2102],{"class":54},[37,23377,23378],{"class":39,"line":92},[37,23379,2472],{"emptyLinePlaceholder":131},[37,23381,23382],{"class":39,"line":97},[37,23383,2259],{"class":54},[37,23385,23386,23388,23390,23393],{"class":39,"line":107},[37,23387,11092],{"class":50},[37,23389,22639],{"class":50},[37,23391,23392],{"class":2035}," func1",[37,23394,2048],{"class":54},[37,23396,23397],{"class":39,"line":1390},[37,23398,2102],{"class":54},[37,23400,23401],{"class":39,"line":1402},[37,23402,2472],{"emptyLinePlaceholder":131},[37,23404,23405],{"class":39,"line":1684},[37,23406,2259],{"class":54},[37,23408,23409],{"class":39,"line":1689},[37,23410,4067],{"class":54},[14,23412,23280],{},[14,23414,23415],{},"解释：静态成员函数也不属于类上",[123,23417,7746],{},{"title":32,"searchDepth":47,"depth":47,"links":23419},[23420,23426],{"id":14717,"depth":47,"text":14718,"children":23421},[23422,23423,23424,23425],{"id":14721,"depth":58,"text":14722},{"id":15446,"depth":58,"text":15447},{"id":15618,"depth":58,"text":15619},{"id":16077,"depth":58,"text":16078},{"id":18449,"depth":47,"text":18450,"children":23427},[23428,23429,23430,23431,23432,23433,23434,23435,23436],{"id":18461,"depth":58,"text":18462},{"id":18754,"depth":58,"text":18755},{"id":19245,"depth":58,"text":19246},{"id":20342,"depth":58,"text":20343},{"id":20765,"depth":58,"text":20766},{"id":21244,"depth":58,"text":21245},{"id":21619,"depth":58,"text":21620},{"id":22032,"depth":58,"text":22033},{"id":22969,"depth":58,"text":22970},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14682,"description":23437},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23444,"title":198,"body":23445,"description":128,"extension":129,"meta":23449,"navigation":131,"path":23451,"seo":23452,"stem":23453,"__hash__":23454},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23446,"toc":23447},[],{"title":32,"searchDepth":47,"depth":47,"links":23448},[],{"category":23450},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":198,"description":128},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23456,"title":23457,"body":23458,"description":32,"extension":129,"meta":24049,"navigation":131,"path":24050,"seo":24051,"stem":24052,"__hash__":24053},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23459,"toc":24031},[23460,23463,23467,23470,23473,23476,23494,23499,23502,23505,23508,23511,23516,23519,23524,23527,23530,23534,23537,23540,23546,23549,23567,23571,23575,23578,23583,23586,23590,23593,23606,23609,23613,23616,23619,23622,23647,23650,23659,23670,23685,23717,23721,23728,23736,23740,23743,23746,23751,23755,23758,23761,23766,23769,23773,23776,23779,23784,23787,23791,23796,23800,23867,23871,23874,23877,23880,23883,23886,23892,23913,23916,23930,23939,23943,23946,23949,23954,23957,23962,23967,23970,23973,23978,23983,23986,23991,23996,23999,24004,24009,24012,24015,24020,24023,24028],[10,23461,23457],{"id":23462},"_1强化学习基本认识",[146,23464,23466],{"id":23465},"_11什么是强化学习","1.1.什么是强化学习",[14,23468,23469],{},"强化学习有两部分组成：智能体和环境；",[14,23471,23472],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,23474,23475],{},"强化学习与监督学习的区别:",[158,23477,23478,23481,23484,23487],{},[161,23479,23480],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[161,23482,23483],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[161,23485,23486],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[161,23488,23489,23490,23493],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[354,23491,23492],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,23495,23496],{},[119,23497],{"alt":32,"src":23498},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,23500,23501],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,23503,23504],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,23506,23507],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,23509,23510],{},"获取奖励",[14,23512,23513],{},[119,23514],{"alt":32,"src":23515},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,23517,23518],{},"强化学习可以分成标准强化学习和深度强化学习",[14,23520,23521],{},[119,23522],{"alt":32,"src":23523},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,23525,23526],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,23528,23529],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[146,23531,23533],{"id":23532},"_12强化学习应用场景","1.2.强化学习应用场景",[14,23535,23536],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,23538,23539],{},"具身智能中的应用",[14,23541,23542,23545],{},[354,23543,23544],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,23547,23548],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,23550,23551,23552,23555,23556,23559,23560,23563,23564],{},"机器人是",[354,23553,23554],{},"躯体","，深度学习是",[354,23557,23558],{},"神经元****网络","，VLA是",[354,23561,23562],{},"通用的行为逻辑","，而强化学习是",[354,23565,23566],{},"教练",[146,23568,23570],{"id":23569},"_13序列决策","1.3.序列决策",[175,23572,23574],{"id":23573},"_131智能体与环境","1.3.1.智能体与环境",[14,23576,23577],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,23579,23580],{},[119,23581],{"alt":32,"src":23582},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,23584,23585],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[175,23587,23589],{"id":23588},"_132奖励","1.3.2.奖励",[14,23591,23592],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,23594,23595,23596,23605],{},"取某个策略的表现如何。强化学习的目的就是",[354,23597,23598,23599,23604],{},"最大化",[354,23600,23601],{},[354,23602,23603],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,23607,23608],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[175,23610,23612],{"id":23611},"_133序列决策","1.3.3.序列决策",[14,23614,23615],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,23617,23618],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,23620,23621],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,23623,23624,23628,23629,23631,23632,23634,23635,23637,23638,13867,23641,13867,23644],{},[23625,23626,23627],"em",{},"Ht"," = ",[23625,23630,799],{},"1*, a",[23625,23633,422],{},", r",[23625,23636,422],{},", . . . ,* ",[23625,23639,23640],{},"ot",[23625,23642,23643],{},", at ,",[23625,23645,23646],{},"rt",[14,23648,23649],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,23651,23652,23628,23655,1730,23657,86],{},[23625,23653,23654],{},"st",[23625,23656,258],{},[23625,23658,23627],{},[14,23660,23661,23662,23665,23666,23669],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[354,23663,23664],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[354,23667,23668],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,23671,23672,23673,23676,23677,23680,23681,23684],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[354,23674,23675],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[354,23678,23679],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23625,23682,23683],{},"S, A, T, R, Ω, O, γ",")。",[14,23686,23687,23688,23690,23691,23693,23694,208,23696,23699,23700,23702,23703,208,23706,23709,23710,23712,23713,23716],{},"其中 ",[23625,23689,892],{}," 表示状态空间，为隐变量，",[23625,23692,437],{}," 为动作空间，",[23625,23695,917],{},[23625,23697,23698],{},"s ′ |s, a",") 为状态转移概率，",[23625,23701,867],{}," 为奖励函数，",[23625,23704,23705],{},"Ω",[23625,23707,23708],{},"o|s, a",") 为观测概率，",[23625,23711,793],{}," 为观测空间，",[23625,23714,23715],{},"γ"," 为折扣因子。",[146,23718,23720],{"id":23719},"_14动作空间","1.4.动作空间",[14,23722,23723,23724,23727],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[354,23725,23726],{},"动作空间"," ，动作空间分为:",[158,23729,23730,23733],{},[161,23731,23732],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[161,23734,23735],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[146,23737,23739],{"id":23738},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,23741,23742],{},"由策略、价值函数、模型三部分组成",[14,23744,23745],{},"这三者组成马尔可夫决策过程",[14,23747,23748],{},[119,23749],{"alt":32,"src":23750},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[175,23752,23754],{"id":23753},"_151策略","1.5.1.策略",[14,23756,23757],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,23759,23760],{},"策略可分为两种：",[14,23762,23763],{},[119,23764],{"alt":32,"src":23765},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,23767,23768],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[175,23770,23772],{"id":23771},"_152价值函数","1.5.2.价值函数",[14,23774,23775],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,23777,23778],{},"价值函数中有一个折扣因子，类似于存款利息",[14,23780,23781],{},[119,23782],{"alt":32,"src":23783},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,23785,23786],{},"进入某个状态采取的最优动作可以通过Q函数得到",[175,23788,23790],{"id":23789},"_153模型","1.5.3.模型",[14,23792,23793],{},[119,23794],{"alt":32,"src":23795},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[146,23797,23799],{"id":23798},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[342,23801,23802,23813],{},[345,23803,23804],{},[348,23805,23806,23810],{},[351,23807,23809],{"align":23808},"left","类型",[351,23811,23812],{"align":23808},"特点",[389,23814,23815,23825,23835,23845,23857],{},[348,23816,23817,23822],{},[394,23818,23819],{"align":23808},[354,23820,23821],{},"基于价值的智能体",[394,23823,23824],{"align":23808},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[348,23826,23827,23832],{},[394,23828,23829],{"align":23808},[354,23830,23831],{},"基于策略的智能体",[394,23833,23834],{"align":23808},"直接学习策略，没有学习价值函数",[348,23836,23837,23842],{},[394,23838,23839],{"align":23808},[354,23840,23841],{},"演员-评论员智能体",[394,23843,23844],{"align":23808},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[348,23846,23847,23852],{},[394,23848,23849],{"align":23808},[354,23850,23851],{},"有模型强化学习智能体",[394,23853,23854],{"align":23808},[119,23855],{"alt":32,"src":23856},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[348,23858,23859,23864],{},[394,23860,23861],{"align":23808},[354,23862,23863],{},"免模型强化学习智能体",[394,23865,23866],{"align":23808},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[146,23868,23870],{"id":23869},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,23872,23873],{},"学习和规划是序列决策的两个基本问题",[14,23875,23876],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,23878,23879],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,23881,23882],{},"强化学习用到的库：Gym",[14,23884,23885],{},"Gym可以检验强化学习算法的优劣",[14,23887,23888,23891],{},[354,23889,23890],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[27,23893,23897],{"className":23894,"code":23895,"language":23896,"meta":32,"style":32},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[34,23898,23899],{"__ignoreMap":32},[37,23900,23901,23904,23907,23910],{"class":39,"line":40},[37,23902,23903],{"class":2035},"pip",[37,23905,23906],{"class":309}," install",[37,23908,23909],{"class":309}," gym==",[37,23911,23912],{"class":82},"0.25.2\n",[14,23914,23915],{},"显示图形界面需要",[27,23917,23919],{"className":23894,"code":23918,"language":23896,"meta":32,"style":32},"pip install pygame\n",[34,23920,23921],{"__ignoreMap":32},[37,23922,23923,23925,23927],{"class":39,"line":40},[37,23924,23903],{"class":2035},[37,23926,23906],{"class":309},[37,23928,23929],{"class":309}," pygame\n",[14,23931,23932,23933],{},"有关Gym库的相关文档介绍：",[443,23934,23938],{"href":23935,"rel":23936},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23937],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[146,23940,23942],{"id":23941},"_18一些补充基础概念","1.8.一些补充基础概念",[14,23944,23945],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,23947,23948],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,23950,23951],{},[119,23952],{"alt":32,"src":23953},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,23955,23956],{},"折扣率需要自己来设定",[14,23958,23959],{},[119,23960],{"alt":32,"src":23961},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[158,23963,23964],{},[161,23965,23966],{},"状态转移函数：",[14,23968,23969],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,23971,23972],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,23974,23975],{},[119,23976],{"alt":32,"src":23977},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[158,23979,23980],{"start":47},[161,23981,23982],{},"动作价值函数：",[14,23984,23985],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,23987,23988],{},[119,23989],{"alt":32,"src":23990},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[158,23992,23993],{"start":58},[161,23994,23995],{},"最优动作价值函数：",[14,23997,23998],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[14,24000,24001],{},[119,24002],{"alt":32,"src":24003},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[158,24005,24006],{"start":64},[161,24007,24008],{},"状态价值函数:",[14,24010,24011],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,24013,24014],{},"它衡量的是“一个具体动作”的长期价值",[14,24016,24017],{},[119,24018],{"alt":32,"src":24019},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,24021,24022],{},"几个价值函数之间的比较：",[14,24024,24025],{},[119,24026],{"alt":32,"src":24027},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[123,24029,24030],{},"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":32,"searchDepth":47,"depth":47,"links":24032},[24033,24034,24035,24040,24041,24046,24047,24048],{"id":23465,"depth":47,"text":23466},{"id":23532,"depth":47,"text":23533},{"id":23569,"depth":47,"text":23570,"children":24036},[24037,24038,24039],{"id":23573,"depth":58,"text":23574},{"id":23588,"depth":58,"text":23589},{"id":23611,"depth":58,"text":23612},{"id":23719,"depth":47,"text":23720},{"id":23738,"depth":47,"text":23739,"children":24042},[24043,24044,24045],{"id":23753,"depth":58,"text":23754},{"id":23771,"depth":58,"text":23772},{"id":23789,"depth":58,"text":23790},{"id":23798,"depth":47,"text":23799},{"id":23869,"depth":47,"text":23870},{"id":23941,"depth":47,"text":23942},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23457,"description":32},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24055,"title":24056,"body":24057,"description":24064,"extension":129,"meta":24075,"navigation":131,"path":24076,"seo":24077,"stem":24078,"__hash__":24079},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24058,"toc":24073},[24059,24062,24065,24070],[10,24060,24056],{"id":24061},"_2马尔可夫决策过程",[14,24063,24064],{},"这是强化学习的基本框架",[14,24066,24067],{},[119,24068],{"alt":32,"src":24069},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,24071,24072],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":32,"searchDepth":47,"depth":47,"links":24074},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24056,"description":24064},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24081,"title":24082,"body":24083,"description":32,"extension":129,"meta":24199,"navigation":131,"path":24200,"seo":24201,"stem":24202,"__hash__":24203},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24084,"toc":24194},[24085,24088,24092,24095,24100,24105,24108,24113,24116,24121,24124,24128,24133,24136,24141,24146,24151,24154,24158,24163,24166,24171,24176,24181,24186,24189],[10,24086,24082],{"id":24087},"_3动作价值函数",[146,24089,24091],{"id":24090},"_31dqn","3.1.DQN",[14,24093,24094],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24096,24097],{},[119,24098],{"alt":32,"src":24099},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24101,24102],{},[119,24103],{"alt":32,"src":24104},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24106,24107],{},"DQN算法的描述：",[14,24109,24110],{},[119,24111],{"alt":32,"src":24112},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24114,24115],{},"这里的Dense指的是全连接层",[14,24117,24118],{},[119,24119],{"alt":32,"src":24120},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24122,24123],{},"当前观测的状态为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算法",[146,24125,24127],{"id":24126},"_32dqn的举例","3.2.DQN的举例",[14,24129,24130],{},[119,24131],{"alt":32,"src":24132},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24134,24135],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24137,24138],{},[119,24139],{"alt":32,"src":24140},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24142,24143],{},[119,24144],{"alt":32,"src":24145},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24147,24148],{},[119,24149],{"alt":32,"src":24150},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24152,24153],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[146,24155,24157],{"id":24156},"_33td算法","3.3.TD算法",[14,24159,24160],{},[119,24161],{"alt":32,"src":24162},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24164,24165],{},"强化学习TD算法公式的粗略解释：",[14,24167,24168],{},[119,24169],{"alt":32,"src":24170},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24172,24173],{},[119,24174],{"alt":32,"src":24175},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24177,24178],{},[119,24179],{"alt":32,"src":24180},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24182,24183],{},[119,24184],{"alt":32,"src":24185},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24187,24188],{},"TD算法总结：",[14,24190,24191],{},[119,24192],{"alt":32,"src":24193},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":32,"searchDepth":47,"depth":47,"links":24195},[24196,24197,24198],{"id":24090,"depth":47,"text":24091},{"id":24126,"depth":47,"text":24127},{"id":24156,"depth":47,"text":24157},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24082,"description":32},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24205,"title":24206,"body":24207,"description":32,"extension":129,"meta":24440,"navigation":131,"path":24441,"seo":24442,"stem":24443,"__hash__":24444},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24208,"toc":24436},[24209,24212,24216,24219,24222,24227,24232,24235,24240,24245,24248,24253,24256,24261,24264,24269,24272,24277,24280,24285,24290,24293,24298,24301,24304,24309,24312,24317,24322,24326,24329,24332,24337,24342,24345,24350,24355,24358,24363,24366,24369,24374,24377,24382,24385,24390,24395,24398,24403,24408,24411,24416,24419,24424,24427],[10,24210,24206],{"id":24211},"_4策略学习",[146,24213,24215],{"id":24214},"_41概念描述","4.1.概念描述",[14,24217,24218],{},"用神经网络（策略网络）近似策略函数",[14,24220,24221],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24223,24224],{},[119,24225],{"alt":32,"src":24226},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24228,24229],{},[119,24230],{"alt":32,"src":24231},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24233,24234],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24236,24237],{},[119,24238],{"alt":32,"src":24239},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24241,24242],{},[119,24243],{"alt":32,"src":24244},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24246,24247],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24249,24250],{},[119,24251],{"alt":32,"src":24252},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24254,24255],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24257,24258],{},[119,24259],{"alt":32,"src":24260},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24262,24263],{},"改进theta要用到策略梯度算法",[14,24265,24266],{},[119,24267],{"alt":32,"src":24268},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24270,24271],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24273,24274],{},[119,24275],{"alt":32,"src":24276},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24278,24279],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24281,24282],{},[119,24283],{"alt":32,"src":24284},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24286,24287],{},[119,24288],{"alt":32,"src":24289},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24291,24292],{},"梯度公式总结：",[14,24294,24295],{},[119,24296],{"alt":32,"src":24297},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24299,24300],{},"两个公式的分别应用场景：",[14,24302,24303],{},"对于离散的动作：",[14,24305,24306],{},[119,24307],{"alt":32,"src":24308},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24310,24311],{},"对于连续的动作：",[14,24313,24314],{},[119,24315],{"alt":32,"src":24316},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24318,24319],{},[119,24320],{"alt":32,"src":24321},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[146,24323,24325],{"id":24324},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24327,24328],{},"使用蒙特卡洛来近似计算策略梯度",[14,24330,24331],{},"蒙特卡洛法的解释如下：",[14,24333,24334],{},[119,24335],{"alt":32,"src":24336},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,24338,24339],{},[119,24340],{"alt":32,"src":24341},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,24343,24344],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[158,24346,24347],{},[161,24348,24349],{},"方法一：reinforce算法",[14,24351,24352],{},[119,24353],{"alt":32,"src":24354},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,24356,24357],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[158,24359,24360],{"start":47},[161,24361,24362],{},"方法二：actor-critic算法",[14,24364,24365],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,24367,24368],{},"两个网络的构建：",[14,24370,24371],{},[119,24372],{"alt":32,"src":24373},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,24375,24376],{},"actor网路：",[14,24378,24379],{},[119,24380],{"alt":32,"src":24381},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,24383,24384],{},"critic网络",[14,24386,24387],{},[119,24388],{"alt":32,"src":24389},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[158,24391,24392],{"start":58},[161,24393,24394],{},"网络的训练",[14,24396,24397],{},"网络描述",[14,24399,24400],{},[119,24401],{"alt":32,"src":24402},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,24404,24405],{},[119,24406],{"alt":32,"src":24407},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,24409,24410],{},"TD算法更新梯度：",[14,24412,24413],{},[119,24414],{"alt":32,"src":24415},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,24417,24418],{},"策略网络更新梯度：",[14,24420,24421],{},[119,24422],{"alt":32,"src":24423},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,24425,24426],{},"训练整个流程的具体描述：",[14,24428,24429,24432,24433],{},[119,24430],{"alt":32,"src":24431},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[119,24434],{"alt":32,"src":24435},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":32,"searchDepth":47,"depth":47,"links":24437},[24438,24439],{"id":24214,"depth":47,"text":24215},{"id":24324,"depth":47,"text":24325},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24206,"description":32},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24446,"title":24447,"body":24448,"description":24455,"extension":129,"meta":24505,"navigation":131,"path":24506,"seo":24507,"stem":24508,"__hash__":24509},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24449,"toc":24501},[24450,24453,24456,24460,24463,24468,24472,24475,24480,24483,24488,24493,24496],[10,24451,24447],{"id":24452},"_5alphago算法",[14,24454,24455],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[146,24457,24459],{"id":24458},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,24461,24462],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,24464,24465],{},[119,24466],{"alt":32,"src":24467},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[146,24469,24471],{"id":24470},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,24473,24474],{},"采用强化学习的方式训练策略网络",[14,24476,24477],{},[119,24478],{"alt":32,"src":24479},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,24481,24482],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,24484,24485],{},[119,24486],{"alt":32,"src":24487},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,24489,24490],{},[119,24491],{"alt":32,"src":24492},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,24494,24495],{},"强化学习训练策略网络的总结：",[14,24497,24498],{},[119,24499],{"alt":32,"src":24500},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":32,"searchDepth":47,"depth":47,"links":24502},[24503,24504],{"id":24458,"depth":47,"text":24459},{"id":24470,"depth":47,"text":24471},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24447,"description":24455},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24511,"title":24512,"body":24513,"description":24520,"extension":129,"meta":24523,"navigation":131,"path":24524,"seo":24525,"stem":24526,"__hash__":24527},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24514,"toc":24521},[24515,24518],[10,24516,24512],{"id":24517},"_6价值网络",[14,24519,24520],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":32,"searchDepth":47,"depth":47,"links":24522},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24512,"description":24520},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24529,"title":24530,"body":24531,"description":24535,"extension":129,"meta":24536,"navigation":131,"path":24537,"seo":24538,"stem":24539,"__hash__":24540},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24532,"toc":24533},[],{"title":32,"searchDepth":47,"depth":47,"links":24534},[],"记录自己的强化学习笔记。",{"category":23450},"\u002Fwiki\u002F2025-12-04",{"title":24530,"description":24535},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24542,"title":24543,"body":24544,"description":128,"extension":129,"meta":24583,"navigation":131,"path":24584,"seo":24585,"stem":24586,"__hash__":24587},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24545,"toc":24581},[24546,24549,24552,24558,24561,24567,24570,24575,24578],[10,24547,24543],{"id":24548},"_1-项目概览与官方资源",[14,24550,24551],{},"官方文档：",[14,24553,24554],{},[443,24555,24556],{"href":24556,"rel":24557},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23937],[14,24559,24560],{},"官方代码仓库：",[14,24562,24563],{},[443,24564,24565],{"href":24565,"rel":24566},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23937],[14,24568,24569],{},"复现大体流程：",[14,24571,24572],{},[119,24573],{"alt":32,"src":24574},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,24576,24577],{},"本教程的目标是打通这条链路：",[14,24579,24580],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":32,"searchDepth":47,"depth":47,"links":24582},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24543,"description":128},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24589,"title":24590,"body":24591,"description":128,"extension":129,"meta":24707,"navigation":131,"path":24708,"seo":24709,"stem":24710,"__hash__":24711},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24592,"toc":24702},[24593,24596,24600,24603,24610,24614,24617,24626,24636,24640,24670,24673,24699],[10,24594,24590],{"id":24595},"_2-环境准备与设备连接",[146,24597,24599],{"id":24598},"_21-系统与环境","2.1 系统与环境",[14,24601,24602],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,24604,24605,24606,24609],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[34,24607,24608],{},"lerobot"," 依赖。",[146,24611,24613],{"id":24612},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,24615,24616],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[27,24618,24620],{"className":23894,"code":24619,"language":23896,"meta":32,"style":32},"lerobot-find-out\n",[34,24621,24622],{"__ignoreMap":32},[37,24623,24624],{"class":39,"line":40},[37,24625,24619],{"class":2035},[14,24627,24628,24629,417,24632,24635],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[34,24630,24631],{},"\u002Fdev\u002FttyACM0",[34,24633,24634],{},"\u002Fdev\u002FttyACM1","）。",[146,24637,24639],{"id":24638},"_23-串口授权","2.3 串口授权",[27,24641,24643],{"className":23894,"code":24642,"language":23896,"meta":32,"style":32},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[34,24644,24645,24659],{"__ignoreMap":32},[37,24646,24647,24650,24653,24656],{"class":39,"line":40},[37,24648,24649],{"class":2035},"sudo",[37,24651,24652],{"class":309}," chmod",[37,24654,24655],{"class":82}," 666",[37,24657,24658],{"class":309}," \u002Fdev\u002FttyACM0\n",[37,24660,24661,24663,24665,24667],{"class":39,"line":47},[37,24662,24649],{"class":2035},[37,24664,24652],{"class":309},[37,24666,24655],{"class":82},[37,24668,24669],{"class":309}," \u002Fdev\u002FttyACM1\n",[14,24671,24672],{},"说明：",[1210,24674,24675,24680,24686,24696],{},[161,24676,24677,24679],{},[34,24678,24649],{},"：以 root 权限执行命令。",[161,24681,24682,24685],{},[34,24683,24684],{},"chmod","：修改设备节点权限。",[161,24687,24688,24691,24692,24695],{},[34,24689,24690],{},"666","：",[34,24693,24694],{},"rw-rw-rw-","，所有用户可读写。",[161,24697,24698],{},"串口号必须替换为你机器上的真实端口。",[123,24700,24701],{},"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":32,"searchDepth":47,"depth":47,"links":24703},[24704,24705,24706],{"id":24598,"depth":47,"text":24599},{"id":24612,"depth":47,"text":24613},{"id":24638,"depth":47,"text":24639},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24590,"description":128},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24713,"title":24714,"body":24715,"description":128,"extension":129,"meta":24876,"navigation":131,"path":24877,"seo":24878,"stem":24879,"__hash__":24880},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24716,"toc":24872},[24717,24721,24725,24731,24734,24791,24794,24798,24801,24869],[10,24718,24720],{"id":24719},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[146,24722,24724],{"id":24723},"_31-配置电机-id","3.1 配置电机 ID",[14,24726,24727,24728,24730],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[34,24729,422],{},"，需要改成机械臂链路里不冲突的编号。",[14,24732,24733],{},"方式一：用 LeRobot 命令逐步写入。",[27,24735,24737],{"className":23894,"code":24736,"language":23896,"meta":32,"style":32},"# 主臂舵机配置 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",[34,24738,24739,24744,24752,24759,24764,24768,24773,24779,24786],{"__ignoreMap":32},[37,24740,24741],{"class":39,"line":40},[37,24742,24743],{"class":43},"# 主臂舵机配置 ID\n",[37,24745,24746,24749],{"class":39,"line":47},[37,24747,24748],{"class":2035},"lerobot-setup-motors",[37,24750,24751],{"class":82}," \\\n",[37,24753,24754,24757],{"class":39,"line":58},[37,24755,24756],{"class":82},"  --teleop.type=so101_leader",[37,24758,24751],{"class":82},[37,24760,24761],{"class":39,"line":64},[37,24762,24763],{"class":82},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[37,24765,24766],{"class":39,"line":76},[37,24767,2472],{"emptyLinePlaceholder":131},[37,24769,24770],{"class":39,"line":92},[37,24771,24772],{"class":43},"# 从臂舵机配置 ID\n",[37,24774,24775,24777],{"class":39,"line":97},[37,24776,24748],{"class":2035},[37,24778,24751],{"class":82},[37,24780,24781,24784],{"class":39,"line":107},[37,24782,24783],{"class":82},"  --robot.type=so101_follower",[37,24785,24751],{"class":82},[37,24787,24788],{"class":39,"line":1390},[37,24789,24790],{"class":82},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,24792,24793],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[146,24795,24797],{"id":24796},"_32-机械臂校准","3.2 机械臂校准",[14,24799,24800],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[27,24802,24804],{"className":23894,"code":24803,"language":23896,"meta":32,"style":32},"# 主臂校准\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",[34,24805,24806,24811,24818,24824,24831,24836,24840,24845,24851,24857,24864],{"__ignoreMap":32},[37,24807,24808],{"class":39,"line":40},[37,24809,24810],{"class":43},"# 主臂校准\n",[37,24812,24813,24816],{"class":39,"line":47},[37,24814,24815],{"class":2035},"lerobot-calibrate",[37,24817,24751],{"class":82},[37,24819,24820,24822],{"class":39,"line":58},[37,24821,24756],{"class":82},[37,24823,24751],{"class":82},[37,24825,24826,24829],{"class":39,"line":64},[37,24827,24828],{"class":82},"  --teleop.port=\u002Fdev\u002FttyACM0",[37,24830,24751],{"class":82},[37,24832,24833],{"class":39,"line":76},[37,24834,24835],{"class":82},"  --teleop.id=my_awesome_leader_arm\n",[37,24837,24838],{"class":39,"line":92},[37,24839,2472],{"emptyLinePlaceholder":131},[37,24841,24842],{"class":39,"line":97},[37,24843,24844],{"class":43},"# 从臂校准\n",[37,24846,24847,24849],{"class":39,"line":107},[37,24848,24815],{"class":2035},[37,24850,24751],{"class":82},[37,24852,24853,24855],{"class":39,"line":1390},[37,24854,24783],{"class":82},[37,24856,24751],{"class":82},[37,24858,24859,24862],{"class":39,"line":1402},[37,24860,24861],{"class":82},"  --robot.port=\u002Fdev\u002FttyACM1",[37,24863,24751],{"class":82},[37,24865,24866],{"class":39,"line":1684},[37,24867,24868],{"class":82},"  --robot.id=my_awesome_follower_arm\n",[123,24870,24871],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":32,"searchDepth":47,"depth":47,"links":24873},[24874,24875],{"id":24723,"depth":47,"text":24724},{"id":24796,"depth":47,"text":24797},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24714,"description":128},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24882,"title":24883,"body":24884,"description":128,"extension":129,"meta":25075,"navigation":131,"path":25076,"seo":25077,"stem":25078,"__hash__":25079},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24885,"toc":25071},[24886,24889,24893,24940,24944,24957,25020,25023,25068],[10,24887,24883],{"id":24888},"_4-遥操与相机接入",[146,24890,24892],{"id":24891},"_41-不带相机遥操","4.1 不带相机遥操",[27,24894,24896],{"className":23894,"code":24895,"language":23896,"meta":32,"style":32},"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",[34,24897,24898,24905,24911,24917,24924,24930,24936],{"__ignoreMap":32},[37,24899,24900,24903],{"class":39,"line":40},[37,24901,24902],{"class":2035},"lerobot-teleoperate",[37,24904,24751],{"class":82},[37,24906,24907,24909],{"class":39,"line":47},[37,24908,24783],{"class":82},[37,24910,24751],{"class":82},[37,24912,24913,24915],{"class":39,"line":58},[37,24914,24861],{"class":82},[37,24916,24751],{"class":82},[37,24918,24919,24922],{"class":39,"line":64},[37,24920,24921],{"class":82},"  --robot.id=my_awesome_follower_arm",[37,24923,24751],{"class":82},[37,24925,24926,24928],{"class":39,"line":76},[37,24927,24756],{"class":82},[37,24929,24751],{"class":82},[37,24931,24932,24934],{"class":39,"line":92},[37,24933,24828],{"class":82},[37,24935,24751],{"class":82},[37,24937,24938],{"class":39,"line":97},[37,24939,24835],{"class":82},[146,24941,24943],{"id":24942},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[27,24945,24947],{"className":23894,"code":24946,"language":23896,"meta":32,"style":32},"lerobot-find-cameras opencv\n",[34,24948,24949],{"__ignoreMap":32},[37,24950,24951,24954],{"class":39,"line":40},[37,24952,24953],{"class":2035},"lerobot-find-cameras",[37,24955,24956],{"class":309}," opencv\n",[27,24958,24960],{"className":23894,"code":24959,"language":23896,"meta":32,"style":32},"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",[34,24961,24962,24968,24974,24980,24986,24996,25002,25008,25015],{"__ignoreMap":32},[37,24963,24964,24966],{"class":39,"line":40},[37,24965,24902],{"class":2035},[37,24967,24751],{"class":82},[37,24969,24970,24972],{"class":39,"line":47},[37,24971,24783],{"class":82},[37,24973,24751],{"class":82},[37,24975,24976,24978],{"class":39,"line":58},[37,24977,24861],{"class":82},[37,24979,24751],{"class":82},[37,24981,24982,24984],{"class":39,"line":64},[37,24983,24921],{"class":82},[37,24985,24751],{"class":82},[37,24987,24988,24991,24994],{"class":39,"line":76},[37,24989,24990],{"class":82},"  --robot.cameras=",[37,24992,24993],{"class":309},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[37,24995,24751],{"class":82},[37,24997,24998,25000],{"class":39,"line":92},[37,24999,24756],{"class":82},[37,25001,24751],{"class":82},[37,25003,25004,25006],{"class":39,"line":97},[37,25005,24828],{"class":82},[37,25007,24751],{"class":82},[37,25009,25010,25013],{"class":39,"line":107},[37,25011,25012],{"class":82},"  --teleop.id=my_awesome_leader_arm",[37,25014,24751],{"class":82},[37,25016,25017],{"class":39,"line":1390},[37,25018,25019],{"class":82},"  --display_data=true\n",[14,25021,25022],{},"相机参数说明：",[1210,25024,25025,25031,25037,25046,25056,25062],{},[161,25026,25027,25030],{},[34,25028,25029],{},"front","：相机名称。",[161,25032,25033,25036],{},[34,25034,25035],{},"type: opencv","：相机驱动类型。",[161,25038,25039,25042,25043,24635],{},[34,25040,25041],{},"index_or_path","：设备编号或设备路径（如 ",[34,25044,25045],{},"\u002Fdev\u002Fvideo4",[161,25047,25048,25051,25052,25055],{},[34,25049,25050],{},"width"," \u002F ",[34,25053,25054],{},"height","：图像分辨率。",[161,25057,25058,25061],{},[34,25059,25060],{},"fps","：采样帧率。",[161,25063,25064,25067],{},[34,25065,25066],{},"--display_data=true","：启用实时可视化。",[123,25069,25070],{},"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":32,"searchDepth":47,"depth":47,"links":25072},[25073,25074],{"id":24891,"depth":47,"text":24892},{"id":24942,"depth":47,"text":24943},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24883,"description":128},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25081,"title":25082,"body":25083,"description":128,"extension":129,"meta":25255,"navigation":131,"path":25256,"seo":25257,"stem":25258,"__hash__":25259},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25084,"toc":25250},[25085,25089,25093,25098,25103,25106,25148,25154,25158,25207,25212,25216,25219,25227,25232,25237,25242,25247],[10,25086,25088],{"id":25087},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[146,25090,25092],{"id":25091},"_51-生成访问令牌","5.1 生成访问令牌",[14,25094,25095],{},[119,25096],{"alt":32,"src":25097},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25099,25100],{},[119,25101],{"alt":32,"src":25102},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25104,25105],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[27,25107,25109],{"className":23894,"code":25108,"language":23896,"meta":32,"style":32},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[34,25110,25111,25124],{"__ignoreMap":32},[37,25112,25113,25116,25119,25121],{"class":39,"line":40},[37,25114,25115],{"class":50},"export",[37,25117,25118],{"class":54}," HF_TOKEN",[37,25120,70],{"class":50},[37,25122,25123],{"class":309},"\"your_huggingface_token\"\n",[37,25125,25126,25129,25132,25135,25138,25140,25143,25145],{"class":39,"line":47},[37,25127,25128],{"class":2035},"hf",[37,25130,25131],{"class":309}," auth",[37,25133,25134],{"class":309}," login",[37,25136,25137],{"class":82}," --token",[37,25139,9796],{"class":309},[37,25141,25142],{"class":54},"$HF_TOKEN",[37,25144,456],{"class":309},[37,25146,25147],{"class":82}," --add-to-git-credential\n",[14,25149,25150,25153],{},[34,25151,25152],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[146,25155,25157],{"id":25156},"_52-验证登录","5.2 验证登录",[27,25159,25161],{"className":23894,"code":25160,"language":23896,"meta":32,"style":32},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[34,25162,25163,25194],{"__ignoreMap":32},[37,25164,25165,25168,25170,25173,25175,25177,25180,25183,25186,25189,25192],{"class":39,"line":40},[37,25166,25167],{"class":54},"HF_USER",[37,25169,70],{"class":50},[37,25171,25172],{"class":54},"$(",[37,25174,25128],{"class":2035},[37,25176,25131],{"class":309},[37,25178,25179],{"class":309}," whoami",[37,25181,25182],{"class":50}," |",[37,25184,25185],{"class":2035}," head",[37,25187,25188],{"class":82}," -n",[37,25190,25191],{"class":82}," 1",[37,25193,214],{"class":54},[37,25195,25196,25199,25201,25204],{"class":39,"line":47},[37,25197,25198],{"class":82},"echo",[37,25200,9796],{"class":309},[37,25202,25203],{"class":54},"$HF_USER",[37,25205,25206],{"class":309},"\"\n",[14,25208,25209],{},[119,25210],{"alt":32,"src":25211},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[146,25213,25215],{"id":25214},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25217,25218],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1210,25220,25221,25224],{},[161,25222,25223],{},"Dataset Repo（用于上传演示数据）",[161,25225,25226],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25228,25229],{},[119,25230],{"alt":32,"src":25231},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25233,25234],{},[119,25235],{"alt":32,"src":25236},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25238,25239],{},[119,25240],{"alt":32,"src":25241},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25243,25244],{},[119,25245],{"alt":32,"src":25246},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[123,25248,25249],{},"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":32,"searchDepth":47,"depth":47,"links":25251},[25252,25253,25254],{"id":25091,"depth":47,"text":25092},{"id":25156,"depth":47,"text":25157},{"id":25214,"depth":47,"text":25215},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25082,"description":128},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25261,"title":25262,"body":25263,"description":128,"extension":129,"meta":25460,"navigation":131,"path":25461,"seo":25462,"stem":25463,"__hash__":25464},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25264,"toc":25455},[25265,25269,25273,25369,25377,25382,25386,25402,25405,25409,25452],[10,25266,25268],{"id":25267},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[146,25270,25272],{"id":25271},"_61-录制示教数据","6.1 录制示教数据",[27,25274,25276],{"className":23894,"code":25275,"language":23896,"meta":32,"style":32},"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",[34,25277,25278,25285,25291,25297,25303,25312,25318,25324,25330,25337,25347,25354,25364],{"__ignoreMap":32},[37,25279,25280,25283],{"class":39,"line":40},[37,25281,25282],{"class":2035},"lerobot-record",[37,25284,24751],{"class":82},[37,25286,25287,25289],{"class":39,"line":47},[37,25288,24783],{"class":82},[37,25290,24751],{"class":82},[37,25292,25293,25295],{"class":39,"line":58},[37,25294,24861],{"class":82},[37,25296,24751],{"class":82},[37,25298,25299,25301],{"class":39,"line":64},[37,25300,24921],{"class":82},[37,25302,24751],{"class":82},[37,25304,25305,25307,25310],{"class":39,"line":76},[37,25306,24990],{"class":82},[37,25308,25309],{"class":309},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[37,25311,24751],{"class":82},[37,25313,25314,25316],{"class":39,"line":92},[37,25315,24756],{"class":82},[37,25317,24751],{"class":82},[37,25319,25320,25322],{"class":39,"line":97},[37,25321,24828],{"class":82},[37,25323,24751],{"class":82},[37,25325,25326,25328],{"class":39,"line":107},[37,25327,25012],{"class":82},[37,25329,24751],{"class":82},[37,25331,25332,25335],{"class":39,"line":1390},[37,25333,25334],{"class":82},"  --display_data=true",[37,25336,24751],{"class":82},[37,25338,25339,25342,25345],{"class":39,"line":1402},[37,25340,25341],{"class":82},"  --dataset.repo_id=",[37,25343,25344],{"class":309},"\"Embodied-AI-6\u002Fso101_test\"",[37,25346,24751],{"class":82},[37,25348,25349,25352],{"class":39,"line":1684},[37,25350,25351],{"class":82},"  --dataset.num_episodes=10",[37,25353,24751],{"class":82},[37,25355,25356,25359,25362],{"class":39,"line":1689},[37,25357,25358],{"class":82},"  --dataset.single_task=",[37,25360,25361],{"class":309},"\"Grab the green cube\"",[37,25363,24751],{"class":82},[37,25365,25366],{"class":39,"line":1695},[37,25367,25368],{"class":82},"  --resume=true\n",[1210,25370,25371],{},[161,25372,25373,25376],{},[34,25374,25375],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,25378,25379],{},[119,25380],{"alt":32,"src":25381},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[146,25383,25385],{"id":25384},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[27,25387,25389],{"className":23894,"code":25388,"language":23896,"meta":32,"style":32},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[34,25390,25391],{"__ignoreMap":32},[37,25392,25393,25396,25399],{"class":39,"line":40},[37,25394,25395],{"class":2035},"rm",[37,25397,25398],{"class":82}," -rf",[37,25400,25401],{"class":309}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,25403,25404],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[146,25406,25408],{"id":25407},"_63-回放指定-episode","6.3 回放指定 episode",[27,25410,25412],{"className":23894,"code":25411,"language":23896,"meta":32,"style":32},"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",[34,25413,25414,25421,25427,25433,25439,25447],{"__ignoreMap":32},[37,25415,25416,25419],{"class":39,"line":40},[37,25417,25418],{"class":2035},"lerobot-replay",[37,25420,24751],{"class":82},[37,25422,25423,25425],{"class":39,"line":47},[37,25424,24783],{"class":82},[37,25426,24751],{"class":82},[37,25428,25429,25431],{"class":39,"line":58},[37,25430,24861],{"class":82},[37,25432,24751],{"class":82},[37,25434,25435,25437],{"class":39,"line":64},[37,25436,24921],{"class":82},[37,25438,24751],{"class":82},[37,25440,25441,25443,25445],{"class":39,"line":76},[37,25442,25341],{"class":82},[37,25444,25344],{"class":309},[37,25446,24751],{"class":82},[37,25448,25449],{"class":39,"line":92},[37,25450,25451],{"class":82},"  --dataset.episode=0\n",[123,25453,25454],{},"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":32,"searchDepth":47,"depth":47,"links":25456},[25457,25458,25459],{"id":25271,"depth":47,"text":25272},{"id":25384,"depth":47,"text":25385},{"id":25407,"depth":47,"text":25408},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25262,"description":128},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25466,"title":25467,"body":25468,"description":128,"extension":129,"meta":25596,"navigation":131,"path":25597,"seo":25598,"stem":25599,"__hash__":25600},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25469,"toc":25594},[25470,25474,25537,25540,25587,25592],[10,25471,25473],{"id":25472},"_7-act-模型训练","7. ACT 模型训练",[27,25475,25477],{"className":23894,"code":25476,"language":23896,"meta":32,"style":32},"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",[34,25478,25479,25486,25494,25501,25508,25515,25522,25529],{"__ignoreMap":32},[37,25480,25481,25484],{"class":39,"line":40},[37,25482,25483],{"class":2035},"lerobot-train",[37,25485,24751],{"class":82},[37,25487,25488,25490,25492],{"class":39,"line":47},[37,25489,25341],{"class":82},[37,25491,25344],{"class":309},[37,25493,24751],{"class":82},[37,25495,25496,25499],{"class":39,"line":58},[37,25497,25498],{"class":82},"  --policy.type=act",[37,25500,24751],{"class":82},[37,25502,25503,25506],{"class":39,"line":64},[37,25504,25505],{"class":82},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[37,25507,24751],{"class":82},[37,25509,25510,25513],{"class":39,"line":76},[37,25511,25512],{"class":82},"  --job_name=act_so101_test",[37,25514,24751],{"class":82},[37,25516,25517,25520],{"class":39,"line":92},[37,25518,25519],{"class":82},"  --policy.device=cuda",[37,25521,24751],{"class":82},[37,25523,25524,25527],{"class":39,"line":97},[37,25525,25526],{"class":82},"  --wandb.enable=false",[37,25528,24751],{"class":82},[37,25530,25531,25534],{"class":39,"line":107},[37,25532,25533],{"class":82},"  --policy.repo_id=",[37,25535,25536],{"class":309},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,25538,25539],{},"参数说明：",[1210,25541,25542,25548,25554,25560,25566,25575,25581],{},[161,25543,25544,25547],{},[34,25545,25546],{},"--dataset.repo_id","：训练数据集仓库。",[161,25549,25550,25553],{},[34,25551,25552],{},"--policy.type=act","：策略模型类型为 ACT。",[161,25555,25556,25559],{},[34,25557,25558],{},"--output_dir","：本地训练输出目录。",[161,25561,25562,25565],{},[34,25563,25564],{},"--job_name","：训练任务名称。",[161,25567,25568,25571,25572,24635],{},[34,25569,25570],{},"--policy.device","：训练设备（如 ",[34,25573,25574],{},"cuda",[161,25576,25577,25580],{},[34,25578,25579],{},"--wandb.enable","：是否启用 WandB 可视化。",[161,25582,25583,25586],{},[34,25584,25585],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,25588,25589],{},[119,25590],{"alt":32,"src":25591},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[123,25593,25454],{},{"title":32,"searchDepth":47,"depth":47,"links":25595},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25467,"description":128},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25602,"title":25603,"body":25604,"description":128,"extension":129,"meta":25691,"navigation":131,"path":25692,"seo":25693,"stem":25694,"__hash__":25695},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25605,"toc":25689},[25606,25609,25612,25679,25687],[10,25607,25603],{"id":25608},"_8-策略部署与自动采集",[14,25610,25611],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[27,25613,25615],{"className":23894,"code":25614,"language":23896,"meta":32,"style":32},"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",[34,25616,25617,25623,25629,25635,25643,25649,25656,25664,25672],{"__ignoreMap":32},[37,25618,25619,25621],{"class":39,"line":40},[37,25620,25282],{"class":2035},[37,25622,24751],{"class":82},[37,25624,25625,25627],{"class":39,"line":47},[37,25626,24783],{"class":82},[37,25628,24751],{"class":82},[37,25630,25631,25633],{"class":39,"line":58},[37,25632,24861],{"class":82},[37,25634,24751],{"class":82},[37,25636,25637,25639,25641],{"class":39,"line":64},[37,25638,24990],{"class":82},[37,25640,25309],{"class":309},[37,25642,24751],{"class":82},[37,25644,25645,25647],{"class":39,"line":76},[37,25646,24921],{"class":82},[37,25648,24751],{"class":82},[37,25650,25651,25654],{"class":39,"line":92},[37,25652,25653],{"class":82},"  --display_data=false",[37,25655,24751],{"class":82},[37,25657,25658,25660,25662],{"class":39,"line":97},[37,25659,25341],{"class":82},[37,25661,25344],{"class":309},[37,25663,24751],{"class":82},[37,25665,25666,25668,25670],{"class":39,"line":107},[37,25667,25358],{"class":82},[37,25669,25361],{"class":309},[37,25671,24751],{"class":82},[37,25673,25674,25677],{"class":39,"line":1390},[37,25675,25676],{"class":82},"  --policy.path=",[37,25678,25536],{"class":309},[1210,25680,25681],{},[161,25682,25683,25686],{},[34,25684,25685],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[123,25688,25454],{},{"title":32,"searchDepth":47,"depth":47,"links":25690},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25603,"description":128},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25697,"title":25698,"body":25699,"description":128,"extension":129,"meta":25728,"navigation":131,"path":25729,"seo":25730,"stem":25731,"__hash__":25732},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25700,"toc":25726},[25701,25705,25708,25714,25717,25723],[10,25702,25704],{"id":25703},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,25706,25707],{},"项目地址：",[14,25709,25710],{},[443,25711,25712],{"href":25712,"rel":25713},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23937],[14,25715,25716],{},"参考教程：",[14,25718,25719],{},[443,25720,25721],{"href":25721,"rel":25722},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23937],[14,25724,25725],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":32,"searchDepth":47,"depth":47,"links":25727},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25698,"description":128},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25734,"title":25735,"body":25736,"description":25740,"extension":129,"meta":25741,"navigation":131,"path":25742,"seo":25743,"stem":25744,"__hash__":25745},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25737,"toc":25738},[],{"title":32,"searchDepth":47,"depth":47,"links":25739},[],"act复现",{"category":23450},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25735,"description":25740},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25747,"title":25748,"body":25749,"description":32,"extension":129,"meta":26051,"navigation":131,"path":26052,"seo":26053,"stem":26054,"__hash__":26055},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25750,"toc":26043},[25751,25754,25758,25768,25775,25782,25785,25792,25795,25798,25802,25814,25818,25864,25867,25870,25873,25876,25879,25883,25921,25927,25931,25985,25990,25993,25996,26001,26004,26009,26012,26015,26019,26022,26025,26029],[10,25752,25748],{"id":25753},"_1简介",[175,25755,25757],{"id":25756},"_11什么是-docker","1.1什么是 Docker？",[14,25759,25760,25761,25764,25765],{},"Docker 是一个开源的 ",[354,25762,25763],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[354,25766,25767],{},"一次构建，到处运行。",[14,25769,25770,25771,25774],{},"“ ",[354,25772,25773],{},"一次构建，到处运行"," ”也就是说：",[158,25776,25777],{},[161,25778,25779],{},[354,25780,25781],{},"之前：",[14,25783,25784],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[158,25786,25787],{},[161,25788,25789],{},[354,25790,25791],{},"使用docker后：",[14,25793,25794],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,25796,25797],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[175,25799,25801],{"id":25800},"_12它是怎么工作的","1.2.它是怎么工作的？",[1210,25803,25804,25807],{},[161,25805,25806],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[161,25808,25809,25810,25813],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[354,25811,25812],{},"无论在哪运行都一样稳定"," 。",[175,25815,25817],{"id":25816},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[342,25819,25820,25830],{},[345,25821,25822],{},[348,25823,25824,25827],{},[351,25825,25826],{"align":23808},"概念",[351,25828,25829],{"align":23808},"解释",[389,25831,25832,25840,25848,25856],{},[348,25833,25834,25837],{},[394,25835,25836],{"align":23808},"镜像",[394,25838,25839],{"align":23808},"Image，运行容器的模板，像是一个应用快照",[348,25841,25842,25845],{},[394,25843,25844],{"align":23808},"容器",[394,25846,25847],{"align":23808},"Container，运行中的镜像实例，有自己的文件系统、网络等",[348,25849,25850,25853],{},[394,25851,25852],{"align":23808},"Dockerfile",[394,25854,25855],{"align":23808},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[348,25857,25858,25861],{},[394,25859,25860],{"align":23808},"仓库",[394,25862,25863],{"align":23808},"Registry，存放镜像的地方，比如 Docker Hub",[14,25865,25866],{},"抽象化理解:",[14,25868,25869],{},"Docker镜像≈C++类",[14,25871,25872],{},"Docker容器≈C++类实例(即对象)",[14,25874,25875],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,25877,25878],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[175,25880,25882],{"id":25881},"_14类比理解","1.4.类比理解",[342,25884,25885,25895],{},[345,25886,25887],{},[348,25888,25889,25892],{},[351,25890,25891],{"align":23808},"传统部署",[351,25893,25894],{"align":23808},"Docker部署",[389,25896,25897,25905,25913],{},[348,25898,25899,25902],{},[394,25900,25901],{"align":23808},"手动安装依赖、调试版本不一致问题",[394,25903,25904],{"align":23808},"一次打包环境和代码",[348,25906,25907,25910],{},[394,25908,25909],{"align":23808},"程序“裸奔”跑在系统上",[394,25911,25912],{"align":23808},"程序“穿着容器”隔离运行",[348,25914,25915,25918],{},[394,25916,25917],{"align":23808},"容易“在我电脑上能跑”",[394,25919,25920],{"align":23808},"保证“无论在哪都能跑”",[14,25922,25923,25924],{},"就像快递包裹： ",[354,25925,25926],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[175,25928,25930],{"id":25929},"_15docker-的核心优势","1.5.Docker 的核心优势",[342,25932,25933,25943],{},[345,25934,25935],{},[348,25936,25937,25940],{},[351,25938,25939],{"align":23808},"优势",[351,25941,25942],{"align":23808},"说明",[389,25944,25945,25953,25961,25969,25977],{},[348,25946,25947,25950],{},[394,25948,25949],{"align":23808},"轻量级",[394,25951,25952],{"align":23808},"基于系统内核共享，启动速度快，占资源少",[348,25954,25955,25958],{},[394,25956,25957],{"align":23808},"跨平台",[394,25959,25960],{"align":23808},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[348,25962,25963,25966],{},[394,25964,25965],{"align":23808},"易于迁移部署",[394,25967,25968],{"align":23808},"应用和环境一起封装，不怕依赖不一致",[348,25970,25971,25974],{},[394,25972,25973],{"align":23808},"易于版本控制",[394,25975,25976],{"align":23808},"镜像版本可控，支持回滚",[348,25978,25979,25982],{},[394,25980,25981],{"align":23808},"生态丰富",[394,25983,25984],{"align":23808},"Docker Hub 上有成千上万的现成镜像可用",[158,25986,25987],{},[161,25988,25989],{},"在Linux上可以几乎实现无性能损失。",[14,25991,25992],{},"docker里的发行版和本机共用Linux内核。",[14,25994,25995],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[158,25997,25998],{},[161,25999,26000],{},"可以快速部署在绝大多数Linux发行版",[14,26002,26003],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[158,26005,26006],{},[161,26007,26008],{},"配置环境简单",[14,26010,26011],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,26013,26014],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[158,26016,26017],{},[161,26018,25981],{},[14,26020,26021],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,26023,26024],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[175,26026,26028],{"id":26027},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1210,26030,26031,26034,26037,26040],{},[161,26032,26033],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[161,26035,26036],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[161,26038,26039],{},"微服务架构：每个服务一个容器，灵活组合",[161,26041,26042],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":32,"searchDepth":47,"depth":47,"links":26044},[26045,26046,26047,26048,26049,26050],{"id":25756,"depth":58,"text":25757},{"id":25800,"depth":58,"text":25801},{"id":25816,"depth":58,"text":25817},{"id":25881,"depth":58,"text":25882},{"id":25929,"depth":58,"text":25930},{"id":26027,"depth":58,"text":26028},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25748,"description":32},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26057,"title":26058,"body":26059,"description":32,"extension":129,"meta":26792,"navigation":131,"path":26793,"seo":26794,"stem":26795,"__hash__":26796},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26060,"toc":26787},[26061,26064,26068,26071,26074,26080,26086,26090,26099,26102,26159,26162,26213,26216,26299,26302,26339,26343,26354,26367,26374,26377,26457,26460,26510,26513,26536,26540,26547,26550,26566,26572,26575,26591,26597,26600,26616,26630,26636,26656,26662,26665,26677,26683,26686,26700,26706,26709,26729,26734,26737,26740,26744,26747,26750,26753,26760,26763,26766,26769,26774,26779,26784],[10,26062,26058],{"id":26063},"_2安装docker",[175,26065,26067],{"id":26066},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,26069,26070],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,26072,26073],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,26075,26076],{},[443,26077,26078],{"href":26078,"rel":26079},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23937],[14,26081,26082],{},[443,26083,26084],{"href":26084,"rel":26085},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23937],[22070,26087,26089],{"id":26088},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26091,26092,26093,26098],{},"以下内容根据 ",[443,26094,26097],{"href":26095,"rel":26096},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23937],"官方文档"," 修改而来。",[14,26100,26101],{},"如果你过去安装过 docker，先删掉：",[27,26103,26105],{"className":23894,"code":26104,"language":23896,"meta":32,"style":32},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[34,26106,26107],{"__ignoreMap":32},[37,26108,26109,26111,26114,26117,26120,26123,26126,26129,26132,26135,26138,26141,26144,26147,26150,26153,26156],{"class":39,"line":40},[37,26110,3097],{"class":50},[37,26112,26113],{"class":54}," pkg ",[37,26115,26116],{"class":50},"in",[37,26118,26119],{"class":309}," docker.io",[37,26121,26122],{"class":309}," docker-doc",[37,26124,26125],{"class":309}," docker-compose",[37,26127,26128],{"class":309}," docker-compose-v2",[37,26130,26131],{"class":309}," podman-docker",[37,26133,26134],{"class":309}," containerd",[37,26136,26137],{"class":309}," runc",[37,26139,26140],{"class":54},"; ",[37,26142,26143],{"class":50},"do",[37,26145,26146],{"class":2035}," sudo",[37,26148,26149],{"class":309}," apt-get",[37,26151,26152],{"class":309}," remove",[37,26154,26155],{"class":54}," $pkg; ",[37,26157,26158],{"class":50},"done\n",[14,26160,26161],{},"首先安装依赖和GPG：",[27,26163,26167],{"className":26164,"code":26165,"language":26166,"meta":32,"style":32},"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",[34,26168,26169,26174,26179,26184,26189,26194,26199,26203,26208],{"__ignoreMap":32},[37,26170,26171],{"class":39,"line":40},[37,26172,26173],{},"# Add Docker's official GPG key:\n",[37,26175,26176],{"class":39,"line":47},[37,26177,26178],{},"sudo apt-get update\n",[37,26180,26181],{"class":39,"line":58},[37,26182,26183],{},"sudo apt-get install ca-certificates curl\n",[37,26185,26186],{"class":39,"line":64},[37,26187,26188],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[37,26190,26191],{"class":39,"line":76},[37,26192,26193],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[37,26195,26196],{"class":39,"line":92},[37,26197,26198],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[37,26200,26201],{"class":39,"line":97},[37,26202,2472],{"emptyLinePlaceholder":131},[37,26204,26205],{"class":39,"line":107},[37,26206,26207],{},"# 如果上面这行报错就弄下面这行\n",[37,26209,26210],{"class":39,"line":1390},[37,26211,26212],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26214,26215],{},"信任 Docker 的 GPG 公钥并添加仓库：",[27,26217,26219],{"className":23894,"code":26218,"language":23896,"meta":32,"style":32},"# 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",[34,26220,26221,26226,26232,26249,26282],{"__ignoreMap":32},[37,26222,26223],{"class":39,"line":40},[37,26224,26225],{"class":43},"# Add the repository to Apt sources:\n",[37,26227,26228,26230],{"class":39,"line":47},[37,26229,25198],{"class":82},[37,26231,24751],{"class":82},[37,26233,26234,26237,26240,26243,26246],{"class":39,"line":58},[37,26235,26236],{"class":309},"  \"deb [arch=$(",[37,26238,26239],{"class":2035},"dpkg",[37,26241,26242],{"class":82}," --print-architecture",[37,26244,26245],{"class":309},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[37,26247,26248],{"class":82},"\\\n",[37,26250,26251,26254,26256,26258,26261,26264,26266,26268,26271,26273,26275,26278,26280],{"class":39,"line":64},[37,26252,26253],{"class":309},"  \"",[37,26255,25172],{"class":54},[37,26257,761],{"class":82},[37,26259,26260],{"class":309}," \u002Fetc\u002Fos-release",[37,26262,26263],{"class":54}," && ",[37,26265,25198],{"class":82},[37,26267,9796],{"class":309},[37,26269,26270],{"class":54},"$VERSION_CODENAME",[37,26272,456],{"class":309},[37,26274,86],{"class":54},[37,26276,26277],{"class":309},"\" stable\"",[37,26279,25182],{"class":50},[37,26281,24751],{"class":82},[37,26283,26284,26287,26290,26293,26296],{"class":39,"line":76},[37,26285,26286],{"class":2035},"  sudo",[37,26288,26289],{"class":309}," tee",[37,26291,26292],{"class":309}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[37,26294,26295],{"class":50}," >",[37,26297,26298],{"class":309}," \u002Fdev\u002Fnull\n",[14,26300,26301],{},"最后安装",[27,26303,26305],{"className":23894,"code":26304,"language":23896,"meta":32,"style":32},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[34,26306,26307,26316],{"__ignoreMap":32},[37,26308,26309,26311,26313],{"class":39,"line":40},[37,26310,24649],{"class":2035},[37,26312,26149],{"class":309},[37,26314,26315],{"class":309}," update\n",[37,26317,26318,26320,26322,26324,26327,26330,26333,26336],{"class":39,"line":47},[37,26319,24649],{"class":2035},[37,26321,26149],{"class":309},[37,26323,23906],{"class":309},[37,26325,26326],{"class":309}," docker-ce",[37,26328,26329],{"class":309}," docker-ce-cli",[37,26331,26332],{"class":309}," containerd.io",[37,26334,26335],{"class":309}," docker-buildx-plugin",[37,26337,26338],{"class":309}," docker-compose-plugin\n",[22070,26340,26342],{"id":26341},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,26344,26345,26346,26349,26350,26353],{},"查看自己自己包管理工具版本（dnf是 ",[354,26347,26348],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[354,26351,26352],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[27,26355,26357],{"className":23894,"code":26356,"language":23896,"meta":32,"style":32},"dnf --version\n",[34,26358,26359],{"__ignoreMap":32},[37,26360,26361,26364],{"class":39,"line":40},[37,26362,26363],{"class":2035},"dnf",[37,26365,26366],{"class":82}," --version\n",[14,26368,26092,26369,26373],{},[443,26370,26097],{"href":26371,"rel":26372},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23937]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,26375,26376],{},"如果你之前安装过 docker，请先删掉",[27,26378,26380],{"className":23894,"code":26379,"language":23896,"meta":32,"style":32},"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",[34,26381,26382,26396,26403,26410,26417,26424,26431,26438,26445,26452],{"__ignoreMap":32},[37,26383,26384,26386,26389,26391,26394],{"class":39,"line":40},[37,26385,24649],{"class":2035},[37,26387,26388],{"class":309}," dnf",[37,26390,26152],{"class":309},[37,26392,26393],{"class":309}," docker",[37,26395,24751],{"class":82},[37,26397,26398,26401],{"class":39,"line":47},[37,26399,26400],{"class":309},"                  docker-client",[37,26402,24751],{"class":82},[37,26404,26405,26408],{"class":39,"line":58},[37,26406,26407],{"class":309},"                  docker-client-latest",[37,26409,24751],{"class":82},[37,26411,26412,26415],{"class":39,"line":64},[37,26413,26414],{"class":309},"                  docker-common",[37,26416,24751],{"class":82},[37,26418,26419,26422],{"class":39,"line":76},[37,26420,26421],{"class":309},"                  docker-latest",[37,26423,24751],{"class":82},[37,26425,26426,26429],{"class":39,"line":92},[37,26427,26428],{"class":309},"                  docker-latest-logrotate",[37,26430,24751],{"class":82},[37,26432,26433,26436],{"class":39,"line":97},[37,26434,26435],{"class":309},"                  docker-logrotate",[37,26437,24751],{"class":82},[37,26439,26440,26443],{"class":39,"line":107},[37,26441,26442],{"class":309},"                  docker-selinux",[37,26444,24751],{"class":82},[37,26446,26447,26450],{"class":39,"line":1390},[37,26448,26449],{"class":309},"                  docker-engine-selinux",[37,26451,24751],{"class":82},[37,26453,26454],{"class":39,"line":1402},[37,26455,26456],{"class":309},"                  docker-engine\n",[14,26458,26459],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[27,26461,26463],{"className":23894,"code":26462,"language":23896,"meta":32,"style":32},"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",[34,26464,26465,26479,26494],{"__ignoreMap":32},[37,26466,26467,26469,26471,26474,26476],{"class":39,"line":40},[37,26468,24649],{"class":2035},[37,26470,26388],{"class":309},[37,26472,26473],{"class":82}," -y",[37,26475,23906],{"class":309},[37,26477,26478],{"class":309}," dnf-plugins-core\n",[37,26480,26481,26483,26485,26488,26491],{"class":39,"line":47},[37,26482,24649],{"class":2035},[37,26484,26388],{"class":309},[37,26486,26487],{"class":309}," config-manager",[37,26489,26490],{"class":309}," addrepo",[37,26492,26493],{"class":82}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[37,26495,26496,26498,26501,26504,26507],{"class":39,"line":58},[37,26497,24649],{"class":2035},[37,26499,26500],{"class":309}," sed",[37,26502,26503],{"class":82}," -i",[37,26505,26506],{"class":309}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[37,26508,26509],{"class":309}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,26511,26512],{},"最后安装：",[27,26514,26516],{"className":23894,"code":26515,"language":23896,"meta":32,"style":32},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[34,26517,26518],{"__ignoreMap":32},[37,26519,26520,26522,26524,26526,26528,26530,26532,26534],{"class":39,"line":40},[37,26521,24649],{"class":2035},[37,26523,26388],{"class":309},[37,26525,23906],{"class":309},[37,26527,26326],{"class":309},[37,26529,26329],{"class":309},[37,26531,26332],{"class":309},[37,26533,26335],{"class":309},[37,26535,26338],{"class":309},[175,26537,26539],{"id":26538},"_22配置环境","2.2.配置环境",[22070,26541,26543,26546],{"id":26542},"_221检查-docker-服务状态",[354,26544,26545],{},"2.2.1.检查 Docker 服务状态"," ：",[14,26548,26549],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[27,26551,26553],{"className":23894,"code":26552,"language":23896,"meta":32,"style":32},"systemctl status docker\n",[34,26554,26555],{"__ignoreMap":32},[37,26556,26557,26560,26563],{"class":39,"line":40},[37,26558,26559],{"class":2035},"systemctl",[37,26561,26562],{"class":309}," status",[37,26564,26565],{"class":309}," docker\n",[22070,26567,26569,26546],{"id":26568},"_222启动-docker-服务",[354,26570,26571],{},"2.2.2.启动 Docker 服务",[14,26573,26574],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[27,26576,26578],{"className":23894,"code":26577,"language":23896,"meta":32,"style":32},"sudo systemctl start docker\n",[34,26579,26580],{"__ignoreMap":32},[37,26581,26582,26584,26587,26589],{"class":39,"line":40},[37,26583,24649],{"class":2035},[37,26585,26586],{"class":309}," systemctl",[37,26588,4256],{"class":309},[37,26590,26565],{"class":309},[22070,26592,26594,26546],{"id":26593},"_223设置-docker-开机自启",[354,26595,26596],{},"2.2.3.设置 Docker 开机自启",[14,26598,26599],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[27,26601,26603],{"className":23894,"code":26602,"language":23896,"meta":32,"style":32},"sudo systemctl enable docker\n",[34,26604,26605],{"__ignoreMap":32},[37,26606,26607,26609,26611,26614],{"class":39,"line":40},[37,26608,24649],{"class":2035},[37,26610,26586],{"class":309},[37,26612,26613],{"class":309}," enable",[37,26615,26565],{"class":309},[22070,26617,26619,13867,26622,13867,26627,26546],{"id":26618},"_224将用户添加到-docker-组",[354,26620,26621],{},"2.2.4.将用户添加到",[354,26623,26624],{},[34,26625,26626],{},"docker",[354,26628,26629],{},"组",[14,26631,26632,26633,26635],{},"使用以下命令将当前用户添加到 ",[34,26634,26626],{}," 组：",[27,26637,26639],{"className":23894,"code":26638,"language":23896,"meta":32,"style":32},"sudo usermod -aG docker $USER\n",[34,26640,26641],{"__ignoreMap":32},[37,26642,26643,26645,26648,26651,26653],{"class":39,"line":40},[37,26644,24649],{"class":2035},[37,26646,26647],{"class":309}," usermod",[37,26649,26650],{"class":82}," -aG",[37,26652,26393],{"class":309},[37,26654,26655],{"class":54}," $USER\n",[22070,26657,26659,26546],{"id":26658},"_225退出并重新登录",[354,26660,26661],{},"2.2.5.退出并重新登录",[14,26663,26664],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[27,26666,26668],{"className":23894,"code":26667,"language":23896,"meta":32,"style":32},"newgrp docker\n",[34,26669,26670],{"__ignoreMap":32},[37,26671,26672,26675],{"class":39,"line":40},[37,26673,26674],{"class":2035},"newgrp",[37,26676,26565],{"class":309},[22070,26678,26680,26546],{"id":26679},"_226重新启动-docker-服务如果需要",[354,26681,26682],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,26684,26685],{},"确保 Docker 服务正在运行，可以使用以下命令：",[27,26687,26688],{"className":23894,"code":26577,"language":23896,"meta":32,"style":32},[34,26689,26690],{"__ignoreMap":32},[37,26691,26692,26694,26696,26698],{"class":39,"line":40},[37,26693,24649],{"class":2035},[37,26695,26586],{"class":309},[37,26697,4256],{"class":309},[37,26699,26565],{"class":309},[22070,26701,26703,26546],{"id":26702},"_227重启电脑后检查-docker-服务状态",[354,26704,26705],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,26707,26708],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[27,26710,26712],{"className":23894,"code":26711,"language":23896,"meta":32,"style":32},"sudo reboot\nsystemctl status docker\n",[34,26713,26714,26721],{"__ignoreMap":32},[37,26715,26716,26718],{"class":39,"line":40},[37,26717,24649],{"class":2035},[37,26719,26720],{"class":309}," reboot\n",[37,26722,26723,26725,26727],{"class":39,"line":47},[37,26724,26559],{"class":2035},[37,26726,26562],{"class":309},[37,26728,26565],{"class":309},[14,26730,26731],{},[119,26732],{"alt":32,"src":26733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,26735,26736],{},"第三行显示enabled说明开机自启动成功",[14,26738,26739],{},"按q退出",[175,26741,26743],{"id":26742},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,26745,26746],{},"优先使用linux来使用docker是比较好的",[14,26748,26749],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,26751,26752],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,26754,26755,26756],{},"官方下载安装:",[443,26757,26758],{"href":26758,"rel":26759},"https:\u002F\u002Fwww.docker.com\u002F",[23937],[14,26761,26762],{},"Windows的Docker显卡直通与USB直通:",[14,26764,26765],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,26767,26768],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,26770,26771],{},[119,26772],{"alt":32,"src":26773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,26775,26776],{},[119,26777],{"alt":32,"src":26778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,26780,26781],{},[119,26782],{"alt":32,"src":26783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[123,26785,26786],{},"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":32,"searchDepth":47,"depth":47,"links":26788},[26789,26790,26791],{"id":26066,"depth":58,"text":26067},{"id":26538,"depth":58,"text":26539},{"id":26742,"depth":58,"text":26743},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26058,"description":32},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26798,"title":26799,"body":26800,"description":26807,"extension":129,"meta":27500,"navigation":131,"path":27501,"seo":27502,"stem":27503,"__hash__":27504},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26801,"toc":27494},[26802,26805,26808,26812,26817,26822,26825,26853,26858,26867,26870,26875,26879,26886,26891,26897,26901,26904,26908,26913,27005,27010,27028,27033,27054,27059,27075,27079,27084,27113,27118,27164,27169,27213,27221,27238,27243,27259,27264,27278,27281,27284,27287,27290,27319,27322,27327,27331,27334,27337,27343,27346,27349,27352,27414,27421,27426,27429,27447,27451,27454,27471,27474,27477,27491],[10,26803,26799],{"id":26804},"_3docker直通",[14,26806,26807],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[175,26809,26811],{"id":26810},"_31usb直通","3.1.USB直通",[14,26813,26814],{},[119,26815],{"alt":32,"src":26816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[158,26818,26819],{},[161,26820,26821],{},"方法一(不是很推荐新手)：",[14,26823,26824],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[27,26826,26828],{"className":23894,"code":26827,"language":23896,"meta":32,"style":32},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[34,26829,26830,26838,26843],{"__ignoreMap":32},[37,26831,26832,26835],{"class":39,"line":40},[37,26833,26834],{"class":2035},"ls",[37,26836,26837],{"class":309}," \u002Fdev\n",[37,26839,26840],{"class":39,"line":47},[37,26841,26842],{"class":43},"#例如\n",[37,26844,26845,26848,26850],{"class":39,"line":58},[37,26846,26847],{"class":54},"--device",[37,26849,70],{"class":50},[37,26851,26852],{"class":309},"\u002Fdev\u002Ftty_USB0\n",[158,26854,26855],{"start":47},[161,26856,26857],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[27,26859,26861],{"className":23894,"code":26860,"language":23896,"meta":32,"style":32},"--privileged\n",[34,26862,26863],{"__ignoreMap":32},[37,26864,26865],{"class":39,"line":40},[37,26866,26860],{"class":2035},[14,26868,26869],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,26871,26872],{},[119,26873],{"alt":32,"src":26874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[175,26876,26878],{"id":26877},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,26880,26881,26882,26885],{},"NVIDIA Container Toolkit使用户 ",[354,26883,26884],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,26887,26888],{},[119,26889],{"alt":32,"src":26890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,26892,26893],{},[443,26894,26895],{"href":26895,"rel":26896},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23937],[22070,26898,26900],{"id":26899},"_321安装","3.2.1.安装",[14,26902,26903],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22982,26905,26907],{"id":26906},"_3211ubuntu","3.2.1.1.Ubuntu",[158,26909,26910],{},[161,26911,26912],{},"配置存储库 并更新",[27,26914,26916],{"className":23894,"code":26915,"language":23896,"meta":32,"style":32},"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",[34,26917,26918,26947,26967,26979,26991,26997],{"__ignoreMap":32},[37,26919,26920,26923,26926,26929,26931,26933,26936,26939,26942,26945],{"class":39,"line":40},[37,26921,26922],{"class":2035},"curl",[37,26924,26925],{"class":82}," -fsSL",[37,26927,26928],{"class":309}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[37,26930,25182],{"class":50},[37,26932,26146],{"class":2035},[37,26934,26935],{"class":309}," gpg",[37,26937,26938],{"class":82}," --dearmor",[37,26940,26941],{"class":82}," -o",[37,26943,26944],{"class":309}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[37,26946,24751],{"class":82},[37,26948,26949,26952,26954,26957,26960,26963,26965],{"class":39,"line":47},[37,26950,26951],{"class":54},"  && ",[37,26953,26922],{"class":2035},[37,26955,26956],{"class":82}," -s",[37,26958,26959],{"class":82}," -L",[37,26961,26962],{"class":309}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[37,26964,25182],{"class":50},[37,26966,24751],{"class":82},[37,26968,26969,26972,26975,26977],{"class":39,"line":58},[37,26970,26971],{"class":2035},"    sed",[37,26973,26974],{"class":309}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[37,26976,25182],{"class":50},[37,26978,24751],{"class":82},[37,26980,26981,26984,26986,26989],{"class":39,"line":64},[37,26982,26983],{"class":2035},"    sudo",[37,26985,26289],{"class":309},[37,26987,26988],{"class":309}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[37,26990,24751],{"class":82},[37,26992,26993,26995],{"class":39,"line":76},[37,26994,26951],{"class":54},[37,26996,26248],{"class":82},[37,26998,26999,27001,27003],{"class":39,"line":92},[37,27000,26983],{"class":2035},[37,27002,26149],{"class":309},[37,27004,26315],{"class":309},[158,27006,27007],{"start":47},[161,27008,27009],{},"安装nvidia-docker2",[27,27011,27013],{"className":23894,"code":27012,"language":23896,"meta":32,"style":32},"sudo apt-get install -y nvidia-docker2\n",[34,27014,27015],{"__ignoreMap":32},[37,27016,27017,27019,27021,27023,27025],{"class":39,"line":40},[37,27018,24649],{"class":2035},[37,27020,26149],{"class":309},[37,27022,23906],{"class":309},[37,27024,26473],{"class":82},[37,27026,27027],{"class":309}," nvidia-docker2\n",[158,27029,27030],{"start":58},[161,27031,27032],{},"使用nvidia-ctk命令配置container runtime",[27,27034,27036],{"className":23894,"code":27035,"language":23896,"meta":32,"style":32},"sudo nvidia-ctk runtime configure --runtime=docker\n",[34,27037,27038],{"__ignoreMap":32},[37,27039,27040,27042,27045,27048,27051],{"class":39,"line":40},[37,27041,24649],{"class":2035},[37,27043,27044],{"class":309}," nvidia-ctk",[37,27046,27047],{"class":309}," runtime",[37,27049,27050],{"class":309}," configure",[37,27052,27053],{"class":82}," --runtime=docker\n",[158,27055,27056],{"start":64},[161,27057,27058],{},"重启docker服务:",[27,27060,27062],{"className":23894,"code":27061,"language":23896,"meta":32,"style":32},"sudo systemctl restart docker\n",[34,27063,27064],{"__ignoreMap":32},[37,27065,27066,27068,27070,27073],{"class":39,"line":40},[37,27067,24649],{"class":2035},[37,27069,26586],{"class":309},[37,27071,27072],{"class":309}," restart",[37,27074,26565],{"class":309},[22982,27076,27078],{"id":27077},"_3212fedora","3.2.1.2.Fedora",[158,27080,27081],{},[161,27082,27083],{},"配置存储库",[27,27085,27087],{"className":23894,"code":27086,"language":23896,"meta":32,"style":32},"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",[34,27088,27089,27104],{"__ignoreMap":32},[37,27090,27091,27093,27095,27097,27100,27102],{"class":39,"line":40},[37,27092,26922],{"class":2035},[37,27094,26956],{"class":82},[37,27096,26959],{"class":82},[37,27098,27099],{"class":309}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[37,27101,25182],{"class":50},[37,27103,24751],{"class":82},[37,27105,27106,27108,27110],{"class":39,"line":47},[37,27107,24649],{"class":2035},[37,27109,26289],{"class":309},[37,27111,27112],{"class":309}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[158,27114,27115],{"start":47},[161,27116,27117],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[27,27119,27121],{"className":23894,"code":27120,"language":23896,"meta":32,"style":32},"# 如果是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",[34,27122,27123,27128,27142,27146,27151],{"__ignoreMap":32},[37,27124,27125],{"class":39,"line":40},[37,27126,27127],{"class":43},"# 如果是RHEL或者Rocky（DNF4）\n",[37,27129,27130,27132,27134,27136,27139],{"class":39,"line":47},[37,27131,24649],{"class":2035},[37,27133,26388],{"class":309},[37,27135,26487],{"class":309},[37,27137,27138],{"class":82}," --add-repo",[37,27140,27141],{"class":309}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[37,27143,27144],{"class":39,"line":58},[37,27145,2472],{"emptyLinePlaceholder":131},[37,27147,27148],{"class":39,"line":64},[37,27149,27150],{"class":43},"# 如果是Feodra41+（DNF5）\n",[37,27152,27153,27155,27157,27159,27161],{"class":39,"line":76},[37,27154,24649],{"class":2035},[37,27156,26388],{"class":309},[37,27158,26487],{"class":309},[37,27160,26490],{"class":309},[37,27162,27163],{"class":82}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[158,27165,27166],{"start":58},[161,27167,27168],{},"安装NVIDIA Container Toolki包",[27,27170,27172],{"className":23894,"code":27171,"language":23896,"meta":32,"style":32},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[34,27173,27174,27179,27192,27196,27201],{"__ignoreMap":32},[37,27175,27176],{"class":39,"line":40},[37,27177,27178],{"class":43},"# 如果是RHEL或者Rocky\n",[37,27180,27181,27183,27185,27187,27189],{"class":39,"line":47},[37,27182,24649],{"class":2035},[37,27184,26388],{"class":309},[37,27186,23906],{"class":309},[37,27188,26473],{"class":82},[37,27190,27191],{"class":309}," nvidia-container-toolkit\n",[37,27193,27194],{"class":39,"line":58},[37,27195,2472],{"emptyLinePlaceholder":131},[37,27197,27198],{"class":39,"line":64},[37,27199,27200],{"class":43},"# 如果是Fedora\n",[37,27202,27203,27205,27207,27209,27211],{"class":39,"line":76},[37,27204,24649],{"class":2035},[37,27206,26388],{"class":309},[37,27208,23906],{"class":309},[37,27210,26473],{"class":82},[37,27212,27191],{"class":309},[158,27214,27215],{"start":64},[161,27216,27217,27218,27220],{},"安装nvidia-docker2 ： 在Fedora上使用",[34,27219,26363],{},"进行安装",[27,27222,27224],{"className":23894,"code":27223,"language":23896,"meta":32,"style":32},"sudo dnf install -y nvidia-docker2\n",[34,27225,27226],{"__ignoreMap":32},[37,27227,27228,27230,27232,27234,27236],{"class":39,"line":40},[37,27229,24649],{"class":2035},[37,27231,26388],{"class":309},[37,27233,23906],{"class":309},[37,27235,26473],{"class":82},[37,27237,27027],{"class":309},[158,27239,27240],{"start":76},[161,27241,27242],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[27,27244,27245],{"className":23894,"code":27035,"language":23896,"meta":32,"style":32},[34,27246,27247],{"__ignoreMap":32},[37,27248,27249,27251,27253,27255,27257],{"class":39,"line":40},[37,27250,24649],{"class":2035},[37,27252,27044],{"class":309},[37,27254,27047],{"class":309},[37,27256,27050],{"class":309},[37,27258,27053],{"class":82},[158,27260,27261],{"start":92},[161,27262,27263],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[27,27265,27266],{"className":23894,"code":27061,"language":23896,"meta":32,"style":32},[34,27267,27268],{"__ignoreMap":32},[37,27269,27270,27272,27274,27276],{"class":39,"line":40},[37,27271,24649],{"class":2035},[37,27273,26586],{"class":309},[37,27275,27072],{"class":309},[37,27277,26565],{"class":309},[14,27279,27280],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27282,27283],{},"方法：",[14,27285,27286],{},"1️⃣nvidia-smi",[14,27288,27289],{},"2️⃣运行nvidia cuda 容器进行测试",[27,27291,27293],{"className":23894,"code":27292,"language":23896,"meta":32,"style":32},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[34,27294,27295],{"__ignoreMap":32},[37,27296,27297,27299,27301,27304,27307,27310,27313,27316],{"class":39,"line":40},[37,27298,24649],{"class":2035},[37,27300,26393],{"class":309},[37,27302,27303],{"class":309}," run",[37,27305,27306],{"class":82}," --rm",[37,27308,27309],{"class":82}," --gpus",[37,27311,27312],{"class":309}," all",[37,27314,27315],{"class":309}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[37,27317,27318],{"class":309}," nvidia-smi\n",[14,27320,27321],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27323,27324],{},[119,27325],{"alt":32,"src":27326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[175,27328,27330],{"id":27329},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,27332,27333],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,27335,27336],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,27338,27339],{},[443,27340,27341],{"href":27341,"rel":27342},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23937],[14,27344,27345],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,27347,27348],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,27350,27351],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[342,27353,27354,27370],{},[345,27355,27356],{},[348,27357,27358,27361,27364,27367],{},[351,27359,27360],{"align":23808},"镜像类型",[351,27362,27363],{"align":23808},"适用场景",[351,27365,27366],{"align":23808},"示例标签",[351,27368,27369],{"align":23808},"大小",[389,27371,27372,27386,27400],{},[348,27373,27374,27377,27380,27383],{},[394,27375,27376],{"align":23808},"base",[394,27378,27379],{"align":23808},"仅需 CUDA 运行时库",[394,27381,27382],{"align":23808},"12.4.0-base-ubuntu22.04",[394,27384,27385],{"align":23808},"~240MB",[348,27387,27388,27391,27394,27397],{},[394,27389,27390],{"align":23808},"runtime",[394,27392,27393],{"align":23808},"部署编译后的应用（含数学库）",[394,27395,27396],{"align":23808},"12.4.0-runtime-ubuntu22.04",[394,27398,27399],{"align":23808},"~2GB",[348,27401,27402,27405,27408,27411],{},[394,27403,27404],{"align":23808},"devel",[394,27406,27407],{"align":23808},"开发环境（含编译工具）",[394,27409,27410],{"align":23808},"12.4.0-devel-ubuntu22.04",[394,27412,27413],{"align":23808},"~3GB",[14,27415,27416,27417,27420],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[34,27418,27419],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,27422,27423],{},[119,27424],{"alt":32,"src":27425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,27427,27428],{},"在dockerfile里就可以开头这么写：",[27,27430,27432],{"className":23894,"code":27431,"language":23896,"meta":32,"style":32},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[34,27433,27434,27439],{"__ignoreMap":32},[37,27435,27436],{"class":39,"line":40},[37,27437,27438],{"class":43},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[37,27440,27441,27444],{"class":39,"line":47},[37,27442,27443],{"class":2035},"FROM",[37,27445,27446],{"class":309}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[175,27448,27450],{"id":27449},"_34配置以太网","3.4.配置以太网",[14,27452,27453],{},"指定网络模式",[27,27455,27457],{"className":23894,"code":27456,"language":23896,"meta":32,"style":32},"--net=host \\\n",[34,27458,27459],{"__ignoreMap":32},[37,27460,27461,27464,27466,27469],{"class":39,"line":40},[37,27462,27463],{"class":54},"--net",[37,27465,70],{"class":50},[37,27467,27468],{"class":309},"host",[37,27470,24751],{"class":2035},[14,27472,27473],{},"启动参数里加上这行即可。具体在下方",[14,27475,27476],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1210,27478,27479,27482,27485,27488],{},[161,27480,27481],{},"--net=bridge:默认选项，表示连接到默认的网桥",[161,27483,27484],{},"--net=host:容器使用宿主机的网络",[161,27486,27487],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[161,27489,27490],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[123,27492,27493],{},"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":32,"searchDepth":47,"depth":47,"links":27495},[27496,27497,27498,27499],{"id":26810,"depth":58,"text":26811},{"id":26877,"depth":58,"text":26878},{"id":27329,"depth":58,"text":27330},{"id":27449,"depth":58,"text":27450},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26799,"description":26807},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27506,"title":27507,"body":27508,"description":27515,"extension":129,"meta":27521,"navigation":131,"path":27522,"seo":27523,"stem":27524,"__hash__":27525},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27509,"toc":27519},[27510,27513,27516],[10,27511,27507],{"id":27512},"_4dockerhub换源",[14,27514,27515],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,27517,27518],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":32,"searchDepth":47,"depth":47,"links":27520},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27507,"description":27515},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27527,"title":27528,"body":27529,"description":32,"extension":129,"meta":28541,"navigation":131,"path":28542,"seo":28543,"stem":28544,"__hash__":28545},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27530,"toc":28536},[27531,27534,27538,27544,27548,27551,27891,27894,27897,27900,27905,27910,27913,27916,27919,27922,27941,27944,27955,27961,28143,28153,28169,28432,28434,28459,28474,28483,28533],[10,27532,27528],{"id":27533},"_5docker命令学习",[175,27535,27537],{"id":27536},"_51参考文档","5.1.参考文档",[14,27539,27540],{},[443,27541,27542],{"href":27542,"rel":27543},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23937],[175,27545,27547],{"id":27546},"_52常用命令","5.2.常用命令",[14,27549,27550],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[342,27552,27553,27566],{},[345,27554,27555],{},[348,27556,27557,27560,27563],{},[351,27558,27559],{"align":23808},"命令",[351,27561,27562],{"align":23808},"描述",[351,27564,27565],{"align":23808},"示例",[389,27567,27568,27579,27590,27601,27612,27623,27634,27645,27655,27666,27677,27688,27698,27709,27720,27731,27741,27751,27761,27771,27782,27793,27804,27815,27826,27837,27847,27858,27869,27880],{},[348,27569,27570,27573,27576],{},[394,27571,27572],{"align":23808},"docker run",[394,27574,27575],{"align":23808},"创建并启动一个新的容器。",[394,27577,27578],{"align":23808},"docker run -it ubuntu bash",[348,27580,27581,27584,27587],{},[394,27582,27583],{"align":23808},"docker build",[394,27585,27586],{"align":23808},"通过指定的 Dockerfile 创建一个新的镜像。",[394,27588,27589],{"align":23808},"docker build -t myimage .",[348,27591,27592,27595,27598],{},[394,27593,27594],{"align":23808},"docker pull",[394,27596,27597],{"align":23808},"从 Docker 仓库拉取镜像。",[394,27599,27600],{"align":23808},"docker pull ubuntu",[348,27602,27603,27606,27609],{},[394,27604,27605],{"align":23808},"docker push",[394,27607,27608],{"align":23808},"将本地镜像推送到 Docker 仓库。",[394,27610,27611],{"align":23808},"docker push myimage",[348,27613,27614,27617,27620],{},[394,27615,27616],{"align":23808},"docker stop",[394,27618,27619],{"align":23808},"停止一个正在运行的容器。",[394,27621,27622],{"align":23808},"docker stop container_id",[348,27624,27625,27628,27631],{},[394,27626,27627],{"align":23808},"docker start",[394,27629,27630],{"align":23808},"启动一个已经存在的容器。",[394,27632,27633],{"align":23808},"docker start container_id",[348,27635,27636,27639,27642],{},[394,27637,27638],{"align":23808},"docker restart",[394,27640,27641],{"align":23808},"重新启动容器。",[394,27643,27644],{"align":23808},"docker restart container_id",[348,27646,27647,27650,27653],{},[394,27648,27649],{"align":23808},"docker ps",[394,27651,27652],{"align":23808},"列出当前正在运行的容器。",[394,27654,27649],{"align":23808},[348,27656,27657,27660,27663],{},[394,27658,27659],{"align":23808},"docker rm",[394,27661,27662],{"align":23808},"删除一个或多个停止的容器。",[394,27664,27665],{"align":23808},"docker rm container_id",[348,27667,27668,27671,27674],{},[394,27669,27670],{"align":23808},"docker exec",[394,27672,27673],{"align":23808},"在一个正在运行的容器中执行命令。",[394,27675,27676],{"align":23808},"docker exec -it container_id bash",[348,27678,27679,27682,27685],{},[394,27680,27681],{"align":23808},"docker logs",[394,27683,27684],{"align":23808},"查看容器的日志输出。",[394,27686,27687],{"align":23808},"docker logs container_id",[348,27689,27690,27693,27696],{},[394,27691,27692],{"align":23808},"docker images",[394,27694,27695],{"align":23808},"列出本地所有镜像。",[394,27697,27692],{"align":23808},[348,27699,27700,27703,27706],{},[394,27701,27702],{"align":23808},"docker rmi",[394,27704,27705],{"align":23808},"删除一个或多个镜像。",[394,27707,27708],{"align":23808},"docker rmi myimage",[348,27710,27711,27714,27717],{},[394,27712,27713],{"align":23808},"docker network",[394,27715,27716],{"align":23808},"管理 Docker 网络。",[394,27718,27719],{"align":23808},"docker network ls",[348,27721,27722,27725,27728],{},[394,27723,27724],{"align":23808},"docker volume",[394,27726,27727],{"align":23808},"管理 Docker 数据卷。",[394,27729,27730],{"align":23808},"docker volume ls",[348,27732,27733,27736,27739],{},[394,27734,27735],{"align":23808},"docker-compose up",[394,27737,27738],{"align":23808},"启动 docker-compose.yml 中定义的所有服务。",[394,27740,27735],{"align":23808},[348,27742,27743,27746,27749],{},[394,27744,27745],{"align":23808},"docker-compose down",[394,27747,27748],{"align":23808},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[394,27750,27745],{"align":23808},[348,27752,27753,27756,27759],{},[394,27754,27755],{"align":23808},"docker info",[394,27757,27758],{"align":23808},"显示 Docker 系统的详细信息。",[394,27760,27755],{"align":23808},[348,27762,27763,27766,27769],{},[394,27764,27765],{"align":23808},"docker stats",[394,27767,27768],{"align":23808},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[394,27770,27765],{"align":23808},[348,27772,27773,27776,27779],{},[394,27774,27775],{"align":23808},"docker inspect",[394,27777,27778],{"align":23808},"查看容器或镜像的详细信息（JSON 格式）。",[394,27780,27781],{"align":23808},"docker inspect container_id",[348,27783,27784,27787,27790],{},[394,27785,27786],{"align":23808},"docker save",[394,27788,27789],{"align":23808},"将一个镜像保存为 tar 文件。",[394,27791,27792],{"align":23808},"docker save -o myimage.tar myimage",[348,27794,27795,27798,27801],{},[394,27796,27797],{"align":23808},"docker load",[394,27799,27800],{"align":23808},"从 tar 文件中加载镜像。",[394,27802,27803],{"align":23808},"docker load -i myimage.tar",[348,27805,27806,27809,27812],{},[394,27807,27808],{"align":23808},"docker tag",[394,27810,27811],{"align":23808},"为镜像添加标签（tag）。",[394,27813,27814],{"align":23808},"docker tag myimage myimage:v1",[348,27816,27817,27820,27823],{},[394,27818,27819],{"align":23808},"docker buildx build",[394,27821,27822],{"align":23808},"使用 Buildx 构建多架构镜像。",[394,27824,27825],{"align":23808},"docker buildx build -t myimage .",[348,27827,27828,27831,27834],{},[394,27829,27830],{"align":23808},"docker buildx create",[394,27832,27833],{"align":23808},"创建一个新的 Buildx 构建实例。",[394,27835,27836],{"align":23808},"docker buildx create –use",[348,27838,27839,27842,27845],{},[394,27840,27841],{"align":23808},"docker buildx ls",[394,27843,27844],{"align":23808},"列出所有可用的 Buildx 构建实例。",[394,27846,27841],{"align":23808},[348,27848,27849,27852,27855],{},[394,27850,27851],{"align":23808},"docker buildx use",[394,27853,27854],{"align":23808},"设置当前的 Buildx 构建实例。",[394,27856,27857],{"align":23808},"docker buildx use mybuilder",[348,27859,27860,27863,27866],{},[394,27861,27862],{"align":23808},"docker buildx bake",[394,27864,27865],{"align":23808},"使用 Bake 文件批量构建镜像。",[394,27867,27868],{"align":23808},"docker buildx bake -f bake.hcl",[348,27870,27871,27874,27877],{},[394,27872,27873],{"align":23808},"docker buildx build –push",[394,27875,27876],{"align":23808},"构建镜像并推送到镜像仓库。",[394,27878,27879],{"align":23808},"docker buildx build –push -t myimage .",[348,27881,27882,27885,27888],{},[394,27883,27884],{"align":23808},"docker buildx build –platform",[394,27886,27887],{"align":23808},"构建镜像并为多个平台生成支持。",[394,27889,27890],{"align":23808},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,27892,27893],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,27895,27896],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,27898,27899],{},"docker images 可以查看已经下载的镜像",[14,27901,27902],{},[119,27903],{"alt":32,"src":27904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,27906,27907],{},[354,27908,27909],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,27911,27912],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,27914,27915],{},"docker container logs 查看容器日志",[14,27917,27918],{},"docker top 查看容器里的进程",[14,27920,27921],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[27,27923,27925],{"className":23894,"code":27924,"language":23896,"meta":32,"style":32},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[34,27926,27927],{"__ignoreMap":32},[37,27928,27929,27932,27935,27938],{"class":39,"line":40},[37,27930,27931],{"class":2035},"如：docker",[37,27933,27934],{"class":309}," cp",[37,27936,27937],{"class":309}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[37,27939,27940],{"class":309}," \u002Fmydata\u002Fnginx\n",[14,27942,27943],{},"docker run时在启动容器的时候会有几个常用的选项：",[1210,27945,27946,27949,27952],{},[161,27947,27948],{},"-d选项：表示后台运行",[161,27950,27951],{},"-P选项：随机端口映射",[161,27953,27954],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[175,27956,27958],{"id":27957},"_53run命令的参数非常重要",[354,27959,27960],{},"5.3.run命令的参数（非常重要）",[342,27962,27963,27976],{},[345,27964,27965],{},[348,27966,27967,27970,27973],{},[351,27968,27969],{"align":23808},"参数\u002F配置",[351,27971,27972],{"align":23808},"功能说明",[351,27974,27975],{"align":23808},"重要性与参考依据",[389,27977,27978,27989,28000,28011,28022,28033,28044,28055,28066,28077,28088,28099,28110,28121,28132],{},[348,27979,27980,27983,27986],{},[394,27981,27982],{"align":23808},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[394,27984,27985],{"align":23808},"指定容器名称，便于后续管理",[394,27987,27988],{"align":23808},"替代随机生成的容器名。",[348,27990,27991,27994,27997],{},[394,27992,27993],{"align":23808},"–gpus all",[394,27995,27996],{"align":23808},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[394,27998,27999],{"align":23808},"用于CUDA加速等GPU依赖任务。",[348,28001,28002,28005,28008],{},[394,28003,28004],{"align":23808},"-e NVIDIA_DRIVER_CAPABILITIES=all",[394,28006,28007],{"align":23808},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[394,28009,28010],{"align":23808},"确保容器内GPU功能完整67。",[348,28012,28013,28016,28019],{},[394,28014,28015],{"align":23808},"-dit",[394,28017,28018],{"align":23808},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[394,28020,28021],{"align":23808},"允许容器在后台运行并支持交互操作。",[348,28023,28024,28027,28030],{},[394,28025,28026],{"align":23808},"–privileged",[394,28028,28029],{"align":23808},"赋予容器完全主机权限（可访问设备、内核模块等）",[394,28031,28032],{"align":23808},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[348,28034,28035,28038,28041],{},[394,28036,28037],{"align":23808},"–net=host",[394,28039,28040],{"align":23808},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[394,28042,28043],{"align":23808},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[348,28045,28046,28049,28052],{},[394,28047,28048],{"align":23808},"–group-add audio–group-add video–group-add dialout",[394,28050,28051],{"align":23808},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[394,28053,28054],{"align":23808},"避免权限问题（如避免无法调用摄像头、麦克风）。",[348,28056,28057,28060,28063],{},[394,28058,28059],{"align":23808},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[394,28061,28062],{"align":23808},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[394,28064,28065],{"align":23808},"支持容器内运行图形界面应用（如OpenCV可视化）。",[348,28067,28068,28071,28074],{},[394,28069,28070],{"align":23808},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[394,28072,28073],{"align":23808},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[394,28075,28076],{"align":23808},"实现容器内图形显示。",[348,28078,28079,28082,28085],{},[394,28080,28081],{"align":23808},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[394,28083,28084],{"align":23808},"挂载X11认证文件（只读）",[394,28086,28087],{"align":23808},"确保容器有权连接宿主机显示服务。",[348,28089,28090,28093,28096],{},[394,28091,28092],{"align":23808},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[394,28094,28095],{"align":23808},"挂载Wayland显示协议相关目录",[394,28097,28098],{"align":23808},"支持Wayland协议的图形显示。",[348,28100,28101,28104,28107],{},[394,28102,28103],{"align":23808},"–ulimit nofile=1024:524288",[394,28105,28106],{"align":23808},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[394,28108,28109],{"align":23808},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[348,28111,28112,28115,28118],{},[394,28113,28114],{"align":23808},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[394,28116,28117],{"align":23808},"挂载宿主机用户目录到容器内同名路径",[394,28119,28120],{"align":23808},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[348,28122,28123,28126,28129],{},[394,28124,28125],{"align":23808},"-w \u002Fhome\u002Ftungchiahui",[394,28127,28128],{"align":23808},"设置容器启动后的默认工作目录",[394,28130,28131],{"align":23808},"直接进入项目路径，方便执行命令2324。",[348,28133,28134,28137,28140],{},[394,28135,28136],{"align":23808},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[394,28138,28139],{"align":23808},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[394,28141,28142],{"align":23808},"提供预配置的深度学习与机器人开发环境。",[14,28144,28145,28146,28148,28149,28152],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[34,28147,24649],{},"加不加",[34,28150,28151],{},"sudo -E","都无所谓。",[14,28154,28155,28156,28158,28159,28161,28162,28165,28166,28168],{},"用户已经被加到docker组了，不用",[34,28157,24649],{},"也行跑，其次，",[34,28160,24649],{},"运行的话，你的",[34,28163,28164],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[34,28167,28164],{},"更不可能变了。",[27,28170,28172],{"className":23894,"code":28171,"language":23896,"meta":32,"style":32},"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",[34,28173,28174,28187,28197,28207,28219,28226,28233,28240,28250,28259,28268,28282,28294,28306,28315,28325,28334,28349,28382,28409,28420,28427],{"__ignoreMap":32},[37,28175,28176,28178,28180,28182,28185],{"class":39,"line":40},[37,28177,24649],{"class":2035},[37,28179,26393],{"class":309},[37,28181,27303],{"class":309},[37,28183,28184],{"class":82}," --name=ros_opencv_cuda",[37,28186,24751],{"class":82},[37,28188,28189,28192,28195],{"class":39,"line":47},[37,28190,28191],{"class":54},"--gpus ",[37,28193,28194],{"class":309},"all",[37,28196,24751],{"class":82},[37,28198,28199,28202,28205],{"class":39,"line":58},[37,28200,28201],{"class":54},"-e ",[37,28203,28204],{"class":309},"NVIDIA_DRIVER_CAPABILITIES=all",[37,28206,24751],{"class":82},[37,28208,28209,28211,28214,28217],{"class":39,"line":64},[37,28210,28201],{"class":54},[37,28212,28213],{"class":309},"DISPLAY=",[37,28215,28216],{"class":54},"$DISPLAY ",[37,28218,26248],{"class":82},[37,28220,28221,28224],{"class":39,"line":76},[37,28222,28223],{"class":54},"-dit ",[37,28225,26248],{"class":82},[37,28227,28228,28231],{"class":39,"line":92},[37,28229,28230],{"class":54},"--privileged ",[37,28232,26248],{"class":82},[37,28234,28235,28238],{"class":39,"line":97},[37,28236,28237],{"class":54},"--net=host ",[37,28239,26248],{"class":82},[37,28241,28242,28245,28248],{"class":39,"line":107},[37,28243,28244],{"class":54},"--group-add ",[37,28246,28247],{"class":309},"audio",[37,28249,24751],{"class":82},[37,28251,28252,28254,28257],{"class":39,"line":1390},[37,28253,28244],{"class":54},[37,28255,28256],{"class":309},"video",[37,28258,24751],{"class":82},[37,28260,28261,28263,28266],{"class":39,"line":1402},[37,28262,28244],{"class":54},[37,28264,28265],{"class":309},"dialout",[37,28267,24751],{"class":82},[37,28269,28270,28272,28275,28277,28280],{"class":39,"line":1684},[37,28271,28201],{"class":54},[37,28273,28274],{"class":309},"XAUTHORITY=",[37,28276,28164],{"class":54},[37,28278,28279],{"class":309},"\u002F.Xauthority",[37,28281,24751],{"class":82},[37,28283,28284,28286,28289,28292],{"class":39,"line":1689},[37,28285,28201],{"class":54},[37,28287,28288],{"class":309},"WAYLAND_DISPLAY=",[37,28290,28291],{"class":54},"$WAYLAND_DISPLAY ",[37,28293,26248],{"class":82},[37,28295,28296,28298,28301,28304],{"class":39,"line":1695},[37,28297,28201],{"class":54},[37,28299,28300],{"class":309},"XDG_RUNTIME_DIR=",[37,28302,28303],{"class":54},"$XDG_RUNTIME_DIR ",[37,28305,26248],{"class":82},[37,28307,28308,28310,28313],{"class":39,"line":1700},[37,28309,28201],{"class":54},[37,28311,28312],{"class":309},"QT_QPA_PLATFORM=xcb",[37,28314,24751],{"class":82},[37,28316,28317,28320,28323],{"class":39,"line":1714},[37,28318,28319],{"class":54},"-v ",[37,28321,28322],{"class":309},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[37,28324,24751],{"class":82},[37,28326,28327,28329,28332],{"class":39,"line":1719},[37,28328,28319],{"class":54},[37,28330,28331],{"class":309},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[37,28333,24751],{"class":82},[37,28335,28336,28339,28342,28344,28347],{"class":39,"line":1725},[37,28337,28338],{"class":54},"-v $HOME",[37,28340,28341],{"class":309},"\u002F.Xauthority:",[37,28343,28164],{"class":54},[37,28345,28346],{"class":309},"\u002F.Xauthority:ro",[37,28348,24751],{"class":82},[37,28350,28351,28353,28356,28358,28361,28364,28366,28369,28371,28373,28375,28377,28380],{"class":39,"line":1746},[37,28352,28319],{"class":54},[37,28354,28355],{"class":309},"\u002Frun\u002Fuser\u002F",[37,28357,25172],{"class":54},[37,28359,28360],{"class":2035},"id",[37,28362,28363],{"class":82}," -u",[37,28365,86],{"class":54},[37,28367,28368],{"class":309},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[37,28370,25172],{"class":54},[37,28372,28360],{"class":2035},[37,28374,28363],{"class":82},[37,28376,86],{"class":54},[37,28378,28379],{"class":309},"\u002Fwayland-0",[37,28381,24751],{"class":82},[37,28383,28384,28386,28388,28390,28392,28394,28396,28399,28401,28403,28405,28407],{"class":39,"line":1751},[37,28385,28319],{"class":54},[37,28387,28355],{"class":309},[37,28389,25172],{"class":54},[37,28391,28360],{"class":2035},[37,28393,28363],{"class":82},[37,28395,86],{"class":54},[37,28397,28398],{"class":309},":\u002Frun\u002Fuser\u002F",[37,28400,25172],{"class":54},[37,28402,28360],{"class":2035},[37,28404,28363],{"class":82},[37,28406,13786],{"class":54},[37,28408,26248],{"class":82},[37,28410,28411,28413,28415,28418],{"class":39,"line":1765},[37,28412,28338],{"class":54},[37,28414,1062],{"class":309},[37,28416,28417],{"class":54},"$HOME ",[37,28419,26248],{"class":82},[37,28421,28422,28425],{"class":39,"line":1770},[37,28423,28424],{"class":54},"-w $HOME ",[37,28426,26248],{"class":82},[37,28428,28429],{"class":39,"line":1799},[37,28430,28431],{"class":54},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,28433,9097],{},[158,28435,28436,28444,28447,28450],{},[161,28437,28438,13867,28440,28443],{},[34,28439,28204],{},[34,28441,28442],{},"--gpus all","没有英伟达显卡请注释。",[161,28445,28446],{},"--name后面请自己为容器起名。",[161,28448,28449],{},"最后一行仓库名称请你自己找对应的镜像填上。",[161,28451,28452,28453,28458],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23625,28454,28455],{},[354,28456,28457],{},"请不要加","。",[27,28460,28462],{"className":23894,"code":28461,"language":23896,"meta":32,"style":32},"--ulimit nofile=1024:524288 \\\n",[34,28463,28464],{"__ignoreMap":32},[37,28465,28466,28469,28472],{"class":39,"line":40},[37,28467,28468],{"class":2035},"--ulimit",[37,28470,28471],{"class":309}," nofile=1024:524288",[37,28473,24751],{"class":82},[14,28475,28476,28477,28482],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23625,28478,28479],{},[354,28480,28481],{},"不建议","**.**",[27,28484,28486],{"className":23894,"code":28485,"language":23896,"meta":32,"style":32},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[34,28487,28488,28515,28524],{"__ignoreMap":32},[37,28489,28490,28493,28496,28498,28500,28502,28504,28506,28508,28511,28513],{"class":39,"line":40},[37,28491,28492],{"class":2035},"--user",[37,28494,28495],{"class":54}," $(",[37,28497,28360],{"class":2035},[37,28499,28363],{"class":82},[37,28501,86],{"class":54},[37,28503,1062],{"class":309},[37,28505,25172],{"class":54},[37,28507,28360],{"class":2035},[37,28509,28510],{"class":82}," -g",[37,28512,13786],{"class":54},[37,28514,26248],{"class":82},[37,28516,28517,28519,28522],{"class":39,"line":47},[37,28518,28319],{"class":54},[37,28520,28521],{"class":309},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[37,28523,24751],{"class":82},[37,28525,28526,28528,28531],{"class":39,"line":58},[37,28527,28319],{"class":54},[37,28529,28530],{"class":309},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[37,28532,24751],{"class":82},[123,28534,28535],{},"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":32,"searchDepth":47,"depth":47,"links":28537},[28538,28539,28540],{"id":27536,"depth":58,"text":27537},{"id":27546,"depth":58,"text":27547},{"id":27957,"depth":58,"text":27960},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27528,"description":32},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28547,"title":28548,"body":28549,"description":32,"extension":129,"meta":30172,"navigation":131,"path":30173,"seo":30174,"stem":30175,"__hash__":30176},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28550,"toc":30167},[28551,28554,28558,28561,28783,28787,28791,28794,28900,28905,28908,28913,28916,28921,28924,28929,28932,28944,28947,28952,28959,28987,28994,29070,29075,29078,29101,29103,29178,29183,29186,29190,29198,29203,29208,29212,29223,29229,29232,29235,29259,29262,29265,29293,29296,29299,29764,29767,29772,29777,29781,29804,29809,29813,29817,29820,29823,29826,29853,29856,29859,29877,29880,29883,29905,29913,29918,29923,29927,29930,29933,29936,29939,29984,29987,30005,30008,30013,30016,30037,30040,30096,30099,30104,30108,30111,30118,30121,30124,30129,30132,30148,30151,30164],[10,28552,28548],{"id":28553},"_6手动创建docker镜像",[175,28555,28557],{"id":28556},"_61dockerfile","6.1.DockerFile",[14,28559,28560],{},"常用命令：",[342,28562,28563,28574],{},[345,28564,28565],{},[348,28566,28567,28570,28572],{},[351,28568,28569],{"align":23808},"指令",[351,28571,25942],{"align":23808},[351,28573,27565],{"align":23808},[389,28575,28576,28586,28602,28613,28624,28635,28646,28657,28668,28682,28696,28707,28721,28732,28743,28757,28772],{},[348,28577,28578,28580,28583],{},[394,28579,27443],{"align":23808},[394,28581,28582],{"align":23808},"指定基础镜像，是 Dockerfile 的起点",[394,28584,28585],{"align":23808},"FROM ubuntu:22.04",[348,28587,28588,28591,28594],{},[394,28589,28590],{"align":23808},"LABEL",[394,28592,28593],{"align":23808},"添加元数据（如作者、版本等）",[394,28595,28596,28597,28601],{"align":23808},"LABEL maintainer=”",[443,28598,28600],{"href":28599},"mailto:you@example.com","you@example.com","”",[348,28603,28604,28607,28610],{},[394,28605,28606],{"align":23808},"ENV",[394,28608,28609],{"align":23808},"设置环境变量",[394,28611,28612],{"align":23808},"ENV PORT=8080",[348,28614,28615,28618,28621],{},[394,28616,28617],{"align":23808},"ARG",[394,28619,28620],{"align":23808},"构建参数，只在构建期间可用",[394,28622,28623],{"align":23808},"ARG VERSION=1.0",[348,28625,28626,28629,28632],{},[394,28627,28628],{"align":23808},"RUN",[394,28630,28631],{"align":23808},"构建镜像时运行命令",[394,28633,28634],{"align":23808},"RUN apt-get update && apt-get install -y curl",[348,28636,28637,28640,28643],{},[394,28638,28639],{"align":23808},"COPY",[394,28641,28642],{"align":23808},"复制文件到镜像中",[394,28644,28645],{"align":23808},"COPY . \u002Fapp",[348,28647,28648,28651,28654],{},[394,28649,28650],{"align":23808},"ADD",[394,28652,28653],{"align":23808},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[394,28655,28656],{"align":23808},"ADD archive.tar.gz \u002Fdata\u002F",[348,28658,28659,28662,28665],{},[394,28660,28661],{"align":23808},"WORKDIR",[394,28663,28664],{"align":23808},"设置工作目录",[394,28666,28667],{"align":23808},"WORKDIR \u002Fopt",[348,28669,28670,28673,28676],{},[394,28671,28672],{"align":23808},"CMD",[394,28674,28675],{"align":23808},"设置容器启动时默认命令（可被 docker run 覆盖）",[394,28677,28678,28679],{"align":23808},"CMD ",[37,28680,28681],{},"“node”, “index.js”",[348,28683,28684,28687,28690],{},[394,28685,28686],{"align":23808},"ENTRYPOINT",[394,28688,28689],{"align":23808},"设置容器启动时固定命令（通常用于 CLI 工具等）",[394,28691,28692,28693],{"align":23808},"ENTRYPOINT ",[37,28694,28695],{},"“python3”",[348,28697,28698,28701,28704],{},[394,28699,28700],{"align":23808},"EXPOSE",[394,28702,28703],{"align":23808},"声明镜像内服务监听的端口（不会自动映射）",[394,28705,28706],{"align":23808},"EXPOSE 80",[348,28708,28709,28712,28715],{},[394,28710,28711],{"align":23808},"VOLUME",[394,28713,28714],{"align":23808},"声明数据卷挂载点",[394,28716,28717,28718],{"align":23808},"VOLUME ",[37,28719,28720],{},"“\u002Fdata”",[348,28722,28723,28726,28729],{},[394,28724,28725],{"align":23808},"USER",[394,28727,28728],{"align":23808},"设置后续命令执行的用户",[394,28730,28731],{"align":23808},"USER appuser",[348,28733,28734,28737,28740],{},[394,28735,28736],{"align":23808},"ONBUILD",[394,28738,28739],{"align":23808},"当镜像作为其他镜像基础镜像时触发的构建指令",[394,28741,28742],{"align":23808},"ONBUILD COPY . \u002Fsrc",[348,28744,28745,28748,28751],{},[394,28746,28747],{"align":23808},"SHELL",[394,28749,28750],{"align":23808},"更改默认 shell，比如将 sh -c 改为 bash -c",[394,28752,28753,28754],{"align":23808},"SHELL ",[37,28755,28756],{},"“\u002Fbin\u002Fbash”, “-c”",[348,28758,28759,28762,28765],{},[394,28760,28761],{"align":23808},"HEALTHCHECK",[394,28763,28764],{"align":23808},"定义容器运行时的健康检查命令",[394,28766,28767,28768],{"align":23808},"`HEALTHCHECK CMD curl –fail ",[443,28769,28770],{"href":28770,"rel":28771},"http:\u002F\u002Flocalhost:8080",[23937],[348,28773,28774,28777,28780],{},[394,28775,28776],{"align":23808},"STOPSIGNAL",[394,28778,28779],{"align":23808},"容器停止时发送的信号",[394,28781,28782],{"align":23808},"STOPSIGNAL SIGKILL",[175,28784,28786],{"id":28785},"_62自己创建容器","6.2.自己创建容器",[22070,28788,28790],{"id":28789},"_621手动创建","6.2.1.手动创建",[14,28792,28793],{},"在x86电脑上编译x86的：",[27,28795,28797],{"className":23894,"code":28796,"language":23896,"meta":32,"style":32},"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",[34,28798,28799,28815,28819,28832,28836,28849,28853,28866,28870,28883,28887],{"__ignoreMap":32},[37,28800,28801,28803,28806,28809,28812],{"class":39,"line":40},[37,28802,26626],{"class":2035},[37,28804,28805],{"class":309}," build",[37,28807,28808],{"class":82}," -t",[37,28810,28811],{"class":309}," ros-melodic-cuda118-cudnn8-bionic:latest",[37,28813,28814],{"class":309}," .\n",[37,28816,28817],{"class":39,"line":47},[37,28818,2472],{"emptyLinePlaceholder":131},[37,28820,28821,28823,28825,28827,28830],{"class":39,"line":58},[37,28822,26626],{"class":2035},[37,28824,28805],{"class":309},[37,28826,28808],{"class":82},[37,28828,28829],{"class":309}," ros-noetic-focal:latest",[37,28831,28814],{"class":309},[37,28833,28834],{"class":39,"line":64},[37,28835,2472],{"emptyLinePlaceholder":131},[37,28837,28838,28840,28842,28844,28847],{"class":39,"line":76},[37,28839,26626],{"class":2035},[37,28841,28805],{"class":309},[37,28843,28808],{"class":82},[37,28845,28846],{"class":309}," ros-humble-jammy:latest",[37,28848,28814],{"class":309},[37,28850,28851],{"class":39,"line":92},[37,28852,2472],{"emptyLinePlaceholder":131},[37,28854,28855,28857,28859,28861,28864],{"class":39,"line":97},[37,28856,26626],{"class":2035},[37,28858,28805],{"class":309},[37,28860,28808],{"class":82},[37,28862,28863],{"class":309}," ros-jazzy-noble:latest",[37,28865,28814],{"class":309},[37,28867,28868],{"class":39,"line":107},[37,28869,2472],{"emptyLinePlaceholder":131},[37,28871,28872,28874,28876,28878,28881],{"class":39,"line":1390},[37,28873,26626],{"class":2035},[37,28875,28805],{"class":309},[37,28877,28808],{"class":82},[37,28879,28880],{"class":309}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[37,28882,28814],{"class":309},[37,28884,28885],{"class":39,"line":1402},[37,28886,2472],{"emptyLinePlaceholder":131},[37,28888,28889,28891,28893,28895,28898],{"class":39,"line":1684},[37,28890,26626],{"class":2035},[37,28892,28805],{"class":309},[37,28894,28808],{"class":82},[37,28896,28897],{"class":309}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[37,28899,28814],{"class":309},[14,28901,28902],{},[119,28903],{"alt":32,"src":28904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,28906,28907],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,28909,28910],{},[119,28911],{"alt":32,"src":28912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,28914,28915],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[158,28917,28918],{},[161,28919,28920],{},"创建 Docker Hub 账户",[14,28922,28923],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[158,28925,28926],{"start":47},[161,28927,28928],{},"登录 Docker Hub",[14,28930,28931],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[27,28933,28935],{"className":23894,"code":28934,"language":23896,"meta":32,"style":32},"docker login\n",[34,28936,28937],{"__ignoreMap":32},[37,28938,28939,28941],{"class":39,"line":40},[37,28940,26626],{"class":2035},[37,28942,28943],{"class":309}," login\n",[14,28945,28946],{},"输入你的 Docker Hub 用户名和密码进行验证。",[158,28948,28949],{},[161,28950,28951],{},"为你的镜像打标签",[14,28953,28954,28955,28958],{},"Docker Hub 使用 ",[34,28956,28957],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[27,28960,28962],{"className":23894,"code":28961,"language":23896,"meta":32,"style":32},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[34,28963,28964],{"__ignoreMap":32},[37,28965,28966,28968,28971,28973,28976,28979,28982,28984],{"class":39,"line":40},[37,28967,26626],{"class":2035},[37,28969,28970],{"class":309}," tag",[37,28972,28863],{"class":309},[37,28974,28975],{"class":50}," \u003C",[37,28977,28978],{"class":309},"你的用户",[37,28980,28981],{"class":54},"名",[37,28983,1163],{"class":50},[37,28985,28986],{"class":309},"\u002Fros-jazzy-noble:latest\n",[14,28988,28989,28990,28993],{},"例如，如果你的 Docker Hub 用户名是 ",[34,28991,28992],{},"tungchiahui","，你应该执行：",[27,28995,28997],{"className":23894,"code":28996,"language":23896,"meta":32,"style":32},"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",[34,28998,28999,29010,29014,29025,29029,29040,29044,29055,29059],{"__ignoreMap":32},[37,29000,29001,29003,29005,29007],{"class":39,"line":40},[37,29002,26626],{"class":2035},[37,29004,28970],{"class":309},[37,29006,28829],{"class":309},[37,29008,29009],{"class":309}," tungchiahui\u002Fros-noetic-focal:latest\n",[37,29011,29012],{"class":39,"line":47},[37,29013,2472],{"emptyLinePlaceholder":131},[37,29015,29016,29018,29020,29022],{"class":39,"line":58},[37,29017,26626],{"class":2035},[37,29019,28970],{"class":309},[37,29021,28846],{"class":309},[37,29023,29024],{"class":309}," tungchiahui\u002Fros-humble-jammy:latest\n",[37,29026,29027],{"class":39,"line":64},[37,29028,2472],{"emptyLinePlaceholder":131},[37,29030,29031,29033,29035,29037],{"class":39,"line":76},[37,29032,26626],{"class":2035},[37,29034,28970],{"class":309},[37,29036,28863],{"class":309},[37,29038,29039],{"class":309}," tungchiahui\u002Fros-jazzy-noble:latest\n",[37,29041,29042],{"class":39,"line":92},[37,29043,2472],{"emptyLinePlaceholder":131},[37,29045,29046,29048,29050,29052],{"class":39,"line":97},[37,29047,26626],{"class":2035},[37,29049,28970],{"class":309},[37,29051,28880],{"class":309},[37,29053,29054],{"class":309}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[37,29056,29057],{"class":39,"line":107},[37,29058,2472],{"emptyLinePlaceholder":131},[37,29060,29061,29063,29065,29067],{"class":39,"line":1390},[37,29062,26626],{"class":2035},[37,29064,28970],{"class":309},[37,29066,28897],{"class":309},[37,29068,29069],{"class":309}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[158,29071,29072],{"start":47},[161,29073,29074],{},"推送镜像到 Docker Hub",[14,29076,29077],{},"使用以下命令将镜像推送到 Docker Hub：",[27,29079,29081],{"className":23894,"code":29080,"language":23896,"meta":32,"style":32},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[34,29082,29083],{"__ignoreMap":32},[37,29084,29085,29087,29090,29092,29094,29096,29098],{"class":39,"line":40},[37,29086,26626],{"class":2035},[37,29088,29089],{"class":309}," push",[37,29091,28975],{"class":50},[37,29093,28978],{"class":309},[37,29095,28981],{"class":54},[37,29097,1163],{"class":50},[37,29099,29100],{"class":309},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29102,14705],{},[27,29104,29106],{"className":23894,"code":29105,"language":23896,"meta":32,"style":32},"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",[34,29107,29108,29116,29120,29128,29132,29140,29144,29153,29157,29165,29169],{"__ignoreMap":32},[37,29109,29110,29112,29114],{"class":39,"line":40},[37,29111,26626],{"class":2035},[37,29113,29089],{"class":309},[37,29115,29009],{"class":309},[37,29117,29118],{"class":39,"line":47},[37,29119,2472],{"emptyLinePlaceholder":131},[37,29121,29122,29124,29126],{"class":39,"line":58},[37,29123,26626],{"class":2035},[37,29125,29089],{"class":309},[37,29127,29024],{"class":309},[37,29129,29130],{"class":39,"line":64},[37,29131,2472],{"emptyLinePlaceholder":131},[37,29133,29134,29136,29138],{"class":39,"line":76},[37,29135,26626],{"class":2035},[37,29137,29089],{"class":309},[37,29139,29039],{"class":309},[37,29141,29142],{"class":39,"line":92},[37,29143,2472],{"emptyLinePlaceholder":131},[37,29145,29146,29148,29150],{"class":39,"line":97},[37,29147,26626],{"class":2035},[37,29149,29089],{"class":309},[37,29151,29152],{"class":309}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[37,29154,29155],{"class":39,"line":107},[37,29156,2472],{"emptyLinePlaceholder":131},[37,29158,29159,29161,29163],{"class":39,"line":1390},[37,29160,26626],{"class":2035},[37,29162,29089],{"class":309},[37,29164,29069],{"class":309},[37,29166,29167],{"class":39,"line":1402},[37,29168,2472],{"emptyLinePlaceholder":131},[37,29170,29171,29173,29175],{"class":39,"line":1684},[37,29172,26626],{"class":2035},[37,29174,29089],{"class":309},[37,29176,29177],{"class":309}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[158,29179,29180],{"start":58},[161,29181,29182],{},"验证推送成功",[14,29184,29185],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29187,29188],{},[354,29189,3856],{},[1210,29191,29192,29195],{},[161,29193,29194],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[161,29196,29197],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29199,29200],{},[119,29201],{"alt":32,"src":29202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29204,29205],{},[119,29206],{"alt":32,"src":29207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22070,29209,29211],{"id":29210},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29213,29214,29215,29218,29219,29222],{},"如果您想在 ",[354,29216,29217],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[354,29220,29221],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29224,29225,29226],{},"1. ",[354,29227,29228],{},"启用 Docker 跨平台构建",[14,29230,29231],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29233,29234],{},"第一步：启用 buildx（只需执行一次）",[27,29236,29238],{"className":23894,"code":29237,"language":23896,"meta":32,"style":32},"docker buildx create --name multiarch_builder --use\n",[34,29239,29240],{"__ignoreMap":32},[37,29241,29242,29244,29247,29250,29253,29256],{"class":39,"line":40},[37,29243,26626],{"class":2035},[37,29245,29246],{"class":309}," buildx",[37,29248,29249],{"class":309}," create",[37,29251,29252],{"class":82}," --name",[37,29254,29255],{"class":309}," multiarch_builder",[37,29257,29258],{"class":82}," --use\n",[14,29260,29261],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29263,29264],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[27,29266,29268],{"className":23894,"code":29267,"language":23896,"meta":32,"style":32},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[34,29269,29270],{"__ignoreMap":32},[37,29271,29272,29274,29276,29278,29281,29284,29287,29290],{"class":39,"line":40},[37,29273,26626],{"class":2035},[37,29275,27303],{"class":309},[37,29277,27306],{"class":82},[37,29279,29280],{"class":82}," --privileged",[37,29282,29283],{"class":309}," multiarch\u002Fqemu-user-static",[37,29285,29286],{"class":82}," --reset",[37,29288,29289],{"class":82}," -p",[37,29291,29292],{"class":309}," yes\n",[14,29294,29295],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29297,29298],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[27,29300,29302],{"className":23894,"code":29301,"language":23896,"meta":32,"style":32},"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",[34,29303,29304,29346,29350,29355,29365,29375,29384,29390,29394,29398,29408,29416,29425,29431,29435,29439,29449,29457,29466,29472,29476,29480,29490,29498,29507,29513,29517,29521,29531,29539,29548,29554,29558,29562,29572,29580,29589,29595,29599,29603,29613,29621,29630,29636,29640,29644,29654,29662,29671,29677,29681,29685,29695,29703,29712,29718,29722,29726,29737,29745,29754,29760],{"__ignoreMap":32},[37,29305,29306,29308,29310,29312,29315,29318,29320,29322,29325,29327,29329,29331,29333,29336,29339,29341,29344],{"class":39,"line":40},[37,29307,26626],{"class":2035},[37,29309,29246],{"class":309},[37,29311,28805],{"class":309},[37,29313,29314],{"class":82}," --platform",[37,29316,29317],{"class":309}," linux\u002Famd64,linux\u002Farm64",[37,29319,28808],{"class":82},[37,29321,28975],{"class":50},[37,29323,29324],{"class":309},"你的镜像",[37,29326,28981],{"class":54},[37,29328,1163],{"class":50},[37,29330,1062],{"class":309},[37,29332,1113],{"class":50},[37,29334,29335],{"class":309},"标",[37,29337,29338],{"class":54},"签",[37,29340,1163],{"class":50},[37,29342,29343],{"class":82}," --push",[37,29345,28814],{"class":309},[37,29347,29348],{"class":39,"line":47},[37,29349,2472],{"emptyLinePlaceholder":131},[37,29351,29352],{"class":39,"line":58},[37,29353,29354],{"class":43},"# 例子：\n",[37,29356,29357,29359,29361,29363],{"class":39,"line":64},[37,29358,26626],{"class":2035},[37,29360,29246],{"class":309},[37,29362,28805],{"class":309},[37,29364,24751],{"class":82},[37,29366,29367,29370,29373],{"class":39,"line":76},[37,29368,29369],{"class":54},"--platform ",[37,29371,29372],{"class":309},"linux\u002Famd64,linux\u002Farm64",[37,29374,24751],{"class":82},[37,29376,29377,29379,29382],{"class":39,"line":92},[37,29378,28808],{"class":82},[37,29380,29381],{"class":309}," tungchiahui\u002Fros:noetic-focal",[37,29383,24751],{"class":82},[37,29385,29386,29388],{"class":39,"line":97},[37,29387,29343],{"class":82},[37,29389,24751],{"class":82},[37,29391,29392],{"class":39,"line":107},[37,29393,28814],{"class":309},[37,29395,29396],{"class":39,"line":1390},[37,29397,2472],{"emptyLinePlaceholder":131},[37,29399,29400,29402,29404,29406],{"class":39,"line":1402},[37,29401,26626],{"class":2035},[37,29403,29246],{"class":309},[37,29405,28805],{"class":309},[37,29407,24751],{"class":82},[37,29409,29410,29412,29414],{"class":39,"line":1684},[37,29411,29369],{"class":54},[37,29413,29372],{"class":309},[37,29415,24751],{"class":82},[37,29417,29418,29420,29423],{"class":39,"line":1689},[37,29419,28808],{"class":82},[37,29421,29422],{"class":309}," tungchiahui\u002Fros:humble-jammy",[37,29424,24751],{"class":82},[37,29426,29427,29429],{"class":39,"line":1695},[37,29428,29343],{"class":82},[37,29430,24751],{"class":82},[37,29432,29433],{"class":39,"line":1700},[37,29434,28814],{"class":309},[37,29436,29437],{"class":39,"line":1714},[37,29438,2472],{"emptyLinePlaceholder":131},[37,29440,29441,29443,29445,29447],{"class":39,"line":1719},[37,29442,26626],{"class":2035},[37,29444,29246],{"class":309},[37,29446,28805],{"class":309},[37,29448,24751],{"class":82},[37,29450,29451,29453,29455],{"class":39,"line":1725},[37,29452,29369],{"class":54},[37,29454,29372],{"class":309},[37,29456,24751],{"class":82},[37,29458,29459,29461,29464],{"class":39,"line":1746},[37,29460,28808],{"class":82},[37,29462,29463],{"class":309}," tungchiahui\u002Fros:jazzy-noble",[37,29465,24751],{"class":82},[37,29467,29468,29470],{"class":39,"line":1751},[37,29469,29343],{"class":82},[37,29471,24751],{"class":82},[37,29473,29474],{"class":39,"line":1765},[37,29475,28814],{"class":309},[37,29477,29478],{"class":39,"line":1770},[37,29479,2472],{"emptyLinePlaceholder":131},[37,29481,29482,29484,29486,29488],{"class":39,"line":1799},[37,29483,26393],{"class":2035},[37,29485,29246],{"class":309},[37,29487,28805],{"class":309},[37,29489,24751],{"class":82},[37,29491,29492,29494,29496],{"class":39,"line":1804},[37,29493,29369],{"class":54},[37,29495,29372],{"class":309},[37,29497,24751],{"class":82},[37,29499,29500,29502,29505],{"class":39,"line":1821},[37,29501,28808],{"class":82},[37,29503,29504],{"class":309}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[37,29506,24751],{"class":82},[37,29508,29509,29511],{"class":39,"line":1826},[37,29510,29343],{"class":82},[37,29512,24751],{"class":82},[37,29514,29515],{"class":39,"line":1831},[37,29516,28814],{"class":309},[37,29518,29519],{"class":39,"line":1836},[37,29520,2472],{"emptyLinePlaceholder":131},[37,29522,29523,29525,29527,29529],{"class":39,"line":1850},[37,29524,26626],{"class":2035},[37,29526,29246],{"class":309},[37,29528,28805],{"class":309},[37,29530,24751],{"class":82},[37,29532,29533,29535,29537],{"class":39,"line":1855},[37,29534,29369],{"class":54},[37,29536,29372],{"class":309},[37,29538,24751],{"class":82},[37,29540,29541,29543,29546],{"class":39,"line":2649},[37,29542,28808],{"class":82},[37,29544,29545],{"class":309}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[37,29547,24751],{"class":82},[37,29549,29550,29552],{"class":39,"line":2663},[37,29551,29343],{"class":82},[37,29553,24751],{"class":82},[37,29555,29556],{"class":39,"line":2671},[37,29557,28814],{"class":309},[37,29559,29560],{"class":39,"line":2676},[37,29561,2472],{"emptyLinePlaceholder":131},[37,29563,29564,29566,29568,29570],{"class":39,"line":2682},[37,29565,26393],{"class":2035},[37,29567,29246],{"class":309},[37,29569,28805],{"class":309},[37,29571,24751],{"class":82},[37,29573,29574,29576,29578],{"class":39,"line":2688},[37,29575,29369],{"class":54},[37,29577,29372],{"class":309},[37,29579,24751],{"class":82},[37,29581,29582,29584,29587],{"class":39,"line":2693},[37,29583,28808],{"class":82},[37,29585,29586],{"class":309}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[37,29588,24751],{"class":82},[37,29590,29591,29593],{"class":39,"line":8020},[37,29592,29343],{"class":82},[37,29594,24751],{"class":82},[37,29596,29597],{"class":39,"line":8044},[37,29598,28814],{"class":309},[37,29600,29601],{"class":39,"line":8049},[37,29602,2472],{"emptyLinePlaceholder":131},[37,29604,29605,29607,29609,29611],{"class":39,"line":8055},[37,29606,26626],{"class":2035},[37,29608,29246],{"class":309},[37,29610,28805],{"class":309},[37,29612,24751],{"class":82},[37,29614,29615,29617,29619],{"class":39,"line":8082},[37,29616,29369],{"class":54},[37,29618,29372],{"class":309},[37,29620,24751],{"class":82},[37,29622,29623,29625,29628],{"class":39,"line":8087},[37,29624,28808],{"class":82},[37,29626,29627],{"class":309}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[37,29629,24751],{"class":82},[37,29631,29632,29634],{"class":39,"line":8093},[37,29633,29343],{"class":82},[37,29635,24751],{"class":82},[37,29637,29638],{"class":39,"line":8105},[37,29639,28814],{"class":309},[37,29641,29642],{"class":39,"line":8117},[37,29643,2472],{"emptyLinePlaceholder":131},[37,29645,29646,29648,29650,29652],{"class":39,"line":8129},[37,29647,26626],{"class":2035},[37,29649,29246],{"class":309},[37,29651,28805],{"class":309},[37,29653,24751],{"class":82},[37,29655,29656,29658,29660],{"class":39,"line":9788},[37,29657,29369],{"class":54},[37,29659,29372],{"class":309},[37,29661,24751],{"class":82},[37,29663,29664,29666,29669],{"class":39,"line":9813},[37,29665,28808],{"class":82},[37,29667,29668],{"class":309}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[37,29670,24751],{"class":82},[37,29672,29673,29675],{"class":39,"line":9836},[37,29674,29343],{"class":82},[37,29676,24751],{"class":82},[37,29678,29679],{"class":39,"line":9860},[37,29680,28814],{"class":309},[37,29682,29683],{"class":39,"line":9865},[37,29684,2472],{"emptyLinePlaceholder":131},[37,29686,29687,29689,29691,29693],{"class":39,"line":9870},[37,29688,26393],{"class":2035},[37,29690,29246],{"class":309},[37,29692,28805],{"class":309},[37,29694,24751],{"class":82},[37,29696,29697,29699,29701],{"class":39,"line":9875},[37,29698,29369],{"class":54},[37,29700,29372],{"class":309},[37,29702,24751],{"class":82},[37,29704,29705,29707,29710],{"class":39,"line":9884},[37,29706,28808],{"class":82},[37,29708,29709],{"class":309}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[37,29711,24751],{"class":82},[37,29713,29714,29716],{"class":39,"line":9889},[37,29715,29343],{"class":82},[37,29717,24751],{"class":82},[37,29719,29720],{"class":39,"line":9895},[37,29721,28814],{"class":309},[37,29723,29724],{"class":39,"line":9916},[37,29725,2472],{"emptyLinePlaceholder":131},[37,29727,29728,29731,29733,29735],{"class":39,"line":9922},[37,29729,29730],{"class":2035},"  docker",[37,29732,29246],{"class":309},[37,29734,28805],{"class":309},[37,29736,24751],{"class":82},[37,29738,29739,29741,29743],{"class":39,"line":9936},[37,29740,29369],{"class":54},[37,29742,29372],{"class":309},[37,29744,24751],{"class":82},[37,29746,29747,29749,29752],{"class":39,"line":9942},[37,29748,28808],{"class":82},[37,29750,29751],{"class":309}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[37,29753,24751],{"class":82},[37,29755,29756,29758],{"class":39,"line":9969},[37,29757,29343],{"class":82},[37,29759,24751],{"class":82},[37,29761,29762],{"class":39,"line":9978},[37,29763,28814],{"class":309},[14,29765,29766],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,29768,29769],{},[119,29770],{"alt":32,"src":29771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,29773,29774],{},[119,29775],{"alt":32,"src":29776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22070,29778,29780],{"id":29779},"_623清除构建缓存","6.2.3.清除构建缓存",[27,29782,29784],{"className":23894,"code":29783,"language":23896,"meta":32,"style":32},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[34,29785,29786,29791],{"__ignoreMap":32},[37,29787,29788],{"class":39,"line":40},[37,29789,29790],{"class":43},"# 清理BuildKit构建缓存\n",[37,29792,29793,29795,29798,29801],{"class":39,"line":47},[37,29794,26626],{"class":2035},[37,29796,29797],{"class":309}," builder",[37,29799,29800],{"class":309}," prune",[37,29802,29803],{"class":82}," -f\n",[14,29805,29806],{},[119,29807],{"alt":32,"src":29808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[175,29810,29812],{"id":29811},"_63补充","6.3.补充",[22070,29814,29816],{"id":29815},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,29818,29819],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,29821,29822],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,29824,29825],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[27,29827,29829],{"className":23894,"code":29828,"language":23896,"meta":32,"style":32},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[34,29830,29831,29838],{"__ignoreMap":32},[37,29832,29833,29835],{"class":39,"line":40},[37,29834,27443],{"class":2035},[37,29836,29837],{"class":309}," nginx\n",[37,29839,29840,29842,29845,29848,29850],{"class":39,"line":47},[37,29841,28628],{"class":2035},[37,29843,29844],{"class":309}," echo",[37,29846,29847],{"class":309}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[37,29849,26295],{"class":50},[37,29851,29852],{"class":309}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,29854,29855],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,29857,29858],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[27,29860,29862],{"className":23894,"code":29861,"language":23896,"meta":32,"style":32},"docker build -t nginx:tuling .\n",[34,29863,29864],{"__ignoreMap":32},[37,29865,29866,29868,29870,29872,29875],{"class":39,"line":40},[37,29867,26626],{"class":2035},[37,29869,28805],{"class":309},[37,29871,28808],{"class":82},[37,29873,29874],{"class":309}," nginx:tuling",[37,29876,28814],{"class":309},[14,29878,29879],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,29881,29882],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[27,29884,29886],{"className":23894,"code":29885,"language":23896,"meta":32,"style":32},"docker run -d -p 92:80 nginx:tuling\n",[34,29887,29888],{"__ignoreMap":32},[37,29889,29890,29892,29894,29897,29899,29902],{"class":39,"line":40},[37,29891,26626],{"class":2035},[37,29893,27303],{"class":309},[37,29895,29896],{"class":82}," -d",[37,29898,29289],{"class":82},[37,29900,29901],{"class":309}," 92:80",[37,29903,29904],{"class":309}," nginx:tuling\n",[14,29906,29907,29908],{},"4、访问 ",[443,29909,29912],{"href":29910,"rel":29911},"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",[23937],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,29914,29915],{},[119,29916],{"alt":32,"src":29917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,29919,29920],{},[119,29921],{"alt":32,"src":29922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22070,29924,29926],{"id":29925},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,29928,29929],{},"只需要知道大体流程即可",[14,29931,29932],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,29934,29935],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,29937,29938],{},"2、在Dockerfile中添加以下内容",[27,29940,29942],{"className":26164,"code":29941,"language":26166,"meta":32,"style":32},"# 基于哪个镜像\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",[34,29943,29944,29949,29954,29959,29964,29969,29974,29979],{"__ignoreMap":32},[37,29945,29946],{"class":39,"line":40},[37,29947,29948],{},"# 基于哪个镜像\n",[37,29950,29951],{"class":39,"line":47},[37,29952,29953],{},"From java:8\n",[37,29955,29956],{"class":39,"line":58},[37,29957,29958],{},"# 复制文件到容器\n",[37,29960,29961],{"class":39,"line":64},[37,29962,29963],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[37,29965,29966],{"class":39,"line":76},[37,29967,29968],{},"# 声明需要暴露的端口\n",[37,29970,29971],{"class":39,"line":92},[37,29972,29973],{},"EXPOSE 8877\n",[37,29975,29976],{"class":39,"line":97},[37,29977,29978],{},"# 配置容器启动后执行的命令\n",[37,29980,29981],{"class":39,"line":107},[37,29982,29983],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,29985,29986],{},"3、使用docker build命令构建镜像",[27,29988,29990],{"className":23894,"code":29989,"language":23896,"meta":32,"style":32},"docker build -t tulingmall-member:0.0.5 .\n",[34,29991,29992],{"__ignoreMap":32},[37,29993,29994,29996,29998,30000,30003],{"class":39,"line":40},[37,29995,26626],{"class":2035},[37,29997,28805],{"class":309},[37,29999,28808],{"class":82},[37,30001,30002],{"class":309}," tulingmall-member:0.0.5",[37,30004,28814],{"class":309},[14,30006,30007],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,30009,30010],{},[119,30011],{"alt":32,"src":30012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,30014,30015],{},"4、启动镜像，加-d可在后台启动",[27,30017,30019],{"className":23894,"code":30018,"language":23896,"meta":32,"style":32},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[34,30020,30021],{"__ignoreMap":32},[37,30022,30023,30025,30027,30029,30031,30034],{"class":39,"line":40},[37,30024,26626],{"class":2035},[37,30026,27303],{"class":309},[37,30028,29896],{"class":82},[37,30030,29289],{"class":82},[37,30032,30033],{"class":309}," 8877:8877",[37,30035,30036],{"class":309}," tulingmall-member:0.0.5\n",[14,30038,30039],{},"加上JVM参数：",[27,30041,30043],{"className":23894,"code":30042,"language":23896,"meta":32,"style":32},"# --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",[34,30044,30045,30050,30065,30075,30084,30091],{"__ignoreMap":32},[37,30046,30047],{"class":39,"line":40},[37,30048,30049],{"class":43},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[37,30051,30052,30054,30056,30059,30061,30063],{"class":39,"line":47},[37,30053,26626],{"class":2035},[37,30055,27303],{"class":309},[37,30057,30058],{"class":82},"  -d",[37,30060,29289],{"class":82},[37,30062,30033],{"class":309},[37,30064,24751],{"class":82},[37,30066,30067,30069,30072],{"class":39,"line":58},[37,30068,28201],{"class":54},[37,30070,30071],{"class":309},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[37,30073,30074],{"class":82},"  \\\n",[37,30076,30077,30079,30082],{"class":39,"line":64},[37,30078,28201],{"class":54},[37,30080,30081],{"class":309},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[37,30083,30074],{"class":82},[37,30085,30086,30089],{"class":39,"line":76},[37,30087,30088],{"class":54},"--cap-add=SYS_PTRACE  ",[37,30090,26248],{"class":82},[37,30092,30093],{"class":39,"line":92},[37,30094,30095],{"class":54},"tulingmall-member:0.0.5\n",[14,30097,30098],{},"5、访问会员服务接口",[14,30100,30101],{},[119,30102],{"alt":32,"src":30103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22070,30105,30107],{"id":30106},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30109,30110],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30112,30113,30114],{},"阿里云docker镜像仓库：",[443,30115,30116],{"href":30116,"rel":30117},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23937],[14,30119,30120],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30122,30123],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30125,30126],{},[119,30127],{"alt":32,"src":30128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30130,30131],{},"要把镜像推送到镜像仓库",[27,30133,30135],{"className":23894,"code":30134,"language":23896,"meta":32,"style":32},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[34,30136,30137],{"__ignoreMap":32},[37,30138,30139,30141,30143,30145],{"class":39,"line":40},[37,30140,26626],{"class":2035},[37,30142,28970],{"class":309},[37,30144,30002],{"class":309},[37,30146,30147],{"class":309}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30149,30150],{},"最后将镜像推送到远程仓库",[27,30152,30154],{"className":23894,"code":30153,"language":23896,"meta":32,"style":32},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[34,30155,30156],{"__ignoreMap":32},[37,30157,30158,30160,30162],{"class":39,"line":40},[37,30159,26626],{"class":2035},[37,30161,29089],{"class":309},[37,30163,30147],{"class":309},[123,30165,30166],{},"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":32,"searchDepth":47,"depth":47,"links":30168},[30169,30170,30171],{"id":28556,"depth":58,"text":28557},{"id":28785,"depth":58,"text":28786},{"id":29811,"depth":58,"text":29812},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28548,"description":32},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30178,"title":30179,"body":30180,"description":32,"extension":129,"meta":30323,"navigation":131,"path":30324,"seo":30325,"stem":30326,"__hash__":30327},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30181,"toc":30321},[30182,30185,30190,30195,30198,30203,30208,30211,30216,30221,30224,30229,30232,30235,30238,30241,30244,30247,30267,30289,30292,30295,30315,30318],[10,30183,30179],{"id":30184},"_7vscode远程开发",[158,30186,30187],{},[161,30188,30189],{},"插件1：微软Docker工具",[14,30191,30192],{},[119,30193],{"alt":32,"src":30194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30196,30197],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30199,30200],{},[119,30201],{"alt":32,"src":30202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[158,30204,30205],{"start":47},[161,30206,30207],{},"插件2：微软Docker远程开发工具",[14,30209,30210],{},"下面这是远程开发的插件。",[14,30212,30213],{},[119,30214],{"alt":32,"src":30215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30217,30218],{},[119,30219],{"alt":32,"src":30220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30222,30223],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30225,30226],{},[119,30227],{"alt":32,"src":30228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30230,30231],{},"安装完拓展之后，vscode进行链接：",[14,30233,30234],{},"1.按ctrl+shift+p",[14,30236,30237],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30239,30240],{},"3.选择目前运行的容器",[14,30242,30243],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30245,30246],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[27,30248,30250],{"className":23894,"code":30249,"language":23896,"meta":32,"style":32},"docker run -v 主机目录:容器目录 image-name\n",[34,30251,30252],{"__ignoreMap":32},[37,30253,30254,30256,30258,30261,30264],{"class":39,"line":40},[37,30255,26626],{"class":2035},[37,30257,27303],{"class":309},[37,30259,30260],{"class":82}," -v",[37,30262,30263],{"class":309}," 主机目录:容器目录",[37,30265,30266],{"class":309}," image-name\n",[27,30268,30270],{"className":23894,"code":30269,"language":23896,"meta":32,"style":32},"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",[34,30271,30272],{"__ignoreMap":32},[37,30273,30274,30276,30278,30281,30283,30286],{"class":39,"line":40},[37,30275,26626],{"class":2035},[37,30277,27303],{"class":309},[37,30279,30280],{"class":82}," -it",[37,30282,30260],{"class":82},[37,30284,30285],{"class":309}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[37,30287,30288],{"class":309}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30290,30291],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30293,30294],{},"查看挂载情况：",[27,30296,30298],{"className":23894,"code":30297,"language":23896,"meta":32,"style":32},"mount | grep -i project\n",[34,30299,30300],{"__ignoreMap":32},[37,30301,30302,30305,30307,30310,30312],{"class":39,"line":40},[37,30303,30304],{"class":2035},"mount",[37,30306,25182],{"class":50},[37,30308,30309],{"class":2035}," grep",[37,30311,26503],{"class":82},[37,30313,30314],{"class":309}," project\n",[14,30316,30317],{},"也可以通过ls来进行查看",[123,30319,30320],{},"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":32,"searchDepth":47,"depth":47,"links":30322},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30179,"description":32},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30329,"title":30330,"body":30331,"description":128,"extension":129,"meta":30335,"navigation":131,"path":30337,"seo":30338,"stem":30339,"__hash__":30340},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30332,"toc":30333},[],{"title":32,"searchDepth":47,"depth":47,"links":30334},[],{"category":30336},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30330,"description":128},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30342,"title":30343,"body":30344,"description":128,"extension":129,"meta":30348,"navigation":131,"path":30349,"seo":30350,"stem":30351,"__hash__":30352},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30345,"toc":30346},[],{"title":32,"searchDepth":47,"depth":47,"links":30347},[],{"category":30336},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30343,"description":128},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30354,"title":30355,"body":30356,"description":128,"extension":129,"meta":30646,"navigation":131,"path":30647,"seo":30648,"stem":30649,"__hash__":30650},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30357,"toc":30644},[30358,30361,30369,30384,30389,30440,30443,30449,30633,30638,30641],[10,30359,30355],{"id":30360},"_1验证深度学习环境",[14,30362,30363,30364],{},"关于环境的安装，看",[443,30365,30368],{"href":30366,"rel":30367},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23937],"Pytorch-->深度学习",[14,30370,30371,30372,30375,30376,30379,30380,30383],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[34,30373,30374],{},"pytorch-cuda=12.4"," 是一个“ ",[354,30377,30378],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[354,30381,30382],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,30385,30386],{},[119,30387],{"alt":32,"src":30388},"\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",[27,30390,30392],{"className":23894,"code":30391,"language":23896,"meta":32,"style":32},"# 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",[34,30393,30394,30399],{"__ignoreMap":32},[37,30395,30396],{"class":39,"line":40},[37,30397,30398],{"class":43},"# CUDA 12.4\n",[37,30400,30401,30404,30406,30409,30412,30415,30418,30421,30423,30426,30429,30432,30435,30437],{"class":39,"line":47},[37,30402,30403],{"class":2035},"conda",[37,30405,23906],{"class":309},[37,30407,30408],{"class":309}," pytorch==",[37,30410,30411],{"class":82},"2.5.1",[37,30413,30414],{"class":309}," torchvision==",[37,30416,30417],{"class":82},"0.20.1",[37,30419,30420],{"class":309}," torchaudio==",[37,30422,30411],{"class":82},[37,30424,30425],{"class":309}," pytorch-cuda=",[37,30427,30428],{"class":82},"12.4",[37,30430,30431],{"class":82}," -c",[37,30433,30434],{"class":309}," pytorch",[37,30436,30431],{"class":82},[37,30438,30439],{"class":309}," nvidia\n",[14,30441,30442],{},"）：",[14,30444,30445],{},[443,30446,30447],{"href":30447,"rel":30448},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23937],[27,30450,30452],{"className":29,"code":30451,"language":31,"meta":32,"style":32},"# 对深度学习环境进行测试\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",[34,30453,30454,30459,30466,30471,30481,30497,30502,30512,30549,30556,30568,30584,30589,30599,30611,30621],{"__ignoreMap":32},[37,30455,30456],{"class":39,"line":40},[37,30457,30458],{"class":43},"# 对深度学习环境进行测试\n",[37,30460,30461,30463],{"class":39,"line":47},[37,30462,51],{"class":50},[37,30464,30465],{"class":54}," torch\n",[37,30467,30468],{"class":39,"line":58},[37,30469,30470],{"class":43},"# 查看cuda是否被激活\n",[37,30472,30473,30476,30478],{"class":39,"line":64},[37,30474,30475],{"class":54},"flag",[37,30477,70],{"class":50},[37,30479,30480],{"class":54},"torch.cuda.is_available()\n",[37,30482,30483,30486,30488,30491,30494],{"class":39,"line":76},[37,30484,30485],{"class":82},"print",[37,30487,208],{"class":54},[37,30489,30490],{"class":309},"\"cuda:\"",[37,30492,30493],{"class":54},", flag)   ",[37,30495,30496],{"class":43},"#返回true的话说明被激活\n",[37,30498,30499],{"class":39,"line":92},[37,30500,30501],{"class":43},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[37,30503,30504,30507,30509],{"class":39,"line":97},[37,30505,30506],{"class":54},"ngpu",[37,30508,70],{"class":50},[37,30510,30511],{"class":82},"1\n",[37,30513,30514,30517,30519,30522,30525,30527,30530,30533,30536,30538,30540,30542,30544,30547],{"class":39,"line":107},[37,30515,30516],{"class":54},"device",[37,30518,70],{"class":50},[37,30520,30521],{"class":54},"torch.device(",[37,30523,30524],{"class":309},"\"cuda:0\"",[37,30526,1776],{"class":50},[37,30528,30529],{"class":54},"(torch.cuda.is_available() ",[37,30531,30532],{"class":50},"and",[37,30534,30535],{"class":54}," ngpu",[37,30537,1163],{"class":50},[37,30539,396],{"class":82},[37,30541,13786],{"class":54},[37,30543,1773],{"class":50},[37,30545,30546],{"class":309}," \"cpu\"",[37,30548,214],{"class":54},[37,30550,30551,30553],{"class":39,"line":1390},[37,30552,30485],{"class":82},[37,30554,30555],{"class":54},"(device)\n",[37,30557,30558,30560,30563,30565],{"class":39,"line":1402},[37,30559,30485],{"class":82},[37,30561,30562],{"class":54},"(torch.cuda.get_device_name(",[37,30564,396],{"class":82},[37,30566,30567],{"class":54},"))\n",[37,30569,30570,30572,30575,30577,30579,30581],{"class":39,"line":1684},[37,30571,30485],{"class":82},[37,30573,30574],{"class":54},"(torch.rand(",[37,30576,276],{"class":82},[37,30578,583],{"class":54},[37,30580,276],{"class":82},[37,30582,30583],{"class":54},").cuda())\n",[37,30585,30586],{"class":39,"line":1689},[37,30587,30588],{"class":43},"# 查看cuda和cudnn的版本\n",[37,30590,30591,30594,30596],{"class":39,"line":1695},[37,30592,30593],{"class":54},"cuda_version",[37,30595,70],{"class":50},[37,30597,30598],{"class":54},"torch.version.cuda\n",[37,30600,30601,30603,30605,30608],{"class":39,"line":1700},[37,30602,30485],{"class":82},[37,30604,208],{"class":54},[37,30606,30607],{"class":309},"\"cuda version\"",[37,30609,30610],{"class":54},",cuda_version)\n",[37,30612,30613,30616,30618],{"class":39,"line":1714},[37,30614,30615],{"class":54},"cudnn_version",[37,30617,70],{"class":50},[37,30619,30620],{"class":54},"torch.backends.cudnn.version()\n",[37,30622,30623,30625,30627,30630],{"class":39,"line":1719},[37,30624,30485],{"class":82},[37,30626,208],{"class":54},[37,30628,30629],{"class":309},"\"cudnn version\"",[37,30631,30632],{"class":54},",cudnn_version)\n",[14,30634,30635],{},[119,30636],{"alt":32,"src":30637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[14,30639,30640],{},"cuda:0 指的是一块显卡",[123,30642,30643],{},"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":32,"searchDepth":47,"depth":47,"links":30645},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30355,"description":128},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30652,"title":30653,"body":30654,"description":128,"extension":129,"meta":50456,"navigation":131,"path":50457,"seo":50458,"stem":50459,"__hash__":50460},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30655,"toc":50450},[30656,30659,30663,30667,30670,30675,30680,30683,30688,30693,30698,30701,30705,30710,30714,30719,30722,30727,30730,30733,30736,30739,30744,30747,30752,30757,30762,30767,30770,30774,30777,30782,31386,31391,31394,31399,31402,31405,31869,31872,31875,31878,31881,33931,33934,33939,33944,34739,34742,34747,35525,35529,37188,37192,37906,37910,37914,37919,37924,37929,37932,37937,37942,37947,37952,37957,37961,37966,39248,39253,39256,39259,39262,39417,39420,39423,40639,40644,41339,41343,41347,41352,41357,41360,41365,41370,41375,41380,41385,41390,41395,41400,41405,41410,41415,41420,41425,41430,41435,41440,41445,41450,41455,41460,41465,41470,41475,41480,41485,41490,41495,41500,41505,41510,41514,41518,41521,42999,43003,44650,44654,45348,45352,45355,45358,45901,45904,45908,45911,47308,47312,47315,47893,49680,49684,49687,50447],[10,30657,30653],{"id":30658},"_2经典神经网络",[175,30660,30662],{"id":30661},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22070,30664,30666],{"id":30665},"_211原理介绍","2.1.1.原理介绍",[14,30668,30669],{},"LeNet-5",[158,30671,30672],{},[161,30673,30674],{},"原理",[14,30676,30677],{},[119,30678],{"alt":32,"src":30679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[14,30681,30682],{},"B是batch批次；C是channel通道",[158,30684,30685],{"start":47},[161,30686,30687],{},"网络参数详细",[14,30689,30690],{},[119,30691],{"alt":32,"src":30692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[14,30694,30695],{},[119,30696],{"alt":32,"src":30697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[14,30699,30700],{},"AlexNet",[158,30702,30703],{},[161,30704,30674],{},[14,30706,30707],{},[119,30708],{"alt":32,"src":30709},"\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",[158,30711,30712],{"start":47},[161,30713,30687],{},[14,30715,30716],{},[119,30717],{"alt":32,"src":30718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[14,30720,30721],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,30723,30724],{},[119,30725],{"alt":32,"src":30726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[14,30728,30729],{},"数据处理中的图像增强操作:",[14,30731,30732],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,30734,30735],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,30737,30738],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,30740,30741],{},[119,30742],{"alt":32,"src":30743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[14,30745,30746],{},"提升网络精确度的方法：LRN正则化",[14,30748,30749],{},[119,30750],{"alt":32,"src":30751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[14,30753,30754],{},[119,30755],{"alt":32,"src":30756},"\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",[158,30758,30759],{"start":58},[161,30760,30761],{},"AlexNet的总结",[14,30763,30764],{},[119,30765],{"alt":32,"src":30766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[14,30768,30769],{},"比LeNet模型要深一丢丢",[22070,30771,30773],{"id":30772},"_212代码实现","2.1.2.代码实现",[14,30775,30776],{},"（1）LeNet",[158,30778,30779],{},[161,30780,30781],{},"模型搭建",[27,30783,30785],{"className":29,"code":30784,"language":31,"meta":32,"style":32},"# 导入库\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",[34,30786,30787,30792,30798,30803,30816,30821,30833,30837,30857,30862,30867,30878,30883,30902,30906,30911,30960,30972,30977,31006,31041,31068,31073,31085,31090,31110,31129,31148,31152,31157,31167,31184,31195,31210,31221,31232,31247,31262,31273,31280,31284,31298,31303,31326,31331,31336,31341,31345,31350,31355,31365],{"__ignoreMap":32},[37,30788,30789],{"class":39,"line":40},[37,30790,30791],{"class":43},"# 导入库\n",[37,30793,30794,30796],{"class":39,"line":47},[37,30795,51],{"class":50},[37,30797,30465],{"class":54},[37,30799,30800],{"class":39,"line":58},[37,30801,30802],{"class":43},"# 导入神经网络层\n",[37,30804,30805,30808,30811,30813],{"class":39,"line":64},[37,30806,30807],{"class":50},"from",[37,30809,30810],{"class":54}," torch ",[37,30812,51],{"class":50},[37,30814,30815],{"class":54}," nn\n",[37,30817,30818],{"class":39,"line":76},[37,30819,30820],{"class":43},"# 导入展示神经网络参数的包\n",[37,30822,30823,30825,30828,30830],{"class":39,"line":92},[37,30824,30807],{"class":50},[37,30826,30827],{"class":54}," torchsummary ",[37,30829,51],{"class":50},[37,30831,30832],{"class":54}," summary\n",[37,30834,30835],{"class":39,"line":97},[37,30836,2472],{"emptyLinePlaceholder":131},[37,30838,30839,30841,30844,30846,30849,30851,30854],{"class":39,"line":107},[37,30840,14766],{"class":50},[37,30842,30843],{"class":2035}," LeNet",[37,30845,208],{"class":54},[37,30847,30848],{"class":2035},"nn",[37,30850,761],{"class":54},[37,30852,30853],{"class":2035},"Module",[37,30855,30856],{"class":54},"):\n",[37,30858,30859],{"class":39,"line":1390},[37,30860,30861],{"class":43},"    # 模型初始化:\n",[37,30863,30864],{"class":39,"line":1402},[37,30865,30866],{"class":43},"    # 定义一些网络层和激活函数\n",[37,30868,30869,30872,30875],{"class":39,"line":1684},[37,30870,30871],{"class":50},"    def",[37,30873,30874],{"class":82}," __init__",[37,30876,30877],{"class":54},"(self):\n",[37,30879,30880],{"class":39,"line":1689},[37,30881,30882],{"class":43},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[37,30884,30885,30888,30891,30894,30897,30900],{"class":39,"line":1695},[37,30886,30887],{"class":82},"        super",[37,30889,30890],{"class":54},"(LeNet,",[37,30892,30893],{"class":82},"self",[37,30895,30896],{"class":54},").",[37,30898,30899],{"class":82},"__init__",[37,30901,2048],{"class":54},[37,30903,30904],{"class":39,"line":1700},[37,30905,2472],{"emptyLinePlaceholder":131},[37,30907,30908],{"class":39,"line":1714},[37,30909,30910],{"class":43},"        # 定义网络层\n",[37,30912,30913,30916,30919,30921,30924,30927,30929,30931,30933,30936,30938,30940,30942,30945,30947,30949,30951,30954,30956,30958],{"class":39,"line":1719},[37,30914,30915],{"class":82},"        self",[37,30917,30918],{"class":54},".c1",[37,30920,70],{"class":50},[37,30922,30923],{"class":54},"nn.Conv2d(",[37,30925,30926],{"class":5288},"in_channels",[37,30928,70],{"class":50},[37,30930,422],{"class":82},[37,30932,583],{"class":54},[37,30934,30935],{"class":5288},"out_channels",[37,30937,70],{"class":50},[37,30939,549],{"class":82},[37,30941,583],{"class":54},[37,30943,30944],{"class":5288},"kernel_size",[37,30946,70],{"class":50},[37,30948,524],{"class":82},[37,30950,583],{"class":54},[37,30952,30953],{"class":5288},"padding",[37,30955,70],{"class":50},[37,30957,282],{"class":82},[37,30959,214],{"class":54},[37,30961,30962,30964,30967,30969],{"class":39,"line":1725},[37,30963,30915],{"class":82},[37,30965,30966],{"class":54},".sig",[37,30968,70],{"class":50},[37,30970,30971],{"class":54},"nn.Sigmoid()\n",[37,30973,30974],{"class":39,"line":1746},[37,30975,30976],{"class":43},"        # 定义池化\n",[37,30978,30979,30981,30984,30986,30989,30991,30993,30995,30997,31000,31002,31004],{"class":39,"line":1751},[37,30980,30915],{"class":82},[37,30982,30983],{"class":54},".s2",[37,30985,70],{"class":50},[37,30987,30988],{"class":54},"nn.AvgPool2d(",[37,30990,30944],{"class":5288},[37,30992,70],{"class":50},[37,30994,282],{"class":82},[37,30996,583],{"class":54},[37,30998,30999],{"class":5288},"stride",[37,31001,70],{"class":50},[37,31003,282],{"class":82},[37,31005,214],{"class":54},[37,31007,31008,31010,31013,31015,31017,31019,31021,31023,31025,31027,31029,31031,31033,31035,31037,31039],{"class":39,"line":1765},[37,31009,30915],{"class":82},[37,31011,31012],{"class":54},".c3",[37,31014,70],{"class":50},[37,31016,30923],{"class":54},[37,31018,30926],{"class":5288},[37,31020,70],{"class":50},[37,31022,549],{"class":82},[37,31024,583],{"class":54},[37,31026,30935],{"class":5288},[37,31028,70],{"class":50},[37,31030,804],{"class":82},[37,31032,583],{"class":54},[37,31034,30944],{"class":5288},[37,31036,70],{"class":50},[37,31038,524],{"class":82},[37,31040,214],{"class":54},[37,31042,31043,31045,31048,31050,31052,31054,31056,31058,31060,31062,31064,31066],{"class":39,"line":1770},[37,31044,30915],{"class":82},[37,31046,31047],{"class":54},".s4",[37,31049,70],{"class":50},[37,31051,30988],{"class":54},[37,31053,30944],{"class":5288},[37,31055,70],{"class":50},[37,31057,282],{"class":82},[37,31059,583],{"class":54},[37,31061,30999],{"class":5288},[37,31063,70],{"class":50},[37,31065,282],{"class":82},[37,31067,214],{"class":54},[37,31069,31070],{"class":39,"line":1799},[37,31071,31072],{"class":43},"        # 定义平展层\n",[37,31074,31075,31077,31080,31082],{"class":39,"line":1804},[37,31076,30915],{"class":82},[37,31078,31079],{"class":54},".flatten",[37,31081,70],{"class":50},[37,31083,31084],{"class":54},"nn.Flatten()\n",[37,31086,31087],{"class":39,"line":1821},[37,31088,31089],{"class":43},"        # 定义全连接层\n",[37,31091,31092,31094,31097,31099,31102,31104,31106,31108],{"class":39,"line":1826},[37,31093,30915],{"class":82},[37,31095,31096],{"class":54},".f5",[37,31098,70],{"class":50},[37,31100,31101],{"class":54},"nn.Linear(",[37,31103,4059],{"class":82},[37,31105,583],{"class":54},[37,31107,1020],{"class":82},[37,31109,214],{"class":54},[37,31111,31112,31114,31117,31119,31121,31123,31125,31127],{"class":39,"line":1831},[37,31113,30915],{"class":82},[37,31115,31116],{"class":54},".f6",[37,31118,70],{"class":50},[37,31120,31101],{"class":54},[37,31122,1020],{"class":82},[37,31124,583],{"class":54},[37,31126,914],{"class":82},[37,31128,214],{"class":54},[37,31130,31131,31133,31136,31138,31140,31142,31144,31146],{"class":39,"line":1836},[37,31132,30915],{"class":82},[37,31134,31135],{"class":54},".f7",[37,31137,70],{"class":50},[37,31139,31101],{"class":54},[37,31141,914],{"class":82},[37,31143,583],{"class":54},[37,31145,650],{"class":82},[37,31147,214],{"class":54},[37,31149,31150],{"class":39,"line":1850},[37,31151,2472],{"emptyLinePlaceholder":131},[37,31153,31154],{"class":39,"line":1855},[37,31155,31156],{"class":43},"    # 写工具->写前向传播\n",[37,31158,31159,31161,31164],{"class":39,"line":2649},[37,31160,30871],{"class":50},[37,31162,31163],{"class":2035}," forward",[37,31165,31166],{"class":54},"(self,x):\n",[37,31168,31169,31172,31174,31176,31179,31181],{"class":39,"line":2663},[37,31170,31171],{"class":54},"        x",[37,31173,70],{"class":50},[37,31175,30893],{"class":82},[37,31177,31178],{"class":54},".sig(",[37,31180,30893],{"class":82},[37,31182,31183],{"class":54},".c1(x))\n",[37,31185,31186,31188,31190,31192],{"class":39,"line":2671},[37,31187,31171],{"class":54},[37,31189,70],{"class":50},[37,31191,30893],{"class":82},[37,31193,31194],{"class":54},".s2(x)\n",[37,31196,31197,31199,31201,31203,31205,31207],{"class":39,"line":2676},[37,31198,31171],{"class":54},[37,31200,70],{"class":50},[37,31202,30893],{"class":82},[37,31204,31178],{"class":54},[37,31206,30893],{"class":82},[37,31208,31209],{"class":54},".c3(x))\n",[37,31211,31212,31214,31216,31218],{"class":39,"line":2682},[37,31213,31171],{"class":54},[37,31215,70],{"class":50},[37,31217,30893],{"class":82},[37,31219,31220],{"class":54},".s4(x)\n",[37,31222,31223,31225,31227,31229],{"class":39,"line":2688},[37,31224,31171],{"class":54},[37,31226,70],{"class":50},[37,31228,30893],{"class":82},[37,31230,31231],{"class":54},".flatten(x)\n",[37,31233,31234,31236,31238,31240,31242,31244],{"class":39,"line":2693},[37,31235,31171],{"class":54},[37,31237,70],{"class":50},[37,31239,30893],{"class":82},[37,31241,31178],{"class":54},[37,31243,30893],{"class":82},[37,31245,31246],{"class":54},".f5(x))\n",[37,31248,31249,31251,31253,31255,31257,31259],{"class":39,"line":8020},[37,31250,31171],{"class":54},[37,31252,70],{"class":50},[37,31254,30893],{"class":82},[37,31256,31178],{"class":54},[37,31258,30893],{"class":82},[37,31260,31261],{"class":54},".f6(x))\n",[37,31263,31264,31266,31268,31270],{"class":39,"line":8044},[37,31265,31171],{"class":54},[37,31267,70],{"class":50},[37,31269,30893],{"class":82},[37,31271,31272],{"class":54},".f7(x)\n",[37,31274,31275,31277],{"class":39,"line":8049},[37,31276,14824],{"class":50},[37,31278,31279],{"class":54}," x\n",[37,31281,31282],{"class":39,"line":8055},[37,31283,2472],{"emptyLinePlaceholder":131},[37,31285,31286,31288,31291,31293,31296],{"class":39,"line":8082},[37,31287,1603],{"class":50},[37,31289,31290],{"class":82}," __name__",[37,31292,3021],{"class":50},[37,31294,31295],{"class":309},"\"__main__\"",[37,31297,3811],{"class":54},[37,31299,31300],{"class":39,"line":8087},[37,31301,31302],{"class":43},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[37,31304,31305,31308,31310,31312,31315,31317,31320,31322,31324],{"class":39,"line":8093},[37,31306,31307],{"class":54},"    device",[37,31309,70],{"class":50},[37,31311,30521],{"class":54},[37,31313,31314],{"class":309},"\"cuda\"",[37,31316,1776],{"class":50},[37,31318,31319],{"class":54}," torch.cuda.is_available() ",[37,31321,1773],{"class":50},[37,31323,30546],{"class":309},[37,31325,214],{"class":54},[37,31327,31328],{"class":39,"line":8105},[37,31329,31330],{"class":43},"    # 如果就是想指定用cpu用下方代码:\n",[37,31332,31333],{"class":39,"line":8117},[37,31334,31335],{"class":43},"    # device=\"cpu\"\n",[37,31337,31338],{"class":39,"line":8129},[37,31339,31340],{"class":43},"    # print(device)\n",[37,31342,31343],{"class":39,"line":9788},[37,31344,2472],{"emptyLinePlaceholder":131},[37,31346,31347],{"class":39,"line":9813},[37,31348,31349],{"class":43},"    # 实例化模型\n",[37,31351,31352],{"class":39,"line":9836},[37,31353,31354],{"class":43},"    # 将模型放到设备中去运行\n",[37,31356,31357,31360,31362],{"class":39,"line":9860},[37,31358,31359],{"class":54},"    model",[37,31361,70],{"class":50},[37,31363,31364],{"class":54},"LeNet().to(device)\n",[37,31366,31367,31370,31373,31375,31377,31379,31381,31383],{"class":39,"line":9865},[37,31368,31369],{"class":82},"    print",[37,31371,31372],{"class":54},"(summary(model,(",[37,31374,422],{"class":82},[37,31376,583],{"class":54},[37,31378,1104],{"class":82},[37,31380,583],{"class":54},[37,31382,1104],{"class":82},[37,31384,31385],{"class":54},")))\n",[14,31387,31388],{},[119,31389],{"alt":32,"src":31390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[14,31392,31393],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[158,31395,31396],{"start":47},[161,31397,31398],{},"训练",[14,31400,31401],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,31403,31404],{},"在训练之前可以将数据展示看一下",[27,31406,31408],{"className":29,"code":31407,"language":31,"meta":32,"style":32},"# 建立画图的函数，用于展示数据\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",[34,31409,31410,31415,31420,31432,31444,31457,31462,31474,31479,31491,31496,31508,31512,31516,31537,31549,31554,31575,31586,31590,31595,31613,31624,31629,31640,31645,31656,31660,31665,31680,31693,31698,31703,31716,31729,31742,31747,31751,31756,31776,31793,31813,31826,31839,31849,31864],{"__ignoreMap":32},[37,31411,31412],{"class":39,"line":40},[37,31413,31414],{"class":43},"# 建立画图的函数，用于展示数据\n",[37,31416,31417],{"class":39,"line":47},[37,31418,31419],{"class":43},"# torchvision中包含很多内置的数据集\n",[37,31421,31422,31424,31427,31429],{"class":39,"line":58},[37,31423,30807],{"class":50},[37,31425,31426],{"class":54}," sklearn.externals.array_api_compat.torch ",[37,31428,51],{"class":50},[37,31430,31431],{"class":54}," squeeze\n",[37,31433,31434,31436,31439,31441],{"class":39,"line":64},[37,31435,30807],{"class":50},[37,31437,31438],{"class":54}," torchvision.datasets ",[37,31440,51],{"class":50},[37,31442,31443],{"class":54}," FashionMNIST\n",[37,31445,31446,31448,31451,31454],{"class":39,"line":76},[37,31447,51],{"class":50},[37,31449,31450],{"class":54}," numpy ",[37,31452,31453],{"class":50},"as",[37,31455,31456],{"class":54}," np\n",[37,31458,31459],{"class":39,"line":92},[37,31460,31461],{"class":43},"# 引入处理数据集的包\n",[37,31463,31464,31466,31469,31471],{"class":39,"line":97},[37,31465,30807],{"class":50},[37,31467,31468],{"class":54}," torchvision ",[37,31470,51],{"class":50},[37,31472,31473],{"class":54}," transforms\n",[37,31475,31476],{"class":39,"line":107},[37,31477,31478],{"class":43},"# 从torch库中引入数据处理的包\n",[37,31480,31481,31483,31486,31488],{"class":39,"line":1390},[37,31482,51],{"class":50},[37,31484,31485],{"class":54}," torch.utils.data ",[37,31487,31453],{"class":50},[37,31489,31490],{"class":54}," Data\n",[37,31492,31493],{"class":39,"line":1402},[37,31494,31495],{"class":43},"# 导入画图的库\n",[37,31497,31498,31500,31503,31505],{"class":39,"line":1684},[37,31499,51],{"class":50},[37,31501,31502],{"class":54}," matplotlib.pyplot ",[37,31504,31453],{"class":50},[37,31506,31507],{"class":54}," plt\n",[37,31509,31510],{"class":39,"line":1689},[37,31511,2472],{"emptyLinePlaceholder":131},[37,31513,31514],{"class":39,"line":1695},[37,31515,2472],{"emptyLinePlaceholder":131},[37,31517,31518,31521,31523,31526,31529,31531,31534],{"class":39,"line":1700},[37,31519,31520],{"class":54},"train_data",[37,31522,70],{"class":50},[37,31524,31525],{"class":54},"FashionMNIST(",[37,31527,31528],{"class":5288},"root",[37,31530,70],{"class":50},[37,31532,31533],{"class":309},"'.\u002Fdata'",[37,31535,31536],{"class":54},",\n",[37,31538,31539,31542,31544,31547],{"class":39,"line":1714},[37,31540,31541],{"class":5288},"                        train",[37,31543,70],{"class":50},[37,31545,31546],{"class":82},"True",[37,31548,31536],{"class":54},[37,31550,31551],{"class":39,"line":1719},[37,31552,31553],{"class":43},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[37,31555,31556,31559,31561,31564,31567,31569,31572],{"class":39,"line":1725},[37,31557,31558],{"class":5288},"                        transform",[37,31560,70],{"class":50},[37,31562,31563],{"class":54},"transforms.Compose([transforms.Resize(",[37,31565,31566],{"class":5288},"size",[37,31568,70],{"class":50},[37,31570,31571],{"class":82},"224",[37,31573,31574],{"class":54},"),transforms.ToTensor()]),\n",[37,31576,31577,31580,31582,31584],{"class":39,"line":1746},[37,31578,31579],{"class":5288},"                        download",[37,31581,70],{"class":50},[37,31583,31546],{"class":82},[37,31585,214],{"class":54},[37,31587,31588],{"class":39,"line":1751},[37,31589,2472],{"emptyLinePlaceholder":131},[37,31591,31592],{"class":39,"line":1765},[37,31593,31594],{"class":43},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[37,31596,31597,31600,31602,31605,31608,31610],{"class":39,"line":1770},[37,31598,31599],{"class":54},"train_loader",[37,31601,70],{"class":50},[37,31603,31604],{"class":54},"Data.DataLoader(",[37,31606,31607],{"class":5288},"dataset",[37,31609,70],{"class":50},[37,31611,31612],{"class":54},"train_data,\n",[37,31614,31615,31618,31620,31622],{"class":39,"line":1799},[37,31616,31617],{"class":5288},"                             batch_size",[37,31619,70],{"class":50},[37,31621,408],{"class":82},[37,31623,31536],{"class":54},[37,31625,31626],{"class":39,"line":1804},[37,31627,31628],{"class":43},"                             # 数据是否打乱\n",[37,31630,31631,31634,31636,31638],{"class":39,"line":1821},[37,31632,31633],{"class":5288},"                             shuffle",[37,31635,70],{"class":50},[37,31637,31546],{"class":82},[37,31639,31536],{"class":54},[37,31641,31642],{"class":39,"line":1826},[37,31643,31644],{"class":43},"                             # 规定加载数据的进程\n",[37,31646,31647,31650,31652,31654],{"class":39,"line":1831},[37,31648,31649],{"class":5288},"                             num_workers",[37,31651,70],{"class":50},[37,31653,396],{"class":82},[37,31655,214],{"class":54},[37,31657,31658],{"class":39,"line":1836},[37,31659,2472],{"emptyLinePlaceholder":131},[37,31661,31662],{"class":39,"line":1850},[37,31663,31664],{"class":43},"# 获得一个batch的数据\n",[37,31666,31667,31669,31672,31674,31677],{"class":39,"line":1855},[37,31668,3097],{"class":50},[37,31670,31671],{"class":54}," step,(b_x,b_y) ",[37,31673,26116],{"class":50},[37,31675,31676],{"class":82}," enumerate",[37,31678,31679],{"class":54},"(train_loader):\n",[37,31681,31682,31684,31687,31689,31691],{"class":39,"line":2649},[37,31683,3173],{"class":50},[37,31685,31686],{"class":54}," step ",[37,31688,1163],{"class":50},[37,31690,4165],{"class":82},[37,31692,3811],{"class":54},[37,31694,31695],{"class":39,"line":2663},[37,31696,31697],{"class":50},"        break\n",[37,31699,31700],{"class":39,"line":2671},[37,31701,31702],{"class":43},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[37,31704,31705,31708,31710,31713],{"class":39,"line":2676},[37,31706,31707],{"class":54},"batch_x",[37,31709,70],{"class":50},[37,31711,31712],{"class":54},"b_x.squeeze().numpy()  ",[37,31714,31715],{"class":43},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[37,31717,31718,31721,31723,31726],{"class":39,"line":2682},[37,31719,31720],{"class":54},"batch_y",[37,31722,70],{"class":50},[37,31724,31725],{"class":54},"b_y.numpy()   ",[37,31727,31728],{"class":43},"#将张量转换成功numpy数组\n",[37,31730,31731,31734,31736,31739],{"class":39,"line":2688},[37,31732,31733],{"class":54},"class_label",[37,31735,70],{"class":50},[37,31737,31738],{"class":54},"train_data.classes  ",[37,31740,31741],{"class":43},"#训练集标签\n",[37,31743,31744],{"class":39,"line":2693},[37,31745,31746],{"class":43},"# print(class_label)\n",[37,31748,31749],{"class":39,"line":8020},[37,31750,2472],{"emptyLinePlaceholder":131},[37,31752,31753],{"class":39,"line":8044},[37,31754,31755],{"class":43},"# 可视化一个batch的图像\n",[37,31757,31758,31761,31764,31766,31768,31770,31772,31774],{"class":39,"line":8049},[37,31759,31760],{"class":54},"plt.figure(",[37,31762,31763],{"class":5288},"figsize",[37,31765,70],{"class":50},[37,31767,208],{"class":54},[37,31769,702],{"class":82},[37,31771,583],{"class":54},[37,31773,524],{"class":82},[37,31775,30567],{"class":54},[37,31777,31778,31780,31783,31785,31788,31790],{"class":39,"line":8055},[37,31779,3097],{"class":50},[37,31781,31782],{"class":54}," ii ",[37,31784,26116],{"class":50},[37,31786,31787],{"class":54}," np.arange(",[37,31789,7430],{"class":82},[37,31791,31792],{"class":54},"(batch_y)):\n",[37,31794,31795,31798,31800,31802,31804,31807,31809,31811],{"class":39,"line":8082},[37,31796,31797],{"class":54},"    plt.subplot(",[37,31799,498],{"class":82},[37,31801,583],{"class":54},[37,31803,804],{"class":82},[37,31805,31806],{"class":54},",ii ",[37,31808,685],{"class":50},[37,31810,25191],{"class":82},[37,31812,214],{"class":54},[37,31814,31815,31818,31821,31823],{"class":39,"line":8087},[37,31816,31817],{"class":54},"    plt.imshow(batch_x[ii,:,:],",[37,31819,31820],{"class":5288},"cmap",[37,31822,70],{"class":50},[37,31824,31825],{"class":54},"plt.cm.gray)\n",[37,31827,31828,31831,31833,31835,31837],{"class":39,"line":8093},[37,31829,31830],{"class":54},"    plt.title(class_label[batch_y[ii]],",[37,31832,31566],{"class":5288},[37,31834,70],{"class":50},[37,31836,650],{"class":82},[37,31838,214],{"class":54},[37,31840,31841,31844,31847],{"class":39,"line":8105},[37,31842,31843],{"class":54},"    plt.axis(",[37,31845,31846],{"class":309},"\"off\"",[37,31848,214],{"class":54},[37,31850,31851,31854,31857,31859,31862],{"class":39,"line":8117},[37,31852,31853],{"class":54},"    plt.subplots_adjust(",[37,31855,31856],{"class":5288},"wspace",[37,31858,70],{"class":50},[37,31860,31861],{"class":82},"0.05",[37,31863,214],{"class":54},[37,31865,31866],{"class":39,"line":8129},[37,31867,31868],{"class":54},"plt.show()\n",[14,31870,31871],{},"用matplotlib进行展示的过程可以后续再补",[14,31873,31874],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,31876,31877],{},"训练次数就是按照批次过整个训练集数据的次数",[14,31879,31880],{},"模型训练：",[27,31882,31884],{"className":29,"code":31883,"language":31,"meta":32,"style":32},"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",[34,31885,31886,31893,31900,31904,31916,31922,31933,31943,31953,31963,31973,31978,31990,32000,32004,32008,32013,32024,32037,32048,32065,32076,32115,32131,32143,32154,32159,32170,32186,32197,32208,32219,32226,32230,32235,32240,32244,32249,32259,32280,32284,32288,32293,32298,32303,32323,32327,32332,32342,32346,32351,32360,32365,32370,32375,32385,32389,32393,32398,32403,32413,32418,32428,32433,32442,32447,32456,32461,32470,32474,32479,32488,32492,32496,32501,32516,32544,32559,32563,32568,32573,32582,32587,32596,32601,32610,32615,32624,32629,32638,32643,32652,32657,32670,32675,32685,32690,32700,32706,32712,32718,32724,32735,32741,32761,32767,32778,32784,32790,32796,32802,32808,32814,32820,32840,32846,32862,32868,32882,32888,32903,32909,32918,32924,32933,32939,32945,32954,32960,32971,32977,32996,33002,33013,33019,33039,33055,33061,33075,33081,33087,33098,33104,33110,33120,33126,33137,33143,33153,33158,33164,33213,33260,33265,33271,33290,33296,33316,33322,33328,33338,33343,33349,33365,33410,33416,33422,33428,33439,33445,33451,33457,33475,33489,33498,33507,33516,33525,33531,33537,33545,33550,33556,33567,33573,33593,33599,33605,33611,33628,33634,33640,33646,33652,33658,33685,33709,33715,33721,33727,33738,33749,33755,33772,33795,33818,33824,33829,33838,33848,33854,33859,33865,33878,33884,33895,33906,33925],{"__ignoreMap":32},[37,31887,31888,31890],{"class":39,"line":40},[37,31889,51],{"class":50},[37,31891,31892],{"class":54}," copy\n",[37,31894,31895,31897],{"class":39,"line":47},[37,31896,51],{"class":50},[37,31898,31899],{"class":54}," time\n",[37,31901,31902],{"class":39,"line":58},[37,31903,2472],{"emptyLinePlaceholder":131},[37,31905,31906,31908,31911,31913],{"class":39,"line":64},[37,31907,51],{"class":50},[37,31909,31910],{"class":54}," pandas ",[37,31912,31453],{"class":50},[37,31914,31915],{"class":54}," pd\n",[37,31917,31918,31920],{"class":39,"line":76},[37,31919,51],{"class":50},[37,31921,30465],{"class":54},[37,31923,31924,31926,31928,31930],{"class":39,"line":92},[37,31925,30807],{"class":50},[37,31927,31485],{"class":54},[37,31929,51],{"class":50},[37,31931,31932],{"class":54}," Dataset\n",[37,31934,31935,31937,31939,31941],{"class":39,"line":97},[37,31936,30807],{"class":50},[37,31938,31438],{"class":54},[37,31940,51],{"class":50},[37,31942,31443],{"class":54},[37,31944,31945,31947,31949,31951],{"class":39,"line":107},[37,31946,30807],{"class":50},[37,31948,31468],{"class":54},[37,31950,51],{"class":50},[37,31952,31473],{"class":54},[37,31954,31955,31957,31959,31961],{"class":39,"line":1390},[37,31956,51],{"class":50},[37,31958,31485],{"class":54},[37,31960,31453],{"class":50},[37,31962,31490],{"class":54},[37,31964,31965,31967,31969,31971],{"class":39,"line":1402},[37,31966,51],{"class":50},[37,31968,31502],{"class":54},[37,31970,31453],{"class":50},[37,31972,31507],{"class":54},[37,31974,31975],{"class":39,"line":1684},[37,31976,31977],{"class":43},"# 导入模型\n",[37,31979,31980,31982,31985,31987],{"class":39,"line":1689},[37,31981,30807],{"class":50},[37,31983,31984],{"class":54}," model ",[37,31986,51],{"class":50},[37,31988,31989],{"class":54}," LeNet\n",[37,31991,31992,31994,31996,31998],{"class":39,"line":1695},[37,31993,30807],{"class":50},[37,31995,30810],{"class":54},[37,31997,51],{"class":50},[37,31999,30815],{"class":54},[37,32001,32002],{"class":39,"line":1700},[37,32003,2472],{"emptyLinePlaceholder":131},[37,32005,32006],{"class":39,"line":1714},[37,32007,2472],{"emptyLinePlaceholder":131},[37,32009,32010],{"class":39,"line":1719},[37,32011,32012],{"class":43},"# 处理训练集与验证集函数--->划分数据集\n",[37,32014,32015,32018,32021],{"class":39,"line":1725},[37,32016,32017],{"class":50},"def",[37,32019,32020],{"class":2035}," train_val_data_process",[37,32022,32023],{"class":54},"():\n",[37,32025,32026,32029,32031,32033,32035],{"class":39,"line":1746},[37,32027,32028],{"class":54},"    train_data",[37,32030,70],{"class":50},[37,32032,31525],{"class":54},[37,32034,31533],{"class":309},[37,32036,31536],{"class":54},[37,32038,32039,32042,32044,32046],{"class":39,"line":1751},[37,32040,32041],{"class":5288},"                            train",[37,32043,70],{"class":50},[37,32045,31546],{"class":82},[37,32047,31536],{"class":54},[37,32049,32050,32053,32055,32057,32059,32061,32063],{"class":39,"line":1765},[37,32051,32052],{"class":5288},"                            transform",[37,32054,70],{"class":50},[37,32056,31563],{"class":54},[37,32058,31566],{"class":5288},[37,32060,70],{"class":50},[37,32062,1104],{"class":82},[37,32064,31574],{"class":54},[37,32066,32067,32070,32072,32074],{"class":39,"line":1770},[37,32068,32069],{"class":5288},"                            download",[37,32071,70],{"class":50},[37,32073,31546],{"class":82},[37,32075,214],{"class":54},[37,32077,32078,32081,32083,32086,32089,32091,32094,32096,32098,32101,32103,32105,32108,32110,32112],{"class":39,"line":1799},[37,32079,32080],{"class":54},"    train_data,val_data",[37,32082,70],{"class":50},[37,32084,32085],{"class":54},"Data.random_split(train_data,[",[37,32087,32088],{"class":82},"round",[37,32090,208],{"class":54},[37,32092,32093],{"class":82},"0.8",[37,32095,659],{"class":50},[37,32097,7430],{"class":82},[37,32099,32100],{"class":54},"(train_data)),",[37,32102,32088],{"class":82},[37,32104,208],{"class":54},[37,32106,32107],{"class":82},"0.2",[37,32109,659],{"class":50},[37,32111,7430],{"class":82},[37,32113,32114],{"class":54},"(train_data))])\n",[37,32116,32117,32120,32122,32125,32127,32129],{"class":39,"line":1804},[37,32118,32119],{"class":54},"    train_dataloader ",[37,32121,70],{"class":50},[37,32123,32124],{"class":54}," Data.DataLoader(",[37,32126,31607],{"class":5288},[37,32128,70],{"class":50},[37,32130,31612],{"class":54},[37,32132,32133,32136,32138,32141],{"class":39,"line":1821},[37,32134,32135],{"class":5288},"                                       batch_size",[37,32137,70],{"class":50},[37,32139,32140],{"class":82},"128",[37,32142,31536],{"class":54},[37,32144,32145,32148,32150,32152],{"class":39,"line":1826},[37,32146,32147],{"class":5288},"                                       shuffle",[37,32149,70],{"class":50},[37,32151,31546],{"class":82},[37,32153,31536],{"class":54},[37,32155,32156],{"class":39,"line":1831},[37,32157,32158],{"class":43},"                                       # 规定8个进程\n",[37,32160,32161,32164,32166,32168],{"class":39,"line":1836},[37,32162,32163],{"class":5288},"                                       num_workers",[37,32165,70],{"class":50},[37,32167,600],{"class":82},[37,32169,214],{"class":54},[37,32171,32172,32175,32177,32179,32181,32183],{"class":39,"line":1850},[37,32173,32174],{"class":54},"    val_dataloader",[37,32176,70],{"class":50},[37,32178,31604],{"class":54},[37,32180,31607],{"class":5288},[37,32182,70],{"class":50},[37,32184,32185],{"class":54},"val_data,\n",[37,32187,32188,32191,32193,32195],{"class":39,"line":1855},[37,32189,32190],{"class":5288},"                                   batch_size",[37,32192,70],{"class":50},[37,32194,32140],{"class":82},[37,32196,31536],{"class":54},[37,32198,32199,32202,32204,32206],{"class":39,"line":2649},[37,32200,32201],{"class":5288},"                                   shuffle",[37,32203,70],{"class":50},[37,32205,31546],{"class":82},[37,32207,31536],{"class":54},[37,32209,32210,32213,32215,32217],{"class":39,"line":2663},[37,32211,32212],{"class":5288},"                                   num_workers",[37,32214,70],{"class":50},[37,32216,600],{"class":82},[37,32218,214],{"class":54},[37,32220,32221,32223],{"class":39,"line":2671},[37,32222,4162],{"class":50},[37,32224,32225],{"class":54}," train_dataloader,val_dataloader\n",[37,32227,32228],{"class":39,"line":2676},[37,32229,2472],{"emptyLinePlaceholder":131},[37,32231,32232],{"class":39,"line":2682},[37,32233,32234],{"class":43},"# 验证是否出错\n",[37,32236,32237],{"class":39,"line":2688},[37,32238,32239],{"class":43},"# train_val_data_process()\n",[37,32241,32242],{"class":39,"line":2693},[37,32243,2472],{"emptyLinePlaceholder":131},[37,32245,32246],{"class":39,"line":8020},[37,32247,32248],{"class":43},"# 定义模型训练函数\n",[37,32250,32251,32253,32256],{"class":39,"line":8044},[37,32252,32017],{"class":50},[37,32254,32255],{"class":2035}," train_model_process",[37,32257,32258],{"class":54},"(model,train_dataloader,val_dataloader,num_epochs):\n",[37,32260,32261,32263,32265,32267,32269,32271,32273,32275,32278],{"class":39,"line":8049},[37,32262,31307],{"class":54},[37,32264,70],{"class":50},[37,32266,30521],{"class":54},[37,32268,31314],{"class":309},[37,32270,1776],{"class":50},[37,32272,31319],{"class":54},[37,32274,1773],{"class":50},[37,32276,32277],{"class":309}," 'cpu'",[37,32279,214],{"class":54},[37,32281,32282],{"class":39,"line":8055},[37,32283,2472],{"emptyLinePlaceholder":131},[37,32285,32286],{"class":39,"line":8082},[37,32287,2472],{"emptyLinePlaceholder":131},[37,32289,32290],{"class":39,"line":8087},[37,32291,32292],{"class":43},"    # 定义优化器\n",[37,32294,32295],{"class":39,"line":8093},[37,32296,32297],{"class":43},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[37,32299,32300],{"class":39,"line":8105},[37,32301,32302],{"class":43},"    # lr为学习率\n",[37,32304,32305,32308,32310,32313,32316,32318,32321],{"class":39,"line":8117},[37,32306,32307],{"class":54},"    optimizer",[37,32309,70],{"class":50},[37,32311,32312],{"class":54},"torch.optim.Adam(model.parameters(),",[37,32314,32315],{"class":5288},"lr",[37,32317,70],{"class":50},[37,32319,32320],{"class":82},"0.001",[37,32322,214],{"class":54},[37,32324,32325],{"class":39,"line":8129},[37,32326,2472],{"emptyLinePlaceholder":131},[37,32328,32329],{"class":39,"line":9788},[37,32330,32331],{"class":43},"    # 定义损失函数使用交叉熵损失函数\n",[37,32333,32334,32337,32339],{"class":39,"line":9813},[37,32335,32336],{"class":54},"    criterion",[37,32338,70],{"class":50},[37,32340,32341],{"class":54},"nn.CrossEntropyLoss()\n",[37,32343,32344],{"class":39,"line":9836},[37,32345,2472],{"emptyLinePlaceholder":131},[37,32347,32348],{"class":39,"line":9860},[37,32349,32350],{"class":43},"    # 将模型放到GPU中进行训练\n",[37,32352,32353,32355,32357],{"class":39,"line":9865},[37,32354,31359],{"class":54},[37,32356,70],{"class":50},[37,32358,32359],{"class":54},"model.to(device)\n",[37,32361,32362],{"class":39,"line":9870},[37,32363,32364],{"class":43},"    # 复制当前模型的参数\n",[37,32366,32367],{"class":39,"line":9875},[37,32368,32369],{"class":43},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[37,32371,32372],{"class":39,"line":9884},[37,32373,32374],{"class":43},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[37,32376,32377,32380,32382],{"class":39,"line":9889},[37,32378,32379],{"class":54},"    best_model_wts",[37,32381,70],{"class":50},[37,32383,32384],{"class":54},"copy.deepcopy(model.state_dict())\n",[37,32386,32387],{"class":39,"line":9895},[37,32388,2472],{"emptyLinePlaceholder":131},[37,32390,32391],{"class":39,"line":9916},[37,32392,2472],{"emptyLinePlaceholder":131},[37,32394,32395],{"class":39,"line":9922},[37,32396,32397],{"class":43},"    # 初始化参数\n",[37,32399,32400],{"class":39,"line":9936},[37,32401,32402],{"class":43},"    # 最高准确度\n",[37,32404,32405,32408,32410],{"class":39,"line":9942},[37,32406,32407],{"class":54},"    best_acc",[37,32409,70],{"class":50},[37,32411,32412],{"class":82},"0.0\n",[37,32414,32415],{"class":39,"line":9969},[37,32416,32417],{"class":43},"    # 训练集损失列表\n",[37,32419,32420,32423,32425],{"class":39,"line":9978},[37,32421,32422],{"class":54},"    train_loss_all",[37,32424,70],{"class":50},[37,32426,32427],{"class":54},"[]\n",[37,32429,32430],{"class":39,"line":9984},[37,32431,32432],{"class":43},"    # 验证集函数列表\n",[37,32434,32435,32438,32440],{"class":39,"line":9992},[37,32436,32437],{"class":54},"    val_loss_all",[37,32439,70],{"class":50},[37,32441,32427],{"class":54},[37,32443,32444],{"class":39,"line":9997},[37,32445,32446],{"class":43},"    # 训练集准确度列表\n",[37,32448,32449,32452,32454],{"class":39,"line":16676},[37,32450,32451],{"class":54},"    train_acc_all",[37,32453,70],{"class":50},[37,32455,32427],{"class":54},[37,32457,32458],{"class":39,"line":16682},[37,32459,32460],{"class":43},"    # 验证集准确度列表\n",[37,32462,32463,32466,32468],{"class":39,"line":16705},[37,32464,32465],{"class":54},"    val_acc_all",[37,32467,70],{"class":50},[37,32469,32427],{"class":54},[37,32471,32472],{"class":39,"line":16711},[37,32473,2472],{"emptyLinePlaceholder":131},[37,32475,32476],{"class":39,"line":16734},[37,32477,32478],{"class":43},"    # 保存当前时间--->方便看每轮训练的时间\n",[37,32480,32481,32484,32486],{"class":39,"line":16748},[37,32482,32483],{"class":54},"    since",[37,32485,70],{"class":50},[37,32487,73],{"class":54},[37,32489,32490],{"class":39,"line":16768},[37,32491,2472],{"emptyLinePlaceholder":131},[37,32493,32494],{"class":39,"line":16774},[37,32495,2472],{"emptyLinePlaceholder":131},[37,32497,32498],{"class":39,"line":16785},[37,32499,32500],{"class":43},"    # 准备工作完成--->开始训练模型\n",[37,32502,32503,32505,32508,32510,32513],{"class":39,"line":16808},[37,32504,3273],{"class":50},[37,32506,32507],{"class":54}," epoch ",[37,32509,26116],{"class":50},[37,32511,32512],{"class":82}," range",[37,32514,32515],{"class":54},"(num_epochs):\n",[37,32517,32518,32521,32523,32526,32529,32531,32533,32535,32538,32540,32542],{"class":39,"line":16830},[37,32519,32520],{"class":82},"        print",[37,32522,208],{"class":54},[37,32524,32525],{"class":309},"\"Epoch ",[37,32527,32528],{"class":82},"{}",[37,32530,787],{"class":309},[37,32532,32528],{"class":82},[37,32534,456],{"class":309},[37,32536,32537],{"class":54},".format(epoch,num_epochs",[37,32539,112],{"class":50},[37,32541,422],{"class":82},[37,32543,30567],{"class":54},[37,32545,32546,32548,32550,32553,32555,32557],{"class":39,"line":16835},[37,32547,32520],{"class":82},[37,32549,208],{"class":54},[37,32551,32552],{"class":309},"\"-\"",[37,32554,659],{"class":50},[37,32556,650],{"class":82},[37,32558,214],{"class":54},[37,32560,32561],{"class":39,"line":16841},[37,32562,2472],{"emptyLinePlaceholder":131},[37,32564,32565],{"class":39,"line":16855},[37,32566,32567],{"class":43},"        # 初始化参数\n",[37,32569,32570],{"class":39,"line":16868},[37,32571,32572],{"class":43},"        # 训练集损失函数\n",[37,32574,32575,32578,32580],{"class":39,"line":16873},[37,32576,32577],{"class":54},"        train_loss",[37,32579,70],{"class":50},[37,32581,32412],{"class":82},[37,32583,32584],{"class":39,"line":16887},[37,32585,32586],{"class":43},"        # 训练集准确度\n",[37,32588,32589,32592,32594],{"class":39,"line":16892},[37,32590,32591],{"class":54},"        train_corrects",[37,32593,70],{"class":50},[37,32595,3157],{"class":82},[37,32597,32598],{"class":39,"line":16898},[37,32599,32600],{"class":43},"        # 验证集损失函数\n",[37,32602,32603,32606,32608],{"class":39,"line":16903},[37,32604,32605],{"class":54},"        val_loss",[37,32607,70],{"class":50},[37,32609,32412],{"class":82},[37,32611,32612],{"class":39,"line":16917},[37,32613,32614],{"class":43},"        # 验证集准确度\n",[37,32616,32617,32620,32622],{"class":39,"line":16922},[37,32618,32619],{"class":54},"        val_corrects",[37,32621,70],{"class":50},[37,32623,3157],{"class":82},[37,32625,32626],{"class":39,"line":16927},[37,32627,32628],{"class":43},"        # 训练集样本数量\n",[37,32630,32631,32634,32636],{"class":39,"line":16941},[37,32632,32633],{"class":54},"        train_num",[37,32635,70],{"class":50},[37,32637,3157],{"class":82},[37,32639,32640],{"class":39,"line":16953},[37,32641,32642],{"class":43},"        # 验证集样本数量\n",[37,32644,32645,32648,32650],{"class":39,"line":16958},[37,32646,32647],{"class":54},"        val_num",[37,32649,70],{"class":50},[37,32651,3157],{"class":82},[37,32653,32654],{"class":39,"line":16971},[37,32655,32656],{"class":43},"        # 将数据放到设备,并开始训练\n",[37,32658,32659,32661,32663,32665,32667],{"class":39,"line":16976},[37,32660,3475],{"class":50},[37,32662,31671],{"class":54},[37,32664,26116],{"class":50},[37,32666,31676],{"class":82},[37,32668,32669],{"class":54},"(train_dataloader):\n",[37,32671,32672],{"class":39,"line":16981},[37,32673,32674],{"class":43},"            # 将特征放入到训练设备\n",[37,32676,32677,32680,32682],{"class":39,"line":16986},[37,32678,32679],{"class":54},"            b_x",[37,32681,70],{"class":50},[37,32683,32684],{"class":54},"b_x.to(device)\n",[37,32686,32687],{"class":39,"line":16999},[37,32688,32689],{"class":43},"            # 将标签放入到训练设备当中\n",[37,32691,32692,32695,32697],{"class":39,"line":17004},[37,32693,32694],{"class":54},"            b_y",[37,32696,70],{"class":50},[37,32698,32699],{"class":54},"b_y.to(device)\n",[37,32701,32703],{"class":39,"line":32702},98,[37,32704,32705],{"class":43},"            # 设置模型为训练模式\n",[37,32707,32709],{"class":39,"line":32708},99,[37,32710,32711],{"class":54},"            model.train()\n",[37,32713,32715],{"class":39,"line":32714},100,[37,32716,32717],{"class":43},"            # 将数据放到模型当中,开始前向传播\n",[37,32719,32721],{"class":39,"line":32720},101,[37,32722,32723],{"class":43},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[37,32725,32727,32730,32732],{"class":39,"line":32726},102,[37,32728,32729],{"class":54},"            output",[37,32731,70],{"class":50},[37,32733,32734],{"class":54},"model(b_x)\n",[37,32736,32738],{"class":39,"line":32737},103,[37,32739,32740],{"class":43},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[37,32742,32744,32747,32749,32752,32755,32757,32759],{"class":39,"line":32743},104,[37,32745,32746],{"class":54},"            pre_lab",[37,32748,70],{"class":50},[37,32750,32751],{"class":54},"torch.argmax(output,",[37,32753,32754],{"class":5288},"dim",[37,32756,70],{"class":50},[37,32758,422],{"class":82},[37,32760,214],{"class":54},[37,32762,32764],{"class":39,"line":32763},105,[37,32765,32766],{"class":43},"            # 计算每一个batch的损失函数\n",[37,32768,32770,32773,32775],{"class":39,"line":32769},106,[37,32771,32772],{"class":54},"            loss",[37,32774,70],{"class":50},[37,32776,32777],{"class":54},"criterion(output,b_y)\n",[37,32779,32781],{"class":39,"line":32780},107,[37,32782,32783],{"class":43},"            # 将梯度初始化为0\n",[37,32785,32787],{"class":39,"line":32786},108,[37,32788,32789],{"class":54},"            optimizer.zero_grad()\n",[37,32791,32793],{"class":39,"line":32792},109,[37,32794,32795],{"class":43},"            # 梯度置为0后再进行反向传播\n",[37,32797,32799],{"class":39,"line":32798},110,[37,32800,32801],{"class":54},"            loss.backward()\n",[37,32803,32805],{"class":39,"line":32804},111,[37,32806,32807],{"class":43},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[37,32809,32811],{"class":39,"line":32810},112,[37,32812,32813],{"class":54},"            optimizer.step()\n",[37,32815,32817],{"class":39,"line":32816},113,[37,32818,32819],{"class":43},"            # loss.item()指的是batch的平均损失\n",[37,32821,32823,32826,32828,32831,32833,32836,32838],{"class":39,"line":32822},114,[37,32824,32825],{"class":54},"            train_loss",[37,32827,9549],{"class":50},[37,32829,32830],{"class":54},"loss.item()",[37,32832,659],{"class":50},[37,32834,32835],{"class":54},"b_x.size(",[37,32837,396],{"class":82},[37,32839,214],{"class":54},[37,32841,32843],{"class":39,"line":32842},115,[37,32844,32845],{"class":43},"            # 计算每个批次中正确预测的数量\n",[37,32847,32849,32852,32854,32857,32859],{"class":39,"line":32848},116,[37,32850,32851],{"class":54},"            train_corrects",[37,32853,9549],{"class":50},[37,32855,32856],{"class":54},"torch.sum(pre_lab",[37,32858,3021],{"class":50},[37,32860,32861],{"class":54},"b_y.data)\n",[37,32863,32865],{"class":39,"line":32864},117,[37,32866,32867],{"class":43},"            # 计算目前为止一共处理了多少样本\n",[37,32869,32871,32874,32876,32878,32880],{"class":39,"line":32870},118,[37,32872,32873],{"class":54},"            train_num",[37,32875,9549],{"class":50},[37,32877,32835],{"class":54},[37,32879,396],{"class":82},[37,32881,214],{"class":54},[37,32883,32885],{"class":39,"line":32884},119,[37,32886,32887],{"class":43},"        # 验证数据\n",[37,32889,32891,32893,32896,32898,32900],{"class":39,"line":32890},120,[37,32892,3475],{"class":50},[37,32894,32895],{"class":54}," step ,(b_x,b_y) ",[37,32897,26116],{"class":50},[37,32899,31676],{"class":82},[37,32901,32902],{"class":54},"(val_dataloader):\n",[37,32904,32906],{"class":39,"line":32905},121,[37,32907,32908],{"class":43},"            # 将特征放到验证设备当中\n",[37,32910,32912,32914,32916],{"class":39,"line":32911},122,[37,32913,32679],{"class":54},[37,32915,70],{"class":50},[37,32917,32684],{"class":54},[37,32919,32921],{"class":39,"line":32920},123,[37,32922,32923],{"class":43},"            # 将标签放到放到训练设备当中\n",[37,32925,32927,32929,32931],{"class":39,"line":32926},124,[37,32928,32694],{"class":54},[37,32930,70],{"class":50},[37,32932,32699],{"class":54},[37,32934,32936],{"class":39,"line":32935},125,[37,32937,32938],{"class":43},"            # 开启验证模式，设置模型为评估模式\n",[37,32940,32942],{"class":39,"line":32941},126,[37,32943,32944],{"class":54},"            model.eval()\n",[37,32946,32948,32951],{"class":39,"line":32947},127,[37,32949,32950],{"class":50},"            with",[37,32952,32953],{"class":54}," torch.no_grad():\n",[37,32955,32957],{"class":39,"line":32956},128,[37,32958,32959],{"class":43},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[37,32961,32963,32966,32968],{"class":39,"line":32962},129,[37,32964,32965],{"class":54},"                output ",[37,32967,70],{"class":50},[37,32969,32970],{"class":54}," model(b_x)\n",[37,32972,32974],{"class":39,"line":32973},130,[37,32975,32976],{"class":43},"                # 查找每一行中最大值对应的下标\n",[37,32978,32980,32983,32985,32988,32990,32992,32994],{"class":39,"line":32979},131,[37,32981,32982],{"class":54},"                pre_lab ",[37,32984,70],{"class":50},[37,32986,32987],{"class":54}," torch.argmax(output, ",[37,32989,32754],{"class":5288},[37,32991,70],{"class":50},[37,32993,422],{"class":82},[37,32995,214],{"class":54},[37,32997,32999],{"class":39,"line":32998},132,[37,33000,33001],{"class":43},"                # 计算验证集上的当前 batch 损失\n",[37,33003,33005,33008,33010],{"class":39,"line":33004},133,[37,33006,33007],{"class":54},"                val_batch_loss ",[37,33009,70],{"class":50},[37,33011,33012],{"class":54}," criterion(output, b_y)\n",[37,33014,33016],{"class":39,"line":33015},134,[37,33017,33018],{"class":43},"                # 对损失函数进行累加（按样本数加权）\n",[37,33020,33022,33025,33027,33030,33032,33035,33037],{"class":39,"line":33021},135,[37,33023,33024],{"class":54},"                val_loss ",[37,33026,9549],{"class":50},[37,33028,33029],{"class":54}," val_batch_loss.item() ",[37,33031,659],{"class":50},[37,33033,33034],{"class":54}," b_x.size(",[37,33036,396],{"class":82},[37,33038,214],{"class":54},[37,33040,33042,33045,33047,33050,33052],{"class":39,"line":33041},136,[37,33043,33044],{"class":54},"                val_corrects ",[37,33046,9549],{"class":50},[37,33048,33049],{"class":54}," torch.sum(pre_lab ",[37,33051,3021],{"class":50},[37,33053,33054],{"class":54}," b_y.data)\n",[37,33056,33058],{"class":39,"line":33057},137,[37,33059,33060],{"class":43},"                # 当前用于验证的样本数量\n",[37,33062,33064,33067,33069,33071,33073],{"class":39,"line":33063},138,[37,33065,33066],{"class":54},"            val_num ",[37,33068,9549],{"class":50},[37,33070,33034],{"class":54},[37,33072,396],{"class":82},[37,33074,214],{"class":54},[37,33076,33078],{"class":39,"line":33077},139,[37,33079,33080],{"class":43},"        # 计算并保存每一次迭代的loss值和准确率\n",[37,33082,33084],{"class":39,"line":33083},140,[37,33085,33086],{"class":43},"        # 计算并保存训练集的loss值\n",[37,33088,33090,33093,33095],{"class":39,"line":33089},141,[37,33091,33092],{"class":54},"        train_loss_all.append(train_loss",[37,33094,787],{"class":50},[37,33096,33097],{"class":54},"train_num)\n",[37,33099,33101],{"class":39,"line":33100},142,[37,33102,33103],{"class":43},"        # 取双精度\n",[37,33105,33107],{"class":39,"line":33106},143,[37,33108,33109],{"class":43},"        # 计算并保存训练集的准确率\n",[37,33111,33113,33116,33118],{"class":39,"line":33112},144,[37,33114,33115],{"class":54},"        train_acc_all.append(train_corrects.double().item()",[37,33117,787],{"class":50},[37,33119,33097],{"class":54},[37,33121,33123],{"class":39,"line":33122},145,[37,33124,33125],{"class":43},"        # 计算并保存验证集的loss值\n",[37,33127,33129,33132,33134],{"class":39,"line":33128},146,[37,33130,33131],{"class":54},"        val_loss_all.append(val_loss",[37,33133,787],{"class":50},[37,33135,33136],{"class":54},"val_num)\n",[37,33138,33140],{"class":39,"line":33139},147,[37,33141,33142],{"class":43},"        # 计算并保存验证集的准确率\n",[37,33144,33146,33149,33151],{"class":39,"line":33145},148,[37,33147,33148],{"class":54},"        val_acc_all.append(val_corrects.double().item()",[37,33150,787],{"class":50},[37,33152,33136],{"class":54},[37,33154,33156],{"class":39,"line":33155},149,[37,33157,2472],{"emptyLinePlaceholder":131},[37,33159,33161],{"class":39,"line":33160},150,[37,33162,33163],{"class":43},"        # 打印训练一轮的loss值和准确率\n",[37,33165,33167,33169,33171,33173,33175,33178,33180,33183,33185,33188,33190,33192,33194,33196,33199,33201,33203,33206,33208,33210],{"class":39,"line":33166},151,[37,33168,32520],{"class":82},[37,33170,208],{"class":54},[37,33172,3664],{"class":309},[37,33174,32528],{"class":82},[37,33176,33177],{"class":309},"train loss:",[37,33179,1099],{"class":82},[37,33181,33182],{"class":50},":.4f",[37,33184,1149],{"class":82},[37,33186,33187],{"class":309}," train acc:",[37,33189,1099],{"class":82},[37,33191,33182],{"class":50},[37,33193,1149],{"class":82},[37,33195,3664],{"class":309},[37,33197,33198],{"class":54},".format(epoch,train_loss_all[",[37,33200,112],{"class":50},[37,33202,422],{"class":82},[37,33204,33205],{"class":54},"],train_acc_all[",[37,33207,112],{"class":50},[37,33209,422],{"class":82},[37,33211,33212],{"class":54},"]))\n",[37,33214,33216,33218,33220,33222,33224,33227,33229,33231,33233,33236,33238,33240,33242,33244,33247,33249,33251,33254,33256,33258],{"class":39,"line":33215},152,[37,33217,32520],{"class":82},[37,33219,208],{"class":54},[37,33221,3664],{"class":309},[37,33223,32528],{"class":82},[37,33225,33226],{"class":309},"val loss:",[37,33228,1099],{"class":82},[37,33230,33182],{"class":50},[37,33232,1149],{"class":82},[37,33234,33235],{"class":309}," val acc:",[37,33237,1099],{"class":82},[37,33239,33182],{"class":50},[37,33241,1149],{"class":82},[37,33243,3664],{"class":309},[37,33245,33246],{"class":54},".format(epoch,val_loss_all[",[37,33248,112],{"class":50},[37,33250,422],{"class":82},[37,33252,33253],{"class":54},"],val_acc_all[",[37,33255,112],{"class":50},[37,33257,422],{"class":82},[37,33259,33212],{"class":54},[37,33261,33263],{"class":39,"line":33262},153,[37,33264,2472],{"emptyLinePlaceholder":131},[37,33266,33268],{"class":39,"line":33267},154,[37,33269,33270],{"class":43},"        # 判断准确度--->保存最优模型\n",[37,33272,33274,33276,33279,33281,33283,33285,33287],{"class":39,"line":33273},155,[37,33275,2569],{"class":50},[37,33277,33278],{"class":54}," val_acc_all[",[37,33280,112],{"class":50},[37,33282,422],{"class":82},[37,33284,1143],{"class":54},[37,33286,1163],{"class":50},[37,33288,33289],{"class":54},"best_acc:\n",[37,33291,33293],{"class":39,"line":33292},156,[37,33294,33295],{"class":43},"            # 保存当前模型准确度\n",[37,33297,33299,33302,33304,33306,33309,33311,33313],{"class":39,"line":33298},157,[37,33300,33301],{"class":54},"            best_acc:",[37,33303,247],{"class":82},[37,33305,70],{"class":50},[37,33307,33308],{"class":54},"val_acc_all[",[37,33310,112],{"class":50},[37,33312,422],{"class":82},[37,33314,33315],{"class":54},"]\n",[37,33317,33319],{"class":39,"line":33318},158,[37,33320,33321],{"class":43},"            # 保存当前的准确度\n",[37,33323,33325],{"class":39,"line":33324},159,[37,33326,33327],{"class":43},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[37,33329,33331,33334,33336],{"class":39,"line":33330},160,[37,33332,33333],{"class":54},"            best_model_wts",[37,33335,70],{"class":50},[37,33337,32384],{"class":54},[37,33339,33341],{"class":39,"line":33340},161,[37,33342,2472],{"emptyLinePlaceholder":131},[37,33344,33346],{"class":39,"line":33345},162,[37,33347,33348],{"class":43},"        # 计算耗时\n",[37,33350,33352,33355,33357,33360,33362],{"class":39,"line":33351},163,[37,33353,33354],{"class":54},"        time_use",[37,33356,70],{"class":50},[37,33358,33359],{"class":54},"time.time()",[37,33361,112],{"class":50},[37,33363,33364],{"class":54},"since\n",[37,33366,33368,33370,33372,33375,33377,33380,33382,33384,33386,33388,33390,33393,33396,33399,33401,33404,33406,33408],{"class":39,"line":33367},164,[37,33369,32520],{"class":82},[37,33371,208],{"class":54},[37,33373,33374],{"class":309},"'训练和验证耗费的时间",[37,33376,1099],{"class":82},[37,33378,33379],{"class":50},":.0f",[37,33381,1149],{"class":82},[37,33383,747],{"class":309},[37,33385,1099],{"class":82},[37,33387,33379],{"class":50},[37,33389,1149],{"class":82},[37,33391,33392],{"class":309},"s'",[37,33394,33395],{"class":54},".format(time_use",[37,33397,33398],{"class":50},"\u002F\u002F",[37,33400,1110],{"class":82},[37,33402,33403],{"class":54},",time_use",[37,33405,533],{"class":50},[37,33407,1110],{"class":82},[37,33409,30567],{"class":54},[37,33411,33413],{"class":39,"line":33412},165,[37,33414,33415],{"class":43},"    # 选择最优参数\n",[37,33417,33419],{"class":39,"line":33418},166,[37,33420,33421],{"class":43},"    # 加载最高准确率下的模型参数\n",[37,33423,33425],{"class":39,"line":33424},167,[37,33426,33427],{"class":43},"    # model.load_state_dict(best_model_wts)\n",[37,33429,33431,33434,33437],{"class":39,"line":33430},168,[37,33432,33433],{"class":54},"    torch.save(model.state_dict(best_model_wts), ",[37,33435,33436],{"class":309},"'.\u002Fbest_model.pth'",[37,33438,214],{"class":54},[37,33440,33442],{"class":39,"line":33441},169,[37,33443,33444],{"class":43},"    # 或者写成\n",[37,33446,33448],{"class":39,"line":33447},170,[37,33449,33450],{"class":43},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[37,33452,33454],{"class":39,"line":33453},171,[37,33455,33456],{"class":43},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[37,33458,33460,33463,33465,33468,33471,33473],{"class":39,"line":33459},172,[37,33461,33462],{"class":54},"    train_process",[37,33464,70],{"class":50},[37,33466,33467],{"class":54},"pd.DataFrame(",[37,33469,33470],{"class":5288},"data",[37,33472,70],{"class":50},[37,33474,1618],{"class":54},[37,33476,33478,33481,33483,33486],{"class":39,"line":33477},173,[37,33479,33480],{"class":309},"        \"epoch\"",[37,33482,1062],{"class":54},[37,33484,33485],{"class":82},"range",[37,33487,33488],{"class":54},"(num_epochs),\n",[37,33490,33492,33495],{"class":39,"line":33491},174,[37,33493,33494],{"class":309},"        \"train_loss_all\"",[37,33496,33497],{"class":54},":train_loss_all,\n",[37,33499,33501,33504],{"class":39,"line":33500},175,[37,33502,33503],{"class":309},"        \"val_loss_all\"",[37,33505,33506],{"class":54},":val_loss_all,\n",[37,33508,33510,33513],{"class":39,"line":33509},176,[37,33511,33512],{"class":309},"        \"train_acc_all\"",[37,33514,33515],{"class":54},":train_acc_all,\n",[37,33517,33519,33522],{"class":39,"line":33518},177,[37,33520,33521],{"class":309},"        \"val_acc_all\"",[37,33523,33524],{"class":54},":val_acc_all\n",[37,33526,33528],{"class":39,"line":33527},178,[37,33529,33530],{"class":54},"    })\n",[37,33532,33534],{"class":39,"line":33533},179,[37,33535,33536],{"class":43},"    # 返回训练保存的过程\n",[37,33538,33540,33542],{"class":39,"line":33539},180,[37,33541,4162],{"class":50},[37,33543,33544],{"class":54}," train_process\n",[37,33546,33548],{"class":39,"line":33547},181,[37,33549,2472],{"emptyLinePlaceholder":131},[37,33551,33553],{"class":39,"line":33552},182,[37,33554,33555],{"class":43},"# 将loss值和精度按照图片的形式展示出来\n",[37,33557,33559,33561,33564],{"class":39,"line":33558},183,[37,33560,32017],{"class":50},[37,33562,33563],{"class":2035}," matplot_acc_loss",[37,33565,33566],{"class":54},"(train_process):\n",[37,33568,33570],{"class":39,"line":33569},184,[37,33571,33572],{"class":43},"    # 设置图的大小\n",[37,33574,33576,33579,33581,33583,33585,33587,33589,33591],{"class":39,"line":33575},185,[37,33577,33578],{"class":54},"    plt.figure(",[37,33580,31763],{"class":5288},[37,33582,70],{"class":50},[37,33584,208],{"class":54},[37,33586,702],{"class":82},[37,33588,583],{"class":54},[37,33590,498],{"class":82},[37,33592,30567],{"class":54},[37,33594,33596],{"class":39,"line":33595},186,[37,33597,33598],{"class":43},"    # 设置图中有几张图\n",[37,33600,33602],{"class":39,"line":33601},187,[37,33603,33604],{"class":43},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[37,33606,33608],{"class":39,"line":33607},188,[37,33609,33610],{"class":43},"    # ①loss图\n",[37,33612,33614,33616,33618,33620,33622,33624,33626],{"class":39,"line":33613},189,[37,33615,31797],{"class":54},[37,33617,422],{"class":82},[37,33619,583],{"class":54},[37,33621,282],{"class":82},[37,33623,583],{"class":54},[37,33625,422],{"class":82},[37,33627,214],{"class":54},[37,33629,33631],{"class":39,"line":33630},190,[37,33632,33633],{"class":43},"    # 补充:\n",[37,33635,33637],{"class":39,"line":33636},191,[37,33638,33639],{"class":43},"    # plt.subplot(nrows, ncols, index)\n",[37,33641,33643],{"class":39,"line":33642},192,[37,33644,33645],{"class":43},"    # nrows：行数\n",[37,33647,33649],{"class":39,"line":33648},193,[37,33650,33651],{"class":43},"    # ncols：列数\n",[37,33653,33655],{"class":39,"line":33654},194,[37,33656,33657],{"class":43},"    # index：目前选中第几个子图（从1开始）\n",[37,33659,33661,33664,33667,33670,33673,33675,33678,33680,33683],{"class":39,"line":33660},195,[37,33662,33663],{"class":54},"    plt.plot(train_process[",[37,33665,33666],{"class":309},"\"epoch\"",[37,33668,33669],{"class":54},"],train_process.train_loss_all,",[37,33671,33672],{"class":309},"'ro-'",[37,33674,583],{"class":54},[37,33676,33677],{"class":5288},"label",[37,33679,70],{"class":50},[37,33681,33682],{"class":309},"'train loss'",[37,33684,214],{"class":54},[37,33686,33688,33690,33692,33695,33698,33700,33702,33704,33707],{"class":39,"line":33687},196,[37,33689,33663],{"class":54},[37,33691,33666],{"class":309},[37,33693,33694],{"class":54},"],train_process.val_loss_all,",[37,33696,33697],{"class":309},"'bs--'",[37,33699,583],{"class":54},[37,33701,33677],{"class":5288},[37,33703,70],{"class":50},[37,33705,33706],{"class":309},"'val loss'",[37,33708,214],{"class":54},[37,33710,33712],{"class":39,"line":33711},197,[37,33713,33714],{"class":43},"    # 添加一个图例\n",[37,33716,33718],{"class":39,"line":33717},198,[37,33719,33720],{"class":54},"    plt.legend()\n",[37,33722,33724],{"class":39,"line":33723},199,[37,33725,33726],{"class":43},"    # 给轴添加标签\n",[37,33728,33730,33733,33736],{"class":39,"line":33729},200,[37,33731,33732],{"class":54},"    plt.xlabel(",[37,33734,33735],{"class":309},"'epoch'",[37,33737,214],{"class":54},[37,33739,33741,33744,33747],{"class":39,"line":33740},201,[37,33742,33743],{"class":54},"    plt.ylabel(",[37,33745,33746],{"class":309},"'loss'",[37,33748,214],{"class":54},[37,33750,33752],{"class":39,"line":33751},202,[37,33753,33754],{"class":43},"    # ②准确度图\n",[37,33756,33758,33760,33762,33764,33766,33768,33770],{"class":39,"line":33757},203,[37,33759,31797],{"class":54},[37,33761,422],{"class":82},[37,33763,583],{"class":54},[37,33765,282],{"class":82},[37,33767,583],{"class":54},[37,33769,282],{"class":82},[37,33771,214],{"class":54},[37,33773,33775,33777,33779,33782,33784,33786,33788,33790,33793],{"class":39,"line":33774},204,[37,33776,33663],{"class":54},[37,33778,33666],{"class":309},[37,33780,33781],{"class":54},"],train_process.train_acc_all,",[37,33783,33672],{"class":309},[37,33785,583],{"class":54},[37,33787,33677],{"class":5288},[37,33789,70],{"class":50},[37,33791,33792],{"class":309},"'train acc'",[37,33794,214],{"class":54},[37,33796,33798,33800,33802,33805,33807,33809,33811,33813,33816],{"class":39,"line":33797},205,[37,33799,33663],{"class":54},[37,33801,33666],{"class":309},[37,33803,33804],{"class":54},"],train_process.val_acc_all,",[37,33806,33697],{"class":309},[37,33808,583],{"class":54},[37,33810,33677],{"class":5288},[37,33812,70],{"class":50},[37,33814,33815],{"class":309},"'val acc'",[37,33817,214],{"class":54},[37,33819,33821],{"class":39,"line":33820},206,[37,33822,33823],{"class":43},"    # 添加图例\n",[37,33825,33827],{"class":39,"line":33826},207,[37,33828,33720],{"class":54},[37,33830,33832,33834,33836],{"class":39,"line":33831},208,[37,33833,33732],{"class":54},[37,33835,33666],{"class":309},[37,33837,214],{"class":54},[37,33839,33841,33843,33846],{"class":39,"line":33840},209,[37,33842,33743],{"class":54},[37,33844,33845],{"class":309},"\"acc\"",[37,33847,214],{"class":54},[37,33849,33851],{"class":39,"line":33850},210,[37,33852,33853],{"class":54},"    plt.show()\n",[37,33855,33857],{"class":39,"line":33856},211,[37,33858,2472],{"emptyLinePlaceholder":131},[37,33860,33862],{"class":39,"line":33861},212,[37,33863,33864],{"class":43},"# 正式开始训练:\n",[37,33866,33868,33870,33872,33874,33876],{"class":39,"line":33867},213,[37,33869,1603],{"class":50},[37,33871,31290],{"class":82},[37,33873,3021],{"class":50},[37,33875,31295],{"class":309},[37,33877,3811],{"class":54},[37,33879,33881],{"class":39,"line":33880},214,[37,33882,33883],{"class":43},"    # 将模型实例化\n",[37,33885,33887,33890,33892],{"class":39,"line":33886},215,[37,33888,33889],{"class":54},"    LeNet",[37,33891,70],{"class":50},[37,33893,33894],{"class":54},"LeNet()\n",[37,33896,33898,33901,33903],{"class":39,"line":33897},216,[37,33899,33900],{"class":54},"    train_dataloader,val_dataloader",[37,33902,70],{"class":50},[37,33904,33905],{"class":54},"train_val_data_process()\n",[37,33907,33909,33911,33913,33916,33919,33921,33923],{"class":39,"line":33908},217,[37,33910,33462],{"class":54},[37,33912,70],{"class":50},[37,33914,33915],{"class":54},"train_model_process(LeNet,train_dataloader,val_dataloader,",[37,33917,33918],{"class":5288},"num_epochs",[37,33920,70],{"class":50},[37,33922,903],{"class":82},[37,33924,214],{"class":54},[37,33926,33928],{"class":39,"line":33927},218,[37,33929,33930],{"class":54},"    matplot_acc_loss(train_process)\n",[14,33932,33933],{},"画图的补充点学习：",[14,33935,33936],{},[119,33937],{"alt":32,"src":33938},"\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",[158,33940,33941],{"start":58},[161,33942,33943],{},"测试",[27,33945,33947],{"className":29,"code":33946,"language":31,"meta":32,"style":32},"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",[34,33948,33949,33955,33965,33977,33987,33992,34002,34012,34016,34021,34030,34047,34059,34076,34087,34103,34108,34119,34130,34141,34148,34152,34157,34167,34172,34189,34197,34201,34206,34215,34224,34228,34233,34238,34243,34250,34255,34267,34277,34287,34292,34296,34301,34310,34315,34331,34336,34341,34346,34360,34365,34379,34383,34388,34403,34408,34420,34424,34429,34441,34446,34454,34459,34464,34474,34479,34488,34493,34498,34502,34507,34512,34528,34536,34541,34546,34605,34611,34616,34627,34635,34643,34647,34652,34656,34661,34669,34674,34690,34695,34705,34715],{"__ignoreMap":32},[37,33950,33951,33953],{"class":39,"line":40},[37,33952,51],{"class":50},[37,33954,30465],{"class":54},[37,33956,33957,33959,33961,33963],{"class":39,"line":47},[37,33958,51],{"class":50},[37,33960,31485],{"class":54},[37,33962,31453],{"class":50},[37,33964,31490],{"class":54},[37,33966,33967,33969,33972,33974],{"class":39,"line":58},[37,33968,30807],{"class":50},[37,33970,33971],{"class":54}," jupyter_client.consoleapp ",[37,33973,51],{"class":50},[37,33975,33976],{"class":54}," classes\n",[37,33978,33979,33981,33983,33985],{"class":39,"line":64},[37,33980,30807],{"class":50},[37,33982,31468],{"class":54},[37,33984,51],{"class":50},[37,33986,31473],{"class":54},[37,33988,33989],{"class":39,"line":76},[37,33990,33991],{"class":43},"# 导入数据集\n",[37,33993,33994,33996,33998,34000],{"class":39,"line":92},[37,33995,30807],{"class":50},[37,33997,31438],{"class":54},[37,33999,51],{"class":50},[37,34001,31443],{"class":54},[37,34003,34004,34006,34008,34010],{"class":39,"line":97},[37,34005,30807],{"class":50},[37,34007,31984],{"class":54},[37,34009,51],{"class":50},[37,34011,31989],{"class":54},[37,34013,34014],{"class":39,"line":107},[37,34015,2472],{"emptyLinePlaceholder":131},[37,34017,34018],{"class":39,"line":1390},[37,34019,34020],{"class":43},"# 测试数据处理\n",[37,34022,34023,34025,34028],{"class":39,"line":1402},[37,34024,32017],{"class":50},[37,34026,34027],{"class":2035}," test_data_process",[37,34029,32023],{"class":54},[37,34031,34032,34035,34037,34039,34041,34043,34045],{"class":39,"line":1684},[37,34033,34034],{"class":54},"    test_data",[37,34036,70],{"class":50},[37,34038,31525],{"class":54},[37,34040,31528],{"class":5288},[37,34042,70],{"class":50},[37,34044,31533],{"class":309},[37,34046,31536],{"class":54},[37,34048,34049,34052,34054,34057],{"class":39,"line":1689},[37,34050,34051],{"class":5288},"                           train",[37,34053,70],{"class":50},[37,34055,34056],{"class":82},"False",[37,34058,31536],{"class":54},[37,34060,34061,34064,34066,34068,34070,34072,34074],{"class":39,"line":1695},[37,34062,34063],{"class":5288},"                           transform",[37,34065,70],{"class":50},[37,34067,31563],{"class":54},[37,34069,31566],{"class":5288},[37,34071,70],{"class":50},[37,34073,1104],{"class":82},[37,34075,31574],{"class":54},[37,34077,34078,34081,34083,34085],{"class":39,"line":1700},[37,34079,34080],{"class":5288},"                           download",[37,34082,70],{"class":50},[37,34084,31546],{"class":82},[37,34086,214],{"class":54},[37,34088,34089,34092,34094,34096,34098,34100],{"class":39,"line":1714},[37,34090,34091],{"class":54},"    test_dataloader",[37,34093,70],{"class":50},[37,34095,31604],{"class":54},[37,34097,31607],{"class":5288},[37,34099,70],{"class":50},[37,34101,34102],{"class":54},"test_data,\n",[37,34104,34105],{"class":39,"line":1719},[37,34106,34107],{"class":43},"                                    # 这里是一张一张进行测试\n",[37,34109,34110,34113,34115,34117],{"class":39,"line":1725},[37,34111,34112],{"class":5288},"                                    batch_size",[37,34114,70],{"class":50},[37,34116,422],{"class":82},[37,34118,31536],{"class":54},[37,34120,34121,34124,34126,34128],{"class":39,"line":1746},[37,34122,34123],{"class":5288},"                                    shuffle",[37,34125,70],{"class":50},[37,34127,31546],{"class":82},[37,34129,31536],{"class":54},[37,34131,34132,34135,34137,34139],{"class":39,"line":1751},[37,34133,34134],{"class":5288},"                                    num_workers",[37,34136,70],{"class":50},[37,34138,396],{"class":82},[37,34140,214],{"class":54},[37,34142,34143,34145],{"class":39,"line":1765},[37,34144,4162],{"class":50},[37,34146,34147],{"class":54}," test_dataloader\n",[37,34149,34150],{"class":39,"line":1770},[37,34151,2472],{"emptyLinePlaceholder":131},[37,34153,34154],{"class":39,"line":1799},[37,34155,34156],{"class":43},"# 定义模型测试函数\n",[37,34158,34159,34161,34164],{"class":39,"line":1804},[37,34160,32017],{"class":50},[37,34162,34163],{"class":2035}," test_model_process",[37,34165,34166],{"class":54},"(model,test_dataloader):\n",[37,34168,34169],{"class":39,"line":1821},[37,34170,34171],{"class":43},"    # 将模型放到设备当中，先进行判断\n",[37,34173,34174,34176,34178,34180,34182,34184,34186],{"class":39,"line":1826},[37,34175,31307],{"class":54},[37,34177,70],{"class":50},[37,34179,31314],{"class":309},[37,34181,1776],{"class":50},[37,34183,31319],{"class":54},[37,34185,1773],{"class":50},[37,34187,34188],{"class":309}," \"cpu\"\n",[37,34190,34191,34193,34195],{"class":39,"line":1831},[37,34192,31359],{"class":54},[37,34194,70],{"class":50},[37,34196,32359],{"class":54},[37,34198,34199],{"class":39,"line":1836},[37,34200,2472],{"emptyLinePlaceholder":131},[37,34202,34203],{"class":39,"line":1850},[37,34204,34205],{"class":43},"    # 设置初始化参数\n",[37,34207,34208,34211,34213],{"class":39,"line":1855},[37,34209,34210],{"class":54},"    test_corrects",[37,34212,70],{"class":50},[37,34214,32412],{"class":82},[37,34216,34217,34220,34222],{"class":39,"line":2649},[37,34218,34219],{"class":54},"    test_num",[37,34221,70],{"class":50},[37,34223,3157],{"class":82},[37,34225,34226],{"class":39,"line":2663},[37,34227,2472],{"emptyLinePlaceholder":131},[37,34229,34230],{"class":39,"line":2671},[37,34231,34232],{"class":43},"    # 进行模型测试\n",[37,34234,34235],{"class":39,"line":2676},[37,34236,34237],{"class":43},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[37,34239,34240],{"class":39,"line":2682},[37,34241,34242],{"class":43},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[37,34244,34245,34248],{"class":39,"line":2688},[37,34246,34247],{"class":50},"    with",[37,34249,32953],{"class":54},[37,34251,34252],{"class":39,"line":2693},[37,34253,34254],{"class":43},"        # 从数据中进行\n",[37,34256,34257,34259,34262,34264],{"class":39,"line":8020},[37,34258,3475],{"class":50},[37,34260,34261],{"class":54}," test_data_x,test_data_y ",[37,34263,26116],{"class":50},[37,34265,34266],{"class":54}," test_dataloader:\n",[37,34268,34269,34272,34274],{"class":39,"line":8044},[37,34270,34271],{"class":54},"            test_data_x",[37,34273,70],{"class":50},[37,34275,34276],{"class":54},"test_data_x.to(device)\n",[37,34278,34279,34282,34284],{"class":39,"line":8049},[37,34280,34281],{"class":54},"            test_data_y",[37,34283,70],{"class":50},[37,34285,34286],{"class":54},"test_data_y.to(device)\n",[37,34288,34289],{"class":39,"line":8055},[37,34290,34291],{"class":43},"            # 设置为验证模式\n",[37,34293,34294],{"class":39,"line":8082},[37,34295,32944],{"class":54},[37,34297,34298],{"class":39,"line":8087},[37,34299,34300],{"class":43},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[37,34302,34303,34305,34307],{"class":39,"line":8093},[37,34304,32729],{"class":54},[37,34306,70],{"class":50},[37,34308,34309],{"class":54},"model(test_data_x)\n",[37,34311,34312],{"class":39,"line":8105},[37,34313,34314],{"class":43},"            # 查找每一行中最大值对应的下标\n",[37,34316,34317,34319,34321,34323,34325,34327,34329],{"class":39,"line":8117},[37,34318,32746],{"class":54},[37,34320,70],{"class":50},[37,34322,32751],{"class":54},[37,34324,32754],{"class":5288},[37,34326,70],{"class":50},[37,34328,422],{"class":82},[37,34330,214],{"class":54},[37,34332,34333],{"class":39,"line":8129},[37,34334,34335],{"class":43},"            # 计算正确率\n",[37,34337,34338],{"class":39,"line":9788},[37,34339,34340],{"class":43},"            # .data表示是一个不带梯度信息的tensor\n",[37,34342,34343],{"class":39,"line":9813},[37,34344,34345],{"class":43},"            # 如果预测正确，则准确度test_corrects加1\n",[37,34347,34348,34351,34353,34355,34357],{"class":39,"line":9836},[37,34349,34350],{"class":54},"            test_corrects",[37,34352,9549],{"class":50},[37,34354,32856],{"class":54},[37,34356,3021],{"class":50},[37,34358,34359],{"class":54},"test_data_y.data)\n",[37,34361,34362],{"class":39,"line":9860},[37,34363,34364],{"class":43},"            # 将所有的测试样本进行累计\n",[37,34366,34367,34370,34372,34375,34377],{"class":39,"line":9865},[37,34368,34369],{"class":54},"            test_num",[37,34371,9549],{"class":50},[37,34373,34374],{"class":54},"test_data_x.size(",[37,34376,396],{"class":82},[37,34378,214],{"class":54},[37,34380,34381],{"class":39,"line":9870},[37,34382,2472],{"emptyLinePlaceholder":131},[37,34384,34385],{"class":39,"line":9875},[37,34386,34387],{"class":43},"        # 计算准确度\n",[37,34389,34390,34393,34395,34398,34400],{"class":39,"line":9884},[37,34391,34392],{"class":54},"        test_acc",[37,34394,70],{"class":50},[37,34396,34397],{"class":54},"test_corrects.double().item()",[37,34399,787],{"class":50},[37,34401,34402],{"class":54},"test_num\n",[37,34404,34405],{"class":39,"line":9889},[37,34406,34407],{"class":43},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[37,34409,34410,34412,34414,34417],{"class":39,"line":9895},[37,34411,32520],{"class":82},[37,34413,208],{"class":54},[37,34415,34416],{"class":309},"\"测试的准确率：\"",[37,34418,34419],{"class":54},",test_acc)\n",[37,34421,34422],{"class":39,"line":9916},[37,34423,2472],{"emptyLinePlaceholder":131},[37,34425,34426],{"class":39,"line":9922},[37,34427,34428],{"class":43},"# 实现模型的测试功能\n",[37,34430,34431,34433,34435,34437,34439],{"class":39,"line":9936},[37,34432,1603],{"class":50},[37,34434,31290],{"class":82},[37,34436,3021],{"class":50},[37,34438,31295],{"class":309},[37,34440,3811],{"class":54},[37,34442,34443],{"class":39,"line":9942},[37,34444,34445],{"class":43},"    # 加载模型\n",[37,34447,34448,34450,34452],{"class":39,"line":9969},[37,34449,31359],{"class":54},[37,34451,70],{"class":50},[37,34453,33894],{"class":54},[37,34455,34456],{"class":39,"line":9978},[37,34457,34458],{"class":43},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[37,34460,34461],{"class":39,"line":9984},[37,34462,34463],{"class":43},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[37,34465,34466,34469,34472],{"class":39,"line":9992},[37,34467,34468],{"class":54},"    model.load_state_dict(torch.load(",[37,34470,34471],{"class":309},"'best_model.pth'",[37,34473,30567],{"class":54},[37,34475,34476],{"class":39,"line":9997},[37,34477,34478],{"class":43},"    # 数据加载\n",[37,34480,34481,34483,34485],{"class":39,"line":16676},[37,34482,34091],{"class":54},[37,34484,70],{"class":50},[37,34486,34487],{"class":54},"test_data_process()\n",[37,34489,34490],{"class":39,"line":16682},[37,34491,34492],{"class":43},"    # 加载模型测试的函数\n",[37,34494,34495],{"class":39,"line":16705},[37,34496,34497],{"class":54},"    test_model_process(model,test_dataloader)\n",[37,34499,34500],{"class":39,"line":16711},[37,34501,2472],{"emptyLinePlaceholder":131},[37,34503,34504],{"class":39,"line":16734},[37,34505,34506],{"class":43},"    # 验证集推理实现：\n",[37,34508,34509],{"class":39,"line":16748},[37,34510,34511],{"class":43},"    # 加载数据加载的更详细一些\n",[37,34513,34514,34516,34518,34520,34522,34524,34526],{"class":39,"line":16768},[37,34515,31307],{"class":54},[37,34517,70],{"class":50},[37,34519,31314],{"class":309},[37,34521,1776],{"class":50},[37,34523,31319],{"class":54},[37,34525,1773],{"class":50},[37,34527,34188],{"class":309},[37,34529,34530,34532,34534],{"class":39,"line":16774},[37,34531,31359],{"class":54},[37,34533,70],{"class":50},[37,34535,32359],{"class":54},[37,34537,34538],{"class":39,"line":16785},[37,34539,34540],{"class":43},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[37,34542,34543],{"class":39,"line":16808},[37,34544,34545],{"class":43},"    # 顺序不可改变\n",[37,34547,34548,34551,34553,34555,34558,34560,34563,34565,34568,34570,34573,34575,34578,34580,34583,34585,34588,34590,34593,34595,34598,34600,34603],{"class":39,"line":16830},[37,34549,34550],{"class":54},"    classes",[37,34552,70],{"class":50},[37,34554,1093],{"class":54},[37,34556,34557],{"class":309},"'T-shirt\u002Ftop'",[37,34559,583],{"class":54},[37,34561,34562],{"class":309},"'Trouser'",[37,34564,583],{"class":54},[37,34566,34567],{"class":309},"'Pullover'",[37,34569,583],{"class":54},[37,34571,34572],{"class":309},"'Dress'",[37,34574,583],{"class":54},[37,34576,34577],{"class":309},"'Coat'",[37,34579,583],{"class":54},[37,34581,34582],{"class":309},"'Sandal'",[37,34584,583],{"class":54},[37,34586,34587],{"class":309},"'Shirt'",[37,34589,583],{"class":54},[37,34591,34592],{"class":309},"'Sneaker'",[37,34594,583],{"class":54},[37,34596,34597],{"class":309},"'Bag'",[37,34599,583],{"class":54},[37,34601,34602],{"class":309},"'Ankle boot'",[37,34604,33315],{"class":54},[37,34606,34607,34609],{"class":39,"line":16835},[37,34608,34247],{"class":50},[37,34610,32953],{"class":54},[37,34612,34613],{"class":39,"line":16841},[37,34614,34615],{"class":43},"        # 将数据和标签都放到设备当中\n",[37,34617,34618,34620,34623,34625],{"class":39,"line":16855},[37,34619,3475],{"class":50},[37,34621,34622],{"class":54}," b_x,b_y ",[37,34624,26116],{"class":50},[37,34626,34266],{"class":54},[37,34628,34629,34631,34633],{"class":39,"line":16868},[37,34630,32679],{"class":54},[37,34632,70],{"class":50},[37,34634,32684],{"class":54},[37,34636,34637,34639,34641],{"class":39,"line":16873},[37,34638,32694],{"class":54},[37,34640,70],{"class":50},[37,34642,32699],{"class":54},[37,34644,34645],{"class":39,"line":16887},[37,34646,2472],{"emptyLinePlaceholder":131},[37,34648,34649],{"class":39,"line":16892},[37,34650,34651],{"class":43},"            # 设置模型为验证模式\n",[37,34653,34654],{"class":39,"line":16898},[37,34655,32944],{"class":54},[37,34657,34658],{"class":39,"line":16903},[37,34659,34660],{"class":43},"            # 模型推理结果\n",[37,34662,34663,34665,34667],{"class":39,"line":16917},[37,34664,32729],{"class":54},[37,34666,70],{"class":50},[37,34668,32734],{"class":54},[37,34670,34671],{"class":39,"line":16922},[37,34672,34673],{"class":43},"            # 获取最大下标，最大下标就是类别号\n",[37,34675,34676,34678,34680,34682,34684,34686,34688],{"class":39,"line":16927},[37,34677,32746],{"class":54},[37,34679,70],{"class":50},[37,34681,32751],{"class":54},[37,34683,32754],{"class":5288},[37,34685,70],{"class":50},[37,34687,422],{"class":82},[37,34689,214],{"class":54},[37,34691,34692],{"class":39,"line":16941},[37,34693,34694],{"class":43},"            # 取出张量中的数值\n",[37,34696,34697,34700,34702],{"class":39,"line":16953},[37,34698,34699],{"class":54},"            result",[37,34701,70],{"class":50},[37,34703,34704],{"class":54},"pre_lab.item()\n",[37,34706,34707,34710,34712],{"class":39,"line":16958},[37,34708,34709],{"class":54},"            label",[37,34711,70],{"class":50},[37,34713,34714],{"class":54},"b_y.item()\n",[37,34716,34717,34720,34722,34725,34728,34731,34733,34736],{"class":39,"line":16971},[37,34718,34719],{"class":82},"            print",[37,34721,208],{"class":54},[37,34723,34724],{"class":309},"\"预测值：\"",[37,34726,34727],{"class":54},",classes[result],",[37,34729,34730],{"class":309},"\"------\"",[37,34732,583],{"class":54},[37,34734,34735],{"class":309},"\"真实值：\"",[37,34737,34738],{"class":54},",classes[label])\n",[14,34740,34741],{},"（2）AlexNet",[158,34743,34744],{},[161,34745,34746],{},"神经网络构建",[27,34748,34750],{"className":29,"code":34749,"language":31,"meta":32,"style":32},"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",[34,34751,34752,34758,34768,34778,34790,34794,34811,34819,34834,34846,34888,34915,34958,34984,35028,35071,35114,35141,35145,35155,35160,35188,35207,35226,35230,35235,35243,35258,35268,35282,35292,35307,35322,35337,35348,35352,35357,35367,35382,35387,35401,35416,35428,35433,35444,35449,35455,35460,35472,35492,35497,35506],{"__ignoreMap":32},[37,34753,34754,34756],{"class":39,"line":40},[37,34755,51],{"class":50},[37,34757,30465],{"class":54},[37,34759,34760,34762,34764,34766],{"class":39,"line":47},[37,34761,30807],{"class":50},[37,34763,30810],{"class":54},[37,34765,51],{"class":50},[37,34767,30815],{"class":54},[37,34769,34770,34772,34774,34776],{"class":39,"line":58},[37,34771,30807],{"class":50},[37,34773,30827],{"class":54},[37,34775,51],{"class":50},[37,34777,30832],{"class":54},[37,34779,34780,34782,34785,34787],{"class":39,"line":64},[37,34781,51],{"class":50},[37,34783,34784],{"class":54}," torch.nn.functional ",[37,34786,31453],{"class":50},[37,34788,34789],{"class":54}," F\n",[37,34791,34792],{"class":39,"line":76},[37,34793,2472],{"emptyLinePlaceholder":131},[37,34795,34796,34798,34801,34803,34805,34807,34809],{"class":39,"line":92},[37,34797,14766],{"class":50},[37,34799,34800],{"class":2035}," AlexNet",[37,34802,208],{"class":54},[37,34804,30848],{"class":2035},[37,34806,761],{"class":54},[37,34808,30853],{"class":2035},[37,34810,30856],{"class":54},[37,34812,34813,34815,34817],{"class":39,"line":97},[37,34814,30871],{"class":50},[37,34816,30874],{"class":82},[37,34818,30877],{"class":54},[37,34820,34821,34823,34826,34828,34830,34832],{"class":39,"line":107},[37,34822,30887],{"class":82},[37,34824,34825],{"class":54},"(AlexNet,",[37,34827,30893],{"class":82},[37,34829,30896],{"class":54},[37,34831,30899],{"class":82},[37,34833,2048],{"class":54},[37,34835,34836,34838,34841,34843],{"class":39,"line":1390},[37,34837,30915],{"class":82},[37,34839,34840],{"class":54},".ReLu",[37,34842,70],{"class":50},[37,34844,34845],{"class":54},"nn.ReLU()\n",[37,34847,34848,34850,34852,34854,34856,34858,34860,34862,34864,34866,34868,34870,34872,34874,34876,34878,34880,34882,34884,34886],{"class":39,"line":1402},[37,34849,30915],{"class":82},[37,34851,30918],{"class":54},[37,34853,70],{"class":50},[37,34855,30923],{"class":54},[37,34857,30926],{"class":5288},[37,34859,70],{"class":50},[37,34861,422],{"class":82},[37,34863,583],{"class":54},[37,34865,30935],{"class":5288},[37,34867,70],{"class":50},[37,34869,414],{"class":82},[37,34871,583],{"class":54},[37,34873,30944],{"class":5288},[37,34875,70],{"class":50},[37,34877,676],{"class":82},[37,34879,583],{"class":54},[37,34881,30999],{"class":5288},[37,34883,70],{"class":50},[37,34885,498],{"class":82},[37,34887,214],{"class":54},[37,34889,34890,34892,34894,34896,34899,34901,34903,34905,34907,34909,34911,34913],{"class":39,"line":1684},[37,34891,30915],{"class":82},[37,34893,30983],{"class":54},[37,34895,70],{"class":50},[37,34897,34898],{"class":54},"nn.MaxPool2d(",[37,34900,30944],{"class":5288},[37,34902,70],{"class":50},[37,34904,276],{"class":82},[37,34906,583],{"class":54},[37,34908,30999],{"class":5288},[37,34910,70],{"class":50},[37,34912,282],{"class":82},[37,34914,214],{"class":54},[37,34916,34917,34919,34921,34923,34925,34927,34929,34931,34933,34935,34937,34940,34942,34944,34946,34948,34950,34952,34954,34956],{"class":39,"line":1689},[37,34918,30915],{"class":82},[37,34920,31012],{"class":54},[37,34922,70],{"class":50},[37,34924,30923],{"class":54},[37,34926,30926],{"class":5288},[37,34928,70],{"class":50},[37,34930,414],{"class":82},[37,34932,583],{"class":54},[37,34934,30935],{"class":5288},[37,34936,70],{"class":50},[37,34938,34939],{"class":82},"256",[37,34941,583],{"class":54},[37,34943,30944],{"class":5288},[37,34945,70],{"class":50},[37,34947,524],{"class":82},[37,34949,583],{"class":54},[37,34951,30953],{"class":5288},[37,34953,70],{"class":50},[37,34955,282],{"class":82},[37,34957,214],{"class":54},[37,34959,34960,34962,34964,34966,34968,34970,34972,34974,34976,34978,34980,34982],{"class":39,"line":1695},[37,34961,30915],{"class":82},[37,34963,31047],{"class":54},[37,34965,70],{"class":50},[37,34967,34898],{"class":54},[37,34969,30944],{"class":5288},[37,34971,70],{"class":50},[37,34973,276],{"class":82},[37,34975,583],{"class":54},[37,34977,30999],{"class":5288},[37,34979,70],{"class":50},[37,34981,282],{"class":82},[37,34983,214],{"class":54},[37,34985,34986,34988,34991,34993,34995,34997,34999,35001,35003,35005,35007,35010,35012,35014,35016,35018,35020,35022,35024,35026],{"class":39,"line":1700},[37,34987,30915],{"class":82},[37,34989,34990],{"class":54},".c5",[37,34992,70],{"class":50},[37,34994,30923],{"class":54},[37,34996,30926],{"class":5288},[37,34998,70],{"class":50},[37,35000,34939],{"class":82},[37,35002,583],{"class":54},[37,35004,30935],{"class":5288},[37,35006,70],{"class":50},[37,35008,35009],{"class":82},"384",[37,35011,583],{"class":54},[37,35013,30944],{"class":5288},[37,35015,70],{"class":50},[37,35017,276],{"class":82},[37,35019,583],{"class":54},[37,35021,30953],{"class":5288},[37,35023,70],{"class":50},[37,35025,422],{"class":82},[37,35027,214],{"class":54},[37,35029,35030,35032,35035,35037,35039,35041,35043,35045,35047,35049,35051,35053,35055,35057,35059,35061,35063,35065,35067,35069],{"class":39,"line":1714},[37,35031,30915],{"class":82},[37,35033,35034],{"class":54},".c6",[37,35036,70],{"class":50},[37,35038,30923],{"class":54},[37,35040,30926],{"class":5288},[37,35042,70],{"class":50},[37,35044,35009],{"class":82},[37,35046,583],{"class":54},[37,35048,30935],{"class":5288},[37,35050,70],{"class":50},[37,35052,35009],{"class":82},[37,35054,583],{"class":54},[37,35056,30944],{"class":5288},[37,35058,70],{"class":50},[37,35060,276],{"class":82},[37,35062,583],{"class":54},[37,35064,30953],{"class":5288},[37,35066,70],{"class":50},[37,35068,422],{"class":82},[37,35070,214],{"class":54},[37,35072,35073,35075,35078,35080,35082,35084,35086,35088,35090,35092,35094,35096,35098,35100,35102,35104,35106,35108,35110,35112],{"class":39,"line":1719},[37,35074,30915],{"class":82},[37,35076,35077],{"class":54},".c7",[37,35079,70],{"class":50},[37,35081,30923],{"class":54},[37,35083,30926],{"class":5288},[37,35085,70],{"class":50},[37,35087,35009],{"class":82},[37,35089,583],{"class":54},[37,35091,30935],{"class":5288},[37,35093,70],{"class":50},[37,35095,34939],{"class":82},[37,35097,583],{"class":54},[37,35099,30944],{"class":5288},[37,35101,70],{"class":50},[37,35103,276],{"class":82},[37,35105,583],{"class":54},[37,35107,30953],{"class":5288},[37,35109,70],{"class":50},[37,35111,422],{"class":82},[37,35113,214],{"class":54},[37,35115,35116,35118,35121,35123,35125,35127,35129,35131,35133,35135,35137,35139],{"class":39,"line":1725},[37,35117,30915],{"class":82},[37,35119,35120],{"class":54},".s8",[37,35122,70],{"class":50},[37,35124,34898],{"class":54},[37,35126,30944],{"class":5288},[37,35128,70],{"class":50},[37,35130,276],{"class":82},[37,35132,583],{"class":54},[37,35134,30999],{"class":5288},[37,35136,70],{"class":50},[37,35138,282],{"class":82},[37,35140,214],{"class":54},[37,35142,35143],{"class":39,"line":1746},[37,35144,31072],{"class":43},[37,35146,35147,35149,35151,35153],{"class":39,"line":1751},[37,35148,30915],{"class":82},[37,35150,31079],{"class":54},[37,35152,70],{"class":50},[37,35154,31084],{"class":54},[37,35156,35157],{"class":39,"line":1765},[37,35158,35159],{"class":43},"       # 定义全连接层\n",[37,35161,35162,35164,35167,35169,35171,35173,35175,35177,35179,35181,35183,35186],{"class":39,"line":1770},[37,35163,30915],{"class":82},[37,35165,35166],{"class":54},".f1",[37,35168,70],{"class":50},[37,35170,31101],{"class":54},[37,35172,549],{"class":82},[37,35174,659],{"class":50},[37,35176,549],{"class":82},[37,35178,659],{"class":50},[37,35180,34939],{"class":82},[37,35182,583],{"class":54},[37,35184,35185],{"class":82},"4096",[37,35187,214],{"class":54},[37,35189,35190,35192,35195,35197,35199,35201,35203,35205],{"class":39,"line":1799},[37,35191,30915],{"class":82},[37,35193,35194],{"class":54},".f2",[37,35196,70],{"class":50},[37,35198,31101],{"class":54},[37,35200,35185],{"class":82},[37,35202,583],{"class":54},[37,35204,35185],{"class":82},[37,35206,214],{"class":54},[37,35208,35209,35211,35214,35216,35218,35220,35222,35224],{"class":39,"line":1804},[37,35210,30915],{"class":82},[37,35212,35213],{"class":54},".f3",[37,35215,70],{"class":50},[37,35217,31101],{"class":54},[37,35219,35185],{"class":82},[37,35221,583],{"class":54},[37,35223,650],{"class":82},[37,35225,214],{"class":54},[37,35227,35228],{"class":39,"line":1821},[37,35229,2472],{"emptyLinePlaceholder":131},[37,35231,35232],{"class":39,"line":1826},[37,35233,35234],{"class":43},"    # 定义前向传播\n",[37,35236,35237,35239,35241],{"class":39,"line":1831},[37,35238,30871],{"class":50},[37,35240,31163],{"class":2035},[37,35242,31166],{"class":54},[37,35244,35245,35247,35249,35251,35254,35256],{"class":39,"line":1836},[37,35246,31171],{"class":54},[37,35248,70],{"class":50},[37,35250,30893],{"class":82},[37,35252,35253],{"class":54},".ReLu(",[37,35255,30893],{"class":82},[37,35257,31183],{"class":54},[37,35259,35260,35262,35264,35266],{"class":39,"line":1850},[37,35261,31171],{"class":54},[37,35263,70],{"class":50},[37,35265,30893],{"class":82},[37,35267,31194],{"class":54},[37,35269,35270,35272,35274,35276,35278,35280],{"class":39,"line":1855},[37,35271,31171],{"class":54},[37,35273,70],{"class":50},[37,35275,30893],{"class":82},[37,35277,35253],{"class":54},[37,35279,30893],{"class":82},[37,35281,31209],{"class":54},[37,35283,35284,35286,35288,35290],{"class":39,"line":2649},[37,35285,31171],{"class":54},[37,35287,70],{"class":50},[37,35289,30893],{"class":82},[37,35291,31220],{"class":54},[37,35293,35294,35296,35298,35300,35302,35304],{"class":39,"line":2663},[37,35295,31171],{"class":54},[37,35297,70],{"class":50},[37,35299,30893],{"class":82},[37,35301,35253],{"class":54},[37,35303,30893],{"class":82},[37,35305,35306],{"class":54},".c5(x))\n",[37,35308,35309,35311,35313,35315,35317,35319],{"class":39,"line":2671},[37,35310,31171],{"class":54},[37,35312,70],{"class":50},[37,35314,30893],{"class":82},[37,35316,35253],{"class":54},[37,35318,30893],{"class":82},[37,35320,35321],{"class":54},".c6(x))\n",[37,35323,35324,35326,35328,35330,35332,35334],{"class":39,"line":2676},[37,35325,31171],{"class":54},[37,35327,70],{"class":50},[37,35329,30893],{"class":82},[37,35331,35253],{"class":54},[37,35333,30893],{"class":82},[37,35335,35336],{"class":54},".c7(x))\n",[37,35338,35339,35341,35343,35345],{"class":39,"line":2682},[37,35340,31171],{"class":54},[37,35342,70],{"class":50},[37,35344,30893],{"class":82},[37,35346,35347],{"class":54},".s8(x)\n",[37,35349,35350],{"class":39,"line":2688},[37,35351,2472],{"emptyLinePlaceholder":131},[37,35353,35354],{"class":39,"line":2693},[37,35355,35356],{"class":43},"        # 展平加线性全连接层\n",[37,35358,35359,35361,35363,35365],{"class":39,"line":8020},[37,35360,31171],{"class":54},[37,35362,70],{"class":50},[37,35364,30893],{"class":82},[37,35366,31231],{"class":54},[37,35368,35369,35371,35373,35375,35377,35379],{"class":39,"line":8044},[37,35370,31171],{"class":54},[37,35372,70],{"class":50},[37,35374,30893],{"class":82},[37,35376,35253],{"class":54},[37,35378,30893],{"class":82},[37,35380,35381],{"class":54},".f1(x))\n",[37,35383,35384],{"class":39,"line":8049},[37,35385,35386],{"class":43},"        # 还需要dropout对神经元随机进行失活\n",[37,35388,35389,35391,35393,35396,35399],{"class":39,"line":8055},[37,35390,31171],{"class":54},[37,35392,70],{"class":50},[37,35394,35395],{"class":54},"F.dropout(x,",[37,35397,35398],{"class":82},"0.5",[37,35400,214],{"class":54},[37,35402,35403,35405,35407,35409,35411,35413],{"class":39,"line":8082},[37,35404,31171],{"class":54},[37,35406,70],{"class":50},[37,35408,30893],{"class":82},[37,35410,35253],{"class":54},[37,35412,30893],{"class":82},[37,35414,35415],{"class":54},".f2(x))\n",[37,35417,35418,35420,35422,35424,35426],{"class":39,"line":8087},[37,35419,31171],{"class":54},[37,35421,70],{"class":50},[37,35423,35395],{"class":54},[37,35425,35398],{"class":82},[37,35427,214],{"class":54},[37,35429,35430],{"class":39,"line":8093},[37,35431,35432],{"class":43},"        # 直接输出\n",[37,35434,35435,35437,35439,35441],{"class":39,"line":8105},[37,35436,31171],{"class":54},[37,35438,70],{"class":50},[37,35440,30893],{"class":82},[37,35442,35443],{"class":54},".f3(x)\n",[37,35445,35446],{"class":39,"line":8117},[37,35447,35448],{"class":43},"        # 前向传播输出\n",[37,35450,35451,35453],{"class":39,"line":8129},[37,35452,14824],{"class":50},[37,35454,31279],{"class":54},[37,35456,35457],{"class":39,"line":9788},[37,35458,35459],{"class":43},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[37,35461,35462,35464,35466,35468,35470],{"class":39,"line":9813},[37,35463,1603],{"class":50},[37,35465,31290],{"class":82},[37,35467,3021],{"class":50},[37,35469,31295],{"class":309},[37,35471,3811],{"class":54},[37,35473,35474,35476,35478,35480,35482,35484,35486,35488,35490],{"class":39,"line":9836},[37,35475,31307],{"class":54},[37,35477,70],{"class":50},[37,35479,30521],{"class":54},[37,35481,31314],{"class":309},[37,35483,1776],{"class":50},[37,35485,31319],{"class":54},[37,35487,1773],{"class":50},[37,35489,30546],{"class":309},[37,35491,214],{"class":54},[37,35493,35494],{"class":39,"line":9860},[37,35495,35496],{"class":43},"    # 模型实例化，然后将实例化的模型放到设备中\n",[37,35498,35499,35501,35503],{"class":39,"line":9865},[37,35500,31359],{"class":54},[37,35502,70],{"class":50},[37,35504,35505],{"class":54},"AlexNet().to(device)\n",[37,35507,35508,35510,35512,35514,35516,35519,35521,35523],{"class":39,"line":9870},[37,35509,31369],{"class":82},[37,35511,31372],{"class":54},[37,35513,422],{"class":82},[37,35515,583],{"class":54},[37,35517,35518],{"class":82},"227",[37,35520,583],{"class":54},[37,35522,35518],{"class":82},[37,35524,31385],{"class":54},[158,35526,35527],{"start":47},[161,35528,31398],{},[27,35530,35532],{"className":29,"code":35531,"language":31,"meta":32,"style":32},"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",[34,35533,35534,35540,35546,35556,35562,35572,35582,35592,35602,35612,35616,35627,35637,35641,35645,35649,35657,35669,35679,35695,35705,35737,35751,35761,35771,35775,35785,35799,35809,35819,35829,35835,35839,35843,35847,35851,35855,35863,35883,35887,35891,35895,35899,35903,35919,35923,35927,35935,35939,35943,35951,35955,35959,35963,35971,35975,35979,35983,35987,35995,35999,36007,36011,36019,36023,36031,36035,36043,36047,36051,36059,36063,36067,36071,36083,36107,36121,36125,36129,36133,36141,36145,36153,36157,36165,36169,36177,36181,36189,36193,36201,36205,36217,36221,36229,36233,36241,36245,36249,36253,36257,36265,36269,36285,36289,36297,36301,36305,36309,36313,36317,36321,36325,36341,36345,36357,36361,36373,36377,36389,36393,36401,36405,36413,36417,36421,36426,36432,36436,36445,36449,36466,36470,36479,36483,36501,36514,36519,36532,36536,36540,36548,36552,36556,36564,36568,36576,36580,36588,36592,36596,36638,36680,36684,36688,36704,36708,36724,36728,36732,36740,36744,36748,36760,36798,36803,36808,36817,36821,36835,36845,36851,36857,36863,36869,36873,36877,36883,36887,36891,36899,36903,36921,36925,36929,36933,36949,36953,36957,36961,36965,36969,36989,37009,37013,37017,37021,37029,37037,37041,37057,37077,37097,37101,37105,37113,37121,37125,37129,37133,37145,37149,37159,37167,37184],{"__ignoreMap":32},[37,35535,35536,35538],{"class":39,"line":40},[37,35537,51],{"class":50},[37,35539,31892],{"class":54},[37,35541,35542,35544],{"class":39,"line":47},[37,35543,51],{"class":50},[37,35545,31899],{"class":54},[37,35547,35548,35550,35552,35554],{"class":39,"line":58},[37,35549,51],{"class":50},[37,35551,31910],{"class":54},[37,35553,31453],{"class":50},[37,35555,31915],{"class":54},[37,35557,35558,35560],{"class":39,"line":64},[37,35559,51],{"class":50},[37,35561,30465],{"class":54},[37,35563,35564,35566,35568,35570],{"class":39,"line":76},[37,35565,30807],{"class":50},[37,35567,31485],{"class":54},[37,35569,51],{"class":50},[37,35571,31932],{"class":54},[37,35573,35574,35576,35578,35580],{"class":39,"line":92},[37,35575,30807],{"class":50},[37,35577,31438],{"class":54},[37,35579,51],{"class":50},[37,35581,31443],{"class":54},[37,35583,35584,35586,35588,35590],{"class":39,"line":97},[37,35585,30807],{"class":50},[37,35587,31468],{"class":54},[37,35589,51],{"class":50},[37,35591,31473],{"class":54},[37,35593,35594,35596,35598,35600],{"class":39,"line":107},[37,35595,51],{"class":50},[37,35597,31485],{"class":54},[37,35599,31453],{"class":50},[37,35601,31490],{"class":54},[37,35603,35604,35606,35608,35610],{"class":39,"line":1390},[37,35605,51],{"class":50},[37,35607,31502],{"class":54},[37,35609,31453],{"class":50},[37,35611,31507],{"class":54},[37,35613,35614],{"class":39,"line":1402},[37,35615,31977],{"class":43},[37,35617,35618,35620,35622,35624],{"class":39,"line":1684},[37,35619,30807],{"class":50},[37,35621,31984],{"class":54},[37,35623,51],{"class":50},[37,35625,35626],{"class":54}," AlexNet\n",[37,35628,35629,35631,35633,35635],{"class":39,"line":1689},[37,35630,30807],{"class":50},[37,35632,30810],{"class":54},[37,35634,51],{"class":50},[37,35636,30815],{"class":54},[37,35638,35639],{"class":39,"line":1695},[37,35640,2472],{"emptyLinePlaceholder":131},[37,35642,35643],{"class":39,"line":1700},[37,35644,2472],{"emptyLinePlaceholder":131},[37,35646,35647],{"class":39,"line":1714},[37,35648,32012],{"class":43},[37,35650,35651,35653,35655],{"class":39,"line":1719},[37,35652,32017],{"class":50},[37,35654,32020],{"class":2035},[37,35656,32023],{"class":54},[37,35658,35659,35661,35663,35665,35667],{"class":39,"line":1725},[37,35660,32028],{"class":54},[37,35662,70],{"class":50},[37,35664,31525],{"class":54},[37,35666,31533],{"class":309},[37,35668,31536],{"class":54},[37,35670,35671,35673,35675,35677],{"class":39,"line":1746},[37,35672,32041],{"class":5288},[37,35674,70],{"class":50},[37,35676,31546],{"class":82},[37,35678,31536],{"class":54},[37,35680,35681,35683,35685,35687,35689,35691,35693],{"class":39,"line":1751},[37,35682,32052],{"class":5288},[37,35684,70],{"class":50},[37,35686,31563],{"class":54},[37,35688,31566],{"class":5288},[37,35690,70],{"class":50},[37,35692,35518],{"class":82},[37,35694,31574],{"class":54},[37,35696,35697,35699,35701,35703],{"class":39,"line":1765},[37,35698,32069],{"class":5288},[37,35700,70],{"class":50},[37,35702,31546],{"class":82},[37,35704,214],{"class":54},[37,35706,35707,35709,35711,35713,35715,35717,35719,35721,35723,35725,35727,35729,35731,35733,35735],{"class":39,"line":1770},[37,35708,32080],{"class":54},[37,35710,70],{"class":50},[37,35712,32085],{"class":54},[37,35714,32088],{"class":82},[37,35716,208],{"class":54},[37,35718,32093],{"class":82},[37,35720,659],{"class":50},[37,35722,7430],{"class":82},[37,35724,32100],{"class":54},[37,35726,32088],{"class":82},[37,35728,208],{"class":54},[37,35730,32107],{"class":82},[37,35732,659],{"class":50},[37,35734,7430],{"class":82},[37,35736,32114],{"class":54},[37,35738,35739,35741,35743,35745,35747,35749],{"class":39,"line":1799},[37,35740,32119],{"class":54},[37,35742,70],{"class":50},[37,35744,32124],{"class":54},[37,35746,31607],{"class":5288},[37,35748,70],{"class":50},[37,35750,31612],{"class":54},[37,35752,35753,35755,35757,35759],{"class":39,"line":1804},[37,35754,32135],{"class":5288},[37,35756,70],{"class":50},[37,35758,32140],{"class":82},[37,35760,31536],{"class":54},[37,35762,35763,35765,35767,35769],{"class":39,"line":1821},[37,35764,32147],{"class":5288},[37,35766,70],{"class":50},[37,35768,31546],{"class":82},[37,35770,31536],{"class":54},[37,35772,35773],{"class":39,"line":1826},[37,35774,32158],{"class":43},[37,35776,35777,35779,35781,35783],{"class":39,"line":1831},[37,35778,32163],{"class":5288},[37,35780,70],{"class":50},[37,35782,600],{"class":82},[37,35784,214],{"class":54},[37,35786,35787,35789,35791,35793,35795,35797],{"class":39,"line":1836},[37,35788,32174],{"class":54},[37,35790,70],{"class":50},[37,35792,31604],{"class":54},[37,35794,31607],{"class":5288},[37,35796,70],{"class":50},[37,35798,32185],{"class":54},[37,35800,35801,35803,35805,35807],{"class":39,"line":1850},[37,35802,32190],{"class":5288},[37,35804,70],{"class":50},[37,35806,32140],{"class":82},[37,35808,31536],{"class":54},[37,35810,35811,35813,35815,35817],{"class":39,"line":1855},[37,35812,32201],{"class":5288},[37,35814,70],{"class":50},[37,35816,31546],{"class":82},[37,35818,31536],{"class":54},[37,35820,35821,35823,35825,35827],{"class":39,"line":2649},[37,35822,32212],{"class":5288},[37,35824,70],{"class":50},[37,35826,600],{"class":82},[37,35828,214],{"class":54},[37,35830,35831,35833],{"class":39,"line":2663},[37,35832,4162],{"class":50},[37,35834,32225],{"class":54},[37,35836,35837],{"class":39,"line":2671},[37,35838,2472],{"emptyLinePlaceholder":131},[37,35840,35841],{"class":39,"line":2676},[37,35842,32234],{"class":43},[37,35844,35845],{"class":39,"line":2682},[37,35846,32239],{"class":43},[37,35848,35849],{"class":39,"line":2688},[37,35850,2472],{"emptyLinePlaceholder":131},[37,35852,35853],{"class":39,"line":2693},[37,35854,32248],{"class":43},[37,35856,35857,35859,35861],{"class":39,"line":8020},[37,35858,32017],{"class":50},[37,35860,32255],{"class":2035},[37,35862,32258],{"class":54},[37,35864,35865,35867,35869,35871,35873,35875,35877,35879,35881],{"class":39,"line":8044},[37,35866,31307],{"class":54},[37,35868,70],{"class":50},[37,35870,30521],{"class":54},[37,35872,31314],{"class":309},[37,35874,1776],{"class":50},[37,35876,31319],{"class":54},[37,35878,1773],{"class":50},[37,35880,32277],{"class":309},[37,35882,214],{"class":54},[37,35884,35885],{"class":39,"line":8049},[37,35886,2472],{"emptyLinePlaceholder":131},[37,35888,35889],{"class":39,"line":8055},[37,35890,2472],{"emptyLinePlaceholder":131},[37,35892,35893],{"class":39,"line":8082},[37,35894,32292],{"class":43},[37,35896,35897],{"class":39,"line":8087},[37,35898,32297],{"class":43},[37,35900,35901],{"class":39,"line":8093},[37,35902,32302],{"class":43},[37,35904,35905,35907,35909,35911,35913,35915,35917],{"class":39,"line":8105},[37,35906,32307],{"class":54},[37,35908,70],{"class":50},[37,35910,32312],{"class":54},[37,35912,32315],{"class":5288},[37,35914,70],{"class":50},[37,35916,32320],{"class":82},[37,35918,214],{"class":54},[37,35920,35921],{"class":39,"line":8117},[37,35922,2472],{"emptyLinePlaceholder":131},[37,35924,35925],{"class":39,"line":8129},[37,35926,32331],{"class":43},[37,35928,35929,35931,35933],{"class":39,"line":9788},[37,35930,32336],{"class":54},[37,35932,70],{"class":50},[37,35934,32341],{"class":54},[37,35936,35937],{"class":39,"line":9813},[37,35938,2472],{"emptyLinePlaceholder":131},[37,35940,35941],{"class":39,"line":9836},[37,35942,32350],{"class":43},[37,35944,35945,35947,35949],{"class":39,"line":9860},[37,35946,31359],{"class":54},[37,35948,70],{"class":50},[37,35950,32359],{"class":54},[37,35952,35953],{"class":39,"line":9865},[37,35954,32364],{"class":43},[37,35956,35957],{"class":39,"line":9870},[37,35958,32369],{"class":43},[37,35960,35961],{"class":39,"line":9875},[37,35962,32374],{"class":43},[37,35964,35965,35967,35969],{"class":39,"line":9884},[37,35966,32379],{"class":54},[37,35968,70],{"class":50},[37,35970,32384],{"class":54},[37,35972,35973],{"class":39,"line":9889},[37,35974,2472],{"emptyLinePlaceholder":131},[37,35976,35977],{"class":39,"line":9895},[37,35978,2472],{"emptyLinePlaceholder":131},[37,35980,35981],{"class":39,"line":9916},[37,35982,32397],{"class":43},[37,35984,35985],{"class":39,"line":9922},[37,35986,32402],{"class":43},[37,35988,35989,35991,35993],{"class":39,"line":9936},[37,35990,32407],{"class":54},[37,35992,70],{"class":50},[37,35994,32412],{"class":82},[37,35996,35997],{"class":39,"line":9942},[37,35998,32417],{"class":43},[37,36000,36001,36003,36005],{"class":39,"line":9969},[37,36002,32422],{"class":54},[37,36004,70],{"class":50},[37,36006,32427],{"class":54},[37,36008,36009],{"class":39,"line":9978},[37,36010,32432],{"class":43},[37,36012,36013,36015,36017],{"class":39,"line":9984},[37,36014,32437],{"class":54},[37,36016,70],{"class":50},[37,36018,32427],{"class":54},[37,36020,36021],{"class":39,"line":9992},[37,36022,32446],{"class":43},[37,36024,36025,36027,36029],{"class":39,"line":9997},[37,36026,32451],{"class":54},[37,36028,70],{"class":50},[37,36030,32427],{"class":54},[37,36032,36033],{"class":39,"line":16676},[37,36034,32460],{"class":43},[37,36036,36037,36039,36041],{"class":39,"line":16682},[37,36038,32465],{"class":54},[37,36040,70],{"class":50},[37,36042,32427],{"class":54},[37,36044,36045],{"class":39,"line":16705},[37,36046,2472],{"emptyLinePlaceholder":131},[37,36048,36049],{"class":39,"line":16711},[37,36050,32478],{"class":43},[37,36052,36053,36055,36057],{"class":39,"line":16734},[37,36054,32483],{"class":54},[37,36056,70],{"class":50},[37,36058,73],{"class":54},[37,36060,36061],{"class":39,"line":16748},[37,36062,2472],{"emptyLinePlaceholder":131},[37,36064,36065],{"class":39,"line":16768},[37,36066,2472],{"emptyLinePlaceholder":131},[37,36068,36069],{"class":39,"line":16774},[37,36070,32500],{"class":43},[37,36072,36073,36075,36077,36079,36081],{"class":39,"line":16785},[37,36074,3273],{"class":50},[37,36076,32507],{"class":54},[37,36078,26116],{"class":50},[37,36080,32512],{"class":82},[37,36082,32515],{"class":54},[37,36084,36085,36087,36089,36091,36093,36095,36097,36099,36101,36103,36105],{"class":39,"line":16808},[37,36086,32520],{"class":82},[37,36088,208],{"class":54},[37,36090,32525],{"class":309},[37,36092,32528],{"class":82},[37,36094,787],{"class":309},[37,36096,32528],{"class":82},[37,36098,456],{"class":309},[37,36100,32537],{"class":54},[37,36102,112],{"class":50},[37,36104,422],{"class":82},[37,36106,30567],{"class":54},[37,36108,36109,36111,36113,36115,36117,36119],{"class":39,"line":16830},[37,36110,32520],{"class":82},[37,36112,208],{"class":54},[37,36114,32552],{"class":309},[37,36116,659],{"class":50},[37,36118,650],{"class":82},[37,36120,214],{"class":54},[37,36122,36123],{"class":39,"line":16835},[37,36124,2472],{"emptyLinePlaceholder":131},[37,36126,36127],{"class":39,"line":16841},[37,36128,32567],{"class":43},[37,36130,36131],{"class":39,"line":16855},[37,36132,32572],{"class":43},[37,36134,36135,36137,36139],{"class":39,"line":16868},[37,36136,32577],{"class":54},[37,36138,70],{"class":50},[37,36140,32412],{"class":82},[37,36142,36143],{"class":39,"line":16873},[37,36144,32586],{"class":43},[37,36146,36147,36149,36151],{"class":39,"line":16887},[37,36148,32591],{"class":54},[37,36150,70],{"class":50},[37,36152,3157],{"class":82},[37,36154,36155],{"class":39,"line":16892},[37,36156,32600],{"class":43},[37,36158,36159,36161,36163],{"class":39,"line":16898},[37,36160,32605],{"class":54},[37,36162,70],{"class":50},[37,36164,32412],{"class":82},[37,36166,36167],{"class":39,"line":16903},[37,36168,32614],{"class":43},[37,36170,36171,36173,36175],{"class":39,"line":16917},[37,36172,32619],{"class":54},[37,36174,70],{"class":50},[37,36176,3157],{"class":82},[37,36178,36179],{"class":39,"line":16922},[37,36180,32628],{"class":43},[37,36182,36183,36185,36187],{"class":39,"line":16927},[37,36184,32633],{"class":54},[37,36186,70],{"class":50},[37,36188,3157],{"class":82},[37,36190,36191],{"class":39,"line":16941},[37,36192,32642],{"class":43},[37,36194,36195,36197,36199],{"class":39,"line":16953},[37,36196,32647],{"class":54},[37,36198,70],{"class":50},[37,36200,3157],{"class":82},[37,36202,36203],{"class":39,"line":16958},[37,36204,32656],{"class":43},[37,36206,36207,36209,36211,36213,36215],{"class":39,"line":16971},[37,36208,3475],{"class":50},[37,36210,31671],{"class":54},[37,36212,26116],{"class":50},[37,36214,31676],{"class":82},[37,36216,32669],{"class":54},[37,36218,36219],{"class":39,"line":16976},[37,36220,32674],{"class":43},[37,36222,36223,36225,36227],{"class":39,"line":16981},[37,36224,32679],{"class":54},[37,36226,70],{"class":50},[37,36228,32684],{"class":54},[37,36230,36231],{"class":39,"line":16986},[37,36232,32689],{"class":43},[37,36234,36235,36237,36239],{"class":39,"line":16999},[37,36236,32694],{"class":54},[37,36238,70],{"class":50},[37,36240,32699],{"class":54},[37,36242,36243],{"class":39,"line":17004},[37,36244,32705],{"class":43},[37,36246,36247],{"class":39,"line":32702},[37,36248,32711],{"class":54},[37,36250,36251],{"class":39,"line":32708},[37,36252,32717],{"class":43},[37,36254,36255],{"class":39,"line":32714},[37,36256,32723],{"class":43},[37,36258,36259,36261,36263],{"class":39,"line":32720},[37,36260,32729],{"class":54},[37,36262,70],{"class":50},[37,36264,32734],{"class":54},[37,36266,36267],{"class":39,"line":32726},[37,36268,32740],{"class":43},[37,36270,36271,36273,36275,36277,36279,36281,36283],{"class":39,"line":32737},[37,36272,32746],{"class":54},[37,36274,70],{"class":50},[37,36276,32751],{"class":54},[37,36278,32754],{"class":5288},[37,36280,70],{"class":50},[37,36282,422],{"class":82},[37,36284,214],{"class":54},[37,36286,36287],{"class":39,"line":32743},[37,36288,32766],{"class":43},[37,36290,36291,36293,36295],{"class":39,"line":32763},[37,36292,32772],{"class":54},[37,36294,70],{"class":50},[37,36296,32777],{"class":54},[37,36298,36299],{"class":39,"line":32769},[37,36300,32783],{"class":43},[37,36302,36303],{"class":39,"line":32780},[37,36304,32789],{"class":54},[37,36306,36307],{"class":39,"line":32786},[37,36308,32795],{"class":43},[37,36310,36311],{"class":39,"line":32792},[37,36312,32801],{"class":54},[37,36314,36315],{"class":39,"line":32798},[37,36316,32807],{"class":43},[37,36318,36319],{"class":39,"line":32804},[37,36320,32813],{"class":54},[37,36322,36323],{"class":39,"line":32810},[37,36324,32819],{"class":43},[37,36326,36327,36329,36331,36333,36335,36337,36339],{"class":39,"line":32816},[37,36328,32825],{"class":54},[37,36330,9549],{"class":50},[37,36332,32830],{"class":54},[37,36334,659],{"class":50},[37,36336,32835],{"class":54},[37,36338,396],{"class":82},[37,36340,214],{"class":54},[37,36342,36343],{"class":39,"line":32822},[37,36344,32845],{"class":43},[37,36346,36347,36349,36351,36353,36355],{"class":39,"line":32842},[37,36348,32851],{"class":54},[37,36350,9549],{"class":50},[37,36352,32856],{"class":54},[37,36354,3021],{"class":50},[37,36356,32861],{"class":54},[37,36358,36359],{"class":39,"line":32848},[37,36360,32867],{"class":43},[37,36362,36363,36365,36367,36369,36371],{"class":39,"line":32864},[37,36364,32873],{"class":54},[37,36366,9549],{"class":50},[37,36368,32835],{"class":54},[37,36370,396],{"class":82},[37,36372,214],{"class":54},[37,36374,36375],{"class":39,"line":32870},[37,36376,32887],{"class":43},[37,36378,36379,36381,36383,36385,36387],{"class":39,"line":32884},[37,36380,3475],{"class":50},[37,36382,32895],{"class":54},[37,36384,26116],{"class":50},[37,36386,31676],{"class":82},[37,36388,32902],{"class":54},[37,36390,36391],{"class":39,"line":32890},[37,36392,32908],{"class":43},[37,36394,36395,36397,36399],{"class":39,"line":32905},[37,36396,32679],{"class":54},[37,36398,70],{"class":50},[37,36400,32684],{"class":54},[37,36402,36403],{"class":39,"line":32911},[37,36404,32923],{"class":43},[37,36406,36407,36409,36411],{"class":39,"line":32920},[37,36408,32694],{"class":54},[37,36410,70],{"class":50},[37,36412,32699],{"class":54},[37,36414,36415],{"class":39,"line":32926},[37,36416,32938],{"class":43},[37,36418,36419],{"class":39,"line":32935},[37,36420,32944],{"class":54},[37,36422,36423],{"class":39,"line":32941},[37,36424,36425],{"class":43},"            # 验证时不计算梯度以节省内存\u002F计算\n",[37,36427,36428,36430],{"class":39,"line":32947},[37,36429,32950],{"class":50},[37,36431,32953],{"class":54},[37,36433,36434],{"class":39,"line":32956},[37,36435,32959],{"class":43},[37,36437,36438,36441,36443],{"class":39,"line":32962},[37,36439,36440],{"class":54},"                output",[37,36442,70],{"class":50},[37,36444,32734],{"class":54},[37,36446,36447],{"class":39,"line":32973},[37,36448,32976],{"class":43},[37,36450,36451,36454,36456,36458,36460,36462,36464],{"class":39,"line":32979},[37,36452,36453],{"class":54},"                pre_lab",[37,36455,70],{"class":50},[37,36457,32751],{"class":54},[37,36459,32754],{"class":5288},[37,36461,70],{"class":50},[37,36463,422],{"class":82},[37,36465,214],{"class":54},[37,36467,36468],{"class":39,"line":32998},[37,36469,33001],{"class":43},[37,36471,36472,36475,36477],{"class":39,"line":33004},[37,36473,36474],{"class":54},"                val_batch_loss",[37,36476,70],{"class":50},[37,36478,32777],{"class":54},[37,36480,36481],{"class":39,"line":33015},[37,36482,33018],{"class":43},[37,36484,36485,36488,36490,36493,36495,36497,36499],{"class":39,"line":33021},[37,36486,36487],{"class":54},"                val_loss",[37,36489,9549],{"class":50},[37,36491,36492],{"class":54},"val_batch_loss.item()",[37,36494,659],{"class":50},[37,36496,32835],{"class":54},[37,36498,396],{"class":82},[37,36500,214],{"class":54},[37,36502,36503,36506,36508,36510,36512],{"class":39,"line":33041},[37,36504,36505],{"class":54},"                val_corrects",[37,36507,9549],{"class":50},[37,36509,32856],{"class":54},[37,36511,3021],{"class":50},[37,36513,32861],{"class":54},[37,36515,36516],{"class":39,"line":33057},[37,36517,36518],{"class":43},"            # 当前用于验证的样本数量\n",[37,36520,36521,36524,36526,36528,36530],{"class":39,"line":33063},[37,36522,36523],{"class":54},"            val_num",[37,36525,9549],{"class":50},[37,36527,32835],{"class":54},[37,36529,396],{"class":82},[37,36531,214],{"class":54},[37,36533,36534],{"class":39,"line":33077},[37,36535,33080],{"class":43},[37,36537,36538],{"class":39,"line":33083},[37,36539,33086],{"class":43},[37,36541,36542,36544,36546],{"class":39,"line":33089},[37,36543,33092],{"class":54},[37,36545,787],{"class":50},[37,36547,33097],{"class":54},[37,36549,36550],{"class":39,"line":33100},[37,36551,33103],{"class":43},[37,36553,36554],{"class":39,"line":33106},[37,36555,33109],{"class":43},[37,36557,36558,36560,36562],{"class":39,"line":33112},[37,36559,33115],{"class":54},[37,36561,787],{"class":50},[37,36563,33097],{"class":54},[37,36565,36566],{"class":39,"line":33122},[37,36567,33125],{"class":43},[37,36569,36570,36572,36574],{"class":39,"line":33128},[37,36571,33131],{"class":54},[37,36573,787],{"class":50},[37,36575,33136],{"class":54},[37,36577,36578],{"class":39,"line":33139},[37,36579,33142],{"class":43},[37,36581,36582,36584,36586],{"class":39,"line":33145},[37,36583,33148],{"class":54},[37,36585,787],{"class":50},[37,36587,33136],{"class":54},[37,36589,36590],{"class":39,"line":33155},[37,36591,2472],{"emptyLinePlaceholder":131},[37,36593,36594],{"class":39,"line":33160},[37,36595,33163],{"class":43},[37,36597,36598,36600,36602,36604,36606,36608,36610,36612,36614,36616,36618,36620,36622,36624,36626,36628,36630,36632,36634,36636],{"class":39,"line":33166},[37,36599,32520],{"class":82},[37,36601,208],{"class":54},[37,36603,3664],{"class":309},[37,36605,32528],{"class":82},[37,36607,33177],{"class":309},[37,36609,1099],{"class":82},[37,36611,33182],{"class":50},[37,36613,1149],{"class":82},[37,36615,33187],{"class":309},[37,36617,1099],{"class":82},[37,36619,33182],{"class":50},[37,36621,1149],{"class":82},[37,36623,3664],{"class":309},[37,36625,33198],{"class":54},[37,36627,112],{"class":50},[37,36629,422],{"class":82},[37,36631,33205],{"class":54},[37,36633,112],{"class":50},[37,36635,422],{"class":82},[37,36637,33212],{"class":54},[37,36639,36640,36642,36644,36646,36648,36650,36652,36654,36656,36658,36660,36662,36664,36666,36668,36670,36672,36674,36676,36678],{"class":39,"line":33215},[37,36641,32520],{"class":82},[37,36643,208],{"class":54},[37,36645,3664],{"class":309},[37,36647,32528],{"class":82},[37,36649,33226],{"class":309},[37,36651,1099],{"class":82},[37,36653,33182],{"class":50},[37,36655,1149],{"class":82},[37,36657,33235],{"class":309},[37,36659,1099],{"class":82},[37,36661,33182],{"class":50},[37,36663,1149],{"class":82},[37,36665,3664],{"class":309},[37,36667,33246],{"class":54},[37,36669,112],{"class":50},[37,36671,422],{"class":82},[37,36673,33253],{"class":54},[37,36675,112],{"class":50},[37,36677,422],{"class":82},[37,36679,33212],{"class":54},[37,36681,36682],{"class":39,"line":33262},[37,36683,2472],{"emptyLinePlaceholder":131},[37,36685,36686],{"class":39,"line":33267},[37,36687,33270],{"class":43},[37,36689,36690,36692,36694,36696,36698,36700,36702],{"class":39,"line":33273},[37,36691,2569],{"class":50},[37,36693,33278],{"class":54},[37,36695,112],{"class":50},[37,36697,422],{"class":82},[37,36699,1143],{"class":54},[37,36701,1163],{"class":50},[37,36703,33289],{"class":54},[37,36705,36706],{"class":39,"line":33292},[37,36707,33295],{"class":43},[37,36709,36710,36712,36714,36716,36718,36720,36722],{"class":39,"line":33298},[37,36711,33301],{"class":54},[37,36713,247],{"class":82},[37,36715,70],{"class":50},[37,36717,33308],{"class":54},[37,36719,112],{"class":50},[37,36721,422],{"class":82},[37,36723,33315],{"class":54},[37,36725,36726],{"class":39,"line":33318},[37,36727,33321],{"class":43},[37,36729,36730],{"class":39,"line":33324},[37,36731,33327],{"class":43},[37,36733,36734,36736,36738],{"class":39,"line":33330},[37,36735,33333],{"class":54},[37,36737,70],{"class":50},[37,36739,32384],{"class":54},[37,36741,36742],{"class":39,"line":33340},[37,36743,2472],{"emptyLinePlaceholder":131},[37,36745,36746],{"class":39,"line":33345},[37,36747,33348],{"class":43},[37,36749,36750,36752,36754,36756,36758],{"class":39,"line":33351},[37,36751,33354],{"class":54},[37,36753,70],{"class":50},[37,36755,33359],{"class":54},[37,36757,112],{"class":50},[37,36759,33364],{"class":54},[37,36761,36762,36764,36766,36768,36770,36772,36774,36776,36778,36780,36782,36784,36786,36788,36790,36792,36794,36796],{"class":39,"line":33367},[37,36763,32520],{"class":82},[37,36765,208],{"class":54},[37,36767,33374],{"class":309},[37,36769,1099],{"class":82},[37,36771,33379],{"class":50},[37,36773,1149],{"class":82},[37,36775,747],{"class":309},[37,36777,1099],{"class":82},[37,36779,33379],{"class":50},[37,36781,1149],{"class":82},[37,36783,33392],{"class":309},[37,36785,33395],{"class":54},[37,36787,33398],{"class":50},[37,36789,1110],{"class":82},[37,36791,33403],{"class":54},[37,36793,533],{"class":50},[37,36795,1110],{"class":82},[37,36797,30567],{"class":54},[37,36799,36800],{"class":39,"line":33412},[37,36801,36802],{"class":43},"    # 选择最优参数并保存\n",[37,36804,36805],{"class":39,"line":33418},[37,36806,36807],{"class":43},"    # 保存最佳模型权重字典\n",[37,36809,36810,36813,36815],{"class":39,"line":33424},[37,36811,36812],{"class":54},"    torch.save(best_model_wts,",[37,36814,33436],{"class":309},[37,36816,214],{"class":54},[37,36818,36819],{"class":39,"line":33430},[37,36820,33456],{"class":43},[37,36822,36823,36825,36827,36829,36831,36833],{"class":39,"line":33441},[37,36824,33462],{"class":54},[37,36826,70],{"class":50},[37,36828,33467],{"class":54},[37,36830,33470],{"class":5288},[37,36832,70],{"class":50},[37,36834,1618],{"class":54},[37,36836,36837,36839,36841,36843],{"class":39,"line":33447},[37,36838,33480],{"class":309},[37,36840,1062],{"class":54},[37,36842,33485],{"class":82},[37,36844,33488],{"class":54},[37,36846,36847,36849],{"class":39,"line":33453},[37,36848,33494],{"class":309},[37,36850,33497],{"class":54},[37,36852,36853,36855],{"class":39,"line":33459},[37,36854,33503],{"class":309},[37,36856,33506],{"class":54},[37,36858,36859,36861],{"class":39,"line":33477},[37,36860,33512],{"class":309},[37,36862,33515],{"class":54},[37,36864,36865,36867],{"class":39,"line":33491},[37,36866,33521],{"class":309},[37,36868,33524],{"class":54},[37,36870,36871],{"class":39,"line":33500},[37,36872,33530],{"class":54},[37,36874,36875],{"class":39,"line":33509},[37,36876,33536],{"class":43},[37,36878,36879,36881],{"class":39,"line":33518},[37,36880,4162],{"class":50},[37,36882,33544],{"class":54},[37,36884,36885],{"class":39,"line":33527},[37,36886,2472],{"emptyLinePlaceholder":131},[37,36888,36889],{"class":39,"line":33533},[37,36890,33555],{"class":43},[37,36892,36893,36895,36897],{"class":39,"line":33539},[37,36894,32017],{"class":50},[37,36896,33563],{"class":2035},[37,36898,33566],{"class":54},[37,36900,36901],{"class":39,"line":33547},[37,36902,33572],{"class":43},[37,36904,36905,36907,36909,36911,36913,36915,36917,36919],{"class":39,"line":33552},[37,36906,33578],{"class":54},[37,36908,31763],{"class":5288},[37,36910,70],{"class":50},[37,36912,208],{"class":54},[37,36914,702],{"class":82},[37,36916,583],{"class":54},[37,36918,498],{"class":82},[37,36920,30567],{"class":54},[37,36922,36923],{"class":39,"line":33558},[37,36924,33598],{"class":43},[37,36926,36927],{"class":39,"line":33569},[37,36928,33604],{"class":43},[37,36930,36931],{"class":39,"line":33575},[37,36932,33610],{"class":43},[37,36934,36935,36937,36939,36941,36943,36945,36947],{"class":39,"line":33595},[37,36936,31797],{"class":54},[37,36938,422],{"class":82},[37,36940,583],{"class":54},[37,36942,282],{"class":82},[37,36944,583],{"class":54},[37,36946,422],{"class":82},[37,36948,214],{"class":54},[37,36950,36951],{"class":39,"line":33601},[37,36952,33633],{"class":43},[37,36954,36955],{"class":39,"line":33607},[37,36956,33639],{"class":43},[37,36958,36959],{"class":39,"line":33613},[37,36960,33645],{"class":43},[37,36962,36963],{"class":39,"line":33630},[37,36964,33651],{"class":43},[37,36966,36967],{"class":39,"line":33636},[37,36968,33657],{"class":43},[37,36970,36971,36973,36975,36977,36979,36981,36983,36985,36987],{"class":39,"line":33642},[37,36972,33663],{"class":54},[37,36974,33666],{"class":309},[37,36976,33669],{"class":54},[37,36978,33672],{"class":309},[37,36980,583],{"class":54},[37,36982,33677],{"class":5288},[37,36984,70],{"class":50},[37,36986,33682],{"class":309},[37,36988,214],{"class":54},[37,36990,36991,36993,36995,36997,36999,37001,37003,37005,37007],{"class":39,"line":33648},[37,36992,33663],{"class":54},[37,36994,33666],{"class":309},[37,36996,33694],{"class":54},[37,36998,33697],{"class":309},[37,37000,583],{"class":54},[37,37002,33677],{"class":5288},[37,37004,70],{"class":50},[37,37006,33706],{"class":309},[37,37008,214],{"class":54},[37,37010,37011],{"class":39,"line":33654},[37,37012,33714],{"class":43},[37,37014,37015],{"class":39,"line":33660},[37,37016,33720],{"class":54},[37,37018,37019],{"class":39,"line":33687},[37,37020,33726],{"class":43},[37,37022,37023,37025,37027],{"class":39,"line":33711},[37,37024,33732],{"class":54},[37,37026,33735],{"class":309},[37,37028,214],{"class":54},[37,37030,37031,37033,37035],{"class":39,"line":33717},[37,37032,33743],{"class":54},[37,37034,33746],{"class":309},[37,37036,214],{"class":54},[37,37038,37039],{"class":39,"line":33723},[37,37040,33754],{"class":43},[37,37042,37043,37045,37047,37049,37051,37053,37055],{"class":39,"line":33729},[37,37044,31797],{"class":54},[37,37046,422],{"class":82},[37,37048,583],{"class":54},[37,37050,282],{"class":82},[37,37052,583],{"class":54},[37,37054,282],{"class":82},[37,37056,214],{"class":54},[37,37058,37059,37061,37063,37065,37067,37069,37071,37073,37075],{"class":39,"line":33740},[37,37060,33663],{"class":54},[37,37062,33666],{"class":309},[37,37064,33781],{"class":54},[37,37066,33672],{"class":309},[37,37068,583],{"class":54},[37,37070,33677],{"class":5288},[37,37072,70],{"class":50},[37,37074,33792],{"class":309},[37,37076,214],{"class":54},[37,37078,37079,37081,37083,37085,37087,37089,37091,37093,37095],{"class":39,"line":33751},[37,37080,33663],{"class":54},[37,37082,33666],{"class":309},[37,37084,33804],{"class":54},[37,37086,33697],{"class":309},[37,37088,583],{"class":54},[37,37090,33677],{"class":5288},[37,37092,70],{"class":50},[37,37094,33815],{"class":309},[37,37096,214],{"class":54},[37,37098,37099],{"class":39,"line":33757},[37,37100,33823],{"class":43},[37,37102,37103],{"class":39,"line":33774},[37,37104,33720],{"class":54},[37,37106,37107,37109,37111],{"class":39,"line":33797},[37,37108,33732],{"class":54},[37,37110,33666],{"class":309},[37,37112,214],{"class":54},[37,37114,37115,37117,37119],{"class":39,"line":33820},[37,37116,33743],{"class":54},[37,37118,33845],{"class":309},[37,37120,214],{"class":54},[37,37122,37123],{"class":39,"line":33826},[37,37124,33853],{"class":54},[37,37126,37127],{"class":39,"line":33831},[37,37128,2472],{"emptyLinePlaceholder":131},[37,37130,37131],{"class":39,"line":33840},[37,37132,33864],{"class":43},[37,37134,37135,37137,37139,37141,37143],{"class":39,"line":33850},[37,37136,1603],{"class":50},[37,37138,31290],{"class":82},[37,37140,3021],{"class":50},[37,37142,31295],{"class":309},[37,37144,3811],{"class":54},[37,37146,37147],{"class":39,"line":33856},[37,37148,33883],{"class":43},[37,37150,37151,37154,37156],{"class":39,"line":33861},[37,37152,37153],{"class":54},"    AlexNet",[37,37155,70],{"class":50},[37,37157,37158],{"class":54},"AlexNet()\n",[37,37160,37161,37163,37165],{"class":39,"line":33867},[37,37162,33900],{"class":54},[37,37164,70],{"class":50},[37,37166,33905],{"class":54},[37,37168,37169,37171,37173,37176,37178,37180,37182],{"class":39,"line":33880},[37,37170,33462],{"class":54},[37,37172,70],{"class":50},[37,37174,37175],{"class":54},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[37,37177,33918],{"class":5288},[37,37179,70],{"class":50},[37,37181,903],{"class":82},[37,37183,214],{"class":54},[37,37185,37186],{"class":39,"line":33886},[37,37187,33930],{"class":54},[158,37189,37190],{"start":58},[161,37191,33943],{},[27,37193,37195],{"className":29,"code":37194,"language":31,"meta":32,"style":32},"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",[34,37196,37197,37203,37213,37223,37233,37237,37247,37257,37268,37272,37276,37280,37288,37304,37314,37330,37340,37354,37358,37368,37378,37388,37394,37398,37402,37410,37414,37430,37438,37442,37446,37454,37462,37466,37470,37474,37478,37484,37488,37498,37506,37514,37518,37522,37526,37534,37538,37554,37558,37562,37566,37578,37582,37594,37598,37602,37614,37618,37628,37632,37636,37648,37652,37660,37664,37668,37676,37680,37688,37692,37696,37700,37704,37708,37724,37732,37736,37740,37788,37794,37798,37808,37816,37824,37828,37832,37836,37840,37848,37852,37868,37872,37880,37888],{"__ignoreMap":32},[37,37198,37199,37201],{"class":39,"line":40},[37,37200,51],{"class":50},[37,37202,30465],{"class":54},[37,37204,37205,37207,37209,37211],{"class":39,"line":47},[37,37206,51],{"class":50},[37,37208,31485],{"class":54},[37,37210,31453],{"class":50},[37,37212,31490],{"class":54},[37,37214,37215,37217,37219,37221],{"class":39,"line":58},[37,37216,30807],{"class":50},[37,37218,33971],{"class":54},[37,37220,51],{"class":50},[37,37222,33976],{"class":54},[37,37224,37225,37227,37229,37231],{"class":39,"line":64},[37,37226,30807],{"class":50},[37,37228,31468],{"class":54},[37,37230,51],{"class":50},[37,37232,31473],{"class":54},[37,37234,37235],{"class":39,"line":76},[37,37236,33991],{"class":43},[37,37238,37239,37241,37243,37245],{"class":39,"line":92},[37,37240,30807],{"class":50},[37,37242,31438],{"class":54},[37,37244,51],{"class":50},[37,37246,31443],{"class":54},[37,37248,37249,37251,37253,37255],{"class":39,"line":97},[37,37250,30807],{"class":50},[37,37252,31984],{"class":54},[37,37254,51],{"class":50},[37,37256,35626],{"class":54},[37,37258,37259,37261,37264,37266],{"class":39,"line":107},[37,37260,30807],{"class":50},[37,37262,37263],{"class":54}," 练习.AlexNet.model ",[37,37265,51],{"class":50},[37,37267,35626],{"class":54},[37,37269,37270],{"class":39,"line":1390},[37,37271,2472],{"emptyLinePlaceholder":131},[37,37273,37274],{"class":39,"line":1402},[37,37275,2472],{"emptyLinePlaceholder":131},[37,37277,37278],{"class":39,"line":1684},[37,37279,34020],{"class":43},[37,37281,37282,37284,37286],{"class":39,"line":1689},[37,37283,32017],{"class":50},[37,37285,34027],{"class":2035},[37,37287,32023],{"class":54},[37,37289,37290,37292,37294,37296,37298,37300,37302],{"class":39,"line":1695},[37,37291,34034],{"class":54},[37,37293,70],{"class":50},[37,37295,31525],{"class":54},[37,37297,31528],{"class":5288},[37,37299,70],{"class":50},[37,37301,31533],{"class":309},[37,37303,31536],{"class":54},[37,37305,37306,37308,37310,37312],{"class":39,"line":1700},[37,37307,34051],{"class":5288},[37,37309,70],{"class":50},[37,37311,34056],{"class":82},[37,37313,31536],{"class":54},[37,37315,37316,37318,37320,37322,37324,37326,37328],{"class":39,"line":1714},[37,37317,34063],{"class":5288},[37,37319,70],{"class":50},[37,37321,31563],{"class":54},[37,37323,31566],{"class":5288},[37,37325,70],{"class":50},[37,37327,35518],{"class":82},[37,37329,31574],{"class":54},[37,37331,37332,37334,37336,37338],{"class":39,"line":1719},[37,37333,34080],{"class":5288},[37,37335,70],{"class":50},[37,37337,31546],{"class":82},[37,37339,214],{"class":54},[37,37341,37342,37344,37346,37348,37350,37352],{"class":39,"line":1725},[37,37343,34091],{"class":54},[37,37345,70],{"class":50},[37,37347,31604],{"class":54},[37,37349,31607],{"class":5288},[37,37351,70],{"class":50},[37,37353,34102],{"class":54},[37,37355,37356],{"class":39,"line":1746},[37,37357,34107],{"class":43},[37,37359,37360,37362,37364,37366],{"class":39,"line":1751},[37,37361,34112],{"class":5288},[37,37363,70],{"class":50},[37,37365,422],{"class":82},[37,37367,31536],{"class":54},[37,37369,37370,37372,37374,37376],{"class":39,"line":1765},[37,37371,34123],{"class":5288},[37,37373,70],{"class":50},[37,37375,31546],{"class":82},[37,37377,31536],{"class":54},[37,37379,37380,37382,37384,37386],{"class":39,"line":1770},[37,37381,34134],{"class":5288},[37,37383,70],{"class":50},[37,37385,396],{"class":82},[37,37387,214],{"class":54},[37,37389,37390,37392],{"class":39,"line":1799},[37,37391,4162],{"class":50},[37,37393,34147],{"class":54},[37,37395,37396],{"class":39,"line":1804},[37,37397,2472],{"emptyLinePlaceholder":131},[37,37399,37400],{"class":39,"line":1821},[37,37401,34156],{"class":43},[37,37403,37404,37406,37408],{"class":39,"line":1826},[37,37405,32017],{"class":50},[37,37407,34163],{"class":2035},[37,37409,34166],{"class":54},[37,37411,37412],{"class":39,"line":1831},[37,37413,34171],{"class":43},[37,37415,37416,37418,37420,37422,37424,37426,37428],{"class":39,"line":1836},[37,37417,31307],{"class":54},[37,37419,70],{"class":50},[37,37421,31314],{"class":309},[37,37423,1776],{"class":50},[37,37425,31319],{"class":54},[37,37427,1773],{"class":50},[37,37429,34188],{"class":309},[37,37431,37432,37434,37436],{"class":39,"line":1850},[37,37433,31359],{"class":54},[37,37435,70],{"class":50},[37,37437,32359],{"class":54},[37,37439,37440],{"class":39,"line":1855},[37,37441,2472],{"emptyLinePlaceholder":131},[37,37443,37444],{"class":39,"line":2649},[37,37445,34205],{"class":43},[37,37447,37448,37450,37452],{"class":39,"line":2663},[37,37449,34210],{"class":54},[37,37451,70],{"class":50},[37,37453,32412],{"class":82},[37,37455,37456,37458,37460],{"class":39,"line":2671},[37,37457,34219],{"class":54},[37,37459,70],{"class":50},[37,37461,3157],{"class":82},[37,37463,37464],{"class":39,"line":2676},[37,37465,2472],{"emptyLinePlaceholder":131},[37,37467,37468],{"class":39,"line":2682},[37,37469,34232],{"class":43},[37,37471,37472],{"class":39,"line":2688},[37,37473,34237],{"class":43},[37,37475,37476],{"class":39,"line":2693},[37,37477,34242],{"class":43},[37,37479,37480,37482],{"class":39,"line":8020},[37,37481,34247],{"class":50},[37,37483,32953],{"class":54},[37,37485,37486],{"class":39,"line":8044},[37,37487,34254],{"class":43},[37,37489,37490,37492,37494,37496],{"class":39,"line":8049},[37,37491,3475],{"class":50},[37,37493,34261],{"class":54},[37,37495,26116],{"class":50},[37,37497,34266],{"class":54},[37,37499,37500,37502,37504],{"class":39,"line":8055},[37,37501,34271],{"class":54},[37,37503,70],{"class":50},[37,37505,34276],{"class":54},[37,37507,37508,37510,37512],{"class":39,"line":8082},[37,37509,34281],{"class":54},[37,37511,70],{"class":50},[37,37513,34286],{"class":54},[37,37515,37516],{"class":39,"line":8087},[37,37517,34291],{"class":43},[37,37519,37520],{"class":39,"line":8093},[37,37521,32944],{"class":54},[37,37523,37524],{"class":39,"line":8105},[37,37525,34300],{"class":43},[37,37527,37528,37530,37532],{"class":39,"line":8117},[37,37529,32729],{"class":54},[37,37531,70],{"class":50},[37,37533,34309],{"class":54},[37,37535,37536],{"class":39,"line":8129},[37,37537,34314],{"class":43},[37,37539,37540,37542,37544,37546,37548,37550,37552],{"class":39,"line":9788},[37,37541,32746],{"class":54},[37,37543,70],{"class":50},[37,37545,32751],{"class":54},[37,37547,32754],{"class":5288},[37,37549,70],{"class":50},[37,37551,422],{"class":82},[37,37553,214],{"class":54},[37,37555,37556],{"class":39,"line":9813},[37,37557,34335],{"class":43},[37,37559,37560],{"class":39,"line":9836},[37,37561,34340],{"class":43},[37,37563,37564],{"class":39,"line":9860},[37,37565,34345],{"class":43},[37,37567,37568,37570,37572,37574,37576],{"class":39,"line":9865},[37,37569,34350],{"class":54},[37,37571,9549],{"class":50},[37,37573,32856],{"class":54},[37,37575,3021],{"class":50},[37,37577,34359],{"class":54},[37,37579,37580],{"class":39,"line":9870},[37,37581,34364],{"class":43},[37,37583,37584,37586,37588,37590,37592],{"class":39,"line":9875},[37,37585,34369],{"class":54},[37,37587,9549],{"class":50},[37,37589,34374],{"class":54},[37,37591,396],{"class":82},[37,37593,214],{"class":54},[37,37595,37596],{"class":39,"line":9884},[37,37597,2472],{"emptyLinePlaceholder":131},[37,37599,37600],{"class":39,"line":9889},[37,37601,34387],{"class":43},[37,37603,37604,37606,37608,37610,37612],{"class":39,"line":9895},[37,37605,34392],{"class":54},[37,37607,70],{"class":50},[37,37609,34397],{"class":54},[37,37611,787],{"class":50},[37,37613,34402],{"class":54},[37,37615,37616],{"class":39,"line":9916},[37,37617,34407],{"class":43},[37,37619,37620,37622,37624,37626],{"class":39,"line":9922},[37,37621,32520],{"class":82},[37,37623,208],{"class":54},[37,37625,34416],{"class":309},[37,37627,34419],{"class":54},[37,37629,37630],{"class":39,"line":9936},[37,37631,2472],{"emptyLinePlaceholder":131},[37,37633,37634],{"class":39,"line":9942},[37,37635,34428],{"class":43},[37,37637,37638,37640,37642,37644,37646],{"class":39,"line":9969},[37,37639,1603],{"class":50},[37,37641,31290],{"class":82},[37,37643,3021],{"class":50},[37,37645,31295],{"class":309},[37,37647,3811],{"class":54},[37,37649,37650],{"class":39,"line":9978},[37,37651,34445],{"class":43},[37,37653,37654,37656,37658],{"class":39,"line":9984},[37,37655,31359],{"class":54},[37,37657,70],{"class":50},[37,37659,37158],{"class":54},[37,37661,37662],{"class":39,"line":9992},[37,37663,34458],{"class":43},[37,37665,37666],{"class":39,"line":9997},[37,37667,34463],{"class":43},[37,37669,37670,37672,37674],{"class":39,"line":16676},[37,37671,34468],{"class":54},[37,37673,34471],{"class":309},[37,37675,30567],{"class":54},[37,37677,37678],{"class":39,"line":16682},[37,37679,34478],{"class":43},[37,37681,37682,37684,37686],{"class":39,"line":16705},[37,37683,34091],{"class":54},[37,37685,70],{"class":50},[37,37687,34487],{"class":54},[37,37689,37690],{"class":39,"line":16711},[37,37691,34492],{"class":43},[37,37693,37694],{"class":39,"line":16734},[37,37695,34497],{"class":54},[37,37697,37698],{"class":39,"line":16748},[37,37699,2472],{"emptyLinePlaceholder":131},[37,37701,37702],{"class":39,"line":16768},[37,37703,34506],{"class":43},[37,37705,37706],{"class":39,"line":16774},[37,37707,34511],{"class":43},[37,37709,37710,37712,37714,37716,37718,37720,37722],{"class":39,"line":16785},[37,37711,31307],{"class":54},[37,37713,70],{"class":50},[37,37715,31314],{"class":309},[37,37717,1776],{"class":50},[37,37719,31319],{"class":54},[37,37721,1773],{"class":50},[37,37723,34188],{"class":309},[37,37725,37726,37728,37730],{"class":39,"line":16808},[37,37727,31359],{"class":54},[37,37729,70],{"class":50},[37,37731,32359],{"class":54},[37,37733,37734],{"class":39,"line":16830},[37,37735,34540],{"class":43},[37,37737,37738],{"class":39,"line":16835},[37,37739,34545],{"class":43},[37,37741,37742,37744,37746,37748,37750,37752,37754,37756,37758,37760,37762,37764,37766,37768,37770,37772,37774,37776,37778,37780,37782,37784,37786],{"class":39,"line":16841},[37,37743,34550],{"class":54},[37,37745,70],{"class":50},[37,37747,1093],{"class":54},[37,37749,34557],{"class":309},[37,37751,583],{"class":54},[37,37753,34562],{"class":309},[37,37755,583],{"class":54},[37,37757,34567],{"class":309},[37,37759,583],{"class":54},[37,37761,34572],{"class":309},[37,37763,583],{"class":54},[37,37765,34577],{"class":309},[37,37767,583],{"class":54},[37,37769,34582],{"class":309},[37,37771,583],{"class":54},[37,37773,34587],{"class":309},[37,37775,583],{"class":54},[37,37777,34592],{"class":309},[37,37779,583],{"class":54},[37,37781,34597],{"class":309},[37,37783,583],{"class":54},[37,37785,34602],{"class":309},[37,37787,33315],{"class":54},[37,37789,37790,37792],{"class":39,"line":16855},[37,37791,34247],{"class":50},[37,37793,32953],{"class":54},[37,37795,37796],{"class":39,"line":16868},[37,37797,34615],{"class":43},[37,37799,37800,37802,37804,37806],{"class":39,"line":16873},[37,37801,3475],{"class":50},[37,37803,34622],{"class":54},[37,37805,26116],{"class":50},[37,37807,34266],{"class":54},[37,37809,37810,37812,37814],{"class":39,"line":16887},[37,37811,32679],{"class":54},[37,37813,70],{"class":50},[37,37815,32684],{"class":54},[37,37817,37818,37820,37822],{"class":39,"line":16892},[37,37819,32694],{"class":54},[37,37821,70],{"class":50},[37,37823,32699],{"class":54},[37,37825,37826],{"class":39,"line":16898},[37,37827,2472],{"emptyLinePlaceholder":131},[37,37829,37830],{"class":39,"line":16903},[37,37831,34651],{"class":43},[37,37833,37834],{"class":39,"line":16917},[37,37835,32944],{"class":54},[37,37837,37838],{"class":39,"line":16922},[37,37839,34660],{"class":43},[37,37841,37842,37844,37846],{"class":39,"line":16927},[37,37843,32729],{"class":54},[37,37845,70],{"class":50},[37,37847,32734],{"class":54},[37,37849,37850],{"class":39,"line":16941},[37,37851,34673],{"class":43},[37,37853,37854,37856,37858,37860,37862,37864,37866],{"class":39,"line":16953},[37,37855,32746],{"class":54},[37,37857,70],{"class":50},[37,37859,32751],{"class":54},[37,37861,32754],{"class":5288},[37,37863,70],{"class":50},[37,37865,422],{"class":82},[37,37867,214],{"class":54},[37,37869,37870],{"class":39,"line":16958},[37,37871,34694],{"class":43},[37,37873,37874,37876,37878],{"class":39,"line":16971},[37,37875,34699],{"class":54},[37,37877,70],{"class":50},[37,37879,34704],{"class":54},[37,37881,37882,37884,37886],{"class":39,"line":16976},[37,37883,34709],{"class":54},[37,37885,70],{"class":50},[37,37887,34714],{"class":54},[37,37889,37890,37892,37894,37896,37898,37900,37902,37904],{"class":39,"line":16981},[37,37891,34719],{"class":82},[37,37893,208],{"class":54},[37,37895,34724],{"class":309},[37,37897,34727],{"class":54},[37,37899,34730],{"class":309},[37,37901,583],{"class":54},[37,37903,34735],{"class":309},[37,37905,34738],{"class":54},[175,37907,37909],{"id":37908},"_22vgg","2.2.VGG",[22070,37911,37913],{"id":37912},"_221原理","2.2.1.原理",[14,37915,37916],{},[119,37917],{"alt":32,"src":37918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[14,37920,37921],{},[119,37922],{"alt":32,"src":37923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[14,37925,37926],{},[119,37927],{"alt":32,"src":37928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[14,37930,37931],{},"参数详细描述：",[14,37933,37934],{},[119,37935],{"alt":32,"src":37936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[14,37938,37939],{},[119,37940],{"alt":32,"src":37941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[14,37943,37944],{},[119,37945],{"alt":32,"src":37946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[14,37948,37949],{},[119,37950],{"alt":32,"src":37951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[14,37953,37954],{},[119,37955],{"alt":32,"src":37956},"\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",[22070,37958,37960],{"id":37959},"_222代码实现","2.2.2.代码实现",[158,37962,37963],{},[161,37964,37965],{},"网络搭建",[27,37967,37969],{"className":29,"code":37968,"language":31,"meta":32,"style":32},"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",[34,37970,37971,37977,37989,37999,38009,38013,38030,38038,38057,38062,38067,38079,38117,38122,38158,38162,38191,38196,38201,38212,38248,38252,38288,38292,38320,38324,38329,38340,38376,38380,38416,38420,38456,38460,38488,38492,38497,38508,38545,38549,38585,38589,38625,38629,38657,38661,38666,38677,38713,38717,38753,38757,38793,38797,38825,38829,38834,38845,38850,38855,38860,38881,38885,38897,38901,38913,38917,38921,38926,38931,38946,38951,38961,38966,38981,38986,39005,39010,39019,39024,39034,39039,39044,39058,39063,39077,39085,39089,39093,39101,39112,39123,39134,39145,39156,39167,39173,39177,39182,39195,39215,39221,39230],{"__ignoreMap":32},[37,37972,37973,37975],{"class":39,"line":40},[37,37974,51],{"class":50},[37,37976,30465],{"class":54},[37,37978,37979,37981,37984,37986],{"class":39,"line":47},[37,37980,30807],{"class":50},[37,37982,37983],{"class":54}," sympy.core.sympify ",[37,37985,51],{"class":50},[37,37987,37988],{"class":54}," kernS\n",[37,37990,37991,37993,37995,37997],{"class":39,"line":58},[37,37992,30807],{"class":50},[37,37994,30810],{"class":54},[37,37996,51],{"class":50},[37,37998,30815],{"class":54},[37,38000,38001,38003,38005,38007],{"class":39,"line":64},[37,38002,30807],{"class":50},[37,38004,30827],{"class":54},[37,38006,51],{"class":50},[37,38008,30832],{"class":54},[37,38010,38011],{"class":39,"line":76},[37,38012,2472],{"emptyLinePlaceholder":131},[37,38014,38015,38017,38020,38022,38024,38026,38028],{"class":39,"line":92},[37,38016,14766],{"class":50},[37,38018,38019],{"class":2035}," VGG16",[37,38021,208],{"class":54},[37,38023,30848],{"class":2035},[37,38025,761],{"class":54},[37,38027,30853],{"class":2035},[37,38029,30856],{"class":54},[37,38031,38032,38034,38036],{"class":39,"line":97},[37,38033,30871],{"class":50},[37,38035,30874],{"class":82},[37,38037,30877],{"class":54},[37,38039,38040,38042,38044,38047,38049,38051,38053,38055],{"class":39,"line":107},[37,38041,30887],{"class":82},[37,38043,208],{"class":54},[37,38045,38046],{"class":82},"VGG16",[37,38048,12507],{"class":54},[37,38050,30893],{"class":82},[37,38052,30896],{"class":54},[37,38054,30899],{"class":82},[37,38056,2048],{"class":54},[37,38058,38059],{"class":39,"line":1390},[37,38060,38061],{"class":43},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[37,38063,38064],{"class":39,"line":1402},[37,38065,38066],{"class":43},"        # 这里用的是灰度图\n",[37,38068,38069,38071,38074,38076],{"class":39,"line":1684},[37,38070,30915],{"class":82},[37,38072,38073],{"class":54},".block1",[37,38075,70],{"class":50},[37,38077,38078],{"class":54},"nn.Sequential(\n",[37,38080,38081,38084,38086,38088,38090,38092,38094,38096,38098,38100,38102,38104,38106,38108,38110,38112,38114],{"class":39,"line":1689},[37,38082,38083],{"class":54},"            nn.Conv2d(",[37,38085,30926],{"class":5288},[37,38087,70],{"class":50},[37,38089,422],{"class":82},[37,38091,583],{"class":54},[37,38093,30935],{"class":5288},[37,38095,70],{"class":50},[37,38097,408],{"class":82},[37,38099,583],{"class":54},[37,38101,30944],{"class":5288},[37,38103,70],{"class":50},[37,38105,276],{"class":82},[37,38107,583],{"class":54},[37,38109,30953],{"class":5288},[37,38111,70],{"class":50},[37,38113,422],{"class":82},[37,38115,38116],{"class":54},"),\n",[37,38118,38119],{"class":39,"line":1695},[37,38120,38121],{"class":54},"            nn.ReLU(),\n",[37,38123,38124,38126,38128,38130,38132,38134,38136,38138,38140,38142,38144,38146,38148,38150,38152,38154,38156],{"class":39,"line":1700},[37,38125,38083],{"class":54},[37,38127,30926],{"class":5288},[37,38129,70],{"class":50},[37,38131,408],{"class":82},[37,38133,583],{"class":54},[37,38135,30935],{"class":5288},[37,38137,70],{"class":50},[37,38139,408],{"class":82},[37,38141,583],{"class":54},[37,38143,30944],{"class":5288},[37,38145,70],{"class":50},[37,38147,276],{"class":82},[37,38149,583],{"class":54},[37,38151,30953],{"class":5288},[37,38153,70],{"class":50},[37,38155,422],{"class":82},[37,38157,38116],{"class":54},[37,38159,38160],{"class":39,"line":1714},[37,38161,38121],{"class":54},[37,38163,38164,38167,38169,38171,38173,38175,38177,38179,38181,38183,38185,38187,38189],{"class":39,"line":1719},[37,38165,38166],{"class":54},"            nn.MaxPool2d(",[37,38168,30944],{"class":5288},[37,38170,70],{"class":50},[37,38172,282],{"class":82},[37,38174,583],{"class":54},[37,38176,30999],{"class":5288},[37,38178,70],{"class":50},[37,38180,282],{"class":82},[37,38182,583],{"class":54},[37,38184,30953],{"class":5288},[37,38186,70],{"class":50},[37,38188,396],{"class":82},[37,38190,214],{"class":54},[37,38192,38193],{"class":39,"line":1725},[37,38194,38195],{"class":54},"        )\n",[37,38197,38198],{"class":39,"line":1746},[37,38199,38200],{"class":43},"        # 第二层\n",[37,38202,38203,38205,38208,38210],{"class":39,"line":1751},[37,38204,30915],{"class":82},[37,38206,38207],{"class":54},".block2",[37,38209,70],{"class":50},[37,38211,38078],{"class":54},[37,38213,38214,38216,38218,38220,38222,38224,38226,38228,38230,38232,38234,38236,38238,38240,38242,38244,38246],{"class":39,"line":1765},[37,38215,38083],{"class":54},[37,38217,30926],{"class":5288},[37,38219,70],{"class":50},[37,38221,408],{"class":82},[37,38223,583],{"class":54},[37,38225,30935],{"class":5288},[37,38227,70],{"class":50},[37,38229,32140],{"class":82},[37,38231,583],{"class":54},[37,38233,30944],{"class":5288},[37,38235,70],{"class":50},[37,38237,276],{"class":82},[37,38239,583],{"class":54},[37,38241,30953],{"class":5288},[37,38243,70],{"class":50},[37,38245,422],{"class":82},[37,38247,38116],{"class":54},[37,38249,38250],{"class":39,"line":1770},[37,38251,38121],{"class":54},[37,38253,38254,38256,38258,38260,38262,38264,38266,38268,38270,38272,38274,38276,38278,38280,38282,38284,38286],{"class":39,"line":1799},[37,38255,38083],{"class":54},[37,38257,30926],{"class":5288},[37,38259,70],{"class":50},[37,38261,32140],{"class":82},[37,38263,583],{"class":54},[37,38265,30935],{"class":5288},[37,38267,70],{"class":50},[37,38269,32140],{"class":82},[37,38271,583],{"class":54},[37,38273,30944],{"class":5288},[37,38275,70],{"class":50},[37,38277,276],{"class":82},[37,38279,583],{"class":54},[37,38281,30953],{"class":5288},[37,38283,70],{"class":50},[37,38285,422],{"class":82},[37,38287,38116],{"class":54},[37,38289,38290],{"class":39,"line":1804},[37,38291,38121],{"class":54},[37,38293,38294,38296,38298,38300,38302,38304,38306,38308,38310,38312,38314,38316,38318],{"class":39,"line":1821},[37,38295,38166],{"class":54},[37,38297,30944],{"class":5288},[37,38299,70],{"class":50},[37,38301,282],{"class":82},[37,38303,583],{"class":54},[37,38305,30999],{"class":5288},[37,38307,70],{"class":50},[37,38309,282],{"class":82},[37,38311,583],{"class":54},[37,38313,30953],{"class":5288},[37,38315,70],{"class":50},[37,38317,396],{"class":82},[37,38319,214],{"class":54},[37,38321,38322],{"class":39,"line":1826},[37,38323,38195],{"class":54},[37,38325,38326],{"class":39,"line":1831},[37,38327,38328],{"class":43},"        # 第三层\n",[37,38330,38331,38333,38336,38338],{"class":39,"line":1836},[37,38332,30915],{"class":82},[37,38334,38335],{"class":54},".block3",[37,38337,70],{"class":50},[37,38339,38078],{"class":54},[37,38341,38342,38344,38346,38348,38350,38352,38354,38356,38358,38360,38362,38364,38366,38368,38370,38372,38374],{"class":39,"line":1850},[37,38343,38083],{"class":54},[37,38345,30926],{"class":5288},[37,38347,70],{"class":50},[37,38349,32140],{"class":82},[37,38351,583],{"class":54},[37,38353,30935],{"class":5288},[37,38355,70],{"class":50},[37,38357,34939],{"class":82},[37,38359,583],{"class":54},[37,38361,30944],{"class":5288},[37,38363,70],{"class":50},[37,38365,276],{"class":82},[37,38367,583],{"class":54},[37,38369,30953],{"class":5288},[37,38371,70],{"class":50},[37,38373,422],{"class":82},[37,38375,38116],{"class":54},[37,38377,38378],{"class":39,"line":1855},[37,38379,38121],{"class":54},[37,38381,38382,38384,38386,38388,38390,38392,38394,38396,38398,38400,38402,38404,38406,38408,38410,38412,38414],{"class":39,"line":2649},[37,38383,38083],{"class":54},[37,38385,30926],{"class":5288},[37,38387,70],{"class":50},[37,38389,34939],{"class":82},[37,38391,583],{"class":54},[37,38393,30935],{"class":5288},[37,38395,70],{"class":50},[37,38397,34939],{"class":82},[37,38399,583],{"class":54},[37,38401,30944],{"class":5288},[37,38403,70],{"class":50},[37,38405,276],{"class":82},[37,38407,583],{"class":54},[37,38409,30953],{"class":5288},[37,38411,70],{"class":50},[37,38413,422],{"class":82},[37,38415,38116],{"class":54},[37,38417,38418],{"class":39,"line":2663},[37,38419,38121],{"class":54},[37,38421,38422,38424,38426,38428,38430,38432,38434,38436,38438,38440,38442,38444,38446,38448,38450,38452,38454],{"class":39,"line":2671},[37,38423,38083],{"class":54},[37,38425,30926],{"class":5288},[37,38427,70],{"class":50},[37,38429,34939],{"class":82},[37,38431,583],{"class":54},[37,38433,30935],{"class":5288},[37,38435,70],{"class":50},[37,38437,34939],{"class":82},[37,38439,583],{"class":54},[37,38441,30944],{"class":5288},[37,38443,70],{"class":50},[37,38445,276],{"class":82},[37,38447,583],{"class":54},[37,38449,30953],{"class":5288},[37,38451,70],{"class":50},[37,38453,422],{"class":82},[37,38455,38116],{"class":54},[37,38457,38458],{"class":39,"line":2676},[37,38459,38121],{"class":54},[37,38461,38462,38464,38466,38468,38470,38472,38474,38476,38478,38480,38482,38484,38486],{"class":39,"line":2682},[37,38463,38166],{"class":54},[37,38465,30944],{"class":5288},[37,38467,70],{"class":50},[37,38469,282],{"class":82},[37,38471,583],{"class":54},[37,38473,30999],{"class":5288},[37,38475,70],{"class":50},[37,38477,282],{"class":82},[37,38479,583],{"class":54},[37,38481,30953],{"class":5288},[37,38483,70],{"class":50},[37,38485,396],{"class":82},[37,38487,214],{"class":54},[37,38489,38490],{"class":39,"line":2688},[37,38491,38195],{"class":54},[37,38493,38494],{"class":39,"line":2693},[37,38495,38496],{"class":43},"        # 第四层\n",[37,38498,38499,38501,38504,38506],{"class":39,"line":8020},[37,38500,30915],{"class":82},[37,38502,38503],{"class":54},".block4",[37,38505,70],{"class":50},[37,38507,38078],{"class":54},[37,38509,38510,38512,38514,38516,38518,38520,38522,38524,38527,38529,38531,38533,38535,38537,38539,38541,38543],{"class":39,"line":8044},[37,38511,38083],{"class":54},[37,38513,30926],{"class":5288},[37,38515,70],{"class":50},[37,38517,34939],{"class":82},[37,38519,583],{"class":54},[37,38521,30935],{"class":5288},[37,38523,70],{"class":50},[37,38525,38526],{"class":82},"512",[37,38528,583],{"class":54},[37,38530,30944],{"class":5288},[37,38532,70],{"class":50},[37,38534,276],{"class":82},[37,38536,583],{"class":54},[37,38538,30953],{"class":5288},[37,38540,70],{"class":50},[37,38542,422],{"class":82},[37,38544,38116],{"class":54},[37,38546,38547],{"class":39,"line":8049},[37,38548,38121],{"class":54},[37,38550,38551,38553,38555,38557,38559,38561,38563,38565,38567,38569,38571,38573,38575,38577,38579,38581,38583],{"class":39,"line":8055},[37,38552,38083],{"class":54},[37,38554,30926],{"class":5288},[37,38556,70],{"class":50},[37,38558,38526],{"class":82},[37,38560,583],{"class":54},[37,38562,30935],{"class":5288},[37,38564,70],{"class":50},[37,38566,38526],{"class":82},[37,38568,583],{"class":54},[37,38570,30944],{"class":5288},[37,38572,70],{"class":50},[37,38574,276],{"class":82},[37,38576,583],{"class":54},[37,38578,30953],{"class":5288},[37,38580,70],{"class":50},[37,38582,422],{"class":82},[37,38584,38116],{"class":54},[37,38586,38587],{"class":39,"line":8082},[37,38588,38121],{"class":54},[37,38590,38591,38593,38595,38597,38599,38601,38603,38605,38607,38609,38611,38613,38615,38617,38619,38621,38623],{"class":39,"line":8087},[37,38592,38083],{"class":54},[37,38594,30926],{"class":5288},[37,38596,70],{"class":50},[37,38598,38526],{"class":82},[37,38600,583],{"class":54},[37,38602,30935],{"class":5288},[37,38604,70],{"class":50},[37,38606,38526],{"class":82},[37,38608,583],{"class":54},[37,38610,30944],{"class":5288},[37,38612,70],{"class":50},[37,38614,276],{"class":82},[37,38616,583],{"class":54},[37,38618,30953],{"class":5288},[37,38620,70],{"class":50},[37,38622,422],{"class":82},[37,38624,38116],{"class":54},[37,38626,38627],{"class":39,"line":8093},[37,38628,38121],{"class":54},[37,38630,38631,38633,38635,38637,38639,38641,38643,38645,38647,38649,38651,38653,38655],{"class":39,"line":8105},[37,38632,38166],{"class":54},[37,38634,30944],{"class":5288},[37,38636,70],{"class":50},[37,38638,282],{"class":82},[37,38640,583],{"class":54},[37,38642,30999],{"class":5288},[37,38644,70],{"class":50},[37,38646,282],{"class":82},[37,38648,583],{"class":54},[37,38650,30953],{"class":5288},[37,38652,70],{"class":50},[37,38654,396],{"class":82},[37,38656,214],{"class":54},[37,38658,38659],{"class":39,"line":8117},[37,38660,38195],{"class":54},[37,38662,38663],{"class":39,"line":8129},[37,38664,38665],{"class":43},"        # 第五层\n",[37,38667,38668,38670,38673,38675],{"class":39,"line":9788},[37,38669,30915],{"class":82},[37,38671,38672],{"class":54},".block5",[37,38674,70],{"class":50},[37,38676,38078],{"class":54},[37,38678,38679,38681,38683,38685,38687,38689,38691,38693,38695,38697,38699,38701,38703,38705,38707,38709,38711],{"class":39,"line":9813},[37,38680,38083],{"class":54},[37,38682,30926],{"class":5288},[37,38684,70],{"class":50},[37,38686,38526],{"class":82},[37,38688,583],{"class":54},[37,38690,30935],{"class":5288},[37,38692,70],{"class":50},[37,38694,38526],{"class":82},[37,38696,583],{"class":54},[37,38698,30944],{"class":5288},[37,38700,70],{"class":50},[37,38702,276],{"class":82},[37,38704,583],{"class":54},[37,38706,30953],{"class":5288},[37,38708,70],{"class":50},[37,38710,422],{"class":82},[37,38712,38116],{"class":54},[37,38714,38715],{"class":39,"line":9836},[37,38716,38121],{"class":54},[37,38718,38719,38721,38723,38725,38727,38729,38731,38733,38735,38737,38739,38741,38743,38745,38747,38749,38751],{"class":39,"line":9860},[37,38720,38083],{"class":54},[37,38722,30926],{"class":5288},[37,38724,70],{"class":50},[37,38726,38526],{"class":82},[37,38728,583],{"class":54},[37,38730,30935],{"class":5288},[37,38732,70],{"class":50},[37,38734,38526],{"class":82},[37,38736,583],{"class":54},[37,38738,30944],{"class":5288},[37,38740,70],{"class":50},[37,38742,276],{"class":82},[37,38744,583],{"class":54},[37,38746,30953],{"class":5288},[37,38748,70],{"class":50},[37,38750,422],{"class":82},[37,38752,38116],{"class":54},[37,38754,38755],{"class":39,"line":9865},[37,38756,38121],{"class":54},[37,38758,38759,38761,38763,38765,38767,38769,38771,38773,38775,38777,38779,38781,38783,38785,38787,38789,38791],{"class":39,"line":9870},[37,38760,38083],{"class":54},[37,38762,30926],{"class":5288},[37,38764,70],{"class":50},[37,38766,38526],{"class":82},[37,38768,583],{"class":54},[37,38770,30935],{"class":5288},[37,38772,70],{"class":50},[37,38774,38526],{"class":82},[37,38776,583],{"class":54},[37,38778,30944],{"class":5288},[37,38780,70],{"class":50},[37,38782,276],{"class":82},[37,38784,583],{"class":54},[37,38786,30953],{"class":5288},[37,38788,70],{"class":50},[37,38790,422],{"class":82},[37,38792,38116],{"class":54},[37,38794,38795],{"class":39,"line":9875},[37,38796,38121],{"class":54},[37,38798,38799,38801,38803,38805,38807,38809,38811,38813,38815,38817,38819,38821,38823],{"class":39,"line":9884},[37,38800,38166],{"class":54},[37,38802,30944],{"class":5288},[37,38804,70],{"class":50},[37,38806,282],{"class":82},[37,38808,583],{"class":54},[37,38810,30999],{"class":5288},[37,38812,70],{"class":50},[37,38814,282],{"class":82},[37,38816,583],{"class":54},[37,38818,30953],{"class":5288},[37,38820,70],{"class":50},[37,38822,396],{"class":82},[37,38824,214],{"class":54},[37,38826,38827],{"class":39,"line":9889},[37,38828,38195],{"class":54},[37,38830,38831],{"class":39,"line":9895},[37,38832,38833],{"class":43},"        # 全连接层\n",[37,38835,38836,38838,38841,38843],{"class":39,"line":9916},[37,38837,30915],{"class":82},[37,38839,38840],{"class":54},".block6",[37,38842,70],{"class":50},[37,38844,38078],{"class":54},[37,38846,38847],{"class":39,"line":9922},[37,38848,38849],{"class":43},"            # 平展操作\n",[37,38851,38852],{"class":39,"line":9936},[37,38853,38854],{"class":43},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[37,38856,38857],{"class":39,"line":9942},[37,38858,38859],{"class":54},"            nn.Flatten(),\n",[37,38861,38862,38865,38867,38869,38871,38873,38875,38877,38879],{"class":39,"line":9969},[37,38863,38864],{"class":54},"            nn.Linear(",[37,38866,574],{"class":82},[37,38868,659],{"class":50},[37,38870,574],{"class":82},[37,38872,659],{"class":50},[37,38874,38526],{"class":82},[37,38876,583],{"class":54},[37,38878,34939],{"class":82},[37,38880,38116],{"class":54},[37,38882,38883],{"class":39,"line":9978},[37,38884,38121],{"class":54},[37,38886,38887,38889,38891,38893,38895],{"class":39,"line":9984},[37,38888,38864],{"class":54},[37,38890,34939],{"class":82},[37,38892,583],{"class":54},[37,38894,32140],{"class":82},[37,38896,38116],{"class":54},[37,38898,38899],{"class":39,"line":9992},[37,38900,38121],{"class":54},[37,38902,38903,38905,38907,38909,38911],{"class":39,"line":9997},[37,38904,38864],{"class":54},[37,38906,32140],{"class":82},[37,38908,583],{"class":54},[37,38910,650],{"class":82},[37,38912,214],{"class":54},[37,38914,38915],{"class":39,"line":16676},[37,38916,38195],{"class":54},[37,38918,38919],{"class":39,"line":16682},[37,38920,2472],{"emptyLinePlaceholder":131},[37,38922,38923],{"class":39,"line":16705},[37,38924,38925],{"class":43},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[37,38927,38928],{"class":39,"line":16711},[37,38929,38930],{"class":43},"        # 循环遍历模型\n",[37,38932,38933,38935,38938,38940,38943],{"class":39,"line":16734},[37,38934,3475],{"class":50},[37,38936,38937],{"class":54}," m ",[37,38939,26116],{"class":50},[37,38941,38942],{"class":82}," self",[37,38944,38945],{"class":54},".modules():\n",[37,38947,38948],{"class":39,"line":16748},[37,38949,38950],{"class":43},"            # print(m)\n",[37,38952,38953,38955,38958],{"class":39,"line":16768},[37,38954,4714],{"class":50},[37,38956,38957],{"class":82}," isinstance",[37,38959,38960],{"class":54},"(m,nn.Conv2d):\n",[37,38962,38963],{"class":39,"line":16774},[37,38964,38965],{"class":43},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[37,38967,38968,38971,38974,38976,38979],{"class":39,"line":16785},[37,38969,38970],{"class":54},"                nn.init.kaiming_normal_(m.weight,",[37,38972,38973],{"class":5288},"nonlinearity",[37,38975,70],{"class":50},[37,38977,38978],{"class":309},"'relu'",[37,38980,214],{"class":54},[37,38982,38983],{"class":39,"line":16808},[37,38984,38985],{"class":43},"                # 判断b参数是否存在\n",[37,38987,38988,38991,38994,38997,39000,39003],{"class":39,"line":16830},[37,38989,38990],{"class":50},"                if",[37,38992,38993],{"class":54}," m.bias ",[37,38995,38996],{"class":50},"is",[37,38998,38999],{"class":50}," not",[37,39001,39002],{"class":82}," None",[37,39004,3811],{"class":54},[37,39006,39007],{"class":39,"line":16835},[37,39008,39009],{"class":43},"                    # 如果参数不存在的化初始化b=0\n",[37,39011,39012,39015,39017],{"class":39,"line":16841},[37,39013,39014],{"class":54},"                    nn.init.constant_(m.bias,",[37,39016,396],{"class":82},[37,39018,214],{"class":54},[37,39020,39021],{"class":39,"line":16855},[37,39022,39023],{"class":43},"            # 全连接层初始化\n",[37,39025,39026,39029,39031],{"class":39,"line":16868},[37,39027,39028],{"class":50},"            elif",[37,39030,38957],{"class":82},[37,39032,39033],{"class":54},"(m,nn.Linear):\n",[37,39035,39036],{"class":39,"line":16873},[37,39037,39038],{"class":43},"                # 这个初始化方法是利用的是正太分布的方式\n",[37,39040,39041],{"class":39,"line":16887},[37,39042,39043],{"class":43},"                # 均值为0，方差为0.01\n",[37,39045,39046,39049,39051,39053,39056],{"class":39,"line":16892},[37,39047,39048],{"class":54},"                nn.init.normal_(m.weight,",[37,39050,396],{"class":82},[37,39052,583],{"class":54},[37,39054,39055],{"class":82},"0.01",[37,39057,214],{"class":54},[37,39059,39060],{"class":39,"line":16898},[37,39061,39062],{"class":43},"                # 初始化b参数\n",[37,39064,39065,39067,39069,39071,39073,39075],{"class":39,"line":16903},[37,39066,38990],{"class":50},[37,39068,38993],{"class":54},[37,39070,38996],{"class":50},[37,39072,38999],{"class":50},[37,39074,39002],{"class":82},[37,39076,3811],{"class":54},[37,39078,39079,39081,39083],{"class":39,"line":16917},[37,39080,39014],{"class":54},[37,39082,396],{"class":82},[37,39084,214],{"class":54},[37,39086,39087],{"class":39,"line":16922},[37,39088,2472],{"emptyLinePlaceholder":131},[37,39090,39091],{"class":39,"line":16927},[37,39092,35234],{"class":43},[37,39094,39095,39097,39099],{"class":39,"line":16941},[37,39096,30871],{"class":50},[37,39098,31163],{"class":2035},[37,39100,31166],{"class":54},[37,39102,39103,39105,39107,39109],{"class":39,"line":16953},[37,39104,31171],{"class":54},[37,39106,70],{"class":50},[37,39108,30893],{"class":82},[37,39110,39111],{"class":54},".block1(x)\n",[37,39113,39114,39116,39118,39120],{"class":39,"line":16958},[37,39115,31171],{"class":54},[37,39117,70],{"class":50},[37,39119,30893],{"class":82},[37,39121,39122],{"class":54},".block2(x)\n",[37,39124,39125,39127,39129,39131],{"class":39,"line":16971},[37,39126,31171],{"class":54},[37,39128,70],{"class":50},[37,39130,30893],{"class":82},[37,39132,39133],{"class":54},".block3(x)\n",[37,39135,39136,39138,39140,39142],{"class":39,"line":16976},[37,39137,31171],{"class":54},[37,39139,70],{"class":50},[37,39141,30893],{"class":82},[37,39143,39144],{"class":54},".block4(x)\n",[37,39146,39147,39149,39151,39153],{"class":39,"line":16981},[37,39148,31171],{"class":54},[37,39150,70],{"class":50},[37,39152,30893],{"class":82},[37,39154,39155],{"class":54},".block5(x)\n",[37,39157,39158,39160,39162,39164],{"class":39,"line":16986},[37,39159,31171],{"class":54},[37,39161,70],{"class":50},[37,39163,30893],{"class":82},[37,39165,39166],{"class":54},".block6(x)\n",[37,39168,39169,39171],{"class":39,"line":16999},[37,39170,14824],{"class":50},[37,39172,31279],{"class":54},[37,39174,39175],{"class":39,"line":17004},[37,39176,2472],{"emptyLinePlaceholder":131},[37,39178,39179],{"class":39,"line":32702},[37,39180,39181],{"class":43},"# 验证模型\n",[37,39183,39184,39186,39188,39190,39193],{"class":39,"line":32708},[37,39185,1603],{"class":50},[37,39187,31290],{"class":82},[37,39189,3021],{"class":50},[37,39191,39192],{"class":309},"'__main__'",[37,39194,3811],{"class":54},[37,39196,39197,39199,39201,39203,39205,39207,39209,39211,39213],{"class":39,"line":32714},[37,39198,31307],{"class":54},[37,39200,70],{"class":50},[37,39202,30521],{"class":54},[37,39204,31314],{"class":309},[37,39206,1776],{"class":50},[37,39208,31319],{"class":54},[37,39210,1773],{"class":50},[37,39212,30546],{"class":309},[37,39214,214],{"class":54},[37,39216,39217,39219],{"class":39,"line":32720},[37,39218,31369],{"class":82},[37,39220,30555],{"class":54},[37,39222,39223,39225,39227],{"class":39,"line":32726},[37,39224,31359],{"class":54},[37,39226,70],{"class":50},[37,39228,39229],{"class":54},"VGG16().to(device)\n",[37,39231,39232,39234,39236,39238,39240,39242,39244,39246],{"class":39,"line":32737},[37,39233,31369],{"class":82},[37,39235,31372],{"class":54},[37,39237,422],{"class":82},[37,39239,583],{"class":54},[37,39241,31571],{"class":82},[37,39243,583],{"class":54},[37,39245,31571],{"class":82},[37,39247,31385],{"class":54},[158,39249,39250],{"start":47},[161,39251,39252],{},"训练代码",[14,39254,39255],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39257,39258],{},"解决方式:",[14,39260,39261],{},"①权重初始化",[27,39263,39265],{"className":29,"code":39264,"language":31,"meta":32,"style":32},"# 权重初始化,保证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",[34,39266,39267,39272,39277,39289,39294,39302,39307,39320,39325,39339,39344,39353,39358,39367,39372,39377,39390,39395,39409],{"__ignoreMap":32},[37,39268,39269],{"class":39,"line":40},[37,39270,39271],{"class":43},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[37,39273,39274],{"class":39,"line":47},[37,39275,39276],{"class":43},"# 循环遍历模型\n",[37,39278,39279,39281,39283,39285,39287],{"class":39,"line":58},[37,39280,3097],{"class":50},[37,39282,38937],{"class":54},[37,39284,26116],{"class":50},[37,39286,38942],{"class":82},[37,39288,38945],{"class":54},[37,39290,39291],{"class":39,"line":64},[37,39292,39293],{"class":43},"    # print(m)\n",[37,39295,39296,39298,39300],{"class":39,"line":76},[37,39297,3173],{"class":50},[37,39299,38957],{"class":82},[37,39301,38960],{"class":54},[37,39303,39304],{"class":39,"line":92},[37,39305,39306],{"class":43},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[37,39308,39309,39312,39314,39316,39318],{"class":39,"line":97},[37,39310,39311],{"class":54},"        nn.init.kaiming_normal_(m.weight,",[37,39313,38973],{"class":5288},[37,39315,70],{"class":50},[37,39317,38978],{"class":309},[37,39319,214],{"class":54},[37,39321,39322],{"class":39,"line":107},[37,39323,39324],{"class":43},"        # 判断b参数是否存在\n",[37,39326,39327,39329,39331,39333,39335,39337],{"class":39,"line":1390},[37,39328,2569],{"class":50},[37,39330,38993],{"class":54},[37,39332,38996],{"class":50},[37,39334,38999],{"class":50},[37,39336,39002],{"class":82},[37,39338,3811],{"class":54},[37,39340,39341],{"class":39,"line":1402},[37,39342,39343],{"class":43},"            # 如果参数不存在的化初始化b=0\n",[37,39345,39346,39349,39351],{"class":39,"line":1684},[37,39347,39348],{"class":54},"            nn.init.constant_(m.bias,",[37,39350,396],{"class":82},[37,39352,214],{"class":54},[37,39354,39355],{"class":39,"line":1689},[37,39356,39357],{"class":43},"    # 全连接层初始化\n",[37,39359,39360,39363,39365],{"class":39,"line":1695},[37,39361,39362],{"class":50},"    elif",[37,39364,38957],{"class":82},[37,39366,39033],{"class":54},[37,39368,39369],{"class":39,"line":1700},[37,39370,39371],{"class":43},"        # 这个初始化方法是利用的是正太分布的方式\n",[37,39373,39374],{"class":39,"line":1714},[37,39375,39376],{"class":43},"        # 均值为0，方差为0.01\n",[37,39378,39379,39382,39384,39386,39388],{"class":39,"line":1719},[37,39380,39381],{"class":54},"        nn.init.normal_(m.weight,",[37,39383,396],{"class":82},[37,39385,583],{"class":54},[37,39387,39055],{"class":82},[37,39389,214],{"class":54},[37,39391,39392],{"class":39,"line":1725},[37,39393,39394],{"class":43},"        # 初始化b参数\n",[37,39396,39397,39399,39401,39403,39405,39407],{"class":39,"line":1746},[37,39398,2569],{"class":50},[37,39400,38993],{"class":54},[37,39402,38996],{"class":50},[37,39404,38999],{"class":50},[37,39406,39002],{"class":82},[37,39408,3811],{"class":54},[37,39410,39411,39413,39415],{"class":39,"line":1751},[37,39412,39348],{"class":54},[37,39414,396],{"class":82},[37,39416,214],{"class":54},[14,39418,39419],{},"②尽可能地增加批次",[14,39421,39422],{},"训练完整代码：",[27,39424,39425],{"className":29,"code":37968,"language":31,"meta":32,"style":32},[34,39426,39427,39433,39443,39453,39463,39467,39483,39491,39509,39513,39517,39527,39563,39567,39603,39607,39635,39639,39643,39653,39689,39693,39729,39733,39761,39765,39769,39779,39815,39819,39855,39859,39895,39899,39927,39931,39935,39945,39981,39985,40021,40025,40061,40065,40093,40097,40101,40111,40147,40151,40187,40191,40227,40231,40259,40263,40267,40277,40281,40285,40289,40309,40313,40325,40329,40341,40345,40349,40353,40357,40369,40373,40381,40385,40397,40401,40415,40419,40427,40431,40439,40443,40447,40459,40463,40477,40485,40489,40493,40501,40511,40521,40531,40541,40551,40561,40567,40571,40575,40587,40607,40613,40621],{"__ignoreMap":32},[37,39428,39429,39431],{"class":39,"line":40},[37,39430,51],{"class":50},[37,39432,30465],{"class":54},[37,39434,39435,39437,39439,39441],{"class":39,"line":47},[37,39436,30807],{"class":50},[37,39438,37983],{"class":54},[37,39440,51],{"class":50},[37,39442,37988],{"class":54},[37,39444,39445,39447,39449,39451],{"class":39,"line":58},[37,39446,30807],{"class":50},[37,39448,30810],{"class":54},[37,39450,51],{"class":50},[37,39452,30815],{"class":54},[37,39454,39455,39457,39459,39461],{"class":39,"line":64},[37,39456,30807],{"class":50},[37,39458,30827],{"class":54},[37,39460,51],{"class":50},[37,39462,30832],{"class":54},[37,39464,39465],{"class":39,"line":76},[37,39466,2472],{"emptyLinePlaceholder":131},[37,39468,39469,39471,39473,39475,39477,39479,39481],{"class":39,"line":92},[37,39470,14766],{"class":50},[37,39472,38019],{"class":2035},[37,39474,208],{"class":54},[37,39476,30848],{"class":2035},[37,39478,761],{"class":54},[37,39480,30853],{"class":2035},[37,39482,30856],{"class":54},[37,39484,39485,39487,39489],{"class":39,"line":97},[37,39486,30871],{"class":50},[37,39488,30874],{"class":82},[37,39490,30877],{"class":54},[37,39492,39493,39495,39497,39499,39501,39503,39505,39507],{"class":39,"line":107},[37,39494,30887],{"class":82},[37,39496,208],{"class":54},[37,39498,38046],{"class":82},[37,39500,12507],{"class":54},[37,39502,30893],{"class":82},[37,39504,30896],{"class":54},[37,39506,30899],{"class":82},[37,39508,2048],{"class":54},[37,39510,39511],{"class":39,"line":1390},[37,39512,38061],{"class":43},[37,39514,39515],{"class":39,"line":1402},[37,39516,38066],{"class":43},[37,39518,39519,39521,39523,39525],{"class":39,"line":1684},[37,39520,30915],{"class":82},[37,39522,38073],{"class":54},[37,39524,70],{"class":50},[37,39526,38078],{"class":54},[37,39528,39529,39531,39533,39535,39537,39539,39541,39543,39545,39547,39549,39551,39553,39555,39557,39559,39561],{"class":39,"line":1689},[37,39530,38083],{"class":54},[37,39532,30926],{"class":5288},[37,39534,70],{"class":50},[37,39536,422],{"class":82},[37,39538,583],{"class":54},[37,39540,30935],{"class":5288},[37,39542,70],{"class":50},[37,39544,408],{"class":82},[37,39546,583],{"class":54},[37,39548,30944],{"class":5288},[37,39550,70],{"class":50},[37,39552,276],{"class":82},[37,39554,583],{"class":54},[37,39556,30953],{"class":5288},[37,39558,70],{"class":50},[37,39560,422],{"class":82},[37,39562,38116],{"class":54},[37,39564,39565],{"class":39,"line":1695},[37,39566,38121],{"class":54},[37,39568,39569,39571,39573,39575,39577,39579,39581,39583,39585,39587,39589,39591,39593,39595,39597,39599,39601],{"class":39,"line":1700},[37,39570,38083],{"class":54},[37,39572,30926],{"class":5288},[37,39574,70],{"class":50},[37,39576,408],{"class":82},[37,39578,583],{"class":54},[37,39580,30935],{"class":5288},[37,39582,70],{"class":50},[37,39584,408],{"class":82},[37,39586,583],{"class":54},[37,39588,30944],{"class":5288},[37,39590,70],{"class":50},[37,39592,276],{"class":82},[37,39594,583],{"class":54},[37,39596,30953],{"class":5288},[37,39598,70],{"class":50},[37,39600,422],{"class":82},[37,39602,38116],{"class":54},[37,39604,39605],{"class":39,"line":1714},[37,39606,38121],{"class":54},[37,39608,39609,39611,39613,39615,39617,39619,39621,39623,39625,39627,39629,39631,39633],{"class":39,"line":1719},[37,39610,38166],{"class":54},[37,39612,30944],{"class":5288},[37,39614,70],{"class":50},[37,39616,282],{"class":82},[37,39618,583],{"class":54},[37,39620,30999],{"class":5288},[37,39622,70],{"class":50},[37,39624,282],{"class":82},[37,39626,583],{"class":54},[37,39628,30953],{"class":5288},[37,39630,70],{"class":50},[37,39632,396],{"class":82},[37,39634,214],{"class":54},[37,39636,39637],{"class":39,"line":1725},[37,39638,38195],{"class":54},[37,39640,39641],{"class":39,"line":1746},[37,39642,38200],{"class":43},[37,39644,39645,39647,39649,39651],{"class":39,"line":1751},[37,39646,30915],{"class":82},[37,39648,38207],{"class":54},[37,39650,70],{"class":50},[37,39652,38078],{"class":54},[37,39654,39655,39657,39659,39661,39663,39665,39667,39669,39671,39673,39675,39677,39679,39681,39683,39685,39687],{"class":39,"line":1765},[37,39656,38083],{"class":54},[37,39658,30926],{"class":5288},[37,39660,70],{"class":50},[37,39662,408],{"class":82},[37,39664,583],{"class":54},[37,39666,30935],{"class":5288},[37,39668,70],{"class":50},[37,39670,32140],{"class":82},[37,39672,583],{"class":54},[37,39674,30944],{"class":5288},[37,39676,70],{"class":50},[37,39678,276],{"class":82},[37,39680,583],{"class":54},[37,39682,30953],{"class":5288},[37,39684,70],{"class":50},[37,39686,422],{"class":82},[37,39688,38116],{"class":54},[37,39690,39691],{"class":39,"line":1770},[37,39692,38121],{"class":54},[37,39694,39695,39697,39699,39701,39703,39705,39707,39709,39711,39713,39715,39717,39719,39721,39723,39725,39727],{"class":39,"line":1799},[37,39696,38083],{"class":54},[37,39698,30926],{"class":5288},[37,39700,70],{"class":50},[37,39702,32140],{"class":82},[37,39704,583],{"class":54},[37,39706,30935],{"class":5288},[37,39708,70],{"class":50},[37,39710,32140],{"class":82},[37,39712,583],{"class":54},[37,39714,30944],{"class":5288},[37,39716,70],{"class":50},[37,39718,276],{"class":82},[37,39720,583],{"class":54},[37,39722,30953],{"class":5288},[37,39724,70],{"class":50},[37,39726,422],{"class":82},[37,39728,38116],{"class":54},[37,39730,39731],{"class":39,"line":1804},[37,39732,38121],{"class":54},[37,39734,39735,39737,39739,39741,39743,39745,39747,39749,39751,39753,39755,39757,39759],{"class":39,"line":1821},[37,39736,38166],{"class":54},[37,39738,30944],{"class":5288},[37,39740,70],{"class":50},[37,39742,282],{"class":82},[37,39744,583],{"class":54},[37,39746,30999],{"class":5288},[37,39748,70],{"class":50},[37,39750,282],{"class":82},[37,39752,583],{"class":54},[37,39754,30953],{"class":5288},[37,39756,70],{"class":50},[37,39758,396],{"class":82},[37,39760,214],{"class":54},[37,39762,39763],{"class":39,"line":1826},[37,39764,38195],{"class":54},[37,39766,39767],{"class":39,"line":1831},[37,39768,38328],{"class":43},[37,39770,39771,39773,39775,39777],{"class":39,"line":1836},[37,39772,30915],{"class":82},[37,39774,38335],{"class":54},[37,39776,70],{"class":50},[37,39778,38078],{"class":54},[37,39780,39781,39783,39785,39787,39789,39791,39793,39795,39797,39799,39801,39803,39805,39807,39809,39811,39813],{"class":39,"line":1850},[37,39782,38083],{"class":54},[37,39784,30926],{"class":5288},[37,39786,70],{"class":50},[37,39788,32140],{"class":82},[37,39790,583],{"class":54},[37,39792,30935],{"class":5288},[37,39794,70],{"class":50},[37,39796,34939],{"class":82},[37,39798,583],{"class":54},[37,39800,30944],{"class":5288},[37,39802,70],{"class":50},[37,39804,276],{"class":82},[37,39806,583],{"class":54},[37,39808,30953],{"class":5288},[37,39810,70],{"class":50},[37,39812,422],{"class":82},[37,39814,38116],{"class":54},[37,39816,39817],{"class":39,"line":1855},[37,39818,38121],{"class":54},[37,39820,39821,39823,39825,39827,39829,39831,39833,39835,39837,39839,39841,39843,39845,39847,39849,39851,39853],{"class":39,"line":2649},[37,39822,38083],{"class":54},[37,39824,30926],{"class":5288},[37,39826,70],{"class":50},[37,39828,34939],{"class":82},[37,39830,583],{"class":54},[37,39832,30935],{"class":5288},[37,39834,70],{"class":50},[37,39836,34939],{"class":82},[37,39838,583],{"class":54},[37,39840,30944],{"class":5288},[37,39842,70],{"class":50},[37,39844,276],{"class":82},[37,39846,583],{"class":54},[37,39848,30953],{"class":5288},[37,39850,70],{"class":50},[37,39852,422],{"class":82},[37,39854,38116],{"class":54},[37,39856,39857],{"class":39,"line":2663},[37,39858,38121],{"class":54},[37,39860,39861,39863,39865,39867,39869,39871,39873,39875,39877,39879,39881,39883,39885,39887,39889,39891,39893],{"class":39,"line":2671},[37,39862,38083],{"class":54},[37,39864,30926],{"class":5288},[37,39866,70],{"class":50},[37,39868,34939],{"class":82},[37,39870,583],{"class":54},[37,39872,30935],{"class":5288},[37,39874,70],{"class":50},[37,39876,34939],{"class":82},[37,39878,583],{"class":54},[37,39880,30944],{"class":5288},[37,39882,70],{"class":50},[37,39884,276],{"class":82},[37,39886,583],{"class":54},[37,39888,30953],{"class":5288},[37,39890,70],{"class":50},[37,39892,422],{"class":82},[37,39894,38116],{"class":54},[37,39896,39897],{"class":39,"line":2676},[37,39898,38121],{"class":54},[37,39900,39901,39903,39905,39907,39909,39911,39913,39915,39917,39919,39921,39923,39925],{"class":39,"line":2682},[37,39902,38166],{"class":54},[37,39904,30944],{"class":5288},[37,39906,70],{"class":50},[37,39908,282],{"class":82},[37,39910,583],{"class":54},[37,39912,30999],{"class":5288},[37,39914,70],{"class":50},[37,39916,282],{"class":82},[37,39918,583],{"class":54},[37,39920,30953],{"class":5288},[37,39922,70],{"class":50},[37,39924,396],{"class":82},[37,39926,214],{"class":54},[37,39928,39929],{"class":39,"line":2688},[37,39930,38195],{"class":54},[37,39932,39933],{"class":39,"line":2693},[37,39934,38496],{"class":43},[37,39936,39937,39939,39941,39943],{"class":39,"line":8020},[37,39938,30915],{"class":82},[37,39940,38503],{"class":54},[37,39942,70],{"class":50},[37,39944,38078],{"class":54},[37,39946,39947,39949,39951,39953,39955,39957,39959,39961,39963,39965,39967,39969,39971,39973,39975,39977,39979],{"class":39,"line":8044},[37,39948,38083],{"class":54},[37,39950,30926],{"class":5288},[37,39952,70],{"class":50},[37,39954,34939],{"class":82},[37,39956,583],{"class":54},[37,39958,30935],{"class":5288},[37,39960,70],{"class":50},[37,39962,38526],{"class":82},[37,39964,583],{"class":54},[37,39966,30944],{"class":5288},[37,39968,70],{"class":50},[37,39970,276],{"class":82},[37,39972,583],{"class":54},[37,39974,30953],{"class":5288},[37,39976,70],{"class":50},[37,39978,422],{"class":82},[37,39980,38116],{"class":54},[37,39982,39983],{"class":39,"line":8049},[37,39984,38121],{"class":54},[37,39986,39987,39989,39991,39993,39995,39997,39999,40001,40003,40005,40007,40009,40011,40013,40015,40017,40019],{"class":39,"line":8055},[37,39988,38083],{"class":54},[37,39990,30926],{"class":5288},[37,39992,70],{"class":50},[37,39994,38526],{"class":82},[37,39996,583],{"class":54},[37,39998,30935],{"class":5288},[37,40000,70],{"class":50},[37,40002,38526],{"class":82},[37,40004,583],{"class":54},[37,40006,30944],{"class":5288},[37,40008,70],{"class":50},[37,40010,276],{"class":82},[37,40012,583],{"class":54},[37,40014,30953],{"class":5288},[37,40016,70],{"class":50},[37,40018,422],{"class":82},[37,40020,38116],{"class":54},[37,40022,40023],{"class":39,"line":8082},[37,40024,38121],{"class":54},[37,40026,40027,40029,40031,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051,40053,40055,40057,40059],{"class":39,"line":8087},[37,40028,38083],{"class":54},[37,40030,30926],{"class":5288},[37,40032,70],{"class":50},[37,40034,38526],{"class":82},[37,40036,583],{"class":54},[37,40038,30935],{"class":5288},[37,40040,70],{"class":50},[37,40042,38526],{"class":82},[37,40044,583],{"class":54},[37,40046,30944],{"class":5288},[37,40048,70],{"class":50},[37,40050,276],{"class":82},[37,40052,583],{"class":54},[37,40054,30953],{"class":5288},[37,40056,70],{"class":50},[37,40058,422],{"class":82},[37,40060,38116],{"class":54},[37,40062,40063],{"class":39,"line":8093},[37,40064,38121],{"class":54},[37,40066,40067,40069,40071,40073,40075,40077,40079,40081,40083,40085,40087,40089,40091],{"class":39,"line":8105},[37,40068,38166],{"class":54},[37,40070,30944],{"class":5288},[37,40072,70],{"class":50},[37,40074,282],{"class":82},[37,40076,583],{"class":54},[37,40078,30999],{"class":5288},[37,40080,70],{"class":50},[37,40082,282],{"class":82},[37,40084,583],{"class":54},[37,40086,30953],{"class":5288},[37,40088,70],{"class":50},[37,40090,396],{"class":82},[37,40092,214],{"class":54},[37,40094,40095],{"class":39,"line":8117},[37,40096,38195],{"class":54},[37,40098,40099],{"class":39,"line":8129},[37,40100,38665],{"class":43},[37,40102,40103,40105,40107,40109],{"class":39,"line":9788},[37,40104,30915],{"class":82},[37,40106,38672],{"class":54},[37,40108,70],{"class":50},[37,40110,38078],{"class":54},[37,40112,40113,40115,40117,40119,40121,40123,40125,40127,40129,40131,40133,40135,40137,40139,40141,40143,40145],{"class":39,"line":9813},[37,40114,38083],{"class":54},[37,40116,30926],{"class":5288},[37,40118,70],{"class":50},[37,40120,38526],{"class":82},[37,40122,583],{"class":54},[37,40124,30935],{"class":5288},[37,40126,70],{"class":50},[37,40128,38526],{"class":82},[37,40130,583],{"class":54},[37,40132,30944],{"class":5288},[37,40134,70],{"class":50},[37,40136,276],{"class":82},[37,40138,583],{"class":54},[37,40140,30953],{"class":5288},[37,40142,70],{"class":50},[37,40144,422],{"class":82},[37,40146,38116],{"class":54},[37,40148,40149],{"class":39,"line":9836},[37,40150,38121],{"class":54},[37,40152,40153,40155,40157,40159,40161,40163,40165,40167,40169,40171,40173,40175,40177,40179,40181,40183,40185],{"class":39,"line":9860},[37,40154,38083],{"class":54},[37,40156,30926],{"class":5288},[37,40158,70],{"class":50},[37,40160,38526],{"class":82},[37,40162,583],{"class":54},[37,40164,30935],{"class":5288},[37,40166,70],{"class":50},[37,40168,38526],{"class":82},[37,40170,583],{"class":54},[37,40172,30944],{"class":5288},[37,40174,70],{"class":50},[37,40176,276],{"class":82},[37,40178,583],{"class":54},[37,40180,30953],{"class":5288},[37,40182,70],{"class":50},[37,40184,422],{"class":82},[37,40186,38116],{"class":54},[37,40188,40189],{"class":39,"line":9865},[37,40190,38121],{"class":54},[37,40192,40193,40195,40197,40199,40201,40203,40205,40207,40209,40211,40213,40215,40217,40219,40221,40223,40225],{"class":39,"line":9870},[37,40194,38083],{"class":54},[37,40196,30926],{"class":5288},[37,40198,70],{"class":50},[37,40200,38526],{"class":82},[37,40202,583],{"class":54},[37,40204,30935],{"class":5288},[37,40206,70],{"class":50},[37,40208,38526],{"class":82},[37,40210,583],{"class":54},[37,40212,30944],{"class":5288},[37,40214,70],{"class":50},[37,40216,276],{"class":82},[37,40218,583],{"class":54},[37,40220,30953],{"class":5288},[37,40222,70],{"class":50},[37,40224,422],{"class":82},[37,40226,38116],{"class":54},[37,40228,40229],{"class":39,"line":9875},[37,40230,38121],{"class":54},[37,40232,40233,40235,40237,40239,40241,40243,40245,40247,40249,40251,40253,40255,40257],{"class":39,"line":9884},[37,40234,38166],{"class":54},[37,40236,30944],{"class":5288},[37,40238,70],{"class":50},[37,40240,282],{"class":82},[37,40242,583],{"class":54},[37,40244,30999],{"class":5288},[37,40246,70],{"class":50},[37,40248,282],{"class":82},[37,40250,583],{"class":54},[37,40252,30953],{"class":5288},[37,40254,70],{"class":50},[37,40256,396],{"class":82},[37,40258,214],{"class":54},[37,40260,40261],{"class":39,"line":9889},[37,40262,38195],{"class":54},[37,40264,40265],{"class":39,"line":9895},[37,40266,38833],{"class":43},[37,40268,40269,40271,40273,40275],{"class":39,"line":9916},[37,40270,30915],{"class":82},[37,40272,38840],{"class":54},[37,40274,70],{"class":50},[37,40276,38078],{"class":54},[37,40278,40279],{"class":39,"line":9922},[37,40280,38849],{"class":43},[37,40282,40283],{"class":39,"line":9936},[37,40284,38854],{"class":43},[37,40286,40287],{"class":39,"line":9942},[37,40288,38859],{"class":54},[37,40290,40291,40293,40295,40297,40299,40301,40303,40305,40307],{"class":39,"line":9969},[37,40292,38864],{"class":54},[37,40294,574],{"class":82},[37,40296,659],{"class":50},[37,40298,574],{"class":82},[37,40300,659],{"class":50},[37,40302,38526],{"class":82},[37,40304,583],{"class":54},[37,40306,34939],{"class":82},[37,40308,38116],{"class":54},[37,40310,40311],{"class":39,"line":9978},[37,40312,38121],{"class":54},[37,40314,40315,40317,40319,40321,40323],{"class":39,"line":9984},[37,40316,38864],{"class":54},[37,40318,34939],{"class":82},[37,40320,583],{"class":54},[37,40322,32140],{"class":82},[37,40324,38116],{"class":54},[37,40326,40327],{"class":39,"line":9992},[37,40328,38121],{"class":54},[37,40330,40331,40333,40335,40337,40339],{"class":39,"line":9997},[37,40332,38864],{"class":54},[37,40334,32140],{"class":82},[37,40336,583],{"class":54},[37,40338,650],{"class":82},[37,40340,214],{"class":54},[37,40342,40343],{"class":39,"line":16676},[37,40344,38195],{"class":54},[37,40346,40347],{"class":39,"line":16682},[37,40348,2472],{"emptyLinePlaceholder":131},[37,40350,40351],{"class":39,"line":16705},[37,40352,38925],{"class":43},[37,40354,40355],{"class":39,"line":16711},[37,40356,38930],{"class":43},[37,40358,40359,40361,40363,40365,40367],{"class":39,"line":16734},[37,40360,3475],{"class":50},[37,40362,38937],{"class":54},[37,40364,26116],{"class":50},[37,40366,38942],{"class":82},[37,40368,38945],{"class":54},[37,40370,40371],{"class":39,"line":16748},[37,40372,38950],{"class":43},[37,40374,40375,40377,40379],{"class":39,"line":16768},[37,40376,4714],{"class":50},[37,40378,38957],{"class":82},[37,40380,38960],{"class":54},[37,40382,40383],{"class":39,"line":16774},[37,40384,38965],{"class":43},[37,40386,40387,40389,40391,40393,40395],{"class":39,"line":16785},[37,40388,38970],{"class":54},[37,40390,38973],{"class":5288},[37,40392,70],{"class":50},[37,40394,38978],{"class":309},[37,40396,214],{"class":54},[37,40398,40399],{"class":39,"line":16808},[37,40400,38985],{"class":43},[37,40402,40403,40405,40407,40409,40411,40413],{"class":39,"line":16830},[37,40404,38990],{"class":50},[37,40406,38993],{"class":54},[37,40408,38996],{"class":50},[37,40410,38999],{"class":50},[37,40412,39002],{"class":82},[37,40414,3811],{"class":54},[37,40416,40417],{"class":39,"line":16835},[37,40418,39009],{"class":43},[37,40420,40421,40423,40425],{"class":39,"line":16841},[37,40422,39014],{"class":54},[37,40424,396],{"class":82},[37,40426,214],{"class":54},[37,40428,40429],{"class":39,"line":16855},[37,40430,39023],{"class":43},[37,40432,40433,40435,40437],{"class":39,"line":16868},[37,40434,39028],{"class":50},[37,40436,38957],{"class":82},[37,40438,39033],{"class":54},[37,40440,40441],{"class":39,"line":16873},[37,40442,39038],{"class":43},[37,40444,40445],{"class":39,"line":16887},[37,40446,39043],{"class":43},[37,40448,40449,40451,40453,40455,40457],{"class":39,"line":16892},[37,40450,39048],{"class":54},[37,40452,396],{"class":82},[37,40454,583],{"class":54},[37,40456,39055],{"class":82},[37,40458,214],{"class":54},[37,40460,40461],{"class":39,"line":16898},[37,40462,39062],{"class":43},[37,40464,40465,40467,40469,40471,40473,40475],{"class":39,"line":16903},[37,40466,38990],{"class":50},[37,40468,38993],{"class":54},[37,40470,38996],{"class":50},[37,40472,38999],{"class":50},[37,40474,39002],{"class":82},[37,40476,3811],{"class":54},[37,40478,40479,40481,40483],{"class":39,"line":16917},[37,40480,39014],{"class":54},[37,40482,396],{"class":82},[37,40484,214],{"class":54},[37,40486,40487],{"class":39,"line":16922},[37,40488,2472],{"emptyLinePlaceholder":131},[37,40490,40491],{"class":39,"line":16927},[37,40492,35234],{"class":43},[37,40494,40495,40497,40499],{"class":39,"line":16941},[37,40496,30871],{"class":50},[37,40498,31163],{"class":2035},[37,40500,31166],{"class":54},[37,40502,40503,40505,40507,40509],{"class":39,"line":16953},[37,40504,31171],{"class":54},[37,40506,70],{"class":50},[37,40508,30893],{"class":82},[37,40510,39111],{"class":54},[37,40512,40513,40515,40517,40519],{"class":39,"line":16958},[37,40514,31171],{"class":54},[37,40516,70],{"class":50},[37,40518,30893],{"class":82},[37,40520,39122],{"class":54},[37,40522,40523,40525,40527,40529],{"class":39,"line":16971},[37,40524,31171],{"class":54},[37,40526,70],{"class":50},[37,40528,30893],{"class":82},[37,40530,39133],{"class":54},[37,40532,40533,40535,40537,40539],{"class":39,"line":16976},[37,40534,31171],{"class":54},[37,40536,70],{"class":50},[37,40538,30893],{"class":82},[37,40540,39144],{"class":54},[37,40542,40543,40545,40547,40549],{"class":39,"line":16981},[37,40544,31171],{"class":54},[37,40546,70],{"class":50},[37,40548,30893],{"class":82},[37,40550,39155],{"class":54},[37,40552,40553,40555,40557,40559],{"class":39,"line":16986},[37,40554,31171],{"class":54},[37,40556,70],{"class":50},[37,40558,30893],{"class":82},[37,40560,39166],{"class":54},[37,40562,40563,40565],{"class":39,"line":16999},[37,40564,14824],{"class":50},[37,40566,31279],{"class":54},[37,40568,40569],{"class":39,"line":17004},[37,40570,2472],{"emptyLinePlaceholder":131},[37,40572,40573],{"class":39,"line":32702},[37,40574,39181],{"class":43},[37,40576,40577,40579,40581,40583,40585],{"class":39,"line":32708},[37,40578,1603],{"class":50},[37,40580,31290],{"class":82},[37,40582,3021],{"class":50},[37,40584,39192],{"class":309},[37,40586,3811],{"class":54},[37,40588,40589,40591,40593,40595,40597,40599,40601,40603,40605],{"class":39,"line":32714},[37,40590,31307],{"class":54},[37,40592,70],{"class":50},[37,40594,30521],{"class":54},[37,40596,31314],{"class":309},[37,40598,1776],{"class":50},[37,40600,31319],{"class":54},[37,40602,1773],{"class":50},[37,40604,30546],{"class":309},[37,40606,214],{"class":54},[37,40608,40609,40611],{"class":39,"line":32720},[37,40610,31369],{"class":82},[37,40612,30555],{"class":54},[37,40614,40615,40617,40619],{"class":39,"line":32726},[37,40616,31359],{"class":54},[37,40618,70],{"class":50},[37,40620,39229],{"class":54},[37,40622,40623,40625,40627,40629,40631,40633,40635,40637],{"class":39,"line":32737},[37,40624,31369],{"class":82},[37,40626,31372],{"class":54},[37,40628,422],{"class":82},[37,40630,583],{"class":54},[37,40632,31571],{"class":82},[37,40634,583],{"class":54},[37,40636,31571],{"class":82},[37,40638,31385],{"class":54},[158,40640,40641],{"start":58},[161,40642,40643],{},"测试代码",[27,40645,40647],{"className":29,"code":40646,"language":31,"meta":32,"style":32},"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",[34,40648,40649,40655,40665,40675,40679,40689,40700,40704,40708,40712,40720,40736,40746,40762,40772,40786,40790,40800,40810,40820,40826,40830,40834,40842,40846,40862,40870,40874,40878,40886,40894,40898,40902,40906,40910,40916,40920,40930,40938,40946,40950,40954,40958,40966,40970,40986,40990,40994,40998,41010,41014,41026,41030,41034,41046,41050,41060,41064,41068,41080,41084,41093,41097,41101,41109,41113,41121,41125,41129,41133,41137,41141,41157,41165,41169,41173,41221,41227,41231,41241,41249,41257,41261,41265,41269,41273,41281,41285,41301,41305,41313,41321],{"__ignoreMap":32},[37,40650,40651,40653],{"class":39,"line":40},[37,40652,51],{"class":50},[37,40654,30465],{"class":54},[37,40656,40657,40659,40661,40663],{"class":39,"line":47},[37,40658,51],{"class":50},[37,40660,31485],{"class":54},[37,40662,31453],{"class":50},[37,40664,31490],{"class":54},[37,40666,40667,40669,40671,40673],{"class":39,"line":58},[37,40668,30807],{"class":50},[37,40670,31468],{"class":54},[37,40672,51],{"class":50},[37,40674,31473],{"class":54},[37,40676,40677],{"class":39,"line":64},[37,40678,33991],{"class":43},[37,40680,40681,40683,40685,40687],{"class":39,"line":76},[37,40682,30807],{"class":50},[37,40684,31438],{"class":54},[37,40686,51],{"class":50},[37,40688,31443],{"class":54},[37,40690,40691,40693,40695,40697],{"class":39,"line":92},[37,40692,30807],{"class":50},[37,40694,31984],{"class":54},[37,40696,51],{"class":50},[37,40698,40699],{"class":82}," VGG16\n",[37,40701,40702],{"class":39,"line":97},[37,40703,2472],{"emptyLinePlaceholder":131},[37,40705,40706],{"class":39,"line":107},[37,40707,2472],{"emptyLinePlaceholder":131},[37,40709,40710],{"class":39,"line":1390},[37,40711,34020],{"class":43},[37,40713,40714,40716,40718],{"class":39,"line":1402},[37,40715,32017],{"class":50},[37,40717,34027],{"class":2035},[37,40719,32023],{"class":54},[37,40721,40722,40724,40726,40728,40730,40732,40734],{"class":39,"line":1684},[37,40723,34034],{"class":54},[37,40725,70],{"class":50},[37,40727,31525],{"class":54},[37,40729,31528],{"class":5288},[37,40731,70],{"class":50},[37,40733,31533],{"class":309},[37,40735,31536],{"class":54},[37,40737,40738,40740,40742,40744],{"class":39,"line":1689},[37,40739,34051],{"class":5288},[37,40741,70],{"class":50},[37,40743,34056],{"class":82},[37,40745,31536],{"class":54},[37,40747,40748,40750,40752,40754,40756,40758,40760],{"class":39,"line":1695},[37,40749,34063],{"class":5288},[37,40751,70],{"class":50},[37,40753,31563],{"class":54},[37,40755,31566],{"class":5288},[37,40757,70],{"class":50},[37,40759,31571],{"class":82},[37,40761,31574],{"class":54},[37,40763,40764,40766,40768,40770],{"class":39,"line":1700},[37,40765,34080],{"class":5288},[37,40767,70],{"class":50},[37,40769,31546],{"class":82},[37,40771,214],{"class":54},[37,40773,40774,40776,40778,40780,40782,40784],{"class":39,"line":1714},[37,40775,34091],{"class":54},[37,40777,70],{"class":50},[37,40779,31604],{"class":54},[37,40781,31607],{"class":5288},[37,40783,70],{"class":50},[37,40785,34102],{"class":54},[37,40787,40788],{"class":39,"line":1719},[37,40789,34107],{"class":43},[37,40791,40792,40794,40796,40798],{"class":39,"line":1725},[37,40793,34112],{"class":5288},[37,40795,70],{"class":50},[37,40797,422],{"class":82},[37,40799,31536],{"class":54},[37,40801,40802,40804,40806,40808],{"class":39,"line":1746},[37,40803,34123],{"class":5288},[37,40805,70],{"class":50},[37,40807,31546],{"class":82},[37,40809,31536],{"class":54},[37,40811,40812,40814,40816,40818],{"class":39,"line":1751},[37,40813,34134],{"class":5288},[37,40815,70],{"class":50},[37,40817,396],{"class":82},[37,40819,214],{"class":54},[37,40821,40822,40824],{"class":39,"line":1765},[37,40823,4162],{"class":50},[37,40825,34147],{"class":54},[37,40827,40828],{"class":39,"line":1770},[37,40829,2472],{"emptyLinePlaceholder":131},[37,40831,40832],{"class":39,"line":1799},[37,40833,34156],{"class":43},[37,40835,40836,40838,40840],{"class":39,"line":1804},[37,40837,32017],{"class":50},[37,40839,34163],{"class":2035},[37,40841,34166],{"class":54},[37,40843,40844],{"class":39,"line":1821},[37,40845,34171],{"class":43},[37,40847,40848,40850,40852,40854,40856,40858,40860],{"class":39,"line":1826},[37,40849,31307],{"class":54},[37,40851,70],{"class":50},[37,40853,31314],{"class":309},[37,40855,1776],{"class":50},[37,40857,31319],{"class":54},[37,40859,1773],{"class":50},[37,40861,34188],{"class":309},[37,40863,40864,40866,40868],{"class":39,"line":1831},[37,40865,31359],{"class":54},[37,40867,70],{"class":50},[37,40869,32359],{"class":54},[37,40871,40872],{"class":39,"line":1836},[37,40873,2472],{"emptyLinePlaceholder":131},[37,40875,40876],{"class":39,"line":1850},[37,40877,34205],{"class":43},[37,40879,40880,40882,40884],{"class":39,"line":1855},[37,40881,34210],{"class":54},[37,40883,70],{"class":50},[37,40885,32412],{"class":82},[37,40887,40888,40890,40892],{"class":39,"line":2649},[37,40889,34219],{"class":54},[37,40891,70],{"class":50},[37,40893,3157],{"class":82},[37,40895,40896],{"class":39,"line":2663},[37,40897,2472],{"emptyLinePlaceholder":131},[37,40899,40900],{"class":39,"line":2671},[37,40901,34232],{"class":43},[37,40903,40904],{"class":39,"line":2676},[37,40905,34237],{"class":43},[37,40907,40908],{"class":39,"line":2682},[37,40909,34242],{"class":43},[37,40911,40912,40914],{"class":39,"line":2688},[37,40913,34247],{"class":50},[37,40915,32953],{"class":54},[37,40917,40918],{"class":39,"line":2693},[37,40919,34254],{"class":43},[37,40921,40922,40924,40926,40928],{"class":39,"line":8020},[37,40923,3475],{"class":50},[37,40925,34261],{"class":54},[37,40927,26116],{"class":50},[37,40929,34266],{"class":54},[37,40931,40932,40934,40936],{"class":39,"line":8044},[37,40933,34271],{"class":54},[37,40935,70],{"class":50},[37,40937,34276],{"class":54},[37,40939,40940,40942,40944],{"class":39,"line":8049},[37,40941,34281],{"class":54},[37,40943,70],{"class":50},[37,40945,34286],{"class":54},[37,40947,40948],{"class":39,"line":8055},[37,40949,34291],{"class":43},[37,40951,40952],{"class":39,"line":8082},[37,40953,32944],{"class":54},[37,40955,40956],{"class":39,"line":8087},[37,40957,34300],{"class":43},[37,40959,40960,40962,40964],{"class":39,"line":8093},[37,40961,32729],{"class":54},[37,40963,70],{"class":50},[37,40965,34309],{"class":54},[37,40967,40968],{"class":39,"line":8105},[37,40969,34314],{"class":43},[37,40971,40972,40974,40976,40978,40980,40982,40984],{"class":39,"line":8117},[37,40973,32746],{"class":54},[37,40975,70],{"class":50},[37,40977,32751],{"class":54},[37,40979,32754],{"class":5288},[37,40981,70],{"class":50},[37,40983,422],{"class":82},[37,40985,214],{"class":54},[37,40987,40988],{"class":39,"line":8129},[37,40989,34335],{"class":43},[37,40991,40992],{"class":39,"line":9788},[37,40993,34340],{"class":43},[37,40995,40996],{"class":39,"line":9813},[37,40997,34345],{"class":43},[37,40999,41000,41002,41004,41006,41008],{"class":39,"line":9836},[37,41001,34350],{"class":54},[37,41003,9549],{"class":50},[37,41005,32856],{"class":54},[37,41007,3021],{"class":50},[37,41009,34359],{"class":54},[37,41011,41012],{"class":39,"line":9860},[37,41013,34364],{"class":43},[37,41015,41016,41018,41020,41022,41024],{"class":39,"line":9865},[37,41017,34369],{"class":54},[37,41019,9549],{"class":50},[37,41021,34374],{"class":54},[37,41023,396],{"class":82},[37,41025,214],{"class":54},[37,41027,41028],{"class":39,"line":9870},[37,41029,2472],{"emptyLinePlaceholder":131},[37,41031,41032],{"class":39,"line":9875},[37,41033,34387],{"class":43},[37,41035,41036,41038,41040,41042,41044],{"class":39,"line":9884},[37,41037,34392],{"class":54},[37,41039,70],{"class":50},[37,41041,34397],{"class":54},[37,41043,787],{"class":50},[37,41045,34402],{"class":54},[37,41047,41048],{"class":39,"line":9889},[37,41049,34407],{"class":43},[37,41051,41052,41054,41056,41058],{"class":39,"line":9895},[37,41053,32520],{"class":82},[37,41055,208],{"class":54},[37,41057,34416],{"class":309},[37,41059,34419],{"class":54},[37,41061,41062],{"class":39,"line":9916},[37,41063,2472],{"emptyLinePlaceholder":131},[37,41065,41066],{"class":39,"line":9922},[37,41067,34428],{"class":43},[37,41069,41070,41072,41074,41076,41078],{"class":39,"line":9936},[37,41071,1603],{"class":50},[37,41073,31290],{"class":82},[37,41075,3021],{"class":50},[37,41077,31295],{"class":309},[37,41079,3811],{"class":54},[37,41081,41082],{"class":39,"line":9942},[37,41083,34445],{"class":43},[37,41085,41086,41088,41090],{"class":39,"line":9969},[37,41087,31359],{"class":54},[37,41089,70],{"class":50},[37,41091,41092],{"class":54},"VGG16()\n",[37,41094,41095],{"class":39,"line":9978},[37,41096,34458],{"class":43},[37,41098,41099],{"class":39,"line":9984},[37,41100,34463],{"class":43},[37,41102,41103,41105,41107],{"class":39,"line":9992},[37,41104,34468],{"class":54},[37,41106,34471],{"class":309},[37,41108,30567],{"class":54},[37,41110,41111],{"class":39,"line":9997},[37,41112,34478],{"class":43},[37,41114,41115,41117,41119],{"class":39,"line":16676},[37,41116,34091],{"class":54},[37,41118,70],{"class":50},[37,41120,34487],{"class":54},[37,41122,41123],{"class":39,"line":16682},[37,41124,34492],{"class":43},[37,41126,41127],{"class":39,"line":16705},[37,41128,34497],{"class":54},[37,41130,41131],{"class":39,"line":16711},[37,41132,2472],{"emptyLinePlaceholder":131},[37,41134,41135],{"class":39,"line":16734},[37,41136,34506],{"class":43},[37,41138,41139],{"class":39,"line":16748},[37,41140,34511],{"class":43},[37,41142,41143,41145,41147,41149,41151,41153,41155],{"class":39,"line":16768},[37,41144,31307],{"class":54},[37,41146,70],{"class":50},[37,41148,31314],{"class":309},[37,41150,1776],{"class":50},[37,41152,31319],{"class":54},[37,41154,1773],{"class":50},[37,41156,34188],{"class":309},[37,41158,41159,41161,41163],{"class":39,"line":16774},[37,41160,31359],{"class":54},[37,41162,70],{"class":50},[37,41164,32359],{"class":54},[37,41166,41167],{"class":39,"line":16785},[37,41168,34540],{"class":43},[37,41170,41171],{"class":39,"line":16808},[37,41172,34545],{"class":43},[37,41174,41175,41177,41179,41181,41183,41185,41187,41189,41191,41193,41195,41197,41199,41201,41203,41205,41207,41209,41211,41213,41215,41217,41219],{"class":39,"line":16830},[37,41176,34550],{"class":54},[37,41178,70],{"class":50},[37,41180,1093],{"class":54},[37,41182,34557],{"class":309},[37,41184,583],{"class":54},[37,41186,34562],{"class":309},[37,41188,583],{"class":54},[37,41190,34567],{"class":309},[37,41192,583],{"class":54},[37,41194,34572],{"class":309},[37,41196,583],{"class":54},[37,41198,34577],{"class":309},[37,41200,583],{"class":54},[37,41202,34582],{"class":309},[37,41204,583],{"class":54},[37,41206,34587],{"class":309},[37,41208,583],{"class":54},[37,41210,34592],{"class":309},[37,41212,583],{"class":54},[37,41214,34597],{"class":309},[37,41216,583],{"class":54},[37,41218,34602],{"class":309},[37,41220,33315],{"class":54},[37,41222,41223,41225],{"class":39,"line":16835},[37,41224,34247],{"class":50},[37,41226,32953],{"class":54},[37,41228,41229],{"class":39,"line":16841},[37,41230,34615],{"class":43},[37,41232,41233,41235,41237,41239],{"class":39,"line":16855},[37,41234,3475],{"class":50},[37,41236,34622],{"class":54},[37,41238,26116],{"class":50},[37,41240,34266],{"class":54},[37,41242,41243,41245,41247],{"class":39,"line":16868},[37,41244,32679],{"class":54},[37,41246,70],{"class":50},[37,41248,32684],{"class":54},[37,41250,41251,41253,41255],{"class":39,"line":16873},[37,41252,32694],{"class":54},[37,41254,70],{"class":50},[37,41256,32699],{"class":54},[37,41258,41259],{"class":39,"line":16887},[37,41260,2472],{"emptyLinePlaceholder":131},[37,41262,41263],{"class":39,"line":16892},[37,41264,34651],{"class":43},[37,41266,41267],{"class":39,"line":16898},[37,41268,32944],{"class":54},[37,41270,41271],{"class":39,"line":16903},[37,41272,34660],{"class":43},[37,41274,41275,41277,41279],{"class":39,"line":16917},[37,41276,32729],{"class":54},[37,41278,70],{"class":50},[37,41280,32734],{"class":54},[37,41282,41283],{"class":39,"line":16922},[37,41284,34673],{"class":43},[37,41286,41287,41289,41291,41293,41295,41297,41299],{"class":39,"line":16927},[37,41288,32746],{"class":54},[37,41290,70],{"class":50},[37,41292,32751],{"class":54},[37,41294,32754],{"class":5288},[37,41296,70],{"class":50},[37,41298,422],{"class":82},[37,41300,214],{"class":54},[37,41302,41303],{"class":39,"line":16941},[37,41304,34694],{"class":43},[37,41306,41307,41309,41311],{"class":39,"line":16953},[37,41308,34699],{"class":54},[37,41310,70],{"class":50},[37,41312,34704],{"class":54},[37,41314,41315,41317,41319],{"class":39,"line":16958},[37,41316,34709],{"class":54},[37,41318,70],{"class":50},[37,41320,34714],{"class":54},[37,41322,41323,41325,41327,41329,41331,41333,41335,41337],{"class":39,"line":16971},[37,41324,34719],{"class":82},[37,41326,208],{"class":54},[37,41328,34724],{"class":309},[37,41330,34727],{"class":54},[37,41332,34730],{"class":309},[37,41334,583],{"class":54},[37,41336,34735],{"class":309},[37,41338,34738],{"class":54},[175,41340,41342],{"id":41341},"_23googlenet","2.3.GoogLeNet",[22070,41344,41346],{"id":41345},"_231原理","2.3.1.原理",[158,41348,41349],{},[161,41350,41351],{},"网络结构",[14,41353,41354],{},[119,41355],{"alt":32,"src":41356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[14,41358,41359],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,41361,41362],{},[119,41363],{"alt":32,"src":41364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[14,41366,41367],{},[119,41368],{"alt":32,"src":41369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[14,41371,41372],{},[119,41373],{"alt":32,"src":41374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-026.png",[158,41376,41377],{"start":47},[161,41378,41379],{},"1x1卷积的优点",[14,41381,41382],{},[119,41383],{"alt":32,"src":41384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-027.png",[158,41386,41387],{"start":58},[161,41388,41389],{},"全局平均池化层优点",[14,41391,41392],{},[119,41393],{"alt":32,"src":41394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[14,41396,41397],{},[119,41398],{"alt":32,"src":41399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-029.png",[158,41401,41402],{"start":64},[161,41403,41404],{},"参数详细描述",[14,41406,41407],{},[119,41408],{"alt":32,"src":41409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[14,41411,41412],{},[119,41413],{"alt":32,"src":41414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[14,41416,41417],{},[119,41418],{"alt":32,"src":41419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[14,41421,41422],{},[119,41423],{"alt":32,"src":41424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[14,41426,41427],{},[119,41428],{"alt":32,"src":41429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[14,41431,41432],{},[119,41433],{"alt":32,"src":41434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[14,41436,41437],{},[119,41438],{"alt":32,"src":41439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[14,41441,41442],{},[119,41443],{"alt":32,"src":41444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[14,41446,41447],{},[119,41448],{"alt":32,"src":41449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[14,41451,41452],{},[119,41453],{"alt":32,"src":41454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[14,41456,41457],{},[119,41458],{"alt":32,"src":41459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[14,41461,41462],{},[119,41463],{"alt":32,"src":41464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[14,41466,41467],{},[119,41468],{"alt":32,"src":41469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[14,41471,41472],{},[119,41473],{"alt":32,"src":41474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[14,41476,41477],{},[119,41478],{"alt":32,"src":41479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[14,41481,41482],{},[119,41483],{"alt":32,"src":41484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[14,41486,41487],{},[119,41488],{"alt":32,"src":41489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[14,41491,41492],{},[119,41493],{"alt":32,"src":41494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[14,41496,41497],{},[119,41498],{"alt":32,"src":41499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[14,41501,41502],{},[119,41503],{"alt":32,"src":41504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[14,41506,41507],{},[119,41508],{"alt":32,"src":41509},"\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",[22070,41511,41513],{"id":41512},"_232代码实现","2.3.2.代码实现",[158,41515,41516],{},[161,41517,30781],{},[14,41519,41520],{},"根据原理一步一步搭建即可",[27,41522,41524],{"className":29,"code":41523,"language":31,"meta":32,"style":32},"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",[34,41525,41526,41532,41542,41552,41556,41573,41582,41597,41607,41612,41645,41650,41687,41734,41739,41775,41822,41827,41832,41867,41899,41903,41911,41927,41951,41976,41997,42002,42017,42021,42025,42030,42047,42052,42061,42076,42087,42131,42135,42163,42167,42178,42206,42210,42247,42251,42279,42283,42294,42330,42362,42390,42394,42405,42439,42471,42503,42536,42570,42598,42602,42613,42646,42678,42692,42696,42709,42713,42718,42730,42738,42760,42765,42770,42775,42780,42785,42790,42804,42812,42821,42834,42849,42858,42862,42870,42881,42892,42903,42914,42925,42931,42935,42940,42952,42972,42981],{"__ignoreMap":32},[37,41527,41528,41530],{"class":39,"line":40},[37,41529,51],{"class":50},[37,41531,30465],{"class":54},[37,41533,41534,41536,41538,41540],{"class":39,"line":47},[37,41535,30807],{"class":50},[37,41537,30810],{"class":54},[37,41539,51],{"class":50},[37,41541,30815],{"class":54},[37,41543,41544,41546,41548,41550],{"class":39,"line":58},[37,41545,30807],{"class":50},[37,41547,30827],{"class":54},[37,41549,51],{"class":50},[37,41551,30832],{"class":54},[37,41553,41554],{"class":39,"line":64},[37,41555,2472],{"emptyLinePlaceholder":131},[37,41557,41558,41560,41563,41565,41567,41569,41571],{"class":39,"line":76},[37,41559,14766],{"class":50},[37,41561,41562],{"class":2035}," Inception",[37,41564,208],{"class":54},[37,41566,30848],{"class":2035},[37,41568,761],{"class":54},[37,41570,30853],{"class":2035},[37,41572,30856],{"class":54},[37,41574,41575,41577,41579],{"class":39,"line":92},[37,41576,30871],{"class":50},[37,41578,30874],{"class":82},[37,41580,41581],{"class":54},"(self,in_channels,c1,c2,c3,c4):\n",[37,41583,41584,41586,41589,41591,41593,41595],{"class":39,"line":97},[37,41585,30887],{"class":82},[37,41587,41588],{"class":54},"(Inception,",[37,41590,30893],{"class":82},[37,41592,30896],{"class":54},[37,41594,30899],{"class":82},[37,41596,2048],{"class":54},[37,41598,41599,41601,41603,41605],{"class":39,"line":107},[37,41600,30915],{"class":82},[37,41602,34840],{"class":54},[37,41604,70],{"class":50},[37,41606,34845],{"class":54},[37,41608,41609],{"class":39,"line":1390},[37,41610,41611],{"class":43},"        # 路线1：定义1*1卷积\n",[37,41613,41614,41616,41619,41621,41623,41625,41627,41630,41632,41634,41637,41639,41641,41643],{"class":39,"line":1402},[37,41615,30915],{"class":82},[37,41617,41618],{"class":54},".p1_1",[37,41620,70],{"class":50},[37,41622,30923],{"class":54},[37,41624,30926],{"class":5288},[37,41626,70],{"class":50},[37,41628,41629],{"class":54},"in_channels,",[37,41631,30935],{"class":5288},[37,41633,70],{"class":50},[37,41635,41636],{"class":54},"c1,",[37,41638,30944],{"class":5288},[37,41640,70],{"class":50},[37,41642,422],{"class":82},[37,41644,214],{"class":54},[37,41646,41647],{"class":39,"line":1684},[37,41648,41649],{"class":43},"        # 路线2：定义1*1卷积和3*3\n",[37,41651,41652,41654,41657,41659,41661,41663,41665,41667,41669,41671,41674,41676,41679,41681,41683,41685],{"class":39,"line":1689},[37,41653,30915],{"class":82},[37,41655,41656],{"class":54},".p2_1",[37,41658,70],{"class":50},[37,41660,30923],{"class":54},[37,41662,30926],{"class":5288},[37,41664,70],{"class":50},[37,41666,41629],{"class":54},[37,41668,30935],{"class":5288},[37,41670,70],{"class":50},[37,41672,41673],{"class":54},"c2[",[37,41675,396],{"class":82},[37,41677,41678],{"class":54},"],",[37,41680,30944],{"class":5288},[37,41682,70],{"class":50},[37,41684,422],{"class":82},[37,41686,214],{"class":54},[37,41688,41689,41691,41694,41696,41698,41700,41702,41704,41706,41708,41710,41712,41714,41716,41718,41720,41722,41724,41726,41728,41730,41732],{"class":39,"line":1695},[37,41690,30915],{"class":82},[37,41692,41693],{"class":54},".p2_2",[37,41695,70],{"class":50},[37,41697,30923],{"class":54},[37,41699,30926],{"class":5288},[37,41701,70],{"class":50},[37,41703,41673],{"class":54},[37,41705,396],{"class":82},[37,41707,41678],{"class":54},[37,41709,30935],{"class":5288},[37,41711,70],{"class":50},[37,41713,41673],{"class":54},[37,41715,422],{"class":82},[37,41717,41678],{"class":54},[37,41719,30944],{"class":5288},[37,41721,70],{"class":50},[37,41723,276],{"class":82},[37,41725,583],{"class":54},[37,41727,30953],{"class":5288},[37,41729,70],{"class":50},[37,41731,422],{"class":82},[37,41733,214],{"class":54},[37,41735,41736],{"class":39,"line":1700},[37,41737,41738],{"class":43},"        # 路线3：定义1*1卷积和5*5\n",[37,41740,41741,41743,41746,41748,41750,41752,41754,41756,41758,41760,41763,41765,41767,41769,41771,41773],{"class":39,"line":1714},[37,41742,30915],{"class":82},[37,41744,41745],{"class":54},".p3_1",[37,41747,70],{"class":50},[37,41749,30923],{"class":54},[37,41751,30926],{"class":5288},[37,41753,70],{"class":50},[37,41755,41629],{"class":54},[37,41757,30935],{"class":5288},[37,41759,70],{"class":50},[37,41761,41762],{"class":54},"c3[",[37,41764,396],{"class":82},[37,41766,41678],{"class":54},[37,41768,30944],{"class":5288},[37,41770,70],{"class":50},[37,41772,422],{"class":82},[37,41774,214],{"class":54},[37,41776,41777,41779,41782,41784,41786,41788,41790,41792,41794,41796,41798,41800,41802,41804,41806,41808,41810,41812,41814,41816,41818,41820],{"class":39,"line":1719},[37,41778,30915],{"class":82},[37,41780,41781],{"class":54},".p3_2",[37,41783,70],{"class":50},[37,41785,30923],{"class":54},[37,41787,30926],{"class":5288},[37,41789,70],{"class":50},[37,41791,41762],{"class":54},[37,41793,396],{"class":82},[37,41795,41678],{"class":54},[37,41797,30935],{"class":5288},[37,41799,70],{"class":50},[37,41801,41762],{"class":54},[37,41803,422],{"class":82},[37,41805,41678],{"class":54},[37,41807,30944],{"class":5288},[37,41809,70],{"class":50},[37,41811,524],{"class":82},[37,41813,583],{"class":54},[37,41815,30953],{"class":5288},[37,41817,70],{"class":50},[37,41819,282],{"class":82},[37,41821,214],{"class":54},[37,41823,41824],{"class":39,"line":1725},[37,41825,41826],{"class":43},"        # 路线4：定义3*3最大池化和1*1卷积\n",[37,41828,41829],{"class":39,"line":1746},[37,41830,41831],{"class":43},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[37,41833,41834,41836,41839,41841,41843,41845,41847,41849,41851,41853,41855,41857,41859,41861,41863,41865],{"class":39,"line":1751},[37,41835,30915],{"class":82},[37,41837,41838],{"class":54},".p4_1",[37,41840,70],{"class":50},[37,41842,34898],{"class":54},[37,41844,30944],{"class":5288},[37,41846,70],{"class":50},[37,41848,276],{"class":82},[37,41850,583],{"class":54},[37,41852,30999],{"class":5288},[37,41854,70],{"class":50},[37,41856,422],{"class":82},[37,41858,583],{"class":54},[37,41860,30953],{"class":5288},[37,41862,70],{"class":50},[37,41864,422],{"class":82},[37,41866,214],{"class":54},[37,41868,41869,41871,41874,41876,41878,41880,41882,41884,41886,41888,41891,41893,41895,41897],{"class":39,"line":1765},[37,41870,30915],{"class":82},[37,41872,41873],{"class":54},".p4_2",[37,41875,70],{"class":50},[37,41877,30923],{"class":54},[37,41879,30926],{"class":5288},[37,41881,70],{"class":50},[37,41883,41629],{"class":54},[37,41885,30935],{"class":5288},[37,41887,70],{"class":50},[37,41889,41890],{"class":54},"c4,",[37,41892,30944],{"class":5288},[37,41894,70],{"class":50},[37,41896,422],{"class":82},[37,41898,214],{"class":54},[37,41900,41901],{"class":39,"line":1770},[37,41902,2472],{"emptyLinePlaceholder":131},[37,41904,41905,41907,41909],{"class":39,"line":1799},[37,41906,30871],{"class":50},[37,41908,31163],{"class":2035},[37,41910,31166],{"class":54},[37,41912,41913,41916,41918,41920,41922,41924],{"class":39,"line":1804},[37,41914,41915],{"class":54},"        p1",[37,41917,70],{"class":50},[37,41919,30893],{"class":82},[37,41921,35253],{"class":54},[37,41923,30893],{"class":82},[37,41925,41926],{"class":54},".p1_1(x))\n",[37,41928,41929,41931,41933,41935,41937,41939,41942,41944,41946,41948],{"class":39,"line":1821},[37,41930,7157],{"class":54},[37,41932,70],{"class":50},[37,41934,30893],{"class":82},[37,41936,35253],{"class":54},[37,41938,30893],{"class":82},[37,41940,41941],{"class":54},".p2_2(",[37,41943,30893],{"class":82},[37,41945,35253],{"class":54},[37,41947,30893],{"class":82},[37,41949,41950],{"class":54},".p2_1(x))))\n",[37,41952,41953,41956,41958,41960,41962,41964,41967,41969,41971,41973],{"class":39,"line":1826},[37,41954,41955],{"class":54},"        p3",[37,41957,70],{"class":50},[37,41959,30893],{"class":82},[37,41961,35253],{"class":54},[37,41963,30893],{"class":82},[37,41965,41966],{"class":54},".p3_2(",[37,41968,30893],{"class":82},[37,41970,35253],{"class":54},[37,41972,30893],{"class":82},[37,41974,41975],{"class":54},".p3_1(x))))\n",[37,41977,41978,41981,41983,41985,41987,41989,41992,41994],{"class":39,"line":1831},[37,41979,41980],{"class":54},"        p4",[37,41982,70],{"class":50},[37,41984,30893],{"class":82},[37,41986,35253],{"class":54},[37,41988,30893],{"class":82},[37,41990,41991],{"class":54},".p4_2(",[37,41993,30893],{"class":82},[37,41995,41996],{"class":54},".p4_1(x)))\n",[37,41998,41999],{"class":39,"line":1836},[37,42000,42001],{"class":43},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[37,42003,42004,42006,42009,42011,42013,42015],{"class":39,"line":1850},[37,42005,14824],{"class":50},[37,42007,42008],{"class":54}," torch.cat((p1,p2,p3,p4),",[37,42010,32754],{"class":5288},[37,42012,70],{"class":50},[37,42014,422],{"class":82},[37,42016,214],{"class":54},[37,42018,42019],{"class":39,"line":1855},[37,42020,2472],{"emptyLinePlaceholder":131},[37,42022,42023],{"class":39,"line":2649},[37,42024,2472],{"emptyLinePlaceholder":131},[37,42026,42027],{"class":39,"line":2663},[37,42028,42029],{"class":43},"# 搭建GoogLeNet网络\n",[37,42031,42032,42034,42037,42039,42041,42043,42045],{"class":39,"line":2671},[37,42033,14766],{"class":50},[37,42035,42036],{"class":2035}," GoogLeNet",[37,42038,208],{"class":54},[37,42040,30848],{"class":2035},[37,42042,761],{"class":54},[37,42044,30853],{"class":2035},[37,42046,30856],{"class":54},[37,42048,42049],{"class":39,"line":2676},[37,42050,42051],{"class":43},"    # 必须把Inception导入到里边\n",[37,42053,42054,42056,42058],{"class":39,"line":2682},[37,42055,30871],{"class":50},[37,42057,30874],{"class":82},[37,42059,42060],{"class":54},"(self,Inception):\n",[37,42062,42063,42065,42068,42070,42072,42074],{"class":39,"line":2688},[37,42064,30887],{"class":82},[37,42066,42067],{"class":54},"(GoogLeNet,",[37,42069,30893],{"class":82},[37,42071,30896],{"class":54},[37,42073,30899],{"class":82},[37,42075,2048],{"class":54},[37,42077,42078,42080,42083,42085],{"class":39,"line":2693},[37,42079,30915],{"class":82},[37,42081,42082],{"class":54},".b1",[37,42084,70],{"class":50},[37,42086,38078],{"class":54},[37,42088,42089,42091,42093,42095,42097,42099,42101,42103,42105,42107,42109,42111,42113,42115,42117,42119,42121,42123,42125,42127,42129],{"class":39,"line":8020},[37,42090,38083],{"class":54},[37,42092,30926],{"class":5288},[37,42094,70],{"class":50},[37,42096,422],{"class":82},[37,42098,583],{"class":54},[37,42100,30935],{"class":5288},[37,42102,70],{"class":50},[37,42104,408],{"class":82},[37,42106,583],{"class":54},[37,42108,30944],{"class":5288},[37,42110,70],{"class":50},[37,42112,574],{"class":82},[37,42114,583],{"class":54},[37,42116,30999],{"class":5288},[37,42118,70],{"class":50},[37,42120,282],{"class":82},[37,42122,583],{"class":54},[37,42124,30953],{"class":5288},[37,42126,70],{"class":50},[37,42128,276],{"class":82},[37,42130,38116],{"class":54},[37,42132,42133],{"class":39,"line":8044},[37,42134,38121],{"class":54},[37,42136,42137,42139,42141,42143,42145,42147,42149,42151,42153,42155,42157,42159,42161],{"class":39,"line":8049},[37,42138,38166],{"class":54},[37,42140,30944],{"class":5288},[37,42142,70],{"class":50},[37,42144,276],{"class":82},[37,42146,583],{"class":54},[37,42148,30999],{"class":5288},[37,42150,70],{"class":50},[37,42152,282],{"class":82},[37,42154,583],{"class":54},[37,42156,30953],{"class":5288},[37,42158,70],{"class":50},[37,42160,422],{"class":82},[37,42162,214],{"class":54},[37,42164,42165],{"class":39,"line":8055},[37,42166,38195],{"class":54},[37,42168,42169,42171,42174,42176],{"class":39,"line":8082},[37,42170,30915],{"class":82},[37,42172,42173],{"class":54},".b2",[37,42175,70],{"class":50},[37,42177,38078],{"class":54},[37,42179,42180,42182,42184,42186,42188,42190,42192,42194,42196,42198,42200,42202,42204],{"class":39,"line":8087},[37,42181,38083],{"class":54},[37,42183,30926],{"class":5288},[37,42185,70],{"class":50},[37,42187,408],{"class":82},[37,42189,583],{"class":54},[37,42191,30935],{"class":5288},[37,42193,70],{"class":50},[37,42195,408],{"class":82},[37,42197,583],{"class":54},[37,42199,30944],{"class":5288},[37,42201,70],{"class":50},[37,42203,422],{"class":82},[37,42205,38116],{"class":54},[37,42207,42208],{"class":39,"line":8093},[37,42209,38121],{"class":54},[37,42211,42212,42214,42216,42218,42220,42222,42224,42226,42229,42231,42233,42235,42237,42239,42241,42243,42245],{"class":39,"line":8105},[37,42213,38083],{"class":54},[37,42215,30926],{"class":5288},[37,42217,70],{"class":50},[37,42219,408],{"class":82},[37,42221,583],{"class":54},[37,42223,30935],{"class":5288},[37,42225,70],{"class":50},[37,42227,42228],{"class":82},"192",[37,42230,583],{"class":54},[37,42232,30944],{"class":5288},[37,42234,70],{"class":50},[37,42236,276],{"class":82},[37,42238,583],{"class":54},[37,42240,30953],{"class":5288},[37,42242,70],{"class":50},[37,42244,422],{"class":82},[37,42246,38116],{"class":54},[37,42248,42249],{"class":39,"line":8117},[37,42250,38121],{"class":54},[37,42252,42253,42255,42257,42259,42261,42263,42265,42267,42269,42271,42273,42275,42277],{"class":39,"line":8129},[37,42254,38166],{"class":54},[37,42256,30944],{"class":5288},[37,42258,70],{"class":50},[37,42260,276],{"class":82},[37,42262,583],{"class":54},[37,42264,30999],{"class":5288},[37,42266,70],{"class":50},[37,42268,282],{"class":82},[37,42270,583],{"class":54},[37,42272,30953],{"class":5288},[37,42274,70],{"class":50},[37,42276,422],{"class":82},[37,42278,214],{"class":54},[37,42280,42281],{"class":39,"line":9788},[37,42282,38195],{"class":54},[37,42284,42285,42287,42290,42292],{"class":39,"line":9813},[37,42286,30915],{"class":82},[37,42288,42289],{"class":54},".b3",[37,42291,70],{"class":50},[37,42293,38078],{"class":54},[37,42295,42296,42299,42301,42303,42305,42308,42310,42312,42314,42317,42319,42321,42323,42326,42328],{"class":39,"line":9836},[37,42297,42298],{"class":54},"            Inception(",[37,42300,42228],{"class":82},[37,42302,583],{"class":54},[37,42304,408],{"class":82},[37,42306,42307],{"class":54},",(",[37,42309,414],{"class":82},[37,42311,583],{"class":54},[37,42313,32140],{"class":82},[37,42315,42316],{"class":54},"),(",[37,42318,804],{"class":82},[37,42320,583],{"class":54},[37,42322,402],{"class":82},[37,42324,42325],{"class":54},"),",[37,42327,402],{"class":82},[37,42329,38116],{"class":54},[37,42331,42332,42334,42336,42338,42340,42342,42344,42346,42348,42350,42352,42354,42356,42358,42360],{"class":39,"line":9860},[37,42333,42298],{"class":54},[37,42335,34939],{"class":82},[37,42337,583],{"class":54},[37,42339,32140],{"class":82},[37,42341,42307],{"class":54},[37,42343,32140],{"class":82},[37,42345,583],{"class":54},[37,42347,42228],{"class":82},[37,42349,42316],{"class":54},[37,42351,402],{"class":82},[37,42353,583],{"class":54},[37,42355,414],{"class":82},[37,42357,42325],{"class":54},[37,42359,408],{"class":82},[37,42361,38116],{"class":54},[37,42363,42364,42366,42368,42370,42372,42374,42376,42378,42380,42382,42384,42386,42388],{"class":39,"line":9865},[37,42365,38166],{"class":54},[37,42367,30944],{"class":5288},[37,42369,70],{"class":50},[37,42371,276],{"class":82},[37,42373,583],{"class":54},[37,42375,30999],{"class":5288},[37,42377,70],{"class":50},[37,42379,282],{"class":82},[37,42381,583],{"class":54},[37,42383,30953],{"class":5288},[37,42385,70],{"class":50},[37,42387,422],{"class":82},[37,42389,214],{"class":54},[37,42391,42392],{"class":39,"line":9870},[37,42393,38195],{"class":54},[37,42395,42396,42398,42401,42403],{"class":39,"line":9875},[37,42397,30915],{"class":82},[37,42399,42400],{"class":54},".b4",[37,42402,70],{"class":50},[37,42404,38078],{"class":54},[37,42406,42407,42409,42412,42414,42416,42418,42420,42422,42425,42427,42429,42431,42433,42435,42437],{"class":39,"line":9884},[37,42408,42298],{"class":54},[37,42410,42411],{"class":82},"480",[37,42413,583],{"class":54},[37,42415,42228],{"class":82},[37,42417,42307],{"class":54},[37,42419,414],{"class":82},[37,42421,583],{"class":54},[37,42423,42424],{"class":82},"208",[37,42426,42316],{"class":54},[37,42428,804],{"class":82},[37,42430,583],{"class":54},[37,42432,810],{"class":82},[37,42434,42325],{"class":54},[37,42436,408],{"class":82},[37,42438,38116],{"class":54},[37,42440,42441,42443,42445,42447,42449,42451,42453,42455,42457,42459,42461,42463,42465,42467,42469],{"class":39,"line":9889},[37,42442,42298],{"class":54},[37,42444,38526],{"class":82},[37,42446,583],{"class":54},[37,42448,21120],{"class":82},[37,42450,42307],{"class":54},[37,42452,821],{"class":82},[37,42454,583],{"class":54},[37,42456,31571],{"class":82},[37,42458,42316],{"class":54},[37,42460,1003],{"class":82},[37,42462,583],{"class":54},[37,42464,408],{"class":82},[37,42466,42325],{"class":54},[37,42468,408],{"class":82},[37,42470,38116],{"class":54},[37,42472,42473,42475,42477,42479,42481,42483,42485,42487,42489,42491,42493,42495,42497,42499,42501],{"class":39,"line":9895},[37,42474,42298],{"class":54},[37,42476,38526],{"class":82},[37,42478,583],{"class":54},[37,42480,32140],{"class":82},[37,42482,42307],{"class":54},[37,42484,32140],{"class":82},[37,42486,583],{"class":54},[37,42488,34939],{"class":82},[37,42490,42316],{"class":54},[37,42492,1003],{"class":82},[37,42494,583],{"class":54},[37,42496,408],{"class":82},[37,42498,42325],{"class":54},[37,42500,408],{"class":82},[37,42502,38116],{"class":54},[37,42504,42505,42507,42509,42511,42513,42515,42517,42519,42522,42524,42526,42528,42530,42532,42534],{"class":39,"line":9916},[37,42506,42298],{"class":54},[37,42508,38526],{"class":82},[37,42510,583],{"class":54},[37,42512,821],{"class":82},[37,42514,42307],{"class":54},[37,42516,32140],{"class":82},[37,42518,583],{"class":54},[37,42520,42521],{"class":82},"288",[37,42523,42316],{"class":54},[37,42525,402],{"class":82},[37,42527,583],{"class":54},[37,42529,408],{"class":82},[37,42531,42325],{"class":54},[37,42533,408],{"class":82},[37,42535,38116],{"class":54},[37,42537,42538,42540,42543,42545,42547,42549,42551,42553,42556,42558,42560,42562,42564,42566,42568],{"class":39,"line":9922},[37,42539,42298],{"class":54},[37,42541,42542],{"class":82},"528",[37,42544,583],{"class":54},[37,42546,34939],{"class":82},[37,42548,42307],{"class":54},[37,42550,21120],{"class":82},[37,42552,583],{"class":54},[37,42554,42555],{"class":82},"320",[37,42557,42316],{"class":54},[37,42559,402],{"class":82},[37,42561,583],{"class":54},[37,42563,32140],{"class":82},[37,42565,42325],{"class":54},[37,42567,32140],{"class":82},[37,42569,38116],{"class":54},[37,42571,42572,42574,42576,42578,42580,42582,42584,42586,42588,42590,42592,42594,42596],{"class":39,"line":9936},[37,42573,38166],{"class":54},[37,42575,30944],{"class":5288},[37,42577,70],{"class":50},[37,42579,276],{"class":82},[37,42581,583],{"class":54},[37,42583,30999],{"class":5288},[37,42585,70],{"class":50},[37,42587,282],{"class":82},[37,42589,583],{"class":54},[37,42591,30953],{"class":5288},[37,42593,70],{"class":50},[37,42595,422],{"class":82},[37,42597,214],{"class":54},[37,42599,42600],{"class":39,"line":9942},[37,42601,38195],{"class":54},[37,42603,42604,42606,42609,42611],{"class":39,"line":9969},[37,42605,30915],{"class":82},[37,42607,42608],{"class":54},".b5",[37,42610,70],{"class":50},[37,42612,38078],{"class":54},[37,42614,42615,42617,42620,42622,42624,42626,42628,42630,42632,42634,42636,42638,42640,42642,42644],{"class":39,"line":9978},[37,42616,42298],{"class":54},[37,42618,42619],{"class":82},"832",[37,42621,583],{"class":54},[37,42623,34939],{"class":82},[37,42625,42307],{"class":54},[37,42627,21120],{"class":82},[37,42629,583],{"class":54},[37,42631,42555],{"class":82},[37,42633,42316],{"class":54},[37,42635,402],{"class":82},[37,42637,583],{"class":54},[37,42639,32140],{"class":82},[37,42641,42325],{"class":54},[37,42643,32140],{"class":82},[37,42645,38116],{"class":54},[37,42647,42648,42650,42652,42654,42656,42658,42660,42662,42664,42666,42668,42670,42672,42674,42676],{"class":39,"line":9984},[37,42649,42298],{"class":54},[37,42651,42619],{"class":82},[37,42653,583],{"class":54},[37,42655,35009],{"class":82},[37,42657,42307],{"class":54},[37,42659,42228],{"class":82},[37,42661,583],{"class":54},[37,42663,35009],{"class":82},[37,42665,42316],{"class":54},[37,42667,810],{"class":82},[37,42669,583],{"class":54},[37,42671,32140],{"class":82},[37,42673,42325],{"class":54},[37,42675,32140],{"class":82},[37,42677,38116],{"class":54},[37,42679,42680,42683,42685,42687,42689],{"class":39,"line":9992},[37,42681,42682],{"class":54},"            nn.AdaptiveAvgPool2d((",[37,42684,422],{"class":82},[37,42686,583],{"class":54},[37,42688,422],{"class":82},[37,42690,42691],{"class":54},")),\n",[37,42693,42694],{"class":39,"line":9997},[37,42695,38859],{"class":54},[37,42697,42698,42700,42703,42705,42707],{"class":39,"line":16676},[37,42699,38864],{"class":54},[37,42701,42702],{"class":82},"1024",[37,42704,583],{"class":54},[37,42706,650],{"class":82},[37,42708,214],{"class":54},[37,42710,42711],{"class":39,"line":16682},[37,42712,38195],{"class":54},[37,42714,42715],{"class":39,"line":16705},[37,42716,42717],{"class":43},"        # 对模型参数初始化\n",[37,42719,42720,42722,42724,42726,42728],{"class":39,"line":16711},[37,42721,3475],{"class":50},[37,42723,38937],{"class":54},[37,42725,26116],{"class":50},[37,42727,38942],{"class":82},[37,42729,38945],{"class":54},[37,42731,42732,42734,42736],{"class":39,"line":16734},[37,42733,4714],{"class":50},[37,42735,38957],{"class":82},[37,42737,38960],{"class":54},[37,42739,42740,42742,42745,42747,42750,42752,42754,42756,42758],{"class":39,"line":16748},[37,42741,38970],{"class":54},[37,42743,42744],{"class":5288},"mode",[37,42746,70],{"class":50},[37,42748,42749],{"class":309},"'fan_out'",[37,42751,583],{"class":54},[37,42753,38973],{"class":5288},[37,42755,70],{"class":50},[37,42757,38978],{"class":309},[37,42759,214],{"class":54},[37,42761,42762],{"class":39,"line":16768},[37,42763,42764],{"class":43},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[37,42766,42767],{"class":39,"line":16774},[37,42768,42769],{"class":43},"                # ② mode = 'fan_out'决定使用的fan值：\n",[37,42771,42772],{"class":39,"line":16785},[37,42773,42774],{"class":43},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[37,42776,42777],{"class":39,"line":16808},[37,42778,42779],{"class":43},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[37,42781,42782],{"class":39,"line":16830},[37,42783,42784],{"class":43},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[37,42786,42787],{"class":39,"line":16835},[37,42788,42789],{"class":43},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[37,42791,42792,42794,42796,42798,42800,42802],{"class":39,"line":16841},[37,42793,38990],{"class":50},[37,42795,38993],{"class":54},[37,42797,38996],{"class":50},[37,42799,38999],{"class":50},[37,42801,39002],{"class":82},[37,42803,3811],{"class":54},[37,42805,42806,42808,42810],{"class":39,"line":16855},[37,42807,39014],{"class":54},[37,42809,396],{"class":82},[37,42811,214],{"class":54},[37,42813,42814,42817,42819],{"class":39,"line":16868},[37,42815,42816],{"class":50},"                elif",[37,42818,38957],{"class":82},[37,42820,39033],{"class":54},[37,42822,42823,42826,42828,42830,42832],{"class":39,"line":16873},[37,42824,42825],{"class":54},"                    nn.init.normal_(m.weight,",[37,42827,396],{"class":82},[37,42829,583],{"class":54},[37,42831,39055],{"class":82},[37,42833,214],{"class":54},[37,42835,42836,42839,42841,42843,42845,42847],{"class":39,"line":16887},[37,42837,42838],{"class":50},"                    if",[37,42840,38993],{"class":54},[37,42842,38996],{"class":50},[37,42844,38999],{"class":50},[37,42846,39002],{"class":82},[37,42848,3811],{"class":54},[37,42850,42851,42854,42856],{"class":39,"line":16892},[37,42852,42853],{"class":54},"                        nn.init.constant_(m.bias,",[37,42855,396],{"class":82},[37,42857,214],{"class":54},[37,42859,42860],{"class":39,"line":16898},[37,42861,35234],{"class":43},[37,42863,42864,42866,42868],{"class":39,"line":16903},[37,42865,30871],{"class":50},[37,42867,31163],{"class":2035},[37,42869,31166],{"class":54},[37,42871,42872,42874,42876,42878],{"class":39,"line":16917},[37,42873,31171],{"class":54},[37,42875,70],{"class":50},[37,42877,30893],{"class":82},[37,42879,42880],{"class":54},".b1(x)\n",[37,42882,42883,42885,42887,42889],{"class":39,"line":16922},[37,42884,31171],{"class":54},[37,42886,70],{"class":50},[37,42888,30893],{"class":82},[37,42890,42891],{"class":54},".b2(x)\n",[37,42893,42894,42896,42898,42900],{"class":39,"line":16927},[37,42895,31171],{"class":54},[37,42897,70],{"class":50},[37,42899,30893],{"class":82},[37,42901,42902],{"class":54},".b3(x)\n",[37,42904,42905,42907,42909,42911],{"class":39,"line":16941},[37,42906,31171],{"class":54},[37,42908,70],{"class":50},[37,42910,30893],{"class":82},[37,42912,42913],{"class":54},".b4(x)\n",[37,42915,42916,42918,42920,42922],{"class":39,"line":16953},[37,42917,31171],{"class":54},[37,42919,70],{"class":50},[37,42921,30893],{"class":82},[37,42923,42924],{"class":54},".b5(x)\n",[37,42926,42927,42929],{"class":39,"line":16958},[37,42928,14824],{"class":50},[37,42930,31279],{"class":54},[37,42932,42933],{"class":39,"line":16971},[37,42934,2472],{"emptyLinePlaceholder":131},[37,42936,42937],{"class":39,"line":16976},[37,42938,42939],{"class":43},"# 模型展示\n",[37,42941,42942,42944,42946,42948,42950],{"class":39,"line":16981},[37,42943,1603],{"class":50},[37,42945,31290],{"class":82},[37,42947,3021],{"class":50},[37,42949,31295],{"class":309},[37,42951,3811],{"class":54},[37,42953,42954,42956,42958,42960,42962,42964,42966,42968,42970],{"class":39,"line":16986},[37,42955,31307],{"class":54},[37,42957,70],{"class":50},[37,42959,30521],{"class":54},[37,42961,31314],{"class":309},[37,42963,1776],{"class":50},[37,42965,31319],{"class":54},[37,42967,1773],{"class":50},[37,42969,30546],{"class":309},[37,42971,214],{"class":54},[37,42973,42974,42976,42978],{"class":39,"line":16999},[37,42975,31359],{"class":54},[37,42977,70],{"class":50},[37,42979,42980],{"class":54},"GoogLeNet(Inception).to(device)\n",[37,42982,42983,42985,42987,42989,42991,42993,42995,42997],{"class":39,"line":17004},[37,42984,31369],{"class":82},[37,42986,31372],{"class":54},[37,42988,422],{"class":82},[37,42990,583],{"class":54},[37,42992,31571],{"class":82},[37,42994,583],{"class":54},[37,42996,31571],{"class":82},[37,42998,31385],{"class":54},[158,43000,43001],{"start":47},[161,43002,39252],{},[27,43004,43006],{"className":29,"code":43005,"language":31,"meta":32,"style":32},"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",[34,43007,43008,43014,43020,43030,43036,43046,43056,43066,43076,43086,43090,43101,43111,43115,43119,43123,43131,43143,43153,43169,43179,43211,43225,43235,43245,43249,43259,43273,43283,43293,43303,43309,43313,43317,43321,43325,43329,43337,43357,43361,43365,43369,43373,43377,43393,43397,43401,43409,43413,43417,43425,43429,43433,43437,43445,43449,43453,43457,43461,43469,43473,43481,43485,43493,43497,43505,43509,43517,43521,43525,43533,43537,43541,43545,43557,43581,43595,43599,43603,43607,43615,43619,43627,43631,43639,43643,43651,43655,43663,43667,43675,43679,43691,43695,43703,43707,43715,43719,43723,43727,43731,43739,43743,43759,43763,43771,43775,43779,43783,43787,43791,43795,43799,43815,43819,43831,43835,43847,43851,43863,43867,43875,43879,43887,43891,43895,43899,43905,43909,43917,43921,43937,43941,43949,43953,43969,43981,43985,43997,44001,44005,44013,44017,44021,44029,44033,44041,44045,44053,44057,44061,44103,44145,44149,44153,44169,44173,44189,44193,44197,44205,44209,44213,44225,44263,44267,44271,44279,44283,44297,44307,44313,44319,44325,44331,44335,44339,44345,44349,44353,44361,44365,44383,44387,44391,44395,44411,44415,44419,44423,44427,44431,44451,44471,44475,44479,44483,44491,44499,44503,44519,44539,44559,44563,44567,44575,44583,44587,44591,44595,44607,44611,44621,44629,44646],{"__ignoreMap":32},[37,43009,43010,43012],{"class":39,"line":40},[37,43011,51],{"class":50},[37,43013,31892],{"class":54},[37,43015,43016,43018],{"class":39,"line":47},[37,43017,51],{"class":50},[37,43019,31899],{"class":54},[37,43021,43022,43024,43026,43028],{"class":39,"line":58},[37,43023,51],{"class":50},[37,43025,31910],{"class":54},[37,43027,31453],{"class":50},[37,43029,31915],{"class":54},[37,43031,43032,43034],{"class":39,"line":64},[37,43033,51],{"class":50},[37,43035,30465],{"class":54},[37,43037,43038,43040,43042,43044],{"class":39,"line":76},[37,43039,30807],{"class":50},[37,43041,31485],{"class":54},[37,43043,51],{"class":50},[37,43045,31932],{"class":54},[37,43047,43048,43050,43052,43054],{"class":39,"line":92},[37,43049,30807],{"class":50},[37,43051,31438],{"class":54},[37,43053,51],{"class":50},[37,43055,31443],{"class":54},[37,43057,43058,43060,43062,43064],{"class":39,"line":97},[37,43059,30807],{"class":50},[37,43061,31468],{"class":54},[37,43063,51],{"class":50},[37,43065,31473],{"class":54},[37,43067,43068,43070,43072,43074],{"class":39,"line":107},[37,43069,51],{"class":50},[37,43071,31485],{"class":54},[37,43073,31453],{"class":50},[37,43075,31490],{"class":54},[37,43077,43078,43080,43082,43084],{"class":39,"line":1390},[37,43079,51],{"class":50},[37,43081,31502],{"class":54},[37,43083,31453],{"class":50},[37,43085,31507],{"class":54},[37,43087,43088],{"class":39,"line":1402},[37,43089,31977],{"class":43},[37,43091,43092,43094,43096,43098],{"class":39,"line":1684},[37,43093,30807],{"class":50},[37,43095,31984],{"class":54},[37,43097,51],{"class":50},[37,43099,43100],{"class":54}," GoogLeNet, Inception\n",[37,43102,43103,43105,43107,43109],{"class":39,"line":1689},[37,43104,30807],{"class":50},[37,43106,30810],{"class":54},[37,43108,51],{"class":50},[37,43110,30815],{"class":54},[37,43112,43113],{"class":39,"line":1695},[37,43114,2472],{"emptyLinePlaceholder":131},[37,43116,43117],{"class":39,"line":1700},[37,43118,2472],{"emptyLinePlaceholder":131},[37,43120,43121],{"class":39,"line":1714},[37,43122,32012],{"class":43},[37,43124,43125,43127,43129],{"class":39,"line":1719},[37,43126,32017],{"class":50},[37,43128,32020],{"class":2035},[37,43130,32023],{"class":54},[37,43132,43133,43135,43137,43139,43141],{"class":39,"line":1725},[37,43134,32028],{"class":54},[37,43136,70],{"class":50},[37,43138,31525],{"class":54},[37,43140,31533],{"class":309},[37,43142,31536],{"class":54},[37,43144,43145,43147,43149,43151],{"class":39,"line":1746},[37,43146,32041],{"class":5288},[37,43148,70],{"class":50},[37,43150,31546],{"class":82},[37,43152,31536],{"class":54},[37,43154,43155,43157,43159,43161,43163,43165,43167],{"class":39,"line":1751},[37,43156,32052],{"class":5288},[37,43158,70],{"class":50},[37,43160,31563],{"class":54},[37,43162,31566],{"class":5288},[37,43164,70],{"class":50},[37,43166,35518],{"class":82},[37,43168,31574],{"class":54},[37,43170,43171,43173,43175,43177],{"class":39,"line":1765},[37,43172,32069],{"class":5288},[37,43174,70],{"class":50},[37,43176,31546],{"class":82},[37,43178,214],{"class":54},[37,43180,43181,43183,43185,43187,43189,43191,43193,43195,43197,43199,43201,43203,43205,43207,43209],{"class":39,"line":1770},[37,43182,32080],{"class":54},[37,43184,70],{"class":50},[37,43186,32085],{"class":54},[37,43188,32088],{"class":82},[37,43190,208],{"class":54},[37,43192,32093],{"class":82},[37,43194,659],{"class":50},[37,43196,7430],{"class":82},[37,43198,32100],{"class":54},[37,43200,32088],{"class":82},[37,43202,208],{"class":54},[37,43204,32107],{"class":82},[37,43206,659],{"class":50},[37,43208,7430],{"class":82},[37,43210,32114],{"class":54},[37,43212,43213,43215,43217,43219,43221,43223],{"class":39,"line":1799},[37,43214,32119],{"class":54},[37,43216,70],{"class":50},[37,43218,32124],{"class":54},[37,43220,31607],{"class":5288},[37,43222,70],{"class":50},[37,43224,31612],{"class":54},[37,43226,43227,43229,43231,43233],{"class":39,"line":1804},[37,43228,32135],{"class":5288},[37,43230,70],{"class":50},[37,43232,402],{"class":82},[37,43234,31536],{"class":54},[37,43236,43237,43239,43241,43243],{"class":39,"line":1821},[37,43238,32147],{"class":5288},[37,43240,70],{"class":50},[37,43242,31546],{"class":82},[37,43244,31536],{"class":54},[37,43246,43247],{"class":39,"line":1826},[37,43248,32158],{"class":43},[37,43250,43251,43253,43255,43257],{"class":39,"line":1831},[37,43252,32163],{"class":5288},[37,43254,70],{"class":50},[37,43256,600],{"class":82},[37,43258,214],{"class":54},[37,43260,43261,43263,43265,43267,43269,43271],{"class":39,"line":1836},[37,43262,32174],{"class":54},[37,43264,70],{"class":50},[37,43266,31604],{"class":54},[37,43268,31607],{"class":5288},[37,43270,70],{"class":50},[37,43272,32185],{"class":54},[37,43274,43275,43277,43279,43281],{"class":39,"line":1850},[37,43276,32190],{"class":5288},[37,43278,70],{"class":50},[37,43280,402],{"class":82},[37,43282,31536],{"class":54},[37,43284,43285,43287,43289,43291],{"class":39,"line":1855},[37,43286,32201],{"class":5288},[37,43288,70],{"class":50},[37,43290,31546],{"class":82},[37,43292,31536],{"class":54},[37,43294,43295,43297,43299,43301],{"class":39,"line":2649},[37,43296,32212],{"class":5288},[37,43298,70],{"class":50},[37,43300,600],{"class":82},[37,43302,214],{"class":54},[37,43304,43305,43307],{"class":39,"line":2663},[37,43306,4162],{"class":50},[37,43308,32225],{"class":54},[37,43310,43311],{"class":39,"line":2671},[37,43312,2472],{"emptyLinePlaceholder":131},[37,43314,43315],{"class":39,"line":2676},[37,43316,32234],{"class":43},[37,43318,43319],{"class":39,"line":2682},[37,43320,32239],{"class":43},[37,43322,43323],{"class":39,"line":2688},[37,43324,2472],{"emptyLinePlaceholder":131},[37,43326,43327],{"class":39,"line":2693},[37,43328,32248],{"class":43},[37,43330,43331,43333,43335],{"class":39,"line":8020},[37,43332,32017],{"class":50},[37,43334,32255],{"class":2035},[37,43336,32258],{"class":54},[37,43338,43339,43341,43343,43345,43347,43349,43351,43353,43355],{"class":39,"line":8044},[37,43340,31307],{"class":54},[37,43342,70],{"class":50},[37,43344,30521],{"class":54},[37,43346,31314],{"class":309},[37,43348,1776],{"class":50},[37,43350,31319],{"class":54},[37,43352,1773],{"class":50},[37,43354,32277],{"class":309},[37,43356,214],{"class":54},[37,43358,43359],{"class":39,"line":8049},[37,43360,2472],{"emptyLinePlaceholder":131},[37,43362,43363],{"class":39,"line":8055},[37,43364,2472],{"emptyLinePlaceholder":131},[37,43366,43367],{"class":39,"line":8082},[37,43368,32292],{"class":43},[37,43370,43371],{"class":39,"line":8087},[37,43372,32297],{"class":43},[37,43374,43375],{"class":39,"line":8093},[37,43376,32302],{"class":43},[37,43378,43379,43381,43383,43385,43387,43389,43391],{"class":39,"line":8105},[37,43380,32307],{"class":54},[37,43382,70],{"class":50},[37,43384,32312],{"class":54},[37,43386,32315],{"class":5288},[37,43388,70],{"class":50},[37,43390,32320],{"class":82},[37,43392,214],{"class":54},[37,43394,43395],{"class":39,"line":8117},[37,43396,2472],{"emptyLinePlaceholder":131},[37,43398,43399],{"class":39,"line":8129},[37,43400,32331],{"class":43},[37,43402,43403,43405,43407],{"class":39,"line":9788},[37,43404,32336],{"class":54},[37,43406,70],{"class":50},[37,43408,32341],{"class":54},[37,43410,43411],{"class":39,"line":9813},[37,43412,2472],{"emptyLinePlaceholder":131},[37,43414,43415],{"class":39,"line":9836},[37,43416,32350],{"class":43},[37,43418,43419,43421,43423],{"class":39,"line":9860},[37,43420,31359],{"class":54},[37,43422,70],{"class":50},[37,43424,32359],{"class":54},[37,43426,43427],{"class":39,"line":9865},[37,43428,32364],{"class":43},[37,43430,43431],{"class":39,"line":9870},[37,43432,32369],{"class":43},[37,43434,43435],{"class":39,"line":9875},[37,43436,32374],{"class":43},[37,43438,43439,43441,43443],{"class":39,"line":9884},[37,43440,32379],{"class":54},[37,43442,70],{"class":50},[37,43444,32384],{"class":54},[37,43446,43447],{"class":39,"line":9889},[37,43448,2472],{"emptyLinePlaceholder":131},[37,43450,43451],{"class":39,"line":9895},[37,43452,2472],{"emptyLinePlaceholder":131},[37,43454,43455],{"class":39,"line":9916},[37,43456,32397],{"class":43},[37,43458,43459],{"class":39,"line":9922},[37,43460,32402],{"class":43},[37,43462,43463,43465,43467],{"class":39,"line":9936},[37,43464,32407],{"class":54},[37,43466,70],{"class":50},[37,43468,32412],{"class":82},[37,43470,43471],{"class":39,"line":9942},[37,43472,32417],{"class":43},[37,43474,43475,43477,43479],{"class":39,"line":9969},[37,43476,32422],{"class":54},[37,43478,70],{"class":50},[37,43480,32427],{"class":54},[37,43482,43483],{"class":39,"line":9978},[37,43484,32432],{"class":43},[37,43486,43487,43489,43491],{"class":39,"line":9984},[37,43488,32437],{"class":54},[37,43490,70],{"class":50},[37,43492,32427],{"class":54},[37,43494,43495],{"class":39,"line":9992},[37,43496,32446],{"class":43},[37,43498,43499,43501,43503],{"class":39,"line":9997},[37,43500,32451],{"class":54},[37,43502,70],{"class":50},[37,43504,32427],{"class":54},[37,43506,43507],{"class":39,"line":16676},[37,43508,32460],{"class":43},[37,43510,43511,43513,43515],{"class":39,"line":16682},[37,43512,32465],{"class":54},[37,43514,70],{"class":50},[37,43516,32427],{"class":54},[37,43518,43519],{"class":39,"line":16705},[37,43520,2472],{"emptyLinePlaceholder":131},[37,43522,43523],{"class":39,"line":16711},[37,43524,32478],{"class":43},[37,43526,43527,43529,43531],{"class":39,"line":16734},[37,43528,32483],{"class":54},[37,43530,70],{"class":50},[37,43532,73],{"class":54},[37,43534,43535],{"class":39,"line":16748},[37,43536,2472],{"emptyLinePlaceholder":131},[37,43538,43539],{"class":39,"line":16768},[37,43540,2472],{"emptyLinePlaceholder":131},[37,43542,43543],{"class":39,"line":16774},[37,43544,32500],{"class":43},[37,43546,43547,43549,43551,43553,43555],{"class":39,"line":16785},[37,43548,3273],{"class":50},[37,43550,32507],{"class":54},[37,43552,26116],{"class":50},[37,43554,32512],{"class":82},[37,43556,32515],{"class":54},[37,43558,43559,43561,43563,43565,43567,43569,43571,43573,43575,43577,43579],{"class":39,"line":16808},[37,43560,32520],{"class":82},[37,43562,208],{"class":54},[37,43564,32525],{"class":309},[37,43566,32528],{"class":82},[37,43568,787],{"class":309},[37,43570,32528],{"class":82},[37,43572,456],{"class":309},[37,43574,32537],{"class":54},[37,43576,112],{"class":50},[37,43578,422],{"class":82},[37,43580,30567],{"class":54},[37,43582,43583,43585,43587,43589,43591,43593],{"class":39,"line":16830},[37,43584,32520],{"class":82},[37,43586,208],{"class":54},[37,43588,32552],{"class":309},[37,43590,659],{"class":50},[37,43592,650],{"class":82},[37,43594,214],{"class":54},[37,43596,43597],{"class":39,"line":16835},[37,43598,2472],{"emptyLinePlaceholder":131},[37,43600,43601],{"class":39,"line":16841},[37,43602,32567],{"class":43},[37,43604,43605],{"class":39,"line":16855},[37,43606,32572],{"class":43},[37,43608,43609,43611,43613],{"class":39,"line":16868},[37,43610,32577],{"class":54},[37,43612,70],{"class":50},[37,43614,32412],{"class":82},[37,43616,43617],{"class":39,"line":16873},[37,43618,32586],{"class":43},[37,43620,43621,43623,43625],{"class":39,"line":16887},[37,43622,32591],{"class":54},[37,43624,70],{"class":50},[37,43626,3157],{"class":82},[37,43628,43629],{"class":39,"line":16892},[37,43630,32600],{"class":43},[37,43632,43633,43635,43637],{"class":39,"line":16898},[37,43634,32605],{"class":54},[37,43636,70],{"class":50},[37,43638,32412],{"class":82},[37,43640,43641],{"class":39,"line":16903},[37,43642,32614],{"class":43},[37,43644,43645,43647,43649],{"class":39,"line":16917},[37,43646,32619],{"class":54},[37,43648,70],{"class":50},[37,43650,3157],{"class":82},[37,43652,43653],{"class":39,"line":16922},[37,43654,32628],{"class":43},[37,43656,43657,43659,43661],{"class":39,"line":16927},[37,43658,32633],{"class":54},[37,43660,70],{"class":50},[37,43662,3157],{"class":82},[37,43664,43665],{"class":39,"line":16941},[37,43666,32642],{"class":43},[37,43668,43669,43671,43673],{"class":39,"line":16953},[37,43670,32647],{"class":54},[37,43672,70],{"class":50},[37,43674,3157],{"class":82},[37,43676,43677],{"class":39,"line":16958},[37,43678,32656],{"class":43},[37,43680,43681,43683,43685,43687,43689],{"class":39,"line":16971},[37,43682,3475],{"class":50},[37,43684,31671],{"class":54},[37,43686,26116],{"class":50},[37,43688,31676],{"class":82},[37,43690,32669],{"class":54},[37,43692,43693],{"class":39,"line":16976},[37,43694,32674],{"class":43},[37,43696,43697,43699,43701],{"class":39,"line":16981},[37,43698,32679],{"class":54},[37,43700,70],{"class":50},[37,43702,32684],{"class":54},[37,43704,43705],{"class":39,"line":16986},[37,43706,32689],{"class":43},[37,43708,43709,43711,43713],{"class":39,"line":16999},[37,43710,32694],{"class":54},[37,43712,70],{"class":50},[37,43714,32699],{"class":54},[37,43716,43717],{"class":39,"line":17004},[37,43718,32705],{"class":43},[37,43720,43721],{"class":39,"line":32702},[37,43722,32711],{"class":54},[37,43724,43725],{"class":39,"line":32708},[37,43726,32717],{"class":43},[37,43728,43729],{"class":39,"line":32714},[37,43730,32723],{"class":43},[37,43732,43733,43735,43737],{"class":39,"line":32720},[37,43734,32729],{"class":54},[37,43736,70],{"class":50},[37,43738,32734],{"class":54},[37,43740,43741],{"class":39,"line":32726},[37,43742,32740],{"class":43},[37,43744,43745,43747,43749,43751,43753,43755,43757],{"class":39,"line":32737},[37,43746,32746],{"class":54},[37,43748,70],{"class":50},[37,43750,32751],{"class":54},[37,43752,32754],{"class":5288},[37,43754,70],{"class":50},[37,43756,422],{"class":82},[37,43758,214],{"class":54},[37,43760,43761],{"class":39,"line":32743},[37,43762,32766],{"class":43},[37,43764,43765,43767,43769],{"class":39,"line":32763},[37,43766,32772],{"class":54},[37,43768,70],{"class":50},[37,43770,32777],{"class":54},[37,43772,43773],{"class":39,"line":32769},[37,43774,32783],{"class":43},[37,43776,43777],{"class":39,"line":32780},[37,43778,32789],{"class":54},[37,43780,43781],{"class":39,"line":32786},[37,43782,32795],{"class":43},[37,43784,43785],{"class":39,"line":32792},[37,43786,32801],{"class":54},[37,43788,43789],{"class":39,"line":32798},[37,43790,32807],{"class":43},[37,43792,43793],{"class":39,"line":32804},[37,43794,32813],{"class":54},[37,43796,43797],{"class":39,"line":32810},[37,43798,32819],{"class":43},[37,43800,43801,43803,43805,43807,43809,43811,43813],{"class":39,"line":32816},[37,43802,32825],{"class":54},[37,43804,9549],{"class":50},[37,43806,32830],{"class":54},[37,43808,659],{"class":50},[37,43810,32835],{"class":54},[37,43812,396],{"class":82},[37,43814,214],{"class":54},[37,43816,43817],{"class":39,"line":32822},[37,43818,32845],{"class":43},[37,43820,43821,43823,43825,43827,43829],{"class":39,"line":32842},[37,43822,32851],{"class":54},[37,43824,9549],{"class":50},[37,43826,32856],{"class":54},[37,43828,3021],{"class":50},[37,43830,32861],{"class":54},[37,43832,43833],{"class":39,"line":32848},[37,43834,32867],{"class":43},[37,43836,43837,43839,43841,43843,43845],{"class":39,"line":32864},[37,43838,32873],{"class":54},[37,43840,9549],{"class":50},[37,43842,32835],{"class":54},[37,43844,396],{"class":82},[37,43846,214],{"class":54},[37,43848,43849],{"class":39,"line":32870},[37,43850,32887],{"class":43},[37,43852,43853,43855,43857,43859,43861],{"class":39,"line":32884},[37,43854,3475],{"class":50},[37,43856,32895],{"class":54},[37,43858,26116],{"class":50},[37,43860,31676],{"class":82},[37,43862,32902],{"class":54},[37,43864,43865],{"class":39,"line":32890},[37,43866,32908],{"class":43},[37,43868,43869,43871,43873],{"class":39,"line":32905},[37,43870,32679],{"class":54},[37,43872,70],{"class":50},[37,43874,32684],{"class":54},[37,43876,43877],{"class":39,"line":32911},[37,43878,32923],{"class":43},[37,43880,43881,43883,43885],{"class":39,"line":32920},[37,43882,32694],{"class":54},[37,43884,70],{"class":50},[37,43886,32699],{"class":54},[37,43888,43889],{"class":39,"line":32926},[37,43890,32938],{"class":43},[37,43892,43893],{"class":39,"line":32935},[37,43894,32944],{"class":54},[37,43896,43897],{"class":39,"line":32941},[37,43898,36425],{"class":43},[37,43900,43901,43903],{"class":39,"line":32947},[37,43902,32950],{"class":50},[37,43904,32953],{"class":54},[37,43906,43907],{"class":39,"line":32956},[37,43908,32959],{"class":43},[37,43910,43911,43913,43915],{"class":39,"line":32962},[37,43912,36440],{"class":54},[37,43914,70],{"class":50},[37,43916,32734],{"class":54},[37,43918,43919],{"class":39,"line":32973},[37,43920,32976],{"class":43},[37,43922,43923,43925,43927,43929,43931,43933,43935],{"class":39,"line":32979},[37,43924,36453],{"class":54},[37,43926,70],{"class":50},[37,43928,32751],{"class":54},[37,43930,32754],{"class":5288},[37,43932,70],{"class":50},[37,43934,422],{"class":82},[37,43936,214],{"class":54},[37,43938,43939],{"class":39,"line":32998},[37,43940,33001],{"class":43},[37,43942,43943,43945,43947],{"class":39,"line":33004},[37,43944,36474],{"class":54},[37,43946,70],{"class":50},[37,43948,32777],{"class":54},[37,43950,43951],{"class":39,"line":33015},[37,43952,33018],{"class":43},[37,43954,43955,43957,43959,43961,43963,43965,43967],{"class":39,"line":33021},[37,43956,36487],{"class":54},[37,43958,9549],{"class":50},[37,43960,36492],{"class":54},[37,43962,659],{"class":50},[37,43964,32835],{"class":54},[37,43966,396],{"class":82},[37,43968,214],{"class":54},[37,43970,43971,43973,43975,43977,43979],{"class":39,"line":33041},[37,43972,36505],{"class":54},[37,43974,9549],{"class":50},[37,43976,32856],{"class":54},[37,43978,3021],{"class":50},[37,43980,32861],{"class":54},[37,43982,43983],{"class":39,"line":33057},[37,43984,36518],{"class":43},[37,43986,43987,43989,43991,43993,43995],{"class":39,"line":33063},[37,43988,36523],{"class":54},[37,43990,9549],{"class":50},[37,43992,32835],{"class":54},[37,43994,396],{"class":82},[37,43996,214],{"class":54},[37,43998,43999],{"class":39,"line":33077},[37,44000,33080],{"class":43},[37,44002,44003],{"class":39,"line":33083},[37,44004,33086],{"class":43},[37,44006,44007,44009,44011],{"class":39,"line":33089},[37,44008,33092],{"class":54},[37,44010,787],{"class":50},[37,44012,33097],{"class":54},[37,44014,44015],{"class":39,"line":33100},[37,44016,33103],{"class":43},[37,44018,44019],{"class":39,"line":33106},[37,44020,33109],{"class":43},[37,44022,44023,44025,44027],{"class":39,"line":33112},[37,44024,33115],{"class":54},[37,44026,787],{"class":50},[37,44028,33097],{"class":54},[37,44030,44031],{"class":39,"line":33122},[37,44032,33125],{"class":43},[37,44034,44035,44037,44039],{"class":39,"line":33128},[37,44036,33131],{"class":54},[37,44038,787],{"class":50},[37,44040,33136],{"class":54},[37,44042,44043],{"class":39,"line":33139},[37,44044,33142],{"class":43},[37,44046,44047,44049,44051],{"class":39,"line":33145},[37,44048,33148],{"class":54},[37,44050,787],{"class":50},[37,44052,33136],{"class":54},[37,44054,44055],{"class":39,"line":33155},[37,44056,2472],{"emptyLinePlaceholder":131},[37,44058,44059],{"class":39,"line":33160},[37,44060,33163],{"class":43},[37,44062,44063,44065,44067,44069,44071,44073,44075,44077,44079,44081,44083,44085,44087,44089,44091,44093,44095,44097,44099,44101],{"class":39,"line":33166},[37,44064,32520],{"class":82},[37,44066,208],{"class":54},[37,44068,3664],{"class":309},[37,44070,32528],{"class":82},[37,44072,33177],{"class":309},[37,44074,1099],{"class":82},[37,44076,33182],{"class":50},[37,44078,1149],{"class":82},[37,44080,33187],{"class":309},[37,44082,1099],{"class":82},[37,44084,33182],{"class":50},[37,44086,1149],{"class":82},[37,44088,3664],{"class":309},[37,44090,33198],{"class":54},[37,44092,112],{"class":50},[37,44094,422],{"class":82},[37,44096,33205],{"class":54},[37,44098,112],{"class":50},[37,44100,422],{"class":82},[37,44102,33212],{"class":54},[37,44104,44105,44107,44109,44111,44113,44115,44117,44119,44121,44123,44125,44127,44129,44131,44133,44135,44137,44139,44141,44143],{"class":39,"line":33215},[37,44106,32520],{"class":82},[37,44108,208],{"class":54},[37,44110,3664],{"class":309},[37,44112,32528],{"class":82},[37,44114,33226],{"class":309},[37,44116,1099],{"class":82},[37,44118,33182],{"class":50},[37,44120,1149],{"class":82},[37,44122,33235],{"class":309},[37,44124,1099],{"class":82},[37,44126,33182],{"class":50},[37,44128,1149],{"class":82},[37,44130,3664],{"class":309},[37,44132,33246],{"class":54},[37,44134,112],{"class":50},[37,44136,422],{"class":82},[37,44138,33253],{"class":54},[37,44140,112],{"class":50},[37,44142,422],{"class":82},[37,44144,33212],{"class":54},[37,44146,44147],{"class":39,"line":33262},[37,44148,2472],{"emptyLinePlaceholder":131},[37,44150,44151],{"class":39,"line":33267},[37,44152,33270],{"class":43},[37,44154,44155,44157,44159,44161,44163,44165,44167],{"class":39,"line":33273},[37,44156,2569],{"class":50},[37,44158,33278],{"class":54},[37,44160,112],{"class":50},[37,44162,422],{"class":82},[37,44164,1143],{"class":54},[37,44166,1163],{"class":50},[37,44168,33289],{"class":54},[37,44170,44171],{"class":39,"line":33292},[37,44172,33295],{"class":43},[37,44174,44175,44177,44179,44181,44183,44185,44187],{"class":39,"line":33298},[37,44176,33301],{"class":54},[37,44178,247],{"class":82},[37,44180,70],{"class":50},[37,44182,33308],{"class":54},[37,44184,112],{"class":50},[37,44186,422],{"class":82},[37,44188,33315],{"class":54},[37,44190,44191],{"class":39,"line":33318},[37,44192,33321],{"class":43},[37,44194,44195],{"class":39,"line":33324},[37,44196,33327],{"class":43},[37,44198,44199,44201,44203],{"class":39,"line":33330},[37,44200,33333],{"class":54},[37,44202,70],{"class":50},[37,44204,32384],{"class":54},[37,44206,44207],{"class":39,"line":33340},[37,44208,2472],{"emptyLinePlaceholder":131},[37,44210,44211],{"class":39,"line":33345},[37,44212,33348],{"class":43},[37,44214,44215,44217,44219,44221,44223],{"class":39,"line":33351},[37,44216,33354],{"class":54},[37,44218,70],{"class":50},[37,44220,33359],{"class":54},[37,44222,112],{"class":50},[37,44224,33364],{"class":54},[37,44226,44227,44229,44231,44233,44235,44237,44239,44241,44243,44245,44247,44249,44251,44253,44255,44257,44259,44261],{"class":39,"line":33367},[37,44228,32520],{"class":82},[37,44230,208],{"class":54},[37,44232,33374],{"class":309},[37,44234,1099],{"class":82},[37,44236,33379],{"class":50},[37,44238,1149],{"class":82},[37,44240,747],{"class":309},[37,44242,1099],{"class":82},[37,44244,33379],{"class":50},[37,44246,1149],{"class":82},[37,44248,33392],{"class":309},[37,44250,33395],{"class":54},[37,44252,33398],{"class":50},[37,44254,1110],{"class":82},[37,44256,33403],{"class":54},[37,44258,533],{"class":50},[37,44260,1110],{"class":82},[37,44262,30567],{"class":54},[37,44264,44265],{"class":39,"line":33412},[37,44266,36802],{"class":43},[37,44268,44269],{"class":39,"line":33418},[37,44270,36807],{"class":43},[37,44272,44273,44275,44277],{"class":39,"line":33424},[37,44274,36812],{"class":54},[37,44276,33436],{"class":309},[37,44278,214],{"class":54},[37,44280,44281],{"class":39,"line":33430},[37,44282,33456],{"class":43},[37,44284,44285,44287,44289,44291,44293,44295],{"class":39,"line":33441},[37,44286,33462],{"class":54},[37,44288,70],{"class":50},[37,44290,33467],{"class":54},[37,44292,33470],{"class":5288},[37,44294,70],{"class":50},[37,44296,1618],{"class":54},[37,44298,44299,44301,44303,44305],{"class":39,"line":33447},[37,44300,33480],{"class":309},[37,44302,1062],{"class":54},[37,44304,33485],{"class":82},[37,44306,33488],{"class":54},[37,44308,44309,44311],{"class":39,"line":33453},[37,44310,33494],{"class":309},[37,44312,33497],{"class":54},[37,44314,44315,44317],{"class":39,"line":33459},[37,44316,33503],{"class":309},[37,44318,33506],{"class":54},[37,44320,44321,44323],{"class":39,"line":33477},[37,44322,33512],{"class":309},[37,44324,33515],{"class":54},[37,44326,44327,44329],{"class":39,"line":33491},[37,44328,33521],{"class":309},[37,44330,33524],{"class":54},[37,44332,44333],{"class":39,"line":33500},[37,44334,33530],{"class":54},[37,44336,44337],{"class":39,"line":33509},[37,44338,33536],{"class":43},[37,44340,44341,44343],{"class":39,"line":33518},[37,44342,4162],{"class":50},[37,44344,33544],{"class":54},[37,44346,44347],{"class":39,"line":33527},[37,44348,2472],{"emptyLinePlaceholder":131},[37,44350,44351],{"class":39,"line":33533},[37,44352,33555],{"class":43},[37,44354,44355,44357,44359],{"class":39,"line":33539},[37,44356,32017],{"class":50},[37,44358,33563],{"class":2035},[37,44360,33566],{"class":54},[37,44362,44363],{"class":39,"line":33547},[37,44364,33572],{"class":43},[37,44366,44367,44369,44371,44373,44375,44377,44379,44381],{"class":39,"line":33552},[37,44368,33578],{"class":54},[37,44370,31763],{"class":5288},[37,44372,70],{"class":50},[37,44374,208],{"class":54},[37,44376,702],{"class":82},[37,44378,583],{"class":54},[37,44380,498],{"class":82},[37,44382,30567],{"class":54},[37,44384,44385],{"class":39,"line":33558},[37,44386,33598],{"class":43},[37,44388,44389],{"class":39,"line":33569},[37,44390,33604],{"class":43},[37,44392,44393],{"class":39,"line":33575},[37,44394,33610],{"class":43},[37,44396,44397,44399,44401,44403,44405,44407,44409],{"class":39,"line":33595},[37,44398,31797],{"class":54},[37,44400,422],{"class":82},[37,44402,583],{"class":54},[37,44404,282],{"class":82},[37,44406,583],{"class":54},[37,44408,422],{"class":82},[37,44410,214],{"class":54},[37,44412,44413],{"class":39,"line":33601},[37,44414,33633],{"class":43},[37,44416,44417],{"class":39,"line":33607},[37,44418,33639],{"class":43},[37,44420,44421],{"class":39,"line":33613},[37,44422,33645],{"class":43},[37,44424,44425],{"class":39,"line":33630},[37,44426,33651],{"class":43},[37,44428,44429],{"class":39,"line":33636},[37,44430,33657],{"class":43},[37,44432,44433,44435,44437,44439,44441,44443,44445,44447,44449],{"class":39,"line":33642},[37,44434,33663],{"class":54},[37,44436,33666],{"class":309},[37,44438,33669],{"class":54},[37,44440,33672],{"class":309},[37,44442,583],{"class":54},[37,44444,33677],{"class":5288},[37,44446,70],{"class":50},[37,44448,33682],{"class":309},[37,44450,214],{"class":54},[37,44452,44453,44455,44457,44459,44461,44463,44465,44467,44469],{"class":39,"line":33648},[37,44454,33663],{"class":54},[37,44456,33666],{"class":309},[37,44458,33694],{"class":54},[37,44460,33697],{"class":309},[37,44462,583],{"class":54},[37,44464,33677],{"class":5288},[37,44466,70],{"class":50},[37,44468,33706],{"class":309},[37,44470,214],{"class":54},[37,44472,44473],{"class":39,"line":33654},[37,44474,33714],{"class":43},[37,44476,44477],{"class":39,"line":33660},[37,44478,33720],{"class":54},[37,44480,44481],{"class":39,"line":33687},[37,44482,33726],{"class":43},[37,44484,44485,44487,44489],{"class":39,"line":33711},[37,44486,33732],{"class":54},[37,44488,33735],{"class":309},[37,44490,214],{"class":54},[37,44492,44493,44495,44497],{"class":39,"line":33717},[37,44494,33743],{"class":54},[37,44496,33746],{"class":309},[37,44498,214],{"class":54},[37,44500,44501],{"class":39,"line":33723},[37,44502,33754],{"class":43},[37,44504,44505,44507,44509,44511,44513,44515,44517],{"class":39,"line":33729},[37,44506,31797],{"class":54},[37,44508,422],{"class":82},[37,44510,583],{"class":54},[37,44512,282],{"class":82},[37,44514,583],{"class":54},[37,44516,282],{"class":82},[37,44518,214],{"class":54},[37,44520,44521,44523,44525,44527,44529,44531,44533,44535,44537],{"class":39,"line":33740},[37,44522,33663],{"class":54},[37,44524,33666],{"class":309},[37,44526,33781],{"class":54},[37,44528,33672],{"class":309},[37,44530,583],{"class":54},[37,44532,33677],{"class":5288},[37,44534,70],{"class":50},[37,44536,33792],{"class":309},[37,44538,214],{"class":54},[37,44540,44541,44543,44545,44547,44549,44551,44553,44555,44557],{"class":39,"line":33751},[37,44542,33663],{"class":54},[37,44544,33666],{"class":309},[37,44546,33804],{"class":54},[37,44548,33697],{"class":309},[37,44550,583],{"class":54},[37,44552,33677],{"class":5288},[37,44554,70],{"class":50},[37,44556,33815],{"class":309},[37,44558,214],{"class":54},[37,44560,44561],{"class":39,"line":33757},[37,44562,33823],{"class":43},[37,44564,44565],{"class":39,"line":33774},[37,44566,33720],{"class":54},[37,44568,44569,44571,44573],{"class":39,"line":33797},[37,44570,33732],{"class":54},[37,44572,33666],{"class":309},[37,44574,214],{"class":54},[37,44576,44577,44579,44581],{"class":39,"line":33820},[37,44578,33743],{"class":54},[37,44580,33845],{"class":309},[37,44582,214],{"class":54},[37,44584,44585],{"class":39,"line":33826},[37,44586,33853],{"class":54},[37,44588,44589],{"class":39,"line":33831},[37,44590,2472],{"emptyLinePlaceholder":131},[37,44592,44593],{"class":39,"line":33840},[37,44594,33864],{"class":43},[37,44596,44597,44599,44601,44603,44605],{"class":39,"line":33850},[37,44598,1603],{"class":50},[37,44600,31290],{"class":82},[37,44602,3021],{"class":50},[37,44604,31295],{"class":309},[37,44606,3811],{"class":54},[37,44608,44609],{"class":39,"line":33856},[37,44610,33883],{"class":43},[37,44612,44613,44616,44618],{"class":39,"line":33861},[37,44614,44615],{"class":54},"    GoogLeNet",[37,44617,70],{"class":50},[37,44619,44620],{"class":54},"GoogLeNet(Inception)\n",[37,44622,44623,44625,44627],{"class":39,"line":33867},[37,44624,33900],{"class":54},[37,44626,70],{"class":50},[37,44628,33905],{"class":54},[37,44630,44631,44633,44635,44638,44640,44642,44644],{"class":39,"line":33880},[37,44632,33462],{"class":54},[37,44634,70],{"class":50},[37,44636,44637],{"class":54},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[37,44639,33918],{"class":5288},[37,44641,70],{"class":50},[37,44643,1154],{"class":82},[37,44645,214],{"class":54},[37,44647,44648],{"class":39,"line":33886},[37,44649,33930],{"class":54},[158,44651,44652],{"start":58},[161,44653,40643],{},[27,44655,44657],{"className":29,"code":44656,"language":31,"meta":32,"style":32},"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",[34,44658,44659,44665,44675,44685,44689,44699,44710,44714,44718,44722,44730,44746,44756,44772,44782,44796,44800,44810,44820,44830,44836,44840,44844,44852,44856,44872,44880,44884,44888,44896,44904,44908,44912,44916,44920,44926,44930,44940,44948,44956,44960,44964,44968,44976,44980,44996,45000,45004,45008,45020,45024,45036,45040,45044,45056,45060,45070,45074,45078,45090,45094,45102,45106,45110,45118,45122,45130,45134,45138,45142,45146,45150,45166,45174,45178,45182,45230,45236,45240,45250,45258,45266,45270,45274,45278,45282,45290,45294,45310,45314,45322,45330],{"__ignoreMap":32},[37,44660,44661,44663],{"class":39,"line":40},[37,44662,51],{"class":50},[37,44664,30465],{"class":54},[37,44666,44667,44669,44671,44673],{"class":39,"line":47},[37,44668,51],{"class":50},[37,44670,31485],{"class":54},[37,44672,31453],{"class":50},[37,44674,31490],{"class":54},[37,44676,44677,44679,44681,44683],{"class":39,"line":58},[37,44678,30807],{"class":50},[37,44680,31468],{"class":54},[37,44682,51],{"class":50},[37,44684,31473],{"class":54},[37,44686,44687],{"class":39,"line":64},[37,44688,33991],{"class":43},[37,44690,44691,44693,44695,44697],{"class":39,"line":76},[37,44692,30807],{"class":50},[37,44694,31438],{"class":54},[37,44696,51],{"class":50},[37,44698,31443],{"class":54},[37,44700,44701,44703,44705,44707],{"class":39,"line":92},[37,44702,30807],{"class":50},[37,44704,31984],{"class":54},[37,44706,51],{"class":50},[37,44708,44709],{"class":54}," GoogLeNet,Inception\n",[37,44711,44712],{"class":39,"line":97},[37,44713,2472],{"emptyLinePlaceholder":131},[37,44715,44716],{"class":39,"line":107},[37,44717,2472],{"emptyLinePlaceholder":131},[37,44719,44720],{"class":39,"line":1390},[37,44721,34020],{"class":43},[37,44723,44724,44726,44728],{"class":39,"line":1402},[37,44725,32017],{"class":50},[37,44727,34027],{"class":2035},[37,44729,32023],{"class":54},[37,44731,44732,44734,44736,44738,44740,44742,44744],{"class":39,"line":1684},[37,44733,34034],{"class":54},[37,44735,70],{"class":50},[37,44737,31525],{"class":54},[37,44739,31528],{"class":5288},[37,44741,70],{"class":50},[37,44743,31533],{"class":309},[37,44745,31536],{"class":54},[37,44747,44748,44750,44752,44754],{"class":39,"line":1689},[37,44749,34051],{"class":5288},[37,44751,70],{"class":50},[37,44753,34056],{"class":82},[37,44755,31536],{"class":54},[37,44757,44758,44760,44762,44764,44766,44768,44770],{"class":39,"line":1695},[37,44759,34063],{"class":5288},[37,44761,70],{"class":50},[37,44763,31563],{"class":54},[37,44765,31566],{"class":5288},[37,44767,70],{"class":50},[37,44769,35518],{"class":82},[37,44771,31574],{"class":54},[37,44773,44774,44776,44778,44780],{"class":39,"line":1700},[37,44775,34080],{"class":5288},[37,44777,70],{"class":50},[37,44779,31546],{"class":82},[37,44781,214],{"class":54},[37,44783,44784,44786,44788,44790,44792,44794],{"class":39,"line":1714},[37,44785,34091],{"class":54},[37,44787,70],{"class":50},[37,44789,31604],{"class":54},[37,44791,31607],{"class":5288},[37,44793,70],{"class":50},[37,44795,34102],{"class":54},[37,44797,44798],{"class":39,"line":1719},[37,44799,34107],{"class":43},[37,44801,44802,44804,44806,44808],{"class":39,"line":1725},[37,44803,34112],{"class":5288},[37,44805,70],{"class":50},[37,44807,422],{"class":82},[37,44809,31536],{"class":54},[37,44811,44812,44814,44816,44818],{"class":39,"line":1746},[37,44813,34123],{"class":5288},[37,44815,70],{"class":50},[37,44817,31546],{"class":82},[37,44819,31536],{"class":54},[37,44821,44822,44824,44826,44828],{"class":39,"line":1751},[37,44823,34134],{"class":5288},[37,44825,70],{"class":50},[37,44827,396],{"class":82},[37,44829,214],{"class":54},[37,44831,44832,44834],{"class":39,"line":1765},[37,44833,4162],{"class":50},[37,44835,34147],{"class":54},[37,44837,44838],{"class":39,"line":1770},[37,44839,2472],{"emptyLinePlaceholder":131},[37,44841,44842],{"class":39,"line":1799},[37,44843,34156],{"class":43},[37,44845,44846,44848,44850],{"class":39,"line":1804},[37,44847,32017],{"class":50},[37,44849,34163],{"class":2035},[37,44851,34166],{"class":54},[37,44853,44854],{"class":39,"line":1821},[37,44855,34171],{"class":43},[37,44857,44858,44860,44862,44864,44866,44868,44870],{"class":39,"line":1826},[37,44859,31307],{"class":54},[37,44861,70],{"class":50},[37,44863,31314],{"class":309},[37,44865,1776],{"class":50},[37,44867,31319],{"class":54},[37,44869,1773],{"class":50},[37,44871,34188],{"class":309},[37,44873,44874,44876,44878],{"class":39,"line":1831},[37,44875,31359],{"class":54},[37,44877,70],{"class":50},[37,44879,32359],{"class":54},[37,44881,44882],{"class":39,"line":1836},[37,44883,2472],{"emptyLinePlaceholder":131},[37,44885,44886],{"class":39,"line":1850},[37,44887,34205],{"class":43},[37,44889,44890,44892,44894],{"class":39,"line":1855},[37,44891,34210],{"class":54},[37,44893,70],{"class":50},[37,44895,32412],{"class":82},[37,44897,44898,44900,44902],{"class":39,"line":2649},[37,44899,34219],{"class":54},[37,44901,70],{"class":50},[37,44903,3157],{"class":82},[37,44905,44906],{"class":39,"line":2663},[37,44907,2472],{"emptyLinePlaceholder":131},[37,44909,44910],{"class":39,"line":2671},[37,44911,34232],{"class":43},[37,44913,44914],{"class":39,"line":2676},[37,44915,34237],{"class":43},[37,44917,44918],{"class":39,"line":2682},[37,44919,34242],{"class":43},[37,44921,44922,44924],{"class":39,"line":2688},[37,44923,34247],{"class":50},[37,44925,32953],{"class":54},[37,44927,44928],{"class":39,"line":2693},[37,44929,34254],{"class":43},[37,44931,44932,44934,44936,44938],{"class":39,"line":8020},[37,44933,3475],{"class":50},[37,44935,34261],{"class":54},[37,44937,26116],{"class":50},[37,44939,34266],{"class":54},[37,44941,44942,44944,44946],{"class":39,"line":8044},[37,44943,34271],{"class":54},[37,44945,70],{"class":50},[37,44947,34276],{"class":54},[37,44949,44950,44952,44954],{"class":39,"line":8049},[37,44951,34281],{"class":54},[37,44953,70],{"class":50},[37,44955,34286],{"class":54},[37,44957,44958],{"class":39,"line":8055},[37,44959,34291],{"class":43},[37,44961,44962],{"class":39,"line":8082},[37,44963,32944],{"class":54},[37,44965,44966],{"class":39,"line":8087},[37,44967,34300],{"class":43},[37,44969,44970,44972,44974],{"class":39,"line":8093},[37,44971,32729],{"class":54},[37,44973,70],{"class":50},[37,44975,34309],{"class":54},[37,44977,44978],{"class":39,"line":8105},[37,44979,34314],{"class":43},[37,44981,44982,44984,44986,44988,44990,44992,44994],{"class":39,"line":8117},[37,44983,32746],{"class":54},[37,44985,70],{"class":50},[37,44987,32751],{"class":54},[37,44989,32754],{"class":5288},[37,44991,70],{"class":50},[37,44993,422],{"class":82},[37,44995,214],{"class":54},[37,44997,44998],{"class":39,"line":8129},[37,44999,34335],{"class":43},[37,45001,45002],{"class":39,"line":9788},[37,45003,34340],{"class":43},[37,45005,45006],{"class":39,"line":9813},[37,45007,34345],{"class":43},[37,45009,45010,45012,45014,45016,45018],{"class":39,"line":9836},[37,45011,34350],{"class":54},[37,45013,9549],{"class":50},[37,45015,32856],{"class":54},[37,45017,3021],{"class":50},[37,45019,34359],{"class":54},[37,45021,45022],{"class":39,"line":9860},[37,45023,34364],{"class":43},[37,45025,45026,45028,45030,45032,45034],{"class":39,"line":9865},[37,45027,34369],{"class":54},[37,45029,9549],{"class":50},[37,45031,34374],{"class":54},[37,45033,396],{"class":82},[37,45035,214],{"class":54},[37,45037,45038],{"class":39,"line":9870},[37,45039,2472],{"emptyLinePlaceholder":131},[37,45041,45042],{"class":39,"line":9875},[37,45043,34387],{"class":43},[37,45045,45046,45048,45050,45052,45054],{"class":39,"line":9884},[37,45047,34392],{"class":54},[37,45049,70],{"class":50},[37,45051,34397],{"class":54},[37,45053,787],{"class":50},[37,45055,34402],{"class":54},[37,45057,45058],{"class":39,"line":9889},[37,45059,34407],{"class":43},[37,45061,45062,45064,45066,45068],{"class":39,"line":9895},[37,45063,32520],{"class":82},[37,45065,208],{"class":54},[37,45067,34416],{"class":309},[37,45069,34419],{"class":54},[37,45071,45072],{"class":39,"line":9916},[37,45073,2472],{"emptyLinePlaceholder":131},[37,45075,45076],{"class":39,"line":9922},[37,45077,34428],{"class":43},[37,45079,45080,45082,45084,45086,45088],{"class":39,"line":9936},[37,45081,1603],{"class":50},[37,45083,31290],{"class":82},[37,45085,3021],{"class":50},[37,45087,31295],{"class":309},[37,45089,3811],{"class":54},[37,45091,45092],{"class":39,"line":9942},[37,45093,34445],{"class":43},[37,45095,45096,45098,45100],{"class":39,"line":9969},[37,45097,31359],{"class":54},[37,45099,70],{"class":50},[37,45101,44620],{"class":54},[37,45103,45104],{"class":39,"line":9978},[37,45105,34458],{"class":43},[37,45107,45108],{"class":39,"line":9984},[37,45109,34463],{"class":43},[37,45111,45112,45114,45116],{"class":39,"line":9992},[37,45113,34468],{"class":54},[37,45115,34471],{"class":309},[37,45117,30567],{"class":54},[37,45119,45120],{"class":39,"line":9997},[37,45121,34478],{"class":43},[37,45123,45124,45126,45128],{"class":39,"line":16676},[37,45125,34091],{"class":54},[37,45127,70],{"class":50},[37,45129,34487],{"class":54},[37,45131,45132],{"class":39,"line":16682},[37,45133,34492],{"class":43},[37,45135,45136],{"class":39,"line":16705},[37,45137,34497],{"class":54},[37,45139,45140],{"class":39,"line":16711},[37,45141,2472],{"emptyLinePlaceholder":131},[37,45143,45144],{"class":39,"line":16734},[37,45145,34506],{"class":43},[37,45147,45148],{"class":39,"line":16748},[37,45149,34511],{"class":43},[37,45151,45152,45154,45156,45158,45160,45162,45164],{"class":39,"line":16768},[37,45153,31307],{"class":54},[37,45155,70],{"class":50},[37,45157,31314],{"class":309},[37,45159,1776],{"class":50},[37,45161,31319],{"class":54},[37,45163,1773],{"class":50},[37,45165,34188],{"class":309},[37,45167,45168,45170,45172],{"class":39,"line":16774},[37,45169,31359],{"class":54},[37,45171,70],{"class":50},[37,45173,32359],{"class":54},[37,45175,45176],{"class":39,"line":16785},[37,45177,34540],{"class":43},[37,45179,45180],{"class":39,"line":16808},[37,45181,34545],{"class":43},[37,45183,45184,45186,45188,45190,45192,45194,45196,45198,45200,45202,45204,45206,45208,45210,45212,45214,45216,45218,45220,45222,45224,45226,45228],{"class":39,"line":16830},[37,45185,34550],{"class":54},[37,45187,70],{"class":50},[37,45189,1093],{"class":54},[37,45191,34557],{"class":309},[37,45193,583],{"class":54},[37,45195,34562],{"class":309},[37,45197,583],{"class":54},[37,45199,34567],{"class":309},[37,45201,583],{"class":54},[37,45203,34572],{"class":309},[37,45205,583],{"class":54},[37,45207,34577],{"class":309},[37,45209,583],{"class":54},[37,45211,34582],{"class":309},[37,45213,583],{"class":54},[37,45215,34587],{"class":309},[37,45217,583],{"class":54},[37,45219,34592],{"class":309},[37,45221,583],{"class":54},[37,45223,34597],{"class":309},[37,45225,583],{"class":54},[37,45227,34602],{"class":309},[37,45229,33315],{"class":54},[37,45231,45232,45234],{"class":39,"line":16835},[37,45233,34247],{"class":50},[37,45235,32953],{"class":54},[37,45237,45238],{"class":39,"line":16841},[37,45239,34615],{"class":43},[37,45241,45242,45244,45246,45248],{"class":39,"line":16855},[37,45243,3475],{"class":50},[37,45245,34622],{"class":54},[37,45247,26116],{"class":50},[37,45249,34266],{"class":54},[37,45251,45252,45254,45256],{"class":39,"line":16868},[37,45253,32679],{"class":54},[37,45255,70],{"class":50},[37,45257,32684],{"class":54},[37,45259,45260,45262,45264],{"class":39,"line":16873},[37,45261,32694],{"class":54},[37,45263,70],{"class":50},[37,45265,32699],{"class":54},[37,45267,45268],{"class":39,"line":16887},[37,45269,2472],{"emptyLinePlaceholder":131},[37,45271,45272],{"class":39,"line":16892},[37,45273,34651],{"class":43},[37,45275,45276],{"class":39,"line":16898},[37,45277,32944],{"class":54},[37,45279,45280],{"class":39,"line":16903},[37,45281,34660],{"class":43},[37,45283,45284,45286,45288],{"class":39,"line":16917},[37,45285,32729],{"class":54},[37,45287,70],{"class":50},[37,45289,32734],{"class":54},[37,45291,45292],{"class":39,"line":16922},[37,45293,34673],{"class":43},[37,45295,45296,45298,45300,45302,45304,45306,45308],{"class":39,"line":16927},[37,45297,32746],{"class":54},[37,45299,70],{"class":50},[37,45301,32751],{"class":54},[37,45303,32754],{"class":5288},[37,45305,70],{"class":50},[37,45307,422],{"class":82},[37,45309,214],{"class":54},[37,45311,45312],{"class":39,"line":16941},[37,45313,34694],{"class":43},[37,45315,45316,45318,45320],{"class":39,"line":16953},[37,45317,34699],{"class":54},[37,45319,70],{"class":50},[37,45321,34704],{"class":54},[37,45323,45324,45326,45328],{"class":39,"line":16958},[37,45325,34709],{"class":54},[37,45327,70],{"class":50},[37,45329,34714],{"class":54},[37,45331,45332,45334,45336,45338,45340,45342,45344,45346],{"class":39,"line":16971},[37,45333,34719],{"class":82},[37,45335,208],{"class":54},[37,45337,34724],{"class":309},[37,45339,34727],{"class":54},[37,45341,34730],{"class":309},[37,45343,583],{"class":54},[37,45345,34735],{"class":309},[37,45347,34738],{"class":54},[175,45349,45351],{"id":45350},"_24训练自己的数据集","2.4.训练自己的数据集",[14,45353,45354],{},"猫狗分类任务",[14,45356,45357],{},"划分数据集和验证集",[27,45359,45361],{"className":29,"code":45360,"language":31,"meta":32,"style":32},"# 创建脚本，用于划分数据集和验证集\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",[34,45362,45363,45368,45375,45380,45391,45398,45402,45412,45426,45435,45439,45444,45454,45474,45478,45483,45493,45504,45517,45521,45526,45535,45545,45556,45560,45565,45575,45579,45584,45589,45594,45599,45604,45608,45618,45645,45658,45670,45697,45702,45707,45721,45726,45738,45753,45768,45776,45780,45785,45791,45803,45816,45821,45826,45831,45880,45886,45890],{"__ignoreMap":32},[37,45364,45365],{"class":39,"line":40},[37,45366,45367],{"class":43},"# 创建脚本，用于划分数据集和验证集\n",[37,45369,45370,45372],{"class":39,"line":47},[37,45371,51],{"class":50},[37,45373,45374],{"class":54}," os\n",[37,45376,45377],{"class":39,"line":58},[37,45378,45379],{"class":43},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[37,45381,45382,45384,45387,45389],{"class":39,"line":64},[37,45383,30807],{"class":50},[37,45385,45386],{"class":54}," shutil ",[37,45388,51],{"class":50},[37,45390,31892],{"class":54},[37,45392,45393,45395],{"class":39,"line":76},[37,45394,51],{"class":50},[37,45396,45397],{"class":54}," random\n",[37,45399,45400],{"class":39,"line":92},[37,45401,2472],{"emptyLinePlaceholder":131},[37,45403,45404,45406,45409],{"class":39,"line":97},[37,45405,32017],{"class":50},[37,45407,45408],{"class":2035}," mkfile",[37,45410,45411],{"class":54},"(file):\n",[37,45413,45414,45416,45418,45421,45424],{"class":39,"line":107},[37,45415,3173],{"class":50},[37,45417,38999],{"class":50},[37,45419,45420],{"class":54}," os.path.exists(",[37,45422,45423],{"class":5288},"file",[37,45425,30856],{"class":54},[37,45427,45428,45431,45433],{"class":39,"line":1390},[37,45429,45430],{"class":54},"        os.makedirs(",[37,45432,45423],{"class":5288},[37,45434,214],{"class":54},[37,45436,45437],{"class":39,"line":1402},[37,45438,2472],{"emptyLinePlaceholder":131},[37,45440,45441],{"class":39,"line":1684},[37,45442,45443],{"class":43},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[37,45445,45446,45449,45451],{"class":39,"line":1689},[37,45447,45448],{"class":54},"file_path",[37,45450,70],{"class":50},[37,45452,45453],{"class":309},"'data_cat_dog'\n",[37,45455,45456,45459,45461,45464,45466,45469,45471],{"class":39,"line":1695},[37,45457,45458],{"class":54},"flower_class",[37,45460,70],{"class":50},[37,45462,45463],{"class":54},"[cla ",[37,45465,3097],{"class":50},[37,45467,45468],{"class":54}," cla ",[37,45470,26116],{"class":50},[37,45472,45473],{"class":54}," os.listdir(file_path)]\n",[37,45475,45476],{"class":39,"line":1700},[37,45477,2472],{"emptyLinePlaceholder":131},[37,45479,45480],{"class":39,"line":1714},[37,45481,45482],{"class":43},"# 创建训练集train文件夹\n",[37,45484,45485,45488,45491],{"class":39,"line":1719},[37,45486,45487],{"class":54},"mkfile(",[37,45489,45490],{"class":309},"'data\u002Ftrain'",[37,45492,214],{"class":54},[37,45494,45495,45497,45499,45501],{"class":39,"line":1725},[37,45496,3097],{"class":50},[37,45498,45468],{"class":54},[37,45500,26116],{"class":50},[37,45502,45503],{"class":54}," flower_class:\n",[37,45505,45506,45509,45512,45514],{"class":39,"line":1746},[37,45507,45508],{"class":54},"    mkfile(",[37,45510,45511],{"class":309},"'data\u002Ftrain\u002F'",[37,45513,685],{"class":50},[37,45515,45516],{"class":54},"cla)\n",[37,45518,45519],{"class":39,"line":1751},[37,45520,2472],{"emptyLinePlaceholder":131},[37,45522,45523],{"class":39,"line":1765},[37,45524,45525],{"class":43},"# 创建验证集val文件夹\n",[37,45527,45528,45530,45533],{"class":39,"line":1770},[37,45529,45487],{"class":54},[37,45531,45532],{"class":309},"'data\u002Ftest'",[37,45534,214],{"class":54},[37,45536,45537,45539,45541,45543],{"class":39,"line":1799},[37,45538,3097],{"class":50},[37,45540,45468],{"class":54},[37,45542,26116],{"class":50},[37,45544,45503],{"class":54},[37,45546,45547,45549,45552,45554],{"class":39,"line":1804},[37,45548,45508],{"class":54},[37,45550,45551],{"class":309},"'data\u002Ftest\u002F'",[37,45553,685],{"class":50},[37,45555,45516],{"class":54},[37,45557,45558],{"class":39,"line":1821},[37,45559,2472],{"emptyLinePlaceholder":131},[37,45561,45562],{"class":39,"line":1826},[37,45563,45564],{"class":43},"# 划分比例，训练集：测试集=9：1\n",[37,45566,45567,45570,45572],{"class":39,"line":1831},[37,45568,45569],{"class":54},"split_rate",[37,45571,70],{"class":50},[37,45573,45574],{"class":82},"0.1\n",[37,45576,45577],{"class":39,"line":1836},[37,45578,2472],{"emptyLinePlaceholder":131},[37,45580,45581],{"class":39,"line":1850},[37,45582,45583],{"class":43},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[37,45585,45586],{"class":39,"line":1855},[37,45587,45588],{"class":43},"# cla_path：当前类别的原始图片路径\n",[37,45590,45591],{"class":39,"line":2649},[37,45592,45593],{"class":43},"# images：当前类别下所有图片的文件名列表\n",[37,45595,45596],{"class":39,"line":2663},[37,45597,45598],{"class":43},"# num：该类别图片总数\n",[37,45600,45601],{"class":39,"line":2671},[37,45602,45603],{"class":43},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[37,45605,45606],{"class":39,"line":2676},[37,45607,2472],{"emptyLinePlaceholder":131},[37,45609,45610,45612,45614,45616],{"class":39,"line":2682},[37,45611,3097],{"class":50},[37,45613,45468],{"class":54},[37,45615,26116],{"class":50},[37,45617,45503],{"class":54},[37,45619,45620,45623,45625,45628,45630,45633,45636,45638,45640,45642],{"class":39,"line":2688},[37,45621,45622],{"class":54},"    cla_path ",[37,45624,70],{"class":50},[37,45626,45627],{"class":54}," file_path ",[37,45629,685],{"class":50},[37,45631,45632],{"class":309}," '\u002F'",[37,45634,45635],{"class":50}," +",[37,45637,45468],{"class":54},[37,45639,685],{"class":50},[37,45641,45632],{"class":309},[37,45643,45644],{"class":43},"  # 某一类别的子目录\n",[37,45646,45647,45650,45652,45655],{"class":39,"line":2693},[37,45648,45649],{"class":54},"    images ",[37,45651,70],{"class":50},[37,45653,45654],{"class":54}," os.listdir(cla_path)  ",[37,45656,45657],{"class":43},"# iamges 列表存储了该目录下所有图像的名称\n",[37,45659,45660,45663,45665,45667],{"class":39,"line":8020},[37,45661,45662],{"class":54},"    num ",[37,45664,70],{"class":50},[37,45666,7403],{"class":82},[37,45668,45669],{"class":54},"(images)\n",[37,45671,45672,45675,45677,45680,45682,45684,45686,45689,45691,45694],{"class":39,"line":8044},[37,45673,45674],{"class":54},"    eval_index ",[37,45676,70],{"class":50},[37,45678,45679],{"class":54}," random.sample(images, ",[37,45681,697],{"class":5288},[37,45683,70],{"class":50},[37,45685,211],{"class":82},[37,45687,45688],{"class":54},"(num ",[37,45690,659],{"class":50},[37,45692,45693],{"class":54}," split_rate))  ",[37,45695,45696],{"class":43},"# 从images列表中随机抽取 k 个图像名称\n",[37,45698,45699],{"class":39,"line":8049},[37,45700,45701],{"class":43},"    # 遍历该类别下的所有图片\n",[37,45703,45704],{"class":39,"line":8055},[37,45705,45706],{"class":43},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[37,45708,45709,45711,45714,45716,45718],{"class":39,"line":8082},[37,45710,3273],{"class":50},[37,45712,45713],{"class":54}," index, image ",[37,45715,26116],{"class":50},[37,45717,31676],{"class":82},[37,45719,45720],{"class":54},"(images):\n",[37,45722,45723],{"class":39,"line":8087},[37,45724,45725],{"class":43},"        # eval_index 中保存验证集val的图像名称\n",[37,45727,45728,45730,45733,45735],{"class":39,"line":8093},[37,45729,2569],{"class":50},[37,45731,45732],{"class":54}," image ",[37,45734,26116],{"class":50},[37,45736,45737],{"class":54}," eval_index:\n",[37,45739,45740,45743,45745,45748,45750],{"class":39,"line":8105},[37,45741,45742],{"class":54},"            image_path ",[37,45744,70],{"class":50},[37,45746,45747],{"class":54}," cla_path ",[37,45749,685],{"class":50},[37,45751,45752],{"class":54}," image\n",[37,45754,45755,45758,45760,45763,45765],{"class":39,"line":8117},[37,45756,45757],{"class":54},"            new_path ",[37,45759,70],{"class":50},[37,45761,45762],{"class":309}," 'data\u002Ftest\u002F'",[37,45764,45635],{"class":50},[37,45766,45767],{"class":54}," cla\n",[37,45769,45770,45773],{"class":39,"line":8129},[37,45771,45772],{"class":54},"            copy(image_path, new_path)  ",[37,45774,45775],{"class":43},"# 将选中的图像复制到新路径\n",[37,45777,45778],{"class":39,"line":9788},[37,45779,2472],{"emptyLinePlaceholder":131},[37,45781,45782],{"class":39,"line":9813},[37,45783,45784],{"class":43},"        # 其余的图像保存在训练集train中\n",[37,45786,45787,45789],{"class":39,"line":9836},[37,45788,2606],{"class":50},[37,45790,3811],{"class":54},[37,45792,45793,45795,45797,45799,45801],{"class":39,"line":9860},[37,45794,45742],{"class":54},[37,45796,70],{"class":50},[37,45798,45747],{"class":54},[37,45800,685],{"class":50},[37,45802,45752],{"class":54},[37,45804,45805,45807,45809,45812,45814],{"class":39,"line":9865},[37,45806,45757],{"class":54},[37,45808,70],{"class":50},[37,45810,45811],{"class":309}," 'data\u002Ftrain\u002F'",[37,45813,45635],{"class":50},[37,45815,45767],{"class":54},[37,45817,45818],{"class":39,"line":9870},[37,45819,45820],{"class":54},"            copy(image_path, new_path)\n",[37,45822,45823],{"class":39,"line":9875},[37,45824,45825],{"class":43},"            # 打印进度条信息\n",[37,45827,45828],{"class":39,"line":9884},[37,45829,45830],{"class":43},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[37,45832,45833,45835,45837,45839,45842,45844,45846,45849,45851,45853,45855,45858,45861,45863,45865,45868,45870,45872,45874,45877],{"class":39,"line":9889},[37,45834,32520],{"class":82},[37,45836,208],{"class":54},[37,45838,456],{"class":309},[37,45840,45841],{"class":82},"\\r",[37,45843,1093],{"class":309},[37,45845,32528],{"class":82},[37,45847,45848],{"class":309},"] processing [",[37,45850,32528],{"class":82},[37,45852,787],{"class":309},[37,45854,32528],{"class":82},[37,45856,45857],{"class":309},"]\"",[37,45859,45860],{"class":54},".format(cla, index ",[37,45862,685],{"class":50},[37,45864,25191],{"class":82},[37,45866,45867],{"class":54},", num), ",[37,45869,100],{"class":5288},[37,45871,70],{"class":50},[37,45873,7724],{"class":309},[37,45875,45876],{"class":54},")  ",[37,45878,45879],{"class":43},"# processing bar\n",[37,45881,45882,45884],{"class":39,"line":9895},[37,45883,31369],{"class":82},[37,45885,2048],{"class":54},[37,45887,45888],{"class":39,"line":9916},[37,45889,2472],{"emptyLinePlaceholder":131},[37,45891,45892,45894,45896,45899],{"class":39,"line":9922},[37,45893,30485],{"class":82},[37,45895,208],{"class":54},[37,45897,45898],{"class":309},"\"processing done!\"",[37,45900,214],{"class":54},[14,45902,45903],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22070,45905,45907],{"id":45906},"_242模型代码","2.4.2.模型代码",[14,45909,45910],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[27,45912,45914],{"className":29,"code":45913,"language":31,"meta":32,"style":32},"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",[34,45915,45916,45922,45932,45942,45946,45962,45970,45984,45994,45998,46028,46032,46066,46112,46116,46150,46196,46200,46204,46238,46268,46272,46280,46294,46316,46338,46356,46360,46374,46378,46382,46398,46402,46410,46424,46434,46478,46482,46510,46514,46524,46552,46556,46592,46596,46624,46628,46638,46670,46702,46730,46734,46744,46776,46808,46840,46872,46904,46932,46936,46946,46978,47010,47022,47026,47038,47042,47046,47058,47066,47086,47090,47094,47098,47102,47106,47110,47124,47132,47140,47152,47166,47174,47178,47186,47196,47206,47216,47226,47236,47242,47246,47250,47262,47282,47290],{"__ignoreMap":32},[37,45917,45918,45920],{"class":39,"line":40},[37,45919,51],{"class":50},[37,45921,30465],{"class":54},[37,45923,45924,45926,45928,45930],{"class":39,"line":47},[37,45925,30807],{"class":50},[37,45927,30810],{"class":54},[37,45929,51],{"class":50},[37,45931,30815],{"class":54},[37,45933,45934,45936,45938,45940],{"class":39,"line":58},[37,45935,30807],{"class":50},[37,45937,30827],{"class":54},[37,45939,51],{"class":50},[37,45941,30832],{"class":54},[37,45943,45944],{"class":39,"line":64},[37,45945,2472],{"emptyLinePlaceholder":131},[37,45947,45948,45950,45952,45954,45956,45958,45960],{"class":39,"line":76},[37,45949,14766],{"class":50},[37,45951,41562],{"class":2035},[37,45953,208],{"class":54},[37,45955,30848],{"class":2035},[37,45957,761],{"class":54},[37,45959,30853],{"class":2035},[37,45961,30856],{"class":54},[37,45963,45964,45966,45968],{"class":39,"line":92},[37,45965,30871],{"class":50},[37,45967,30874],{"class":82},[37,45969,41581],{"class":54},[37,45971,45972,45974,45976,45978,45980,45982],{"class":39,"line":97},[37,45973,30887],{"class":82},[37,45975,41588],{"class":54},[37,45977,30893],{"class":82},[37,45979,30896],{"class":54},[37,45981,30899],{"class":82},[37,45983,2048],{"class":54},[37,45985,45986,45988,45990,45992],{"class":39,"line":107},[37,45987,30915],{"class":82},[37,45989,34840],{"class":54},[37,45991,70],{"class":50},[37,45993,34845],{"class":54},[37,45995,45996],{"class":39,"line":1390},[37,45997,41611],{"class":43},[37,45999,46000,46002,46004,46006,46008,46010,46012,46014,46016,46018,46020,46022,46024,46026],{"class":39,"line":1402},[37,46001,30915],{"class":82},[37,46003,41618],{"class":54},[37,46005,70],{"class":50},[37,46007,30923],{"class":54},[37,46009,30926],{"class":5288},[37,46011,70],{"class":50},[37,46013,41629],{"class":54},[37,46015,30935],{"class":5288},[37,46017,70],{"class":50},[37,46019,41636],{"class":54},[37,46021,30944],{"class":5288},[37,46023,70],{"class":50},[37,46025,422],{"class":82},[37,46027,214],{"class":54},[37,46029,46030],{"class":39,"line":1684},[37,46031,41649],{"class":43},[37,46033,46034,46036,46038,46040,46042,46044,46046,46048,46050,46052,46054,46056,46058,46060,46062,46064],{"class":39,"line":1689},[37,46035,30915],{"class":82},[37,46037,41656],{"class":54},[37,46039,70],{"class":50},[37,46041,30923],{"class":54},[37,46043,30926],{"class":5288},[37,46045,70],{"class":50},[37,46047,41629],{"class":54},[37,46049,30935],{"class":5288},[37,46051,70],{"class":50},[37,46053,41673],{"class":54},[37,46055,396],{"class":82},[37,46057,41678],{"class":54},[37,46059,30944],{"class":5288},[37,46061,70],{"class":50},[37,46063,422],{"class":82},[37,46065,214],{"class":54},[37,46067,46068,46070,46072,46074,46076,46078,46080,46082,46084,46086,46088,46090,46092,46094,46096,46098,46100,46102,46104,46106,46108,46110],{"class":39,"line":1695},[37,46069,30915],{"class":82},[37,46071,41693],{"class":54},[37,46073,70],{"class":50},[37,46075,30923],{"class":54},[37,46077,30926],{"class":5288},[37,46079,70],{"class":50},[37,46081,41673],{"class":54},[37,46083,396],{"class":82},[37,46085,41678],{"class":54},[37,46087,30935],{"class":5288},[37,46089,70],{"class":50},[37,46091,41673],{"class":54},[37,46093,422],{"class":82},[37,46095,41678],{"class":54},[37,46097,30944],{"class":5288},[37,46099,70],{"class":50},[37,46101,276],{"class":82},[37,46103,583],{"class":54},[37,46105,30953],{"class":5288},[37,46107,70],{"class":50},[37,46109,422],{"class":82},[37,46111,214],{"class":54},[37,46113,46114],{"class":39,"line":1700},[37,46115,41738],{"class":43},[37,46117,46118,46120,46122,46124,46126,46128,46130,46132,46134,46136,46138,46140,46142,46144,46146,46148],{"class":39,"line":1714},[37,46119,30915],{"class":82},[37,46121,41745],{"class":54},[37,46123,70],{"class":50},[37,46125,30923],{"class":54},[37,46127,30926],{"class":5288},[37,46129,70],{"class":50},[37,46131,41629],{"class":54},[37,46133,30935],{"class":5288},[37,46135,70],{"class":50},[37,46137,41762],{"class":54},[37,46139,396],{"class":82},[37,46141,41678],{"class":54},[37,46143,30944],{"class":5288},[37,46145,70],{"class":50},[37,46147,422],{"class":82},[37,46149,214],{"class":54},[37,46151,46152,46154,46156,46158,46160,46162,46164,46166,46168,46170,46172,46174,46176,46178,46180,46182,46184,46186,46188,46190,46192,46194],{"class":39,"line":1719},[37,46153,30915],{"class":82},[37,46155,41781],{"class":54},[37,46157,70],{"class":50},[37,46159,30923],{"class":54},[37,46161,30926],{"class":5288},[37,46163,70],{"class":50},[37,46165,41762],{"class":54},[37,46167,396],{"class":82},[37,46169,41678],{"class":54},[37,46171,30935],{"class":5288},[37,46173,70],{"class":50},[37,46175,41762],{"class":54},[37,46177,422],{"class":82},[37,46179,41678],{"class":54},[37,46181,30944],{"class":5288},[37,46183,70],{"class":50},[37,46185,524],{"class":82},[37,46187,583],{"class":54},[37,46189,30953],{"class":5288},[37,46191,70],{"class":50},[37,46193,282],{"class":82},[37,46195,214],{"class":54},[37,46197,46198],{"class":39,"line":1725},[37,46199,41826],{"class":43},[37,46201,46202],{"class":39,"line":1746},[37,46203,41831],{"class":43},[37,46205,46206,46208,46210,46212,46214,46216,46218,46220,46222,46224,46226,46228,46230,46232,46234,46236],{"class":39,"line":1751},[37,46207,30915],{"class":82},[37,46209,41838],{"class":54},[37,46211,70],{"class":50},[37,46213,34898],{"class":54},[37,46215,30944],{"class":5288},[37,46217,70],{"class":50},[37,46219,276],{"class":82},[37,46221,583],{"class":54},[37,46223,30999],{"class":5288},[37,46225,70],{"class":50},[37,46227,422],{"class":82},[37,46229,583],{"class":54},[37,46231,30953],{"class":5288},[37,46233,70],{"class":50},[37,46235,422],{"class":82},[37,46237,214],{"class":54},[37,46239,46240,46242,46244,46246,46248,46250,46252,46254,46256,46258,46260,46262,46264,46266],{"class":39,"line":1765},[37,46241,30915],{"class":82},[37,46243,41873],{"class":54},[37,46245,70],{"class":50},[37,46247,30923],{"class":54},[37,46249,30926],{"class":5288},[37,46251,70],{"class":50},[37,46253,41629],{"class":54},[37,46255,30935],{"class":5288},[37,46257,70],{"class":50},[37,46259,41890],{"class":54},[37,46261,30944],{"class":5288},[37,46263,70],{"class":50},[37,46265,422],{"class":82},[37,46267,214],{"class":54},[37,46269,46270],{"class":39,"line":1770},[37,46271,2472],{"emptyLinePlaceholder":131},[37,46273,46274,46276,46278],{"class":39,"line":1799},[37,46275,30871],{"class":50},[37,46277,31163],{"class":2035},[37,46279,31166],{"class":54},[37,46281,46282,46284,46286,46288,46290,46292],{"class":39,"line":1804},[37,46283,41915],{"class":54},[37,46285,70],{"class":50},[37,46287,30893],{"class":82},[37,46289,35253],{"class":54},[37,46291,30893],{"class":82},[37,46293,41926],{"class":54},[37,46295,46296,46298,46300,46302,46304,46306,46308,46310,46312,46314],{"class":39,"line":1821},[37,46297,7157],{"class":54},[37,46299,70],{"class":50},[37,46301,30893],{"class":82},[37,46303,35253],{"class":54},[37,46305,30893],{"class":82},[37,46307,41941],{"class":54},[37,46309,30893],{"class":82},[37,46311,35253],{"class":54},[37,46313,30893],{"class":82},[37,46315,41950],{"class":54},[37,46317,46318,46320,46322,46324,46326,46328,46330,46332,46334,46336],{"class":39,"line":1826},[37,46319,41955],{"class":54},[37,46321,70],{"class":50},[37,46323,30893],{"class":82},[37,46325,35253],{"class":54},[37,46327,30893],{"class":82},[37,46329,41966],{"class":54},[37,46331,30893],{"class":82},[37,46333,35253],{"class":54},[37,46335,30893],{"class":82},[37,46337,41975],{"class":54},[37,46339,46340,46342,46344,46346,46348,46350,46352,46354],{"class":39,"line":1831},[37,46341,41980],{"class":54},[37,46343,70],{"class":50},[37,46345,30893],{"class":82},[37,46347,35253],{"class":54},[37,46349,30893],{"class":82},[37,46351,41991],{"class":54},[37,46353,30893],{"class":82},[37,46355,41996],{"class":54},[37,46357,46358],{"class":39,"line":1836},[37,46359,42001],{"class":43},[37,46361,46362,46364,46366,46368,46370,46372],{"class":39,"line":1850},[37,46363,14824],{"class":50},[37,46365,42008],{"class":54},[37,46367,32754],{"class":5288},[37,46369,70],{"class":50},[37,46371,422],{"class":82},[37,46373,214],{"class":54},[37,46375,46376],{"class":39,"line":1855},[37,46377,2472],{"emptyLinePlaceholder":131},[37,46379,46380],{"class":39,"line":2649},[37,46381,42029],{"class":43},[37,46383,46384,46386,46388,46390,46392,46394,46396],{"class":39,"line":2663},[37,46385,14766],{"class":50},[37,46387,42036],{"class":2035},[37,46389,208],{"class":54},[37,46391,30848],{"class":2035},[37,46393,761],{"class":54},[37,46395,30853],{"class":2035},[37,46397,30856],{"class":54},[37,46399,46400],{"class":39,"line":2671},[37,46401,42051],{"class":43},[37,46403,46404,46406,46408],{"class":39,"line":2676},[37,46405,30871],{"class":50},[37,46407,30874],{"class":82},[37,46409,42060],{"class":54},[37,46411,46412,46414,46416,46418,46420,46422],{"class":39,"line":2682},[37,46413,30887],{"class":82},[37,46415,42067],{"class":54},[37,46417,30893],{"class":82},[37,46419,30896],{"class":54},[37,46421,30899],{"class":82},[37,46423,2048],{"class":54},[37,46425,46426,46428,46430,46432],{"class":39,"line":2688},[37,46427,30915],{"class":82},[37,46429,42082],{"class":54},[37,46431,70],{"class":50},[37,46433,38078],{"class":54},[37,46435,46436,46438,46440,46442,46444,46446,46448,46450,46452,46454,46456,46458,46460,46462,46464,46466,46468,46470,46472,46474,46476],{"class":39,"line":2693},[37,46437,38083],{"class":54},[37,46439,30926],{"class":5288},[37,46441,70],{"class":50},[37,46443,276],{"class":82},[37,46445,583],{"class":54},[37,46447,30935],{"class":5288},[37,46449,70],{"class":50},[37,46451,408],{"class":82},[37,46453,583],{"class":54},[37,46455,30944],{"class":5288},[37,46457,70],{"class":50},[37,46459,574],{"class":82},[37,46461,583],{"class":54},[37,46463,30999],{"class":5288},[37,46465,70],{"class":50},[37,46467,282],{"class":82},[37,46469,583],{"class":54},[37,46471,30953],{"class":5288},[37,46473,70],{"class":50},[37,46475,276],{"class":82},[37,46477,38116],{"class":54},[37,46479,46480],{"class":39,"line":8020},[37,46481,38121],{"class":54},[37,46483,46484,46486,46488,46490,46492,46494,46496,46498,46500,46502,46504,46506,46508],{"class":39,"line":8044},[37,46485,38166],{"class":54},[37,46487,30944],{"class":5288},[37,46489,70],{"class":50},[37,46491,276],{"class":82},[37,46493,583],{"class":54},[37,46495,30999],{"class":5288},[37,46497,70],{"class":50},[37,46499,282],{"class":82},[37,46501,583],{"class":54},[37,46503,30953],{"class":5288},[37,46505,70],{"class":50},[37,46507,422],{"class":82},[37,46509,214],{"class":54},[37,46511,46512],{"class":39,"line":8049},[37,46513,38195],{"class":54},[37,46515,46516,46518,46520,46522],{"class":39,"line":8055},[37,46517,30915],{"class":82},[37,46519,42173],{"class":54},[37,46521,70],{"class":50},[37,46523,38078],{"class":54},[37,46525,46526,46528,46530,46532,46534,46536,46538,46540,46542,46544,46546,46548,46550],{"class":39,"line":8082},[37,46527,38083],{"class":54},[37,46529,30926],{"class":5288},[37,46531,70],{"class":50},[37,46533,408],{"class":82},[37,46535,583],{"class":54},[37,46537,30935],{"class":5288},[37,46539,70],{"class":50},[37,46541,408],{"class":82},[37,46543,583],{"class":54},[37,46545,30944],{"class":5288},[37,46547,70],{"class":50},[37,46549,422],{"class":82},[37,46551,38116],{"class":54},[37,46553,46554],{"class":39,"line":8087},[37,46555,38121],{"class":54},[37,46557,46558,46560,46562,46564,46566,46568,46570,46572,46574,46576,46578,46580,46582,46584,46586,46588,46590],{"class":39,"line":8093},[37,46559,38083],{"class":54},[37,46561,30926],{"class":5288},[37,46563,70],{"class":50},[37,46565,408],{"class":82},[37,46567,583],{"class":54},[37,46569,30935],{"class":5288},[37,46571,70],{"class":50},[37,46573,42228],{"class":82},[37,46575,583],{"class":54},[37,46577,30944],{"class":5288},[37,46579,70],{"class":50},[37,46581,276],{"class":82},[37,46583,583],{"class":54},[37,46585,30953],{"class":5288},[37,46587,70],{"class":50},[37,46589,422],{"class":82},[37,46591,38116],{"class":54},[37,46593,46594],{"class":39,"line":8105},[37,46595,38121],{"class":54},[37,46597,46598,46600,46602,46604,46606,46608,46610,46612,46614,46616,46618,46620,46622],{"class":39,"line":8117},[37,46599,38166],{"class":54},[37,46601,30944],{"class":5288},[37,46603,70],{"class":50},[37,46605,276],{"class":82},[37,46607,583],{"class":54},[37,46609,30999],{"class":5288},[37,46611,70],{"class":50},[37,46613,282],{"class":82},[37,46615,583],{"class":54},[37,46617,30953],{"class":5288},[37,46619,70],{"class":50},[37,46621,422],{"class":82},[37,46623,214],{"class":54},[37,46625,46626],{"class":39,"line":8129},[37,46627,38195],{"class":54},[37,46629,46630,46632,46634,46636],{"class":39,"line":9788},[37,46631,30915],{"class":82},[37,46633,42289],{"class":54},[37,46635,70],{"class":50},[37,46637,38078],{"class":54},[37,46639,46640,46642,46644,46646,46648,46650,46652,46654,46656,46658,46660,46662,46664,46666,46668],{"class":39,"line":9813},[37,46641,42298],{"class":54},[37,46643,42228],{"class":82},[37,46645,583],{"class":54},[37,46647,408],{"class":82},[37,46649,42307],{"class":54},[37,46651,414],{"class":82},[37,46653,583],{"class":54},[37,46655,32140],{"class":82},[37,46657,42316],{"class":54},[37,46659,804],{"class":82},[37,46661,583],{"class":54},[37,46663,402],{"class":82},[37,46665,42325],{"class":54},[37,46667,402],{"class":82},[37,46669,38116],{"class":54},[37,46671,46672,46674,46676,46678,46680,46682,46684,46686,46688,46690,46692,46694,46696,46698,46700],{"class":39,"line":9836},[37,46673,42298],{"class":54},[37,46675,34939],{"class":82},[37,46677,583],{"class":54},[37,46679,32140],{"class":82},[37,46681,42307],{"class":54},[37,46683,32140],{"class":82},[37,46685,583],{"class":54},[37,46687,42228],{"class":82},[37,46689,42316],{"class":54},[37,46691,402],{"class":82},[37,46693,583],{"class":54},[37,46695,414],{"class":82},[37,46697,42325],{"class":54},[37,46699,408],{"class":82},[37,46701,38116],{"class":54},[37,46703,46704,46706,46708,46710,46712,46714,46716,46718,46720,46722,46724,46726,46728],{"class":39,"line":9860},[37,46705,38166],{"class":54},[37,46707,30944],{"class":5288},[37,46709,70],{"class":50},[37,46711,276],{"class":82},[37,46713,583],{"class":54},[37,46715,30999],{"class":5288},[37,46717,70],{"class":50},[37,46719,282],{"class":82},[37,46721,583],{"class":54},[37,46723,30953],{"class":5288},[37,46725,70],{"class":50},[37,46727,422],{"class":82},[37,46729,214],{"class":54},[37,46731,46732],{"class":39,"line":9865},[37,46733,38195],{"class":54},[37,46735,46736,46738,46740,46742],{"class":39,"line":9870},[37,46737,30915],{"class":82},[37,46739,42400],{"class":54},[37,46741,70],{"class":50},[37,46743,38078],{"class":54},[37,46745,46746,46748,46750,46752,46754,46756,46758,46760,46762,46764,46766,46768,46770,46772,46774],{"class":39,"line":9875},[37,46747,42298],{"class":54},[37,46749,42411],{"class":82},[37,46751,583],{"class":54},[37,46753,42228],{"class":82},[37,46755,42307],{"class":54},[37,46757,414],{"class":82},[37,46759,583],{"class":54},[37,46761,42424],{"class":82},[37,46763,42316],{"class":54},[37,46765,804],{"class":82},[37,46767,583],{"class":54},[37,46769,810],{"class":82},[37,46771,42325],{"class":54},[37,46773,408],{"class":82},[37,46775,38116],{"class":54},[37,46777,46778,46780,46782,46784,46786,46788,46790,46792,46794,46796,46798,46800,46802,46804,46806],{"class":39,"line":9884},[37,46779,42298],{"class":54},[37,46781,38526],{"class":82},[37,46783,583],{"class":54},[37,46785,21120],{"class":82},[37,46787,42307],{"class":54},[37,46789,821],{"class":82},[37,46791,583],{"class":54},[37,46793,31571],{"class":82},[37,46795,42316],{"class":54},[37,46797,1003],{"class":82},[37,46799,583],{"class":54},[37,46801,408],{"class":82},[37,46803,42325],{"class":54},[37,46805,408],{"class":82},[37,46807,38116],{"class":54},[37,46809,46810,46812,46814,46816,46818,46820,46822,46824,46826,46828,46830,46832,46834,46836,46838],{"class":39,"line":9889},[37,46811,42298],{"class":54},[37,46813,38526],{"class":82},[37,46815,583],{"class":54},[37,46817,32140],{"class":82},[37,46819,42307],{"class":54},[37,46821,32140],{"class":82},[37,46823,583],{"class":54},[37,46825,34939],{"class":82},[37,46827,42316],{"class":54},[37,46829,1003],{"class":82},[37,46831,583],{"class":54},[37,46833,408],{"class":82},[37,46835,42325],{"class":54},[37,46837,408],{"class":82},[37,46839,38116],{"class":54},[37,46841,46842,46844,46846,46848,46850,46852,46854,46856,46858,46860,46862,46864,46866,46868,46870],{"class":39,"line":9895},[37,46843,42298],{"class":54},[37,46845,38526],{"class":82},[37,46847,583],{"class":54},[37,46849,821],{"class":82},[37,46851,42307],{"class":54},[37,46853,32140],{"class":82},[37,46855,583],{"class":54},[37,46857,42521],{"class":82},[37,46859,42316],{"class":54},[37,46861,402],{"class":82},[37,46863,583],{"class":54},[37,46865,408],{"class":82},[37,46867,42325],{"class":54},[37,46869,408],{"class":82},[37,46871,38116],{"class":54},[37,46873,46874,46876,46878,46880,46882,46884,46886,46888,46890,46892,46894,46896,46898,46900,46902],{"class":39,"line":9916},[37,46875,42298],{"class":54},[37,46877,42542],{"class":82},[37,46879,583],{"class":54},[37,46881,34939],{"class":82},[37,46883,42307],{"class":54},[37,46885,21120],{"class":82},[37,46887,583],{"class":54},[37,46889,42555],{"class":82},[37,46891,42316],{"class":54},[37,46893,402],{"class":82},[37,46895,583],{"class":54},[37,46897,32140],{"class":82},[37,46899,42325],{"class":54},[37,46901,32140],{"class":82},[37,46903,38116],{"class":54},[37,46905,46906,46908,46910,46912,46914,46916,46918,46920,46922,46924,46926,46928,46930],{"class":39,"line":9922},[37,46907,38166],{"class":54},[37,46909,30944],{"class":5288},[37,46911,70],{"class":50},[37,46913,276],{"class":82},[37,46915,583],{"class":54},[37,46917,30999],{"class":5288},[37,46919,70],{"class":50},[37,46921,282],{"class":82},[37,46923,583],{"class":54},[37,46925,30953],{"class":5288},[37,46927,70],{"class":50},[37,46929,422],{"class":82},[37,46931,214],{"class":54},[37,46933,46934],{"class":39,"line":9936},[37,46935,38195],{"class":54},[37,46937,46938,46940,46942,46944],{"class":39,"line":9942},[37,46939,30915],{"class":82},[37,46941,42608],{"class":54},[37,46943,70],{"class":50},[37,46945,38078],{"class":54},[37,46947,46948,46950,46952,46954,46956,46958,46960,46962,46964,46966,46968,46970,46972,46974,46976],{"class":39,"line":9969},[37,46949,42298],{"class":54},[37,46951,42619],{"class":82},[37,46953,583],{"class":54},[37,46955,34939],{"class":82},[37,46957,42307],{"class":54},[37,46959,21120],{"class":82},[37,46961,583],{"class":54},[37,46963,42555],{"class":82},[37,46965,42316],{"class":54},[37,46967,402],{"class":82},[37,46969,583],{"class":54},[37,46971,32140],{"class":82},[37,46973,42325],{"class":54},[37,46975,32140],{"class":82},[37,46977,38116],{"class":54},[37,46979,46980,46982,46984,46986,46988,46990,46992,46994,46996,46998,47000,47002,47004,47006,47008],{"class":39,"line":9978},[37,46981,42298],{"class":54},[37,46983,42619],{"class":82},[37,46985,583],{"class":54},[37,46987,35009],{"class":82},[37,46989,42307],{"class":54},[37,46991,42228],{"class":82},[37,46993,583],{"class":54},[37,46995,35009],{"class":82},[37,46997,42316],{"class":54},[37,46999,810],{"class":82},[37,47001,583],{"class":54},[37,47003,32140],{"class":82},[37,47005,42325],{"class":54},[37,47007,32140],{"class":82},[37,47009,38116],{"class":54},[37,47011,47012,47014,47016,47018,47020],{"class":39,"line":9984},[37,47013,42682],{"class":54},[37,47015,422],{"class":82},[37,47017,583],{"class":54},[37,47019,422],{"class":82},[37,47021,42691],{"class":54},[37,47023,47024],{"class":39,"line":9992},[37,47025,38859],{"class":54},[37,47027,47028,47030,47032,47034,47036],{"class":39,"line":9997},[37,47029,38864],{"class":54},[37,47031,42702],{"class":82},[37,47033,583],{"class":54},[37,47035,282],{"class":82},[37,47037,214],{"class":54},[37,47039,47040],{"class":39,"line":16676},[37,47041,38195],{"class":54},[37,47043,47044],{"class":39,"line":16682},[37,47045,42717],{"class":43},[37,47047,47048,47050,47052,47054,47056],{"class":39,"line":16705},[37,47049,3475],{"class":50},[37,47051,38937],{"class":54},[37,47053,26116],{"class":50},[37,47055,38942],{"class":82},[37,47057,38945],{"class":54},[37,47059,47060,47062,47064],{"class":39,"line":16711},[37,47061,4714],{"class":50},[37,47063,38957],{"class":82},[37,47065,38960],{"class":54},[37,47067,47068,47070,47072,47074,47076,47078,47080,47082,47084],{"class":39,"line":16734},[37,47069,38970],{"class":54},[37,47071,42744],{"class":5288},[37,47073,70],{"class":50},[37,47075,42749],{"class":309},[37,47077,583],{"class":54},[37,47079,38973],{"class":5288},[37,47081,70],{"class":50},[37,47083,38978],{"class":309},[37,47085,214],{"class":54},[37,47087,47088],{"class":39,"line":16748},[37,47089,42764],{"class":43},[37,47091,47092],{"class":39,"line":16768},[37,47093,42769],{"class":43},[37,47095,47096],{"class":39,"line":16774},[37,47097,42774],{"class":43},[37,47099,47100],{"class":39,"line":16785},[37,47101,42779],{"class":43},[37,47103,47104],{"class":39,"line":16808},[37,47105,42784],{"class":43},[37,47107,47108],{"class":39,"line":16830},[37,47109,42789],{"class":43},[37,47111,47112,47114,47116,47118,47120,47122],{"class":39,"line":16835},[37,47113,38990],{"class":50},[37,47115,38993],{"class":54},[37,47117,38996],{"class":50},[37,47119,38999],{"class":50},[37,47121,39002],{"class":82},[37,47123,3811],{"class":54},[37,47125,47126,47128,47130],{"class":39,"line":16841},[37,47127,39014],{"class":54},[37,47129,396],{"class":82},[37,47131,214],{"class":54},[37,47133,47134,47136,47138],{"class":39,"line":16855},[37,47135,42816],{"class":50},[37,47137,38957],{"class":82},[37,47139,39033],{"class":54},[37,47141,47142,47144,47146,47148,47150],{"class":39,"line":16868},[37,47143,42825],{"class":54},[37,47145,396],{"class":82},[37,47147,583],{"class":54},[37,47149,39055],{"class":82},[37,47151,214],{"class":54},[37,47153,47154,47156,47158,47160,47162,47164],{"class":39,"line":16873},[37,47155,42838],{"class":50},[37,47157,38993],{"class":54},[37,47159,38996],{"class":50},[37,47161,38999],{"class":50},[37,47163,39002],{"class":82},[37,47165,3811],{"class":54},[37,47167,47168,47170,47172],{"class":39,"line":16887},[37,47169,42853],{"class":54},[37,47171,396],{"class":82},[37,47173,214],{"class":54},[37,47175,47176],{"class":39,"line":16892},[37,47177,35234],{"class":43},[37,47179,47180,47182,47184],{"class":39,"line":16898},[37,47181,30871],{"class":50},[37,47183,31163],{"class":2035},[37,47185,31166],{"class":54},[37,47187,47188,47190,47192,47194],{"class":39,"line":16903},[37,47189,31171],{"class":54},[37,47191,70],{"class":50},[37,47193,30893],{"class":82},[37,47195,42880],{"class":54},[37,47197,47198,47200,47202,47204],{"class":39,"line":16917},[37,47199,31171],{"class":54},[37,47201,70],{"class":50},[37,47203,30893],{"class":82},[37,47205,42891],{"class":54},[37,47207,47208,47210,47212,47214],{"class":39,"line":16922},[37,47209,31171],{"class":54},[37,47211,70],{"class":50},[37,47213,30893],{"class":82},[37,47215,42902],{"class":54},[37,47217,47218,47220,47222,47224],{"class":39,"line":16927},[37,47219,31171],{"class":54},[37,47221,70],{"class":50},[37,47223,30893],{"class":82},[37,47225,42913],{"class":54},[37,47227,47228,47230,47232,47234],{"class":39,"line":16941},[37,47229,31171],{"class":54},[37,47231,70],{"class":50},[37,47233,30893],{"class":82},[37,47235,42924],{"class":54},[37,47237,47238,47240],{"class":39,"line":16953},[37,47239,14824],{"class":50},[37,47241,31279],{"class":54},[37,47243,47244],{"class":39,"line":16958},[37,47245,2472],{"emptyLinePlaceholder":131},[37,47247,47248],{"class":39,"line":16971},[37,47249,42939],{"class":43},[37,47251,47252,47254,47256,47258,47260],{"class":39,"line":16976},[37,47253,1603],{"class":50},[37,47255,31290],{"class":82},[37,47257,3021],{"class":50},[37,47259,31295],{"class":309},[37,47261,3811],{"class":54},[37,47263,47264,47266,47268,47270,47272,47274,47276,47278,47280],{"class":39,"line":16981},[37,47265,31307],{"class":54},[37,47267,70],{"class":50},[37,47269,30521],{"class":54},[37,47271,31314],{"class":309},[37,47273,1776],{"class":50},[37,47275,31319],{"class":54},[37,47277,1773],{"class":50},[37,47279,30546],{"class":309},[37,47281,214],{"class":54},[37,47283,47284,47286,47288],{"class":39,"line":16986},[37,47285,31359],{"class":54},[37,47287,70],{"class":50},[37,47289,42980],{"class":54},[37,47291,47292,47294,47296,47298,47300,47302,47304,47306],{"class":39,"line":16999},[37,47293,31369],{"class":82},[37,47295,31372],{"class":54},[37,47297,422],{"class":82},[37,47299,583],{"class":54},[37,47301,31571],{"class":82},[37,47303,583],{"class":54},[37,47305,31571],{"class":82},[37,47307,31385],{"class":54},[22070,47309,47311],{"id":47310},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47313,47314],{},"计算图片的均值与方差，用于训练中归一化处理操作",[27,47316,47318],{"className":29,"code":47317,"language":31,"meta":32,"style":32},"# 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",[34,47319,47320,47325,47338,47343,47349,47354,47364,47368,47373,47383,47387,47392,47402,47419,47423,47428,47440,47452,47483,47492,47502,47512,47516,47521,47536,47540,47545,47550,47555,47565,47570,47595,47599,47604,47619,47623,47636,47640,47645,47650,47655,47660,47665,47675,47685,47708,47716,47724,47732,47736,47748,47752,47757,47761,47765,47772,47792,47816,47823,47837,47842,47847,47851,47865,47869,47881],{"__ignoreMap":32},[37,47321,47322],{"class":39,"line":40},[37,47323,47324],{"class":43},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[37,47326,47327,47329,47332,47335],{"class":39,"line":47},[37,47328,30807],{"class":50},[37,47330,47331],{"class":82}," PIL",[37,47333,47334],{"class":50}," import",[37,47336,47337],{"class":54}," Image\n",[37,47339,47340],{"class":39,"line":58},[37,47341,47342],{"class":43},"# os 用来处理文件夹和文件路径\n",[37,47344,47345,47347],{"class":39,"line":64},[37,47346,51],{"class":50},[37,47348,45374],{"class":54},[37,47350,47351],{"class":39,"line":76},[37,47352,47353],{"class":43},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[37,47355,47356,47358,47360,47362],{"class":39,"line":92},[37,47357,51],{"class":50},[37,47359,31450],{"class":54},[37,47361,31453],{"class":50},[37,47363,31456],{"class":54},[37,47365,47366],{"class":39,"line":97},[37,47367,2472],{"emptyLinePlaceholder":131},[37,47369,47370],{"class":39,"line":107},[37,47371,47372],{"class":43},"# 文件夹路径，包含所有图片文件\n",[37,47374,47375,47378,47380],{"class":39,"line":1390},[37,47376,47377],{"class":54},"folder_path ",[37,47379,70],{"class":50},[37,47381,47382],{"class":309}," 'data_cat_dog'\n",[37,47384,47385],{"class":39,"line":1402},[37,47386,2472],{"emptyLinePlaceholder":131},[37,47388,47389],{"class":39,"line":1684},[37,47390,47391],{"class":43},"# 初始化累积变量\n",[37,47393,47394,47397,47399],{"class":39,"line":1689},[37,47395,47396],{"class":54},"total_pixels ",[37,47398,70],{"class":50},[37,47400,47401],{"class":82}," 0\n",[37,47403,47404,47407,47409,47412,47414,47416],{"class":39,"line":1695},[37,47405,47406],{"class":54},"sum_normalized_pixel_values ",[37,47408,70],{"class":50},[37,47410,47411],{"class":54}," np.zeros(",[37,47413,276],{"class":82},[37,47415,45876],{"class":54},[37,47417,47418],{"class":43},"# 如果是RGB图像，需要三个通道的均值和方差\n",[37,47420,47421],{"class":39,"line":1700},[37,47422,2472],{"emptyLinePlaceholder":131},[37,47424,47425],{"class":39,"line":1714},[37,47426,47427],{"class":43},"# 遍历文件夹中的图片文件\n",[37,47429,47430,47432,47435,47437],{"class":39,"line":1719},[37,47431,3097],{"class":50},[37,47433,47434],{"class":54}," root, dirs, files ",[37,47436,26116],{"class":50},[37,47438,47439],{"class":54}," os.walk(folder_path):\n",[37,47441,47442,47444,47447,47449],{"class":39,"line":1725},[37,47443,3273],{"class":50},[37,47445,47446],{"class":54}," filename ",[37,47448,26116],{"class":50},[37,47450,47451],{"class":54}," files:\n",[37,47453,47454,47456,47459,47462,47464,47467,47469,47472,47474,47477,47480],{"class":39,"line":1746},[37,47455,2569],{"class":50},[37,47457,47458],{"class":54}," filename.endswith((",[37,47460,47461],{"class":309},"'.jpg'",[37,47463,12507],{"class":54},[37,47465,47466],{"class":309},"'.jpeg'",[37,47468,12507],{"class":54},[37,47470,47471],{"class":309},"'.png'",[37,47473,12507],{"class":54},[37,47475,47476],{"class":309},"'.bmp'",[37,47478,47479],{"class":54},")):  ",[37,47481,47482],{"class":43},"# 可根据实际情况添加其他格式\n",[37,47484,47485,47487,47489],{"class":39,"line":1751},[37,47486,45742],{"class":54},[37,47488,70],{"class":50},[37,47490,47491],{"class":54}," os.path.join(root, filename)\n",[37,47493,47494,47497,47499],{"class":39,"line":1765},[37,47495,47496],{"class":54},"            image ",[37,47498,70],{"class":50},[37,47500,47501],{"class":54}," Image.open(image_path)\n",[37,47503,47504,47507,47509],{"class":39,"line":1770},[37,47505,47506],{"class":54},"            image_array ",[37,47508,70],{"class":50},[37,47510,47511],{"class":54}," np.array(image)\n",[37,47513,47514],{"class":39,"line":1799},[37,47515,2472],{"emptyLinePlaceholder":131},[37,47517,47518],{"class":39,"line":1804},[37,47519,47520],{"class":43},"            # 归一化像素值到0-1之间\n",[37,47522,47523,47526,47528,47531,47533],{"class":39,"line":1821},[37,47524,47525],{"class":54},"            normalized_image_array ",[37,47527,70],{"class":50},[37,47529,47530],{"class":54}," image_array ",[37,47532,787],{"class":50},[37,47534,47535],{"class":82}," 255.0\n",[37,47537,47538],{"class":39,"line":1826},[37,47539,2472],{"emptyLinePlaceholder":131},[37,47541,47542],{"class":39,"line":1831},[37,47543,47544],{"class":43},"            # print(image_path)\n",[37,47546,47547],{"class":39,"line":1836},[37,47548,47549],{"class":43},"            # print(normalized_image_array.shape)\n",[37,47551,47552],{"class":39,"line":1850},[37,47553,47554],{"class":43},"            # 累积归一化后的像素值和像素数量\n",[37,47556,47557,47560,47562],{"class":39,"line":1855},[37,47558,47559],{"class":54},"            total_pixels ",[37,47561,9549],{"class":50},[37,47563,47564],{"class":54}," normalized_image_array.size\n",[37,47566,47567],{"class":39,"line":2649},[37,47568,47569],{"class":43},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[37,47571,47572,47575,47577,47580,47583,47585,47587,47589,47591,47593],{"class":39,"line":2663},[37,47573,47574],{"class":54},"            sum_normalized_pixel_values ",[37,47576,9549],{"class":50},[37,47578,47579],{"class":54}," np.sum(normalized_image_array, ",[37,47581,47582],{"class":5288},"axis",[37,47584,70],{"class":50},[37,47586,208],{"class":54},[37,47588,396],{"class":82},[37,47590,12507],{"class":54},[37,47592,422],{"class":82},[37,47594,30567],{"class":54},[37,47596,47597],{"class":39,"line":2671},[37,47598,2472],{"emptyLinePlaceholder":131},[37,47600,47601],{"class":39,"line":2676},[37,47602,47603],{"class":43},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[37,47605,47606,47609,47611,47614,47616],{"class":39,"line":2682},[37,47607,47608],{"class":54},"mean ",[37,47610,70],{"class":50},[37,47612,47613],{"class":54}," sum_normalized_pixel_values ",[37,47615,787],{"class":50},[37,47617,47618],{"class":54}," total_pixels\n",[37,47620,47621],{"class":39,"line":2688},[37,47622,2472],{"emptyLinePlaceholder":131},[37,47624,47625,47628,47630,47632,47634],{"class":39,"line":2693},[37,47626,47627],{"class":54},"sum_squared_diff ",[37,47629,70],{"class":50},[37,47631,47411],{"class":54},[37,47633,276],{"class":82},[37,47635,214],{"class":54},[37,47637,47638],{"class":39,"line":8020},[37,47639,2472],{"emptyLinePlaceholder":131},[37,47641,47642],{"class":39,"line":8044},[37,47643,47644],{"class":43},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[37,47646,47647],{"class":39,"line":8049},[37,47648,47649],{"class":43},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[37,47651,47652],{"class":39,"line":8055},[37,47653,47654],{"class":43},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[37,47656,47657],{"class":39,"line":8082},[37,47658,47659],{"class":43},"# Image.open(image_path)：打开图片\n",[37,47661,47662],{"class":39,"line":8087},[37,47663,47664],{"class":43},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[37,47666,47667,47669,47671,47673],{"class":39,"line":8093},[37,47668,3097],{"class":50},[37,47670,47434],{"class":54},[37,47672,26116],{"class":50},[37,47674,47439],{"class":54},[37,47676,47677,47679,47681,47683],{"class":39,"line":8105},[37,47678,3273],{"class":50},[37,47680,47446],{"class":54},[37,47682,26116],{"class":50},[37,47684,47451],{"class":54},[37,47686,47687,47689,47691,47693,47695,47697,47699,47701,47703,47705],{"class":39,"line":8117},[37,47688,2569],{"class":50},[37,47690,47458],{"class":54},[37,47692,47461],{"class":309},[37,47694,12507],{"class":54},[37,47696,47466],{"class":309},[37,47698,12507],{"class":54},[37,47700,47471],{"class":309},[37,47702,12507],{"class":54},[37,47704,47476],{"class":309},[37,47706,47707],{"class":54},")):\n",[37,47709,47710,47712,47714],{"class":39,"line":8129},[37,47711,45742],{"class":54},[37,47713,70],{"class":50},[37,47715,47491],{"class":54},[37,47717,47718,47720,47722],{"class":39,"line":9788},[37,47719,47496],{"class":54},[37,47721,70],{"class":50},[37,47723,47501],{"class":54},[37,47725,47726,47728,47730],{"class":39,"line":9813},[37,47727,47506],{"class":54},[37,47729,70],{"class":50},[37,47731,47511],{"class":54},[37,47733,47734],{"class":39,"line":9836},[37,47735,47520],{"class":43},[37,47737,47738,47740,47742,47744,47746],{"class":39,"line":9860},[37,47739,47525],{"class":54},[37,47741,70],{"class":50},[37,47743,47530],{"class":54},[37,47745,787],{"class":50},[37,47747,47535],{"class":82},[37,47749,47750],{"class":39,"line":9865},[37,47751,47549],{"class":43},[37,47753,47754],{"class":39,"line":9870},[37,47755,47756],{"class":43},"            # print(mean.shape)\n",[37,47758,47759],{"class":39,"line":9875},[37,47760,47544],{"class":43},[37,47762,47763],{"class":39,"line":9884},[37,47764,2472],{"emptyLinePlaceholder":131},[37,47766,47767,47770],{"class":39,"line":9889},[37,47768,47769],{"class":50},"            try",[37,47771,3811],{"class":54},[37,47773,47774,47777,47779,47782,47784,47787,47789],{"class":39,"line":9895},[37,47775,47776],{"class":54},"                diff ",[37,47778,70],{"class":50},[37,47780,47781],{"class":54}," (normalized_image_array ",[37,47783,112],{"class":50},[37,47785,47786],{"class":54}," mean) ",[37,47788,10733],{"class":50},[37,47790,47791],{"class":82}," 2\n",[37,47793,47794,47797,47799,47802,47804,47806,47808,47810,47812,47814],{"class":39,"line":9916},[37,47795,47796],{"class":54},"                sum_squared_diff ",[37,47798,9549],{"class":50},[37,47800,47801],{"class":54}," np.sum(diff, ",[37,47803,47582],{"class":5288},[37,47805,70],{"class":50},[37,47807,208],{"class":54},[37,47809,396],{"class":82},[37,47811,12507],{"class":54},[37,47813,422],{"class":82},[37,47815,30567],{"class":54},[37,47817,47818,47821],{"class":39,"line":9922},[37,47819,47820],{"class":50},"            except",[37,47822,3811],{"class":54},[37,47824,47825,47828,47830,47832,47835],{"class":39,"line":9936},[37,47826,47827],{"class":82},"                print",[37,47829,208],{"class":54},[37,47831,258],{"class":50},[37,47833,47834],{"class":309},"\"捕获到自定义异常\"",[37,47836,214],{"class":54},[37,47838,47839],{"class":39,"line":9942},[37,47840,47841],{"class":43},"            # diff = (normalized_image_array - mean) ** 2\n",[37,47843,47844],{"class":39,"line":9969},[37,47845,47846],{"class":43},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[37,47848,47849],{"class":39,"line":9978},[37,47850,2472],{"emptyLinePlaceholder":131},[37,47852,47853,47856,47858,47861,47863],{"class":39,"line":9984},[37,47854,47855],{"class":54},"variance ",[37,47857,70],{"class":50},[37,47859,47860],{"class":54}," sum_squared_diff ",[37,47862,787],{"class":50},[37,47864,47618],{"class":54},[37,47866,47867],{"class":39,"line":9992},[37,47868,2472],{"emptyLinePlaceholder":131},[37,47870,47871,47873,47875,47878],{"class":39,"line":9997},[37,47872,30485],{"class":82},[37,47874,208],{"class":54},[37,47876,47877],{"class":309},"\"Mean:\"",[37,47879,47880],{"class":54},", mean)\n",[37,47882,47883,47885,47887,47890],{"class":39,"line":16676},[37,47884,30485],{"class":82},[37,47886,208],{"class":54},[37,47888,47889],{"class":309},"\"Variance:\"",[37,47891,47892],{"class":54},", variance)\n",[27,47894,47896],{"className":29,"code":47895,"language":31,"meta":32,"style":32},"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",[34,47897,47898,47904,47910,47920,47926,47936,47950,47960,47970,47980,47984,47994,48004,48008,48012,48020,48025,48030,48049,48053,48058,48063,48068,48073,48114,48119,48129,48134,48147,48152,48157,48162,48167,48172,48176,48181,48186,48208,48212,48244,48258,48268,48278,48282,48292,48306,48316,48326,48336,48342,48346,48350,48354,48358,48362,48370,48390,48394,48398,48402,48406,48422,48426,48430,48438,48442,48446,48454,48458,48462,48466,48474,48478,48482,48486,48494,48498,48506,48510,48518,48522,48530,48534,48542,48546,48550,48558,48562,48566,48578,48602,48616,48620,48624,48628,48636,48640,48648,48652,48660,48664,48672,48676,48684,48688,48696,48700,48712,48716,48724,48728,48736,48740,48744,48748,48752,48760,48764,48780,48784,48792,48796,48800,48804,48808,48812,48816,48820,48836,48840,48852,48856,48868,48872,48884,48888,48896,48900,48908,48912,48916,48920,48926,48930,48938,48942,48958,48962,48970,48974,48990,49002,49006,49018,49022,49026,49034,49038,49042,49050,49054,49062,49066,49074,49078,49082,49124,49166,49170,49174,49190,49194,49210,49214,49218,49226,49230,49234,49246,49284,49288,49292,49300,49304,49318,49328,49334,49340,49346,49352,49356,49360,49366,49370,49374,49382,49386,49404,49408,49412,49416,49432,49436,49440,49444,49448,49452,49472,49492,49496,49500,49504,49512,49520,49524,49540,49560,49580,49584,49589,49598,49607,49612,49617,49622,49635,49640,49649,49658,49675],{"__ignoreMap":32},[37,47899,47900,47902],{"class":39,"line":40},[37,47901,51],{"class":50},[37,47903,31892],{"class":54},[37,47905,47906,47908],{"class":39,"line":47},[37,47907,51],{"class":50},[37,47909,31899],{"class":54},[37,47911,47912,47914,47916,47918],{"class":39,"line":58},[37,47913,51],{"class":50},[37,47915,31910],{"class":54},[37,47917,31453],{"class":50},[37,47919,31915],{"class":54},[37,47921,47922,47924],{"class":39,"line":64},[37,47923,51],{"class":50},[37,47925,30465],{"class":54},[37,47927,47928,47930,47932,47934],{"class":39,"line":76},[37,47929,30807],{"class":50},[37,47931,31485],{"class":54},[37,47933,51],{"class":50},[37,47935,31932],{"class":54},[37,47937,47938,47940,47942,47944,47947],{"class":39,"line":92},[37,47939,30807],{"class":50},[37,47941,31438],{"class":54},[37,47943,51],{"class":50},[37,47945,47946],{"class":54}," ImageFolder ",[37,47948,47949],{"class":43},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[37,47951,47952,47954,47956,47958],{"class":39,"line":97},[37,47953,30807],{"class":50},[37,47955,31468],{"class":54},[37,47957,51],{"class":50},[37,47959,31473],{"class":54},[37,47961,47962,47964,47966,47968],{"class":39,"line":107},[37,47963,51],{"class":50},[37,47965,31485],{"class":54},[37,47967,31453],{"class":50},[37,47969,31490],{"class":54},[37,47971,47972,47974,47976,47978],{"class":39,"line":1390},[37,47973,51],{"class":50},[37,47975,31502],{"class":54},[37,47977,31453],{"class":50},[37,47979,31507],{"class":54},[37,47981,47982],{"class":39,"line":1402},[37,47983,31977],{"class":43},[37,47985,47986,47988,47990,47992],{"class":39,"line":1684},[37,47987,30807],{"class":50},[37,47989,31984],{"class":54},[37,47991,51],{"class":50},[37,47993,43100],{"class":54},[37,47995,47996,47998,48000,48002],{"class":39,"line":1689},[37,47997,30807],{"class":50},[37,47999,30810],{"class":54},[37,48001,51],{"class":50},[37,48003,30815],{"class":54},[37,48005,48006],{"class":39,"line":1695},[37,48007,2472],{"emptyLinePlaceholder":131},[37,48009,48010],{"class":39,"line":1700},[37,48011,32012],{"class":43},[37,48013,48014,48016,48018],{"class":39,"line":1714},[37,48015,32017],{"class":50},[37,48017,32020],{"class":2035},[37,48019,32023],{"class":54},[37,48021,48022],{"class":39,"line":1719},[37,48023,48024],{"class":43},"    # 导入自己的数据集，并进行数据处理\n",[37,48026,48027],{"class":39,"line":1725},[37,48028,48029],{"class":43},"    # 定义数据集的路径\n",[37,48031,48032,48035,48037,48039,48041,48043,48047],{"class":39,"line":1746},[37,48033,48034],{"class":82},"    ROOT_PATH",[37,48036,70],{"class":50},[37,48038,873],{"class":50},[37,48040,456],{"class":309},[37,48042,761],{"class":82},[37,48044,48046],{"class":48045},"sA_wV","\u002Fdata\u002Ftrain",[37,48048,25206],{"class":309},[37,48050,48051],{"class":39,"line":1751},[37,48052,2472],{"emptyLinePlaceholder":131},[37,48054,48055],{"class":39,"line":1765},[37,48056,48057],{"class":43},"    # 定义归一化方法\n",[37,48059,48060],{"class":39,"line":1770},[37,48061,48062],{"class":43},"    # 这里需要先计算一下数据集的均值和方差\n",[37,48064,48065],{"class":39,"line":1799},[37,48066,48067],{"class":43},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[37,48069,48070],{"class":39,"line":1804},[37,48071,48072],{"class":43},"    # 第一个参数是均值，第二个参数是方差\n",[37,48074,48075,48078,48080,48083,48086,48088,48091,48093,48096,48099,48102,48104,48107,48109,48112],{"class":39,"line":1821},[37,48076,48077],{"class":54},"    normalize",[37,48079,70],{"class":50},[37,48081,48082],{"class":54},"transforms.Normalize([",[37,48084,48085],{"class":82},"0.162",[37,48087,583],{"class":54},[37,48089,48090],{"class":82},"0.151",[37,48092,583],{"class":54},[37,48094,48095],{"class":82},"0.138",[37,48097,48098],{"class":54},"],[",[37,48100,48101],{"class":82},"0.058",[37,48103,583],{"class":54},[37,48105,48106],{"class":82},"0.052",[37,48108,583],{"class":54},[37,48110,48111],{"class":82},"0.048",[37,48113,4729],{"class":54},[37,48115,48116],{"class":39,"line":1826},[37,48117,48118],{"class":43},"    # 定义数据集处理方法变量\n",[37,48120,48121,48124,48126],{"class":39,"line":1831},[37,48122,48123],{"class":54},"    train_transform",[37,48125,70],{"class":50},[37,48127,48128],{"class":54},"transforms.Compose([\n",[37,48130,48131],{"class":39,"line":1836},[37,48132,48133],{"class":43},"        # 调整图像大小为224*224\n",[37,48135,48136,48139,48141,48143,48145],{"class":39,"line":1850},[37,48137,48138],{"class":54},"        transforms.Resize((",[37,48140,31571],{"class":82},[37,48142,583],{"class":54},[37,48144,31571],{"class":82},[37,48146,42691],{"class":54},[37,48148,48149],{"class":39,"line":1855},[37,48150,48151],{"class":43},"        # 将图像转换为张量\n",[37,48153,48154],{"class":39,"line":2649},[37,48155,48156],{"class":54},"        transforms.ToTensor(),\n",[37,48158,48159],{"class":39,"line":2663},[37,48160,48161],{"class":54},"        normalize])\n",[37,48163,48164],{"class":39,"line":2671},[37,48165,48166],{"class":43},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[37,48168,48169],{"class":39,"line":2676},[37,48170,48171],{"class":43},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[37,48173,48174],{"class":39,"line":2682},[37,48175,2472],{"emptyLinePlaceholder":131},[37,48177,48178],{"class":39,"line":2688},[37,48179,48180],{"class":43},"    # 加载数据集\n",[37,48182,48183],{"class":39,"line":2693},[37,48184,48185],{"class":43},"    # 传入数据集路径与处理方法\n",[37,48187,48188,48190,48192,48195,48198,48200,48203,48205],{"class":39,"line":8020},[37,48189,32028],{"class":54},[37,48191,70],{"class":50},[37,48193,48194],{"class":54},"ImageFolder(",[37,48196,48197],{"class":82},"ROOT_PATH",[37,48199,583],{"class":54},[37,48201,48202],{"class":5288},"transform",[37,48204,70],{"class":50},[37,48206,48207],{"class":54},"train_transform)\n",[37,48209,48210],{"class":39,"line":8044},[37,48211,2472],{"emptyLinePlaceholder":131},[37,48213,48214,48216,48218,48220,48222,48224,48226,48228,48230,48232,48234,48236,48238,48240,48242],{"class":39,"line":8049},[37,48215,32080],{"class":54},[37,48217,70],{"class":50},[37,48219,32085],{"class":54},[37,48221,32088],{"class":82},[37,48223,208],{"class":54},[37,48225,32093],{"class":82},[37,48227,659],{"class":50},[37,48229,7430],{"class":82},[37,48231,32100],{"class":54},[37,48233,32088],{"class":82},[37,48235,208],{"class":54},[37,48237,32107],{"class":82},[37,48239,659],{"class":50},[37,48241,7430],{"class":82},[37,48243,32114],{"class":54},[37,48245,48246,48248,48250,48252,48254,48256],{"class":39,"line":8055},[37,48247,32119],{"class":54},[37,48249,70],{"class":50},[37,48251,32124],{"class":54},[37,48253,31607],{"class":5288},[37,48255,70],{"class":50},[37,48257,31612],{"class":54},[37,48259,48260,48262,48264,48266],{"class":39,"line":8082},[37,48261,32135],{"class":5288},[37,48263,70],{"class":50},[37,48265,402],{"class":82},[37,48267,31536],{"class":54},[37,48269,48270,48272,48274,48276],{"class":39,"line":8087},[37,48271,32147],{"class":5288},[37,48273,70],{"class":50},[37,48275,31546],{"class":82},[37,48277,31536],{"class":54},[37,48279,48280],{"class":39,"line":8093},[37,48281,32158],{"class":43},[37,48283,48284,48286,48288,48290],{"class":39,"line":8105},[37,48285,32163],{"class":5288},[37,48287,70],{"class":50},[37,48289,600],{"class":82},[37,48291,214],{"class":54},[37,48293,48294,48296,48298,48300,48302,48304],{"class":39,"line":8117},[37,48295,32174],{"class":54},[37,48297,70],{"class":50},[37,48299,31604],{"class":54},[37,48301,31607],{"class":5288},[37,48303,70],{"class":50},[37,48305,32185],{"class":54},[37,48307,48308,48310,48312,48314],{"class":39,"line":8129},[37,48309,32190],{"class":5288},[37,48311,70],{"class":50},[37,48313,402],{"class":82},[37,48315,31536],{"class":54},[37,48317,48318,48320,48322,48324],{"class":39,"line":9788},[37,48319,32201],{"class":5288},[37,48321,70],{"class":50},[37,48323,31546],{"class":82},[37,48325,31536],{"class":54},[37,48327,48328,48330,48332,48334],{"class":39,"line":9813},[37,48329,32212],{"class":5288},[37,48331,70],{"class":50},[37,48333,600],{"class":82},[37,48335,214],{"class":54},[37,48337,48338,48340],{"class":39,"line":9836},[37,48339,4162],{"class":50},[37,48341,32225],{"class":54},[37,48343,48344],{"class":39,"line":9860},[37,48345,2472],{"emptyLinePlaceholder":131},[37,48347,48348],{"class":39,"line":9865},[37,48349,32234],{"class":43},[37,48351,48352],{"class":39,"line":9870},[37,48353,32239],{"class":43},[37,48355,48356],{"class":39,"line":9875},[37,48357,2472],{"emptyLinePlaceholder":131},[37,48359,48360],{"class":39,"line":9884},[37,48361,32248],{"class":43},[37,48363,48364,48366,48368],{"class":39,"line":9889},[37,48365,32017],{"class":50},[37,48367,32255],{"class":2035},[37,48369,32258],{"class":54},[37,48371,48372,48374,48376,48378,48380,48382,48384,48386,48388],{"class":39,"line":9895},[37,48373,31307],{"class":54},[37,48375,70],{"class":50},[37,48377,30521],{"class":54},[37,48379,31314],{"class":309},[37,48381,1776],{"class":50},[37,48383,31319],{"class":54},[37,48385,1773],{"class":50},[37,48387,32277],{"class":309},[37,48389,214],{"class":54},[37,48391,48392],{"class":39,"line":9916},[37,48393,2472],{"emptyLinePlaceholder":131},[37,48395,48396],{"class":39,"line":9922},[37,48397,32292],{"class":43},[37,48399,48400],{"class":39,"line":9936},[37,48401,32297],{"class":43},[37,48403,48404],{"class":39,"line":9942},[37,48405,32302],{"class":43},[37,48407,48408,48410,48412,48414,48416,48418,48420],{"class":39,"line":9969},[37,48409,32307],{"class":54},[37,48411,70],{"class":50},[37,48413,32312],{"class":54},[37,48415,32315],{"class":5288},[37,48417,70],{"class":50},[37,48419,32320],{"class":82},[37,48421,214],{"class":54},[37,48423,48424],{"class":39,"line":9978},[37,48425,2472],{"emptyLinePlaceholder":131},[37,48427,48428],{"class":39,"line":9984},[37,48429,32331],{"class":43},[37,48431,48432,48434,48436],{"class":39,"line":9992},[37,48433,32336],{"class":54},[37,48435,70],{"class":50},[37,48437,32341],{"class":54},[37,48439,48440],{"class":39,"line":9997},[37,48441,2472],{"emptyLinePlaceholder":131},[37,48443,48444],{"class":39,"line":16676},[37,48445,32350],{"class":43},[37,48447,48448,48450,48452],{"class":39,"line":16682},[37,48449,31359],{"class":54},[37,48451,70],{"class":50},[37,48453,32359],{"class":54},[37,48455,48456],{"class":39,"line":16705},[37,48457,32364],{"class":43},[37,48459,48460],{"class":39,"line":16711},[37,48461,32369],{"class":43},[37,48463,48464],{"class":39,"line":16734},[37,48465,32374],{"class":43},[37,48467,48468,48470,48472],{"class":39,"line":16748},[37,48469,32379],{"class":54},[37,48471,70],{"class":50},[37,48473,32384],{"class":54},[37,48475,48476],{"class":39,"line":16768},[37,48477,2472],{"emptyLinePlaceholder":131},[37,48479,48480],{"class":39,"line":16774},[37,48481,32397],{"class":43},[37,48483,48484],{"class":39,"line":16785},[37,48485,32402],{"class":43},[37,48487,48488,48490,48492],{"class":39,"line":16808},[37,48489,32407],{"class":54},[37,48491,70],{"class":50},[37,48493,32412],{"class":82},[37,48495,48496],{"class":39,"line":16830},[37,48497,32417],{"class":43},[37,48499,48500,48502,48504],{"class":39,"line":16835},[37,48501,32422],{"class":54},[37,48503,70],{"class":50},[37,48505,32427],{"class":54},[37,48507,48508],{"class":39,"line":16841},[37,48509,32432],{"class":43},[37,48511,48512,48514,48516],{"class":39,"line":16855},[37,48513,32437],{"class":54},[37,48515,70],{"class":50},[37,48517,32427],{"class":54},[37,48519,48520],{"class":39,"line":16868},[37,48521,32446],{"class":43},[37,48523,48524,48526,48528],{"class":39,"line":16873},[37,48525,32451],{"class":54},[37,48527,70],{"class":50},[37,48529,32427],{"class":54},[37,48531,48532],{"class":39,"line":16887},[37,48533,32460],{"class":43},[37,48535,48536,48538,48540],{"class":39,"line":16892},[37,48537,32465],{"class":54},[37,48539,70],{"class":50},[37,48541,32427],{"class":54},[37,48543,48544],{"class":39,"line":16898},[37,48545,2472],{"emptyLinePlaceholder":131},[37,48547,48548],{"class":39,"line":16903},[37,48549,32478],{"class":43},[37,48551,48552,48554,48556],{"class":39,"line":16917},[37,48553,32483],{"class":54},[37,48555,70],{"class":50},[37,48557,73],{"class":54},[37,48559,48560],{"class":39,"line":16922},[37,48561,2472],{"emptyLinePlaceholder":131},[37,48563,48564],{"class":39,"line":16927},[37,48565,32500],{"class":43},[37,48567,48568,48570,48572,48574,48576],{"class":39,"line":16941},[37,48569,3273],{"class":50},[37,48571,32507],{"class":54},[37,48573,26116],{"class":50},[37,48575,32512],{"class":82},[37,48577,32515],{"class":54},[37,48579,48580,48582,48584,48586,48588,48590,48592,48594,48596,48598,48600],{"class":39,"line":16953},[37,48581,32520],{"class":82},[37,48583,208],{"class":54},[37,48585,32525],{"class":309},[37,48587,32528],{"class":82},[37,48589,787],{"class":309},[37,48591,32528],{"class":82},[37,48593,456],{"class":309},[37,48595,32537],{"class":54},[37,48597,112],{"class":50},[37,48599,422],{"class":82},[37,48601,30567],{"class":54},[37,48603,48604,48606,48608,48610,48612,48614],{"class":39,"line":16958},[37,48605,32520],{"class":82},[37,48607,208],{"class":54},[37,48609,32552],{"class":309},[37,48611,659],{"class":50},[37,48613,650],{"class":82},[37,48615,214],{"class":54},[37,48617,48618],{"class":39,"line":16971},[37,48619,2472],{"emptyLinePlaceholder":131},[37,48621,48622],{"class":39,"line":16976},[37,48623,32567],{"class":43},[37,48625,48626],{"class":39,"line":16981},[37,48627,32572],{"class":43},[37,48629,48630,48632,48634],{"class":39,"line":16986},[37,48631,32577],{"class":54},[37,48633,70],{"class":50},[37,48635,32412],{"class":82},[37,48637,48638],{"class":39,"line":16999},[37,48639,32586],{"class":43},[37,48641,48642,48644,48646],{"class":39,"line":17004},[37,48643,32591],{"class":54},[37,48645,70],{"class":50},[37,48647,3157],{"class":82},[37,48649,48650],{"class":39,"line":32702},[37,48651,32600],{"class":43},[37,48653,48654,48656,48658],{"class":39,"line":32708},[37,48655,32605],{"class":54},[37,48657,70],{"class":50},[37,48659,32412],{"class":82},[37,48661,48662],{"class":39,"line":32714},[37,48663,32614],{"class":43},[37,48665,48666,48668,48670],{"class":39,"line":32720},[37,48667,32619],{"class":54},[37,48669,70],{"class":50},[37,48671,3157],{"class":82},[37,48673,48674],{"class":39,"line":32726},[37,48675,32628],{"class":43},[37,48677,48678,48680,48682],{"class":39,"line":32737},[37,48679,32633],{"class":54},[37,48681,70],{"class":50},[37,48683,3157],{"class":82},[37,48685,48686],{"class":39,"line":32743},[37,48687,32642],{"class":43},[37,48689,48690,48692,48694],{"class":39,"line":32763},[37,48691,32647],{"class":54},[37,48693,70],{"class":50},[37,48695,3157],{"class":82},[37,48697,48698],{"class":39,"line":32769},[37,48699,32656],{"class":43},[37,48701,48702,48704,48706,48708,48710],{"class":39,"line":32780},[37,48703,3475],{"class":50},[37,48705,31671],{"class":54},[37,48707,26116],{"class":50},[37,48709,31676],{"class":82},[37,48711,32669],{"class":54},[37,48713,48714],{"class":39,"line":32786},[37,48715,32674],{"class":43},[37,48717,48718,48720,48722],{"class":39,"line":32792},[37,48719,32679],{"class":54},[37,48721,70],{"class":50},[37,48723,32684],{"class":54},[37,48725,48726],{"class":39,"line":32798},[37,48727,32689],{"class":43},[37,48729,48730,48732,48734],{"class":39,"line":32804},[37,48731,32694],{"class":54},[37,48733,70],{"class":50},[37,48735,32699],{"class":54},[37,48737,48738],{"class":39,"line":32810},[37,48739,32705],{"class":43},[37,48741,48742],{"class":39,"line":32816},[37,48743,32711],{"class":54},[37,48745,48746],{"class":39,"line":32822},[37,48747,32717],{"class":43},[37,48749,48750],{"class":39,"line":32842},[37,48751,32723],{"class":43},[37,48753,48754,48756,48758],{"class":39,"line":32848},[37,48755,32729],{"class":54},[37,48757,70],{"class":50},[37,48759,32734],{"class":54},[37,48761,48762],{"class":39,"line":32864},[37,48763,32740],{"class":43},[37,48765,48766,48768,48770,48772,48774,48776,48778],{"class":39,"line":32870},[37,48767,32746],{"class":54},[37,48769,70],{"class":50},[37,48771,32751],{"class":54},[37,48773,32754],{"class":5288},[37,48775,70],{"class":50},[37,48777,422],{"class":82},[37,48779,214],{"class":54},[37,48781,48782],{"class":39,"line":32884},[37,48783,32766],{"class":43},[37,48785,48786,48788,48790],{"class":39,"line":32890},[37,48787,32772],{"class":54},[37,48789,70],{"class":50},[37,48791,32777],{"class":54},[37,48793,48794],{"class":39,"line":32905},[37,48795,32783],{"class":43},[37,48797,48798],{"class":39,"line":32911},[37,48799,32789],{"class":54},[37,48801,48802],{"class":39,"line":32920},[37,48803,32795],{"class":43},[37,48805,48806],{"class":39,"line":32926},[37,48807,32801],{"class":54},[37,48809,48810],{"class":39,"line":32935},[37,48811,32807],{"class":43},[37,48813,48814],{"class":39,"line":32941},[37,48815,32813],{"class":54},[37,48817,48818],{"class":39,"line":32947},[37,48819,32819],{"class":43},[37,48821,48822,48824,48826,48828,48830,48832,48834],{"class":39,"line":32956},[37,48823,32825],{"class":54},[37,48825,9549],{"class":50},[37,48827,32830],{"class":54},[37,48829,659],{"class":50},[37,48831,32835],{"class":54},[37,48833,396],{"class":82},[37,48835,214],{"class":54},[37,48837,48838],{"class":39,"line":32962},[37,48839,32845],{"class":43},[37,48841,48842,48844,48846,48848,48850],{"class":39,"line":32973},[37,48843,32851],{"class":54},[37,48845,9549],{"class":50},[37,48847,32856],{"class":54},[37,48849,3021],{"class":50},[37,48851,32861],{"class":54},[37,48853,48854],{"class":39,"line":32979},[37,48855,32867],{"class":43},[37,48857,48858,48860,48862,48864,48866],{"class":39,"line":32998},[37,48859,32873],{"class":54},[37,48861,9549],{"class":50},[37,48863,32835],{"class":54},[37,48865,396],{"class":82},[37,48867,214],{"class":54},[37,48869,48870],{"class":39,"line":33004},[37,48871,32887],{"class":43},[37,48873,48874,48876,48878,48880,48882],{"class":39,"line":33015},[37,48875,3475],{"class":50},[37,48877,32895],{"class":54},[37,48879,26116],{"class":50},[37,48881,31676],{"class":82},[37,48883,32902],{"class":54},[37,48885,48886],{"class":39,"line":33021},[37,48887,32908],{"class":43},[37,48889,48890,48892,48894],{"class":39,"line":33041},[37,48891,32679],{"class":54},[37,48893,70],{"class":50},[37,48895,32684],{"class":54},[37,48897,48898],{"class":39,"line":33057},[37,48899,32923],{"class":43},[37,48901,48902,48904,48906],{"class":39,"line":33063},[37,48903,32694],{"class":54},[37,48905,70],{"class":50},[37,48907,32699],{"class":54},[37,48909,48910],{"class":39,"line":33077},[37,48911,32938],{"class":43},[37,48913,48914],{"class":39,"line":33083},[37,48915,32944],{"class":54},[37,48917,48918],{"class":39,"line":33089},[37,48919,36425],{"class":43},[37,48921,48922,48924],{"class":39,"line":33100},[37,48923,32950],{"class":50},[37,48925,32953],{"class":54},[37,48927,48928],{"class":39,"line":33106},[37,48929,32959],{"class":43},[37,48931,48932,48934,48936],{"class":39,"line":33112},[37,48933,36440],{"class":54},[37,48935,70],{"class":50},[37,48937,32734],{"class":54},[37,48939,48940],{"class":39,"line":33122},[37,48941,32976],{"class":43},[37,48943,48944,48946,48948,48950,48952,48954,48956],{"class":39,"line":33128},[37,48945,36453],{"class":54},[37,48947,70],{"class":50},[37,48949,32751],{"class":54},[37,48951,32754],{"class":5288},[37,48953,70],{"class":50},[37,48955,422],{"class":82},[37,48957,214],{"class":54},[37,48959,48960],{"class":39,"line":33139},[37,48961,33001],{"class":43},[37,48963,48964,48966,48968],{"class":39,"line":33145},[37,48965,36474],{"class":54},[37,48967,70],{"class":50},[37,48969,32777],{"class":54},[37,48971,48972],{"class":39,"line":33155},[37,48973,33018],{"class":43},[37,48975,48976,48978,48980,48982,48984,48986,48988],{"class":39,"line":33160},[37,48977,36487],{"class":54},[37,48979,9549],{"class":50},[37,48981,36492],{"class":54},[37,48983,659],{"class":50},[37,48985,32835],{"class":54},[37,48987,396],{"class":82},[37,48989,214],{"class":54},[37,48991,48992,48994,48996,48998,49000],{"class":39,"line":33166},[37,48993,36505],{"class":54},[37,48995,9549],{"class":50},[37,48997,32856],{"class":54},[37,48999,3021],{"class":50},[37,49001,32861],{"class":54},[37,49003,49004],{"class":39,"line":33215},[37,49005,36518],{"class":43},[37,49007,49008,49010,49012,49014,49016],{"class":39,"line":33262},[37,49009,36523],{"class":54},[37,49011,9549],{"class":50},[37,49013,32835],{"class":54},[37,49015,396],{"class":82},[37,49017,214],{"class":54},[37,49019,49020],{"class":39,"line":33267},[37,49021,33080],{"class":43},[37,49023,49024],{"class":39,"line":33273},[37,49025,33086],{"class":43},[37,49027,49028,49030,49032],{"class":39,"line":33292},[37,49029,33092],{"class":54},[37,49031,787],{"class":50},[37,49033,33097],{"class":54},[37,49035,49036],{"class":39,"line":33298},[37,49037,33103],{"class":43},[37,49039,49040],{"class":39,"line":33318},[37,49041,33109],{"class":43},[37,49043,49044,49046,49048],{"class":39,"line":33324},[37,49045,33115],{"class":54},[37,49047,787],{"class":50},[37,49049,33097],{"class":54},[37,49051,49052],{"class":39,"line":33330},[37,49053,33125],{"class":43},[37,49055,49056,49058,49060],{"class":39,"line":33340},[37,49057,33131],{"class":54},[37,49059,787],{"class":50},[37,49061,33136],{"class":54},[37,49063,49064],{"class":39,"line":33345},[37,49065,33142],{"class":43},[37,49067,49068,49070,49072],{"class":39,"line":33351},[37,49069,33148],{"class":54},[37,49071,787],{"class":50},[37,49073,33136],{"class":54},[37,49075,49076],{"class":39,"line":33367},[37,49077,2472],{"emptyLinePlaceholder":131},[37,49079,49080],{"class":39,"line":33412},[37,49081,33163],{"class":43},[37,49083,49084,49086,49088,49090,49092,49094,49096,49098,49100,49102,49104,49106,49108,49110,49112,49114,49116,49118,49120,49122],{"class":39,"line":33418},[37,49085,32520],{"class":82},[37,49087,208],{"class":54},[37,49089,3664],{"class":309},[37,49091,32528],{"class":82},[37,49093,33177],{"class":309},[37,49095,1099],{"class":82},[37,49097,33182],{"class":50},[37,49099,1149],{"class":82},[37,49101,33187],{"class":309},[37,49103,1099],{"class":82},[37,49105,33182],{"class":50},[37,49107,1149],{"class":82},[37,49109,3664],{"class":309},[37,49111,33198],{"class":54},[37,49113,112],{"class":50},[37,49115,422],{"class":82},[37,49117,33205],{"class":54},[37,49119,112],{"class":50},[37,49121,422],{"class":82},[37,49123,33212],{"class":54},[37,49125,49126,49128,49130,49132,49134,49136,49138,49140,49142,49144,49146,49148,49150,49152,49154,49156,49158,49160,49162,49164],{"class":39,"line":33424},[37,49127,32520],{"class":82},[37,49129,208],{"class":54},[37,49131,3664],{"class":309},[37,49133,32528],{"class":82},[37,49135,33226],{"class":309},[37,49137,1099],{"class":82},[37,49139,33182],{"class":50},[37,49141,1149],{"class":82},[37,49143,33235],{"class":309},[37,49145,1099],{"class":82},[37,49147,33182],{"class":50},[37,49149,1149],{"class":82},[37,49151,3664],{"class":309},[37,49153,33246],{"class":54},[37,49155,112],{"class":50},[37,49157,422],{"class":82},[37,49159,33253],{"class":54},[37,49161,112],{"class":50},[37,49163,422],{"class":82},[37,49165,33212],{"class":54},[37,49167,49168],{"class":39,"line":33430},[37,49169,2472],{"emptyLinePlaceholder":131},[37,49171,49172],{"class":39,"line":33441},[37,49173,33270],{"class":43},[37,49175,49176,49178,49180,49182,49184,49186,49188],{"class":39,"line":33447},[37,49177,2569],{"class":50},[37,49179,33278],{"class":54},[37,49181,112],{"class":50},[37,49183,422],{"class":82},[37,49185,1143],{"class":54},[37,49187,1163],{"class":50},[37,49189,33289],{"class":54},[37,49191,49192],{"class":39,"line":33453},[37,49193,33295],{"class":43},[37,49195,49196,49198,49200,49202,49204,49206,49208],{"class":39,"line":33459},[37,49197,33301],{"class":54},[37,49199,247],{"class":82},[37,49201,70],{"class":50},[37,49203,33308],{"class":54},[37,49205,112],{"class":50},[37,49207,422],{"class":82},[37,49209,33315],{"class":54},[37,49211,49212],{"class":39,"line":33477},[37,49213,33321],{"class":43},[37,49215,49216],{"class":39,"line":33491},[37,49217,33327],{"class":43},[37,49219,49220,49222,49224],{"class":39,"line":33500},[37,49221,33333],{"class":54},[37,49223,70],{"class":50},[37,49225,32384],{"class":54},[37,49227,49228],{"class":39,"line":33509},[37,49229,2472],{"emptyLinePlaceholder":131},[37,49231,49232],{"class":39,"line":33518},[37,49233,33348],{"class":43},[37,49235,49236,49238,49240,49242,49244],{"class":39,"line":33527},[37,49237,33354],{"class":54},[37,49239,70],{"class":50},[37,49241,33359],{"class":54},[37,49243,112],{"class":50},[37,49245,33364],{"class":54},[37,49247,49248,49250,49252,49254,49256,49258,49260,49262,49264,49266,49268,49270,49272,49274,49276,49278,49280,49282],{"class":39,"line":33533},[37,49249,32520],{"class":82},[37,49251,208],{"class":54},[37,49253,33374],{"class":309},[37,49255,1099],{"class":82},[37,49257,33379],{"class":50},[37,49259,1149],{"class":82},[37,49261,747],{"class":309},[37,49263,1099],{"class":82},[37,49265,33379],{"class":50},[37,49267,1149],{"class":82},[37,49269,33392],{"class":309},[37,49271,33395],{"class":54},[37,49273,33398],{"class":50},[37,49275,1110],{"class":82},[37,49277,33403],{"class":54},[37,49279,533],{"class":50},[37,49281,1110],{"class":82},[37,49283,30567],{"class":54},[37,49285,49286],{"class":39,"line":33539},[37,49287,36802],{"class":43},[37,49289,49290],{"class":39,"line":33547},[37,49291,36807],{"class":43},[37,49293,49294,49296,49298],{"class":39,"line":33552},[37,49295,36812],{"class":54},[37,49297,33436],{"class":309},[37,49299,214],{"class":54},[37,49301,49302],{"class":39,"line":33558},[37,49303,33456],{"class":43},[37,49305,49306,49308,49310,49312,49314,49316],{"class":39,"line":33569},[37,49307,33462],{"class":54},[37,49309,70],{"class":50},[37,49311,33467],{"class":54},[37,49313,33470],{"class":5288},[37,49315,70],{"class":50},[37,49317,1618],{"class":54},[37,49319,49320,49322,49324,49326],{"class":39,"line":33575},[37,49321,33480],{"class":309},[37,49323,1062],{"class":54},[37,49325,33485],{"class":82},[37,49327,33488],{"class":54},[37,49329,49330,49332],{"class":39,"line":33595},[37,49331,33494],{"class":309},[37,49333,33497],{"class":54},[37,49335,49336,49338],{"class":39,"line":33601},[37,49337,33503],{"class":309},[37,49339,33506],{"class":54},[37,49341,49342,49344],{"class":39,"line":33607},[37,49343,33512],{"class":309},[37,49345,33515],{"class":54},[37,49347,49348,49350],{"class":39,"line":33613},[37,49349,33521],{"class":309},[37,49351,33524],{"class":54},[37,49353,49354],{"class":39,"line":33630},[37,49355,33530],{"class":54},[37,49357,49358],{"class":39,"line":33636},[37,49359,33536],{"class":43},[37,49361,49362,49364],{"class":39,"line":33642},[37,49363,4162],{"class":50},[37,49365,33544],{"class":54},[37,49367,49368],{"class":39,"line":33648},[37,49369,2472],{"emptyLinePlaceholder":131},[37,49371,49372],{"class":39,"line":33654},[37,49373,33555],{"class":43},[37,49375,49376,49378,49380],{"class":39,"line":33660},[37,49377,32017],{"class":50},[37,49379,33563],{"class":2035},[37,49381,33566],{"class":54},[37,49383,49384],{"class":39,"line":33687},[37,49385,33572],{"class":43},[37,49387,49388,49390,49392,49394,49396,49398,49400,49402],{"class":39,"line":33711},[37,49389,33578],{"class":54},[37,49391,31763],{"class":5288},[37,49393,70],{"class":50},[37,49395,208],{"class":54},[37,49397,702],{"class":82},[37,49399,583],{"class":54},[37,49401,498],{"class":82},[37,49403,30567],{"class":54},[37,49405,49406],{"class":39,"line":33717},[37,49407,33598],{"class":43},[37,49409,49410],{"class":39,"line":33723},[37,49411,33604],{"class":43},[37,49413,49414],{"class":39,"line":33729},[37,49415,33610],{"class":43},[37,49417,49418,49420,49422,49424,49426,49428,49430],{"class":39,"line":33740},[37,49419,31797],{"class":54},[37,49421,422],{"class":82},[37,49423,583],{"class":54},[37,49425,282],{"class":82},[37,49427,583],{"class":54},[37,49429,422],{"class":82},[37,49431,214],{"class":54},[37,49433,49434],{"class":39,"line":33751},[37,49435,33633],{"class":43},[37,49437,49438],{"class":39,"line":33757},[37,49439,33639],{"class":43},[37,49441,49442],{"class":39,"line":33774},[37,49443,33645],{"class":43},[37,49445,49446],{"class":39,"line":33797},[37,49447,33651],{"class":43},[37,49449,49450],{"class":39,"line":33820},[37,49451,33657],{"class":43},[37,49453,49454,49456,49458,49460,49462,49464,49466,49468,49470],{"class":39,"line":33826},[37,49455,33663],{"class":54},[37,49457,33666],{"class":309},[37,49459,33669],{"class":54},[37,49461,33672],{"class":309},[37,49463,583],{"class":54},[37,49465,33677],{"class":5288},[37,49467,70],{"class":50},[37,49469,33682],{"class":309},[37,49471,214],{"class":54},[37,49473,49474,49476,49478,49480,49482,49484,49486,49488,49490],{"class":39,"line":33831},[37,49475,33663],{"class":54},[37,49477,33666],{"class":309},[37,49479,33694],{"class":54},[37,49481,33697],{"class":309},[37,49483,583],{"class":54},[37,49485,33677],{"class":5288},[37,49487,70],{"class":50},[37,49489,33706],{"class":309},[37,49491,214],{"class":54},[37,49493,49494],{"class":39,"line":33840},[37,49495,33714],{"class":43},[37,49497,49498],{"class":39,"line":33850},[37,49499,33720],{"class":54},[37,49501,49502],{"class":39,"line":33856},[37,49503,33726],{"class":43},[37,49505,49506,49508,49510],{"class":39,"line":33861},[37,49507,33732],{"class":54},[37,49509,33735],{"class":309},[37,49511,214],{"class":54},[37,49513,49514,49516,49518],{"class":39,"line":33867},[37,49515,33743],{"class":54},[37,49517,33746],{"class":309},[37,49519,214],{"class":54},[37,49521,49522],{"class":39,"line":33880},[37,49523,33754],{"class":43},[37,49525,49526,49528,49530,49532,49534,49536,49538],{"class":39,"line":33886},[37,49527,31797],{"class":54},[37,49529,422],{"class":82},[37,49531,583],{"class":54},[37,49533,282],{"class":82},[37,49535,583],{"class":54},[37,49537,282],{"class":82},[37,49539,214],{"class":54},[37,49541,49542,49544,49546,49548,49550,49552,49554,49556,49558],{"class":39,"line":33897},[37,49543,33663],{"class":54},[37,49545,33666],{"class":309},[37,49547,33781],{"class":54},[37,49549,33672],{"class":309},[37,49551,583],{"class":54},[37,49553,33677],{"class":5288},[37,49555,70],{"class":50},[37,49557,33792],{"class":309},[37,49559,214],{"class":54},[37,49561,49562,49564,49566,49568,49570,49572,49574,49576,49578],{"class":39,"line":33908},[37,49563,33663],{"class":54},[37,49565,33666],{"class":309},[37,49567,33804],{"class":54},[37,49569,33697],{"class":309},[37,49571,583],{"class":54},[37,49573,33677],{"class":5288},[37,49575,70],{"class":50},[37,49577,33815],{"class":309},[37,49579,214],{"class":54},[37,49581,49582],{"class":39,"line":33927},[37,49583,33823],{"class":43},[37,49585,49587],{"class":39,"line":49586},219,[37,49588,33720],{"class":54},[37,49590,49592,49594,49596],{"class":39,"line":49591},220,[37,49593,33732],{"class":54},[37,49595,33666],{"class":309},[37,49597,214],{"class":54},[37,49599,49601,49603,49605],{"class":39,"line":49600},221,[37,49602,33743],{"class":54},[37,49604,33845],{"class":309},[37,49606,214],{"class":54},[37,49608,49610],{"class":39,"line":49609},222,[37,49611,33853],{"class":54},[37,49613,49615],{"class":39,"line":49614},223,[37,49616,2472],{"emptyLinePlaceholder":131},[37,49618,49620],{"class":39,"line":49619},224,[37,49621,33864],{"class":43},[37,49623,49625,49627,49629,49631,49633],{"class":39,"line":49624},225,[37,49626,1603],{"class":50},[37,49628,31290],{"class":82},[37,49630,3021],{"class":50},[37,49632,31295],{"class":309},[37,49634,3811],{"class":54},[37,49636,49638],{"class":39,"line":49637},226,[37,49639,33883],{"class":43},[37,49641,49643,49645,49647],{"class":39,"line":49642},227,[37,49644,44615],{"class":54},[37,49646,70],{"class":50},[37,49648,44620],{"class":54},[37,49650,49652,49654,49656],{"class":39,"line":49651},228,[37,49653,33900],{"class":54},[37,49655,70],{"class":50},[37,49657,33905],{"class":54},[37,49659,49661,49663,49665,49667,49669,49671,49673],{"class":39,"line":49660},229,[37,49662,33462],{"class":54},[37,49664,70],{"class":50},[37,49666,44637],{"class":54},[37,49668,33918],{"class":5288},[37,49670,70],{"class":50},[37,49672,1110],{"class":82},[37,49674,214],{"class":54},[37,49676,49678],{"class":39,"line":49677},230,[37,49679,33930],{"class":54},[22070,49681,49683],{"id":49682},"_242测试代码","2.4.2.测试代码",[14,49685,49686],{},"使用测试集进行测试与推理",[27,49688,49690],{"className":29,"code":49689,"language":31,"meta":32,"style":32},"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",[34,49691,49692,49698,49708,49718,49729,49739,49743,49747,49755,49760,49764,49781,49785,49789,49793,49797,49801,49833,49837,49845,49849,49861,49865,49869,49873,49877,49881,49885,49889,49893,49911,49925,49929,49939,49949,49959,49965,49969,49973,49981,49985,50001,50009,50013,50017,50025,50033,50037,50041,50045,50049,50055,50059,50069,50077,50085,50089,50093,50097,50105,50109,50125,50129,50133,50137,50149,50153,50165,50169,50173,50185,50189,50199,50203,50207,50219,50223,50231,50235,50239,50247,50251,50259,50263,50267,50271,50275,50279,50295,50303,50307,50311,50329,50335,50339,50349,50357,50365,50369,50373,50377,50381,50389,50393,50409,50413,50421,50429],{"__ignoreMap":32},[37,49693,49694,49696],{"class":39,"line":40},[37,49695,51],{"class":50},[37,49697,30465],{"class":54},[37,49699,49700,49702,49704,49706],{"class":39,"line":47},[37,49701,51],{"class":50},[37,49703,31485],{"class":54},[37,49705,31453],{"class":50},[37,49707,31490],{"class":54},[37,49709,49710,49712,49714,49716],{"class":39,"line":58},[37,49711,30807],{"class":50},[37,49713,31468],{"class":54},[37,49715,51],{"class":50},[37,49717,31473],{"class":54},[37,49719,49720,49722,49724,49726],{"class":39,"line":64},[37,49721,30807],{"class":50},[37,49723,31438],{"class":54},[37,49725,51],{"class":50},[37,49727,49728],{"class":54}," ImageFolder\n",[37,49730,49731,49733,49735,49737],{"class":39,"line":76},[37,49732,30807],{"class":50},[37,49734,31984],{"class":54},[37,49736,51],{"class":50},[37,49738,44709],{"class":54},[37,49740,49741],{"class":39,"line":92},[37,49742,2472],{"emptyLinePlaceholder":131},[37,49744,49745],{"class":39,"line":97},[37,49746,34020],{"class":43},[37,49748,49749,49751,49753],{"class":39,"line":107},[37,49750,32017],{"class":50},[37,49752,34027],{"class":2035},[37,49754,32023],{"class":54},[37,49756,49757],{"class":39,"line":1390},[37,49758,49759],{"class":43},"   # 导入自己的数据集，并进行数据处理\n",[37,49761,49762],{"class":39,"line":1402},[37,49763,48029],{"class":43},[37,49765,49766,49768,49770,49772,49774,49776,49779],{"class":39,"line":1684},[37,49767,48034],{"class":82},[37,49769,70],{"class":50},[37,49771,873],{"class":50},[37,49773,456],{"class":309},[37,49775,761],{"class":82},[37,49777,49778],{"class":48045},"\u002Fdata\u002Ftest",[37,49780,25206],{"class":309},[37,49782,49783],{"class":39,"line":1689},[37,49784,2472],{"emptyLinePlaceholder":131},[37,49786,49787],{"class":39,"line":1695},[37,49788,48057],{"class":43},[37,49790,49791],{"class":39,"line":1700},[37,49792,48062],{"class":43},[37,49794,49795],{"class":39,"line":1714},[37,49796,48067],{"class":43},[37,49798,49799],{"class":39,"line":1719},[37,49800,48072],{"class":43},[37,49802,49803,49805,49807,49809,49811,49813,49815,49817,49819,49821,49823,49825,49827,49829,49831],{"class":39,"line":1725},[37,49804,48077],{"class":54},[37,49806,70],{"class":50},[37,49808,48082],{"class":54},[37,49810,48085],{"class":82},[37,49812,583],{"class":54},[37,49814,48090],{"class":82},[37,49816,583],{"class":54},[37,49818,48095],{"class":82},[37,49820,48098],{"class":54},[37,49822,48101],{"class":82},[37,49824,583],{"class":54},[37,49826,48106],{"class":82},[37,49828,583],{"class":54},[37,49830,48111],{"class":82},[37,49832,4729],{"class":54},[37,49834,49835],{"class":39,"line":1746},[37,49836,48118],{"class":43},[37,49838,49839,49841,49843],{"class":39,"line":1751},[37,49840,48123],{"class":54},[37,49842,70],{"class":50},[37,49844,48128],{"class":54},[37,49846,49847],{"class":39,"line":1765},[37,49848,48133],{"class":43},[37,49850,49851,49853,49855,49857,49859],{"class":39,"line":1770},[37,49852,48138],{"class":54},[37,49854,31571],{"class":82},[37,49856,583],{"class":54},[37,49858,31571],{"class":82},[37,49860,42691],{"class":54},[37,49862,49863],{"class":39,"line":1799},[37,49864,48151],{"class":43},[37,49866,49867],{"class":39,"line":1804},[37,49868,48156],{"class":54},[37,49870,49871],{"class":39,"line":1821},[37,49872,48161],{"class":54},[37,49874,49875],{"class":39,"line":1826},[37,49876,48166],{"class":43},[37,49878,49879],{"class":39,"line":1831},[37,49880,48171],{"class":43},[37,49882,49883],{"class":39,"line":1836},[37,49884,2472],{"emptyLinePlaceholder":131},[37,49886,49887],{"class":39,"line":1850},[37,49888,48180],{"class":43},[37,49890,49891],{"class":39,"line":1855},[37,49892,48185],{"class":43},[37,49894,49895,49897,49899,49901,49903,49905,49907,49909],{"class":39,"line":2649},[37,49896,34034],{"class":54},[37,49898,70],{"class":50},[37,49900,48194],{"class":54},[37,49902,48197],{"class":82},[37,49904,583],{"class":54},[37,49906,48202],{"class":5288},[37,49908,70],{"class":50},[37,49910,48207],{"class":54},[37,49912,49913,49915,49917,49919,49921,49923],{"class":39,"line":2663},[37,49914,34091],{"class":54},[37,49916,70],{"class":50},[37,49918,31604],{"class":54},[37,49920,31607],{"class":5288},[37,49922,70],{"class":50},[37,49924,34102],{"class":54},[37,49926,49927],{"class":39,"line":2671},[37,49928,34107],{"class":43},[37,49930,49931,49933,49935,49937],{"class":39,"line":2676},[37,49932,34112],{"class":5288},[37,49934,70],{"class":50},[37,49936,422],{"class":82},[37,49938,31536],{"class":54},[37,49940,49941,49943,49945,49947],{"class":39,"line":2682},[37,49942,34123],{"class":5288},[37,49944,70],{"class":50},[37,49946,31546],{"class":82},[37,49948,31536],{"class":54},[37,49950,49951,49953,49955,49957],{"class":39,"line":2688},[37,49952,34134],{"class":5288},[37,49954,70],{"class":50},[37,49956,396],{"class":82},[37,49958,214],{"class":54},[37,49960,49961,49963],{"class":39,"line":2693},[37,49962,4162],{"class":50},[37,49964,34147],{"class":54},[37,49966,49967],{"class":39,"line":8020},[37,49968,2472],{"emptyLinePlaceholder":131},[37,49970,49971],{"class":39,"line":8044},[37,49972,34156],{"class":43},[37,49974,49975,49977,49979],{"class":39,"line":8049},[37,49976,32017],{"class":50},[37,49978,34163],{"class":2035},[37,49980,34166],{"class":54},[37,49982,49983],{"class":39,"line":8055},[37,49984,34171],{"class":43},[37,49986,49987,49989,49991,49993,49995,49997,49999],{"class":39,"line":8082},[37,49988,31307],{"class":54},[37,49990,70],{"class":50},[37,49992,31314],{"class":309},[37,49994,1776],{"class":50},[37,49996,31319],{"class":54},[37,49998,1773],{"class":50},[37,50000,34188],{"class":309},[37,50002,50003,50005,50007],{"class":39,"line":8087},[37,50004,31359],{"class":54},[37,50006,70],{"class":50},[37,50008,32359],{"class":54},[37,50010,50011],{"class":39,"line":8093},[37,50012,2472],{"emptyLinePlaceholder":131},[37,50014,50015],{"class":39,"line":8105},[37,50016,34205],{"class":43},[37,50018,50019,50021,50023],{"class":39,"line":8117},[37,50020,34210],{"class":54},[37,50022,70],{"class":50},[37,50024,32412],{"class":82},[37,50026,50027,50029,50031],{"class":39,"line":8129},[37,50028,34219],{"class":54},[37,50030,70],{"class":50},[37,50032,3157],{"class":82},[37,50034,50035],{"class":39,"line":9788},[37,50036,2472],{"emptyLinePlaceholder":131},[37,50038,50039],{"class":39,"line":9813},[37,50040,34232],{"class":43},[37,50042,50043],{"class":39,"line":9836},[37,50044,34237],{"class":43},[37,50046,50047],{"class":39,"line":9860},[37,50048,34242],{"class":43},[37,50050,50051,50053],{"class":39,"line":9865},[37,50052,34247],{"class":50},[37,50054,32953],{"class":54},[37,50056,50057],{"class":39,"line":9870},[37,50058,34254],{"class":43},[37,50060,50061,50063,50065,50067],{"class":39,"line":9875},[37,50062,3475],{"class":50},[37,50064,34261],{"class":54},[37,50066,26116],{"class":50},[37,50068,34266],{"class":54},[37,50070,50071,50073,50075],{"class":39,"line":9884},[37,50072,34271],{"class":54},[37,50074,70],{"class":50},[37,50076,34276],{"class":54},[37,50078,50079,50081,50083],{"class":39,"line":9889},[37,50080,34281],{"class":54},[37,50082,70],{"class":50},[37,50084,34286],{"class":54},[37,50086,50087],{"class":39,"line":9895},[37,50088,34291],{"class":43},[37,50090,50091],{"class":39,"line":9916},[37,50092,32944],{"class":54},[37,50094,50095],{"class":39,"line":9922},[37,50096,34300],{"class":43},[37,50098,50099,50101,50103],{"class":39,"line":9936},[37,50100,32729],{"class":54},[37,50102,70],{"class":50},[37,50104,34309],{"class":54},[37,50106,50107],{"class":39,"line":9942},[37,50108,34314],{"class":43},[37,50110,50111,50113,50115,50117,50119,50121,50123],{"class":39,"line":9969},[37,50112,32746],{"class":54},[37,50114,70],{"class":50},[37,50116,32751],{"class":54},[37,50118,32754],{"class":5288},[37,50120,70],{"class":50},[37,50122,422],{"class":82},[37,50124,214],{"class":54},[37,50126,50127],{"class":39,"line":9978},[37,50128,34335],{"class":43},[37,50130,50131],{"class":39,"line":9984},[37,50132,34340],{"class":43},[37,50134,50135],{"class":39,"line":9992},[37,50136,34345],{"class":43},[37,50138,50139,50141,50143,50145,50147],{"class":39,"line":9997},[37,50140,34350],{"class":54},[37,50142,9549],{"class":50},[37,50144,32856],{"class":54},[37,50146,3021],{"class":50},[37,50148,34359],{"class":54},[37,50150,50151],{"class":39,"line":16676},[37,50152,34364],{"class":43},[37,50154,50155,50157,50159,50161,50163],{"class":39,"line":16682},[37,50156,34369],{"class":54},[37,50158,9549],{"class":50},[37,50160,34374],{"class":54},[37,50162,396],{"class":82},[37,50164,214],{"class":54},[37,50166,50167],{"class":39,"line":16705},[37,50168,2472],{"emptyLinePlaceholder":131},[37,50170,50171],{"class":39,"line":16711},[37,50172,34387],{"class":43},[37,50174,50175,50177,50179,50181,50183],{"class":39,"line":16734},[37,50176,34392],{"class":54},[37,50178,70],{"class":50},[37,50180,34397],{"class":54},[37,50182,787],{"class":50},[37,50184,34402],{"class":54},[37,50186,50187],{"class":39,"line":16748},[37,50188,34407],{"class":43},[37,50190,50191,50193,50195,50197],{"class":39,"line":16768},[37,50192,32520],{"class":82},[37,50194,208],{"class":54},[37,50196,34416],{"class":309},[37,50198,34419],{"class":54},[37,50200,50201],{"class":39,"line":16774},[37,50202,2472],{"emptyLinePlaceholder":131},[37,50204,50205],{"class":39,"line":16785},[37,50206,34428],{"class":43},[37,50208,50209,50211,50213,50215,50217],{"class":39,"line":16808},[37,50210,1603],{"class":50},[37,50212,31290],{"class":82},[37,50214,3021],{"class":50},[37,50216,31295],{"class":309},[37,50218,3811],{"class":54},[37,50220,50221],{"class":39,"line":16830},[37,50222,34445],{"class":43},[37,50224,50225,50227,50229],{"class":39,"line":16835},[37,50226,31359],{"class":54},[37,50228,70],{"class":50},[37,50230,44620],{"class":54},[37,50232,50233],{"class":39,"line":16841},[37,50234,34458],{"class":43},[37,50236,50237],{"class":39,"line":16855},[37,50238,34463],{"class":43},[37,50240,50241,50243,50245],{"class":39,"line":16868},[37,50242,34468],{"class":54},[37,50244,34471],{"class":309},[37,50246,30567],{"class":54},[37,50248,50249],{"class":39,"line":16873},[37,50250,34478],{"class":43},[37,50252,50253,50255,50257],{"class":39,"line":16887},[37,50254,34091],{"class":54},[37,50256,70],{"class":50},[37,50258,34487],{"class":54},[37,50260,50261],{"class":39,"line":16892},[37,50262,34492],{"class":43},[37,50264,50265],{"class":39,"line":16898},[37,50266,34497],{"class":54},[37,50268,50269],{"class":39,"line":16903},[37,50270,2472],{"emptyLinePlaceholder":131},[37,50272,50273],{"class":39,"line":16917},[37,50274,34506],{"class":43},[37,50276,50277],{"class":39,"line":16922},[37,50278,34511],{"class":43},[37,50280,50281,50283,50285,50287,50289,50291,50293],{"class":39,"line":16927},[37,50282,31307],{"class":54},[37,50284,70],{"class":50},[37,50286,31314],{"class":309},[37,50288,1776],{"class":50},[37,50290,31319],{"class":54},[37,50292,1773],{"class":50},[37,50294,34188],{"class":309},[37,50296,50297,50299,50301],{"class":39,"line":16941},[37,50298,31359],{"class":54},[37,50300,70],{"class":50},[37,50302,32359],{"class":54},[37,50304,50305],{"class":39,"line":16953},[37,50306,34540],{"class":43},[37,50308,50309],{"class":39,"line":16958},[37,50310,34545],{"class":43},[37,50312,50313,50315,50317,50319,50322,50324,50327],{"class":39,"line":16971},[37,50314,34550],{"class":54},[37,50316,70],{"class":50},[37,50318,1093],{"class":54},[37,50320,50321],{"class":309},"'猫'",[37,50323,583],{"class":54},[37,50325,50326],{"class":309},"'狗'",[37,50328,33315],{"class":54},[37,50330,50331,50333],{"class":39,"line":16976},[37,50332,34247],{"class":50},[37,50334,32953],{"class":54},[37,50336,50337],{"class":39,"line":16981},[37,50338,34615],{"class":43},[37,50340,50341,50343,50345,50347],{"class":39,"line":16986},[37,50342,3475],{"class":50},[37,50344,34622],{"class":54},[37,50346,26116],{"class":50},[37,50348,34266],{"class":54},[37,50350,50351,50353,50355],{"class":39,"line":16999},[37,50352,32679],{"class":54},[37,50354,70],{"class":50},[37,50356,32684],{"class":54},[37,50358,50359,50361,50363],{"class":39,"line":17004},[37,50360,32694],{"class":54},[37,50362,70],{"class":50},[37,50364,32699],{"class":54},[37,50366,50367],{"class":39,"line":32702},[37,50368,2472],{"emptyLinePlaceholder":131},[37,50370,50371],{"class":39,"line":32708},[37,50372,34651],{"class":43},[37,50374,50375],{"class":39,"line":32714},[37,50376,32944],{"class":54},[37,50378,50379],{"class":39,"line":32720},[37,50380,34660],{"class":43},[37,50382,50383,50385,50387],{"class":39,"line":32726},[37,50384,32729],{"class":54},[37,50386,70],{"class":50},[37,50388,32734],{"class":54},[37,50390,50391],{"class":39,"line":32737},[37,50392,34673],{"class":43},[37,50394,50395,50397,50399,50401,50403,50405,50407],{"class":39,"line":32743},[37,50396,32746],{"class":54},[37,50398,70],{"class":50},[37,50400,32751],{"class":54},[37,50402,32754],{"class":5288},[37,50404,70],{"class":50},[37,50406,422],{"class":82},[37,50408,214],{"class":54},[37,50410,50411],{"class":39,"line":32763},[37,50412,34694],{"class":43},[37,50414,50415,50417,50419],{"class":39,"line":32769},[37,50416,34699],{"class":54},[37,50418,70],{"class":50},[37,50420,34704],{"class":54},[37,50422,50423,50425,50427],{"class":39,"line":32780},[37,50424,34709],{"class":54},[37,50426,70],{"class":50},[37,50428,34714],{"class":54},[37,50430,50431,50433,50435,50437,50439,50441,50443,50445],{"class":39,"line":32786},[37,50432,34719],{"class":82},[37,50434,208],{"class":54},[37,50436,34724],{"class":309},[37,50438,34727],{"class":54},[37,50440,34730],{"class":309},[37,50442,583],{"class":54},[37,50444,34735],{"class":309},[37,50446,34738],{"class":54},[123,50448,50449],{},"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":32,"searchDepth":47,"depth":47,"links":50451},[50452,50453,50454,50455],{"id":30661,"depth":58,"text":30662},{"id":37908,"depth":58,"text":37909},{"id":41341,"depth":58,"text":41342},{"id":45350,"depth":58,"text":45351},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30653,"description":128},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50462,"title":50463,"body":50464,"description":128,"extension":129,"meta":50471,"navigation":131,"path":50472,"seo":50473,"stem":50474,"__hash__":50475},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50465,"toc":50469},[50466],[10,50467,50463],{"id":50468},"_3yolo模型学习",{"title":32,"searchDepth":47,"depth":47,"links":50470},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50463,"description":128},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50477,"title":50478,"body":50479,"description":50486,"extension":129,"meta":50487,"navigation":131,"path":50489,"seo":50490,"stem":50491,"__hash__":50492},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50480,"toc":50484},[50481],[14,50482,50483],{},"yolo模型还未补充",{"title":32,"searchDepth":47,"depth":47,"links":50485},[],"深度学习学习",{"category":50488},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50478,"description":50486},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50494,"title":50495,"body":50496,"description":128,"extension":129,"meta":50521,"navigation":131,"path":50522,"seo":50523,"stem":50524,"__hash__":50525},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50497,"toc":50519},[50498,50501,50504,50509,50516],[10,50499,50495],{"id":50500},"_1工具",[14,50502,50503],{},"提示错误插件：有问题会提前报错",[14,50505,50506],{},[119,50507],{"alt":32,"src":50508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,50510,50511],{},[443,50512,50515],{"href":50513,"rel":50514},"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",[23937],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,50517,50518],{},"alt键加上下箭头可以实现语句的移动",{"title":32,"searchDepth":47,"depth":47,"links":50520},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50495,"description":128},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50527,"title":50528,"body":50529,"description":128,"extension":129,"meta":53393,"navigation":131,"path":53394,"seo":53395,"stem":53396,"__hash__":53397},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50530,"toc":53344},[50531,50534,50538,50542,50547,50550,50555,50559,50566,50571,50578,50583,50590,50595,50599,50604,50607,50611,50616,50620,50625,50628,50631,50634,50637,50640,50643,50646,50649,50654,50659,50664,50668,50671,50674,50678,50683,50686,50694,50699,50716,50724,50729,50734,50739,50744,50749,50752,50757,50762,50766,50775,50780,50785,50789,50794,50797,50801,50806,50814,50819,50824,50827,50832,50837,50842,50845,50848,50851,50856,50861,50864,50869,50872,50877,50880,50883,50886,50891,50894,50897,50912,50917,50922,50927,50930,50933,50936,50950,50953,50958,50963,50966,50969,50972,50975,50978,50981,50984,50988,50992,50997,51001,51004,51009,51014,51017,51022,51025,51029,51034,51037,51040,51043,51046,51049,51052,51055,51058,51061,51065,51070,51075,51080,51083,51086,51090,51095,51098,51102,51105,51108,51113,51116,51119,51123,51127,51130,51135,51140,51143,51172,51177,51182,51187,51192,51196,51201,51205,51210,51213,51217,51221,51226,51230,51235,51240,51244,51249,51252,51254,51257,51262,51266,51271,51275,51279,51284,51289,51294,51299,51303,51308,51313,51318,51321,51324,51329,51332,51337,51342,51347,51352,51356,52163,52167,52510,52515,52518,52521,52524,52527,52530,52533,52536,52539,52541,52544,52546,52549,52553,52558,52561,52564,52567,52571,52576,52581,52601,52604,52608,52613,52618,52635,52639,52668,52672,52694,52696,52735,52743,52749,52753,52756,52759,52764,52769,52772,52775,52778,52783,52788,52791,52794,52797,52800,52803,52806,52809,52812,52815,52818,52821,52823,52826,52829,52832,52835,52838,52841,52844,52847,52851,52856,52859,52864,52867,52870,52873,52876,52879,52882,52885,52887,52890,52893,52896,52899,52902,52905,52909,52912,52921,52924,52929,52932,52937,52940,52943,52946,52949,52952,52955,52958,52962,52966,52969,52972,52977,52982,52987,52991,52996,53001,53004,53007,53010,53013,53016,53021,53024,53029,53031,53036,53039,53043,53048,53051,53054,53059,53063,53066,53071,53074,53077,53106,53111,53114,53117,53120,53123,53126,53130,53133,53219,53223,53226,53231,53236,53243,53246,53249,53252,53255,53258,53263,53268,53271,53274,53277,53280,53283,53286,53289,53292,53295,53297,53300,53304,53309,53314,53319,53322,53327,53332,53335,53338,53341],[10,50532,50528],{"id":50533},"_2基础语法",[146,50535,50537],{"id":50536},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[175,50539,50541],{"id":50540},"_211-js组成","2.1.1 js组成",[158,50543,50544],{},[161,50545,50546],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,50548,50549],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[158,50551,50552],{"start":47},[161,50553,50554],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[175,50556,50558],{"id":50557},"_212-js书写位置","2.1.2 js书写位置",[158,50560,50561],{},[161,50562,50563],{},[354,50564,50565],{},"内部 JavaScript",[14,50567,50568],{},[119,50569],{"alt":32,"src":50570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[158,50572,50573],{"start":47},[161,50574,50575],{},[354,50576,50577],{},"外部 JavaScript",[14,50579,50580],{},[119,50581],{"alt":32,"src":50582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[158,50584,50585],{"start":58},[161,50586,50587],{},[354,50588,50589],{},"内联 JavaScript",[14,50591,50592],{},[119,50593],{"alt":32,"src":50594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[175,50596,50598],{"id":50597},"_213-javascript注释","2.1.3 JavaScript注释",[14,50600,50601],{},[119,50602],{"alt":32,"src":50603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,50605,50606],{},"alt+shift+a一定要记住！",[175,50608,50610],{"id":50609},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,50612,50613],{},[119,50614],{"alt":32,"src":50615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[175,50617,50619],{"id":50618},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[158,50621,50622],{},[161,50623,50624],{},"输出语法：",[14,50626,50627],{},"①document.write('要出的内容')",[14,50629,50630],{},"向body内输出内容；",[14,50632,50633],{},"如果输出的内容写的是标签，也会被解析cheng",[14,50635,50636],{},"②alert('要出的内容')",[14,50638,50639],{},"页面弹出警告对话框",[14,50641,50642],{},"③console.log('控制台打印')",[14,50644,50645],{},"控制台输出语法，程序员调试使用",[14,50647,50648],{},"输入log就行，自动生成：",[14,50650,50651],{},[119,50652],{"alt":32,"src":50653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[158,50655,50656],{"start":47},[161,50657,50658],{},"输入语法：",[14,50660,50661],{},[119,50662],{"alt":32,"src":50663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[175,50665,50667],{"id":50666},"_2116-字面量","21.1.6 字面量",[14,50669,50670],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,50672,50673],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[146,50675,50677],{"id":50676},"_22-变量","2.2 变量",[158,50679,50680],{},[161,50681,50682],{},"变量声明",[14,50684,50685],{},"let 变量名",[1210,50687,50688,50691],{},[161,50689,50690],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[161,50692,50693],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[158,50695,50696],{"start":47},[161,50697,50698],{},"变量赋值",[27,50700,50704],{"className":50701,"code":50702,"language":50703,"meta":32,"style":32},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[34,50705,50706,50711],{"__ignoreMap":32},[37,50707,50708],{"class":39,"line":40},[37,50709,50710],{"class":54},"let age\n",[37,50712,50713],{"class":39,"line":47},[37,50714,50715],{"class":54},"age=18\n",[158,50717,50718,50721],{"start":58},[161,50719,50720],{},"连这些（变量的初始化）：let age=18",[161,50722,50723],{},"更新变量",[14,50725,50726],{},[119,50727],{"alt":32,"src":50728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[158,50730,50731],{"start":76},[161,50732,50733],{},"声明多个变量",[14,50735,50736],{},[119,50737],{"alt":32,"src":50738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[158,50740,50741],{"start":92},[161,50742,50743],{},"变量命名规则与规范",[14,50745,50746],{},[119,50747],{"alt":32,"src":50748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,50750,50751],{},"遵守小驼峰！",[158,50753,50754],{"start":97},[161,50755,50756],{},"变量拓展-let和var的区别",[14,50758,50759],{},[119,50760],{"alt":32,"src":50761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[146,50763,50765],{"id":50764},"_23-数组","2.3 数组",[27,50767,50769],{"className":50701,"code":50768,"language":50703,"meta":32,"style":32},"let arr = []\n",[34,50770,50771],{"__ignoreMap":32},[37,50772,50773],{"class":39,"line":40},[37,50774,50768],{"class":54},[14,50776,50777],{},[119,50778],{"alt":32,"src":50779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,50781,50782],{},[119,50783],{"alt":32,"src":50784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[146,50786,50788],{"id":50787},"_24-常量","2.4 常量",[14,50790,50791],{},[119,50792],{"alt":32,"src":50793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,50795,50796],{},"const — 类似于 let ，但是变量的值无法被修改",[146,50798,50800],{"id":50799},"_25-数据类型","2.5 数据类型",[14,50802,50803],{},[119,50804],{"alt":32,"src":50805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[158,50807,50808,50811],{},[161,50809,50810],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[161,50812,50813],{},"算数运算符：",[14,50815,50816],{},[119,50817],{"alt":32,"src":50818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[158,50820,50821],{"start":58},[161,50822,50823],{},"数字类型（Number）",[14,50825,50826],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,50828,50829],{},[119,50830],{"alt":32,"src":50831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[158,50833,50834],{"start":64},[161,50835,50836],{},"字符串类型（string）",[14,50838,50839],{},[119,50840],{"alt":32,"src":50841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,50843,50844],{},"反引号也是可以使用的",[14,50846,50847],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,50849,50850],{},"例如：document.write(\"我今年\"+age+\"岁\")",[158,50852,50853],{"start":76},[161,50854,50855],{},"模板字符串",[14,50857,50858],{},[119,50859],{"alt":32,"src":50860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,50862,50863],{},"类似于python的字符串格式化",[158,50865,50866],{"start":92},[161,50867,50868],{},"布尔类型",[14,50870,50871],{},"true 和 false",[158,50873,50874],{"start":97},[161,50875,50876],{},"未定义类型（underfined）",[14,50878,50879],{},"表示没有赋值",[14,50881,50882],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,50884,50885],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[158,50887,50888],{"start":107},[161,50889,50890],{},"null（空类型）",[14,50892,50893],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,50895,50896],{},"赋值了，但是内容为空",[27,50898,50900],{"className":50701,"code":50899,"language":50703,"meta":32,"style":32},"typeof null\n输出的是'object'，是一个对象数据类型\n",[34,50901,50902,50907],{"__ignoreMap":32},[37,50903,50904],{"class":39,"line":40},[37,50905,50906],{"class":54},"typeof null\n",[37,50908,50909],{"class":39,"line":47},[37,50910,50911],{"class":54},"输出的是'object'，是一个对象数据类型\n",[158,50913,50914],{"start":1390},[161,50915,50916],{},"控制台检测数据类型",[14,50918,50919],{},[119,50920],{"alt":32,"src":50921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[158,50923,50924],{"start":1402},[161,50925,50926],{},"类型转换",[14,50928,50929],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,50931,50932],{},"转换方式：隐式转换和显示转换",[14,50934,50935],{},"①隐式转换",[1210,50937,50938,50941,50944,50947],{},[161,50939,50940],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[161,50942,50943],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[161,50945,50946],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[161,50948,50949],{},"任何数据和字符串相加结果都是字符串",[14,50951,50952],{},"②显示转换",[14,50954,50955],{},[119,50956],{"alt":32,"src":50957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,50959,50960],{},[119,50961],{"alt":32,"src":50962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,50964,50965],{},"在输入的时候要用好隐式转换，简单写起来",[14,50967,50968],{},"let num = +prompt(’请输入数字：‘)",[14,50970,50971],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,50973,50974],{},"console.log(parseInt('12.333px'))",[14,50976,50977],{},"输出为：12",[14,50979,50980],{},"console.log(parseInt('a'a'a12.333px'))",[14,50982,50983],{},"输出：NaN",[146,50985,50987],{"id":50986},"_26-运算符","2.6 运算符",[175,50989,50991],{"id":50990},"_261-赋值运算符","2.6.1 赋值运算符",[14,50993,50994],{},[119,50995],{"alt":32,"src":50996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[175,50998,51000],{"id":50999},"_262-一元运算符","2.6.2 一元运算符",[14,51002,51003],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,51005,51006],{},[119,51007],{"alt":32,"src":51008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,51010,51011],{},[119,51012],{"alt":32,"src":51013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,51015,51016],{},"两者的区别：",[14,51018,51019],{},[119,51020],{"alt":32,"src":51021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,51023,51024],{},"前置先自加；后置后加，代码执行完之后再加",[175,51026,51028],{"id":51027},"_263-比较运算符","2.6.3 比较运算符",[14,51030,51031],{},[119,51032],{"alt":32,"src":51033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,51035,51036],{},"比较运算符也有隐式转换",[14,51038,51039],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,51041,51042],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,51044,51045],{},"要使用三等，开发的时候",[14,51047,51048],{},"NaN不等于任何人，包括它自己",[14,51050,51051],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,51053,51054],{},"7\u002F10=0.7",[14,51056,51057],{},"最后：0.5+0.2=0.7",[14,51059,51060],{},"字符串比较，比较的是字符对应的ASCII码",[175,51062,51064],{"id":51063},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,51066,51067],{},[119,51068],{"alt":32,"src":51069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,51071,51072],{},[119,51073],{"alt":32,"src":51074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,51076,51077],{},[119,51078],{"alt":32,"src":51079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,51081,51082],{},"上述题目选D",[14,51084,51085],{},"与真2假1；或真1假2",[175,51087,51089],{"id":51088},"_265-运算符优先级","2.6.5 运算符优先级",[14,51091,51092],{},[119,51093],{"alt":32,"src":51094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51096,51097],{},"先算逻辑与，后算逻辑或",[146,51099,51101],{"id":51100},"_27-语句","2.7 语句",[14,51103,51104],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51106,51107],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51109,51110],{},[119,51111],{"alt":32,"src":51112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51114,51115],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51117,51118],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[175,51120,51122],{"id":51121},"_271-分支语句","2.7.1 分支语句",[22070,51124,51126],{"id":51125},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51128,51129],{},"if语句单行简单的话，可以不写{}，写在一行就行",[158,51131,51132],{},[161,51133,51134],{},"单分支语句",[14,51136,51137],{},[119,51138],{"alt":32,"src":51139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51141,51142],{},"除了0，所有数字都为真",[27,51144,51146],{"className":50701,"code":51145,"language":50703,"meta":32,"style":32},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[34,51147,51148,51153,51158,51163,51167],{"__ignoreMap":32},[37,51149,51150],{"class":39,"line":40},[37,51151,51152],{"class":54},"if（0) {\n",[37,51154,51155],{"class":39,"line":47},[37,51156,51157],{"class":54},"    let a=1\n",[37,51159,51160],{"class":39,"line":58},[37,51161,51162],{"class":54},"    alert(typeof a)\n",[37,51164,51165],{"class":39,"line":64},[37,51166,1637],{"class":54},[37,51168,51169],{"class":39,"line":76},[37,51170,51171],{"class":54},"不输出，括号为假\n",[158,51173,51174],{"start":47},[161,51175,51176],{},"双分支语句",[14,51178,51179],{},[119,51180],{"alt":32,"src":51181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[158,51183,51184],{"start":58},[161,51185,51186],{},"多分支语句",[14,51188,51189],{},[119,51190],{"alt":32,"src":51191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22070,51193,51195],{"id":51194},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51197,51198],{},[119,51199],{"alt":32,"src":51200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22070,51202,51204],{"id":51203},"_2713-switch语句","2.7.1.3 switch语句",[14,51206,51207],{},[119,51208],{"alt":32,"src":51209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51211,51212],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[175,51214,51216],{"id":51215},"_272-循环语句","2.7.2 循环语句",[22070,51218,51220],{"id":51219},"_2721-断点演示","2.7.2.1 断点演示",[14,51222,51223],{},[119,51224],{"alt":32,"src":51225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22070,51227,51229],{"id":51228},"_2722-while循环","2.7.2.2 while循环",[14,51231,51232],{},[119,51233],{"alt":32,"src":51234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51236,51237],{},[119,51238],{"alt":32,"src":51239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22070,51241,51243],{"id":51242},"_2723-for循环","2.7.2.3 for循环",[14,51245,51246],{},[119,51247],{"alt":32,"src":51248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51250,51251],{},"for(;;) {",[14,51253,1149],{},[14,51255,51256],{},"表示无限循环",[14,51258,51259],{},[119,51260],{"alt":32,"src":51261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22070,51263,51265],{"id":51264},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51267,51268],{},[119,51269],{"alt":32,"src":51270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[146,51272,51274],{"id":51273},"_28-数组","2.8 数组",[175,51276,51278],{"id":51277},"_281-基础认识","2.8.1 基础认识",[14,51280,51281],{},[119,51282],{"alt":32,"src":51283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51285,51286],{},[119,51287],{"alt":32,"src":51288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51290,51291],{},[119,51292],{"alt":32,"src":51293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51295,51296],{},[119,51297],{"alt":32,"src":51298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[175,51300,51302],{"id":51301},"_282-操作数组","2.8.2 操作数组",[14,51304,51305],{},[119,51306],{"alt":32,"src":51307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[158,51309,51310],{},[161,51311,51312],{},"添加元素",[14,51314,51315],{},[119,51316],{"alt":32,"src":51317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51319,51320],{},"console.log(arr.push('green'))",[14,51322,51323],{},"输出结果：为新数组的长度",[14,51325,51326],{},[119,51327],{"alt":32,"src":51328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51330,51331],{},"push用的非常多，一定要记住",[158,51333,51334],{},[161,51335,51336],{},"删除元素",[14,51338,51339],{},[119,51340],{"alt":32,"src":51341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51343,51344],{},[119,51345],{"alt":32,"src":51346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51348,51349],{},[119,51350],{"alt":32,"src":51351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[175,51353,51355],{"id":51354},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[27,51357,51359],{"className":50701,"code":51358,"language":50703,"meta":32,"style":32},"\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",[34,51360,51361,51376,51392,51396,51405,51423,51447,51469,51483,51491,51498,51510,51521,51525,51529,51536,51548,51563,51576,51595,51612,51627,51639,51651,51663,51667,51671,51682,51692,51704,51716,51728,51739,51743,51747,51759,51763,51777,51781,51785,51796,51810,51822,51836,51840,51849,51858,51862,51871,51875,51884,51889,51894,51907,51935,51940,51945,51970,51975,51979,51984,51989,52004,52008,52013,52043,52055,52071,52087,52101,52106,52113,52117,52122,52135,52143,52151,52155],{"__ignoreMap":32},[37,51362,51363,51366,51370,51373],{"class":39,"line":40},[37,51364,51365],{"class":54},"\u003C!",[37,51367,51369],{"class":51368},"s9eBZ","DOCTYPE",[37,51371,51372],{"class":2035}," html",[37,51374,51375],{"class":54},">\n",[37,51377,51378,51380,51382,51385,51387,51390],{"class":39,"line":47},[37,51379,1113],{"class":54},[37,51381,50703],{"class":51368},[37,51383,51384],{"class":2035}," lang",[37,51386,70],{"class":54},[37,51388,51389],{"class":309},"\"en\"",[37,51391,51375],{"class":54},[37,51393,51394],{"class":39,"line":58},[37,51395,2472],{"emptyLinePlaceholder":131},[37,51397,51398,51400,51403],{"class":39,"line":64},[37,51399,1113],{"class":54},[37,51401,51402],{"class":51368},"head",[37,51404,51375],{"class":54},[37,51406,51407,51410,51413,51416,51418,51421],{"class":39,"line":76},[37,51408,51409],{"class":54},"    \u003C",[37,51411,51412],{"class":51368},"meta",[37,51414,51415],{"class":2035}," charset",[37,51417,70],{"class":54},[37,51419,51420],{"class":309},"\"UTF-8\"",[37,51422,51375],{"class":54},[37,51424,51425,51427,51429,51432,51434,51437,51440,51442,51445],{"class":39,"line":92},[37,51426,51409],{"class":54},[37,51428,51412],{"class":51368},[37,51430,51431],{"class":2035}," http-equiv",[37,51433,70],{"class":54},[37,51435,51436],{"class":309},"\"X-UA-Compatible\"",[37,51438,51439],{"class":2035}," content",[37,51441,70],{"class":54},[37,51443,51444],{"class":309},"\"IE=edge\"",[37,51446,51375],{"class":54},[37,51448,51449,51451,51453,51455,51457,51460,51462,51464,51467],{"class":39,"line":97},[37,51450,51409],{"class":54},[37,51452,51412],{"class":51368},[37,51454,14992],{"class":2035},[37,51456,70],{"class":54},[37,51458,51459],{"class":309},"\"viewport\"",[37,51461,51439],{"class":2035},[37,51463,70],{"class":54},[37,51465,51466],{"class":309},"\"width=device-width, initial-scale=1.0\"",[37,51468,51375],{"class":54},[37,51470,51471,51473,51476,51479,51481],{"class":39,"line":107},[37,51472,51409],{"class":54},[37,51474,51475],{"class":51368},"title",[37,51477,51478],{"class":54},">Document\u003C\u002F",[37,51480,51475],{"class":51368},[37,51482,51375],{"class":54},[37,51484,51485,51487,51489],{"class":39,"line":1390},[37,51486,51409],{"class":54},[37,51488,123],{"class":51368},[37,51490,51375],{"class":54},[37,51492,51493,51496],{"class":39,"line":1402},[37,51494,51495],{"class":51368},"        *",[37,51497,15644],{"class":54},[37,51499,51500,51503,51506,51508],{"class":39,"line":1684},[37,51501,51502],{"class":82},"            margin",[37,51504,51505],{"class":54},": ",[37,51507,396],{"class":82},[37,51509,1364],{"class":54},[37,51511,51512,51515,51517,51519],{"class":39,"line":1689},[37,51513,51514],{"class":82},"            padding",[37,51516,51505],{"class":54},[37,51518,396],{"class":82},[37,51520,1364],{"class":54},[37,51522,51523],{"class":39,"line":1695},[37,51524,2601],{"class":54},[37,51526,51527],{"class":39,"line":1700},[37,51528,2472],{"emptyLinePlaceholder":131},[37,51530,51531,51534],{"class":39,"line":1714},[37,51532,51533],{"class":2035},"        .box",[37,51535,15644],{"class":54},[37,51537,51538,51541,51543,51546],{"class":39,"line":1719},[37,51539,51540],{"class":82},"            display",[37,51542,51505],{"class":54},[37,51544,51545],{"class":82},"flex",[37,51547,1364],{"class":54},[37,51549,51550,51553,51555,51558,51561],{"class":39,"line":1725},[37,51551,51552],{"class":82},"            width",[37,51554,51505],{"class":54},[37,51556,51557],{"class":82},"700",[37,51559,51560],{"class":50},"px",[37,51562,1364],{"class":54},[37,51564,51565,51568,51570,51572,51574],{"class":39,"line":1746},[37,51566,51567],{"class":82},"            height",[37,51569,51505],{"class":54},[37,51571,4045],{"class":82},[37,51573,51560],{"class":50},[37,51575,1364],{"class":54},[37,51577,51578,51581,51583,51585,51587,51590,51593],{"class":39,"line":1751},[37,51579,51580],{"class":82},"            border-left",[37,51582,51505],{"class":54},[37,51584,422],{"class":82},[37,51586,51560],{"class":50},[37,51588,51589],{"class":82}," solid",[37,51591,51592],{"class":82}," pink",[37,51594,1364],{"class":54},[37,51596,51597,51600,51602,51604,51606,51608,51610],{"class":39,"line":1765},[37,51598,51599],{"class":82},"            border-bottom",[37,51601,51505],{"class":54},[37,51603,422],{"class":82},[37,51605,51560],{"class":50},[37,51607,51589],{"class":82},[37,51609,51592],{"class":82},[37,51611,1364],{"class":54},[37,51613,51614,51616,51618,51620,51622,51625],{"class":39,"line":1770},[37,51615,51502],{"class":82},[37,51617,51505],{"class":54},[37,51619,859],{"class":82},[37,51621,51560],{"class":50},[37,51623,51624],{"class":82}," auto",[37,51626,1364],{"class":54},[37,51628,51629,51632,51634,51637],{"class":39,"line":1799},[37,51630,51631],{"class":82},"            justify-content",[37,51633,51505],{"class":54},[37,51635,51636],{"class":82},"space-around",[37,51638,1364],{"class":54},[37,51640,51641,51644,51646,51649],{"class":39,"line":1804},[37,51642,51643],{"class":82},"            align-items",[37,51645,51505],{"class":54},[37,51647,51648],{"class":82},"flex-end",[37,51650,1364],{"class":54},[37,51652,51653,51656,51658,51661],{"class":39,"line":1821},[37,51654,51655],{"class":82},"            text-align",[37,51657,51505],{"class":54},[37,51659,51660],{"class":82},"center",[37,51662,1364],{"class":54},[37,51664,51665],{"class":39,"line":1826},[37,51666,2601],{"class":54},[37,51668,51669],{"class":39,"line":1831},[37,51670,2472],{"emptyLinePlaceholder":131},[37,51672,51673,51675,51677,51680],{"class":39,"line":1836},[37,51674,51533],{"class":2035},[37,51676,1163],{"class":50},[37,51678,51679],{"class":51368},"div",[37,51681,15644],{"class":54},[37,51683,51684,51686,51688,51690],{"class":39,"line":1850},[37,51685,51540],{"class":82},[37,51687,51505],{"class":54},[37,51689,51545],{"class":82},[37,51691,1364],{"class":54},[37,51693,51694,51696,51698,51700,51702],{"class":39,"line":1855},[37,51695,51552],{"class":82},[37,51697,51505],{"class":54},[37,51699,859],{"class":82},[37,51701,51560],{"class":50},[37,51703,1364],{"class":54},[37,51705,51706,51709,51711,51714],{"class":39,"line":2649},[37,51707,51708],{"class":82},"            background-color",[37,51710,51505],{"class":54},[37,51712,51713],{"class":82},"pink",[37,51715,1364],{"class":54},[37,51717,51718,51721,51723,51726],{"class":39,"line":2663},[37,51719,51720],{"class":82},"            flex-direction",[37,51722,51505],{"class":54},[37,51724,51725],{"class":82},"column",[37,51727,1364],{"class":54},[37,51729,51730,51732,51734,51737],{"class":39,"line":2671},[37,51731,51631],{"class":82},[37,51733,51505],{"class":54},[37,51735,51736],{"class":82},"space-between",[37,51738,1364],{"class":54},[37,51740,51741],{"class":39,"line":2676},[37,51742,2601],{"class":54},[37,51744,51745],{"class":39,"line":2682},[37,51746,2472],{"emptyLinePlaceholder":131},[37,51748,51749,51751,51754,51757],{"class":39,"line":2688},[37,51750,51533],{"class":2035},[37,51752,51753],{"class":51368}," div",[37,51755,51756],{"class":51368}," span",[37,51758,15644],{"class":54},[37,51760,51761],{"class":39,"line":2693},[37,51762,2472],{"emptyLinePlaceholder":131},[37,51764,51765,51768,51770,51773,51775],{"class":39,"line":8020},[37,51766,51767],{"class":82},"            margin-top",[37,51769,51505],{"class":54},[37,51771,51772],{"class":82},"-20",[37,51774,51560],{"class":50},[37,51776,1364],{"class":54},[37,51778,51779],{"class":39,"line":8044},[37,51780,2601],{"class":54},[37,51782,51783],{"class":39,"line":8049},[37,51784,2472],{"emptyLinePlaceholder":131},[37,51786,51787,51789,51791,51794],{"class":39,"line":8055},[37,51788,51533],{"class":2035},[37,51790,51753],{"class":51368},[37,51792,51793],{"class":51368}," h4",[37,51795,15644],{"class":54},[37,51797,51798,51801,51803,51806,51808],{"class":39,"line":8082},[37,51799,51800],{"class":82},"            margin-bottom",[37,51802,51505],{"class":54},[37,51804,51805],{"class":82},"-35",[37,51807,51560],{"class":50},[37,51809,1364],{"class":54},[37,51811,51812,51814,51816,51818,51820],{"class":39,"line":8087},[37,51813,51552],{"class":82},[37,51815,51505],{"class":54},[37,51817,561],{"class":82},[37,51819,51560],{"class":50},[37,51821,1364],{"class":54},[37,51823,51824,51827,51829,51832,51834],{"class":39,"line":8093},[37,51825,51826],{"class":82},"            margin-left",[37,51828,51505],{"class":54},[37,51830,51831],{"class":82},"-10",[37,51833,51560],{"class":50},[37,51835,1364],{"class":54},[37,51837,51838],{"class":39,"line":8105},[37,51839,2601],{"class":54},[37,51841,51842,51845,51847],{"class":39,"line":8117},[37,51843,51844],{"class":54},"    \u003C\u002F",[37,51846,123],{"class":51368},[37,51848,51375],{"class":54},[37,51850,51851,51854,51856],{"class":39,"line":8129},[37,51852,51853],{"class":54},"\u003C\u002F",[37,51855,51402],{"class":51368},[37,51857,51375],{"class":54},[37,51859,51860],{"class":39,"line":9788},[37,51861,2472],{"emptyLinePlaceholder":131},[37,51863,51864,51866,51869],{"class":39,"line":9813},[37,51865,1113],{"class":54},[37,51867,51868],{"class":51368},"body",[37,51870,51375],{"class":54},[37,51872,51873],{"class":39,"line":9836},[37,51874,2472],{"emptyLinePlaceholder":131},[37,51876,51877,51879,51882],{"class":39,"line":9860},[37,51878,51409],{"class":54},[37,51880,51881],{"class":51368},"script",[37,51883,51375],{"class":54},[37,51885,51886],{"class":39,"line":9865},[37,51887,51888],{"class":43},"        \u002F\u002F 1. 四次弹框效果\n",[37,51890,51891],{"class":39,"line":9870},[37,51892,51893],{"class":43},"        \u002F\u002F 声明一个新的数组\n",[37,51895,51896,51899,51902,51904],{"class":39,"line":9875},[37,51897,51898],{"class":50},"        let",[37,51900,51901],{"class":54}," arr ",[37,51903,70],{"class":50},[37,51905,51906],{"class":54}," []\n",[37,51908,51909,51911,51913,51916,51918,51920,51922,51924,51926,51929,51931,51933],{"class":39,"line":9884},[37,51910,3475],{"class":50},[37,51912,1730],{"class":54},[37,51914,51915],{"class":50},"let",[37,51917,9510],{"class":54},[37,51919,70],{"class":50},[37,51921,25191],{"class":82},[37,51923,9517],{"class":54},[37,51925,1660],{"class":50},[37,51927,51928],{"class":82}," 4",[37,51930,3286],{"class":54},[37,51932,2364],{"class":50},[37,51934,12514],{"class":54},[37,51936,51937],{"class":39,"line":9889},[37,51938,51939],{"class":43},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[37,51941,51942],{"class":39,"line":9895},[37,51943,51944],{"class":43},"            \u002F\u002F arr.push(num)\n",[37,51946,51947,51950,51953,51955,51958,51960,51963,51965,51968],{"class":39,"line":9916},[37,51948,51949],{"class":54},"            arr.",[37,51951,51952],{"class":2035},"push",[37,51954,208],{"class":54},[37,51956,51957],{"class":2035},"prompt",[37,51959,208],{"class":54},[37,51961,51962],{"class":309},"`请输入第${",[37,51964,645],{"class":54},[37,51966,51967],{"class":309},"}季度的数据:`",[37,51969,30567],{"class":54},[37,51971,51972],{"class":39,"line":9922},[37,51973,51974],{"class":43},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[37,51976,51977],{"class":39,"line":9936},[37,51978,2601],{"class":54},[37,51980,51981],{"class":39,"line":9942},[37,51982,51983],{"class":43},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[37,51985,51986],{"class":39,"line":9969},[37,51987,51988],{"class":43},"        \u002F\u002F 盒子开头\n",[37,51990,51991,51994,51997,51999,52002],{"class":39,"line":9978},[37,51992,51993],{"class":54},"        document.",[37,51995,51996],{"class":2035},"write",[37,51998,208],{"class":54},[37,52000,52001],{"class":309},"` \u003Cdiv class=\"box\">`",[37,52003,214],{"class":54},[37,52005,52006],{"class":39,"line":9984},[37,52007,2472],{"emptyLinePlaceholder":131},[37,52009,52010],{"class":39,"line":9992},[37,52011,52012],{"class":43},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[37,52014,52015,52017,52019,52021,52023,52025,52027,52029,52031,52034,52037,52039,52041],{"class":39,"line":9997},[37,52016,3475],{"class":50},[37,52018,1730],{"class":54},[37,52020,51915],{"class":50},[37,52022,9510],{"class":54},[37,52024,70],{"class":50},[37,52026,4165],{"class":82},[37,52028,9517],{"class":54},[37,52030,1113],{"class":50},[37,52032,52033],{"class":54}," arr.",[37,52035,52036],{"class":82},"length",[37,52038,3286],{"class":54},[37,52040,2364],{"class":50},[37,52042,12514],{"class":54},[37,52044,52045,52048,52050,52052],{"class":39,"line":16676},[37,52046,52047],{"class":54},"            document.",[37,52049,51996],{"class":2035},[37,52051,208],{"class":54},[37,52053,52054],{"class":309},"`\n",[37,52056,52057,52060,52062,52064,52066,52068],{"class":39,"line":16682},[37,52058,52059],{"class":309},"              \u003Cdiv style=\"height: ${",[37,52061,3952],{"class":54},[37,52063,1093],{"class":309},[37,52065,645],{"class":54},[37,52067,1143],{"class":309},[37,52069,52070],{"class":309},"}px;\">\n",[37,52072,52073,52076,52078,52080,52082,52084],{"class":39,"line":16705},[37,52074,52075],{"class":309},"                \u003Cspan>${",[37,52077,3952],{"class":54},[37,52079,1093],{"class":309},[37,52081,645],{"class":54},[37,52083,1143],{"class":309},[37,52085,52086],{"class":309},"}\u003C\u002Fspan>\n",[37,52088,52089,52092,52094,52096,52098],{"class":39,"line":16711},[37,52090,52091],{"class":309},"                \u003Ch4>第${",[37,52093,645],{"class":54},[37,52095,45635],{"class":50},[37,52097,25191],{"class":82},[37,52099,52100],{"class":309},"}季度\u003C\u002Fh4>\n",[37,52102,52103],{"class":39,"line":16734},[37,52104,52105],{"class":309},"              \u003C\u002Fdiv>          \n",[37,52107,52108,52111],{"class":39,"line":16748},[37,52109,52110],{"class":309},"            `",[37,52112,214],{"class":54},[37,52114,52115],{"class":39,"line":16768},[37,52116,2601],{"class":54},[37,52118,52119],{"class":39,"line":16774},[37,52120,52121],{"class":43},"        \u002F\u002F 盒子结尾\n",[37,52123,52124,52126,52128,52130,52133],{"class":39,"line":16785},[37,52125,51993],{"class":54},[37,52127,51996],{"class":2035},[37,52129,208],{"class":54},[37,52131,52132],{"class":309},"` \u003C\u002Fdiv>`",[37,52134,214],{"class":54},[37,52136,52137,52139,52141],{"class":39,"line":16808},[37,52138,51844],{"class":54},[37,52140,51881],{"class":51368},[37,52142,51375],{"class":54},[37,52144,52145,52147,52149],{"class":39,"line":16830},[37,52146,51853],{"class":54},[37,52148,51868],{"class":51368},[37,52150,51375],{"class":54},[37,52152,52153],{"class":39,"line":16835},[37,52154,2472],{"emptyLinePlaceholder":131},[37,52156,52157,52159,52161],{"class":39,"line":16841},[37,52158,51853],{"class":54},[37,52160,50703],{"class":51368},[37,52162,51375],{"class":54},[175,52164,52166],{"id":52165},"_284-冒泡排序","2.8.4 冒泡排序",[27,52168,52170],{"className":50701,"code":52169,"language":50703,"meta":32,"style":32},"\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",[34,52171,52172,52182,52196,52200,52208,52223,52243,52255,52263,52267,52275,52283,52315,52348,52385,52390,52409,52414,52427,52442,52458,52462,52467,52471,52481,52490,52498,52502],{"__ignoreMap":32},[37,52173,52174,52176,52178,52180],{"class":39,"line":40},[37,52175,51365],{"class":54},[37,52177,51369],{"class":51368},[37,52179,51372],{"class":2035},[37,52181,51375],{"class":54},[37,52183,52184,52186,52188,52190,52192,52194],{"class":39,"line":47},[37,52185,1113],{"class":54},[37,52187,50703],{"class":51368},[37,52189,51384],{"class":2035},[37,52191,70],{"class":54},[37,52193,51389],{"class":309},[37,52195,51375],{"class":54},[37,52197,52198],{"class":39,"line":58},[37,52199,2472],{"emptyLinePlaceholder":131},[37,52201,52202,52204,52206],{"class":39,"line":64},[37,52203,1113],{"class":54},[37,52205,51402],{"class":51368},[37,52207,51375],{"class":54},[37,52209,52210,52213,52215,52217,52219,52221],{"class":39,"line":76},[37,52211,52212],{"class":54},"  \u003C",[37,52214,51412],{"class":51368},[37,52216,51415],{"class":2035},[37,52218,70],{"class":54},[37,52220,51420],{"class":309},[37,52222,51375],{"class":54},[37,52224,52225,52227,52229,52231,52233,52235,52237,52239,52241],{"class":39,"line":92},[37,52226,52212],{"class":54},[37,52228,51412],{"class":51368},[37,52230,14992],{"class":2035},[37,52232,70],{"class":54},[37,52234,51459],{"class":309},[37,52236,51439],{"class":2035},[37,52238,70],{"class":54},[37,52240,51466],{"class":309},[37,52242,51375],{"class":54},[37,52244,52245,52247,52249,52251,52253],{"class":39,"line":97},[37,52246,52212],{"class":54},[37,52248,51475],{"class":51368},[37,52250,51478],{"class":54},[37,52252,51475],{"class":51368},[37,52254,51375],{"class":54},[37,52256,52257,52259,52261],{"class":39,"line":107},[37,52258,51853],{"class":54},[37,52260,51402],{"class":51368},[37,52262,51375],{"class":54},[37,52264,52265],{"class":39,"line":1390},[37,52266,2472],{"emptyLinePlaceholder":131},[37,52268,52269,52271,52273],{"class":39,"line":1402},[37,52270,1113],{"class":54},[37,52272,51868],{"class":51368},[37,52274,51375],{"class":54},[37,52276,52277,52279,52281],{"class":39,"line":1684},[37,52278,52212],{"class":54},[37,52280,51881],{"class":51368},[37,52282,51375],{"class":54},[37,52284,52285,52288,52290,52292,52295,52297,52299,52301,52303,52305,52307,52309,52311,52313],{"class":39,"line":1689},[37,52286,52287],{"class":50},"    let",[37,52289,51901],{"class":54},[37,52291,70],{"class":50},[37,52293,52294],{"class":54}," [",[37,52296,524],{"class":82},[37,52298,12507],{"class":54},[37,52300,498],{"class":82},[37,52302,12507],{"class":54},[37,52304,276],{"class":82},[37,52306,12507],{"class":54},[37,52308,282],{"class":82},[37,52310,12507],{"class":54},[37,52312,422],{"class":82},[37,52314,33315],{"class":54},[37,52316,52317,52319,52321,52323,52325,52327,52329,52331,52333,52335,52337,52340,52342,52344,52346],{"class":39,"line":1695},[37,52318,3273],{"class":50},[37,52320,1730],{"class":54},[37,52322,51915],{"class":50},[37,52324,9510],{"class":54},[37,52326,70],{"class":50},[37,52328,4165],{"class":82},[37,52330,9517],{"class":54},[37,52332,1113],{"class":50},[37,52334,52033],{"class":54},[37,52336,52036],{"class":82},[37,52338,52339],{"class":50}," -",[37,52341,25191],{"class":82},[37,52343,3286],{"class":54},[37,52345,2364],{"class":50},[37,52347,12514],{"class":54},[37,52349,52350,52353,52355,52357,52359,52361,52363,52365,52367,52369,52371,52373,52375,52377,52379,52381,52383],{"class":39,"line":1700},[37,52351,52352],{"class":50},"      for",[37,52354,1730],{"class":54},[37,52356,51915],{"class":50},[37,52358,9572],{"class":54},[37,52360,70],{"class":50},[37,52362,4165],{"class":82},[37,52364,9579],{"class":54},[37,52366,1113],{"class":50},[37,52368,52033],{"class":54},[37,52370,52036],{"class":82},[37,52372,52339],{"class":50},[37,52374,9510],{"class":54},[37,52376,112],{"class":50},[37,52378,25191],{"class":82},[37,52380,9586],{"class":54},[37,52382,2364],{"class":50},[37,52384,12514],{"class":54},[37,52386,52387],{"class":39,"line":1714},[37,52388,52389],{"class":43},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[37,52391,52392,52394,52397,52399,52402,52404,52406],{"class":39,"line":1719},[37,52393,2569],{"class":50},[37,52395,52396],{"class":54}," (arr[j] ",[37,52398,1163],{"class":50},[37,52400,52401],{"class":54}," arr[j ",[37,52403,685],{"class":50},[37,52405,25191],{"class":82},[37,52407,52408],{"class":54},"]) {\n",[37,52410,52411],{"class":39,"line":1725},[37,52412,52413],{"class":43},"          \u002F\u002F 交换两个变量\n",[37,52415,52416,52419,52422,52424],{"class":39,"line":1746},[37,52417,52418],{"class":50},"          let",[37,52420,52421],{"class":54}," tmp ",[37,52423,70],{"class":50},[37,52425,52426],{"class":54}," arr[j]\n",[37,52428,52429,52432,52434,52436,52438,52440],{"class":39,"line":1751},[37,52430,52431],{"class":54},"          arr[j] ",[37,52433,70],{"class":50},[37,52435,52401],{"class":54},[37,52437,685],{"class":50},[37,52439,25191],{"class":82},[37,52441,33315],{"class":54},[37,52443,52444,52447,52449,52451,52453,52455],{"class":39,"line":1765},[37,52445,52446],{"class":54},"          arr[j ",[37,52448,685],{"class":50},[37,52450,25191],{"class":82},[37,52452,4515],{"class":54},[37,52454,70],{"class":50},[37,52456,52457],{"class":54}," tmp\n",[37,52459,52460],{"class":39,"line":1770},[37,52461,2601],{"class":54},[37,52463,52464],{"class":39,"line":1799},[37,52465,52466],{"class":54},"      }\n",[37,52468,52469],{"class":39,"line":1804},[37,52470,2259],{"class":54},[37,52472,52473,52476,52478],{"class":39,"line":1821},[37,52474,52475],{"class":54},"    document.",[37,52477,51996],{"class":2035},[37,52479,52480],{"class":54},"(arr)\n",[37,52482,52483,52486,52488],{"class":39,"line":1826},[37,52484,52485],{"class":54},"  \u003C\u002F",[37,52487,51881],{"class":51368},[37,52489,51375],{"class":54},[37,52491,52492,52494,52496],{"class":39,"line":1831},[37,52493,51853],{"class":54},[37,52495,51868],{"class":51368},[37,52497,51375],{"class":54},[37,52499,52500],{"class":39,"line":1836},[37,52501,2472],{"emptyLinePlaceholder":131},[37,52503,52504,52506,52508],{"class":39,"line":1850},[37,52505,51853],{"class":54},[37,52507,50703],{"class":51368},[37,52509,51375],{"class":54},[14,52511,52512],{},[119,52513],{"alt":32,"src":52514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,52516,52517],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,52519,52520],{},"let arr = [4, 2, 5, 1, 3]",[14,52522,52523],{},"\u002F\u002F 1.升序排列写法",[14,52525,52526],{},"arr.sort(function (a, b) {",[14,52528,52529],{},"return a - b",[14,52531,52532],{},"})",[14,52534,52535],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,52537,52538],{},"\u002F\u002F 降序排列写法",[14,52540,52526],{},[14,52542,52543],{},"return b - a",[14,52545,52532],{},[14,52547,52548],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[146,52550,52552],{"id":52551},"_29-函数","2.9 函数",[14,52554,52555],{},[119,52556],{"alt":32,"src":52557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,52559,52560],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,52562,52563],{},"函数的声明用function",[14,52565,52566],{},"函数里边可以嵌套函数",[175,52568,52570],{"id":52569},"_291-函数传参","2.9.1 函数传参",[14,52572,52573],{},[119,52574],{"alt":32,"src":52575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,52577,52578],{},[119,52579],{"alt":32,"src":52580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1210,52582,52583,52586,52589,52592,52595,52598],{},[161,52584,52585],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[161,52587,52588],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[161,52590,52591],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[161,52593,52594],{},"开发中尽量保持形参和实参个数一致",[161,52596,52597],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[161,52599,52600],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,52602,52603],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[175,52605,52607],{"id":52606},"_292-函数的返回值","2.9.2 函数的返回值",[14,52609,52610],{},[119,52611],{"alt":32,"src":52612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,52614,52615],{},[119,52616],{"alt":32,"src":52617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1210,52619,52620,52623,52626,52629,52632],{},[161,52621,52622],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[161,52624,52625],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[161,52627,52628],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[161,52630,52631],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[161,52633,52634],{},"断点调试:进入函数内部看执行过程F11",[175,52636,52638],{"id":52637},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[27,52640,52642],{"className":50701,"code":52641,"language":50703,"meta":32,"style":32},"    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",[34,52643,52644,52649,52654,52658,52663],{"__ignoreMap":32},[37,52645,52646],{"class":39,"line":40},[37,52647,52648],{"class":54},"    function fn(a, b) {\n",[37,52650,52651],{"class":39,"line":47},[37,52652,52653],{"class":54},"      console.log(a + b);\n",[37,52655,52656],{"class":39,"line":58},[37,52657,2259],{"class":54},[37,52659,52660],{"class":39,"line":64},[37,52661,52662],{"class":54},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[37,52664,52665],{"class":39,"line":76},[37,52666,52667],{"class":54},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[175,52669,52671],{"id":52670},"_294-作用域","2.9.4 作用域",[1210,52673,52674,52680,52685,52688,52691],{},[161,52675,52676,52677],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[354,52678,52679],{},"作用域",[161,52681,52682],{},[354,52683,52684],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[161,52686,52687],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[161,52689,52690],{},"函数内部可以直接所使用全局变量",[161,52692,52693],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,52695,14705],{},[27,52697,52699],{"className":50701,"code":52698,"language":50703,"meta":32,"style":32},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[34,52700,52701,52706,52711,52715,52720,52725,52730],{"__ignoreMap":32},[37,52702,52703],{"class":39,"line":40},[37,52704,52705],{"class":54},"    function fun() {\n",[37,52707,52708],{"class":39,"line":47},[37,52709,52710],{"class":54},"      num = 10\n",[37,52712,52713],{"class":39,"line":58},[37,52714,2259],{"class":54},[37,52716,52717],{"class":39,"line":64},[37,52718,52719],{"class":54},"    fun()\n",[37,52721,52722],{"class":39,"line":76},[37,52723,52724],{"class":54},"    console.log(num)\n",[37,52726,52727],{"class":39,"line":92},[37,52728,52729],{"class":54},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[37,52731,52732],{"class":39,"line":97},[37,52733,52734],{"class":54},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1210,52736,52737,52740],{},[161,52738,52739],{},"函数内部的形参可以看做是局部变量",[161,52741,52742],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,52744,52745,52746],{},"变量访问原则： ",[354,52747,52748],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[175,52750,52752],{"id":52751},"_295-匿名函数","2.9.5 匿名函数",[14,52754,52755],{},"函数可以分为具名函数和匿名函数",[14,52757,52758],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[158,52760,52761],{},[161,52762,52763],{},"函数表达式",[14,52765,52766],{},[119,52767],{"alt":32,"src":52768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,52770,52771],{},"里边也可以写参数",[14,52773,52774],{},"具名函数调用位置可以随意调整；",[14,52776,52777],{},"匿名函数函数表达式形式只能在声明后才可以使用",[158,52779,52780],{"start":47},[161,52781,52782],{},"立即执行函数",[14,52784,52785],{},[119,52786],{"alt":32,"src":52787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,52789,52790],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,52792,52793],{},"写法：两个小括号，然后在第一个小括号中写function",[14,52795,52796],{},"(function () {})();",[14,52798,52799],{},"不要落下最后的;",[14,52801,52802],{},"立即执行函数必须要加;",[14,52804,52805],{},"分号写前写后都没问题",[14,52807,52808],{},"写前：",[14,52810,52811],{},"(function() {})()",[14,52813,52814],{},";(function () {})();",[14,52816,52817],{},"写后:",[14,52819,52820],{},"(function() {})();",[14,52822,52796],{},[14,52824,52825],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,52827,52828],{},"还有一种写法：",[14,52830,52831],{},"(function(){}());",[14,52833,52834],{},"或者:",[14,52836,52837],{},"!function(){}();",[14,52839,52840],{},"立即执行函数有时候也是可以加名字的：",[14,52842,52843],{},"(function flexible(window,document) {}(window,document));",[14,52845,52846],{},"省一些调用方法",[175,52848,52850],{"id":52849},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,52852,52853],{},[119,52854],{"alt":32,"src":52855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,52857,52858],{},"这样就不用非得给x,y初始化了",[14,52860,52861],{},[119,52862],{"alt":32,"src":52863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,52865,52866],{},"代码执行时先看左边",[14,52868,52869],{},"例如：console.log(false && 3+5)",[14,52871,52872],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,52874,52875],{},"&&都是真时，就返回最后一个真值",[14,52877,52878],{},"console.log(11 && 22)",[14,52880,52881],{},"输出22",[14,52883,52884],{},"逻辑与：遇真则真",[14,52886,14705],{},[14,52888,52889],{},"let age=1",[14,52891,52892],{},"console.log(11 || age++)",[14,52894,52895],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,52897,52898],{},"console.log(11 || 22)",[14,52900,52901],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,52903,52904],{},"||如果都是假的话，就取最后一个假的值了",[175,52906,52908],{"id":52907},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,52910,52911],{},"显示转换：",[14,52913,52914,52917,52918],{},[354,52915,52916],{},"记忆","： ",[354,52919,52920],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,52922,52923],{},"空字符串为假，其他字符串全为真",[14,52925,52926],{},[119,52927],{"alt":32,"src":52928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,52930,52931],{},"隐式转换：",[14,52933,52934],{},[119,52935],{"alt":32,"src":52936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,52938,52939],{},"隐式转换:",[14,52941,52942],{},"null+3=3",[14,52944,52945],{},"undefined+3=NaN",[14,52947,52948],{},"null==undefined 输出true,他两个都当0看",[14,52950,52951],{},"null===undefined 输出false",[14,52953,52954],{},"undefined做任何操作都是NaN",[14,52956,52957],{},"NaN不等于NaN，NaN表示计算错误",[146,52959,52961],{"id":52960},"_210-对象","2.10 对象",[175,52963,52965],{"id":52964},"_2101-对象的介绍","2.10.1 对象的介绍",[14,52967,52968],{},"对象也是一种数据类型，里边的数据是无序的",[14,52970,52971],{},"对象由属性和方法组成",[14,52973,52974],{},[119,52975],{"alt":32,"src":52976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,52978,52979],{},[119,52980],{"alt":32,"src":52981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,52983,52984],{},[119,52985],{"alt":32,"src":52986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[175,52988,52990],{"id":52989},"_2102-对象属性","2.10.2 对象属性",[14,52992,52993],{},[119,52994],{"alt":32,"src":52995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[158,52997,52998],{},[161,52999,53000],{},"查询对象",[14,53002,53003],{},"对象名.属性 goods.uname",[14,53005,53006],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,53008,53009],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,53011,53012],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,53014,53015],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[158,53017,53018],{"start":47},[161,53019,53020],{},"重新赋值",[14,53022,53023],{},"对象名.属性=新值",[158,53025,53026],{"start":58},[161,53027,53028],{},"增加新数据",[14,53030,53023],{},[158,53032,53033],{"start":64},[161,53034,53035],{},"删除对象中的属性",[14,53037,53038],{},"delete 对象名.属性",[175,53040,53042],{"id":53041},"_2103-对象方法","2.10.3 对象方法",[14,53044,53045],{},[119,53046],{"alt":32,"src":53047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,53049,53050],{},"后边跟的是匿名函数",[14,53052,53053],{},"对象外面的叫函数；对象内部的叫方法",[14,53055,53056],{},[119,53057],{"alt":32,"src":53058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[175,53060,53062],{"id":53061},"_2104-遍历对象","2.10.4 遍历对象",[14,53064,53065],{},"理解为加括号的python字典遍历",[14,53067,53068],{},[119,53069],{"alt":32,"src":53070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,53072,53073],{},"k是字符串类型",[14,53075,53076],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[27,53078,53080],{"className":50701,"code":53079,"language":50703,"meta":32,"style":32},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[34,53081,53082,53087,53092,53097,53102],{"__ignoreMap":32},[37,53083,53084],{"class":39,"line":40},[37,53085,53086],{"class":54},"   let arr = [1, 2, 3]\n",[37,53088,53089],{"class":39,"line":47},[37,53090,53091],{"class":54},"    for (let k in arr) {\n",[37,53093,53094],{"class":39,"line":58},[37,53095,53096],{"class":54},"      console.log(k)\n",[37,53098,53099],{"class":39,"line":64},[37,53100,53101],{"class":54},"      console.log(arr[k])\n",[37,53103,53104],{"class":39,"line":76},[37,53105,2259],{"class":54},[14,53107,53108],{},[119,53109],{"alt":32,"src":53110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53112,53113],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53115,53116],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53118,53119],{},"for in 得到的k是属性名",[51881,53121,53122],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[14,53124,53125],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[175,53127,53129],{"id":53128},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53131,53132],{},"数组中放对象信息",[27,53134,53138],{"className":53135,"code":53136,"language":53137,"meta":32,"style":32},"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",[34,53139,53140,53148,53153,53158,53163,53168,53173,53178,53183,53188,53193,53198,53203,53207,53211],{"__ignoreMap":32},[37,53141,53142,53144,53146],{"class":39,"line":40},[37,53143,1113],{"class":54},[37,53145,51881],{"class":51368},[37,53147,51375],{"class":54},[37,53149,53150],{"class":39,"line":47},[37,53151,53152],{"class":54},"    let students = [\n",[37,53154,53155],{"class":39,"line":58},[37,53156,53157],{"class":54},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[37,53159,53160],{"class":39,"line":64},[37,53161,53162],{"class":54},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[37,53164,53165],{"class":39,"line":76},[37,53166,53167],{"class":54},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[37,53169,53170],{"class":39,"line":92},[37,53171,53172],{"class":54},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[37,53174,53175],{"class":39,"line":97},[37,53176,53177],{"class":54},"    ]\n",[37,53179,53180],{"class":39,"line":107},[37,53181,53182],{"class":54},"    for (let i = 0; i \u003C students.length; i++) {\n",[37,53184,53185],{"class":39,"line":1390},[37,53186,53187],{"class":54},"      for (let k in students[i]) {\n",[37,53189,53190],{"class":39,"line":1402},[37,53191,53192],{"class":54},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[37,53194,53195],{"class":39,"line":1684},[37,53196,53197],{"class":54},"        \u002F\u002F输出每个人的名字：\n",[37,53199,53200],{"class":39,"line":1689},[37,53201,53202],{"class":54},"        \u002F\u002Fconsole.log(students[i].name)\n",[37,53204,53205],{"class":39,"line":1695},[37,53206,52466],{"class":54},[37,53208,53209],{"class":39,"line":1700},[37,53210,2259],{"class":54},[37,53212,53213,53215,53217],{"class":39,"line":1714},[37,53214,52485],{"class":54},[37,53216,51881],{"class":51368},[37,53218,51375],{"class":54},[175,53220,53222],{"id":53221},"_2106-内置对象","2.10.6 内置对象",[14,53224,53225],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[158,53227,53228],{},[161,53229,53230],{},"数学对象Math",[14,53232,53233],{},[119,53234],{"alt":32,"src":53235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53237,53238],{},[443,53239,53242],{"href":53240,"rel":53241},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23937],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53244,53245],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53247,53248],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53250,53251],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53253,53254],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53256,53257],{},"null属于对象数据类型",[158,53259,53260],{"start":47},[161,53261,53262],{},"生成任意范围随机数",[14,53264,53265],{},[119,53266],{"alt":32,"src":53267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53269,53270],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53272,53273],{},"乘以几就取不到几",[14,53275,53276],{},"取数组中的随机元素：",[14,53278,53279],{},"let arr = ['red', 'green', 'blue']",[14,53281,53282],{},"let random = Math.floor(Math.random() * arr.length)",[14,53284,53285],{},"console.log(arr[random])",[14,53287,53288],{},"这个函数得到的是全闭区间",[14,53290,53291],{},"function getRandom(N, M) {",[14,53293,53294],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53296,1149],{},[14,53298,53299],{},"console.log(getRandom(4, 8))",[175,53301,53303],{"id":53302},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53305,53306],{},[119,53307],{"alt":32,"src":53308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53310,53311],{},[119,53312],{"alt":32,"src":53313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53315,53316],{},[119,53317],{"alt":32,"src":53318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53320,53321],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53323,53324],{},[119,53325],{"alt":32,"src":53326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53328,53329],{},[119,53330],{"alt":32,"src":53331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53333,53334],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53336,53337],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53339,53340],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[123,53342,53343],{},"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":32,"searchDepth":47,"depth":47,"links":53345},[53346,53354,53355,53356,53357,53358,53365,53369,53375,53384],{"id":50536,"depth":47,"text":50537,"children":53347},[53348,53349,53350,53351,53352,53353],{"id":50540,"depth":58,"text":50541},{"id":50557,"depth":58,"text":50558},{"id":50597,"depth":58,"text":50598},{"id":50609,"depth":58,"text":50610},{"id":50618,"depth":58,"text":50619},{"id":50666,"depth":58,"text":50667},{"id":50676,"depth":47,"text":50677},{"id":50764,"depth":47,"text":50765},{"id":50787,"depth":47,"text":50788},{"id":50799,"depth":47,"text":50800},{"id":50986,"depth":47,"text":50987,"children":53359},[53360,53361,53362,53363,53364],{"id":50990,"depth":58,"text":50991},{"id":50999,"depth":58,"text":51000},{"id":51027,"depth":58,"text":51028},{"id":51063,"depth":58,"text":51064},{"id":51088,"depth":58,"text":51089},{"id":51100,"depth":47,"text":51101,"children":53366},[53367,53368],{"id":51121,"depth":58,"text":51122},{"id":51215,"depth":58,"text":51216},{"id":51273,"depth":47,"text":51274,"children":53370},[53371,53372,53373,53374],{"id":51277,"depth":58,"text":51278},{"id":51301,"depth":58,"text":51302},{"id":51354,"depth":58,"text":51355},{"id":52165,"depth":58,"text":52166},{"id":52551,"depth":47,"text":52552,"children":53376},[53377,53378,53379,53380,53381,53382,53383],{"id":52569,"depth":58,"text":52570},{"id":52606,"depth":58,"text":52607},{"id":52637,"depth":58,"text":52638},{"id":52670,"depth":58,"text":52671},{"id":52751,"depth":58,"text":52752},{"id":52849,"depth":58,"text":52850},{"id":52907,"depth":58,"text":52908},{"id":52960,"depth":47,"text":52961,"children":53385},[53386,53387,53388,53389,53390,53391,53392],{"id":52964,"depth":58,"text":52965},{"id":52989,"depth":58,"text":52990},{"id":53041,"depth":58,"text":53042},{"id":53061,"depth":58,"text":53062},{"id":53128,"depth":58,"text":53129},{"id":53221,"depth":58,"text":53222},{"id":53302,"depth":58,"text":53303},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50528,"description":128},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53399,"title":53400,"body":53401,"description":128,"extension":129,"meta":76741,"navigation":131,"path":76742,"seo":76743,"stem":76744,"__hash__":76745},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53402,"toc":76681},[53403,53406,53409,53412,53417,53420,53423,53426,53430,53434,53440,53445,53453,53460,53463,53467,53472,53477,53482,53485,53488,53499,53502,53506,53509,53512,53517,53522,53527,53530,53533,53625,53628,53633,53636,53641,53644,53647,53652,53655,53660,53664,53667,53681,53685,53690,53693,53696,53700,53705,53708,53712,53716,53721,53725,53730,53733,53736,53739,53742,53745,53748,53753,53758,53786,53789,53792,53795,53800,53803,53806,53809,53812,53816,53845,53849,53854,53859,53862,53865,53868,53873,53988,53993,53998,54159,54164,54167,54171,54176,54181,54184,54187,54190,54193,54196,54199,54202,54205,54208,54211,54214,54217,54220,54223,54225,54228,54231,54234,54239,54243,54640,54643,54649,54653,54658,55940,55945,55948,55951,55954,55959,57155,57159,57165,57170,57173,57178,57183,57187,57191,57196,57199,57204,57207,57210,57214,58122,58125,58129,58350,58353,58356,58359,58585,58588,58812,58815,58819,58824,58827,58830,59058,59061,59094,59097,59101,59106,59110,59113,59116,59119,59122,59125,59128,59131,59136,60416,60420,60423,61516,61520,61523,61526,61529,61532,61536,61539,61542,61544,61552,63033,63037,63040,63043,63046,63255,63258,63262,63266,63271,63276,63279,63282,63287,63291,63296,63299,63408,63412,63417,63422,63425,63428,63432,63437,63442,63447,63450,63453,63464,63467,63472,63477,63480,63483,63556,63560,63565,63568,63570,63581,63585,63590,64916,64919,64922,64925,64927,64930,64933,64936,64939,64942,64945,64948,64951,64954,64957,64960,64963,64965,64967,64970,64974,66068,66071,66074,66090,66104,66107,66112,66118,66123,66127,66131,66136,66140,66145,66587,66592,66595,66599,66604,66607,66610,66614,66619,66623,66628,66633,66637,66642,66647,66650,66655,66660,66664,66669,66674,66778,66781,66785,66790,67156,67159,67162,67165,67168,67171,67174,67177,67180,68476,68480,68485,68490,68493,68496,68499,68502,68504,68509,68514,68517,68521,68526,68531,68536,68539,68542,68545,68548,68551,68556,68559,68563,68568,68573,68577,68582,68585,68590,68593,68596,68599,68602,68605,68610,68613,68616,68619,68622,68626,68631,68634,68638,68643,68646,68649,68653,68682,68685,68689,68693,68698,68702,68707,68710,68713,68716,68719,68722,68725,68728,68731,68734,68737,68740,68743,68746,68749,68753,68758,68763,68766,68770,68774,68779,68782,68786,68789,68792,68797,68802,68807,68812,68817,68820,68823,68828,68833,68837,68842,68845,68850,68853,68856,68859,68862,68867,68870,68879,68883,68888,68891,68894,68898,68901,68906,68910,68913,68919,68925,68929,68955,68958,70519,70522,71018,71021,71026,71031,71036,71040,71045,71050,71055,71059,71064,71067,71070,71073,71076,71080,71083,71088,71091,71096,71100,71105,71108,71113,71118,71123,71126,71129,71134,71139,71142,71145,71149,71152,71157,71160,71165,71168,71173,71178,71183,71186,71191,71256,71259,71270,71274,71279,71451,71455,71460,71463,71466,71469,71473,71484,71488,71491,71496,71501,71504,71507,71510,71513,71516,71518,71521,71524,71527,71532,71535,71540,71543,71547,71550,71553,71567,71571,71574,71629,71634,71637,71640,71645,71648,71652,71657,71787,71791,71796,71801,71882,71887,71891,71894,71899,71904,71910,71913,71916,71919,71923,71928,71931,71942,71946,71963,75010,75014,75017,75020,75023,75044,75048,75051,75059,75062,75067,75070,75073,75078,75083,75087,75108,75112,75117,75120,75123,75126,75129,75133,75138,75141,75145,75150,75153,75158,75161,75166,75169,75174,76377,76381,76386,76389,76394,76678],[10,53404,53400],{"id":53405},"_3web-apis",[14,53407,53408],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,53410,53411],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,53413,53414],{},[119,53415],{"alt":32,"src":53416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,53418,53419],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,53421,53422],{},"建议数组和对象使用 const 来声明",[14,53424,53425],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[146,53427,53429],{"id":53428},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[175,53431,53433],{"id":53432},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,53435,53436,53439],{},[34,53437,53438],{},"document"," = HTML 文件解析后的对象化表示；",[14,53441,53442,53444],{},[34,53443,53438],{}," ≠ HTML 文件本身",[14,53446,53447,53452],{},[354,53448,53449],{},[34,53450,53451],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,53454,53455,53459],{},[354,53456,53457],{},[34,53458,53438],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,53461,53462],{},"document实际上为window.document的简写",[175,53464,53466],{"id":53465},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,53468,53469],{},[119,53470],{"alt":32,"src":53471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,53473,53474],{},[119,53475],{"alt":32,"src":53476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,53478,53479],{},[119,53480],{"alt":32,"src":53481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,53483,53484],{},"console.dir()",[14,53486,53487],{},"dir用来打印对象",[1210,53489,53490,53493,53496],{},[161,53491,53492],{},"任何一个标签，都是一个对象",[161,53494,53495],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[161,53497,53498],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,53500,53501],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[175,53503,53505],{"id":53504},"_312-获取dom对象","3.1.2 获取DoM对象",[14,53507,53508],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,53510,53511],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,53513,53514],{},[354,53515,53516],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[158,53518,53519],{},[161,53520,53521],{},"利用CSS选择器来获取标签元素",[14,53523,53524],{},[119,53525],{"alt":32,"src":53526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,53528,53529],{},"里边的选择器必须必须加引号！！！",[14,53531,53532],{},"只选择第一个元素",[27,53534,53536],{"className":53135,"code":53535,"language":53137,"meta":32,"style":32},"\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",[34,53537,53538,53546,53567,53586,53594,53599,53604,53609,53617],{"__ignoreMap":32},[37,53539,53540,53542,53544],{"class":39,"line":40},[37,53541,1113],{"class":54},[37,53543,51868],{"class":51368},[37,53545,51375],{"class":54},[37,53547,53548,53550,53552,53555,53557,53560,53563,53565],{"class":39,"line":47},[37,53549,52212],{"class":54},[37,53551,51679],{"class":51368},[37,53553,53554],{"class":2035}," class",[37,53556,70],{"class":54},[37,53558,53559],{"class":309},"\"box\"",[37,53561,53562],{"class":54},">123\u003C\u002F",[37,53564,51679],{"class":51368},[37,53566,51375],{"class":54},[37,53568,53569,53571,53573,53575,53577,53579,53582,53584],{"class":39,"line":58},[37,53570,52212],{"class":54},[37,53572,51679],{"class":51368},[37,53574,53554],{"class":2035},[37,53576,70],{"class":54},[37,53578,53559],{"class":309},[37,53580,53581],{"class":54},">456\u003C\u002F",[37,53583,51679],{"class":51368},[37,53585,51375],{"class":54},[37,53587,53588,53590,53592],{"class":39,"line":64},[37,53589,52212],{"class":54},[37,53591,51881],{"class":51368},[37,53593,51375],{"class":54},[37,53595,53596],{"class":39,"line":76},[37,53597,53598],{"class":54},"    \u002F\u002F 1.获取匹配的第一个元素\n",[37,53600,53601],{"class":39,"line":92},[37,53602,53603],{"class":54},"    const box = document.querySelector('div')\n",[37,53605,53606],{"class":39,"line":97},[37,53607,53608],{"class":54},"    console.dir(box)\n",[37,53610,53611,53613,53615],{"class":39,"line":107},[37,53612,52485],{"class":54},[37,53614,51881],{"class":51368},[37,53616,51375],{"class":54},[37,53618,53619,53621,53623],{"class":39,"line":1390},[37,53620,51853],{"class":54},[37,53622,51868],{"class":51368},[37,53624,51375],{"class":54},[14,53626,53627],{},"只选123，不选456",[14,53629,53630],{},[119,53631],{"alt":32,"src":53632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,53634,53635],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,53637,53638],{},[119,53639],{"alt":32,"src":53640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,53642,53643],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,53645,53646],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[158,53648,53649],{"start":47},[161,53650,53651],{},"其他方法来获取标签元素",[14,53653,53654],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,53656,53657],{},[119,53658],{"alt":32,"src":53659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[175,53661,53663],{"id":53662},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,53665,53666],{},"设置修改DOM元素内容有两种方式：",[1210,53668,53669,53672,53675,53678],{},[161,53670,53671],{},"元素.innerText=''",[161,53673,53674],{},"元素.innerHTML=''",[161,53676,53677],{},"不写字符串输出数字也是可以的",[161,53679,53680],{},"元素.innerHtml=1",[22070,53682,53684],{"id":53683},"_3131-innertext","3.1.3.1 innerText",[14,53686,53687],{},[119,53688],{"alt":32,"src":53689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,53691,53692],{},"思路：实现了修改盒子中的内容！",[14,53694,53695],{},"它只显示纯文本，不解析标签",[22070,53697,53699],{"id":53698},"_3132-innerhtml","3.1.3.2 innerHTML",[14,53701,53702],{},[119,53703],{"alt":32,"src":53704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,53706,53707],{},"相比于innerText，他的强大之处在于可以解析标签",[175,53709,53711],{"id":53710},"_314-操作元素属性","3.1.4 操作元素属性",[22070,53713,53715],{"id":53714},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,53717,53718],{},[119,53719],{"alt":32,"src":53720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22070,53722,53724],{"id":53723},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,53726,53727],{},[119,53728],{"alt":32,"src":53729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,53731,53732],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,53734,53735],{},"div.style.backgroundColor = 'hotpink'",[14,53737,53738],{},"如果按照css的写法，-表示减，就会出错",[14,53740,53741],{},"body元素不需要再获取，直接用就行！！！！！！",[14,53743,53744],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,53746,53747],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,53749,53750],{},[119,53751],{"alt":32,"src":53752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,53754,53755],{},[119,53756],{"alt":32,"src":53757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[158,53759,53760,53763,53766,53769,53772,53775],{},[161,53761,53762],{},"className这个方式就是修改很多样式的时候来使用的！",[161,53764,53765],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[161,53767,53768],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[161,53770,53771],{},"className为属性名，如果还用class的话就导致与关键字冲突",[161,53773,53774],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[161,53776,53777,53778,53783],{},"解析标签的时候就变为了",[51679,53779],{"className":53780},[53781,53782],"nav","box",[53784,53785],"br",{},[14,53787,53788],{},"例子：",[51679,53790],{"className":53791},[53781],[51881,53793,53794],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,53796,53797],{},[119,53798],{"alt":32,"src":53799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,53801,53802],{},"追加和删除类名用classList",[14,53804,53805],{},"常用于类似于开关的操作",[14,53807,53808],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,53810,53811],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22070,53813,53815],{"id":53814},"_3143-牢记点","3.1.4.3 牢记点",[158,53817,53818,53821,53824,53827,53830,53833,53836,53839,53842],{},[161,53819,53820],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[161,53822,53823],{},"使用style属性操作css时不要忘记引号",[161,53825,53826],{},"使用className或者classList时也不要忘记引号",[161,53828,53829],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[161,53831,53832],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[161,53834,53835],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[161,53837,53838],{},"若： let arr=['1','2',3] arr[0]=1",[161,53840,53841],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[161,53843,53844],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[175,53846,53848],{"id":53847},"_315-操作表单元素","3.1.5 操作表单元素",[158,53850,53851],{},[161,53852,53853],{},"天生的属性",[14,53855,53856],{},[119,53857],{"alt":32,"src":53858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,53860,53861],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,53863,53864],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,53866,53867],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,53869,53870],{},[119,53871],{"alt":32,"src":53872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[27,53874,53876],{"className":50701,"code":53875,"language":50703,"meta":32,"style":32},"在复选框中如果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",[34,53877,53878,53883,53915,53920,53925,53930,53935,53939,53944,53949,53966,53978,53983],{"__ignoreMap":32},[37,53879,53880],{"class":39,"line":40},[37,53881,53882],{"class":54},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[37,53884,53885,53887,53890,53893,53895,53898,53900,53902,53904,53906,53908,53910,53913],{"class":39,"line":47},[37,53886,1113],{"class":54},[37,53888,53889],{"class":51368},"input",[37,53891,53892],{"class":2035}," type",[37,53894,70],{"class":54},[37,53896,53897],{"class":309},"\"checkbox\"",[37,53899,14992],{"class":2035},[37,53901,70],{"class":54},[37,53903,7724],{"class":309},[37,53905,15031],{"class":2035},[37,53907,70],{"class":54},[37,53909,7724],{"class":309},[37,53911,53912],{"class":2035}," checked",[37,53914,51375],{"class":54},[37,53916,53917],{"class":39,"line":58},[37,53918,53919],{"class":54},"不选的话：\n",[37,53921,53922],{"class":39,"line":64},[37,53923,53924],{"class":54},"const input = document.querySelector('input')\n",[37,53926,53927],{"class":39,"line":76},[37,53928,53929],{"class":54},"input.checked=false\n",[37,53931,53932],{"class":39,"line":92},[37,53933,53934],{"class":54},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[37,53936,53937],{"class":39,"line":97},[37,53938,2472],{"emptyLinePlaceholder":131},[37,53940,53941],{"class":39,"line":107},[37,53942,53943],{"class":54},"禁用按钮：\n",[37,53945,53946],{"class":39,"line":1390},[37,53947,53948],{"class":54},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[37,53950,53951,53953,53956,53959,53962,53964],{"class":39,"line":1402},[37,53952,1113],{"class":54},[37,53954,53955],{"class":51368},"button",[37,53957,53958],{"class":2035}," disabled",[37,53960,53961],{"class":54},">点击\u003C\u002F",[37,53963,53955],{"class":51368},[37,53965,51375],{"class":54},[37,53967,53968,53970,53972,53974,53976],{"class":39,"line":1684},[37,53969,1113],{"class":54},[37,53971,53955],{"class":51368},[37,53973,53961],{"class":54},[37,53975,53955],{"class":51368},[37,53977,51375],{"class":54},[37,53979,53980],{"class":39,"line":1689},[37,53981,53982],{"class":54},"const bt = document.querySelector('button')\n",[37,53984,53985],{"class":39,"line":1695},[37,53986,53987],{"class":54},"bt.disabled = false\n",[158,53989,53990],{"start":47},[161,53991,53992],{},"自定义属性",[14,53994,53995],{},[119,53996],{"alt":32,"src":53997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[27,53999,54001],{"className":53135,"code":54000,"language":53137,"meta":32,"style":32},"\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",[34,54002,54003,54011,54039,54058,54077,54096,54115,54123,54128,54133,54138,54143,54151],{"__ignoreMap":32},[37,54004,54005,54007,54009],{"class":39,"line":40},[37,54006,1113],{"class":54},[37,54008,51868],{"class":51368},[37,54010,51375],{"class":54},[37,54012,54013,54015,54017,54020,54022,54024,54027,54029,54032,54035,54037],{"class":39,"line":47},[37,54014,52212],{"class":54},[37,54016,51679],{"class":51368},[37,54018,54019],{"class":2035}," data-id",[37,54021,70],{"class":54},[37,54023,3750],{"class":309},[37,54025,54026],{"class":2035}," data-spm",[37,54028,70],{"class":54},[37,54030,54031],{"class":309},"\"我不知道\"",[37,54033,54034],{"class":54},">1\u003C\u002F",[37,54036,51679],{"class":51368},[37,54038,51375],{"class":54},[37,54040,54041,54043,54045,54047,54049,54051,54054,54056],{"class":39,"line":58},[37,54042,52212],{"class":54},[37,54044,51679],{"class":51368},[37,54046,54019],{"class":2035},[37,54048,70],{"class":54},[37,54050,3773],{"class":309},[37,54052,54053],{"class":54},">2\u003C\u002F",[37,54055,51679],{"class":51368},[37,54057,51375],{"class":54},[37,54059,54060,54062,54064,54066,54068,54070,54073,54075],{"class":39,"line":64},[37,54061,52212],{"class":54},[37,54063,51679],{"class":51368},[37,54065,54019],{"class":2035},[37,54067,70],{"class":54},[37,54069,3786],{"class":309},[37,54071,54072],{"class":54},">3\u003C\u002F",[37,54074,51679],{"class":51368},[37,54076,51375],{"class":54},[37,54078,54079,54081,54083,54085,54087,54089,54092,54094],{"class":39,"line":76},[37,54080,52212],{"class":54},[37,54082,51679],{"class":51368},[37,54084,54019],{"class":2035},[37,54086,70],{"class":54},[37,54088,3799],{"class":309},[37,54090,54091],{"class":54},">4\u003C\u002F",[37,54093,51679],{"class":51368},[37,54095,51375],{"class":54},[37,54097,54098,54100,54102,54104,54106,54108,54111,54113],{"class":39,"line":92},[37,54099,52212],{"class":54},[37,54101,51679],{"class":51368},[37,54103,54019],{"class":2035},[37,54105,70],{"class":54},[37,54107,3820],{"class":309},[37,54109,54110],{"class":54},">5\u003C\u002F",[37,54112,51679],{"class":51368},[37,54114,51375],{"class":54},[37,54116,54117,54119,54121],{"class":39,"line":97},[37,54118,52212],{"class":54},[37,54120,51881],{"class":51368},[37,54122,51375],{"class":54},[37,54124,54125],{"class":39,"line":107},[37,54126,54127],{"class":54},"    const one = document.querySelector('div')\n",[37,54129,54130],{"class":39,"line":1390},[37,54131,54132],{"class":54},"    console.log(one.dataset)\n",[37,54134,54135],{"class":39,"line":1402},[37,54136,54137],{"class":54},"    console.log(one.dataset.id)\n",[37,54139,54140],{"class":39,"line":1684},[37,54141,54142],{"class":54},"    console.log(one.dataset.spm)\n",[37,54144,54145,54147,54149],{"class":39,"line":1689},[37,54146,52485],{"class":54},[37,54148,51881],{"class":51368},[37,54150,51375],{"class":54},[37,54152,54153,54155,54157],{"class":39,"line":1695},[37,54154,51853],{"class":54},[37,54156,51868],{"class":51368},[37,54158,51375],{"class":54},[14,54160,54161],{},[119,54162],{"alt":32,"src":54163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54165,54166],{},"document.querySelector选择的是第一个对象（元素）",[175,54168,54170],{"id":54169},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54172,54173],{},[119,54174],{"alt":32,"src":54175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54177,54178],{},[119,54179],{"alt":32,"src":54180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54182,54183],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51881,54185,54186],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54188,54189],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51881,54191,54192],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[14,54194,54195],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54197,54198],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54200,54201],{},"单位为毫秒！！！",[14,54203,54204],{},"可以搭配匿名函数来用！！！",[14,54206,54207],{},"setInterval(function () {",[14,54209,54210],{},"alert('两秒执行一次')",[14,54212,54213],{},"}, 2000)",[14,54215,54216],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54218,54219],{},"function fn() {",[14,54221,54222],{},"document.write(1)",[14,54224,1149],{},[14,54226,54227],{},"setInterval(fn, 1000)",[14,54229,54230],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54232,54233],{},"setInterval('fn()', 1000)",[14,54235,54236],{},[119,54237],{"alt":32,"src":54238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22070,54240,54242],{"id":54241},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[27,54244,54246],{"className":50701,"code":54245,"language":50703,"meta":32,"style":32},"\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",[34,54247,54248,54258,54272,54276,54284,54298,54318,54330,54338,54342,54350,54387,54392,54397,54402,54410,54418,54440,54448,54453,54475,54480,54485,54496,54501,54521,54529,54544,54559,54570,54575,54585,54595,54599,54608,54612,54620,54628,54632],{"__ignoreMap":32},[37,54249,54250,54252,54254,54256],{"class":39,"line":40},[37,54251,51365],{"class":54},[37,54253,51369],{"class":51368},[37,54255,51372],{"class":2035},[37,54257,51375],{"class":54},[37,54259,54260,54262,54264,54266,54268,54270],{"class":39,"line":47},[37,54261,1113],{"class":54},[37,54263,50703],{"class":51368},[37,54265,51384],{"class":2035},[37,54267,70],{"class":54},[37,54269,51389],{"class":309},[37,54271,51375],{"class":54},[37,54273,54274],{"class":39,"line":58},[37,54275,2472],{"emptyLinePlaceholder":131},[37,54277,54278,54280,54282],{"class":39,"line":64},[37,54279,1113],{"class":54},[37,54281,51402],{"class":51368},[37,54283,51375],{"class":54},[37,54285,54286,54288,54290,54292,54294,54296],{"class":39,"line":76},[37,54287,52212],{"class":54},[37,54289,51412],{"class":51368},[37,54291,51415],{"class":2035},[37,54293,70],{"class":54},[37,54295,51420],{"class":309},[37,54297,51375],{"class":54},[37,54299,54300,54302,54304,54306,54308,54310,54312,54314,54316],{"class":39,"line":92},[37,54301,52212],{"class":54},[37,54303,51412],{"class":51368},[37,54305,14992],{"class":2035},[37,54307,70],{"class":54},[37,54309,51459],{"class":309},[37,54311,51439],{"class":2035},[37,54313,70],{"class":54},[37,54315,51466],{"class":309},[37,54317,51375],{"class":54},[37,54319,54320,54322,54324,54326,54328],{"class":39,"line":97},[37,54321,52212],{"class":54},[37,54323,51475],{"class":51368},[37,54325,51478],{"class":54},[37,54327,51475],{"class":51368},[37,54329,51375],{"class":54},[37,54331,54332,54334,54336],{"class":39,"line":107},[37,54333,51853],{"class":54},[37,54335,51402],{"class":51368},[37,54337,51375],{"class":54},[37,54339,54340],{"class":39,"line":1390},[37,54341,2472],{"emptyLinePlaceholder":131},[37,54343,54344,54346,54348],{"class":39,"line":1402},[37,54345,1113],{"class":54},[37,54347,51868],{"class":51368},[37,54349,51375],{"class":54},[37,54351,54352,54354,54357,54359,54361,54363,54365,54367,54369,54372,54374,54377,54380,54382,54385],{"class":39,"line":1684},[37,54353,52212],{"class":54},[37,54355,54356],{"class":51368},"textarea",[37,54358,14992],{"class":2035},[37,54360,70],{"class":54},[37,54362,7724],{"class":309},[37,54364,15031],{"class":2035},[37,54366,70],{"class":54},[37,54368,7724],{"class":309},[37,54370,54371],{"class":2035}," cols",[37,54373,70],{"class":54},[37,54375,54376],{"class":309},"\"30\"",[37,54378,54379],{"class":2035}," rows",[37,54381,70],{"class":54},[37,54383,54384],{"class":309},"\"10\"",[37,54386,51375],{"class":54},[37,54388,54389],{"class":39,"line":1689},[37,54390,54391],{"class":54},"        用户注册协议\n",[37,54393,54394],{"class":39,"line":1695},[37,54395,54396],{"class":54},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[37,54398,54399],{"class":39,"line":1700},[37,54400,54401],{"class":54},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[37,54403,54404,54406,54408],{"class":39,"line":1714},[37,54405,51844],{"class":54},[37,54407,54356],{"class":51368},[37,54409,51375],{"class":54},[37,54411,54412,54414,54416],{"class":39,"line":1719},[37,54413,52212],{"class":54},[37,54415,53784],{"class":51368},[37,54417,51375],{"class":54},[37,54419,54420,54422,54424,54426,54428,54431,54433,54436,54438],{"class":39,"line":1725},[37,54421,52212],{"class":54},[37,54423,53955],{"class":51368},[37,54425,53554],{"class":2035},[37,54427,70],{"class":54},[37,54429,54430],{"class":309},"\"btn\"",[37,54432,53958],{"class":2035},[37,54434,54435],{"class":54},">我已经阅读用户协议(5)\u003C\u002F",[37,54437,53955],{"class":51368},[37,54439,51375],{"class":54},[37,54441,54442,54444,54446],{"class":39,"line":1746},[37,54443,52212],{"class":54},[37,54445,51881],{"class":51368},[37,54447,51375],{"class":54},[37,54449,54450],{"class":39,"line":1751},[37,54451,54452],{"class":43},"    \u002F\u002F 1. 获取元素\n",[37,54454,54455,54457,54460,54462,54465,54468,54470,54473],{"class":39,"line":1765},[37,54456,11293],{"class":50},[37,54458,54459],{"class":82}," btn",[37,54461,13636],{"class":50},[37,54463,54464],{"class":54}," document.",[37,54466,54467],{"class":2035},"querySelector",[37,54469,208],{"class":54},[37,54471,54472],{"class":309},"'.btn'",[37,54474,214],{"class":54},[37,54476,54477],{"class":39,"line":1770},[37,54478,54479],{"class":43},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[37,54481,54482],{"class":39,"line":1799},[37,54483,54484],{"class":43},"    \u002F\u002F 2. 倒计时\n",[37,54486,54487,54489,54491,54493],{"class":39,"line":1804},[37,54488,52287],{"class":50},[37,54490,9510],{"class":54},[37,54492,70],{"class":50},[37,54494,54495],{"class":82}," 5\n",[37,54497,54498],{"class":39,"line":1821},[37,54499,54500],{"class":43},"    \u002F\u002F 2.1 开启定时器\n",[37,54502,54503,54505,54508,54510,54513,54515,54518],{"class":39,"line":1826},[37,54504,52287],{"class":50},[37,54506,54507],{"class":54}," n ",[37,54509,70],{"class":50},[37,54511,54512],{"class":2035}," setInterval",[37,54514,208],{"class":54},[37,54516,54517],{"class":50},"function",[37,54519,54520],{"class":54}," () {\n",[37,54522,54523,54526],{"class":39,"line":1831},[37,54524,54525],{"class":54},"      i",[37,54527,54528],{"class":50},"--\n",[37,54530,54531,54534,54536,54539,54541],{"class":39,"line":1836},[37,54532,54533],{"class":54},"      btn.innerHTML ",[37,54535,70],{"class":50},[37,54537,54538],{"class":309}," `我已经阅读用户协议(${",[37,54540,645],{"class":54},[37,54542,54543],{"class":309},"})`\n",[37,54545,54546,54549,54552,54555,54557],{"class":39,"line":1850},[37,54547,54548],{"class":50},"      if",[37,54550,54551],{"class":54}," (i ",[37,54553,54554],{"class":50},"===",[37,54556,4165],{"class":82},[37,54558,12514],{"class":54},[37,54560,54561,54564,54567],{"class":39,"line":1855},[37,54562,54563],{"class":2035},"        clearInterval",[37,54565,54566],{"class":54},"(n)  ",[37,54568,54569],{"class":43},"\u002F\u002F 关闭定时器\n",[37,54571,54572],{"class":39,"line":2649},[37,54573,54574],{"class":43},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[37,54576,54577,54580,54582],{"class":39,"line":2663},[37,54578,54579],{"class":54},"        btn.disabled ",[37,54581,70],{"class":50},[37,54583,54584],{"class":82}," false\n",[37,54586,54587,54590,54592],{"class":39,"line":2671},[37,54588,54589],{"class":54},"        btn.innerHTML ",[37,54591,70],{"class":50},[37,54593,54594],{"class":309}," '同意'\n",[37,54596,54597],{"class":39,"line":2676},[37,54598,52466],{"class":54},[37,54600,54601,54604,54606],{"class":39,"line":2682},[37,54602,54603],{"class":54},"    }, ",[37,54605,6482],{"class":82},[37,54607,214],{"class":54},[37,54609,54610],{"class":39,"line":2688},[37,54611,2472],{"emptyLinePlaceholder":131},[37,54613,54614,54616,54618],{"class":39,"line":2693},[37,54615,52485],{"class":54},[37,54617,51881],{"class":51368},[37,54619,51375],{"class":54},[37,54621,54622,54624,54626],{"class":39,"line":8020},[37,54623,51853],{"class":54},[37,54625,51868],{"class":51368},[37,54627,51375],{"class":54},[37,54629,54630],{"class":39,"line":8044},[37,54631,2472],{"emptyLinePlaceholder":131},[37,54633,54634,54636,54638],{"class":39,"line":8049},[37,54635,51853],{"class":54},[37,54637,50703],{"class":51368},[37,54639,51375],{"class":54},[14,54641,54642],{},"不要一直想着用死循环,避免死循环",[14,54644,54645,54648],{},[34,54646,54647],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22070,54650,54652],{"id":54651},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[158,54654,54655],{},[161,54656,54657],{},"法1",[27,54659,54661],{"className":50701,"code":54660,"language":50703,"meta":32,"style":32},"\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",[34,54662,54663,54673,54687,54691,54699,54713,54733,54745,54753,54759,54770,54781,54785,54789,54796,54808,54812,54816,54823,54835,54849,54862,54876,54880,54884,54891,54902,54913,54924,54936,54948,54960,54964,54968,54976,54986,54999,55011,55024,55028,55032,55039,55049,55061,55073,55084,55095,55105,55117,55129,55133,55137,55146,55158,55170,55198,55211,55215,55219,55226,55237,55241,55249,55257,55261,55269,55283,55298,55322,55330,55345,55358,55366,55387,55399,55411,55423,55435,55447,55459,55471,55480,55488,55496,55504,55516,55539,55558,55577,55596,55615,55634,55653,55673,55677,55697,55716,55736,55757,55768,55785,55795,55805,55815,55820,55825,55830,55835,55860,55873,55877,55900,55904,55912,55920,55928,55932],{"__ignoreMap":32},[37,54664,54665,54667,54669,54671],{"class":39,"line":40},[37,54666,51365],{"class":54},[37,54668,51369],{"class":51368},[37,54670,51372],{"class":2035},[37,54672,51375],{"class":54},[37,54674,54675,54677,54679,54681,54683,54685],{"class":39,"line":47},[37,54676,1113],{"class":54},[37,54678,50703],{"class":51368},[37,54680,51384],{"class":2035},[37,54682,70],{"class":54},[37,54684,51389],{"class":309},[37,54686,51375],{"class":54},[37,54688,54689],{"class":39,"line":58},[37,54690,2472],{"emptyLinePlaceholder":131},[37,54692,54693,54695,54697],{"class":39,"line":64},[37,54694,1113],{"class":54},[37,54696,51402],{"class":51368},[37,54698,51375],{"class":54},[37,54700,54701,54703,54705,54707,54709,54711],{"class":39,"line":76},[37,54702,52212],{"class":54},[37,54704,51412],{"class":51368},[37,54706,51415],{"class":2035},[37,54708,70],{"class":54},[37,54710,51420],{"class":309},[37,54712,51375],{"class":54},[37,54714,54715,54717,54719,54721,54723,54725,54727,54729,54731],{"class":39,"line":92},[37,54716,52212],{"class":54},[37,54718,51412],{"class":51368},[37,54720,14992],{"class":2035},[37,54722,70],{"class":54},[37,54724,51459],{"class":309},[37,54726,51439],{"class":2035},[37,54728,70],{"class":54},[37,54730,51466],{"class":309},[37,54732,51375],{"class":54},[37,54734,54735,54737,54739,54741,54743],{"class":39,"line":97},[37,54736,52212],{"class":54},[37,54738,51475],{"class":51368},[37,54740,51478],{"class":54},[37,54742,51475],{"class":51368},[37,54744,51375],{"class":54},[37,54746,54747,54749,54751],{"class":39,"line":107},[37,54748,52212],{"class":54},[37,54750,123],{"class":51368},[37,54752,51375],{"class":54},[37,54754,54755,54757],{"class":39,"line":1390},[37,54756,6475],{"class":51368},[37,54758,15644],{"class":54},[37,54760,54761,54764,54766,54768],{"class":39,"line":1402},[37,54762,54763],{"class":82},"      padding",[37,54765,51505],{"class":54},[37,54767,396],{"class":82},[37,54769,1364],{"class":54},[37,54771,54772,54775,54777,54779],{"class":39,"line":1684},[37,54773,54774],{"class":82},"      margin",[37,54776,51505],{"class":54},[37,54778,396],{"class":82},[37,54780,1364],{"class":54},[37,54782,54783],{"class":39,"line":1689},[37,54784,2259],{"class":54},[37,54786,54787],{"class":39,"line":1695},[37,54788,2472],{"emptyLinePlaceholder":131},[37,54790,54791,54794],{"class":39,"line":1700},[37,54792,54793],{"class":51368},"    li",[37,54795,15644],{"class":54},[37,54797,54798,54801,54803,54806],{"class":39,"line":1714},[37,54799,54800],{"class":82},"      list-style",[37,54802,51505],{"class":54},[37,54804,54805],{"class":82},"none",[37,54807,1364],{"class":54},[37,54809,54810],{"class":39,"line":1719},[37,54811,2259],{"class":54},[37,54813,54814],{"class":39,"line":1725},[37,54815,2472],{"emptyLinePlaceholder":131},[37,54817,54818,54821],{"class":39,"line":1746},[37,54819,54820],{"class":2035},"    .box",[37,54822,15644],{"class":54},[37,54824,54825,54828,54830,54833],{"class":39,"line":1751},[37,54826,54827],{"class":82},"      position",[37,54829,51505],{"class":54},[37,54831,54832],{"class":82},"relative",[37,54834,1364],{"class":54},[37,54836,54837,54840,54842,54845,54847],{"class":39,"line":1765},[37,54838,54839],{"class":82},"      width",[37,54841,51505],{"class":54},[37,54843,54844],{"class":82},"976",[37,54846,51560],{"class":50},[37,54848,1364],{"class":54},[37,54850,54851,54854,54856,54858,54860],{"class":39,"line":1770},[37,54852,54853],{"class":82},"      height",[37,54855,51505],{"class":54},[37,54857,1611],{"class":82},[37,54859,51560],{"class":50},[37,54861,1364],{"class":54},[37,54863,54864,54866,54868,54870,54872,54874],{"class":39,"line":1799},[37,54865,54774],{"class":82},[37,54867,51505],{"class":54},[37,54869,516],{"class":82},[37,54871,51560],{"class":50},[37,54873,51624],{"class":82},[37,54875,1364],{"class":54},[37,54877,54878],{"class":39,"line":1804},[37,54879,2259],{"class":54},[37,54881,54882],{"class":39,"line":1821},[37,54883,2472],{"emptyLinePlaceholder":131},[37,54885,54886,54889],{"class":39,"line":1826},[37,54887,54888],{"class":2035},"    .slider-footer",[37,54890,15644],{"class":54},[37,54892,54893,54895,54897,54900],{"class":39,"line":1831},[37,54894,54827],{"class":82},[37,54896,51505],{"class":54},[37,54898,54899],{"class":82},"absolute",[37,54901,1364],{"class":54},[37,54903,54904,54907,54909,54911],{"class":39,"line":1836},[37,54905,54906],{"class":82},"      left",[37,54908,51505],{"class":54},[37,54910,396],{"class":82},[37,54912,1364],{"class":54},[37,54914,54915,54918,54920,54922],{"class":39,"line":1850},[37,54916,54917],{"class":82},"      bottom",[37,54919,51505],{"class":54},[37,54921,396],{"class":82},[37,54923,1364],{"class":54},[37,54925,54926,54928,54930,54932,54934],{"class":39,"line":1855},[37,54927,54839],{"class":82},[37,54929,51505],{"class":54},[37,54931,516],{"class":82},[37,54933,533],{"class":50},[37,54935,1364],{"class":54},[37,54937,54938,54940,54942,54944,54946],{"class":39,"line":2649},[37,54939,54853],{"class":82},[37,54941,51505],{"class":54},[37,54943,778],{"class":82},[37,54945,533],{"class":50},[37,54947,1364],{"class":54},[37,54949,54950,54953,54955,54958],{"class":39,"line":2663},[37,54951,54952],{"class":82},"      background-color",[37,54954,51505],{"class":54},[37,54956,54957],{"class":82},"skyblue",[37,54959,1364],{"class":54},[37,54961,54962],{"class":39,"line":2671},[37,54963,2259],{"class":54},[37,54965,54966],{"class":39,"line":2676},[37,54967,2472],{"emptyLinePlaceholder":131},[37,54969,54970,54972,54974],{"class":39,"line":2682},[37,54971,54888],{"class":2035},[37,54973,6897],{"class":51368},[37,54975,15644],{"class":54},[37,54977,54978,54980,54982,54984],{"class":39,"line":2688},[37,54979,54827],{"class":82},[37,54981,51505],{"class":54},[37,54983,54899],{"class":82},[37,54985,1364],{"class":54},[37,54987,54988,54991,54993,54995,54997],{"class":39,"line":2693},[37,54989,54990],{"class":82},"      font-size",[37,54992,51505],{"class":54},[37,54994,1104],{"class":82},[37,54996,51560],{"class":50},[37,54998,1364],{"class":54},[37,55000,55001,55003,55005,55007,55009],{"class":39,"line":8020},[37,55002,54906],{"class":82},[37,55004,51505],{"class":54},[37,55006,903],{"class":82},[37,55008,51560],{"class":50},[37,55010,1364],{"class":54},[37,55012,55013,55016,55018,55020,55022],{"class":39,"line":8044},[37,55014,55015],{"class":82},"      top",[37,55017,51505],{"class":54},[37,55019,524],{"class":82},[37,55021,51560],{"class":50},[37,55023,1364],{"class":54},[37,55025,55026],{"class":39,"line":8049},[37,55027,2259],{"class":54},[37,55029,55030],{"class":39,"line":8055},[37,55031,2472],{"emptyLinePlaceholder":131},[37,55033,55034,55037],{"class":39,"line":8082},[37,55035,55036],{"class":51368},"    ul",[37,55038,15644],{"class":54},[37,55040,55041,55043,55045,55047],{"class":39,"line":8087},[37,55042,54827],{"class":82},[37,55044,51505],{"class":54},[37,55046,54899],{"class":82},[37,55048,1364],{"class":54},[37,55050,55051,55053,55055,55057,55059],{"class":39,"line":8093},[37,55052,55015],{"class":82},[37,55054,51505],{"class":54},[37,55056,984],{"class":82},[37,55058,51560],{"class":50},[37,55060,1364],{"class":54},[37,55062,55063,55065,55067,55069,55071],{"class":39,"line":8105},[37,55064,54906],{"class":82},[37,55066,51505],{"class":54},[37,55068,903],{"class":82},[37,55070,51560],{"class":50},[37,55072,1364],{"class":54},[37,55074,55075,55078,55080,55082],{"class":39,"line":8117},[37,55076,55077],{"class":82},"      display",[37,55079,51505],{"class":54},[37,55081,51545],{"class":82},[37,55083,1364],{"class":54},[37,55085,55086,55089,55091,55093],{"class":39,"line":8129},[37,55087,55088],{"class":82},"      justify-content",[37,55090,51505],{"class":54},[37,55092,51736],{"class":82},[37,55094,1364],{"class":54},[37,55096,55097,55099,55101,55103],{"class":39,"line":9788},[37,55098,54827],{"class":82},[37,55100,51505],{"class":54},[37,55102,54899],{"class":82},[37,55104,1364],{"class":54},[37,55106,55107,55109,55111,55113,55115],{"class":39,"line":9813},[37,55108,54839],{"class":82},[37,55110,51505],{"class":54},[37,55112,4064],{"class":82},[37,55114,51560],{"class":50},[37,55116,1364],{"class":54},[37,55118,55119,55121,55123,55125,55127],{"class":39,"line":9836},[37,55120,54853],{"class":82},[37,55122,51505],{"class":54},[37,55124,903],{"class":82},[37,55126,51560],{"class":50},[37,55128,1364],{"class":54},[37,55130,55131],{"class":39,"line":9860},[37,55132,2259],{"class":54},[37,55134,55135],{"class":39,"line":9865},[37,55136,2472],{"emptyLinePlaceholder":131},[37,55138,55139,55141,55144],{"class":39,"line":9870},[37,55140,55036],{"class":51368},[37,55142,55143],{"class":51368}," li",[37,55145,15644],{"class":54},[37,55147,55148,55150,55152,55154,55156],{"class":39,"line":9875},[37,55149,54839],{"class":82},[37,55151,51505],{"class":54},[37,55153,903],{"class":82},[37,55155,51560],{"class":50},[37,55157,1364],{"class":54},[37,55159,55160,55162,55164,55166,55168],{"class":39,"line":9884},[37,55161,54853],{"class":82},[37,55163,51505],{"class":54},[37,55165,903],{"class":82},[37,55167,51560],{"class":50},[37,55169,1364],{"class":54},[37,55171,55172,55174,55176,55179,55181,55183,55185,55187,55189,55191,55193,55196],{"class":39,"line":9889},[37,55173,54952],{"class":82},[37,55175,51505],{"class":54},[37,55177,55178],{"class":82},"rgba",[37,55180,208],{"class":54},[37,55182,396],{"class":82},[37,55184,12507],{"class":54},[37,55186,396],{"class":82},[37,55188,12507],{"class":54},[37,55190,396],{"class":82},[37,55192,12507],{"class":54},[37,55194,55195],{"class":82},".4",[37,55197,2791],{"class":54},[37,55199,55200,55203,55205,55207,55209],{"class":39,"line":9895},[37,55201,55202],{"class":82},"      border-radius",[37,55204,51505],{"class":54},[37,55206,650],{"class":82},[37,55208,51560],{"class":50},[37,55210,1364],{"class":54},[37,55212,55213],{"class":39,"line":9916},[37,55214,2259],{"class":54},[37,55216,55217],{"class":39,"line":9922},[37,55218,2472],{"emptyLinePlaceholder":131},[37,55220,55221,55224],{"class":39,"line":9936},[37,55222,55223],{"class":2035},"    .activate",[37,55225,15644],{"class":54},[37,55227,55228,55230,55232,55235],{"class":39,"line":9942},[37,55229,54952],{"class":82},[37,55231,51505],{"class":54},[37,55233,55234],{"class":82},"#f7f7f7",[37,55236,1364],{"class":54},[37,55238,55239],{"class":39,"line":9969},[37,55240,2259],{"class":54},[37,55242,55243,55245,55247],{"class":39,"line":9978},[37,55244,52485],{"class":54},[37,55246,123],{"class":51368},[37,55248,51375],{"class":54},[37,55250,55251,55253,55255],{"class":39,"line":9984},[37,55252,51853],{"class":54},[37,55254,51402],{"class":51368},[37,55256,51375],{"class":54},[37,55258,55259],{"class":39,"line":9992},[37,55260,2472],{"emptyLinePlaceholder":131},[37,55262,55263,55265,55267],{"class":39,"line":9997},[37,55264,1113],{"class":54},[37,55266,51868],{"class":51368},[37,55268,51375],{"class":54},[37,55270,55271,55273,55275,55277,55279,55281],{"class":39,"line":16676},[37,55272,52212],{"class":54},[37,55274,51679],{"class":51368},[37,55276,53554],{"class":2035},[37,55278,70],{"class":54},[37,55280,53559],{"class":309},[37,55282,51375],{"class":54},[37,55284,55285,55287,55289,55291,55293,55296],{"class":39,"line":16682},[37,55286,51409],{"class":54},[37,55288,51679],{"class":51368},[37,55290,53554],{"class":2035},[37,55292,70],{"class":54},[37,55294,55295],{"class":309},"\"slider-wrapper\"",[37,55297,51375],{"class":54},[37,55299,55300,55303,55305,55308,55310,55313,55316,55318,55320],{"class":39,"line":16705},[37,55301,55302],{"class":54},"      \u003C",[37,55304,119],{"class":51368},[37,55306,55307],{"class":2035}," src",[37,55309,70],{"class":54},[37,55311,55312],{"class":309},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[37,55314,55315],{"class":2035}," alt",[37,55317,70],{"class":54},[37,55319,7724],{"class":309},[37,55321,51375],{"class":54},[37,55323,55324,55326,55328],{"class":39,"line":16711},[37,55325,51844],{"class":54},[37,55327,51679],{"class":51368},[37,55329,51375],{"class":54},[37,55331,55332,55334,55336,55338,55340,55343],{"class":39,"line":16734},[37,55333,51409],{"class":54},[37,55335,51679],{"class":51368},[37,55337,53554],{"class":2035},[37,55339,70],{"class":54},[37,55341,55342],{"class":309},"\"slider-footer\"",[37,55344,51375],{"class":54},[37,55346,55347,55349,55351,55354,55356],{"class":39,"line":16748},[37,55348,55302],{"class":54},[37,55350,14],{"class":51368},[37,55352,55353],{"class":54},">对人类来说会不会太超前了?\u003C\u002F",[37,55355,14],{"class":51368},[37,55357,51375],{"class":54},[37,55359,55360,55362,55364],{"class":39,"line":16768},[37,55361,55302],{"class":54},[37,55363,1210],{"class":51368},[37,55365,51375],{"class":54},[37,55367,55368,55371,55373,55375,55377,55380,55383,55385],{"class":39,"line":16774},[37,55369,55370],{"class":54},"        \u003C",[37,55372,161],{"class":51368},[37,55374,53554],{"class":2035},[37,55376,70],{"class":54},[37,55378,55379],{"class":309},"\"activate\"",[37,55381,55382],{"class":54},">\u003C\u002F",[37,55384,161],{"class":51368},[37,55386,51375],{"class":54},[37,55388,55389,55391,55393,55395,55397],{"class":39,"line":16785},[37,55390,55370],{"class":54},[37,55392,161],{"class":51368},[37,55394,55382],{"class":54},[37,55396,161],{"class":51368},[37,55398,51375],{"class":54},[37,55400,55401,55403,55405,55407,55409],{"class":39,"line":16808},[37,55402,55370],{"class":54},[37,55404,161],{"class":51368},[37,55406,55382],{"class":54},[37,55408,161],{"class":51368},[37,55410,51375],{"class":54},[37,55412,55413,55415,55417,55419,55421],{"class":39,"line":16830},[37,55414,55370],{"class":54},[37,55416,161],{"class":51368},[37,55418,55382],{"class":54},[37,55420,161],{"class":51368},[37,55422,51375],{"class":54},[37,55424,55425,55427,55429,55431,55433],{"class":39,"line":16835},[37,55426,55370],{"class":54},[37,55428,161],{"class":51368},[37,55430,55382],{"class":54},[37,55432,161],{"class":51368},[37,55434,51375],{"class":54},[37,55436,55437,55439,55441,55443,55445],{"class":39,"line":16841},[37,55438,55370],{"class":54},[37,55440,161],{"class":51368},[37,55442,55382],{"class":54},[37,55444,161],{"class":51368},[37,55446,51375],{"class":54},[37,55448,55449,55451,55453,55455,55457],{"class":39,"line":16855},[37,55450,55370],{"class":54},[37,55452,161],{"class":51368},[37,55454,55382],{"class":54},[37,55456,161],{"class":51368},[37,55458,51375],{"class":54},[37,55460,55461,55463,55465,55467,55469],{"class":39,"line":16868},[37,55462,55370],{"class":54},[37,55464,161],{"class":51368},[37,55466,55382],{"class":54},[37,55468,161],{"class":51368},[37,55470,51375],{"class":54},[37,55472,55473,55476,55478],{"class":39,"line":16873},[37,55474,55475],{"class":54},"      \u003C\u002F",[37,55477,1210],{"class":51368},[37,55479,51375],{"class":54},[37,55481,55482,55484,55486],{"class":39,"line":16887},[37,55483,51844],{"class":54},[37,55485,51679],{"class":51368},[37,55487,51375],{"class":54},[37,55489,55490,55492,55494],{"class":39,"line":16892},[37,55491,52485],{"class":54},[37,55493,51679],{"class":51368},[37,55495,51375],{"class":54},[37,55497,55498,55500,55502],{"class":39,"line":16898},[37,55499,52212],{"class":54},[37,55501,51881],{"class":51368},[37,55503,51375],{"class":54},[37,55505,55506,55508,55511,55513],{"class":39,"line":16903},[37,55507,11293],{"class":50},[37,55509,55510],{"class":82}," arrImage",[37,55512,13636],{"class":50},[37,55514,55515],{"class":54}," [\n",[37,55517,55518,55521,55524,55527,55530,55533,55536],{"class":39,"line":16917},[37,55519,55520],{"class":54},"      { url: ",[37,55522,55523],{"class":309},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[37,55525,55526],{"class":54},", title: ",[37,55528,55529],{"class":309},"'对人类来说会不会太超前了?'",[37,55531,55532],{"class":54},", color: ",[37,55534,55535],{"class":309},"'rgba(100,67,68)'",[37,55537,55538],{"class":54}," },\n",[37,55540,55541,55543,55546,55548,55551,55553,55556],{"class":39,"line":16922},[37,55542,55520],{"class":54},[37,55544,55545],{"class":309},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[37,55547,55526],{"class":54},[37,55549,55550],{"class":309},"'开启剑与雪的黑暗传说!'",[37,55552,55532],{"class":54},[37,55554,55555],{"class":309},"'rgba(43,35,26)'",[37,55557,55538],{"class":54},[37,55559,55560,55562,55565,55567,55570,55572,55575],{"class":39,"line":16927},[37,55561,55520],{"class":54},[37,55563,55564],{"class":309},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[37,55566,55526],{"class":54},[37,55568,55569],{"class":309},"'真正的jo厨出现了!'",[37,55571,55532],{"class":54},[37,55573,55574],{"class":309},"'rgba(36,31,33)'",[37,55576,55538],{"class":54},[37,55578,55579,55581,55584,55586,55589,55591,55594],{"class":39,"line":16941},[37,55580,55520],{"class":54},[37,55582,55583],{"class":309},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[37,55585,55526],{"class":54},[37,55587,55588],{"class":309},"'李玉刚:让世界通过b站看到东方大国文化'",[37,55590,55532],{"class":54},[37,55592,55593],{"class":309},"'rgba(139,98,66)'",[37,55595,55538],{"class":54},[37,55597,55598,55600,55603,55605,55608,55610,55613],{"class":39,"line":16953},[37,55599,55520],{"class":54},[37,55601,55602],{"class":309},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[37,55604,55526],{"class":54},[37,55606,55607],{"class":309},"'快来分享你的寒假日常吧'",[37,55609,55532],{"class":54},[37,55611,55612],{"class":309},"'rgba(67,90,92)'",[37,55614,55538],{"class":54},[37,55616,55617,55619,55622,55624,55627,55629,55632],{"class":39,"line":16958},[37,55618,55520],{"class":54},[37,55620,55621],{"class":309},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[37,55623,55526],{"class":54},[37,55625,55626],{"class":309},"'哔哩哔哩小年YEAR'",[37,55628,55532],{"class":54},[37,55630,55631],{"class":309},"'rgba(166,131,143)'",[37,55633,55538],{"class":54},[37,55635,55636,55638,55641,55643,55646,55648,55651],{"class":39,"line":16971},[37,55637,55520],{"class":54},[37,55639,55640],{"class":309},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[37,55642,55526],{"class":54},[37,55644,55645],{"class":309},"'一站式解决你的电脑配置问题'",[37,55647,55532],{"class":54},[37,55649,55650],{"class":309},"'rgba(53,29,25)'",[37,55652,55538],{"class":54},[37,55654,55655,55657,55660,55662,55665,55667,55670],{"class":39,"line":16976},[37,55656,55520],{"class":54},[37,55658,55659],{"class":309},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[37,55661,55526],{"class":54},[37,55663,55664],{"class":309},"'谁不想和小猫咪贴贴呢?'",[37,55666,55532],{"class":54},[37,55668,55669],{"class":309},"'rgba(99,72,114)'",[37,55671,55672],{"class":54}," }\n",[37,55674,55675],{"class":39,"line":16981},[37,55676,53177],{"class":54},[37,55678,55679,55681,55684,55686,55688,55690,55692,55695],{"class":39,"line":16986},[37,55680,11293],{"class":50},[37,55682,55683],{"class":82}," img",[37,55685,13636],{"class":50},[37,55687,54464],{"class":54},[37,55689,54467],{"class":2035},[37,55691,208],{"class":54},[37,55693,55694],{"class":309},"'.slider-wrapper img'",[37,55696,214],{"class":54},[37,55698,55699,55701,55703,55705,55707,55709,55711,55714],{"class":39,"line":16999},[37,55700,11293],{"class":50},[37,55702,6897],{"class":82},[37,55704,13636],{"class":50},[37,55706,54464],{"class":54},[37,55708,54467],{"class":2035},[37,55710,208],{"class":54},[37,55712,55713],{"class":309},"'.slider-footer p'",[37,55715,214],{"class":54},[37,55717,55718,55720,55723,55725,55727,55729,55731,55734],{"class":39,"line":17004},[37,55719,11293],{"class":50},[37,55721,55722],{"class":82}," color",[37,55724,13636],{"class":50},[37,55726,54464],{"class":54},[37,55728,54467],{"class":2035},[37,55730,208],{"class":54},[37,55732,55733],{"class":309},"'.slider-footer'",[37,55735,214],{"class":54},[37,55737,55738,55740,55743,55745,55747,55750,55752,55755],{"class":39,"line":32702},[37,55739,11293],{"class":50},[37,55741,55742],{"class":82}," lis",[37,55744,13636],{"class":50},[37,55746,54464],{"class":54},[37,55748,55749],{"class":2035},"querySelectorAll",[37,55751,208],{"class":54},[37,55753,55754],{"class":309},"'.slider-footer ul li'",[37,55756,214],{"class":54},[37,55758,55759,55761,55763,55765],{"class":39,"line":32708},[37,55760,52287],{"class":50},[37,55762,9510],{"class":54},[37,55764,70],{"class":50},[37,55766,55767],{"class":82}," 1\n",[37,55769,55770,55772,55775,55777,55779,55781,55783],{"class":39,"line":32714},[37,55771,52287],{"class":50},[37,55773,55774],{"class":54}," timer ",[37,55776,70],{"class":50},[37,55778,54512],{"class":2035},[37,55780,208],{"class":54},[37,55782,54517],{"class":50},[37,55784,54520],{"class":54},[37,55786,55787,55790,55792],{"class":39,"line":32720},[37,55788,55789],{"class":54},"      img.src ",[37,55791,70],{"class":50},[37,55793,55794],{"class":54}," arrImage[i].url\n",[37,55796,55797,55800,55802],{"class":39,"line":32726},[37,55798,55799],{"class":54},"      p.innerHTML ",[37,55801,70],{"class":50},[37,55803,55804],{"class":54}," arrImage[i].title\n",[37,55806,55807,55810,55812],{"class":39,"line":32737},[37,55808,55809],{"class":54},"      color.style.backgroundColor ",[37,55811,70],{"class":50},[37,55813,55814],{"class":54}," arrImage[i].color\n",[37,55816,55817],{"class":39,"line":32743},[37,55818,55819],{"class":43},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[37,55821,55822],{"class":39,"line":32763},[37,55823,55824],{"class":43},"      \u002F\u002F li.classList.add('activate')\n",[37,55826,55827],{"class":39,"line":32769},[37,55828,55829],{"class":43},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[37,55831,55832],{"class":39,"line":32780},[37,55833,55834],{"class":43},"      \u002F\u002F lis[i].classList.remove('activate')\n",[37,55836,55837,55840,55842,55844,55847,55850,55853,55855,55858],{"class":39,"line":32786},[37,55838,55839],{"class":54},"      document.",[37,55841,54467],{"class":2035},[37,55843,208],{"class":54},[37,55845,55846],{"class":309},"'.activate'",[37,55848,55849],{"class":54},")?.classList.",[37,55851,55852],{"class":2035},"toggle",[37,55854,208],{"class":54},[37,55856,55857],{"class":309},"'activate'",[37,55859,214],{"class":54},[37,55861,55862,55865,55867,55869,55871],{"class":39,"line":32792},[37,55863,55864],{"class":54},"      lis[i].classList.",[37,55866,5406],{"class":2035},[37,55868,208],{"class":54},[37,55870,55857],{"class":309},[37,55872,214],{"class":54},[37,55874,55875],{"class":39,"line":32798},[37,55876,2472],{"emptyLinePlaceholder":131},[37,55878,55879,55882,55884,55886,55888,55890,55892,55894,55897],{"class":39,"line":32804},[37,55880,55881],{"class":54},"      i ",[37,55883,70],{"class":50},[37,55885,54551],{"class":54},[37,55887,685],{"class":50},[37,55889,25191],{"class":82},[37,55891,13786],{"class":54},[37,55893,533],{"class":50},[37,55895,55896],{"class":54}," arrImage.",[37,55898,55899],{"class":82},"length\n",[37,55901,55902],{"class":39,"line":32810},[37,55903,2472],{"emptyLinePlaceholder":131},[37,55905,55906,55908,55910],{"class":39,"line":32816},[37,55907,54603],{"class":54},[37,55909,6482],{"class":82},[37,55911,214],{"class":54},[37,55913,55914,55916,55918],{"class":39,"line":32822},[37,55915,52485],{"class":54},[37,55917,51881],{"class":51368},[37,55919,51375],{"class":54},[37,55921,55922,55924,55926],{"class":39,"line":32842},[37,55923,51853],{"class":54},[37,55925,51868],{"class":51368},[37,55927,51375],{"class":54},[37,55929,55930],{"class":39,"line":32848},[37,55931,2472],{"emptyLinePlaceholder":131},[37,55933,55934,55936,55938],{"class":39,"line":32864},[37,55935,51853],{"class":54},[37,55937,50703],{"class":51368},[37,55939,51375],{"class":54},[14,55941,55942],{},[119,55943],{"alt":32,"src":55944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,55946,55947],{},"?.就是短路保护,确保输出正常进行",[14,55949,55950],{},"不要忘记取余%,有时候可以用",[14,55952,55953],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[158,55955,55956],{"start":47},[161,55957,55958],{},"法2",[27,55960,55962],{"className":50701,"code":55961,"language":50703,"meta":32,"style":32},"\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",[34,55963,55964,55974,55988,55992,56000,56014,56034,56046,56054,56060,56070,56080,56084,56088,56094,56104,56108,56112,56118,56128,56140,56152,56166,56170,56174,56180,56190,56200,56210,56222,56234,56244,56248,56252,56260,56270,56282,56294,56306,56310,56314,56320,56330,56342,56354,56364,56374,56384,56396,56408,56412,56416,56424,56436,56448,56474,56486,56490,56494,56500,56510,56514,56522,56530,56534,56542,56556,56570,56590,56598,56612,56624,56632,56650,56662,56674,56686,56698,56710,56722,56734,56742,56750,56758,56766,56777,56793,56809,56825,56841,56857,56873,56889,56905,56909,56914,56932,56950,56960,56965,56970,56981,56987,57002,57011,57015,57020,57029,57034,57043,57048,57053,57058,57081,57111,57115,57123,57127,57135,57143,57147],{"__ignoreMap":32},[37,55965,55966,55968,55970,55972],{"class":39,"line":40},[37,55967,51365],{"class":54},[37,55969,51369],{"class":51368},[37,55971,51372],{"class":2035},[37,55973,51375],{"class":54},[37,55975,55976,55978,55980,55982,55984,55986],{"class":39,"line":47},[37,55977,1113],{"class":54},[37,55979,50703],{"class":51368},[37,55981,51384],{"class":2035},[37,55983,70],{"class":54},[37,55985,51389],{"class":309},[37,55987,51375],{"class":54},[37,55989,55990],{"class":39,"line":58},[37,55991,2472],{"emptyLinePlaceholder":131},[37,55993,55994,55996,55998],{"class":39,"line":64},[37,55995,1113],{"class":54},[37,55997,51402],{"class":51368},[37,55999,51375],{"class":54},[37,56001,56002,56004,56006,56008,56010,56012],{"class":39,"line":76},[37,56003,52212],{"class":54},[37,56005,51412],{"class":51368},[37,56007,51415],{"class":2035},[37,56009,70],{"class":54},[37,56011,51420],{"class":309},[37,56013,51375],{"class":54},[37,56015,56016,56018,56020,56022,56024,56026,56028,56030,56032],{"class":39,"line":92},[37,56017,52212],{"class":54},[37,56019,51412],{"class":51368},[37,56021,14992],{"class":2035},[37,56023,70],{"class":54},[37,56025,51459],{"class":309},[37,56027,51439],{"class":2035},[37,56029,70],{"class":54},[37,56031,51466],{"class":309},[37,56033,51375],{"class":54},[37,56035,56036,56038,56040,56042,56044],{"class":39,"line":97},[37,56037,52212],{"class":54},[37,56039,51475],{"class":51368},[37,56041,51478],{"class":54},[37,56043,51475],{"class":51368},[37,56045,51375],{"class":54},[37,56047,56048,56050,56052],{"class":39,"line":107},[37,56049,52212],{"class":54},[37,56051,123],{"class":51368},[37,56053,51375],{"class":54},[37,56055,56056,56058],{"class":39,"line":1390},[37,56057,6475],{"class":51368},[37,56059,15644],{"class":54},[37,56061,56062,56064,56066,56068],{"class":39,"line":1402},[37,56063,54763],{"class":82},[37,56065,51505],{"class":54},[37,56067,396],{"class":82},[37,56069,1364],{"class":54},[37,56071,56072,56074,56076,56078],{"class":39,"line":1684},[37,56073,54774],{"class":82},[37,56075,51505],{"class":54},[37,56077,396],{"class":82},[37,56079,1364],{"class":54},[37,56081,56082],{"class":39,"line":1689},[37,56083,2259],{"class":54},[37,56085,56086],{"class":39,"line":1695},[37,56087,2472],{"emptyLinePlaceholder":131},[37,56089,56090,56092],{"class":39,"line":1700},[37,56091,54793],{"class":51368},[37,56093,15644],{"class":54},[37,56095,56096,56098,56100,56102],{"class":39,"line":1714},[37,56097,54800],{"class":82},[37,56099,51505],{"class":54},[37,56101,54805],{"class":82},[37,56103,1364],{"class":54},[37,56105,56106],{"class":39,"line":1719},[37,56107,2259],{"class":54},[37,56109,56110],{"class":39,"line":1725},[37,56111,2472],{"emptyLinePlaceholder":131},[37,56113,56114,56116],{"class":39,"line":1746},[37,56115,54820],{"class":2035},[37,56117,15644],{"class":54},[37,56119,56120,56122,56124,56126],{"class":39,"line":1751},[37,56121,54827],{"class":82},[37,56123,51505],{"class":54},[37,56125,54832],{"class":82},[37,56127,1364],{"class":54},[37,56129,56130,56132,56134,56136,56138],{"class":39,"line":1765},[37,56131,54839],{"class":82},[37,56133,51505],{"class":54},[37,56135,54844],{"class":82},[37,56137,51560],{"class":50},[37,56139,1364],{"class":54},[37,56141,56142,56144,56146,56148,56150],{"class":39,"line":1770},[37,56143,54853],{"class":82},[37,56145,51505],{"class":54},[37,56147,1611],{"class":82},[37,56149,51560],{"class":50},[37,56151,1364],{"class":54},[37,56153,56154,56156,56158,56160,56162,56164],{"class":39,"line":1799},[37,56155,54774],{"class":82},[37,56157,51505],{"class":54},[37,56159,516],{"class":82},[37,56161,51560],{"class":50},[37,56163,51624],{"class":82},[37,56165,1364],{"class":54},[37,56167,56168],{"class":39,"line":1804},[37,56169,2259],{"class":54},[37,56171,56172],{"class":39,"line":1821},[37,56173,2472],{"emptyLinePlaceholder":131},[37,56175,56176,56178],{"class":39,"line":1826},[37,56177,54888],{"class":2035},[37,56179,15644],{"class":54},[37,56181,56182,56184,56186,56188],{"class":39,"line":1831},[37,56183,54827],{"class":82},[37,56185,51505],{"class":54},[37,56187,54899],{"class":82},[37,56189,1364],{"class":54},[37,56191,56192,56194,56196,56198],{"class":39,"line":1836},[37,56193,54906],{"class":82},[37,56195,51505],{"class":54},[37,56197,396],{"class":82},[37,56199,1364],{"class":54},[37,56201,56202,56204,56206,56208],{"class":39,"line":1850},[37,56203,54917],{"class":82},[37,56205,51505],{"class":54},[37,56207,396],{"class":82},[37,56209,1364],{"class":54},[37,56211,56212,56214,56216,56218,56220],{"class":39,"line":1855},[37,56213,54839],{"class":82},[37,56215,51505],{"class":54},[37,56217,516],{"class":82},[37,56219,533],{"class":50},[37,56221,1364],{"class":54},[37,56223,56224,56226,56228,56230,56232],{"class":39,"line":2649},[37,56225,54853],{"class":82},[37,56227,51505],{"class":54},[37,56229,778],{"class":82},[37,56231,533],{"class":50},[37,56233,1364],{"class":54},[37,56235,56236,56238,56240,56242],{"class":39,"line":2663},[37,56237,54952],{"class":82},[37,56239,51505],{"class":54},[37,56241,54957],{"class":82},[37,56243,1364],{"class":54},[37,56245,56246],{"class":39,"line":2671},[37,56247,2259],{"class":54},[37,56249,56250],{"class":39,"line":2676},[37,56251,2472],{"emptyLinePlaceholder":131},[37,56253,56254,56256,56258],{"class":39,"line":2682},[37,56255,54888],{"class":2035},[37,56257,6897],{"class":51368},[37,56259,15644],{"class":54},[37,56261,56262,56264,56266,56268],{"class":39,"line":2688},[37,56263,54827],{"class":82},[37,56265,51505],{"class":54},[37,56267,54899],{"class":82},[37,56269,1364],{"class":54},[37,56271,56272,56274,56276,56278,56280],{"class":39,"line":2693},[37,56273,54990],{"class":82},[37,56275,51505],{"class":54},[37,56277,1104],{"class":82},[37,56279,51560],{"class":50},[37,56281,1364],{"class":54},[37,56283,56284,56286,56288,56290,56292],{"class":39,"line":8020},[37,56285,54906],{"class":82},[37,56287,51505],{"class":54},[37,56289,903],{"class":82},[37,56291,51560],{"class":50},[37,56293,1364],{"class":54},[37,56295,56296,56298,56300,56302,56304],{"class":39,"line":8044},[37,56297,55015],{"class":82},[37,56299,51505],{"class":54},[37,56301,524],{"class":82},[37,56303,51560],{"class":50},[37,56305,1364],{"class":54},[37,56307,56308],{"class":39,"line":8049},[37,56309,2259],{"class":54},[37,56311,56312],{"class":39,"line":8055},[37,56313,2472],{"emptyLinePlaceholder":131},[37,56315,56316,56318],{"class":39,"line":8082},[37,56317,55036],{"class":51368},[37,56319,15644],{"class":54},[37,56321,56322,56324,56326,56328],{"class":39,"line":8087},[37,56323,54827],{"class":82},[37,56325,51505],{"class":54},[37,56327,54899],{"class":82},[37,56329,1364],{"class":54},[37,56331,56332,56334,56336,56338,56340],{"class":39,"line":8093},[37,56333,55015],{"class":82},[37,56335,51505],{"class":54},[37,56337,984],{"class":82},[37,56339,51560],{"class":50},[37,56341,1364],{"class":54},[37,56343,56344,56346,56348,56350,56352],{"class":39,"line":8105},[37,56345,54906],{"class":82},[37,56347,51505],{"class":54},[37,56349,903],{"class":82},[37,56351,51560],{"class":50},[37,56353,1364],{"class":54},[37,56355,56356,56358,56360,56362],{"class":39,"line":8117},[37,56357,55077],{"class":82},[37,56359,51505],{"class":54},[37,56361,51545],{"class":82},[37,56363,1364],{"class":54},[37,56365,56366,56368,56370,56372],{"class":39,"line":8129},[37,56367,55088],{"class":82},[37,56369,51505],{"class":54},[37,56371,51736],{"class":82},[37,56373,1364],{"class":54},[37,56375,56376,56378,56380,56382],{"class":39,"line":9788},[37,56377,54827],{"class":82},[37,56379,51505],{"class":54},[37,56381,54899],{"class":82},[37,56383,1364],{"class":54},[37,56385,56386,56388,56390,56392,56394],{"class":39,"line":9813},[37,56387,54839],{"class":82},[37,56389,51505],{"class":54},[37,56391,4064],{"class":82},[37,56393,51560],{"class":50},[37,56395,1364],{"class":54},[37,56397,56398,56400,56402,56404,56406],{"class":39,"line":9836},[37,56399,54853],{"class":82},[37,56401,51505],{"class":54},[37,56403,903],{"class":82},[37,56405,51560],{"class":50},[37,56407,1364],{"class":54},[37,56409,56410],{"class":39,"line":9860},[37,56411,2259],{"class":54},[37,56413,56414],{"class":39,"line":9865},[37,56415,2472],{"emptyLinePlaceholder":131},[37,56417,56418,56420,56422],{"class":39,"line":9870},[37,56419,55036],{"class":51368},[37,56421,55143],{"class":51368},[37,56423,15644],{"class":54},[37,56425,56426,56428,56430,56432,56434],{"class":39,"line":9875},[37,56427,54839],{"class":82},[37,56429,51505],{"class":54},[37,56431,903],{"class":82},[37,56433,51560],{"class":50},[37,56435,1364],{"class":54},[37,56437,56438,56440,56442,56444,56446],{"class":39,"line":9884},[37,56439,54853],{"class":82},[37,56441,51505],{"class":54},[37,56443,903],{"class":82},[37,56445,51560],{"class":50},[37,56447,1364],{"class":54},[37,56449,56450,56452,56454,56456,56458,56460,56462,56464,56466,56468,56470,56472],{"class":39,"line":9889},[37,56451,54952],{"class":82},[37,56453,51505],{"class":54},[37,56455,55178],{"class":82},[37,56457,208],{"class":54},[37,56459,396],{"class":82},[37,56461,12507],{"class":54},[37,56463,396],{"class":82},[37,56465,12507],{"class":54},[37,56467,396],{"class":82},[37,56469,12507],{"class":54},[37,56471,55195],{"class":82},[37,56473,2791],{"class":54},[37,56475,56476,56478,56480,56482,56484],{"class":39,"line":9895},[37,56477,55202],{"class":82},[37,56479,51505],{"class":54},[37,56481,650],{"class":82},[37,56483,51560],{"class":50},[37,56485,1364],{"class":54},[37,56487,56488],{"class":39,"line":9916},[37,56489,2259],{"class":54},[37,56491,56492],{"class":39,"line":9922},[37,56493,2472],{"emptyLinePlaceholder":131},[37,56495,56496,56498],{"class":39,"line":9936},[37,56497,55223],{"class":2035},[37,56499,15644],{"class":54},[37,56501,56502,56504,56506,56508],{"class":39,"line":9942},[37,56503,54952],{"class":82},[37,56505,51505],{"class":54},[37,56507,55234],{"class":82},[37,56509,1364],{"class":54},[37,56511,56512],{"class":39,"line":9969},[37,56513,2259],{"class":54},[37,56515,56516,56518,56520],{"class":39,"line":9978},[37,56517,52485],{"class":54},[37,56519,123],{"class":51368},[37,56521,51375],{"class":54},[37,56523,56524,56526,56528],{"class":39,"line":9984},[37,56525,51853],{"class":54},[37,56527,51402],{"class":51368},[37,56529,51375],{"class":54},[37,56531,56532],{"class":39,"line":9992},[37,56533,2472],{"emptyLinePlaceholder":131},[37,56535,56536,56538,56540],{"class":39,"line":9997},[37,56537,1113],{"class":54},[37,56539,51868],{"class":51368},[37,56541,51375],{"class":54},[37,56543,56544,56546,56548,56550,56552,56554],{"class":39,"line":16676},[37,56545,52212],{"class":54},[37,56547,51679],{"class":51368},[37,56549,53554],{"class":2035},[37,56551,70],{"class":54},[37,56553,53559],{"class":309},[37,56555,51375],{"class":54},[37,56557,56558,56560,56562,56564,56566,56568],{"class":39,"line":16682},[37,56559,51409],{"class":54},[37,56561,51679],{"class":51368},[37,56563,53554],{"class":2035},[37,56565,70],{"class":54},[37,56567,55295],{"class":309},[37,56569,51375],{"class":54},[37,56571,56572,56574,56576,56578,56580,56582,56584,56586,56588],{"class":39,"line":16705},[37,56573,55302],{"class":54},[37,56575,119],{"class":51368},[37,56577,55307],{"class":2035},[37,56579,70],{"class":54},[37,56581,55312],{"class":309},[37,56583,55315],{"class":2035},[37,56585,70],{"class":54},[37,56587,7724],{"class":309},[37,56589,51375],{"class":54},[37,56591,56592,56594,56596],{"class":39,"line":16711},[37,56593,51844],{"class":54},[37,56595,51679],{"class":51368},[37,56597,51375],{"class":54},[37,56599,56600,56602,56604,56606,56608,56610],{"class":39,"line":16734},[37,56601,51409],{"class":54},[37,56603,51679],{"class":51368},[37,56605,53554],{"class":2035},[37,56607,70],{"class":54},[37,56609,55342],{"class":309},[37,56611,51375],{"class":54},[37,56613,56614,56616,56618,56620,56622],{"class":39,"line":16748},[37,56615,55302],{"class":54},[37,56617,14],{"class":51368},[37,56619,55353],{"class":54},[37,56621,14],{"class":51368},[37,56623,51375],{"class":54},[37,56625,56626,56628,56630],{"class":39,"line":16768},[37,56627,55302],{"class":54},[37,56629,1210],{"class":51368},[37,56631,51375],{"class":54},[37,56633,56634,56636,56638,56640,56642,56644,56646,56648],{"class":39,"line":16774},[37,56635,55370],{"class":54},[37,56637,161],{"class":51368},[37,56639,53554],{"class":2035},[37,56641,70],{"class":54},[37,56643,55379],{"class":309},[37,56645,55382],{"class":54},[37,56647,161],{"class":51368},[37,56649,51375],{"class":54},[37,56651,56652,56654,56656,56658,56660],{"class":39,"line":16785},[37,56653,55370],{"class":54},[37,56655,161],{"class":51368},[37,56657,55382],{"class":54},[37,56659,161],{"class":51368},[37,56661,51375],{"class":54},[37,56663,56664,56666,56668,56670,56672],{"class":39,"line":16808},[37,56665,55370],{"class":54},[37,56667,161],{"class":51368},[37,56669,55382],{"class":54},[37,56671,161],{"class":51368},[37,56673,51375],{"class":54},[37,56675,56676,56678,56680,56682,56684],{"class":39,"line":16830},[37,56677,55370],{"class":54},[37,56679,161],{"class":51368},[37,56681,55382],{"class":54},[37,56683,161],{"class":51368},[37,56685,51375],{"class":54},[37,56687,56688,56690,56692,56694,56696],{"class":39,"line":16835},[37,56689,55370],{"class":54},[37,56691,161],{"class":51368},[37,56693,55382],{"class":54},[37,56695,161],{"class":51368},[37,56697,51375],{"class":54},[37,56699,56700,56702,56704,56706,56708],{"class":39,"line":16841},[37,56701,55370],{"class":54},[37,56703,161],{"class":51368},[37,56705,55382],{"class":54},[37,56707,161],{"class":51368},[37,56709,51375],{"class":54},[37,56711,56712,56714,56716,56718,56720],{"class":39,"line":16855},[37,56713,55370],{"class":54},[37,56715,161],{"class":51368},[37,56717,55382],{"class":54},[37,56719,161],{"class":51368},[37,56721,51375],{"class":54},[37,56723,56724,56726,56728,56730,56732],{"class":39,"line":16868},[37,56725,55370],{"class":54},[37,56727,161],{"class":51368},[37,56729,55382],{"class":54},[37,56731,161],{"class":51368},[37,56733,51375],{"class":54},[37,56735,56736,56738,56740],{"class":39,"line":16873},[37,56737,55475],{"class":54},[37,56739,1210],{"class":51368},[37,56741,51375],{"class":54},[37,56743,56744,56746,56748],{"class":39,"line":16887},[37,56745,51844],{"class":54},[37,56747,51679],{"class":51368},[37,56749,51375],{"class":54},[37,56751,56752,56754,56756],{"class":39,"line":16892},[37,56753,52485],{"class":54},[37,56755,51679],{"class":51368},[37,56757,51375],{"class":54},[37,56759,56760,56762,56764],{"class":39,"line":16898},[37,56761,52212],{"class":54},[37,56763,51881],{"class":51368},[37,56765,51375],{"class":54},[37,56767,56768,56770,56773,56775],{"class":39,"line":16903},[37,56769,11293],{"class":50},[37,56771,56772],{"class":82}," sliderData",[37,56774,13636],{"class":50},[37,56776,55515],{"class":54},[37,56778,56779,56781,56783,56785,56787,56789,56791],{"class":39,"line":16917},[37,56780,55520],{"class":54},[37,56782,55523],{"class":309},[37,56784,55526],{"class":54},[37,56786,55529],{"class":309},[37,56788,55532],{"class":54},[37,56790,55535],{"class":309},[37,56792,55538],{"class":54},[37,56794,56795,56797,56799,56801,56803,56805,56807],{"class":39,"line":16922},[37,56796,55520],{"class":54},[37,56798,55545],{"class":309},[37,56800,55526],{"class":54},[37,56802,55550],{"class":309},[37,56804,55532],{"class":54},[37,56806,55555],{"class":309},[37,56808,55538],{"class":54},[37,56810,56811,56813,56815,56817,56819,56821,56823],{"class":39,"line":16927},[37,56812,55520],{"class":54},[37,56814,55564],{"class":309},[37,56816,55526],{"class":54},[37,56818,55569],{"class":309},[37,56820,55532],{"class":54},[37,56822,55574],{"class":309},[37,56824,55538],{"class":54},[37,56826,56827,56829,56831,56833,56835,56837,56839],{"class":39,"line":16941},[37,56828,55520],{"class":54},[37,56830,55583],{"class":309},[37,56832,55526],{"class":54},[37,56834,55588],{"class":309},[37,56836,55532],{"class":54},[37,56838,55593],{"class":309},[37,56840,55538],{"class":54},[37,56842,56843,56845,56847,56849,56851,56853,56855],{"class":39,"line":16953},[37,56844,55520],{"class":54},[37,56846,55602],{"class":309},[37,56848,55526],{"class":54},[37,56850,55607],{"class":309},[37,56852,55532],{"class":54},[37,56854,55612],{"class":309},[37,56856,55538],{"class":54},[37,56858,56859,56861,56863,56865,56867,56869,56871],{"class":39,"line":16958},[37,56860,55520],{"class":54},[37,56862,55621],{"class":309},[37,56864,55526],{"class":54},[37,56866,55626],{"class":309},[37,56868,55532],{"class":54},[37,56870,55631],{"class":309},[37,56872,55538],{"class":54},[37,56874,56875,56877,56879,56881,56883,56885,56887],{"class":39,"line":16971},[37,56876,55520],{"class":54},[37,56878,55640],{"class":309},[37,56880,55526],{"class":54},[37,56882,55645],{"class":309},[37,56884,55532],{"class":54},[37,56886,55650],{"class":309},[37,56888,55538],{"class":54},[37,56890,56891,56893,56895,56897,56899,56901,56903],{"class":39,"line":16976},[37,56892,55520],{"class":54},[37,56894,55659],{"class":309},[37,56896,55526],{"class":54},[37,56898,55664],{"class":309},[37,56900,55532],{"class":54},[37,56902,55669],{"class":309},[37,56904,55672],{"class":54},[37,56906,56907],{"class":39,"line":16981},[37,56908,53177],{"class":54},[37,56910,56911],{"class":39,"line":16986},[37,56912,56913],{"class":43},"    \u002F\u002F 1.获取元素\n",[37,56915,56916,56918,56920,56922,56924,56926,56928,56930],{"class":39,"line":16999},[37,56917,11293],{"class":50},[37,56919,55683],{"class":82},[37,56921,13636],{"class":50},[37,56923,54464],{"class":54},[37,56925,54467],{"class":2035},[37,56927,208],{"class":54},[37,56929,55694],{"class":309},[37,56931,214],{"class":54},[37,56933,56934,56936,56938,56940,56942,56944,56946,56948],{"class":39,"line":17004},[37,56935,11293],{"class":50},[37,56937,6897],{"class":82},[37,56939,13636],{"class":50},[37,56941,54464],{"class":54},[37,56943,54467],{"class":2035},[37,56945,208],{"class":54},[37,56947,55713],{"class":309},[37,56949,214],{"class":54},[37,56951,56952,56954,56956,56958],{"class":39,"line":32702},[37,56953,52287],{"class":50},[37,56955,9510],{"class":54},[37,56957,70],{"class":50},[37,56959,47401],{"class":82},[37,56961,56962],{"class":39,"line":32708},[37,56963,56964],{"class":43},"    \u002F\u002F 2.开启定时器\n",[37,56966,56967],{"class":39,"line":32714},[37,56968,56969],{"class":43},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[37,56971,56972,56975,56977,56979],{"class":39,"line":32720},[37,56973,56974],{"class":2035},"    setInterval",[37,56976,208],{"class":54},[37,56978,54517],{"class":50},[37,56980,54520],{"class":54},[37,56982,56983,56985],{"class":39,"line":32726},[37,56984,54525],{"class":54},[37,56986,2774],{"class":50},[37,56988,56989,56991,56993,56995,56998,57000],{"class":39,"line":32737},[37,56990,54548],{"class":50},[37,56992,54551],{"class":54},[37,56994,1782],{"class":50},[37,56996,56997],{"class":54}," sliderData.",[37,56999,52036],{"class":82},[37,57001,12514],{"class":54},[37,57003,57004,57007,57009],{"class":39,"line":32743},[37,57005,57006],{"class":54},"        i ",[37,57008,70],{"class":50},[37,57010,47401],{"class":82},[37,57012,57013],{"class":39,"line":32763},[37,57014,52466],{"class":54},[37,57016,57017],{"class":39,"line":32769},[37,57018,57019],{"class":43},"      \u002F\u002F 更换图片路径\n",[37,57021,57022,57024,57026],{"class":39,"line":32780},[37,57023,55789],{"class":54},[37,57025,70],{"class":50},[37,57027,57028],{"class":54}," sliderData[i].url\n",[37,57030,57031],{"class":39,"line":32786},[37,57032,57033],{"class":43},"      \u002F\u002F 把文字写到p里面\n",[37,57035,57036,57038,57040],{"class":39,"line":32792},[37,57037,55799],{"class":54},[37,57039,70],{"class":50},[37,57041,57042],{"class":54}," sliderData[i].title\n",[37,57044,57045],{"class":39,"line":32798},[37,57046,57047],{"class":43},"      \u002F\u002F 小圆点\n",[37,57049,57050],{"class":39,"line":32804},[37,57051,57052],{"class":43},"      \u002F\u002F 先删除以前的active\n",[37,57054,57055],{"class":39,"line":32810},[37,57056,57057],{"class":43},"      \u002F\u002F 只让当前li添加active\n",[37,57059,57060,57062,57064,57066,57069,57072,57075,57077,57079],{"class":39,"line":32816},[37,57061,55839],{"class":54},[37,57063,54467],{"class":2035},[37,57065,208],{"class":54},[37,57067,57068],{"class":309},"'.slider-footer .activate'",[37,57070,57071],{"class":54},").classList.",[37,57073,57074],{"class":2035},"remove",[37,57076,208],{"class":54},[37,57078,55857],{"class":309},[37,57080,214],{"class":54},[37,57082,57083,57085,57087,57089,57092,57094,57096,57098,57101,57103,57105,57107,57109],{"class":39,"line":32822},[37,57084,55839],{"class":54},[37,57086,54467],{"class":2035},[37,57088,208],{"class":54},[37,57090,57091],{"class":309},"`.slider-footer ul li:nth-child(${",[37,57093,645],{"class":54},[37,57095,45635],{"class":50},[37,57097,25191],{"class":82},[37,57099,57100],{"class":309},"})`",[37,57102,57071],{"class":54},[37,57104,5406],{"class":2035},[37,57106,208],{"class":54},[37,57108,55857],{"class":309},[37,57110,214],{"class":54},[37,57112,57113],{"class":39,"line":32842},[37,57114,2472],{"emptyLinePlaceholder":131},[37,57116,57117,57119,57121],{"class":39,"line":32848},[37,57118,54603],{"class":54},[37,57120,6482],{"class":82},[37,57122,214],{"class":54},[37,57124,57125],{"class":39,"line":32864},[37,57126,2472],{"emptyLinePlaceholder":131},[37,57128,57129,57131,57133],{"class":39,"line":32870},[37,57130,52485],{"class":54},[37,57132,51881],{"class":51368},[37,57134,51375],{"class":54},[37,57136,57137,57139,57141],{"class":39,"line":32884},[37,57138,51853],{"class":54},[37,57140,51868],{"class":51368},[37,57142,51375],{"class":54},[37,57144,57145],{"class":39,"line":32890},[37,57146,2472],{"emptyLinePlaceholder":131},[37,57148,57149,57151,57153],{"class":39,"line":32905},[37,57150,51853],{"class":54},[37,57152,50703],{"class":51368},[37,57154,51375],{"class":54},[175,57156,57158],{"id":57157},"_317-重要知识点","3.1.7 重要知识点",[14,57160,57161,57162],{},"浏览器在渲染文本时， ",[354,57163,57164],{},"没有空格或换行符就没有“断行点”",[14,57166,57167],{},[119,57168],{"alt":32,"src":57169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57171,57172],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57174,57175],{},[119,57176],{"alt":32,"src":57177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57179,57180],{},[119,57181],{"alt":32,"src":57182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[146,57184,57186],{"id":57185},"_32-dom事件基础","3.2 DOM事件基础",[175,57188,57190],{"id":57189},"_321-事件监听","3.2.1 事件监听",[14,57192,57193],{},[119,57194],{"alt":32,"src":57195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57197,57198],{},"事件监听有响应的发生",[14,57200,57201],{},[119,57202],{"alt":32,"src":57203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57205,57206],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57208,57209],{},"对于有名函数,要执行的函数名后边不要加()",[175,57211,57213],{"id":57212},"_322-随机点名案例","3.2.2 随机点名案例",[27,57215,57217],{"className":50701,"code":57216,"language":50703,"meta":32,"style":32},"\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",[34,57218,57219,57229,57243,57247,57255,57269,57289,57301,57309,57315,57325,57335,57339,57343,57350,57361,57365,57369,57375,57387,57401,57411,57423,57436,57440,57444,57451,57455,57468,57480,57492,57496,57500,57504,57511,57521,57525,57529,57538,57550,57562,57577,57581,57589,57597,57601,57609,57622,57636,57649,57669,57677,57692,57712,57732,57740,57744,57752,57757,57793,57813,57818,57837,57842,57853,57858,57869,57874,57893,57908,57913,57939,57949,57958,57963,57979,57984,57989,57994,58009,58013,58017,58022,58041,58058,58066,58071,58086,58090,58094,58102,58110,58114],{"__ignoreMap":32},[37,57220,57221,57223,57225,57227],{"class":39,"line":40},[37,57222,51365],{"class":54},[37,57224,51369],{"class":51368},[37,57226,51372],{"class":2035},[37,57228,51375],{"class":54},[37,57230,57231,57233,57235,57237,57239,57241],{"class":39,"line":47},[37,57232,1113],{"class":54},[37,57234,50703],{"class":51368},[37,57236,51384],{"class":2035},[37,57238,70],{"class":54},[37,57240,51389],{"class":309},[37,57242,51375],{"class":54},[37,57244,57245],{"class":39,"line":58},[37,57246,2472],{"emptyLinePlaceholder":131},[37,57248,57249,57251,57253],{"class":39,"line":64},[37,57250,1113],{"class":54},[37,57252,51402],{"class":51368},[37,57254,51375],{"class":54},[37,57256,57257,57259,57261,57263,57265,57267],{"class":39,"line":76},[37,57258,52212],{"class":54},[37,57260,51412],{"class":51368},[37,57262,51415],{"class":2035},[37,57264,70],{"class":54},[37,57266,51420],{"class":309},[37,57268,51375],{"class":54},[37,57270,57271,57273,57275,57277,57279,57281,57283,57285,57287],{"class":39,"line":92},[37,57272,52212],{"class":54},[37,57274,51412],{"class":51368},[37,57276,14992],{"class":2035},[37,57278,70],{"class":54},[37,57280,51459],{"class":309},[37,57282,51439],{"class":2035},[37,57284,70],{"class":54},[37,57286,51466],{"class":309},[37,57288,51375],{"class":54},[37,57290,57291,57293,57295,57297,57299],{"class":39,"line":97},[37,57292,52212],{"class":54},[37,57294,51475],{"class":51368},[37,57296,51478],{"class":54},[37,57298,51475],{"class":51368},[37,57300,51375],{"class":54},[37,57302,57303,57305,57307],{"class":39,"line":107},[37,57304,52212],{"class":54},[37,57306,123],{"class":51368},[37,57308,51375],{"class":54},[37,57310,57311,57313],{"class":39,"line":1390},[37,57312,6475],{"class":51368},[37,57314,15644],{"class":54},[37,57316,57317,57319,57321,57323],{"class":39,"line":1402},[37,57318,54774],{"class":82},[37,57320,51505],{"class":54},[37,57322,396],{"class":82},[37,57324,1364],{"class":54},[37,57326,57327,57329,57331,57333],{"class":39,"line":1684},[37,57328,54763],{"class":82},[37,57330,51505],{"class":54},[37,57332,396],{"class":82},[37,57334,1364],{"class":54},[37,57336,57337],{"class":39,"line":1689},[37,57338,2259],{"class":54},[37,57340,57341],{"class":39,"line":1695},[37,57342,2472],{"emptyLinePlaceholder":131},[37,57344,57345,57348],{"class":39,"line":1700},[37,57346,57347],{"class":51368},"    h2",[37,57349,15644],{"class":54},[37,57351,57352,57355,57357,57359],{"class":39,"line":1714},[37,57353,57354],{"class":82},"      text-align",[37,57356,51505],{"class":54},[37,57358,51660],{"class":82},[37,57360,1364],{"class":54},[37,57362,57363],{"class":39,"line":1719},[37,57364,2259],{"class":54},[37,57366,57367],{"class":39,"line":1725},[37,57368,2472],{"emptyLinePlaceholder":131},[37,57370,57371,57373],{"class":39,"line":1746},[37,57372,54820],{"class":2035},[37,57374,15644],{"class":54},[37,57376,57377,57379,57381,57383,57385],{"class":39,"line":1751},[37,57378,54839],{"class":82},[37,57380,51505],{"class":54},[37,57382,1611],{"class":82},[37,57384,51560],{"class":50},[37,57386,1364],{"class":54},[37,57388,57389,57391,57393,57395,57397,57399],{"class":39,"line":1765},[37,57390,54774],{"class":82},[37,57392,51505],{"class":54},[37,57394,859],{"class":82},[37,57396,51560],{"class":50},[37,57398,51624],{"class":82},[37,57400,1364],{"class":54},[37,57402,57403,57405,57407,57409],{"class":39,"line":1770},[37,57404,55077],{"class":82},[37,57406,51505],{"class":54},[37,57408,51545],{"class":82},[37,57410,1364],{"class":54},[37,57412,57413,57415,57417,57419,57421],{"class":39,"line":1799},[37,57414,54990],{"class":82},[37,57416,51505],{"class":54},[37,57418,1028],{"class":82},[37,57420,51560],{"class":50},[37,57422,1364],{"class":54},[37,57424,57425,57428,57430,57432,57434],{"class":39,"line":1804},[37,57426,57427],{"class":82},"      line-height",[37,57429,51505],{"class":54},[37,57431,606],{"class":82},[37,57433,51560],{"class":50},[37,57435,1364],{"class":54},[37,57437,57438],{"class":39,"line":1821},[37,57439,2259],{"class":54},[37,57441,57442],{"class":39,"line":1826},[37,57443,2472],{"emptyLinePlaceholder":131},[37,57445,57446,57449],{"class":39,"line":1831},[37,57447,57448],{"class":2035},"    .qs",[37,57450,15644],{"class":54},[37,57452,57453],{"class":39,"line":1836},[37,57454,2472],{"emptyLinePlaceholder":131},[37,57456,57457,57459,57461,57464,57466],{"class":39,"line":1850},[37,57458,54839],{"class":82},[37,57460,51505],{"class":54},[37,57462,57463],{"class":82},"450",[37,57465,51560],{"class":50},[37,57467,1364],{"class":54},[37,57469,57470,57472,57474,57476,57478],{"class":39,"line":1855},[37,57471,54853],{"class":82},[37,57473,51505],{"class":54},[37,57475,606],{"class":82},[37,57477,51560],{"class":50},[37,57479,1364],{"class":54},[37,57481,57482,57485,57487,57490],{"class":39,"line":2649},[37,57483,57484],{"class":82},"      color",[37,57486,51505],{"class":54},[37,57488,57489],{"class":82},"red",[37,57491,1364],{"class":54},[37,57493,57494],{"class":39,"line":2663},[37,57495,2472],{"emptyLinePlaceholder":131},[37,57497,57498],{"class":39,"line":2671},[37,57499,2259],{"class":54},[37,57501,57502],{"class":39,"line":2676},[37,57503,2472],{"emptyLinePlaceholder":131},[37,57505,57506,57509],{"class":39,"line":2682},[37,57507,57508],{"class":2035},"    .btns",[37,57510,15644],{"class":54},[37,57512,57513,57515,57517,57519],{"class":39,"line":2688},[37,57514,57354],{"class":82},[37,57516,51505],{"class":54},[37,57518,51660],{"class":82},[37,57520,1364],{"class":54},[37,57522,57523],{"class":39,"line":2693},[37,57524,2259],{"class":54},[37,57526,57527],{"class":39,"line":8020},[37,57528,2472],{"emptyLinePlaceholder":131},[37,57530,57531,57533,57536],{"class":39,"line":8044},[37,57532,57508],{"class":2035},[37,57534,57535],{"class":51368}," button",[37,57537,15644],{"class":54},[37,57539,57540,57542,57544,57546,57548],{"class":39,"line":8049},[37,57541,54839],{"class":82},[37,57543,51505],{"class":54},[37,57545,1020],{"class":82},[37,57547,51560],{"class":50},[37,57549,1364],{"class":54},[37,57551,57552,57554,57556,57558,57560],{"class":39,"line":8055},[37,57553,54853],{"class":82},[37,57555,51505],{"class":54},[37,57557,478],{"class":82},[37,57559,51560],{"class":50},[37,57561,1364],{"class":54},[37,57563,57564,57566,57568,57570,57573,57575],{"class":39,"line":8082},[37,57565,54774],{"class":82},[37,57567,51505],{"class":54},[37,57569,396],{"class":82},[37,57571,57572],{"class":82}," 50",[37,57574,51560],{"class":50},[37,57576,1364],{"class":54},[37,57578,57579],{"class":39,"line":8087},[37,57580,2259],{"class":54},[37,57582,57583,57585,57587],{"class":39,"line":8093},[37,57584,52485],{"class":54},[37,57586,123],{"class":51368},[37,57588,51375],{"class":54},[37,57590,57591,57593,57595],{"class":39,"line":8105},[37,57592,51853],{"class":54},[37,57594,51402],{"class":51368},[37,57596,51375],{"class":54},[37,57598,57599],{"class":39,"line":8117},[37,57600,2472],{"emptyLinePlaceholder":131},[37,57602,57603,57605,57607],{"class":39,"line":8129},[37,57604,1113],{"class":54},[37,57606,51868],{"class":51368},[37,57608,51375],{"class":54},[37,57610,57611,57613,57615,57618,57620],{"class":39,"line":9788},[37,57612,52212],{"class":54},[37,57614,146],{"class":51368},[37,57616,57617],{"class":54},">随机点名\u003C\u002F",[37,57619,146],{"class":51368},[37,57621,51375],{"class":54},[37,57623,57624,57626,57628,57630,57632,57634],{"class":39,"line":9813},[37,57625,52212],{"class":54},[37,57627,51679],{"class":51368},[37,57629,53554],{"class":2035},[37,57631,70],{"class":54},[37,57633,53559],{"class":309},[37,57635,51375],{"class":54},[37,57637,57638,57640,57642,57645,57647],{"class":39,"line":9836},[37,57639,51409],{"class":54},[37,57641,37],{"class":51368},[37,57643,57644],{"class":54},">名字是：\u003C\u002F",[37,57646,37],{"class":51368},[37,57648,51375],{"class":54},[37,57650,57651,57653,57655,57657,57659,57662,57665,57667],{"class":39,"line":9860},[37,57652,51409],{"class":54},[37,57654,51679],{"class":51368},[37,57656,53554],{"class":2035},[37,57658,70],{"class":54},[37,57660,57661],{"class":309},"\"qs\"",[37,57663,57664],{"class":54},">这里显示姓名\u003C\u002F",[37,57666,51679],{"class":51368},[37,57668,51375],{"class":54},[37,57670,57671,57673,57675],{"class":39,"line":9865},[37,57672,52485],{"class":54},[37,57674,51679],{"class":51368},[37,57676,51375],{"class":54},[37,57678,57679,57681,57683,57685,57687,57690],{"class":39,"line":9870},[37,57680,52212],{"class":54},[37,57682,51679],{"class":51368},[37,57684,53554],{"class":2035},[37,57686,70],{"class":54},[37,57688,57689],{"class":309},"\"btns\"",[37,57691,51375],{"class":54},[37,57693,57694,57696,57698,57700,57702,57705,57708,57710],{"class":39,"line":9875},[37,57695,51409],{"class":54},[37,57697,53955],{"class":51368},[37,57699,53554],{"class":2035},[37,57701,70],{"class":54},[37,57703,57704],{"class":309},"\"start\"",[37,57706,57707],{"class":54},">开始\u003C\u002F",[37,57709,53955],{"class":51368},[37,57711,51375],{"class":54},[37,57713,57714,57716,57718,57720,57722,57725,57728,57730],{"class":39,"line":9884},[37,57715,51409],{"class":54},[37,57717,53955],{"class":51368},[37,57719,53554],{"class":2035},[37,57721,70],{"class":54},[37,57723,57724],{"class":309},"\"end\"",[37,57726,57727],{"class":54},">结束\u003C\u002F",[37,57729,53955],{"class":51368},[37,57731,51375],{"class":54},[37,57733,57734,57736,57738],{"class":39,"line":9889},[37,57735,52485],{"class":54},[37,57737,51679],{"class":51368},[37,57739,51375],{"class":54},[37,57741,57742],{"class":39,"line":9895},[37,57743,2472],{"emptyLinePlaceholder":131},[37,57745,57746,57748,57750],{"class":39,"line":9916},[37,57747,52212],{"class":54},[37,57749,51881],{"class":51368},[37,57751,51375],{"class":54},[37,57753,57754],{"class":39,"line":9922},[37,57755,57756],{"class":43},"    \u002F\u002F 数据数组\n",[37,57758,57759,57761,57764,57766,57768,57771,57773,57776,57778,57781,57783,57786,57788,57791],{"class":39,"line":9936},[37,57760,11293],{"class":50},[37,57762,57763],{"class":82}," arr",[37,57765,13636],{"class":50},[37,57767,52294],{"class":54},[37,57769,57770],{"class":309},"'马超'",[37,57772,12507],{"class":54},[37,57774,57775],{"class":309},"'黄忠'",[37,57777,12507],{"class":54},[37,57779,57780],{"class":309},"'赵云'",[37,57782,12507],{"class":54},[37,57784,57785],{"class":309},"'关羽'",[37,57787,12507],{"class":54},[37,57789,57790],{"class":309},"'张飞'",[37,57792,33315],{"class":54},[37,57794,57795,57797,57800,57802,57804,57806,57808,57811],{"class":39,"line":9942},[37,57796,11293],{"class":50},[37,57798,57799],{"class":82}," qs",[37,57801,13636],{"class":50},[37,57803,54464],{"class":54},[37,57805,54467],{"class":2035},[37,57807,208],{"class":54},[37,57809,57810],{"class":309},"'.qs'",[37,57812,214],{"class":54},[37,57814,57815],{"class":39,"line":9969},[37,57816,57817],{"class":43},"    \u002F\u002F 1.业务1.开始按钮模块\n",[37,57819,57820,57822,57824,57826,57828,57830,57832,57835],{"class":39,"line":9978},[37,57821,11293],{"class":50},[37,57823,4256],{"class":82},[37,57825,13636],{"class":50},[37,57827,54464],{"class":54},[37,57829,54467],{"class":2035},[37,57831,208],{"class":54},[37,57833,57834],{"class":309},"'.start'",[37,57836,214],{"class":54},[37,57838,57839],{"class":39,"line":9984},[37,57840,57841],{"class":43},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[37,57843,57844,57846,57849,57851],{"class":39,"line":9992},[37,57845,52287],{"class":50},[37,57847,57848],{"class":54}," timerId ",[37,57850,70],{"class":50},[37,57852,47401],{"class":82},[37,57854,57855],{"class":39,"line":9997},[37,57856,57857],{"class":43},"    \u002F\u002F 随机号要全局变量\n",[37,57859,57860,57862,57865,57867],{"class":39,"line":16676},[37,57861,52287],{"class":50},[37,57863,57864],{"class":54}," random ",[37,57866,70],{"class":50},[37,57868,47401],{"class":82},[37,57870,57871],{"class":39,"line":16682},[37,57872,57873],{"class":43},"    \u002F\u002F 1.1 添加点击事件\n",[37,57875,57876,57879,57882,57884,57887,57889,57891],{"class":39,"line":16705},[37,57877,57878],{"class":54},"    start.",[37,57880,57881],{"class":2035},"addEventListener",[37,57883,208],{"class":54},[37,57885,57886],{"class":309},"'click'",[37,57888,12507],{"class":54},[37,57890,54517],{"class":50},[37,57892,54520],{"class":54},[37,57894,57895,57898,57900,57902,57904,57906],{"class":39,"line":16711},[37,57896,57897],{"class":54},"      timerId ",[37,57899,70],{"class":50},[37,57901,54512],{"class":2035},[37,57903,208],{"class":54},[37,57905,54517],{"class":50},[37,57907,54520],{"class":54},[37,57909,57910],{"class":39,"line":16734},[37,57911,57912],{"class":43},"        \u002F\u002F 随机数\n",[37,57914,57915,57918,57920,57923,57926,57929,57931,57933,57935,57937],{"class":39,"line":16748},[37,57916,57917],{"class":54},"        random ",[37,57919,70],{"class":50},[37,57921,57922],{"class":2035}," parseInt",[37,57924,57925],{"class":54},"(Math.",[37,57927,57928],{"class":2035},"random",[37,57930,13122],{"class":54},[37,57932,659],{"class":50},[37,57934,52033],{"class":54},[37,57936,52036],{"class":82},[37,57938,214],{"class":54},[37,57940,57941,57944,57946],{"class":39,"line":16768},[37,57942,57943],{"class":54},"        qs.innerHTML ",[37,57945,70],{"class":50},[37,57947,57948],{"class":54}," arr[random]\n",[37,57950,57951,57954,57956],{"class":39,"line":16774},[37,57952,57953],{"class":54},"      }, ",[37,57955,478],{"class":82},[37,57957,214],{"class":54},[37,57959,57960],{"class":39,"line":16785},[37,57961,57962],{"class":43},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[37,57964,57965,57967,57970,57972,57975,57977],{"class":39,"line":16808},[37,57966,54548],{"class":50},[37,57968,57969],{"class":54}," (arr.",[37,57971,52036],{"class":82},[37,57973,57974],{"class":50}," ===",[37,57976,25191],{"class":82},[37,57978,12514],{"class":54},[37,57980,57981],{"class":39,"line":16830},[37,57982,57983],{"class":43},"        \u002F\u002F start.disabled = true\n",[37,57985,57986],{"class":39,"line":16835},[37,57987,57988],{"class":43},"        \u002F\u002F end.disabled = true\n",[37,57990,57991],{"class":39,"line":16841},[37,57992,57993],{"class":43},"        \u002F\u002F 可以合起来写\n",[37,57995,57996,57999,58001,58004,58006],{"class":39,"line":16855},[37,57997,57998],{"class":54},"        start.disabled ",[37,58000,70],{"class":50},[37,58002,58003],{"class":54}," end.disabled ",[37,58005,70],{"class":50},[37,58007,58008],{"class":82}," true\n",[37,58010,58011],{"class":39,"line":16868},[37,58012,52466],{"class":54},[37,58014,58015],{"class":39,"line":16873},[37,58016,33530],{"class":54},[37,58018,58019],{"class":39,"line":16887},[37,58020,58021],{"class":43},"    \u002F\u002F 1.2 关闭按钮模块\n",[37,58023,58024,58026,58028,58030,58032,58034,58036,58039],{"class":39,"line":16892},[37,58025,11293],{"class":50},[37,58027,4272],{"class":82},[37,58029,13636],{"class":50},[37,58031,54464],{"class":54},[37,58033,54467],{"class":2035},[37,58035,208],{"class":54},[37,58037,58038],{"class":309},"'.end'",[37,58040,214],{"class":54},[37,58042,58043,58046,58048,58050,58052,58054,58056],{"class":39,"line":16898},[37,58044,58045],{"class":54},"    end.",[37,58047,57881],{"class":2035},[37,58049,208],{"class":54},[37,58051,57886],{"class":309},[37,58053,12507],{"class":54},[37,58055,54517],{"class":50},[37,58057,54520],{"class":54},[37,58059,58060,58063],{"class":39,"line":16903},[37,58061,58062],{"class":2035},"      clearInterval",[37,58064,58065],{"class":54},"(timerId)\n",[37,58067,58068],{"class":39,"line":16917},[37,58069,58070],{"class":43},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[37,58072,58073,58076,58079,58082,58084],{"class":39,"line":16922},[37,58074,58075],{"class":54},"      arr.",[37,58077,58078],{"class":2035},"splice",[37,58080,58081],{"class":54},"(random, ",[37,58083,422],{"class":82},[37,58085,214],{"class":54},[37,58087,58088],{"class":39,"line":16927},[37,58089,33530],{"class":54},[37,58091,58092],{"class":39,"line":16941},[37,58093,2472],{"emptyLinePlaceholder":131},[37,58095,58096,58098,58100],{"class":39,"line":16953},[37,58097,52485],{"class":54},[37,58099,51881],{"class":51368},[37,58101,51375],{"class":54},[37,58103,58104,58106,58108],{"class":39,"line":16958},[37,58105,51853],{"class":54},[37,58107,51868],{"class":51368},[37,58109,51375],{"class":54},[37,58111,58112],{"class":39,"line":16971},[37,58113,2472],{"emptyLinePlaceholder":131},[37,58115,58116,58118,58120],{"class":39,"line":16976},[37,58117,51853],{"class":54},[37,58119,50703],{"class":51368},[37,58121,51375],{"class":54},[14,58123,58124],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[175,58126,58128],{"id":58127},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[27,58130,58132],{"className":50701,"code":58131,"language":50703,"meta":32,"style":32},"\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",[34,58133,58134,58144,58158,58162,58170,58184,58204,58216,58224,58228,58236,58248,58256,58275,58292,58308,58318,58322,58330,58338,58342],{"__ignoreMap":32},[37,58135,58136,58138,58140,58142],{"class":39,"line":40},[37,58137,51365],{"class":54},[37,58139,51369],{"class":51368},[37,58141,51372],{"class":2035},[37,58143,51375],{"class":54},[37,58145,58146,58148,58150,58152,58154,58156],{"class":39,"line":47},[37,58147,1113],{"class":54},[37,58149,50703],{"class":51368},[37,58151,51384],{"class":2035},[37,58153,70],{"class":54},[37,58155,51389],{"class":309},[37,58157,51375],{"class":54},[37,58159,58160],{"class":39,"line":58},[37,58161,2472],{"emptyLinePlaceholder":131},[37,58163,58164,58166,58168],{"class":39,"line":64},[37,58165,1113],{"class":54},[37,58167,51402],{"class":51368},[37,58169,51375],{"class":54},[37,58171,58172,58174,58176,58178,58180,58182],{"class":39,"line":76},[37,58173,52212],{"class":54},[37,58175,51412],{"class":51368},[37,58177,51415],{"class":2035},[37,58179,70],{"class":54},[37,58181,51420],{"class":309},[37,58183,51375],{"class":54},[37,58185,58186,58188,58190,58192,58194,58196,58198,58200,58202],{"class":39,"line":92},[37,58187,52212],{"class":54},[37,58189,51412],{"class":51368},[37,58191,14992],{"class":2035},[37,58193,70],{"class":54},[37,58195,51459],{"class":309},[37,58197,51439],{"class":2035},[37,58199,70],{"class":54},[37,58201,51466],{"class":309},[37,58203,51375],{"class":54},[37,58205,58206,58208,58210,58212,58214],{"class":39,"line":97},[37,58207,52212],{"class":54},[37,58209,51475],{"class":51368},[37,58211,51478],{"class":54},[37,58213,51475],{"class":51368},[37,58215,51375],{"class":54},[37,58217,58218,58220,58222],{"class":39,"line":107},[37,58219,51853],{"class":54},[37,58221,51402],{"class":51368},[37,58223,51375],{"class":54},[37,58225,58226],{"class":39,"line":1390},[37,58227,2472],{"emptyLinePlaceholder":131},[37,58229,58230,58232,58234],{"class":39,"line":1402},[37,58231,1113],{"class":54},[37,58233,51868],{"class":51368},[37,58235,51375],{"class":54},[37,58237,58238,58240,58242,58244,58246],{"class":39,"line":1684},[37,58239,52212],{"class":54},[37,58241,53955],{"class":51368},[37,58243,53961],{"class":54},[37,58245,53955],{"class":51368},[37,58247,51375],{"class":54},[37,58249,58250,58252,58254],{"class":39,"line":1689},[37,58251,52212],{"class":54},[37,58253,51881],{"class":51368},[37,58255,51375],{"class":54},[37,58257,58258,58260,58262,58264,58266,58268,58270,58273],{"class":39,"line":1695},[37,58259,11293],{"class":50},[37,58261,54459],{"class":82},[37,58263,13636],{"class":50},[37,58265,54464],{"class":54},[37,58267,54467],{"class":2035},[37,58269,208],{"class":54},[37,58271,58272],{"class":309},"'button'",[37,58274,214],{"class":54},[37,58276,58277,58280,58282,58284,58286,58288,58290],{"class":39,"line":1700},[37,58278,58279],{"class":54},"    btn.",[37,58281,57881],{"class":2035},[37,58283,208],{"class":54},[37,58285,57886],{"class":309},[37,58287,12507],{"class":54},[37,58289,54517],{"class":50},[37,58291,54520],{"class":54},[37,58293,58294,58297,58299,58301,58304,58306],{"class":39,"line":1714},[37,58295,58296],{"class":50},"      const",[37,58298,2312],{"class":82},[37,58300,13636],{"class":50},[37,58302,58303],{"class":54}," Math.",[37,58305,57928],{"class":2035},[37,58307,2048],{"class":54},[37,58309,58310,58313,58316],{"class":39,"line":1719},[37,58311,58312],{"class":54},"      console.",[37,58314,58315],{"class":2035},"log",[37,58317,221],{"class":54},[37,58319,58320],{"class":39,"line":1725},[37,58321,33530],{"class":54},[37,58323,58324,58326,58328],{"class":39,"line":1746},[37,58325,52485],{"class":54},[37,58327,51881],{"class":51368},[37,58329,51375],{"class":54},[37,58331,58332,58334,58336],{"class":39,"line":1751},[37,58333,51853],{"class":54},[37,58335,51868],{"class":51368},[37,58337,51375],{"class":54},[37,58339,58340],{"class":39,"line":1765},[37,58341,2472],{"emptyLinePlaceholder":131},[37,58343,58344,58346,58348],{"class":39,"line":1770},[37,58345,51853],{"class":54},[37,58347,50703],{"class":51368},[37,58349,51375],{"class":54},[14,58351,58352],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,58354,58355],{},"常量不可以重新赋值",[14,58357,58358],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[27,58360,58362],{"className":50701,"code":58361,"language":50703,"meta":32,"style":32},"\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",[34,58363,58364,58374,58388,58392,58400,58414,58434,58446,58454,58458,58466,58478,58486,58497,58515,58531,58545,58553,58557,58565,58573,58577],{"__ignoreMap":32},[37,58365,58366,58368,58370,58372],{"class":39,"line":40},[37,58367,51365],{"class":54},[37,58369,51369],{"class":51368},[37,58371,51372],{"class":2035},[37,58373,51375],{"class":54},[37,58375,58376,58378,58380,58382,58384,58386],{"class":39,"line":47},[37,58377,1113],{"class":54},[37,58379,50703],{"class":51368},[37,58381,51384],{"class":2035},[37,58383,70],{"class":54},[37,58385,51389],{"class":309},[37,58387,51375],{"class":54},[37,58389,58390],{"class":39,"line":58},[37,58391,2472],{"emptyLinePlaceholder":131},[37,58393,58394,58396,58398],{"class":39,"line":64},[37,58395,1113],{"class":54},[37,58397,51402],{"class":51368},[37,58399,51375],{"class":54},[37,58401,58402,58404,58406,58408,58410,58412],{"class":39,"line":76},[37,58403,52212],{"class":54},[37,58405,51412],{"class":51368},[37,58407,51415],{"class":2035},[37,58409,70],{"class":54},[37,58411,51420],{"class":309},[37,58413,51375],{"class":54},[37,58415,58416,58418,58420,58422,58424,58426,58428,58430,58432],{"class":39,"line":92},[37,58417,52212],{"class":54},[37,58419,51412],{"class":51368},[37,58421,14992],{"class":2035},[37,58423,70],{"class":54},[37,58425,51459],{"class":309},[37,58427,51439],{"class":2035},[37,58429,70],{"class":54},[37,58431,51466],{"class":309},[37,58433,51375],{"class":54},[37,58435,58436,58438,58440,58442,58444],{"class":39,"line":97},[37,58437,52212],{"class":54},[37,58439,51475],{"class":51368},[37,58441,51478],{"class":54},[37,58443,51475],{"class":51368},[37,58445,51375],{"class":54},[37,58447,58448,58450,58452],{"class":39,"line":107},[37,58449,51853],{"class":54},[37,58451,51402],{"class":51368},[37,58453,51375],{"class":54},[37,58455,58456],{"class":39,"line":1390},[37,58457,2472],{"emptyLinePlaceholder":131},[37,58459,58460,58462,58464],{"class":39,"line":1402},[37,58461,1113],{"class":54},[37,58463,51868],{"class":51368},[37,58465,51375],{"class":54},[37,58467,58468,58470,58472,58474,58476],{"class":39,"line":1684},[37,58469,52212],{"class":54},[37,58471,53955],{"class":51368},[37,58473,53961],{"class":54},[37,58475,53955],{"class":51368},[37,58477,51375],{"class":54},[37,58479,58480,58482,58484],{"class":39,"line":1689},[37,58481,52212],{"class":54},[37,58483,51881],{"class":51368},[37,58485,51375],{"class":54},[37,58487,58488,58490,58492,58494],{"class":39,"line":1695},[37,58489,11293],{"class":50},[37,58491,2312],{"class":82},[37,58493,13636],{"class":50},[37,58495,58496],{"class":82}," 10\n",[37,58498,58499,58501,58503,58505,58507,58509,58511,58513],{"class":39,"line":1700},[37,58500,11293],{"class":50},[37,58502,54459],{"class":82},[37,58504,13636],{"class":50},[37,58506,54464],{"class":54},[37,58508,54467],{"class":2035},[37,58510,208],{"class":54},[37,58512,58272],{"class":309},[37,58514,214],{"class":54},[37,58516,58517,58519,58521,58523,58525,58527,58529],{"class":39,"line":1714},[37,58518,58279],{"class":54},[37,58520,57881],{"class":2035},[37,58522,208],{"class":54},[37,58524,57886],{"class":309},[37,58526,12507],{"class":54},[37,58528,54517],{"class":50},[37,58530,54520],{"class":54},[37,58532,58533,58535,58537,58539,58541,58543],{"class":39,"line":1719},[37,58534,58296],{"class":50},[37,58536,2312],{"class":82},[37,58538,13636],{"class":50},[37,58540,58303],{"class":54},[37,58542,57928],{"class":2035},[37,58544,2048],{"class":54},[37,58546,58547,58549,58551],{"class":39,"line":1725},[37,58548,58312],{"class":54},[37,58550,58315],{"class":2035},[37,58552,221],{"class":54},[37,58554,58555],{"class":39,"line":1746},[37,58556,33530],{"class":54},[37,58558,58559,58561,58563],{"class":39,"line":1751},[37,58560,52485],{"class":54},[37,58562,51881],{"class":51368},[37,58564,51375],{"class":54},[37,58566,58567,58569,58571],{"class":39,"line":1765},[37,58568,51853],{"class":54},[37,58570,51868],{"class":51368},[37,58572,51375],{"class":54},[37,58574,58575],{"class":39,"line":1770},[37,58576,2472],{"emptyLinePlaceholder":131},[37,58578,58579,58581,58583],{"class":39,"line":1799},[37,58580,51853],{"class":54},[37,58582,50703],{"class":51368},[37,58584,51375],{"class":54},[14,58586,58587],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[27,58589,58591],{"className":50701,"code":58590,"language":50703,"meta":32,"style":32},"\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",[34,58592,58593,58603,58617,58621,58629,58643,58663,58675,58683,58687,58695,58707,58715,58725,58743,58759,58772,58780,58784,58792,58800,58804],{"__ignoreMap":32},[37,58594,58595,58597,58599,58601],{"class":39,"line":40},[37,58596,51365],{"class":54},[37,58598,51369],{"class":51368},[37,58600,51372],{"class":2035},[37,58602,51375],{"class":54},[37,58604,58605,58607,58609,58611,58613,58615],{"class":39,"line":47},[37,58606,1113],{"class":54},[37,58608,50703],{"class":51368},[37,58610,51384],{"class":2035},[37,58612,70],{"class":54},[37,58614,51389],{"class":309},[37,58616,51375],{"class":54},[37,58618,58619],{"class":39,"line":58},[37,58620,2472],{"emptyLinePlaceholder":131},[37,58622,58623,58625,58627],{"class":39,"line":64},[37,58624,1113],{"class":54},[37,58626,51402],{"class":51368},[37,58628,51375],{"class":54},[37,58630,58631,58633,58635,58637,58639,58641],{"class":39,"line":76},[37,58632,52212],{"class":54},[37,58634,51412],{"class":51368},[37,58636,51415],{"class":2035},[37,58638,70],{"class":54},[37,58640,51420],{"class":309},[37,58642,51375],{"class":54},[37,58644,58645,58647,58649,58651,58653,58655,58657,58659,58661],{"class":39,"line":92},[37,58646,52212],{"class":54},[37,58648,51412],{"class":51368},[37,58650,14992],{"class":2035},[37,58652,70],{"class":54},[37,58654,51459],{"class":309},[37,58656,51439],{"class":2035},[37,58658,70],{"class":54},[37,58660,51466],{"class":309},[37,58662,51375],{"class":54},[37,58664,58665,58667,58669,58671,58673],{"class":39,"line":97},[37,58666,52212],{"class":54},[37,58668,51475],{"class":51368},[37,58670,51478],{"class":54},[37,58672,51475],{"class":51368},[37,58674,51375],{"class":54},[37,58676,58677,58679,58681],{"class":39,"line":107},[37,58678,51853],{"class":54},[37,58680,51402],{"class":51368},[37,58682,51375],{"class":54},[37,58684,58685],{"class":39,"line":1390},[37,58686,2472],{"emptyLinePlaceholder":131},[37,58688,58689,58691,58693],{"class":39,"line":1402},[37,58690,1113],{"class":54},[37,58692,51868],{"class":51368},[37,58694,51375],{"class":54},[37,58696,58697,58699,58701,58703,58705],{"class":39,"line":1684},[37,58698,52212],{"class":54},[37,58700,53955],{"class":51368},[37,58702,53961],{"class":54},[37,58704,53955],{"class":51368},[37,58706,51375],{"class":54},[37,58708,58709,58711,58713],{"class":39,"line":1689},[37,58710,52212],{"class":54},[37,58712,51881],{"class":51368},[37,58714,51375],{"class":54},[37,58716,58717,58719,58721,58723],{"class":39,"line":1695},[37,58718,11293],{"class":50},[37,58720,2312],{"class":82},[37,58722,13636],{"class":50},[37,58724,58496],{"class":82},[37,58726,58727,58729,58731,58733,58735,58737,58739,58741],{"class":39,"line":1700},[37,58728,11293],{"class":50},[37,58730,54459],{"class":82},[37,58732,13636],{"class":50},[37,58734,54464],{"class":54},[37,58736,54467],{"class":2035},[37,58738,208],{"class":54},[37,58740,58272],{"class":309},[37,58742,214],{"class":54},[37,58744,58745,58747,58749,58751,58753,58755,58757],{"class":39,"line":1714},[37,58746,58279],{"class":54},[37,58748,57881],{"class":2035},[37,58750,208],{"class":54},[37,58752,57886],{"class":309},[37,58754,12507],{"class":54},[37,58756,54517],{"class":50},[37,58758,54520],{"class":54},[37,58760,58761,58764,58766,58768,58770],{"class":39,"line":1719},[37,58762,58763],{"class":54},"      num ",[37,58765,70],{"class":50},[37,58767,58303],{"class":54},[37,58769,57928],{"class":2035},[37,58771,2048],{"class":54},[37,58773,58774,58776,58778],{"class":39,"line":1725},[37,58775,58312],{"class":54},[37,58777,58315],{"class":2035},[37,58779,221],{"class":54},[37,58781,58782],{"class":39,"line":1746},[37,58783,33530],{"class":54},[37,58785,58786,58788,58790],{"class":39,"line":1751},[37,58787,52485],{"class":54},[37,58789,51881],{"class":51368},[37,58791,51375],{"class":54},[37,58793,58794,58796,58798],{"class":39,"line":1765},[37,58795,51853],{"class":54},[37,58797,51868],{"class":51368},[37,58799,51375],{"class":54},[37,58801,58802],{"class":39,"line":1770},[37,58803,2472],{"emptyLinePlaceholder":131},[37,58805,58806,58808,58810],{"class":39,"line":1799},[37,58807,51853],{"class":54},[37,58809,50703],{"class":51368},[37,58811,51375],{"class":54},[14,58813,58814],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[175,58816,58818],{"id":58817},"_324-事件监听版本","3.2.4 事件监听版本",[14,58820,58821],{},[119,58822],{"alt":32,"src":58823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,58825,58826],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,58828,58829],{},"这种方式会覆盖前边的事件监听:",[27,58831,58833],{"className":50701,"code":58832,"language":50703,"meta":32,"style":32},"\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",[34,58834,58835,58845,58859,58863,58871,58885,58905,58917,58925,58929,58937,58949,58957,58975,58989,59000,59004,59016,59026,59030,59038,59046,59050],{"__ignoreMap":32},[37,58836,58837,58839,58841,58843],{"class":39,"line":40},[37,58838,51365],{"class":54},[37,58840,51369],{"class":51368},[37,58842,51372],{"class":2035},[37,58844,51375],{"class":54},[37,58846,58847,58849,58851,58853,58855,58857],{"class":39,"line":47},[37,58848,1113],{"class":54},[37,58850,50703],{"class":51368},[37,58852,51384],{"class":2035},[37,58854,70],{"class":54},[37,58856,51389],{"class":309},[37,58858,51375],{"class":54},[37,58860,58861],{"class":39,"line":58},[37,58862,2472],{"emptyLinePlaceholder":131},[37,58864,58865,58867,58869],{"class":39,"line":64},[37,58866,1113],{"class":54},[37,58868,51402],{"class":51368},[37,58870,51375],{"class":54},[37,58872,58873,58875,58877,58879,58881,58883],{"class":39,"line":76},[37,58874,52212],{"class":54},[37,58876,51412],{"class":51368},[37,58878,51415],{"class":2035},[37,58880,70],{"class":54},[37,58882,51420],{"class":309},[37,58884,51375],{"class":54},[37,58886,58887,58889,58891,58893,58895,58897,58899,58901,58903],{"class":39,"line":92},[37,58888,52212],{"class":54},[37,58890,51412],{"class":51368},[37,58892,14992],{"class":2035},[37,58894,70],{"class":54},[37,58896,51459],{"class":309},[37,58898,51439],{"class":2035},[37,58900,70],{"class":54},[37,58902,51466],{"class":309},[37,58904,51375],{"class":54},[37,58906,58907,58909,58911,58913,58915],{"class":39,"line":97},[37,58908,52212],{"class":54},[37,58910,51475],{"class":51368},[37,58912,51478],{"class":54},[37,58914,51475],{"class":51368},[37,58916,51375],{"class":54},[37,58918,58919,58921,58923],{"class":39,"line":107},[37,58920,51853],{"class":54},[37,58922,51402],{"class":51368},[37,58924,51375],{"class":54},[37,58926,58927],{"class":39,"line":1390},[37,58928,2472],{"emptyLinePlaceholder":131},[37,58930,58931,58933,58935],{"class":39,"line":1402},[37,58932,1113],{"class":54},[37,58934,51868],{"class":51368},[37,58936,51375],{"class":54},[37,58938,58939,58941,58943,58945,58947],{"class":39,"line":1684},[37,58940,52212],{"class":54},[37,58942,53955],{"class":51368},[37,58944,53961],{"class":54},[37,58946,53955],{"class":51368},[37,58948,51375],{"class":54},[37,58950,58951,58953,58955],{"class":39,"line":1689},[37,58952,52212],{"class":54},[37,58954,51881],{"class":51368},[37,58956,51375],{"class":54},[37,58958,58959,58961,58963,58965,58967,58969,58971,58973],{"class":39,"line":1695},[37,58960,11293],{"class":50},[37,58962,54459],{"class":82},[37,58964,13636],{"class":50},[37,58966,54464],{"class":54},[37,58968,54467],{"class":2035},[37,58970,208],{"class":54},[37,58972,58272],{"class":309},[37,58974,214],{"class":54},[37,58976,58977,58979,58982,58984,58987],{"class":39,"line":1700},[37,58978,58279],{"class":54},[37,58980,58981],{"class":2035},"onclick",[37,58983,13636],{"class":50},[37,58985,58986],{"class":50}," function",[37,58988,54520],{"class":54},[37,58990,58991,58994,58996,58998],{"class":39,"line":1714},[37,58992,58993],{"class":2035},"      alert",[37,58995,208],{"class":54},[37,58997,676],{"class":82},[37,58999,214],{"class":54},[37,59001,59002],{"class":39,"line":1719},[37,59003,2259],{"class":54},[37,59005,59006,59008,59010,59012,59014],{"class":39,"line":1725},[37,59007,58279],{"class":54},[37,59009,58981],{"class":2035},[37,59011,13636],{"class":50},[37,59013,58986],{"class":50},[37,59015,54520],{"class":54},[37,59017,59018,59020,59022,59024],{"class":39,"line":1746},[37,59019,58993],{"class":2035},[37,59021,208],{"class":54},[37,59023,953],{"class":82},[37,59025,214],{"class":54},[37,59027,59028],{"class":39,"line":1751},[37,59029,2259],{"class":54},[37,59031,59032,59034,59036],{"class":39,"line":1765},[37,59033,52485],{"class":54},[37,59035,51881],{"class":51368},[37,59037,51375],{"class":54},[37,59039,59040,59042,59044],{"class":39,"line":1770},[37,59041,51853],{"class":54},[37,59043,51868],{"class":51368},[37,59045,51375],{"class":54},[37,59047,59048],{"class":39,"line":1799},[37,59049,2472],{"emptyLinePlaceholder":131},[37,59051,59052,59054,59056],{"class":39,"line":1804},[37,59053,51853],{"class":54},[37,59055,50703],{"class":51368},[37,59057,51375],{"class":54},[14,59059,59060],{},"只要点击就输出结果为22,前边11被覆盖了",[27,59062,59064],{"className":50701,"code":59063,"language":50703,"meta":32,"style":32},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[34,59065,59066,59071,59076,59080,59085,59090],{"__ignoreMap":32},[37,59067,59068],{"class":39,"line":40},[37,59069,59070],{"class":54},"  btn.addEventListener('click', function () {\n",[37,59072,59073],{"class":39,"line":47},[37,59074,59075],{"class":54},"      alert(11)\n",[37,59077,59078],{"class":39,"line":58},[37,59079,33530],{"class":54},[37,59081,59082],{"class":39,"line":64},[37,59083,59084],{"class":54},"    btn.addEventListener('click', function () {\n",[37,59086,59087],{"class":39,"line":76},[37,59088,59089],{"class":54},"      alert(22)\n",[37,59091,59092],{"class":39,"line":92},[37,59093,33530],{"class":54},[14,59095,59096],{},"点击第一次输出11,第二次点击为22",[175,59098,59100],{"id":59099},"_325-事件类型","3.2.5 事件类型",[14,59102,59103],{},[119,59104],{"alt":32,"src":59105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22070,59107,59109],{"id":59108},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59111,59112],{},"补充知识:",[14,59114,59115],{},"轮播图自动播放模块,可以使用",[14,59117,59118],{},"let timerId = setInterval(function () {",[14,59120,59121],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59123,59124],{},"用js方法模拟进行点击事件,click必须加()",[14,59126,59127],{},"next.click()",[14,59129,59130],{},"}, 1000)",[14,59132,59133],{},[119,59134],{"alt":32,"src":59135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[27,59137,59139],{"className":53135,"code":59138,"language":53137,"meta":32,"style":32},"\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",[34,59140,59141,59145,59155,59169,59173,59181,59196,59216,59236,59249,59257,59262,59267,59271,59275,59280,59285,59290,59295,59299,59303,59308,59313,59318,59322,59326,59331,59335,59340,59345,59349,59353,59358,59363,59368,59373,59378,59382,59386,59391,59396,59401,59406,59411,59415,59419,59424,59429,59434,59439,59444,59449,59454,59459,59464,59469,59473,59477,59482,59487,59491,59495,59500,59505,59509,59514,59519,59523,59527,59532,59536,59541,59546,59550,59555,59559,59563,59568,59573,59578,59583,59588,59593,59598,59602,59606,59610,59615,59620,59625,59630,59634,59642,59650,59654,59662,59677,59691,59712,59720,59734,59747,59762,59781,59793,59805,59817,59829,59841,59853,59865,59873,59888,59912,59936,59944,59952,59960,59968,59973,59978,59983,59988,59993,59998,60003,60008,60013,60018,60022,60027,60032,60037,60042,60047,60052,60057,60062,60067,60071,60076,60081,60086,60091,60096,60101,60106,60111,60116,60121,60126,60131,60135,60139,60144,60149,60154,60158,60163,60168,60173,60178,60183,60187,60192,60196,60200,60204,60208,60212,60216,60221,60226,60231,60236,60241,60246,60251,60256,60261,60265,60269,60274,60279,60284,60289,60294,60298,60303,60308,60313,60318,60323,60328,60332,60336,60341,60345,60350,60354,60359,60364,60369,60374,60379,60384,60388,60396,60404,60408],{"__ignoreMap":32},[37,59142,59143],{"class":39,"line":40},[37,59144,2472],{"emptyLinePlaceholder":131},[37,59146,59147,59149,59151,59153],{"class":39,"line":47},[37,59148,51365],{"class":54},[37,59150,51369],{"class":50},[37,59152,51372],{"class":82},[37,59154,51375],{"class":54},[37,59156,59157,59159,59161,59163,59165,59167],{"class":39,"line":58},[37,59158,1113],{"class":54},[37,59160,50703],{"class":51368},[37,59162,51384],{"class":2035},[37,59164,70],{"class":54},[37,59166,51389],{"class":309},[37,59168,51375],{"class":54},[37,59170,59171],{"class":39,"line":64},[37,59172,2472],{"emptyLinePlaceholder":131},[37,59174,59175,59177,59179],{"class":39,"line":76},[37,59176,1113],{"class":54},[37,59178,51402],{"class":51368},[37,59180,51375],{"class":54},[37,59182,59183,59185,59187,59189,59191,59193],{"class":39,"line":92},[37,59184,52212],{"class":54},[37,59186,51412],{"class":51368},[37,59188,51415],{"class":2035},[37,59190,70],{"class":54},[37,59192,51420],{"class":309},[37,59194,59195],{"class":54}," \u002F>\n",[37,59197,59198,59200,59202,59204,59206,59208,59210,59212,59214],{"class":39,"line":97},[37,59199,52212],{"class":54},[37,59201,51412],{"class":51368},[37,59203,51431],{"class":2035},[37,59205,70],{"class":54},[37,59207,51436],{"class":309},[37,59209,51439],{"class":2035},[37,59211,70],{"class":54},[37,59213,51444],{"class":309},[37,59215,59195],{"class":54},[37,59217,59218,59220,59222,59224,59226,59228,59230,59232,59234],{"class":39,"line":107},[37,59219,52212],{"class":54},[37,59221,51412],{"class":51368},[37,59223,14992],{"class":2035},[37,59225,70],{"class":54},[37,59227,51459],{"class":309},[37,59229,51439],{"class":2035},[37,59231,70],{"class":54},[37,59233,51466],{"class":309},[37,59235,59195],{"class":54},[37,59237,59238,59240,59242,59245,59247],{"class":39,"line":1390},[37,59239,52212],{"class":54},[37,59241,51475],{"class":51368},[37,59243,59244],{"class":54},">轮播图点击切换\u003C\u002F",[37,59246,51475],{"class":51368},[37,59248,51375],{"class":54},[37,59250,59251,59253,59255],{"class":39,"line":1402},[37,59252,52212],{"class":54},[37,59254,123],{"class":51368},[37,59256,51375],{"class":54},[37,59258,59259],{"class":39,"line":1684},[37,59260,59261],{"class":54},"    * {\n",[37,59263,59264],{"class":39,"line":1689},[37,59265,59266],{"class":54},"      box-sizing: border-box;\n",[37,59268,59269],{"class":39,"line":1695},[37,59270,2259],{"class":54},[37,59272,59273],{"class":39,"line":1700},[37,59274,2472],{"emptyLinePlaceholder":131},[37,59276,59277],{"class":39,"line":1714},[37,59278,59279],{"class":54},"    .slider {\n",[37,59281,59282],{"class":39,"line":1719},[37,59283,59284],{"class":54},"      width: 560px;\n",[37,59286,59287],{"class":39,"line":1725},[37,59288,59289],{"class":54},"      height: 400px;\n",[37,59291,59292],{"class":39,"line":1746},[37,59293,59294],{"class":54},"      overflow: hidden;\n",[37,59296,59297],{"class":39,"line":1751},[37,59298,2259],{"class":54},[37,59300,59301],{"class":39,"line":1765},[37,59302,2472],{"emptyLinePlaceholder":131},[37,59304,59305],{"class":39,"line":1770},[37,59306,59307],{"class":54},"    .slider-wrapper {\n",[37,59309,59310],{"class":39,"line":1799},[37,59311,59312],{"class":54},"      width: 100%;\n",[37,59314,59315],{"class":39,"line":1804},[37,59316,59317],{"class":54},"      height: 320px;\n",[37,59319,59320],{"class":39,"line":1821},[37,59321,2259],{"class":54},[37,59323,59324],{"class":39,"line":1826},[37,59325,2472],{"emptyLinePlaceholder":131},[37,59327,59328],{"class":39,"line":1831},[37,59329,59330],{"class":54},"    .slider-wrapper img {\n",[37,59332,59333],{"class":39,"line":1836},[37,59334,59312],{"class":54},[37,59336,59337],{"class":39,"line":1850},[37,59338,59339],{"class":54},"      height: 100%;\n",[37,59341,59342],{"class":39,"line":1855},[37,59343,59344],{"class":54},"      display: block;\n",[37,59346,59347],{"class":39,"line":2649},[37,59348,2259],{"class":54},[37,59350,59351],{"class":39,"line":2663},[37,59352,2472],{"emptyLinePlaceholder":131},[37,59354,59355],{"class":39,"line":2671},[37,59356,59357],{"class":54},"    .slider-footer {\n",[37,59359,59360],{"class":39,"line":2676},[37,59361,59362],{"class":54},"      height: 80px;\n",[37,59364,59365],{"class":39,"line":2682},[37,59366,59367],{"class":54},"      background-color: rgb(100, 67, 68);\n",[37,59369,59370],{"class":39,"line":2688},[37,59371,59372],{"class":54},"      padding: 12px 12px 0 12px;\n",[37,59374,59375],{"class":39,"line":2693},[37,59376,59377],{"class":54},"      position: relative;\n",[37,59379,59380],{"class":39,"line":8020},[37,59381,2259],{"class":54},[37,59383,59384],{"class":39,"line":8044},[37,59385,2472],{"emptyLinePlaceholder":131},[37,59387,59388],{"class":39,"line":8049},[37,59389,59390],{"class":54},"    .slider-footer .toggle {\n",[37,59392,59393],{"class":39,"line":8055},[37,59394,59395],{"class":54},"      position: absolute;\n",[37,59397,59398],{"class":39,"line":8082},[37,59399,59400],{"class":54},"      right: 0;\n",[37,59402,59403],{"class":39,"line":8087},[37,59404,59405],{"class":54},"      top: 12px;\n",[37,59407,59408],{"class":39,"line":8093},[37,59409,59410],{"class":54},"      display: flex;\n",[37,59412,59413],{"class":39,"line":8105},[37,59414,2259],{"class":54},[37,59416,59417],{"class":39,"line":8117},[37,59418,2472],{"emptyLinePlaceholder":131},[37,59420,59421],{"class":39,"line":8129},[37,59422,59423],{"class":54},"    .slider-footer .toggle button {\n",[37,59425,59426],{"class":39,"line":9788},[37,59427,59428],{"class":54},"      margin-right: 12px;\n",[37,59430,59431],{"class":39,"line":9813},[37,59432,59433],{"class":54},"      width: 28px;\n",[37,59435,59436],{"class":39,"line":9836},[37,59437,59438],{"class":54},"      height: 28px;\n",[37,59440,59441],{"class":39,"line":9860},[37,59442,59443],{"class":54},"      appearance: none;\n",[37,59445,59446],{"class":39,"line":9865},[37,59447,59448],{"class":54},"      border: none;\n",[37,59450,59451],{"class":39,"line":9870},[37,59452,59453],{"class":54},"      background: rgba(255, 255, 255, 0.1);\n",[37,59455,59456],{"class":39,"line":9875},[37,59457,59458],{"class":54},"      color: #fff;\n",[37,59460,59461],{"class":39,"line":9884},[37,59462,59463],{"class":54},"      border-radius: 4px;\n",[37,59465,59466],{"class":39,"line":9889},[37,59467,59468],{"class":54},"      cursor: pointer;\n",[37,59470,59471],{"class":39,"line":9895},[37,59472,2259],{"class":54},[37,59474,59475],{"class":39,"line":9916},[37,59476,2472],{"emptyLinePlaceholder":131},[37,59478,59479],{"class":39,"line":9922},[37,59480,59481],{"class":54},"    .slider-footer .toggle button:hover {\n",[37,59483,59484],{"class":39,"line":9936},[37,59485,59486],{"class":54},"      background: rgba(255, 255, 255, 0.2);\n",[37,59488,59489],{"class":39,"line":9942},[37,59490,2259],{"class":54},[37,59492,59493],{"class":39,"line":9969},[37,59494,2472],{"emptyLinePlaceholder":131},[37,59496,59497],{"class":39,"line":9978},[37,59498,59499],{"class":54},"    .slider-footer p {\n",[37,59501,59502],{"class":39,"line":9984},[37,59503,59504],{"class":54},"      margin: 0;\n",[37,59506,59507],{"class":39,"line":9992},[37,59508,59458],{"class":54},[37,59510,59511],{"class":39,"line":9997},[37,59512,59513],{"class":54},"      font-size: 18px;\n",[37,59515,59516],{"class":39,"line":16676},[37,59517,59518],{"class":54},"      margin-bottom: 10px;\n",[37,59520,59521],{"class":39,"line":16682},[37,59522,2259],{"class":54},[37,59524,59525],{"class":39,"line":16705},[37,59526,2472],{"emptyLinePlaceholder":131},[37,59528,59529],{"class":39,"line":16711},[37,59530,59531],{"class":54},"    .slider-indicator {\n",[37,59533,59534],{"class":39,"line":16734},[37,59535,59504],{"class":54},[37,59537,59538],{"class":39,"line":16748},[37,59539,59540],{"class":54},"      padding: 0;\n",[37,59542,59543],{"class":39,"line":16768},[37,59544,59545],{"class":54},"      list-style: none;\n",[37,59547,59548],{"class":39,"line":16774},[37,59549,59410],{"class":54},[37,59551,59552],{"class":39,"line":16785},[37,59553,59554],{"class":54},"      align-items: center;\n",[37,59556,59557],{"class":39,"line":16808},[37,59558,2259],{"class":54},[37,59560,59561],{"class":39,"line":16830},[37,59562,2472],{"emptyLinePlaceholder":131},[37,59564,59565],{"class":39,"line":16835},[37,59566,59567],{"class":54},"    .slider-indicator li {\n",[37,59569,59570],{"class":39,"line":16841},[37,59571,59572],{"class":54},"      width: 8px;\n",[37,59574,59575],{"class":39,"line":16855},[37,59576,59577],{"class":54},"      height: 8px;\n",[37,59579,59580],{"class":39,"line":16868},[37,59581,59582],{"class":54},"      margin: 4px;\n",[37,59584,59585],{"class":39,"line":16873},[37,59586,59587],{"class":54},"      border-radius: 50%;\n",[37,59589,59590],{"class":39,"line":16887},[37,59591,59592],{"class":54},"      background: #fff;\n",[37,59594,59595],{"class":39,"line":16892},[37,59596,59597],{"class":54},"      opacity: 0.4;\n",[37,59599,59600],{"class":39,"line":16898},[37,59601,59468],{"class":54},[37,59603,59604],{"class":39,"line":16903},[37,59605,2259],{"class":54},[37,59607,59608],{"class":39,"line":16917},[37,59609,2472],{"emptyLinePlaceholder":131},[37,59611,59612],{"class":39,"line":16922},[37,59613,59614],{"class":54},"    .slider-indicator li.active {\n",[37,59616,59617],{"class":39,"line":16927},[37,59618,59619],{"class":54},"      width: 12px;\n",[37,59621,59622],{"class":39,"line":16941},[37,59623,59624],{"class":54},"      height: 12px;\n",[37,59626,59627],{"class":39,"line":16953},[37,59628,59629],{"class":54},"      opacity: 1;\n",[37,59631,59632],{"class":39,"line":16958},[37,59633,2259],{"class":54},[37,59635,59636,59638,59640],{"class":39,"line":16971},[37,59637,52485],{"class":54},[37,59639,123],{"class":51368},[37,59641,51375],{"class":54},[37,59643,59644,59646,59648],{"class":39,"line":16976},[37,59645,51853],{"class":54},[37,59647,51402],{"class":51368},[37,59649,51375],{"class":54},[37,59651,59652],{"class":39,"line":16981},[37,59653,2472],{"emptyLinePlaceholder":131},[37,59655,59656,59658,59660],{"class":39,"line":16986},[37,59657,1113],{"class":54},[37,59659,51868],{"class":51368},[37,59661,51375],{"class":54},[37,59663,59664,59666,59668,59670,59672,59675],{"class":39,"line":16999},[37,59665,52212],{"class":54},[37,59667,51679],{"class":51368},[37,59669,53554],{"class":2035},[37,59671,70],{"class":54},[37,59673,59674],{"class":309},"\"slider\"",[37,59676,51375],{"class":54},[37,59678,59679,59681,59683,59685,59687,59689],{"class":39,"line":17004},[37,59680,51409],{"class":54},[37,59682,51679],{"class":51368},[37,59684,53554],{"class":2035},[37,59686,70],{"class":54},[37,59688,55295],{"class":309},[37,59690,51375],{"class":54},[37,59692,59693,59695,59697,59699,59701,59704,59706,59708,59710],{"class":39,"line":32702},[37,59694,55302],{"class":54},[37,59696,119],{"class":51368},[37,59698,55307],{"class":2035},[37,59700,70],{"class":54},[37,59702,59703],{"class":309},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[37,59705,55315],{"class":2035},[37,59707,70],{"class":54},[37,59709,7724],{"class":309},[37,59711,59195],{"class":54},[37,59713,59714,59716,59718],{"class":39,"line":32708},[37,59715,51844],{"class":54},[37,59717,51679],{"class":51368},[37,59719,51375],{"class":54},[37,59721,59722,59724,59726,59728,59730,59732],{"class":39,"line":32714},[37,59723,51409],{"class":54},[37,59725,51679],{"class":51368},[37,59727,53554],{"class":2035},[37,59729,70],{"class":54},[37,59731,55342],{"class":309},[37,59733,51375],{"class":54},[37,59735,59736,59738,59740,59743,59745],{"class":39,"line":32720},[37,59737,55302],{"class":54},[37,59739,14],{"class":51368},[37,59741,59742],{"class":54},">对人类来说会不会太超前了？\u003C\u002F",[37,59744,14],{"class":51368},[37,59746,51375],{"class":54},[37,59748,59749,59751,59753,59755,59757,59760],{"class":39,"line":32726},[37,59750,55302],{"class":54},[37,59752,1210],{"class":51368},[37,59754,53554],{"class":2035},[37,59756,70],{"class":54},[37,59758,59759],{"class":309},"\"slider-indicator\"",[37,59761,51375],{"class":54},[37,59763,59764,59766,59768,59770,59772,59775,59777,59779],{"class":39,"line":32737},[37,59765,55370],{"class":54},[37,59767,161],{"class":51368},[37,59769,53554],{"class":2035},[37,59771,70],{"class":54},[37,59773,59774],{"class":309},"\"active\"",[37,59776,55382],{"class":54},[37,59778,161],{"class":51368},[37,59780,51375],{"class":54},[37,59782,59783,59785,59787,59789,59791],{"class":39,"line":32743},[37,59784,55370],{"class":54},[37,59786,161],{"class":51368},[37,59788,55382],{"class":54},[37,59790,161],{"class":51368},[37,59792,51375],{"class":54},[37,59794,59795,59797,59799,59801,59803],{"class":39,"line":32763},[37,59796,55370],{"class":54},[37,59798,161],{"class":51368},[37,59800,55382],{"class":54},[37,59802,161],{"class":51368},[37,59804,51375],{"class":54},[37,59806,59807,59809,59811,59813,59815],{"class":39,"line":32769},[37,59808,55370],{"class":54},[37,59810,161],{"class":51368},[37,59812,55382],{"class":54},[37,59814,161],{"class":51368},[37,59816,51375],{"class":54},[37,59818,59819,59821,59823,59825,59827],{"class":39,"line":32780},[37,59820,55370],{"class":54},[37,59822,161],{"class":51368},[37,59824,55382],{"class":54},[37,59826,161],{"class":51368},[37,59828,51375],{"class":54},[37,59830,59831,59833,59835,59837,59839],{"class":39,"line":32786},[37,59832,55370],{"class":54},[37,59834,161],{"class":51368},[37,59836,55382],{"class":54},[37,59838,161],{"class":51368},[37,59840,51375],{"class":54},[37,59842,59843,59845,59847,59849,59851],{"class":39,"line":32792},[37,59844,55370],{"class":54},[37,59846,161],{"class":51368},[37,59848,55382],{"class":54},[37,59850,161],{"class":51368},[37,59852,51375],{"class":54},[37,59854,59855,59857,59859,59861,59863],{"class":39,"line":32798},[37,59856,55370],{"class":54},[37,59858,161],{"class":51368},[37,59860,55382],{"class":54},[37,59862,161],{"class":51368},[37,59864,51375],{"class":54},[37,59866,59867,59869,59871],{"class":39,"line":32804},[37,59868,55475],{"class":54},[37,59870,1210],{"class":51368},[37,59872,51375],{"class":54},[37,59874,59875,59877,59879,59881,59883,59886],{"class":39,"line":32810},[37,59876,55302],{"class":54},[37,59878,51679],{"class":51368},[37,59880,53554],{"class":2035},[37,59882,70],{"class":54},[37,59884,59885],{"class":309},"\"toggle\"",[37,59887,51375],{"class":54},[37,59889,59890,59892,59894,59896,59898,59901,59903,59906,59908,59910],{"class":39,"line":32816},[37,59891,55370],{"class":54},[37,59893,53955],{"class":51368},[37,59895,53554],{"class":2035},[37,59897,70],{"class":54},[37,59899,59900],{"class":309},"\"prev\"",[37,59902,1163],{"class":54},[37,59904,59905],{"class":82},"&lt;",[37,59907,51853],{"class":54},[37,59909,53955],{"class":51368},[37,59911,51375],{"class":54},[37,59913,59914,59916,59918,59920,59922,59925,59927,59930,59932,59934],{"class":39,"line":32822},[37,59915,55370],{"class":54},[37,59917,53955],{"class":51368},[37,59919,53554],{"class":2035},[37,59921,70],{"class":54},[37,59923,59924],{"class":309},"\"next\"",[37,59926,1163],{"class":54},[37,59928,59929],{"class":82},"&gt;",[37,59931,51853],{"class":54},[37,59933,53955],{"class":51368},[37,59935,51375],{"class":54},[37,59937,59938,59940,59942],{"class":39,"line":32842},[37,59939,55475],{"class":54},[37,59941,51679],{"class":51368},[37,59943,51375],{"class":54},[37,59945,59946,59948,59950],{"class":39,"line":32848},[37,59947,51844],{"class":54},[37,59949,51679],{"class":51368},[37,59951,51375],{"class":54},[37,59953,59954,59956,59958],{"class":39,"line":32864},[37,59955,52485],{"class":54},[37,59957,51679],{"class":51368},[37,59959,51375],{"class":54},[37,59961,59962,59964,59966],{"class":39,"line":32870},[37,59963,52212],{"class":54},[37,59965,51881],{"class":51368},[37,59967,51375],{"class":54},[37,59969,59970],{"class":39,"line":32884},[37,59971,59972],{"class":54},"    \u002F\u002F 1. 初始数据\n",[37,59974,59975],{"class":39,"line":32890},[37,59976,59977],{"class":54},"    const data = [\n",[37,59979,59980],{"class":39,"line":32905},[37,59981,59982],{"class":54},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[37,59984,59985],{"class":39,"line":32911},[37,59986,59987],{"class":54},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[37,59989,59990],{"class":39,"line":32920},[37,59991,59992],{"class":54},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[37,59994,59995],{"class":39,"line":32926},[37,59996,59997],{"class":54},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[37,59999,60000],{"class":39,"line":32935},[37,60001,60002],{"class":54},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[37,60004,60005],{"class":39,"line":32941},[37,60006,60007],{"class":54},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[37,60009,60010],{"class":39,"line":32947},[37,60011,60012],{"class":54},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[37,60014,60015],{"class":39,"line":32956},[37,60016,60017],{"class":54},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[37,60019,60020],{"class":39,"line":32962},[37,60021,53177],{"class":54},[37,60023,60024],{"class":39,"line":32973},[37,60025,60026],{"class":54},"    \u002F\u002F 获取元素\n",[37,60028,60029],{"class":39,"line":32979},[37,60030,60031],{"class":54},"    const img = document.querySelector('.slider-wrapper img')\n",[37,60033,60034],{"class":39,"line":32998},[37,60035,60036],{"class":54},"    const p = document.querySelector('.slider-footer p')\n",[37,60038,60039],{"class":39,"line":33004},[37,60040,60041],{"class":54},"    const footer = document.querySelector('.slider-footer')\n",[37,60043,60044],{"class":39,"line":33015},[37,60045,60046],{"class":54},"    \u002F\u002F 1. 右按钮业务\n",[37,60048,60049],{"class":39,"line":33021},[37,60050,60051],{"class":54},"    \u002F\u002F 1.1 获取右侧按钮 \n",[37,60053,60054],{"class":39,"line":33041},[37,60055,60056],{"class":54},"    const next = document.querySelector('.next')\n",[37,60058,60059],{"class":39,"line":33057},[37,60060,60061],{"class":54},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[37,60063,60064],{"class":39,"line":33063},[37,60065,60066],{"class":54},"    \u002F\u002F 1.2 注册点击事件\n",[37,60068,60069],{"class":39,"line":33077},[37,60070,2472],{"emptyLinePlaceholder":131},[37,60072,60073],{"class":39,"line":33083},[37,60074,60075],{"class":54},"    next.addEventListener('click', function () {\n",[37,60077,60078],{"class":39,"line":33089},[37,60079,60080],{"class":54},"      \u002F\u002F console.log(11)\n",[37,60082,60083],{"class":39,"line":33100},[37,60084,60085],{"class":54},"      i++\n",[37,60087,60088],{"class":39,"line":33106},[37,60089,60090],{"class":54},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[37,60092,60093],{"class":39,"line":33112},[37,60094,60095],{"class":54},"      \u002F\u002F if (i >= 8) {\n",[37,60097,60098],{"class":39,"line":33122},[37,60099,60100],{"class":54},"      \u002F\u002F   i = 0\n",[37,60102,60103],{"class":39,"line":33128},[37,60104,60105],{"class":54},"      \u002F\u002F }\n",[37,60107,60108],{"class":39,"line":33139},[37,60109,60110],{"class":54},"      i = i >= data.length ? 0 : i\n",[37,60112,60113],{"class":39,"line":33145},[37,60114,60115],{"class":54},"      \u002F\u002F 1.3 得到对应的对象\n",[37,60117,60118],{"class":39,"line":33155},[37,60119,60120],{"class":54},"      \u002F\u002F console.log(data[i])\n",[37,60122,60123],{"class":39,"line":33160},[37,60124,60125],{"class":54},"      \u002F\u002F 调用函数\n",[37,60127,60128],{"class":39,"line":33166},[37,60129,60130],{"class":54},"      toggle()\n",[37,60132,60133],{"class":39,"line":33215},[37,60134,33530],{"class":54},[37,60136,60137],{"class":39,"line":33262},[37,60138,2472],{"emptyLinePlaceholder":131},[37,60140,60141],{"class":39,"line":33267},[37,60142,60143],{"class":54},"    \u002F\u002F 2. 左侧按钮业务\n",[37,60145,60146],{"class":39,"line":33273},[37,60147,60148],{"class":54},"    \u002F\u002F 2.1 获取左侧按钮 \n",[37,60150,60151],{"class":39,"line":33292},[37,60152,60153],{"class":54},"    const prev = document.querySelector('.prev')\n",[37,60155,60156],{"class":39,"line":33298},[37,60157,60066],{"class":54},[37,60159,60160],{"class":39,"line":33318},[37,60161,60162],{"class":54},"    prev.addEventListener('click', function () {\n",[37,60164,60165],{"class":39,"line":33324},[37,60166,60167],{"class":54},"      i--\n",[37,60169,60170],{"class":39,"line":33330},[37,60171,60172],{"class":54},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[37,60174,60175],{"class":39,"line":33340},[37,60176,60177],{"class":54},"      \u002F\u002F if (i \u003C 0) {\n",[37,60179,60180],{"class":39,"line":33345},[37,60181,60182],{"class":54},"      \u002F\u002F   i = 7\n",[37,60184,60185],{"class":39,"line":33351},[37,60186,60105],{"class":54},[37,60188,60189],{"class":39,"line":33367},[37,60190,60191],{"class":54},"      i = i \u003C 0 ? data.length - 1 : i\n",[37,60193,60194],{"class":39,"line":33412},[37,60195,60115],{"class":54},[37,60197,60198],{"class":39,"line":33418},[37,60199,60120],{"class":54},[37,60201,60202],{"class":39,"line":33424},[37,60203,60125],{"class":54},[37,60205,60206],{"class":39,"line":33430},[37,60207,60130],{"class":54},[37,60209,60210],{"class":39,"line":33441},[37,60211,33530],{"class":54},[37,60213,60214],{"class":39,"line":33447},[37,60215,2472],{"emptyLinePlaceholder":131},[37,60217,60218],{"class":39,"line":33453},[37,60219,60220],{"class":54},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[37,60222,60223],{"class":39,"line":33459},[37,60224,60225],{"class":54},"    function toggle() {\n",[37,60227,60228],{"class":39,"line":33477},[37,60229,60230],{"class":54},"      \u002F\u002F 1.4 渲染对应的数据\n",[37,60232,60233],{"class":39,"line":33491},[37,60234,60235],{"class":54},"      img.src = data[i].url\n",[37,60237,60238],{"class":39,"line":33500},[37,60239,60240],{"class":54},"      p.innerHTML = data[i].title\n",[37,60242,60243],{"class":39,"line":33509},[37,60244,60245],{"class":54},"      footer.style.backgroundColor = data[i].color\n",[37,60247,60248],{"class":39,"line":33518},[37,60249,60250],{"class":54},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[37,60252,60253],{"class":39,"line":33527},[37,60254,60255],{"class":54},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[37,60257,60258],{"class":39,"line":33533},[37,60259,60260],{"class":54},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[37,60262,60263],{"class":39,"line":33539},[37,60264,2259],{"class":54},[37,60266,60267],{"class":39,"line":33547},[37,60268,2472],{"emptyLinePlaceholder":131},[37,60270,60271],{"class":39,"line":33552},[37,60272,60273],{"class":54},"    \u002F\u002F 3. 自动播放模块\n",[37,60275,60276],{"class":39,"line":33558},[37,60277,60278],{"class":54},"    let timerId = setInterval(function () {\n",[37,60280,60281],{"class":39,"line":33569},[37,60282,60283],{"class":54},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[37,60285,60286],{"class":39,"line":33575},[37,60287,60288],{"class":54},"      next.click()\n",[37,60290,60291],{"class":39,"line":33595},[37,60292,60293],{"class":54},"    }, 1000)\n",[37,60295,60296],{"class":39,"line":33601},[37,60297,2472],{"emptyLinePlaceholder":131},[37,60299,60300],{"class":39,"line":33607},[37,60301,60302],{"class":54},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[37,60304,60305],{"class":39,"line":33613},[37,60306,60307],{"class":54},"    const slider = document.querySelector('.slider')\n",[37,60309,60310],{"class":39,"line":33630},[37,60311,60312],{"class":54},"    \u002F\u002F 注册事件\n",[37,60314,60315],{"class":39,"line":33636},[37,60316,60317],{"class":54},"    slider.addEventListener('mouseenter', function () {\n",[37,60319,60320],{"class":39,"line":33642},[37,60321,60322],{"class":54},"      \u002F\u002F 停止定时器\n",[37,60324,60325],{"class":39,"line":33648},[37,60326,60327],{"class":54},"      clearInterval(timerId)\n",[37,60329,60330],{"class":39,"line":33654},[37,60331,33530],{"class":54},[37,60333,60334],{"class":39,"line":33660},[37,60335,2472],{"emptyLinePlaceholder":131},[37,60337,60338],{"class":39,"line":33687},[37,60339,60340],{"class":54},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[37,60342,60343],{"class":39,"line":33711},[37,60344,60312],{"class":54},[37,60346,60347],{"class":39,"line":33717},[37,60348,60349],{"class":54},"    slider.addEventListener('mouseleave', function () {\n",[37,60351,60352],{"class":39,"line":33723},[37,60353,60322],{"class":54},[37,60355,60356],{"class":39,"line":33729},[37,60357,60358],{"class":54},"      if (timerId) clearInterval(timerId)\n",[37,60360,60361],{"class":39,"line":33740},[37,60362,60363],{"class":54},"      \u002F\u002F 开启定时器\n",[37,60365,60366],{"class":39,"line":33751},[37,60367,60368],{"class":54},"      timerId = setInterval(function () {\n",[37,60370,60371],{"class":39,"line":33757},[37,60372,60373],{"class":54},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[37,60375,60376],{"class":39,"line":33774},[37,60377,60378],{"class":54},"        next.click()\n",[37,60380,60381],{"class":39,"line":33797},[37,60382,60383],{"class":54},"      }, 1000)\n",[37,60385,60386],{"class":39,"line":33820},[37,60387,33530],{"class":54},[37,60389,60390,60392,60394],{"class":39,"line":33826},[37,60391,52485],{"class":54},[37,60393,51881],{"class":51368},[37,60395,51375],{"class":54},[37,60397,60398,60400,60402],{"class":39,"line":33831},[37,60399,51853],{"class":54},[37,60401,51868],{"class":51368},[37,60403,51375],{"class":54},[37,60405,60406],{"class":39,"line":33840},[37,60407,2472],{"emptyLinePlaceholder":131},[37,60409,60410,60412,60414],{"class":39,"line":33850},[37,60411,51853],{"class":54},[37,60413,50703],{"class":51368},[37,60415,51375],{"class":54},[22070,60417,60419],{"id":60418},"_3252-焦点事件","3.2.5.2 焦点事件",[14,60421,60422],{},"小米搜索框案例：",[27,60424,60426],{"className":50701,"code":60425,"language":50703,"meta":32,"style":32},"\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",[34,60427,60428,60438,60452,60456,60464,60478,60498,60518,60530,60538,60544,60554,60564,60576,60580,60584,60591,60595,60606,60610,60614,60621,60632,60645,60659,60663,60667,60676,60688,60700,60714,60727,60740,60758,60769,60773,60777,60786,60803,60807,60811,60818,60828,60838,60849,60862,60874,60890,60901,60913,60917,60921,60929,60940,60957,60969,60981,60992,60996,61000,61011,61022,61026,61034,61038,61046,61050,61058,61073,61096,61111,61142,61169,61196,61223,61250,61277,61304,61313,61321,61329,61334,61354,61374,61379,61384,61402,61407,61417,61422,61436,61441,61446,61463,61472,61484,61488,61496,61504,61508],{"__ignoreMap":32},[37,60429,60430,60432,60434,60436],{"class":39,"line":40},[37,60431,51365],{"class":54},[37,60433,51369],{"class":51368},[37,60435,51372],{"class":2035},[37,60437,51375],{"class":54},[37,60439,60440,60442,60444,60446,60448,60450],{"class":39,"line":47},[37,60441,1113],{"class":54},[37,60443,50703],{"class":51368},[37,60445,51384],{"class":2035},[37,60447,70],{"class":54},[37,60449,51389],{"class":309},[37,60451,51375],{"class":54},[37,60453,60454],{"class":39,"line":58},[37,60455,2472],{"emptyLinePlaceholder":131},[37,60457,60458,60460,60462],{"class":39,"line":64},[37,60459,1113],{"class":54},[37,60461,51402],{"class":51368},[37,60463,51375],{"class":54},[37,60465,60466,60468,60470,60472,60474,60476],{"class":39,"line":76},[37,60467,51409],{"class":54},[37,60469,51412],{"class":51368},[37,60471,51415],{"class":2035},[37,60473,70],{"class":54},[37,60475,51420],{"class":309},[37,60477,51375],{"class":54},[37,60479,60480,60482,60484,60486,60488,60490,60492,60494,60496],{"class":39,"line":92},[37,60481,51409],{"class":54},[37,60483,51412],{"class":51368},[37,60485,51431],{"class":2035},[37,60487,70],{"class":54},[37,60489,51436],{"class":309},[37,60491,51439],{"class":2035},[37,60493,70],{"class":54},[37,60495,51444],{"class":309},[37,60497,51375],{"class":54},[37,60499,60500,60502,60504,60506,60508,60510,60512,60514,60516],{"class":39,"line":97},[37,60501,51409],{"class":54},[37,60503,51412],{"class":51368},[37,60505,14992],{"class":2035},[37,60507,70],{"class":54},[37,60509,51459],{"class":309},[37,60511,51439],{"class":2035},[37,60513,70],{"class":54},[37,60515,51466],{"class":309},[37,60517,51375],{"class":54},[37,60519,60520,60522,60524,60526,60528],{"class":39,"line":107},[37,60521,51409],{"class":54},[37,60523,51475],{"class":51368},[37,60525,51478],{"class":54},[37,60527,51475],{"class":51368},[37,60529,51375],{"class":54},[37,60531,60532,60534,60536],{"class":39,"line":1390},[37,60533,51409],{"class":54},[37,60535,123],{"class":51368},[37,60537,51375],{"class":54},[37,60539,60540,60542],{"class":39,"line":1402},[37,60541,51495],{"class":51368},[37,60543,15644],{"class":54},[37,60545,60546,60548,60550,60552],{"class":39,"line":1684},[37,60547,51502],{"class":82},[37,60549,51505],{"class":54},[37,60551,396],{"class":82},[37,60553,1364],{"class":54},[37,60555,60556,60558,60560,60562],{"class":39,"line":1689},[37,60557,51514],{"class":82},[37,60559,51505],{"class":54},[37,60561,396],{"class":82},[37,60563,1364],{"class":54},[37,60565,60566,60569,60571,60574],{"class":39,"line":1695},[37,60567,60568],{"class":82},"            box-sizing",[37,60570,51505],{"class":54},[37,60572,60573],{"class":82},"border-box",[37,60575,1364],{"class":54},[37,60577,60578],{"class":39,"line":1700},[37,60579,2601],{"class":54},[37,60581,60582],{"class":39,"line":1714},[37,60583,2472],{"emptyLinePlaceholder":131},[37,60585,60586,60589],{"class":39,"line":1719},[37,60587,60588],{"class":51368},"        ul",[37,60590,15644],{"class":54},[37,60592,60593],{"class":39,"line":1725},[37,60594,2472],{"emptyLinePlaceholder":131},[37,60596,60597,60600,60602,60604],{"class":39,"line":1746},[37,60598,60599],{"class":82},"            list-style",[37,60601,51505],{"class":54},[37,60603,54805],{"class":82},[37,60605,1364],{"class":54},[37,60607,60608],{"class":39,"line":1751},[37,60609,2601],{"class":54},[37,60611,60612],{"class":39,"line":1765},[37,60613,2472],{"emptyLinePlaceholder":131},[37,60615,60616,60619],{"class":39,"line":1770},[37,60617,60618],{"class":2035},"        .mi",[37,60620,15644],{"class":54},[37,60622,60623,60626,60628,60630],{"class":39,"line":1799},[37,60624,60625],{"class":82},"            position",[37,60627,51505],{"class":54},[37,60629,54832],{"class":82},[37,60631,1364],{"class":54},[37,60633,60634,60636,60638,60641,60643],{"class":39,"line":1804},[37,60635,51552],{"class":82},[37,60637,51505],{"class":54},[37,60639,60640],{"class":82},"223",[37,60642,51560],{"class":50},[37,60644,1364],{"class":54},[37,60646,60647,60649,60651,60653,60655,60657],{"class":39,"line":1821},[37,60648,51502],{"class":82},[37,60650,51505],{"class":54},[37,60652,516],{"class":82},[37,60654,51560],{"class":50},[37,60656,51624],{"class":82},[37,60658,1364],{"class":54},[37,60660,60661],{"class":39,"line":1826},[37,60662,2601],{"class":54},[37,60664,60665],{"class":39,"line":1831},[37,60666,2472],{"emptyLinePlaceholder":131},[37,60668,60669,60671,60674],{"class":39,"line":1836},[37,60670,60618],{"class":2035},[37,60672,60673],{"class":51368}," input",[37,60675,15644],{"class":54},[37,60677,60678,60680,60682,60684,60686],{"class":39,"line":1850},[37,60679,51552],{"class":82},[37,60681,51505],{"class":54},[37,60683,60640],{"class":82},[37,60685,51560],{"class":50},[37,60687,1364],{"class":54},[37,60689,60690,60692,60694,60696,60698],{"class":39,"line":1855},[37,60691,51567],{"class":82},[37,60693,51505],{"class":54},[37,60695,810],{"class":82},[37,60697,51560],{"class":50},[37,60699,1364],{"class":54},[37,60701,60702,60704,60706,60708,60710,60712],{"class":39,"line":2649},[37,60703,51514],{"class":82},[37,60705,51505],{"class":54},[37,60707,396],{"class":82},[37,60709,2110],{"class":82},[37,60711,51560],{"class":50},[37,60713,1364],{"class":54},[37,60715,60716,60719,60721,60723,60725],{"class":39,"line":2663},[37,60717,60718],{"class":82},"            font-size",[37,60720,51505],{"class":54},[37,60722,752],{"class":82},[37,60724,51560],{"class":50},[37,60726,1364],{"class":54},[37,60728,60729,60732,60734,60736,60738],{"class":39,"line":2671},[37,60730,60731],{"class":82},"            line-height",[37,60733,51505],{"class":54},[37,60735,810],{"class":82},[37,60737,51560],{"class":50},[37,60739,1364],{"class":54},[37,60741,60742,60745,60747,60749,60751,60753,60756],{"class":39,"line":2676},[37,60743,60744],{"class":82},"            border",[37,60746,51505],{"class":54},[37,60748,422],{"class":82},[37,60750,51560],{"class":50},[37,60752,51589],{"class":82},[37,60754,60755],{"class":82}," #e0e0e0",[37,60757,1364],{"class":54},[37,60759,60760,60763,60765,60767],{"class":39,"line":2682},[37,60761,60762],{"class":82},"            outline",[37,60764,51505],{"class":54},[37,60766,54805],{"class":82},[37,60768,1364],{"class":54},[37,60770,60771],{"class":39,"line":2688},[37,60772,2601],{"class":54},[37,60774,60775],{"class":39,"line":2693},[37,60776,2472],{"emptyLinePlaceholder":131},[37,60778,60779,60781,60784],{"class":39,"line":8020},[37,60780,60618],{"class":2035},[37,60782,60783],{"class":2035}," .search",[37,60785,15644],{"class":54},[37,60787,60788,60790,60792,60794,60796,60798,60801],{"class":39,"line":8044},[37,60789,60744],{"class":82},[37,60791,51505],{"class":54},[37,60793,422],{"class":82},[37,60795,51560],{"class":50},[37,60797,51589],{"class":82},[37,60799,60800],{"class":82}," #ff6700",[37,60802,1364],{"class":54},[37,60804,60805],{"class":39,"line":8049},[37,60806,2601],{"class":54},[37,60808,60809],{"class":39,"line":8055},[37,60810,2472],{"emptyLinePlaceholder":131},[37,60812,60813,60816],{"class":39,"line":8082},[37,60814,60815],{"class":2035},"        .result-list",[37,60817,15644],{"class":54},[37,60819,60820,60822,60824,60826],{"class":39,"line":8087},[37,60821,51540],{"class":82},[37,60823,51505],{"class":54},[37,60825,54805],{"class":82},[37,60827,1364],{"class":54},[37,60829,60830,60832,60834,60836],{"class":39,"line":8093},[37,60831,60625],{"class":82},[37,60833,51505],{"class":54},[37,60835,54899],{"class":82},[37,60837,1364],{"class":54},[37,60839,60840,60843,60845,60847],{"class":39,"line":8105},[37,60841,60842],{"class":82},"            left",[37,60844,51505],{"class":54},[37,60846,396],{"class":82},[37,60848,1364],{"class":54},[37,60850,60851,60854,60856,60858,60860],{"class":39,"line":8117},[37,60852,60853],{"class":82},"            top",[37,60855,51505],{"class":54},[37,60857,810],{"class":82},[37,60859,51560],{"class":50},[37,60861,1364],{"class":54},[37,60863,60864,60866,60868,60870,60872],{"class":39,"line":8129},[37,60865,51552],{"class":82},[37,60867,51505],{"class":54},[37,60869,60640],{"class":82},[37,60871,51560],{"class":50},[37,60873,1364],{"class":54},[37,60875,60876,60878,60880,60882,60884,60886,60888],{"class":39,"line":9788},[37,60877,60744],{"class":82},[37,60879,51505],{"class":54},[37,60881,422],{"class":82},[37,60883,51560],{"class":50},[37,60885,51589],{"class":82},[37,60887,60800],{"class":82},[37,60889,1364],{"class":54},[37,60891,60892,60895,60897,60899],{"class":39,"line":9813},[37,60893,60894],{"class":82},"            border-top",[37,60896,51505],{"class":54},[37,60898,396],{"class":82},[37,60900,1364],{"class":54},[37,60902,60903,60906,60908,60911],{"class":39,"line":9836},[37,60904,60905],{"class":82},"            background",[37,60907,51505],{"class":54},[37,60909,60910],{"class":82},"#fff",[37,60912,1364],{"class":54},[37,60914,60915],{"class":39,"line":9860},[37,60916,2601],{"class":54},[37,60918,60919],{"class":39,"line":9865},[37,60920,2472],{"emptyLinePlaceholder":131},[37,60922,60923,60925,60927],{"class":39,"line":9870},[37,60924,60815],{"class":2035},[37,60926,1471],{"class":51368},[37,60928,15644],{"class":54},[37,60930,60931,60933,60935,60938],{"class":39,"line":9875},[37,60932,51540],{"class":82},[37,60934,51505],{"class":54},[37,60936,60937],{"class":82},"block",[37,60939,1364],{"class":54},[37,60941,60942,60944,60946,60948,60950,60953,60955],{"class":39,"line":9884},[37,60943,51514],{"class":82},[37,60945,51505],{"class":54},[37,60947,549],{"class":82},[37,60949,51560],{"class":50},[37,60951,60952],{"class":82}," 15",[37,60954,51560],{"class":50},[37,60956,1364],{"class":54},[37,60958,60959,60961,60963,60965,60967],{"class":39,"line":9889},[37,60960,60718],{"class":82},[37,60962,51505],{"class":54},[37,60964,702],{"class":82},[37,60966,51560],{"class":50},[37,60968,1364],{"class":54},[37,60970,60971,60974,60976,60979],{"class":39,"line":9895},[37,60972,60973],{"class":82},"            color",[37,60975,51505],{"class":54},[37,60977,60978],{"class":82},"#424242",[37,60980,1364],{"class":54},[37,60982,60983,60986,60988,60990],{"class":39,"line":9916},[37,60984,60985],{"class":82},"            text-decoration",[37,60987,51505],{"class":54},[37,60989,54805],{"class":82},[37,60991,1364],{"class":54},[37,60993,60994],{"class":39,"line":9922},[37,60995,2601],{"class":54},[37,60997,60998],{"class":39,"line":9936},[37,60999,2472],{"emptyLinePlaceholder":131},[37,61001,61002,61004,61006,61009],{"class":39,"line":9942},[37,61003,60815],{"class":2035},[37,61005,1471],{"class":51368},[37,61007,61008],{"class":2035},":hover",[37,61010,15644],{"class":54},[37,61012,61013,61015,61017,61020],{"class":39,"line":9969},[37,61014,51708],{"class":82},[37,61016,51505],{"class":54},[37,61018,61019],{"class":82},"#eee",[37,61021,1364],{"class":54},[37,61023,61024],{"class":39,"line":9978},[37,61025,2601],{"class":54},[37,61027,61028,61030,61032],{"class":39,"line":9984},[37,61029,51844],{"class":54},[37,61031,123],{"class":51368},[37,61033,51375],{"class":54},[37,61035,61036],{"class":39,"line":9992},[37,61037,2472],{"emptyLinePlaceholder":131},[37,61039,61040,61042,61044],{"class":39,"line":9997},[37,61041,51853],{"class":54},[37,61043,51402],{"class":51368},[37,61045,51375],{"class":54},[37,61047,61048],{"class":39,"line":16676},[37,61049,2472],{"emptyLinePlaceholder":131},[37,61051,61052,61054,61056],{"class":39,"line":16682},[37,61053,1113],{"class":54},[37,61055,51868],{"class":51368},[37,61057,51375],{"class":54},[37,61059,61060,61062,61064,61066,61068,61071],{"class":39,"line":16705},[37,61061,51409],{"class":54},[37,61063,51679],{"class":51368},[37,61065,53554],{"class":2035},[37,61067,70],{"class":54},[37,61069,61070],{"class":309},"\"mi\"",[37,61072,51375],{"class":54},[37,61074,61075,61077,61079,61081,61083,61086,61089,61091,61094],{"class":39,"line":16711},[37,61076,55370],{"class":54},[37,61078,53889],{"class":51368},[37,61080,53892],{"class":2035},[37,61082,70],{"class":54},[37,61084,61085],{"class":309},"\"search\"",[37,61087,61088],{"class":2035}," placeholder",[37,61090,70],{"class":54},[37,61092,61093],{"class":309},"\"小米笔记本\"",[37,61095,51375],{"class":54},[37,61097,61098,61100,61102,61104,61106,61109],{"class":39,"line":16734},[37,61099,55370],{"class":54},[37,61101,1210],{"class":51368},[37,61103,53554],{"class":2035},[37,61105,70],{"class":54},[37,61107,61108],{"class":309},"\"result-list\"",[37,61110,51375],{"class":54},[37,61112,61113,61116,61118,61121,61123,61126,61128,61131,61134,61136,61138,61140],{"class":39,"line":16748},[37,61114,61115],{"class":54},"            \u003C",[37,61117,161],{"class":51368},[37,61119,61120],{"class":54},">\u003C",[37,61122,443],{"class":51368},[37,61124,61125],{"class":2035}," href",[37,61127,70],{"class":54},[37,61129,61130],{"class":309},"\"#\"",[37,61132,61133],{"class":54},">全部商品\u003C\u002F",[37,61135,443],{"class":51368},[37,61137,55382],{"class":54},[37,61139,161],{"class":51368},[37,61141,51375],{"class":54},[37,61143,61144,61146,61148,61150,61152,61154,61156,61158,61161,61163,61165,61167],{"class":39,"line":16768},[37,61145,61115],{"class":54},[37,61147,161],{"class":51368},[37,61149,61120],{"class":54},[37,61151,443],{"class":51368},[37,61153,61125],{"class":2035},[37,61155,70],{"class":54},[37,61157,61130],{"class":309},[37,61159,61160],{"class":54},">小米11\u003C\u002F",[37,61162,443],{"class":51368},[37,61164,55382],{"class":54},[37,61166,161],{"class":51368},[37,61168,51375],{"class":54},[37,61170,61171,61173,61175,61177,61179,61181,61183,61185,61188,61190,61192,61194],{"class":39,"line":16774},[37,61172,61115],{"class":54},[37,61174,161],{"class":51368},[37,61176,61120],{"class":54},[37,61178,443],{"class":51368},[37,61180,61125],{"class":2035},[37,61182,70],{"class":54},[37,61184,61130],{"class":309},[37,61186,61187],{"class":54},">小米10S\u003C\u002F",[37,61189,443],{"class":51368},[37,61191,55382],{"class":54},[37,61193,161],{"class":51368},[37,61195,51375],{"class":54},[37,61197,61198,61200,61202,61204,61206,61208,61210,61212,61215,61217,61219,61221],{"class":39,"line":16785},[37,61199,61115],{"class":54},[37,61201,161],{"class":51368},[37,61203,61120],{"class":54},[37,61205,443],{"class":51368},[37,61207,61125],{"class":2035},[37,61209,70],{"class":54},[37,61211,61130],{"class":309},[37,61213,61214],{"class":54},">小米笔记本\u003C\u002F",[37,61216,443],{"class":51368},[37,61218,55382],{"class":54},[37,61220,161],{"class":51368},[37,61222,51375],{"class":54},[37,61224,61225,61227,61229,61231,61233,61235,61237,61239,61242,61244,61246,61248],{"class":39,"line":16808},[37,61226,61115],{"class":54},[37,61228,161],{"class":51368},[37,61230,61120],{"class":54},[37,61232,443],{"class":51368},[37,61234,61125],{"class":2035},[37,61236,70],{"class":54},[37,61238,61130],{"class":309},[37,61240,61241],{"class":54},">小米手机\u003C\u002F",[37,61243,443],{"class":51368},[37,61245,55382],{"class":54},[37,61247,161],{"class":51368},[37,61249,51375],{"class":54},[37,61251,61252,61254,61256,61258,61260,61262,61264,61266,61269,61271,61273,61275],{"class":39,"line":16830},[37,61253,61115],{"class":54},[37,61255,161],{"class":51368},[37,61257,61120],{"class":54},[37,61259,443],{"class":51368},[37,61261,61125],{"class":2035},[37,61263,70],{"class":54},[37,61265,61130],{"class":309},[37,61267,61268],{"class":54},">黑鲨4\u003C\u002F",[37,61270,443],{"class":51368},[37,61272,55382],{"class":54},[37,61274,161],{"class":51368},[37,61276,51375],{"class":54},[37,61278,61279,61281,61283,61285,61287,61289,61291,61293,61296,61298,61300,61302],{"class":39,"line":16835},[37,61280,61115],{"class":54},[37,61282,161],{"class":51368},[37,61284,61120],{"class":54},[37,61286,443],{"class":51368},[37,61288,61125],{"class":2035},[37,61290,70],{"class":54},[37,61292,61130],{"class":309},[37,61294,61295],{"class":54},">空调\u003C\u002F",[37,61297,443],{"class":51368},[37,61299,55382],{"class":54},[37,61301,161],{"class":51368},[37,61303,51375],{"class":54},[37,61305,61306,61309,61311],{"class":39,"line":16841},[37,61307,61308],{"class":54},"        \u003C\u002F",[37,61310,1210],{"class":51368},[37,61312,51375],{"class":54},[37,61314,61315,61317,61319],{"class":39,"line":16855},[37,61316,51844],{"class":54},[37,61318,51679],{"class":51368},[37,61320,51375],{"class":54},[37,61322,61323,61325,61327],{"class":39,"line":16868},[37,61324,51409],{"class":54},[37,61326,51881],{"class":51368},[37,61328,51375],{"class":54},[37,61330,61331],{"class":39,"line":16873},[37,61332,61333],{"class":43},"        \u002F\u002F 1. 获取元素\n",[37,61335,61336,61339,61341,61343,61345,61347,61349,61352],{"class":39,"line":16887},[37,61337,61338],{"class":50},"        const",[37,61340,60673],{"class":82},[37,61342,13636],{"class":50},[37,61344,54464],{"class":54},[37,61346,54467],{"class":2035},[37,61348,208],{"class":54},[37,61350,61351],{"class":309},"'[type=search]'",[37,61353,214],{"class":54},[37,61355,61356,61358,61361,61363,61365,61367,61369,61372],{"class":39,"line":16892},[37,61357,61338],{"class":50},[37,61359,61360],{"class":82}," ul",[37,61362,13636],{"class":50},[37,61364,54464],{"class":54},[37,61366,54467],{"class":2035},[37,61368,208],{"class":54},[37,61370,61371],{"class":309},"'.result-list'",[37,61373,214],{"class":54},[37,61375,61376],{"class":39,"line":16898},[37,61377,61378],{"class":43},"        \u002F\u002F console.log(input)\n",[37,61380,61381],{"class":39,"line":16903},[37,61382,61383],{"class":43},"        \u002F\u002F 2. 监听事件 获得焦点\n",[37,61385,61386,61389,61391,61393,61396,61398,61400],{"class":39,"line":16917},[37,61387,61388],{"class":54},"        input.",[37,61390,57881],{"class":2035},[37,61392,208],{"class":54},[37,61394,61395],{"class":309},"'focus'",[37,61397,12507],{"class":54},[37,61399,54517],{"class":50},[37,61401,54520],{"class":54},[37,61403,61404],{"class":39,"line":16922},[37,61405,61406],{"class":43},"            \u002F\u002F ul显示\n",[37,61408,61409,61412,61414],{"class":39,"line":16927},[37,61410,61411],{"class":54},"            ul.style.display ",[37,61413,70],{"class":50},[37,61415,61416],{"class":309}," 'block'\n",[37,61418,61419],{"class":39,"line":16941},[37,61420,61421],{"class":43},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[37,61423,61424,61427,61429,61431,61434],{"class":39,"line":16953},[37,61425,61426],{"class":54},"            input.classList.",[37,61428,5406],{"class":2035},[37,61430,208],{"class":54},[37,61432,61433],{"class":309},"'search'",[37,61435,214],{"class":54},[37,61437,61438],{"class":39,"line":16958},[37,61439,61440],{"class":54},"        })\n",[37,61442,61443],{"class":39,"line":16971},[37,61444,61445],{"class":43},"        \u002F\u002F 3. 监听事件 失去焦点\n",[37,61447,61448,61450,61452,61454,61457,61459,61461],{"class":39,"line":16976},[37,61449,61388],{"class":54},[37,61451,57881],{"class":2035},[37,61453,208],{"class":54},[37,61455,61456],{"class":309},"'blur'",[37,61458,12507],{"class":54},[37,61460,54517],{"class":50},[37,61462,54520],{"class":54},[37,61464,61465,61467,61469],{"class":39,"line":16981},[37,61466,61411],{"class":54},[37,61468,70],{"class":50},[37,61470,61471],{"class":309}," 'none'\n",[37,61473,61474,61476,61478,61480,61482],{"class":39,"line":16986},[37,61475,61426],{"class":54},[37,61477,57074],{"class":2035},[37,61479,208],{"class":54},[37,61481,61433],{"class":309},[37,61483,214],{"class":54},[37,61485,61486],{"class":39,"line":16999},[37,61487,61440],{"class":54},[37,61489,61490,61492,61494],{"class":39,"line":17004},[37,61491,51844],{"class":54},[37,61493,51881],{"class":51368},[37,61495,51375],{"class":54},[37,61497,61498,61500,61502],{"class":39,"line":32702},[37,61499,51853],{"class":54},[37,61501,51868],{"class":51368},[37,61503,51375],{"class":54},[37,61505,61506],{"class":39,"line":32708},[37,61507,2472],{"emptyLinePlaceholder":131},[37,61509,61510,61512,61514],{"class":39,"line":32714},[37,61511,51853],{"class":54},[37,61513,50703],{"class":51368},[37,61515,51375],{"class":54},[22070,61517,61519],{"id":61518},"_3253-键盘事件","3.2.5.3 键盘事件",[14,61521,61522],{},"评论字数统计案例",[14,61524,61525],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,61527,61528],{},"牢记focus伪类选择器",[51412,61530],{"charSet":61531},"UTF-8",[51412,61533],{"name":61534,"content":61535},"viewport","width=device-width, initial-scale=1.0",[51475,61537,61538],{},"Document",[123,61540,61541],{},"\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",[53889,61543],{"type":5259},[1210,61545,61546,61549],{},[161,61547,61548],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[161,61550,61551],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[27,61553,61555],{"className":50701,"code":61554,"language":50703,"meta":32,"style":32},"\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",[34,61556,61557,61567,61581,61585,61593,61607,61627,61647,61660,61668,61675,61688,61702,61712,61722,61726,61730,61737,61749,61761,61773,61785,61814,61827,61831,61835,61844,61855,61867,61878,61889,61901,61912,61924,61940,61952,61956,61960,61971,61982,61992,62004,62008,62012,62020,62031,62041,62052,62064,62077,62089,62101,62105,62109,62118,62130,62141,62154,62165,62179,62183,62187,62194,62206,62218,62228,62232,62236,62245,62257,62267,62271,62275,62286,62296,62315,62328,62332,62336,62346,62356,62360,62364,62375,62386,62398,62410,62414,62418,62429,62440,62454,62458,62462,62473,62483,62495,62499,62507,62515,62519,62527,62542,62561,62601,62614,62622,62636,62656,62664,62679,62702,62720,62735,62755,62775,62795,62803,62811,62819,62827,62847,62867,62872,62889,62898,62902,62907,62923,62931,62935,62940,62957,62962,62987,62991,62995,63000,63005,63013,63021,63025],{"__ignoreMap":32},[37,61558,61559,61561,61563,61565],{"class":39,"line":40},[37,61560,51365],{"class":54},[37,61562,51369],{"class":51368},[37,61564,51372],{"class":2035},[37,61566,51375],{"class":54},[37,61568,61569,61571,61573,61575,61577,61579],{"class":39,"line":47},[37,61570,1113],{"class":54},[37,61572,50703],{"class":51368},[37,61574,51384],{"class":2035},[37,61576,70],{"class":54},[37,61578,51389],{"class":309},[37,61580,51375],{"class":54},[37,61582,61583],{"class":39,"line":58},[37,61584,2472],{"emptyLinePlaceholder":131},[37,61586,61587,61589,61591],{"class":39,"line":64},[37,61588,1113],{"class":54},[37,61590,51402],{"class":51368},[37,61592,51375],{"class":54},[37,61594,61595,61597,61599,61601,61603,61605],{"class":39,"line":76},[37,61596,52212],{"class":54},[37,61598,51412],{"class":51368},[37,61600,51415],{"class":2035},[37,61602,70],{"class":54},[37,61604,51420],{"class":309},[37,61606,51375],{"class":54},[37,61608,61609,61611,61613,61615,61617,61619,61621,61623,61625],{"class":39,"line":92},[37,61610,52212],{"class":54},[37,61612,51412],{"class":51368},[37,61614,51431],{"class":2035},[37,61616,70],{"class":54},[37,61618,51436],{"class":309},[37,61620,51439],{"class":2035},[37,61622,70],{"class":54},[37,61624,51444],{"class":309},[37,61626,51375],{"class":54},[37,61628,61629,61631,61633,61635,61637,61639,61641,61643,61645],{"class":39,"line":97},[37,61630,52212],{"class":54},[37,61632,51412],{"class":51368},[37,61634,14992],{"class":2035},[37,61636,70],{"class":54},[37,61638,51459],{"class":309},[37,61640,51439],{"class":2035},[37,61642,70],{"class":54},[37,61644,51466],{"class":309},[37,61646,51375],{"class":54},[37,61648,61649,61651,61653,61656,61658],{"class":39,"line":107},[37,61650,52212],{"class":54},[37,61652,51475],{"class":51368},[37,61654,61655],{"class":54},">评论回车发布\u003C\u002F",[37,61657,51475],{"class":51368},[37,61659,51375],{"class":54},[37,61661,61662,61664,61666],{"class":39,"line":1390},[37,61663,52212],{"class":54},[37,61665,123],{"class":51368},[37,61667,51375],{"class":54},[37,61669,61670,61673],{"class":39,"line":1402},[37,61671,61672],{"class":2035},"    .wrapper",[37,61674,15644],{"class":54},[37,61676,61677,61680,61682,61684,61686],{"class":39,"line":1684},[37,61678,61679],{"class":82},"      min-width",[37,61681,51505],{"class":54},[37,61683,4059],{"class":82},[37,61685,51560],{"class":50},[37,61687,1364],{"class":54},[37,61689,61690,61693,61695,61698,61700],{"class":39,"line":1689},[37,61691,61692],{"class":82},"      max-width",[37,61694,51505],{"class":54},[37,61696,61697],{"class":82},"800",[37,61699,51560],{"class":50},[37,61701,1364],{"class":54},[37,61703,61704,61706,61708,61710],{"class":39,"line":1695},[37,61705,55077],{"class":82},[37,61707,51505],{"class":54},[37,61709,51545],{"class":82},[37,61711,1364],{"class":54},[37,61713,61714,61716,61718,61720],{"class":39,"line":1700},[37,61715,55088],{"class":82},[37,61717,51505],{"class":54},[37,61719,51648],{"class":82},[37,61721,1364],{"class":54},[37,61723,61724],{"class":39,"line":1714},[37,61725,2259],{"class":54},[37,61727,61728],{"class":39,"line":1719},[37,61729,2472],{"emptyLinePlaceholder":131},[37,61731,61732,61735],{"class":39,"line":1725},[37,61733,61734],{"class":2035},"    .avatar",[37,61736,15644],{"class":54},[37,61738,61739,61741,61743,61745,61747],{"class":39,"line":1746},[37,61740,54839],{"class":82},[37,61742,51505],{"class":54},[37,61744,810],{"class":82},[37,61746,51560],{"class":50},[37,61748,1364],{"class":54},[37,61750,61751,61753,61755,61757,61759],{"class":39,"line":1751},[37,61752,54853],{"class":82},[37,61754,51505],{"class":54},[37,61756,810],{"class":82},[37,61758,51560],{"class":50},[37,61760,1364],{"class":54},[37,61762,61763,61765,61767,61769,61771],{"class":39,"line":1765},[37,61764,55202],{"class":82},[37,61766,51505],{"class":54},[37,61768,859],{"class":82},[37,61770,533],{"class":50},[37,61772,1364],{"class":54},[37,61774,61775,61778,61780,61783],{"class":39,"line":1770},[37,61776,61777],{"class":82},"      overflow",[37,61779,51505],{"class":54},[37,61781,61782],{"class":82},"hidden",[37,61784,1364],{"class":54},[37,61786,61787,61790,61792,61795,61797,61800,61802,61805,61807,61809,61812],{"class":39,"line":1799},[37,61788,61789],{"class":82},"      background",[37,61791,51505],{"class":54},[37,61793,61794],{"class":82},"url",[37,61796,208],{"class":54},[37,61798,61799],{"class":5288},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[37,61801,13786],{"class":54},[37,61803,61804],{"class":82},"no-repeat",[37,61806,17216],{"class":82},[37,61808,25051],{"class":54},[37,61810,61811],{"class":82},"cover",[37,61813,1364],{"class":54},[37,61815,61816,61819,61821,61823,61825],{"class":39,"line":1804},[37,61817,61818],{"class":82},"      margin-right",[37,61820,51505],{"class":54},[37,61822,903],{"class":82},[37,61824,51560],{"class":50},[37,61826,1364],{"class":54},[37,61828,61829],{"class":39,"line":1821},[37,61830,2259],{"class":54},[37,61832,61833],{"class":39,"line":1826},[37,61834,2472],{"emptyLinePlaceholder":131},[37,61836,61837,61839,61842],{"class":39,"line":1831},[37,61838,61672],{"class":2035},[37,61840,61841],{"class":51368}," textarea",[37,61843,15644],{"class":54},[37,61845,61846,61849,61851,61853],{"class":39,"line":1836},[37,61847,61848],{"class":82},"      outline",[37,61850,51505],{"class":54},[37,61852,54805],{"class":82},[37,61854,1364],{"class":54},[37,61856,61857,61860,61862,61865],{"class":39,"line":1850},[37,61858,61859],{"class":82},"      border-color",[37,61861,51505],{"class":54},[37,61863,61864],{"class":82},"transparent",[37,61866,1364],{"class":54},[37,61868,61869,61872,61874,61876],{"class":39,"line":1855},[37,61870,61871],{"class":82},"      resize",[37,61873,51505],{"class":54},[37,61875,54805],{"class":82},[37,61877,1364],{"class":54},[37,61879,61880,61882,61884,61887],{"class":39,"line":2649},[37,61881,61789],{"class":82},[37,61883,51505],{"class":54},[37,61885,61886],{"class":82},"#f5f5f5",[37,61888,1364],{"class":54},[37,61890,61891,61893,61895,61897,61899],{"class":39,"line":2663},[37,61892,55202],{"class":82},[37,61894,51505],{"class":54},[37,61896,498],{"class":82},[37,61898,51560],{"class":50},[37,61900,1364],{"class":54},[37,61902,61903,61906,61908,61910],{"class":39,"line":2671},[37,61904,61905],{"class":82},"      flex",[37,61907,51505],{"class":54},[37,61909,422],{"class":82},[37,61911,1364],{"class":54},[37,61913,61914,61916,61918,61920,61922],{"class":39,"line":2676},[37,61915,54763],{"class":82},[37,61917,51505],{"class":54},[37,61919,650],{"class":82},[37,61921,51560],{"class":50},[37,61923,1364],{"class":54},[37,61925,61926,61929,61931,61933,61936,61938],{"class":39,"line":2682},[37,61927,61928],{"class":82},"      transition",[37,61930,51505],{"class":54},[37,61932,28194],{"class":82},[37,61934,61935],{"class":82}," 0.5",[37,61937,898],{"class":50},[37,61939,1364],{"class":54},[37,61941,61942,61944,61946,61948,61950],{"class":39,"line":2688},[37,61943,54853],{"class":82},[37,61945,51505],{"class":54},[37,61947,1154],{"class":82},[37,61949,51560],{"class":50},[37,61951,1364],{"class":54},[37,61953,61954],{"class":39,"line":2693},[37,61955,2259],{"class":54},[37,61957,61958],{"class":39,"line":8020},[37,61959,2472],{"emptyLinePlaceholder":131},[37,61961,61962,61964,61966,61969],{"class":39,"line":8044},[37,61963,61672],{"class":2035},[37,61965,61841],{"class":51368},[37,61967,61968],{"class":2035},":focus",[37,61970,15644],{"class":54},[37,61972,61973,61975,61977,61980],{"class":39,"line":8049},[37,61974,61859],{"class":82},[37,61976,51505],{"class":54},[37,61978,61979],{"class":82},"#e4e4e4",[37,61981,1364],{"class":54},[37,61983,61984,61986,61988,61990],{"class":39,"line":8055},[37,61985,61789],{"class":82},[37,61987,51505],{"class":54},[37,61989,60910],{"class":82},[37,61991,1364],{"class":54},[37,61993,61994,61996,61998,62000,62002],{"class":39,"line":8082},[37,61995,54853],{"class":82},[37,61997,51505],{"class":54},[37,61999,859],{"class":82},[37,62001,51560],{"class":50},[37,62003,1364],{"class":54},[37,62005,62006],{"class":39,"line":8087},[37,62007,2259],{"class":54},[37,62009,62010],{"class":39,"line":8093},[37,62011,2472],{"emptyLinePlaceholder":131},[37,62013,62014,62016,62018],{"class":39,"line":8105},[37,62015,61672],{"class":2035},[37,62017,57535],{"class":51368},[37,62019,15644],{"class":54},[37,62021,62022,62024,62026,62029],{"class":39,"line":8117},[37,62023,61789],{"class":82},[37,62025,51505],{"class":54},[37,62027,62028],{"class":82},"#00aeec",[37,62030,1364],{"class":54},[37,62032,62033,62035,62037,62039],{"class":39,"line":8129},[37,62034,57484],{"class":82},[37,62036,51505],{"class":54},[37,62038,60910],{"class":82},[37,62040,1364],{"class":54},[37,62042,62043,62046,62048,62050],{"class":39,"line":9788},[37,62044,62045],{"class":82},"      border",[37,62047,51505],{"class":54},[37,62049,54805],{"class":82},[37,62051,1364],{"class":54},[37,62053,62054,62056,62058,62060,62062],{"class":39,"line":9813},[37,62055,55202],{"class":82},[37,62057,51505],{"class":54},[37,62059,498],{"class":82},[37,62061,51560],{"class":50},[37,62063,1364],{"class":54},[37,62065,62066,62069,62071,62073,62075],{"class":39,"line":9836},[37,62067,62068],{"class":82},"      margin-left",[37,62070,51505],{"class":54},[37,62072,650],{"class":82},[37,62074,51560],{"class":50},[37,62076,1364],{"class":54},[37,62078,62079,62081,62083,62085,62087],{"class":39,"line":9860},[37,62080,54839],{"class":82},[37,62082,51505],{"class":54},[37,62084,561],{"class":82},[37,62086,51560],{"class":50},[37,62088,1364],{"class":54},[37,62090,62091,62094,62096,62099],{"class":39,"line":9865},[37,62092,62093],{"class":82},"      cursor",[37,62095,51505],{"class":54},[37,62097,62098],{"class":82},"pointer",[37,62100,1364],{"class":54},[37,62102,62103],{"class":39,"line":9870},[37,62104,2259],{"class":54},[37,62106,62107],{"class":39,"line":9875},[37,62108,2472],{"emptyLinePlaceholder":131},[37,62110,62111,62113,62116],{"class":39,"line":9884},[37,62112,61672],{"class":2035},[37,62114,62115],{"class":2035}," .total",[37,62117,15644],{"class":54},[37,62119,62120,62122,62124,62126,62128],{"class":39,"line":9889},[37,62121,61818],{"class":82},[37,62123,51505],{"class":54},[37,62125,815],{"class":82},[37,62127,51560],{"class":50},[37,62129,1364],{"class":54},[37,62131,62132,62134,62136,62139],{"class":39,"line":9895},[37,62133,57484],{"class":82},[37,62135,51505],{"class":54},[37,62137,62138],{"class":82},"#999",[37,62140,1364],{"class":54},[37,62142,62143,62146,62148,62150,62152],{"class":39,"line":9916},[37,62144,62145],{"class":82},"      margin-top",[37,62147,51505],{"class":54},[37,62149,524],{"class":82},[37,62151,51560],{"class":50},[37,62153,1364],{"class":54},[37,62155,62156,62159,62161,62163],{"class":39,"line":9922},[37,62157,62158],{"class":82},"      opacity",[37,62160,51505],{"class":54},[37,62162,396],{"class":82},[37,62164,1364],{"class":54},[37,62166,62167,62169,62171,62173,62175,62177],{"class":39,"line":9936},[37,62168,61928],{"class":82},[37,62170,51505],{"class":54},[37,62172,28194],{"class":82},[37,62174,61935],{"class":82},[37,62176,898],{"class":50},[37,62178,1364],{"class":54},[37,62180,62181],{"class":39,"line":9942},[37,62182,2259],{"class":54},[37,62184,62185],{"class":39,"line":9969},[37,62186,2472],{"emptyLinePlaceholder":131},[37,62188,62189,62192],{"class":39,"line":9978},[37,62190,62191],{"class":2035},"    .list",[37,62193,15644],{"class":54},[37,62195,62196,62198,62200,62202,62204],{"class":39,"line":9984},[37,62197,61679],{"class":82},[37,62199,51505],{"class":54},[37,62201,4059],{"class":82},[37,62203,51560],{"class":50},[37,62205,1364],{"class":54},[37,62207,62208,62210,62212,62214,62216],{"class":39,"line":9992},[37,62209,61692],{"class":82},[37,62211,51505],{"class":54},[37,62213,61697],{"class":82},[37,62215,51560],{"class":50},[37,62217,1364],{"class":54},[37,62219,62220,62222,62224,62226],{"class":39,"line":9997},[37,62221,55077],{"class":82},[37,62223,51505],{"class":54},[37,62225,51545],{"class":82},[37,62227,1364],{"class":54},[37,62229,62230],{"class":39,"line":16676},[37,62231,2259],{"class":54},[37,62233,62234],{"class":39,"line":16682},[37,62235,2472],{"emptyLinePlaceholder":131},[37,62237,62238,62240,62243],{"class":39,"line":16705},[37,62239,62191],{"class":2035},[37,62241,62242],{"class":2035}," .item",[37,62244,15644],{"class":54},[37,62246,62247,62249,62251,62253,62255],{"class":39,"line":16711},[37,62248,54839],{"class":82},[37,62250,51505],{"class":54},[37,62252,516],{"class":82},[37,62254,533],{"class":50},[37,62256,1364],{"class":54},[37,62258,62259,62261,62263,62265],{"class":39,"line":16734},[37,62260,55077],{"class":82},[37,62262,51505],{"class":54},[37,62264,51545],{"class":82},[37,62266,1364],{"class":54},[37,62268,62269],{"class":39,"line":16748},[37,62270,2259],{"class":54},[37,62272,62273],{"class":39,"line":16768},[37,62274,2472],{"emptyLinePlaceholder":131},[37,62276,62277,62279,62281,62284],{"class":39,"line":16774},[37,62278,62191],{"class":2035},[37,62280,62242],{"class":2035},[37,62282,62283],{"class":2035}," .info",[37,62285,15644],{"class":54},[37,62287,62288,62290,62292,62294],{"class":39,"line":16785},[37,62289,61905],{"class":82},[37,62291,51505],{"class":54},[37,62293,422],{"class":82},[37,62295,1364],{"class":54},[37,62297,62298,62301,62303,62305,62307,62310,62313],{"class":39,"line":16808},[37,62299,62300],{"class":82},"      border-bottom",[37,62302,51505],{"class":54},[37,62304,422],{"class":82},[37,62306,51560],{"class":50},[37,62308,62309],{"class":82}," dashed",[37,62311,62312],{"class":82}," #e4e4e4",[37,62314,1364],{"class":54},[37,62316,62317,62320,62322,62324,62326],{"class":39,"line":16830},[37,62318,62319],{"class":82},"      padding-bottom",[37,62321,51505],{"class":54},[37,62323,650],{"class":82},[37,62325,51560],{"class":50},[37,62327,1364],{"class":54},[37,62329,62330],{"class":39,"line":16835},[37,62331,2259],{"class":54},[37,62333,62334],{"class":39,"line":16841},[37,62335,2472],{"emptyLinePlaceholder":131},[37,62337,62338,62340,62342,62344],{"class":39,"line":16855},[37,62339,62191],{"class":2035},[37,62341,62242],{"class":2035},[37,62343,6897],{"class":51368},[37,62345,15644],{"class":54},[37,62347,62348,62350,62352,62354],{"class":39,"line":16868},[37,62349,54774],{"class":82},[37,62351,51505],{"class":54},[37,62353,396],{"class":82},[37,62355,1364],{"class":54},[37,62357,62358],{"class":39,"line":16873},[37,62359,2259],{"class":54},[37,62361,62362],{"class":39,"line":16887},[37,62363,2472],{"emptyLinePlaceholder":131},[37,62365,62366,62368,62370,62373],{"class":39,"line":16892},[37,62367,62191],{"class":2035},[37,62369,62242],{"class":2035},[37,62371,62372],{"class":2035}," .name",[37,62374,15644],{"class":54},[37,62376,62377,62379,62381,62384],{"class":39,"line":16898},[37,62378,57484],{"class":82},[37,62380,51505],{"class":54},[37,62382,62383],{"class":82},"#FB7299",[37,62385,1364],{"class":54},[37,62387,62388,62390,62392,62394,62396],{"class":39,"line":16903},[37,62389,54990],{"class":82},[37,62391,51505],{"class":54},[37,62393,752],{"class":82},[37,62395,51560],{"class":50},[37,62397,1364],{"class":54},[37,62399,62400,62403,62405,62408],{"class":39,"line":16917},[37,62401,62402],{"class":82},"      font-weight",[37,62404,51505],{"class":54},[37,62406,62407],{"class":82},"bold",[37,62409,1364],{"class":54},[37,62411,62412],{"class":39,"line":16922},[37,62413,2259],{"class":54},[37,62415,62416],{"class":39,"line":16927},[37,62417,2472],{"emptyLinePlaceholder":131},[37,62419,62420,62422,62424,62427],{"class":39,"line":16941},[37,62421,62191],{"class":2035},[37,62423,62242],{"class":2035},[37,62425,62426],{"class":2035}," .text",[37,62428,15644],{"class":54},[37,62430,62431,62433,62435,62438],{"class":39,"line":16953},[37,62432,57484],{"class":82},[37,62434,51505],{"class":54},[37,62436,62437],{"class":82},"#333",[37,62439,1364],{"class":54},[37,62441,62442,62444,62446,62448,62450,62452],{"class":39,"line":16958},[37,62443,54763],{"class":82},[37,62445,51505],{"class":54},[37,62447,650],{"class":82},[37,62449,51560],{"class":50},[37,62451,4165],{"class":82},[37,62453,1364],{"class":54},[37,62455,62456],{"class":39,"line":16971},[37,62457,2259],{"class":54},[37,62459,62460],{"class":39,"line":16976},[37,62461,2472],{"emptyLinePlaceholder":131},[37,62463,62464,62466,62468,62471],{"class":39,"line":16981},[37,62465,62191],{"class":2035},[37,62467,62242],{"class":2035},[37,62469,62470],{"class":2035}," .time",[37,62472,15644],{"class":54},[37,62474,62475,62477,62479,62481],{"class":39,"line":16986},[37,62476,57484],{"class":82},[37,62478,51505],{"class":54},[37,62480,62138],{"class":82},[37,62482,1364],{"class":54},[37,62484,62485,62487,62489,62491,62493],{"class":39,"line":16999},[37,62486,54990],{"class":82},[37,62488,51505],{"class":54},[37,62490,702],{"class":82},[37,62492,51560],{"class":50},[37,62494,1364],{"class":54},[37,62496,62497],{"class":39,"line":17004},[37,62498,2259],{"class":54},[37,62500,62501,62503,62505],{"class":39,"line":32702},[37,62502,52485],{"class":54},[37,62504,123],{"class":51368},[37,62506,51375],{"class":54},[37,62508,62509,62511,62513],{"class":39,"line":32708},[37,62510,51853],{"class":54},[37,62512,51402],{"class":51368},[37,62514,51375],{"class":54},[37,62516,62517],{"class":39,"line":32714},[37,62518,2472],{"emptyLinePlaceholder":131},[37,62520,62521,62523,62525],{"class":39,"line":32720},[37,62522,1113],{"class":54},[37,62524,51868],{"class":51368},[37,62526,51375],{"class":54},[37,62528,62529,62531,62533,62535,62537,62540],{"class":39,"line":32726},[37,62530,52212],{"class":54},[37,62532,51679],{"class":51368},[37,62534,53554],{"class":2035},[37,62536,70],{"class":54},[37,62538,62539],{"class":309},"\"wrapper\"",[37,62541,51375],{"class":54},[37,62543,62544,62546,62548,62550,62552,62555,62557,62559],{"class":39,"line":32737},[37,62545,51409],{"class":54},[37,62547,645],{"class":51368},[37,62549,53554],{"class":2035},[37,62551,70],{"class":54},[37,62553,62554],{"class":309},"\"avatar\"",[37,62556,55382],{"class":54},[37,62558,645],{"class":51368},[37,62560,51375],{"class":54},[37,62562,62563,62565,62567,62569,62571,62574,62576,62578,62581,62583,62585,62587,62590,62592,62595,62597,62599],{"class":39,"line":32743},[37,62564,51409],{"class":54},[37,62566,54356],{"class":51368},[37,62568,15031],{"class":2035},[37,62570,70],{"class":54},[37,62572,62573],{"class":309},"\"tx\"",[37,62575,61088],{"class":2035},[37,62577,70],{"class":54},[37,62579,62580],{"class":309},"\"发一条友善的评论\"",[37,62582,54379],{"class":2035},[37,62584,70],{"class":54},[37,62586,3773],{"class":309},[37,62588,62589],{"class":2035}," maxlength",[37,62591,70],{"class":54},[37,62593,62594],{"class":309},"\"200\"",[37,62596,55382],{"class":54},[37,62598,54356],{"class":51368},[37,62600,51375],{"class":54},[37,62602,62603,62605,62607,62610,62612],{"class":39,"line":32763},[37,62604,51409],{"class":54},[37,62606,53955],{"class":51368},[37,62608,62609],{"class":54},">发布\u003C\u002F",[37,62611,53955],{"class":51368},[37,62613,51375],{"class":54},[37,62615,62616,62618,62620],{"class":39,"line":32769},[37,62617,52485],{"class":54},[37,62619,51679],{"class":51368},[37,62621,51375],{"class":54},[37,62623,62624,62626,62628,62630,62632,62634],{"class":39,"line":32780},[37,62625,52212],{"class":54},[37,62627,51679],{"class":51368},[37,62629,53554],{"class":2035},[37,62631,70],{"class":54},[37,62633,62539],{"class":309},[37,62635,51375],{"class":54},[37,62637,62638,62640,62642,62644,62646,62649,62652,62654],{"class":39,"line":32786},[37,62639,51409],{"class":54},[37,62641,37],{"class":51368},[37,62643,53554],{"class":2035},[37,62645,70],{"class":54},[37,62647,62648],{"class":309},"\"total\"",[37,62650,62651],{"class":54},">0\u002F200字\u003C\u002F",[37,62653,37],{"class":51368},[37,62655,51375],{"class":54},[37,62657,62658,62660,62662],{"class":39,"line":32792},[37,62659,52485],{"class":54},[37,62661,51679],{"class":51368},[37,62663,51375],{"class":54},[37,62665,62666,62668,62670,62672,62674,62677],{"class":39,"line":32798},[37,62667,52212],{"class":54},[37,62669,51679],{"class":51368},[37,62671,53554],{"class":2035},[37,62673,70],{"class":54},[37,62675,62676],{"class":309},"\"list\"",[37,62678,51375],{"class":54},[37,62680,62681,62683,62685,62687,62689,62692,62695,62697,62700],{"class":39,"line":32804},[37,62682,51409],{"class":54},[37,62684,51679],{"class":51368},[37,62686,53554],{"class":2035},[37,62688,70],{"class":54},[37,62690,62691],{"class":309},"\"item\"",[37,62693,62694],{"class":2035}," style",[37,62696,70],{"class":54},[37,62698,62699],{"class":309},"\"display: none;\"",[37,62701,51375],{"class":54},[37,62703,62704,62706,62708,62710,62712,62714,62716,62718],{"class":39,"line":32810},[37,62705,55302],{"class":54},[37,62707,645],{"class":51368},[37,62709,53554],{"class":2035},[37,62711,70],{"class":54},[37,62713,62554],{"class":309},[37,62715,55382],{"class":54},[37,62717,645],{"class":51368},[37,62719,51375],{"class":54},[37,62721,62722,62724,62726,62728,62730,62733],{"class":39,"line":32816},[37,62723,55302],{"class":54},[37,62725,51679],{"class":51368},[37,62727,53554],{"class":2035},[37,62729,70],{"class":54},[37,62731,62732],{"class":309},"\"info\"",[37,62734,51375],{"class":54},[37,62736,62737,62739,62741,62743,62745,62748,62751,62753],{"class":39,"line":32822},[37,62738,55370],{"class":54},[37,62740,14],{"class":51368},[37,62742,53554],{"class":2035},[37,62744,70],{"class":54},[37,62746,62747],{"class":309},"\"name\"",[37,62749,62750],{"class":54},">清风徐来\u003C\u002F",[37,62752,14],{"class":51368},[37,62754,51375],{"class":54},[37,62756,62757,62759,62761,62763,62765,62768,62771,62773],{"class":39,"line":32842},[37,62758,55370],{"class":54},[37,62760,14],{"class":51368},[37,62762,53554],{"class":2035},[37,62764,70],{"class":54},[37,62766,62767],{"class":309},"\"text\"",[37,62769,62770],{"class":54},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[37,62772,14],{"class":51368},[37,62774,51375],{"class":54},[37,62776,62777,62779,62781,62783,62785,62788,62791,62793],{"class":39,"line":32848},[37,62778,55370],{"class":54},[37,62780,14],{"class":51368},[37,62782,53554],{"class":2035},[37,62784,70],{"class":54},[37,62786,62787],{"class":309},"\"time\"",[37,62789,62790],{"class":54},">2022-10-10 20:29:21\u003C\u002F",[37,62792,14],{"class":51368},[37,62794,51375],{"class":54},[37,62796,62797,62799,62801],{"class":39,"line":32864},[37,62798,55475],{"class":54},[37,62800,51679],{"class":51368},[37,62802,51375],{"class":54},[37,62804,62805,62807,62809],{"class":39,"line":32870},[37,62806,51844],{"class":54},[37,62808,51679],{"class":51368},[37,62810,51375],{"class":54},[37,62812,62813,62815,62817],{"class":39,"line":32884},[37,62814,52485],{"class":54},[37,62816,51679],{"class":51368},[37,62818,51375],{"class":54},[37,62820,62821,62823,62825],{"class":39,"line":32890},[37,62822,52212],{"class":54},[37,62824,51881],{"class":51368},[37,62826,51375],{"class":54},[37,62828,62829,62831,62834,62836,62838,62840,62842,62845],{"class":39,"line":32905},[37,62830,11293],{"class":50},[37,62832,62833],{"class":82}," tx",[37,62835,13636],{"class":50},[37,62837,54464],{"class":54},[37,62839,54467],{"class":2035},[37,62841,208],{"class":54},[37,62843,62844],{"class":309},"'#tx'",[37,62846,214],{"class":54},[37,62848,62849,62851,62854,62856,62858,62860,62862,62865],{"class":39,"line":32911},[37,62850,11293],{"class":50},[37,62852,62853],{"class":82}," total",[37,62855,13636],{"class":50},[37,62857,54464],{"class":54},[37,62859,54467],{"class":2035},[37,62861,208],{"class":54},[37,62863,62864],{"class":309},"'.total'",[37,62866,214],{"class":54},[37,62868,62869],{"class":39,"line":32920},[37,62870,62871],{"class":43},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[37,62873,62874,62877,62879,62881,62883,62885,62887],{"class":39,"line":32926},[37,62875,62876],{"class":54},"    tx.",[37,62878,57881],{"class":2035},[37,62880,208],{"class":54},[37,62882,61395],{"class":309},[37,62884,12507],{"class":54},[37,62886,54517],{"class":50},[37,62888,54520],{"class":54},[37,62890,62891,62894,62896],{"class":39,"line":32935},[37,62892,62893],{"class":54},"      total.style.opacity ",[37,62895,70],{"class":50},[37,62897,55767],{"class":82},[37,62899,62900],{"class":39,"line":32941},[37,62901,33530],{"class":54},[37,62903,62904],{"class":39,"line":32947},[37,62905,62906],{"class":43},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[37,62908,62909,62911,62913,62915,62917,62919,62921],{"class":39,"line":32956},[37,62910,62876],{"class":54},[37,62912,57881],{"class":2035},[37,62914,208],{"class":54},[37,62916,61456],{"class":309},[37,62918,12507],{"class":54},[37,62920,54517],{"class":50},[37,62922,54520],{"class":54},[37,62924,62925,62927,62929],{"class":39,"line":32962},[37,62926,62893],{"class":54},[37,62928,70],{"class":50},[37,62930,47401],{"class":82},[37,62932,62933],{"class":39,"line":32973},[37,62934,33530],{"class":54},[37,62936,62937],{"class":39,"line":32979},[37,62938,62939],{"class":43},"    \u002F\u002F 3. 检测用户输入\n",[37,62941,62942,62944,62946,62948,62951,62953,62955],{"class":39,"line":32998},[37,62943,62876],{"class":54},[37,62945,57881],{"class":2035},[37,62947,208],{"class":54},[37,62949,62950],{"class":309},"'input'",[37,62952,12507],{"class":54},[37,62954,54517],{"class":50},[37,62956,54520],{"class":54},[37,62958,62959],{"class":39,"line":33004},[37,62960,62961],{"class":43},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[37,62963,62964,62967,62969,62972,62975,62977,62980,62982,62984],{"class":39,"line":33015},[37,62965,62966],{"class":54},"      total.innerHTML ",[37,62968,70],{"class":50},[37,62970,62971],{"class":309}," `${",[37,62973,62974],{"class":54},"tx",[37,62976,761],{"class":309},[37,62978,62979],{"class":54},"value",[37,62981,761],{"class":309},[37,62983,52036],{"class":82},[37,62985,62986],{"class":309},"}\u002F200字`\n",[37,62988,62989],{"class":39,"line":33021},[37,62990,33530],{"class":54},[37,62992,62993],{"class":39,"line":33041},[37,62994,2472],{"emptyLinePlaceholder":131},[37,62996,62997],{"class":39,"line":33057},[37,62998,62999],{"class":43},"    \u002F\u002F const str = 'andy'\n",[37,63001,63002],{"class":39,"line":33063},[37,63003,63004],{"class":43},"    \u002F\u002F console.log(str.length)\n",[37,63006,63007,63009,63011],{"class":39,"line":33077},[37,63008,52485],{"class":54},[37,63010,51881],{"class":51368},[37,63012,51375],{"class":54},[37,63014,63015,63017,63019],{"class":39,"line":33083},[37,63016,51853],{"class":54},[37,63018,51868],{"class":51368},[37,63020,51375],{"class":54},[37,63022,63023],{"class":39,"line":33089},[37,63024,2472],{"emptyLinePlaceholder":131},[37,63026,63027,63029,63031],{"class":39,"line":33100},[37,63028,51853],{"class":54},[37,63030,50703],{"class":51368},[37,63032,51375],{"class":54},[22070,63034,63036],{"id":63035},"_3254-change事件","3.2.5.4 change事件",[14,63038,63039],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,63041,63042],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,63044,63045],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[27,63047,63049],{"className":50701,"code":63048,"language":50703,"meta":32,"style":32},"\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",[34,63050,63051,63061,63075,63079,63087,63101,63121,63133,63141,63145,63153,63167,63175,63193,63211,63223,63227,63235,63243,63247],{"__ignoreMap":32},[37,63052,63053,63055,63057,63059],{"class":39,"line":40},[37,63054,51365],{"class":54},[37,63056,51369],{"class":51368},[37,63058,51372],{"class":2035},[37,63060,51375],{"class":54},[37,63062,63063,63065,63067,63069,63071,63073],{"class":39,"line":47},[37,63064,1113],{"class":54},[37,63066,50703],{"class":51368},[37,63068,51384],{"class":2035},[37,63070,70],{"class":54},[37,63072,51389],{"class":309},[37,63074,51375],{"class":54},[37,63076,63077],{"class":39,"line":58},[37,63078,2472],{"emptyLinePlaceholder":131},[37,63080,63081,63083,63085],{"class":39,"line":64},[37,63082,1113],{"class":54},[37,63084,51402],{"class":51368},[37,63086,51375],{"class":54},[37,63088,63089,63091,63093,63095,63097,63099],{"class":39,"line":76},[37,63090,52212],{"class":54},[37,63092,51412],{"class":51368},[37,63094,51415],{"class":2035},[37,63096,70],{"class":54},[37,63098,51420],{"class":309},[37,63100,51375],{"class":54},[37,63102,63103,63105,63107,63109,63111,63113,63115,63117,63119],{"class":39,"line":92},[37,63104,52212],{"class":54},[37,63106,51412],{"class":51368},[37,63108,14992],{"class":2035},[37,63110,70],{"class":54},[37,63112,51459],{"class":309},[37,63114,51439],{"class":2035},[37,63116,70],{"class":54},[37,63118,51466],{"class":309},[37,63120,51375],{"class":54},[37,63122,63123,63125,63127,63129,63131],{"class":39,"line":97},[37,63124,52212],{"class":54},[37,63126,51475],{"class":51368},[37,63128,51478],{"class":54},[37,63130,51475],{"class":51368},[37,63132,51375],{"class":54},[37,63134,63135,63137,63139],{"class":39,"line":107},[37,63136,51853],{"class":54},[37,63138,51402],{"class":51368},[37,63140,51375],{"class":54},[37,63142,63143],{"class":39,"line":1390},[37,63144,2472],{"emptyLinePlaceholder":131},[37,63146,63147,63149,63151],{"class":39,"line":1402},[37,63148,1113],{"class":54},[37,63150,51868],{"class":51368},[37,63152,51375],{"class":54},[37,63154,63155,63157,63159,63161,63163,63165],{"class":39,"line":1684},[37,63156,52212],{"class":54},[37,63158,53889],{"class":51368},[37,63160,53892],{"class":2035},[37,63162,70],{"class":54},[37,63164,62767],{"class":309},[37,63166,51375],{"class":54},[37,63168,63169,63171,63173],{"class":39,"line":1689},[37,63170,52212],{"class":54},[37,63172,51881],{"class":51368},[37,63174,51375],{"class":54},[37,63176,63177,63179,63181,63183,63185,63187,63189,63191],{"class":39,"line":1695},[37,63178,11293],{"class":50},[37,63180,60673],{"class":82},[37,63182,13636],{"class":50},[37,63184,54464],{"class":54},[37,63186,54467],{"class":2035},[37,63188,208],{"class":54},[37,63190,62950],{"class":309},[37,63192,214],{"class":54},[37,63194,63195,63198,63200,63202,63205,63207,63209],{"class":39,"line":1700},[37,63196,63197],{"class":54},"    input.",[37,63199,57881],{"class":2035},[37,63201,208],{"class":54},[37,63203,63204],{"class":309},"'change'",[37,63206,12507],{"class":54},[37,63208,54517],{"class":50},[37,63210,54520],{"class":54},[37,63212,63213,63215,63217,63219,63221],{"class":39,"line":1714},[37,63214,58312],{"class":54},[37,63216,58315],{"class":2035},[37,63218,208],{"class":54},[37,63220,796],{"class":82},[37,63222,214],{"class":54},[37,63224,63225],{"class":39,"line":1719},[37,63226,33530],{"class":54},[37,63228,63229,63231,63233],{"class":39,"line":1725},[37,63230,52485],{"class":54},[37,63232,51881],{"class":51368},[37,63234,51375],{"class":54},[37,63236,63237,63239,63241],{"class":39,"line":1746},[37,63238,51853],{"class":54},[37,63240,51868],{"class":51368},[37,63242,51375],{"class":54},[37,63244,63245],{"class":39,"line":1751},[37,63246,2472],{"emptyLinePlaceholder":131},[37,63248,63249,63251,63253],{"class":39,"line":1765},[37,63250,51853],{"class":54},[37,63252,50703],{"class":51368},[37,63254,51375],{"class":54},[14,63256,63257],{},"总结：内容发生改变才回去触发",[175,63259,63261],{"id":63260},"_326-事件对象","3.2.6 事件对象",[22070,63263,63265],{"id":63264},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63267,63268],{},[119,63269],{"alt":32,"src":63270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63272,63273],{},[119,63274],{"alt":32,"src":63275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63277,63278],{},"点击一次，就输出了事件对象，它是个对象",[14,63280,63281],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63283,63284],{},[119,63285],{"alt":32,"src":63286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22070,63288,63290],{"id":63289},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63292,63293],{},[119,63294],{"alt":32,"src":63295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63297,63298],{},"实现按特殊字符才是实现打印输出效果：",[27,63300,63302],{"className":53135,"code":63301,"language":53137,"meta":32,"style":32},"\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",[34,63303,63304,63312,63317,63331,63339,63344,63349,63354,63359,63364,63369,63374,63379,63384,63388,63392,63400],{"__ignoreMap":32},[37,63305,63306,63308,63310],{"class":39,"line":40},[37,63307,1113],{"class":54},[37,63309,51868],{"class":51368},[37,63311,51375],{"class":54},[37,63313,63314],{"class":39,"line":47},[37,63315,63316],{"class":43},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[37,63318,63319,63321,63323,63325,63327,63329],{"class":39,"line":58},[37,63320,52212],{"class":54},[37,63322,53889],{"class":51368},[37,63324,53892],{"class":2035},[37,63326,70],{"class":54},[37,63328,62767],{"class":309},[37,63330,51375],{"class":54},[37,63332,63333,63335,63337],{"class":39,"line":64},[37,63334,52212],{"class":54},[37,63336,51881],{"class":51368},[37,63338,51375],{"class":54},[37,63340,63341],{"class":39,"line":76},[37,63342,63343],{"class":54},"    \u002F\u002F const btn = document.querySelector('button')\n",[37,63345,63346],{"class":39,"line":92},[37,63347,63348],{"class":54},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[37,63350,63351],{"class":39,"line":97},[37,63352,63353],{"class":54},"    \u002F\u002F   console.log(e);\n",[37,63355,63356],{"class":39,"line":107},[37,63357,63358],{"class":54},"    \u002F\u002F })\n",[37,63360,63361],{"class":39,"line":1390},[37,63362,63363],{"class":54},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[37,63365,63366],{"class":39,"line":1402},[37,63367,63368],{"class":54},"    const input = document.querySelector('input')\n",[37,63370,63371],{"class":39,"line":1684},[37,63372,63373],{"class":54},"    input.addEventListener('keyup', function (e) {\n",[37,63375,63376],{"class":39,"line":1689},[37,63377,63378],{"class":54},"      if (e.key === 'Enter') {\n",[37,63380,63381],{"class":39,"line":1695},[37,63382,63383],{"class":54},"        console.log('我按下了回车键')\n",[37,63385,63386],{"class":39,"line":1700},[37,63387,52466],{"class":54},[37,63389,63390],{"class":39,"line":1714},[37,63391,33530],{"class":54},[37,63393,63394,63396,63398],{"class":39,"line":1719},[37,63395,52485],{"class":54},[37,63397,51881],{"class":51368},[37,63399,51375],{"class":54},[37,63401,63402,63404,63406],{"class":39,"line":1725},[37,63403,51853],{"class":54},[37,63405,51868],{"class":51368},[37,63407,51375],{"class":54},[22070,63409,63411],{"id":63410},"_3263-trim方法","3.2.6.3 trim方法",[14,63413,63414],{},[119,63415],{"alt":32,"src":63416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,63418,63419],{},[119,63420],{"alt":32,"src":63421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,63423,63424],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,63426,63427],{},"str.trim()",[175,63429,63431],{"id":63430},"_327-环境对象","3.2.7 环境对象",[14,63433,63434],{},[119,63435],{"alt":32,"src":63436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,63438,63439],{},[119,63440],{"alt":32,"src":63441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,63443,63444],{},[119,63445],{"alt":32,"src":63446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,63448,63449],{},"实际函数调用是window.fn()",[14,63451,63452],{},"普通函数里面this指向的是window",[1210,63454,63455,63458,63461],{},[161,63456,63457],{},"在普通函数下，this指向的是window",[161,63459,63460],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[161,63462,63463],{},"箭头函数没有this",[14,63465,63466],{},"粗略记法就是：谁调用，this就指向谁",[14,63468,63469],{},[119,63470],{"alt":32,"src":63471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,63473,63474],{},[119,63475],{"alt":32,"src":63476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,63478,63479],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,63481,63482],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[27,63484,63486],{"className":53135,"code":63485,"language":53137,"meta":32,"style":32},"\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",[34,63487,63488,63496,63508,63516,63521,63526,63531,63536,63540,63548],{"__ignoreMap":32},[37,63489,63490,63492,63494],{"class":39,"line":40},[37,63491,1113],{"class":54},[37,63493,51868],{"class":51368},[37,63495,51375],{"class":54},[37,63497,63498,63500,63502,63504,63506],{"class":39,"line":47},[37,63499,52212],{"class":54},[37,63501,53955],{"class":51368},[37,63503,53961],{"class":54},[37,63505,53955],{"class":51368},[37,63507,51375],{"class":54},[37,63509,63510,63512,63514],{"class":39,"line":58},[37,63511,52212],{"class":54},[37,63513,51881],{"class":51368},[37,63515,51375],{"class":54},[37,63517,63518],{"class":39,"line":64},[37,63519,63520],{"class":54},"    const button = document.querySelector('button')\n",[37,63522,63523],{"class":39,"line":76},[37,63524,63525],{"class":54},"    button.addEventListener('click', function () {\n",[37,63527,63528],{"class":39,"line":92},[37,63529,63530],{"class":54},"      \u002F\u002F console.log(this);\n",[37,63532,63533],{"class":39,"line":97},[37,63534,63535],{"class":54},"      this.style.color = 'pink'\n",[37,63537,63538],{"class":39,"line":107},[37,63539,33530],{"class":54},[37,63541,63542,63544,63546],{"class":39,"line":1390},[37,63543,52485],{"class":54},[37,63545,51881],{"class":51368},[37,63547,51375],{"class":54},[37,63549,63550,63552,63554],{"class":39,"line":1402},[37,63551,51853],{"class":54},[37,63553,51868],{"class":51368},[37,63555,51375],{"class":54},[175,63557,63559],{"id":63558},"_328-回调函数","3.2.8 回调函数",[14,63561,63562],{},[119,63563],{"alt":32,"src":63564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,63566,63567],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,63569,11404],{},[1210,63571,63572,63575,63578],{},[161,63573,63574],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[161,63576,63577],{},"回调函数本质还是函数，只不过把它当成参数使用",[161,63579,63580],{},"使用匿名函数做为回调函数比较常见",[175,63582,63584],{"id":63583},"_329-tab栏切换","3.2.9 tab栏切换",[14,63586,63587],{},[119,63588],{"alt":32,"src":63589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[27,63591,63593],{"className":50701,"code":63592,"language":50703,"meta":32,"style":32},"\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",[34,63594,63595,63605,63619,63623,63631,63645,63665,63685,63698,63706,63712,63722,63732,63736,63740,63747,63760,63773,63785,63801,63805,63809,63816,63828,63840,63852,63862,63872,63876,63880,63889,63901,63912,63924,63928,63932,63940,63950,63960,63970,63974,63978,63988,64002,64014,64018,64022,64034,64045,64062,64072,64076,64080,64095,64106,64116,64120,64124,64131,64146,64150,64154,64162,64172,64176,64180,64189,64199,64203,64211,64219,64223,64231,64246,64261,64274,64282,64316,64343,64370,64397,64424,64432,64440,64455,64492,64527,64562,64597,64632,64640,64648,64656,64661,64666,64686,64691,64720,64725,64730,64748,64753,64758,64763,64785,64790,64806,64810,64815,64820,64841,64846,64875,64879,64884,64888,64896,64904,64908],{"__ignoreMap":32},[37,63596,63597,63599,63601,63603],{"class":39,"line":40},[37,63598,51365],{"class":54},[37,63600,51369],{"class":51368},[37,63602,51372],{"class":2035},[37,63604,51375],{"class":54},[37,63606,63607,63609,63611,63613,63615,63617],{"class":39,"line":47},[37,63608,1113],{"class":54},[37,63610,50703],{"class":51368},[37,63612,51384],{"class":2035},[37,63614,70],{"class":54},[37,63616,51389],{"class":309},[37,63618,51375],{"class":54},[37,63620,63621],{"class":39,"line":58},[37,63622,2472],{"emptyLinePlaceholder":131},[37,63624,63625,63627,63629],{"class":39,"line":64},[37,63626,1113],{"class":54},[37,63628,51402],{"class":51368},[37,63630,51375],{"class":54},[37,63632,63633,63635,63637,63639,63641,63643],{"class":39,"line":76},[37,63634,52212],{"class":54},[37,63636,51412],{"class":51368},[37,63638,51415],{"class":2035},[37,63640,70],{"class":54},[37,63642,51420],{"class":309},[37,63644,59195],{"class":54},[37,63646,63647,63649,63651,63653,63655,63657,63659,63661,63663],{"class":39,"line":92},[37,63648,52212],{"class":54},[37,63650,51412],{"class":51368},[37,63652,51431],{"class":2035},[37,63654,70],{"class":54},[37,63656,51436],{"class":309},[37,63658,51439],{"class":2035},[37,63660,70],{"class":54},[37,63662,51444],{"class":309},[37,63664,59195],{"class":54},[37,63666,63667,63669,63671,63673,63675,63677,63679,63681,63683],{"class":39,"line":97},[37,63668,52212],{"class":54},[37,63670,51412],{"class":51368},[37,63672,14992],{"class":2035},[37,63674,70],{"class":54},[37,63676,51459],{"class":309},[37,63678,51439],{"class":2035},[37,63680,70],{"class":54},[37,63682,51466],{"class":309},[37,63684,59195],{"class":54},[37,63686,63687,63689,63691,63694,63696],{"class":39,"line":107},[37,63688,52212],{"class":54},[37,63690,51475],{"class":51368},[37,63692,63693],{"class":54},">tab栏切换\u003C\u002F",[37,63695,51475],{"class":51368},[37,63697,51375],{"class":54},[37,63699,63700,63702,63704],{"class":39,"line":1390},[37,63701,52212],{"class":54},[37,63703,123],{"class":51368},[37,63705,51375],{"class":54},[37,63707,63708,63710],{"class":39,"line":1402},[37,63709,6475],{"class":51368},[37,63711,15644],{"class":54},[37,63713,63714,63716,63718,63720],{"class":39,"line":1684},[37,63715,54774],{"class":82},[37,63717,51505],{"class":54},[37,63719,396],{"class":82},[37,63721,1364],{"class":54},[37,63723,63724,63726,63728,63730],{"class":39,"line":1689},[37,63725,54763],{"class":82},[37,63727,51505],{"class":54},[37,63729,396],{"class":82},[37,63731,1364],{"class":54},[37,63733,63734],{"class":39,"line":1695},[37,63735,2259],{"class":54},[37,63737,63738],{"class":39,"line":1700},[37,63739,2472],{"emptyLinePlaceholder":131},[37,63741,63742,63745],{"class":39,"line":1714},[37,63743,63744],{"class":2035},"    .tab",[37,63746,15644],{"class":54},[37,63748,63749,63751,63753,63756,63758],{"class":39,"line":1719},[37,63750,54839],{"class":82},[37,63752,51505],{"class":54},[37,63754,63755],{"class":82},"590",[37,63757,51560],{"class":50},[37,63759,1364],{"class":54},[37,63761,63762,63764,63766,63769,63771],{"class":39,"line":1725},[37,63763,54853],{"class":82},[37,63765,51505],{"class":54},[37,63767,63768],{"class":82},"340",[37,63770,51560],{"class":50},[37,63772,1364],{"class":54},[37,63774,63775,63777,63779,63781,63783],{"class":39,"line":1746},[37,63776,54774],{"class":82},[37,63778,51505],{"class":54},[37,63780,903],{"class":82},[37,63782,51560],{"class":50},[37,63784,1364],{"class":54},[37,63786,63787,63789,63791,63793,63795,63797,63799],{"class":39,"line":1751},[37,63788,62045],{"class":82},[37,63790,51505],{"class":54},[37,63792,422],{"class":82},[37,63794,51560],{"class":50},[37,63796,51589],{"class":82},[37,63798,62312],{"class":82},[37,63800,1364],{"class":54},[37,63802,63803],{"class":39,"line":1765},[37,63804,2259],{"class":54},[37,63806,63807],{"class":39,"line":1770},[37,63808,2472],{"emptyLinePlaceholder":131},[37,63810,63811,63814],{"class":39,"line":1799},[37,63812,63813],{"class":2035},"    .tab-nav",[37,63815,15644],{"class":54},[37,63817,63818,63820,63822,63824,63826],{"class":39,"line":1804},[37,63819,54839],{"class":82},[37,63821,51505],{"class":54},[37,63823,516],{"class":82},[37,63825,533],{"class":50},[37,63827,1364],{"class":54},[37,63829,63830,63832,63834,63836,63838],{"class":39,"line":1821},[37,63831,54853],{"class":82},[37,63833,51505],{"class":54},[37,63835,1110],{"class":82},[37,63837,51560],{"class":50},[37,63839,1364],{"class":54},[37,63841,63842,63844,63846,63848,63850],{"class":39,"line":1826},[37,63843,57427],{"class":82},[37,63845,51505],{"class":54},[37,63847,1110],{"class":82},[37,63849,51560],{"class":50},[37,63851,1364],{"class":54},[37,63853,63854,63856,63858,63860],{"class":39,"line":1831},[37,63855,55077],{"class":82},[37,63857,51505],{"class":54},[37,63859,51545],{"class":82},[37,63861,1364],{"class":54},[37,63863,63864,63866,63868,63870],{"class":39,"line":1836},[37,63865,55088],{"class":82},[37,63867,51505],{"class":54},[37,63869,51736],{"class":82},[37,63871,1364],{"class":54},[37,63873,63874],{"class":39,"line":1850},[37,63875,2259],{"class":54},[37,63877,63878],{"class":39,"line":1855},[37,63879,2472],{"emptyLinePlaceholder":131},[37,63881,63882,63884,63887],{"class":39,"line":2649},[37,63883,63813],{"class":2035},[37,63885,63886],{"class":51368}," h3",[37,63888,15644],{"class":54},[37,63890,63891,63893,63895,63897,63899],{"class":39,"line":2663},[37,63892,54990],{"class":82},[37,63894,51505],{"class":54},[37,63896,1003],{"class":82},[37,63898,51560],{"class":50},[37,63900,1364],{"class":54},[37,63902,63903,63905,63907,63910],{"class":39,"line":2671},[37,63904,62402],{"class":82},[37,63906,51505],{"class":54},[37,63908,63909],{"class":82},"normal",[37,63911,1364],{"class":54},[37,63913,63914,63916,63918,63920,63922],{"class":39,"line":2676},[37,63915,62068],{"class":82},[37,63917,51505],{"class":54},[37,63919,903],{"class":82},[37,63921,51560],{"class":50},[37,63923,1364],{"class":54},[37,63925,63926],{"class":39,"line":2682},[37,63927,2259],{"class":54},[37,63929,63930],{"class":39,"line":2688},[37,63931,2472],{"emptyLinePlaceholder":131},[37,63933,63934,63936,63938],{"class":39,"line":2693},[37,63935,63813],{"class":2035},[37,63937,61360],{"class":51368},[37,63939,15644],{"class":54},[37,63941,63942,63944,63946,63948],{"class":39,"line":8020},[37,63943,54800],{"class":82},[37,63945,51505],{"class":54},[37,63947,54805],{"class":82},[37,63949,1364],{"class":54},[37,63951,63952,63954,63956,63958],{"class":39,"line":8044},[37,63953,55077],{"class":82},[37,63955,51505],{"class":54},[37,63957,51545],{"class":82},[37,63959,1364],{"class":54},[37,63961,63962,63964,63966,63968],{"class":39,"line":8049},[37,63963,55088],{"class":82},[37,63965,51505],{"class":54},[37,63967,51648],{"class":82},[37,63969,1364],{"class":54},[37,63971,63972],{"class":39,"line":8055},[37,63973,2259],{"class":54},[37,63975,63976],{"class":39,"line":8082},[37,63977,2472],{"emptyLinePlaceholder":131},[37,63979,63980,63982,63984,63986],{"class":39,"line":8087},[37,63981,63813],{"class":2035},[37,63983,61360],{"class":51368},[37,63985,55143],{"class":51368},[37,63987,15644],{"class":54},[37,63989,63990,63992,63994,63996,63998,64000],{"class":39,"line":8093},[37,63991,54774],{"class":82},[37,63993,51505],{"class":54},[37,63995,396],{"class":82},[37,63997,9022],{"class":82},[37,63999,51560],{"class":50},[37,64001,1364],{"class":54},[37,64003,64004,64006,64008,64010,64012],{"class":39,"line":8105},[37,64005,54990],{"class":82},[37,64007,51505],{"class":54},[37,64009,752],{"class":82},[37,64011,51560],{"class":50},[37,64013,1364],{"class":54},[37,64015,64016],{"class":39,"line":8117},[37,64017,2259],{"class":54},[37,64019,64020],{"class":39,"line":8129},[37,64021,2472],{"emptyLinePlaceholder":131},[37,64023,64024,64026,64028,64030,64032],{"class":39,"line":9788},[37,64025,63813],{"class":2035},[37,64027,61360],{"class":51368},[37,64029,55143],{"class":51368},[37,64031,1471],{"class":51368},[37,64033,15644],{"class":54},[37,64035,64036,64039,64041,64043],{"class":39,"line":9813},[37,64037,64038],{"class":82},"      text-decoration",[37,64040,51505],{"class":54},[37,64042,54805],{"class":82},[37,64044,1364],{"class":54},[37,64046,64047,64049,64051,64053,64055,64057,64060],{"class":39,"line":9836},[37,64048,62300],{"class":82},[37,64050,51505],{"class":54},[37,64052,282],{"class":82},[37,64054,51560],{"class":50},[37,64056,51589],{"class":82},[37,64058,64059],{"class":82}," transparent",[37,64061,1364],{"class":54},[37,64063,64064,64066,64068,64070],{"class":39,"line":9860},[37,64065,57484],{"class":82},[37,64067,51505],{"class":54},[37,64069,62437],{"class":82},[37,64071,1364],{"class":54},[37,64073,64074],{"class":39,"line":9865},[37,64075,2259],{"class":54},[37,64077,64078],{"class":39,"line":9870},[37,64079,2472],{"emptyLinePlaceholder":131},[37,64081,64082,64084,64086,64088,64090,64093],{"class":39,"line":9875},[37,64083,63813],{"class":2035},[37,64085,61360],{"class":51368},[37,64087,55143],{"class":51368},[37,64089,1471],{"class":51368},[37,64091,64092],{"class":2035},".active",[37,64094,15644],{"class":54},[37,64096,64097,64099,64101,64104],{"class":39,"line":9884},[37,64098,61859],{"class":82},[37,64100,51505],{"class":54},[37,64102,64103],{"class":82},"#e1251b",[37,64105,1364],{"class":54},[37,64107,64108,64110,64112,64114],{"class":39,"line":9889},[37,64109,57484],{"class":82},[37,64111,51505],{"class":54},[37,64113,64103],{"class":82},[37,64115,1364],{"class":54},[37,64117,64118],{"class":39,"line":9895},[37,64119,2259],{"class":54},[37,64121,64122],{"class":39,"line":9916},[37,64123,2472],{"emptyLinePlaceholder":131},[37,64125,64126,64129],{"class":39,"line":9922},[37,64127,64128],{"class":2035},"    .tab-content",[37,64130,15644],{"class":54},[37,64132,64133,64135,64137,64139,64142,64144],{"class":39,"line":9936},[37,64134,54763],{"class":82},[37,64136,51505],{"class":54},[37,64138,396],{"class":82},[37,64140,64141],{"class":82}," 16",[37,64143,51560],{"class":50},[37,64145,1364],{"class":54},[37,64147,64148],{"class":39,"line":9942},[37,64149,2259],{"class":54},[37,64151,64152],{"class":39,"line":9969},[37,64153,2472],{"emptyLinePlaceholder":131},[37,64155,64156,64158,64160],{"class":39,"line":9978},[37,64157,64128],{"class":2035},[37,64159,62242],{"class":2035},[37,64161,15644],{"class":54},[37,64163,64164,64166,64168,64170],{"class":39,"line":9984},[37,64165,55077],{"class":82},[37,64167,51505],{"class":54},[37,64169,54805],{"class":82},[37,64171,1364],{"class":54},[37,64173,64174],{"class":39,"line":9992},[37,64175,2259],{"class":54},[37,64177,64178],{"class":39,"line":9997},[37,64179,2472],{"emptyLinePlaceholder":131},[37,64181,64182,64184,64187],{"class":39,"line":16676},[37,64183,64128],{"class":2035},[37,64185,64186],{"class":2035}," .item.active",[37,64188,15644],{"class":54},[37,64190,64191,64193,64195,64197],{"class":39,"line":16682},[37,64192,55077],{"class":82},[37,64194,51505],{"class":54},[37,64196,60937],{"class":82},[37,64198,1364],{"class":54},[37,64200,64201],{"class":39,"line":16705},[37,64202,2259],{"class":54},[37,64204,64205,64207,64209],{"class":39,"line":16711},[37,64206,52485],{"class":54},[37,64208,123],{"class":51368},[37,64210,51375],{"class":54},[37,64212,64213,64215,64217],{"class":39,"line":16734},[37,64214,51853],{"class":54},[37,64216,51402],{"class":51368},[37,64218,51375],{"class":54},[37,64220,64221],{"class":39,"line":16748},[37,64222,2472],{"emptyLinePlaceholder":131},[37,64224,64225,64227,64229],{"class":39,"line":16768},[37,64226,1113],{"class":54},[37,64228,51868],{"class":51368},[37,64230,51375],{"class":54},[37,64232,64233,64235,64237,64239,64241,64244],{"class":39,"line":16774},[37,64234,52212],{"class":54},[37,64236,51679],{"class":51368},[37,64238,53554],{"class":2035},[37,64240,70],{"class":54},[37,64242,64243],{"class":309},"\"tab\"",[37,64245,51375],{"class":54},[37,64247,64248,64250,64252,64254,64256,64259],{"class":39,"line":16785},[37,64249,51409],{"class":54},[37,64251,51679],{"class":51368},[37,64253,53554],{"class":2035},[37,64255,70],{"class":54},[37,64257,64258],{"class":309},"\"tab-nav\"",[37,64260,51375],{"class":54},[37,64262,64263,64265,64267,64270,64272],{"class":39,"line":16808},[37,64264,55302],{"class":54},[37,64266,175],{"class":51368},[37,64268,64269],{"class":54},">每日特价\u003C\u002F",[37,64271,175],{"class":51368},[37,64273,51375],{"class":54},[37,64275,64276,64278,64280],{"class":39,"line":16830},[37,64277,55302],{"class":54},[37,64279,1210],{"class":51368},[37,64281,51375],{"class":54},[37,64283,64284,64286,64288,64290,64292,64294,64296,64298,64300,64302,64305,64308,64310,64312,64314],{"class":39,"line":16835},[37,64285,55370],{"class":54},[37,64287,161],{"class":51368},[37,64289,61120],{"class":54},[37,64291,443],{"class":51368},[37,64293,53554],{"class":2035},[37,64295,70],{"class":54},[37,64297,59774],{"class":309},[37,64299,61125],{"class":2035},[37,64301,70],{"class":54},[37,64303,64304],{"class":309},"\"javascript:;\"",[37,64306,64307],{"class":54},">精选\u003C\u002F",[37,64309,443],{"class":51368},[37,64311,55382],{"class":54},[37,64313,161],{"class":51368},[37,64315,51375],{"class":54},[37,64317,64318,64320,64322,64324,64326,64328,64330,64332,64335,64337,64339,64341],{"class":39,"line":16841},[37,64319,55370],{"class":54},[37,64321,161],{"class":51368},[37,64323,61120],{"class":54},[37,64325,443],{"class":51368},[37,64327,61125],{"class":2035},[37,64329,70],{"class":54},[37,64331,64304],{"class":309},[37,64333,64334],{"class":54},">美食\u003C\u002F",[37,64336,443],{"class":51368},[37,64338,55382],{"class":54},[37,64340,161],{"class":51368},[37,64342,51375],{"class":54},[37,64344,64345,64347,64349,64351,64353,64355,64357,64359,64362,64364,64366,64368],{"class":39,"line":16855},[37,64346,55370],{"class":54},[37,64348,161],{"class":51368},[37,64350,61120],{"class":54},[37,64352,443],{"class":51368},[37,64354,61125],{"class":2035},[37,64356,70],{"class":54},[37,64358,64304],{"class":309},[37,64360,64361],{"class":54},">百货\u003C\u002F",[37,64363,443],{"class":51368},[37,64365,55382],{"class":54},[37,64367,161],{"class":51368},[37,64369,51375],{"class":54},[37,64371,64372,64374,64376,64378,64380,64382,64384,64386,64389,64391,64393,64395],{"class":39,"line":16868},[37,64373,55370],{"class":54},[37,64375,161],{"class":51368},[37,64377,61120],{"class":54},[37,64379,443],{"class":51368},[37,64381,61125],{"class":2035},[37,64383,70],{"class":54},[37,64385,64304],{"class":309},[37,64387,64388],{"class":54},">个护\u003C\u002F",[37,64390,443],{"class":51368},[37,64392,55382],{"class":54},[37,64394,161],{"class":51368},[37,64396,51375],{"class":54},[37,64398,64399,64401,64403,64405,64407,64409,64411,64413,64416,64418,64420,64422],{"class":39,"line":16873},[37,64400,55370],{"class":54},[37,64402,161],{"class":51368},[37,64404,61120],{"class":54},[37,64406,443],{"class":51368},[37,64408,61125],{"class":2035},[37,64410,70],{"class":54},[37,64412,64304],{"class":309},[37,64414,64415],{"class":54},">预告\u003C\u002F",[37,64417,443],{"class":51368},[37,64419,55382],{"class":54},[37,64421,161],{"class":51368},[37,64423,51375],{"class":54},[37,64425,64426,64428,64430],{"class":39,"line":16887},[37,64427,55475],{"class":54},[37,64429,1210],{"class":51368},[37,64431,51375],{"class":54},[37,64433,64434,64436,64438],{"class":39,"line":16892},[37,64435,51844],{"class":54},[37,64437,51679],{"class":51368},[37,64439,51375],{"class":54},[37,64441,64442,64444,64446,64448,64450,64453],{"class":39,"line":16898},[37,64443,51409],{"class":54},[37,64445,51679],{"class":51368},[37,64447,53554],{"class":2035},[37,64449,70],{"class":54},[37,64451,64452],{"class":309},"\"tab-content\"",[37,64454,51375],{"class":54},[37,64456,64457,64459,64461,64463,64465,64468,64470,64472,64474,64476,64479,64481,64483,64485,64488,64490],{"class":39,"line":16903},[37,64458,55302],{"class":54},[37,64460,51679],{"class":51368},[37,64462,53554],{"class":2035},[37,64464,70],{"class":54},[37,64466,64467],{"class":309},"\"item active\"",[37,64469,61120],{"class":54},[37,64471,119],{"class":51368},[37,64473,55307],{"class":2035},[37,64475,70],{"class":54},[37,64477,64478],{"class":309},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[37,64480,55315],{"class":2035},[37,64482,70],{"class":54},[37,64484,7724],{"class":309},[37,64486,64487],{"class":54}," \u002F>\u003C\u002F",[37,64489,51679],{"class":51368},[37,64491,51375],{"class":54},[37,64493,64494,64496,64498,64500,64502,64504,64506,64508,64510,64512,64515,64517,64519,64521,64523,64525],{"class":39,"line":16917},[37,64495,55302],{"class":54},[37,64497,51679],{"class":51368},[37,64499,53554],{"class":2035},[37,64501,70],{"class":54},[37,64503,62691],{"class":309},[37,64505,61120],{"class":54},[37,64507,119],{"class":51368},[37,64509,55307],{"class":2035},[37,64511,70],{"class":54},[37,64513,64514],{"class":309},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[37,64516,55315],{"class":2035},[37,64518,70],{"class":54},[37,64520,7724],{"class":309},[37,64522,64487],{"class":54},[37,64524,51679],{"class":51368},[37,64526,51375],{"class":54},[37,64528,64529,64531,64533,64535,64537,64539,64541,64543,64545,64547,64550,64552,64554,64556,64558,64560],{"class":39,"line":16922},[37,64530,55302],{"class":54},[37,64532,51679],{"class":51368},[37,64534,53554],{"class":2035},[37,64536,70],{"class":54},[37,64538,62691],{"class":309},[37,64540,61120],{"class":54},[37,64542,119],{"class":51368},[37,64544,55307],{"class":2035},[37,64546,70],{"class":54},[37,64548,64549],{"class":309},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[37,64551,55315],{"class":2035},[37,64553,70],{"class":54},[37,64555,7724],{"class":309},[37,64557,64487],{"class":54},[37,64559,51679],{"class":51368},[37,64561,51375],{"class":54},[37,64563,64564,64566,64568,64570,64572,64574,64576,64578,64580,64582,64585,64587,64589,64591,64593,64595],{"class":39,"line":16927},[37,64565,55302],{"class":54},[37,64567,51679],{"class":51368},[37,64569,53554],{"class":2035},[37,64571,70],{"class":54},[37,64573,62691],{"class":309},[37,64575,61120],{"class":54},[37,64577,119],{"class":51368},[37,64579,55307],{"class":2035},[37,64581,70],{"class":54},[37,64583,64584],{"class":309},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[37,64586,55315],{"class":2035},[37,64588,70],{"class":54},[37,64590,7724],{"class":309},[37,64592,64487],{"class":54},[37,64594,51679],{"class":51368},[37,64596,51375],{"class":54},[37,64598,64599,64601,64603,64605,64607,64609,64611,64613,64615,64617,64620,64622,64624,64626,64628,64630],{"class":39,"line":16941},[37,64600,55302],{"class":54},[37,64602,51679],{"class":51368},[37,64604,53554],{"class":2035},[37,64606,70],{"class":54},[37,64608,62691],{"class":309},[37,64610,61120],{"class":54},[37,64612,119],{"class":51368},[37,64614,55307],{"class":2035},[37,64616,70],{"class":54},[37,64618,64619],{"class":309},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[37,64621,55315],{"class":2035},[37,64623,70],{"class":54},[37,64625,7724],{"class":309},[37,64627,64487],{"class":54},[37,64629,51679],{"class":51368},[37,64631,51375],{"class":54},[37,64633,64634,64636,64638],{"class":39,"line":16953},[37,64635,51844],{"class":54},[37,64637,51679],{"class":51368},[37,64639,51375],{"class":54},[37,64641,64642,64644,64646],{"class":39,"line":16958},[37,64643,52485],{"class":54},[37,64645,51679],{"class":51368},[37,64647,51375],{"class":54},[37,64649,64650,64652,64654],{"class":39,"line":16971},[37,64651,52212],{"class":54},[37,64653,51881],{"class":51368},[37,64655,51375],{"class":54},[37,64657,64658],{"class":39,"line":16976},[37,64659,64660],{"class":43},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[37,64662,64663],{"class":39,"line":16981},[37,64664,64665],{"class":43},"    \u002F\u002F 1.1 获取 a 元素 \n",[37,64667,64668,64670,64673,64675,64677,64679,64681,64684],{"class":39,"line":16986},[37,64669,11293],{"class":50},[37,64671,64672],{"class":82}," as",[37,64674,13636],{"class":50},[37,64676,54464],{"class":54},[37,64678,55749],{"class":2035},[37,64680,208],{"class":54},[37,64682,64683],{"class":309},"'.tab-nav a'",[37,64685,214],{"class":54},[37,64687,64688],{"class":39,"line":16999},[37,64689,64690],{"class":43},"    \u002F\u002F console.log(as) \n",[37,64692,64693,64695,64697,64699,64701,64703,64705,64707,64709,64712,64714,64716,64718],{"class":39,"line":17004},[37,64694,3273],{"class":50},[37,64696,1730],{"class":54},[37,64698,51915],{"class":50},[37,64700,9510],{"class":54},[37,64702,70],{"class":50},[37,64704,4165],{"class":82},[37,64706,9517],{"class":54},[37,64708,1113],{"class":50},[37,64710,64711],{"class":54}," as.",[37,64713,52036],{"class":82},[37,64715,3286],{"class":54},[37,64717,2364],{"class":50},[37,64719,12514],{"class":54},[37,64721,64722],{"class":39,"line":32702},[37,64723,64724],{"class":43},"      \u002F\u002F console.log(as[i])\n",[37,64726,64727],{"class":39,"line":32708},[37,64728,64729],{"class":43},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[37,64731,64732,64735,64737,64739,64742,64744,64746],{"class":39,"line":32714},[37,64733,64734],{"class":54},"      as[i].",[37,64736,57881],{"class":2035},[37,64738,208],{"class":54},[37,64740,64741],{"class":309},"'mouseenter'",[37,64743,12507],{"class":54},[37,64745,54517],{"class":50},[37,64747,54520],{"class":54},[37,64749,64750],{"class":39,"line":32720},[37,64751,64752],{"class":43},"        \u002F\u002F console.log('鼠标经过')\n",[37,64754,64755],{"class":39,"line":32726},[37,64756,64757],{"class":43},"        \u002F\u002F 排他思想  \n",[37,64759,64760],{"class":39,"line":32737},[37,64761,64762],{"class":43},"        \u002F\u002F 干掉别人 移除类active\n",[37,64764,64765,64767,64769,64771,64774,64776,64778,64780,64783],{"class":39,"line":32743},[37,64766,51993],{"class":54},[37,64768,54467],{"class":2035},[37,64770,208],{"class":54},[37,64772,64773],{"class":309},"'.tab-nav .active'",[37,64775,57071],{"class":54},[37,64777,57074],{"class":2035},[37,64779,208],{"class":54},[37,64781,64782],{"class":309},"'active'",[37,64784,214],{"class":54},[37,64786,64787],{"class":39,"line":32763},[37,64788,64789],{"class":43},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[37,64791,64792,64795,64798,64800,64802,64804],{"class":39,"line":32769},[37,64793,64794],{"class":82},"        this",[37,64796,64797],{"class":54},".classList.",[37,64799,5406],{"class":2035},[37,64801,208],{"class":54},[37,64803,64782],{"class":309},[37,64805,214],{"class":54},[37,64807,64808],{"class":39,"line":32780},[37,64809,2472],{"emptyLinePlaceholder":131},[37,64811,64812],{"class":39,"line":32786},[37,64813,64814],{"class":43},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[37,64816,64817],{"class":39,"line":32792},[37,64818,64819],{"class":43},"        \u002F\u002F 干掉别人\n",[37,64821,64822,64824,64826,64828,64831,64833,64835,64837,64839],{"class":39,"line":32798},[37,64823,51993],{"class":54},[37,64825,54467],{"class":2035},[37,64827,208],{"class":54},[37,64829,64830],{"class":309},"'.tab-content .active'",[37,64832,57071],{"class":54},[37,64834,57074],{"class":2035},[37,64836,208],{"class":54},[37,64838,64782],{"class":309},[37,64840,214],{"class":54},[37,64842,64843],{"class":39,"line":32804},[37,64844,64845],{"class":43},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[37,64847,64848,64850,64852,64854,64857,64859,64861,64863,64865,64867,64869,64871,64873],{"class":39,"line":32810},[37,64849,51993],{"class":54},[37,64851,54467],{"class":2035},[37,64853,208],{"class":54},[37,64855,64856],{"class":309},"`.tab-content .item:nth-child(${",[37,64858,645],{"class":54},[37,64860,45635],{"class":50},[37,64862,25191],{"class":82},[37,64864,57100],{"class":309},[37,64866,57071],{"class":54},[37,64868,5406],{"class":2035},[37,64870,208],{"class":54},[37,64872,64782],{"class":309},[37,64874,214],{"class":54},[37,64876,64877],{"class":39,"line":32816},[37,64878,2472],{"emptyLinePlaceholder":131},[37,64880,64881],{"class":39,"line":32822},[37,64882,64883],{"class":54},"      })\n",[37,64885,64886],{"class":39,"line":32842},[37,64887,2259],{"class":54},[37,64889,64890,64892,64894],{"class":39,"line":32848},[37,64891,52485],{"class":54},[37,64893,51881],{"class":51368},[37,64895,51375],{"class":54},[37,64897,64898,64900,64902],{"class":39,"line":32864},[37,64899,51853],{"class":54},[37,64901,51868],{"class":51368},[37,64903,51375],{"class":54},[37,64905,64906],{"class":39,"line":32870},[37,64907,2472],{"emptyLinePlaceholder":131},[37,64909,64910,64912,64914],{"class":39,"line":32884},[37,64911,51853],{"class":54},[37,64913,50703],{"class":51368},[37,64915,51375],{"class":54},[14,64917,64918],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,64920,64921],{},"在监听事件中，this指向的就是他的调用者",[14,64923,64924],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,64926,53788],{},[14,64928,64929],{},"(function () {",[14,64931,64932],{},"const list = document.querySelector('.xtx-elevator-list')",[14,64934,64935],{},"list.addEventListener('click', function (e) {",[14,64937,64938],{},"if (e.target.tagName === 'A') {",[14,64940,64941],{},"\u002F\u002F 排他思想",[14,64943,64944],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,64946,64947],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,64949,64950],{},"\u002F\u002F console.log(old);",[14,64952,64953],{},"\u002F\u002F 判断",[14,64955,64956],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,64958,64959],{},"if (old) old.classList.remove('active')",[14,64961,64962],{},"e.target.classList.add('active')",[14,64964,1149],{},[14,64966,52532],{},[14,64968,64969],{},"})();",[175,64971,64973],{"id":64972},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[27,64975,64977],{"className":50701,"code":64976,"language":50703,"meta":32,"style":32},"\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",[34,64978,64979,64989,64993,65001,65005,65019,65033,65045,65053,65059,65069,65079,65083,65087,65094,65106,65117,65134,65147,65161,65171,65175,65179,65186,65197,65215,65225,65237,65241,65245,65252,65269,65280,65292,65296,65300,65307,65319,65323,65331,65339,65343,65351,65359,65367,65382,65426,65434,65447,65460,65473,65481,65489,65497,65525,65533,65545,65558,65571,65579,65587,65595,65621,65629,65642,65654,65667,65675,65683,65691,65717,65725,65738,65750,65763,65771,65779,65787,65792,65812,65817,65837,65842,65859,65864,65872,65877,65906,65919,65923,65927,65932,65936,65964,65969,65986,65991,65996,66001,66006,66032,66036,66040,66048,66056,66060],{"__ignoreMap":32},[37,64980,64981,64983,64985,64987],{"class":39,"line":40},[37,64982,51365],{"class":54},[37,64984,51369],{"class":51368},[37,64986,51372],{"class":2035},[37,64988,51375],{"class":54},[37,64990,64991],{"class":39,"line":47},[37,64992,2472],{"emptyLinePlaceholder":131},[37,64994,64995,64997,64999],{"class":39,"line":58},[37,64996,1113],{"class":54},[37,64998,50703],{"class":51368},[37,65000,51375],{"class":54},[37,65002,65003],{"class":39,"line":64},[37,65004,2472],{"emptyLinePlaceholder":131},[37,65006,65007,65009,65011,65013,65015,65017],{"class":39,"line":76},[37,65008,1113],{"class":54},[37,65010,51402],{"class":51368},[37,65012,51384],{"class":2035},[37,65014,70],{"class":54},[37,65016,51389],{"class":309},[37,65018,51375],{"class":54},[37,65020,65021,65023,65025,65027,65029,65031],{"class":39,"line":92},[37,65022,52212],{"class":54},[37,65024,51412],{"class":51368},[37,65026,51415],{"class":2035},[37,65028,70],{"class":54},[37,65030,51420],{"class":309},[37,65032,51375],{"class":54},[37,65034,65035,65037,65039,65041,65043],{"class":39,"line":97},[37,65036,52212],{"class":54},[37,65038,51475],{"class":51368},[37,65040,55382],{"class":54},[37,65042,51475],{"class":51368},[37,65044,51375],{"class":54},[37,65046,65047,65049,65051],{"class":39,"line":107},[37,65048,52212],{"class":54},[37,65050,123],{"class":51368},[37,65052,51375],{"class":54},[37,65054,65055,65057],{"class":39,"line":1390},[37,65056,6475],{"class":51368},[37,65058,15644],{"class":54},[37,65060,65061,65063,65065,65067],{"class":39,"line":1402},[37,65062,54774],{"class":82},[37,65064,51505],{"class":54},[37,65066,396],{"class":82},[37,65068,1364],{"class":54},[37,65070,65071,65073,65075,65077],{"class":39,"line":1684},[37,65072,54763],{"class":82},[37,65074,51505],{"class":54},[37,65076,396],{"class":82},[37,65078,1364],{"class":54},[37,65080,65081],{"class":39,"line":1689},[37,65082,2259],{"class":54},[37,65084,65085],{"class":39,"line":1695},[37,65086,2472],{"emptyLinePlaceholder":131},[37,65088,65089,65092],{"class":39,"line":1700},[37,65090,65091],{"class":51368},"    table",[37,65093,15644],{"class":54},[37,65095,65096,65099,65101,65104],{"class":39,"line":1714},[37,65097,65098],{"class":82},"      border-collapse",[37,65100,51505],{"class":54},[37,65102,65103],{"class":82},"collapse",[37,65105,1364],{"class":54},[37,65107,65108,65111,65113,65115],{"class":39,"line":1719},[37,65109,65110],{"class":82},"      border-spacing",[37,65112,51505],{"class":54},[37,65114,396],{"class":82},[37,65116,1364],{"class":54},[37,65118,65119,65121,65123,65125,65127,65129,65132],{"class":39,"line":1725},[37,65120,62045],{"class":82},[37,65122,51505],{"class":54},[37,65124,422],{"class":82},[37,65126,51560],{"class":50},[37,65128,51589],{"class":82},[37,65130,65131],{"class":82}," #c0c0c0",[37,65133,1364],{"class":54},[37,65135,65136,65138,65140,65143,65145],{"class":39,"line":1746},[37,65137,54839],{"class":82},[37,65139,51505],{"class":54},[37,65141,65142],{"class":82},"500",[37,65144,51560],{"class":50},[37,65146,1364],{"class":54},[37,65148,65149,65151,65153,65155,65157,65159],{"class":39,"line":1751},[37,65150,54774],{"class":82},[37,65152,51505],{"class":54},[37,65154,516],{"class":82},[37,65156,51560],{"class":50},[37,65158,51624],{"class":82},[37,65160,1364],{"class":54},[37,65162,65163,65165,65167,65169],{"class":39,"line":1765},[37,65164,57354],{"class":82},[37,65166,51505],{"class":54},[37,65168,51660],{"class":82},[37,65170,1364],{"class":54},[37,65172,65173],{"class":39,"line":1770},[37,65174,2259],{"class":54},[37,65176,65177],{"class":39,"line":1799},[37,65178,2472],{"emptyLinePlaceholder":131},[37,65180,65181,65184],{"class":39,"line":1804},[37,65182,65183],{"class":51368},"    th",[37,65185,15644],{"class":54},[37,65187,65188,65190,65192,65195],{"class":39,"line":1821},[37,65189,54952],{"class":82},[37,65191,51505],{"class":54},[37,65193,65194],{"class":82},"#09c",[37,65196,1364],{"class":54},[37,65198,65199,65202,65204,65206,65208,65210,65213],{"class":39,"line":1826},[37,65200,65201],{"class":82},"      font",[37,65203,51505],{"class":54},[37,65205,62407],{"class":82},[37,65207,64141],{"class":82},[37,65209,51560],{"class":50},[37,65211,65212],{"class":309}," \"微软雅黑\"",[37,65214,1364],{"class":54},[37,65216,65217,65219,65221,65223],{"class":39,"line":1831},[37,65218,57484],{"class":82},[37,65220,51505],{"class":54},[37,65222,60910],{"class":82},[37,65224,1364],{"class":54},[37,65226,65227,65229,65231,65233,65235],{"class":39,"line":1836},[37,65228,54853],{"class":82},[37,65230,51505],{"class":54},[37,65232,1003],{"class":82},[37,65234,51560],{"class":50},[37,65236,1364],{"class":54},[37,65238,65239],{"class":39,"line":1850},[37,65240,2259],{"class":54},[37,65242,65243],{"class":39,"line":1855},[37,65244,2472],{"emptyLinePlaceholder":131},[37,65246,65247,65250],{"class":39,"line":2649},[37,65248,65249],{"class":51368},"    td",[37,65251,15644],{"class":54},[37,65253,65254,65256,65258,65260,65262,65264,65267],{"class":39,"line":2663},[37,65255,62045],{"class":82},[37,65257,51505],{"class":54},[37,65259,422],{"class":82},[37,65261,51560],{"class":50},[37,65263,51589],{"class":82},[37,65265,65266],{"class":82}," #d0d0d0",[37,65268,1364],{"class":54},[37,65270,65271,65273,65275,65278],{"class":39,"line":2671},[37,65272,57484],{"class":82},[37,65274,51505],{"class":54},[37,65276,65277],{"class":82},"#404060",[37,65279,1364],{"class":54},[37,65281,65282,65284,65286,65288,65290],{"class":39,"line":2676},[37,65283,54763],{"class":82},[37,65285,51505],{"class":54},[37,65287,650],{"class":82},[37,65289,51560],{"class":50},[37,65291,1364],{"class":54},[37,65293,65294],{"class":39,"line":2682},[37,65295,2259],{"class":54},[37,65297,65298],{"class":39,"line":2688},[37,65299,2472],{"emptyLinePlaceholder":131},[37,65301,65302,65305],{"class":39,"line":2693},[37,65303,65304],{"class":2035},"    .allCheck",[37,65306,15644],{"class":54},[37,65308,65309,65311,65313,65315,65317],{"class":39,"line":8020},[37,65310,54839],{"class":82},[37,65312,51505],{"class":54},[37,65314,815],{"class":82},[37,65316,51560],{"class":50},[37,65318,1364],{"class":54},[37,65320,65321],{"class":39,"line":8044},[37,65322,2259],{"class":54},[37,65324,65325,65327,65329],{"class":39,"line":8049},[37,65326,52485],{"class":54},[37,65328,123],{"class":51368},[37,65330,51375],{"class":54},[37,65332,65333,65335,65337],{"class":39,"line":8055},[37,65334,51853],{"class":54},[37,65336,51402],{"class":51368},[37,65338,51375],{"class":54},[37,65340,65341],{"class":39,"line":8082},[37,65342,2472],{"emptyLinePlaceholder":131},[37,65344,65345,65347,65349],{"class":39,"line":8087},[37,65346,1113],{"class":54},[37,65348,51868],{"class":51368},[37,65350,51375],{"class":54},[37,65352,65353,65355,65357],{"class":39,"line":8093},[37,65354,52212],{"class":54},[37,65356,342],{"class":51368},[37,65358,51375],{"class":54},[37,65360,65361,65363,65365],{"class":39,"line":8105},[37,65362,51409],{"class":54},[37,65364,348],{"class":51368},[37,65366,51375],{"class":54},[37,65368,65369,65371,65373,65375,65377,65380],{"class":39,"line":8117},[37,65370,55302],{"class":54},[37,65372,351],{"class":51368},[37,65374,53554],{"class":2035},[37,65376,70],{"class":54},[37,65378,65379],{"class":309},"\"allCheck\"",[37,65381,51375],{"class":54},[37,65383,65384,65386,65388,65390,65392,65394,65396,65398,65400,65402,65404,65407,65410,65412,65414,65416,65419,65422,65424],{"class":39,"line":8129},[37,65385,55370],{"class":54},[37,65387,53889],{"class":51368},[37,65389,53892],{"class":2035},[37,65391,70],{"class":54},[37,65393,53897],{"class":309},[37,65395,14992],{"class":2035},[37,65397,70],{"class":54},[37,65399,7724],{"class":309},[37,65401,15031],{"class":2035},[37,65403,70],{"class":54},[37,65405,65406],{"class":309},"\"checkAll\"",[37,65408,65409],{"class":54},"> \u003C",[37,65411,37],{"class":51368},[37,65413,53554],{"class":2035},[37,65415,70],{"class":54},[37,65417,65418],{"class":309},"\"all\"",[37,65420,65421],{"class":54},">全选\u003C\u002F",[37,65423,37],{"class":51368},[37,65425,51375],{"class":54},[37,65427,65428,65430,65432],{"class":39,"line":9788},[37,65429,55475],{"class":54},[37,65431,351],{"class":51368},[37,65433,51375],{"class":54},[37,65435,65436,65438,65440,65443,65445],{"class":39,"line":9813},[37,65437,55302],{"class":54},[37,65439,351],{"class":51368},[37,65441,65442],{"class":54},">商品\u003C\u002F",[37,65444,351],{"class":51368},[37,65446,51375],{"class":54},[37,65448,65449,65451,65453,65456,65458],{"class":39,"line":9836},[37,65450,55302],{"class":54},[37,65452,351],{"class":51368},[37,65454,65455],{"class":54},">商家\u003C\u002F",[37,65457,351],{"class":51368},[37,65459,51375],{"class":54},[37,65461,65462,65464,65466,65469,65471],{"class":39,"line":9860},[37,65463,55302],{"class":54},[37,65465,351],{"class":51368},[37,65467,65468],{"class":54},">价格\u003C\u002F",[37,65470,351],{"class":51368},[37,65472,51375],{"class":54},[37,65474,65475,65477,65479],{"class":39,"line":9865},[37,65476,51844],{"class":54},[37,65478,348],{"class":51368},[37,65480,51375],{"class":54},[37,65482,65483,65485,65487],{"class":39,"line":9870},[37,65484,51409],{"class":54},[37,65486,348],{"class":51368},[37,65488,51375],{"class":54},[37,65490,65491,65493,65495],{"class":39,"line":9875},[37,65492,55302],{"class":54},[37,65494,394],{"class":51368},[37,65496,51375],{"class":54},[37,65498,65499,65501,65503,65505,65507,65509,65511,65513,65516,65518,65520,65523],{"class":39,"line":9884},[37,65500,55370],{"class":54},[37,65502,53889],{"class":51368},[37,65504,53892],{"class":2035},[37,65506,70],{"class":54},[37,65508,53897],{"class":309},[37,65510,14992],{"class":2035},[37,65512,70],{"class":54},[37,65514,65515],{"class":309},"\"check\"",[37,65517,53554],{"class":2035},[37,65519,70],{"class":54},[37,65521,65522],{"class":309},"\"ck\"",[37,65524,51375],{"class":54},[37,65526,65527,65529,65531],{"class":39,"line":9889},[37,65528,55475],{"class":54},[37,65530,394],{"class":51368},[37,65532,51375],{"class":54},[37,65534,65535,65537,65539,65541,65543],{"class":39,"line":9895},[37,65536,55302],{"class":54},[37,65538,394],{"class":51368},[37,65540,61241],{"class":54},[37,65542,394],{"class":51368},[37,65544,51375],{"class":54},[37,65546,65547,65549,65551,65554,65556],{"class":39,"line":9916},[37,65548,55302],{"class":54},[37,65550,394],{"class":51368},[37,65552,65553],{"class":54},">小米\u003C\u002F",[37,65555,394],{"class":51368},[37,65557,51375],{"class":54},[37,65559,65560,65562,65564,65567,65569],{"class":39,"line":9922},[37,65561,55302],{"class":54},[37,65563,394],{"class":51368},[37,65565,65566],{"class":54},">￥1999\u003C\u002F",[37,65568,394],{"class":51368},[37,65570,51375],{"class":54},[37,65572,65573,65575,65577],{"class":39,"line":9936},[37,65574,51844],{"class":54},[37,65576,348],{"class":51368},[37,65578,51375],{"class":54},[37,65580,65581,65583,65585],{"class":39,"line":9942},[37,65582,51409],{"class":54},[37,65584,348],{"class":51368},[37,65586,51375],{"class":54},[37,65588,65589,65591,65593],{"class":39,"line":9969},[37,65590,55302],{"class":54},[37,65592,394],{"class":51368},[37,65594,51375],{"class":54},[37,65596,65597,65599,65601,65603,65605,65607,65609,65611,65613,65615,65617,65619],{"class":39,"line":9978},[37,65598,55370],{"class":54},[37,65600,53889],{"class":51368},[37,65602,53892],{"class":2035},[37,65604,70],{"class":54},[37,65606,53897],{"class":309},[37,65608,14992],{"class":2035},[37,65610,70],{"class":54},[37,65612,65515],{"class":309},[37,65614,53554],{"class":2035},[37,65616,70],{"class":54},[37,65618,65522],{"class":309},[37,65620,51375],{"class":54},[37,65622,65623,65625,65627],{"class":39,"line":9984},[37,65624,55475],{"class":54},[37,65626,394],{"class":51368},[37,65628,51375],{"class":54},[37,65630,65631,65633,65635,65638,65640],{"class":39,"line":9992},[37,65632,55302],{"class":54},[37,65634,394],{"class":51368},[37,65636,65637],{"class":54},">小米净水器\u003C\u002F",[37,65639,394],{"class":51368},[37,65641,51375],{"class":54},[37,65643,65644,65646,65648,65650,65652],{"class":39,"line":9997},[37,65645,55302],{"class":54},[37,65647,394],{"class":51368},[37,65649,65553],{"class":54},[37,65651,394],{"class":51368},[37,65653,51375],{"class":54},[37,65655,65656,65658,65660,65663,65665],{"class":39,"line":16676},[37,65657,55302],{"class":54},[37,65659,394],{"class":51368},[37,65661,65662],{"class":54},">￥4999\u003C\u002F",[37,65664,394],{"class":51368},[37,65666,51375],{"class":54},[37,65668,65669,65671,65673],{"class":39,"line":16682},[37,65670,51844],{"class":54},[37,65672,348],{"class":51368},[37,65674,51375],{"class":54},[37,65676,65677,65679,65681],{"class":39,"line":16705},[37,65678,51409],{"class":54},[37,65680,348],{"class":51368},[37,65682,51375],{"class":54},[37,65684,65685,65687,65689],{"class":39,"line":16711},[37,65686,55302],{"class":54},[37,65688,394],{"class":51368},[37,65690,51375],{"class":54},[37,65692,65693,65695,65697,65699,65701,65703,65705,65707,65709,65711,65713,65715],{"class":39,"line":16734},[37,65694,55370],{"class":54},[37,65696,53889],{"class":51368},[37,65698,53892],{"class":2035},[37,65700,70],{"class":54},[37,65702,53897],{"class":309},[37,65704,14992],{"class":2035},[37,65706,70],{"class":54},[37,65708,65515],{"class":309},[37,65710,53554],{"class":2035},[37,65712,70],{"class":54},[37,65714,65522],{"class":309},[37,65716,51375],{"class":54},[37,65718,65719,65721,65723],{"class":39,"line":16748},[37,65720,55475],{"class":54},[37,65722,394],{"class":51368},[37,65724,51375],{"class":54},[37,65726,65727,65729,65731,65734,65736],{"class":39,"line":16768},[37,65728,55302],{"class":54},[37,65730,394],{"class":51368},[37,65732,65733],{"class":54},">小米电视\u003C\u002F",[37,65735,394],{"class":51368},[37,65737,51375],{"class":54},[37,65739,65740,65742,65744,65746,65748],{"class":39,"line":16774},[37,65741,55302],{"class":54},[37,65743,394],{"class":51368},[37,65745,65553],{"class":54},[37,65747,394],{"class":51368},[37,65749,51375],{"class":54},[37,65751,65752,65754,65756,65759,65761],{"class":39,"line":16785},[37,65753,55302],{"class":54},[37,65755,394],{"class":51368},[37,65757,65758],{"class":54},">￥5999\u003C\u002F",[37,65760,394],{"class":51368},[37,65762,51375],{"class":54},[37,65764,65765,65767,65769],{"class":39,"line":16808},[37,65766,51844],{"class":54},[37,65768,348],{"class":51368},[37,65770,51375],{"class":54},[37,65772,65773,65775,65777],{"class":39,"line":16830},[37,65774,52485],{"class":54},[37,65776,342],{"class":51368},[37,65778,51375],{"class":54},[37,65780,65781,65783,65785],{"class":39,"line":16835},[37,65782,52212],{"class":54},[37,65784,51881],{"class":51368},[37,65786,51375],{"class":54},[37,65788,65789],{"class":39,"line":16841},[37,65790,65791],{"class":43},"    \u002F\u002F 1. 获取大复选框\n",[37,65793,65794,65796,65799,65801,65803,65805,65807,65810],{"class":39,"line":16855},[37,65795,11293],{"class":50},[37,65797,65798],{"class":82}," checkAll",[37,65800,13636],{"class":50},[37,65802,54464],{"class":54},[37,65804,54467],{"class":2035},[37,65806,208],{"class":54},[37,65808,65809],{"class":309},"'#checkAll'",[37,65811,214],{"class":54},[37,65813,65814],{"class":39,"line":16868},[37,65815,65816],{"class":43},"    \u002F\u002F 2. 获取所有的小复选框\n",[37,65818,65819,65821,65824,65826,65828,65830,65832,65835],{"class":39,"line":16873},[37,65820,11293],{"class":50},[37,65822,65823],{"class":82}," cks",[37,65825,13636],{"class":50},[37,65827,54464],{"class":54},[37,65829,55749],{"class":2035},[37,65831,208],{"class":54},[37,65833,65834],{"class":309},"'.ck'",[37,65836,214],{"class":54},[37,65838,65839],{"class":39,"line":16887},[37,65840,65841],{"class":43},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[37,65843,65844,65847,65849,65851,65853,65855,65857],{"class":39,"line":16892},[37,65845,65846],{"class":54},"    checkAll.",[37,65848,57881],{"class":2035},[37,65850,208],{"class":54},[37,65852,57886],{"class":309},[37,65854,12507],{"class":54},[37,65856,54517],{"class":50},[37,65858,54520],{"class":54},[37,65860,65861],{"class":39,"line":16898},[37,65862,65863],{"class":43},"      \u002F\u002F 得到当前大复选框的选中状态\n",[37,65865,65866,65869],{"class":39,"line":16903},[37,65867,65868],{"class":43},"      \u002F\u002F console.log(checkAll.checked)",[37,65870,65871],{"class":43},"  \u002F\u002F 得到 是 true 或者是 false\n",[37,65873,65874],{"class":39,"line":16917},[37,65875,65876],{"class":43},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[37,65878,65879,65881,65883,65885,65887,65889,65891,65893,65895,65898,65900,65902,65904],{"class":39,"line":16922},[37,65880,52352],{"class":50},[37,65882,1730],{"class":54},[37,65884,51915],{"class":50},[37,65886,9510],{"class":54},[37,65888,70],{"class":50},[37,65890,4165],{"class":82},[37,65892,9517],{"class":54},[37,65894,1113],{"class":50},[37,65896,65897],{"class":54}," cks.",[37,65899,52036],{"class":82},[37,65901,3286],{"class":54},[37,65903,2364],{"class":50},[37,65905,12514],{"class":54},[37,65907,65908,65911,65913,65916],{"class":39,"line":16927},[37,65909,65910],{"class":54},"        cks[i].checked ",[37,65912,70],{"class":50},[37,65914,65915],{"class":82}," this",[37,65917,65918],{"class":54},".checked\n",[37,65920,65921],{"class":39,"line":16941},[37,65922,52466],{"class":54},[37,65924,65925],{"class":39,"line":16953},[37,65926,33530],{"class":54},[37,65928,65929],{"class":39,"line":16958},[37,65930,65931],{"class":43},"    \u002F\u002F 5. 小复选框控制大复选框\n",[37,65933,65934],{"class":39,"line":16971},[37,65935,2472],{"emptyLinePlaceholder":131},[37,65937,65938,65940,65942,65944,65946,65948,65950,65952,65954,65956,65958,65960,65962],{"class":39,"line":16976},[37,65939,3273],{"class":50},[37,65941,1730],{"class":54},[37,65943,51915],{"class":50},[37,65945,9510],{"class":54},[37,65947,70],{"class":50},[37,65949,4165],{"class":82},[37,65951,9517],{"class":54},[37,65953,1113],{"class":50},[37,65955,65897],{"class":54},[37,65957,52036],{"class":82},[37,65959,3286],{"class":54},[37,65961,2364],{"class":50},[37,65963,12514],{"class":54},[37,65965,65966],{"class":39,"line":16981},[37,65967,65968],{"class":43},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[37,65970,65971,65974,65976,65978,65980,65982,65984],{"class":39,"line":16986},[37,65972,65973],{"class":54},"      cks[i].",[37,65975,57881],{"class":2035},[37,65977,208],{"class":54},[37,65979,57886],{"class":309},[37,65981,12507],{"class":54},[37,65983,54517],{"class":50},[37,65985,54520],{"class":54},[37,65987,65988],{"class":39,"line":16999},[37,65989,65990],{"class":43},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[37,65992,65993],{"class":39,"line":17004},[37,65994,65995],{"class":43},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[37,65997,65998],{"class":39,"line":32702},[37,65999,66000],{"class":43},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[37,66002,66003],{"class":39,"line":32708},[37,66004,66005],{"class":43},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[37,66007,66008,66011,66013,66015,66017,66019,66022,66024,66026,66028,66030],{"class":39,"line":32714},[37,66009,66010],{"class":54},"        checkAll.checked ",[37,66012,70],{"class":50},[37,66014,54464],{"class":54},[37,66016,55749],{"class":2035},[37,66018,208],{"class":54},[37,66020,66021],{"class":309},"'.ck:checked'",[37,66023,30896],{"class":54},[37,66025,52036],{"class":82},[37,66027,57974],{"class":50},[37,66029,65897],{"class":54},[37,66031,55899],{"class":82},[37,66033,66034],{"class":39,"line":32720},[37,66035,64883],{"class":54},[37,66037,66038],{"class":39,"line":32726},[37,66039,2259],{"class":54},[37,66041,66042,66044,66046],{"class":39,"line":32737},[37,66043,52485],{"class":54},[37,66045,51881],{"class":51368},[37,66047,51375],{"class":54},[37,66049,66050,66052,66054],{"class":39,"line":32743},[37,66051,51853],{"class":54},[37,66053,51868],{"class":51368},[37,66055,51375],{"class":54},[37,66057,66058],{"class":39,"line":32763},[37,66059,2472],{"emptyLinePlaceholder":131},[37,66061,66062,66064,66066],{"class":39,"line":32769},[37,66063,51853],{"class":54},[37,66065,50703],{"class":51368},[37,66067,51375],{"class":54},[14,66069,66070],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,66072,66073],{},"用好之间比较得到的布尔值！！！",[14,66075,66076,66077,66080,66081,1730,66084,787,66086,66089],{},"在 JS 里访问的时候，",[34,66078,66079],{},"checkbox.checked"," 是一个 ",[354,66082,66083],{},"布尔值",[34,66085,1435],{},[34,66087,66088],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66091,66092,66093,66096,66097],{},"HTML 的 ",[34,66094,66095],{},"checked=\"checked\""," 只是 ",[354,66098,66099,66100,66103],{},"初始值；JS 的 ",[34,66101,66102],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66105,66106],{},"：checked是一个伪类选择器",[14,66108,66109],{},[119,66110],{"alt":32,"src":66111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66113,66114,66117],{},[66115,66116],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66119,66120],{},[119,66121],{"alt":32,"src":66122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[146,66124,66126],{"id":66125},"_33-dom事件进阶","3.3 DOM事件进阶",[175,66128,66130],{"id":66129},"_331-事件流","3.3.1 事件流",[14,66132,66133],{},[119,66134],{"alt":32,"src":66135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22070,66137,66139],{"id":66138},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66141,66142],{},[119,66143],{"alt":32,"src":66144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[27,66146,66148],{"className":50701,"code":66147,"language":50703,"meta":32,"style":32},"\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",[34,66149,66150,66160,66174,66178,66186,66200,66220,66232,66240,66247,66259,66271,66281,66285,66289,66296,66308,66320,66330,66334,66342,66350,66354,66362,66377,66396,66404,66412,66432,66452,66468,66479,66487,66504,66515,66523,66540,66551,66559,66567,66575,66579],{"__ignoreMap":32},[37,66151,66152,66154,66156,66158],{"class":39,"line":40},[37,66153,51365],{"class":54},[37,66155,51369],{"class":51368},[37,66157,51372],{"class":2035},[37,66159,51375],{"class":54},[37,66161,66162,66164,66166,66168,66170,66172],{"class":39,"line":47},[37,66163,1113],{"class":54},[37,66165,50703],{"class":51368},[37,66167,51384],{"class":2035},[37,66169,70],{"class":54},[37,66171,51389],{"class":309},[37,66173,51375],{"class":54},[37,66175,66176],{"class":39,"line":58},[37,66177,2472],{"emptyLinePlaceholder":131},[37,66179,66180,66182,66184],{"class":39,"line":64},[37,66181,1113],{"class":54},[37,66183,51402],{"class":51368},[37,66185,51375],{"class":54},[37,66187,66188,66190,66192,66194,66196,66198],{"class":39,"line":76},[37,66189,52212],{"class":54},[37,66191,51412],{"class":51368},[37,66193,51415],{"class":2035},[37,66195,70],{"class":54},[37,66197,51420],{"class":309},[37,66199,51375],{"class":54},[37,66201,66202,66204,66206,66208,66210,66212,66214,66216,66218],{"class":39,"line":92},[37,66203,52212],{"class":54},[37,66205,51412],{"class":51368},[37,66207,14992],{"class":2035},[37,66209,70],{"class":54},[37,66211,51459],{"class":309},[37,66213,51439],{"class":2035},[37,66215,70],{"class":54},[37,66217,51466],{"class":309},[37,66219,51375],{"class":54},[37,66221,66222,66224,66226,66228,66230],{"class":39,"line":97},[37,66223,52212],{"class":54},[37,66225,51475],{"class":51368},[37,66227,51478],{"class":54},[37,66229,51475],{"class":51368},[37,66231,51375],{"class":54},[37,66233,66234,66236,66238],{"class":39,"line":107},[37,66235,52212],{"class":54},[37,66237,123],{"class":51368},[37,66239,51375],{"class":54},[37,66241,66242,66245],{"class":39,"line":1390},[37,66243,66244],{"class":2035},"    .father",[37,66246,15644],{"class":54},[37,66248,66249,66251,66253,66255,66257],{"class":39,"line":1402},[37,66250,54839],{"class":82},[37,66252,51505],{"class":54},[37,66254,65142],{"class":82},[37,66256,51560],{"class":50},[37,66258,1364],{"class":54},[37,66260,66261,66263,66265,66267,66269],{"class":39,"line":1684},[37,66262,54853],{"class":82},[37,66264,51505],{"class":54},[37,66266,65142],{"class":82},[37,66268,51560],{"class":50},[37,66270,1364],{"class":54},[37,66272,66273,66275,66277,66279],{"class":39,"line":1689},[37,66274,54952],{"class":82},[37,66276,51505],{"class":54},[37,66278,51713],{"class":82},[37,66280,1364],{"class":54},[37,66282,66283],{"class":39,"line":1695},[37,66284,2259],{"class":54},[37,66286,66287],{"class":39,"line":1700},[37,66288,2472],{"emptyLinePlaceholder":131},[37,66290,66291,66294],{"class":39,"line":1714},[37,66292,66293],{"class":2035},"    .son",[37,66295,15644],{"class":54},[37,66297,66298,66300,66302,66304,66306],{"class":39,"line":1719},[37,66299,54839],{"class":82},[37,66301,51505],{"class":54},[37,66303,1794],{"class":82},[37,66305,51560],{"class":50},[37,66307,1364],{"class":54},[37,66309,66310,66312,66314,66316,66318],{"class":39,"line":1725},[37,66311,54853],{"class":82},[37,66313,51505],{"class":54},[37,66315,1794],{"class":82},[37,66317,51560],{"class":50},[37,66319,1364],{"class":54},[37,66321,66322,66324,66326,66328],{"class":39,"line":1746},[37,66323,54952],{"class":82},[37,66325,51505],{"class":54},[37,66327,54957],{"class":82},[37,66329,1364],{"class":54},[37,66331,66332],{"class":39,"line":1751},[37,66333,2259],{"class":54},[37,66335,66336,66338,66340],{"class":39,"line":1765},[37,66337,52485],{"class":54},[37,66339,123],{"class":51368},[37,66341,51375],{"class":54},[37,66343,66344,66346,66348],{"class":39,"line":1770},[37,66345,51853],{"class":54},[37,66347,51402],{"class":51368},[37,66349,51375],{"class":54},[37,66351,66352],{"class":39,"line":1799},[37,66353,2472],{"emptyLinePlaceholder":131},[37,66355,66356,66358,66360],{"class":39,"line":1804},[37,66357,1113],{"class":54},[37,66359,51868],{"class":51368},[37,66361,51375],{"class":54},[37,66363,66364,66366,66368,66370,66372,66375],{"class":39,"line":1821},[37,66365,52212],{"class":54},[37,66367,51679],{"class":51368},[37,66369,53554],{"class":2035},[37,66371,70],{"class":54},[37,66373,66374],{"class":309},"\"father\"",[37,66376,51375],{"class":54},[37,66378,66379,66381,66383,66385,66387,66390,66392,66394],{"class":39,"line":1826},[37,66380,51409],{"class":54},[37,66382,51679],{"class":51368},[37,66384,53554],{"class":2035},[37,66386,70],{"class":54},[37,66388,66389],{"class":309},"\"son\"",[37,66391,55382],{"class":54},[37,66393,51679],{"class":51368},[37,66395,51375],{"class":54},[37,66397,66398,66400,66402],{"class":39,"line":1831},[37,66399,52485],{"class":54},[37,66401,51679],{"class":51368},[37,66403,51375],{"class":54},[37,66405,66406,66408,66410],{"class":39,"line":1836},[37,66407,52212],{"class":54},[37,66409,51881],{"class":51368},[37,66411,51375],{"class":54},[37,66413,66414,66416,66419,66421,66423,66425,66427,66430],{"class":39,"line":1850},[37,66415,11293],{"class":50},[37,66417,66418],{"class":82}," fa",[37,66420,13636],{"class":50},[37,66422,54464],{"class":54},[37,66424,54467],{"class":2035},[37,66426,208],{"class":54},[37,66428,66429],{"class":309},"'.father'",[37,66431,214],{"class":54},[37,66433,66434,66436,66439,66441,66443,66445,66447,66450],{"class":39,"line":1855},[37,66435,11293],{"class":50},[37,66437,66438],{"class":82}," son",[37,66440,13636],{"class":50},[37,66442,54464],{"class":54},[37,66444,54467],{"class":2035},[37,66446,208],{"class":54},[37,66448,66449],{"class":309},"'.son'",[37,66451,214],{"class":54},[37,66453,66454,66456,66458,66460,66462,66464,66466],{"class":39,"line":2649},[37,66455,52475],{"class":54},[37,66457,57881],{"class":2035},[37,66459,208],{"class":54},[37,66461,57886],{"class":309},[37,66463,12507],{"class":54},[37,66465,54517],{"class":50},[37,66467,54520],{"class":54},[37,66469,66470,66472,66474,66477],{"class":39,"line":2663},[37,66471,58993],{"class":2035},[37,66473,208],{"class":54},[37,66475,66476],{"class":309},"'woshiu1'",[37,66478,214],{"class":54},[37,66480,66481,66483,66485],{"class":39,"line":2671},[37,66482,54603],{"class":54},[37,66484,1435],{"class":82},[37,66486,214],{"class":54},[37,66488,66489,66492,66494,66496,66498,66500,66502],{"class":39,"line":2676},[37,66490,66491],{"class":54},"    fa.",[37,66493,57881],{"class":2035},[37,66495,208],{"class":54},[37,66497,57886],{"class":309},[37,66499,12507],{"class":54},[37,66501,54517],{"class":50},[37,66503,54520],{"class":54},[37,66505,66506,66508,66510,66513],{"class":39,"line":2682},[37,66507,58993],{"class":2035},[37,66509,208],{"class":54},[37,66511,66512],{"class":309},"'1'",[37,66514,214],{"class":54},[37,66516,66517,66519,66521],{"class":39,"line":2688},[37,66518,54603],{"class":54},[37,66520,1435],{"class":82},[37,66522,214],{"class":54},[37,66524,66525,66528,66530,66532,66534,66536,66538],{"class":39,"line":2693},[37,66526,66527],{"class":54},"    son.",[37,66529,57881],{"class":2035},[37,66531,208],{"class":54},[37,66533,57886],{"class":309},[37,66535,12507],{"class":54},[37,66537,54517],{"class":50},[37,66539,54520],{"class":54},[37,66541,66542,66544,66546,66549],{"class":39,"line":8020},[37,66543,58993],{"class":2035},[37,66545,208],{"class":54},[37,66547,66548],{"class":309},"'2'",[37,66550,214],{"class":54},[37,66552,66553,66555,66557],{"class":39,"line":8044},[37,66554,54603],{"class":54},[37,66556,1435],{"class":82},[37,66558,214],{"class":54},[37,66560,66561,66563,66565],{"class":39,"line":8049},[37,66562,52485],{"class":54},[37,66564,51881],{"class":51368},[37,66566,51375],{"class":54},[37,66568,66569,66571,66573],{"class":39,"line":8055},[37,66570,51853],{"class":54},[37,66572,51868],{"class":51368},[37,66574,51375],{"class":54},[37,66576,66577],{"class":39,"line":8082},[37,66578,2472],{"emptyLinePlaceholder":131},[37,66580,66581,66583,66585],{"class":39,"line":8087},[37,66582,51853],{"class":54},[37,66584,50703],{"class":51368},[37,66586,51375],{"class":54},[14,66588,66589],{},[119,66590],{"alt":32,"src":66591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,66593,66594],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22070,66596,66598],{"id":66597},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,66600,66601],{},[119,66602],{"alt":32,"src":66603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,66605,66606],{},"反着来",[14,66608,66609],{},"注意是同名事件，比如都是‘click’",[22070,66611,66613],{"id":66612},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,66615,66616],{},[119,66617],{"alt":32,"src":66618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22070,66620,66622],{"id":66621},"_3314-解绑事件","3.3.1.4 解绑事件",[14,66624,66625],{},[119,66626],{"alt":32,"src":66627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,66629,66630],{},[119,66631],{"alt":32,"src":66632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22070,66634,66636],{"id":66635},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[158,66638,66639],{},[161,66640,66641],{},"事件类型的区别",[14,66643,66644],{},[119,66645],{"alt":32,"src":66646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,66648,66649],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[158,66651,66652],{"start":47},[161,66653,66654],{},"注册事件的区别",[14,66656,66657],{},[119,66658],{"alt":32,"src":66659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22070,66661,66663],{"id":66662},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,66665,66666],{},[119,66667],{"alt":32,"src":66668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,66670,66671],{},[119,66672],{"alt":32,"src":66673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[27,66675,66677],{"className":53135,"code":66676,"language":53137,"meta":32,"style":32},"\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",[34,66678,66679,66687,66704,66727,66735,66740,66745,66750,66754,66762,66770],{"__ignoreMap":32},[37,66680,66681,66683,66685],{"class":39,"line":40},[37,66682,1113],{"class":54},[37,66684,51868],{"class":51368},[37,66686,51375],{"class":54},[37,66688,66689,66691,66694,66697,66699,66702],{"class":39,"line":47},[37,66690,52212],{"class":54},[37,66692,66693],{"class":51368},"form",[37,66695,66696],{"class":2035}," action",[37,66698,70],{"class":54},[37,66700,66701],{"class":309},"\"http:\u002F\u002Fwww.itcast.cn\"",[37,66703,51375],{"class":54},[37,66705,66706,66708,66710,66712,66714,66717,66720,66722,66725],{"class":39,"line":58},[37,66707,51409],{"class":54},[37,66709,53889],{"class":51368},[37,66711,53892],{"class":2035},[37,66713,70],{"class":54},[37,66715,66716],{"class":309},"\"submit\"",[37,66718,66719],{"class":2035}," value",[37,66721,70],{"class":54},[37,66723,66724],{"class":309},"\"免费注册\"",[37,66726,51375],{"class":54},[37,66728,66729,66731,66733],{"class":39,"line":64},[37,66730,51409],{"class":54},[37,66732,51881],{"class":51368},[37,66734,51375],{"class":54},[37,66736,66737],{"class":39,"line":76},[37,66738,66739],{"class":54},"      const form = document.querySelector('form')\n",[37,66741,66742],{"class":39,"line":92},[37,66743,66744],{"class":54},"      form.addEventListener('submit', function (e) {\n",[37,66746,66747],{"class":39,"line":97},[37,66748,66749],{"class":54},"        e.preventDefault()\n",[37,66751,66752],{"class":39,"line":107},[37,66753,64883],{"class":54},[37,66755,66756,66758,66760],{"class":39,"line":1390},[37,66757,51844],{"class":54},[37,66759,51881],{"class":51368},[37,66761,51375],{"class":54},[37,66763,66764,66766,66768],{"class":39,"line":1402},[37,66765,52485],{"class":54},[37,66767,66693],{"class":51368},[37,66769,51375],{"class":54},[37,66771,66772,66774,66776],{"class":39,"line":1684},[37,66773,51853],{"class":54},[37,66775,51868],{"class":51368},[37,66777,51375],{"class":54},[14,66779,66780],{},"点击不在跳转！！！",[175,66782,66784],{"id":66783},"_332-事件委托","3.3.2 事件委托",[14,66786,66787],{},[119,66788],{"alt":32,"src":66789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[27,66791,66793],{"className":50701,"code":66792,"language":50703,"meta":32,"style":32},"\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",[34,66794,66795,66805,66819,66823,66831,66845,66865,66877,66885,66889,66897,66905,66917,66929,66941,66953,66965,66978,66986,66994,66999,67018,67039,67044,67049,67054,67059,67068,67072,67082,67086,67091,67096,67110,67120,67124,67128,67136,67144,67148],{"__ignoreMap":32},[37,66796,66797,66799,66801,66803],{"class":39,"line":40},[37,66798,51365],{"class":54},[37,66800,51369],{"class":51368},[37,66802,51372],{"class":2035},[37,66804,51375],{"class":54},[37,66806,66807,66809,66811,66813,66815,66817],{"class":39,"line":47},[37,66808,1113],{"class":54},[37,66810,50703],{"class":51368},[37,66812,51384],{"class":2035},[37,66814,70],{"class":54},[37,66816,51389],{"class":309},[37,66818,51375],{"class":54},[37,66820,66821],{"class":39,"line":58},[37,66822,2472],{"emptyLinePlaceholder":131},[37,66824,66825,66827,66829],{"class":39,"line":64},[37,66826,1113],{"class":54},[37,66828,51402],{"class":51368},[37,66830,51375],{"class":54},[37,66832,66833,66835,66837,66839,66841,66843],{"class":39,"line":76},[37,66834,52212],{"class":54},[37,66836,51412],{"class":51368},[37,66838,51415],{"class":2035},[37,66840,70],{"class":54},[37,66842,51420],{"class":309},[37,66844,51375],{"class":54},[37,66846,66847,66849,66851,66853,66855,66857,66859,66861,66863],{"class":39,"line":92},[37,66848,52212],{"class":54},[37,66850,51412],{"class":51368},[37,66852,14992],{"class":2035},[37,66854,70],{"class":54},[37,66856,51459],{"class":309},[37,66858,51439],{"class":2035},[37,66860,70],{"class":54},[37,66862,51466],{"class":309},[37,66864,51375],{"class":54},[37,66866,66867,66869,66871,66873,66875],{"class":39,"line":97},[37,66868,52212],{"class":54},[37,66870,51475],{"class":51368},[37,66872,51478],{"class":54},[37,66874,51475],{"class":51368},[37,66876,51375],{"class":54},[37,66878,66879,66881,66883],{"class":39,"line":107},[37,66880,51853],{"class":54},[37,66882,51402],{"class":51368},[37,66884,51375],{"class":54},[37,66886,66887],{"class":39,"line":1390},[37,66888,2472],{"emptyLinePlaceholder":131},[37,66890,66891,66893,66895],{"class":39,"line":1402},[37,66892,1113],{"class":54},[37,66894,51868],{"class":51368},[37,66896,51375],{"class":54},[37,66898,66899,66901,66903],{"class":39,"line":1684},[37,66900,52212],{"class":54},[37,66902,1210],{"class":51368},[37,66904,51375],{"class":54},[37,66906,66907,66909,66911,66913,66915],{"class":39,"line":1689},[37,66908,51409],{"class":54},[37,66910,161],{"class":51368},[37,66912,54034],{"class":54},[37,66914,161],{"class":51368},[37,66916,51375],{"class":54},[37,66918,66919,66921,66923,66925,66927],{"class":39,"line":1695},[37,66920,51409],{"class":54},[37,66922,161],{"class":51368},[37,66924,54053],{"class":54},[37,66926,161],{"class":51368},[37,66928,51375],{"class":54},[37,66930,66931,66933,66935,66937,66939],{"class":39,"line":1700},[37,66932,51409],{"class":54},[37,66934,161],{"class":51368},[37,66936,54072],{"class":54},[37,66938,161],{"class":51368},[37,66940,51375],{"class":54},[37,66942,66943,66945,66947,66949,66951],{"class":39,"line":1714},[37,66944,51409],{"class":54},[37,66946,161],{"class":51368},[37,66948,54091],{"class":54},[37,66950,161],{"class":51368},[37,66952,51375],{"class":54},[37,66954,66955,66957,66959,66961,66963],{"class":39,"line":1719},[37,66956,51409],{"class":54},[37,66958,161],{"class":51368},[37,66960,54110],{"class":54},[37,66962,161],{"class":51368},[37,66964,51375],{"class":54},[37,66966,66967,66969,66971,66974,66976],{"class":39,"line":1725},[37,66968,51409],{"class":54},[37,66970,14],{"class":51368},[37,66972,66973],{"class":54},">我不需要变色\u003C\u002F",[37,66975,14],{"class":51368},[37,66977,51375],{"class":54},[37,66979,66980,66982,66984],{"class":39,"line":1746},[37,66981,52485],{"class":54},[37,66983,1210],{"class":51368},[37,66985,51375],{"class":54},[37,66987,66988,66990,66992],{"class":39,"line":1751},[37,66989,52212],{"class":54},[37,66991,51881],{"class":51368},[37,66993,51375],{"class":54},[37,66995,66996],{"class":39,"line":1765},[37,66997,66998],{"class":43},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[37,67000,67001,67003,67005,67007,67009,67011,67013,67016],{"class":39,"line":1770},[37,67002,11293],{"class":50},[37,67004,61360],{"class":82},[37,67006,13636],{"class":50},[37,67008,54464],{"class":54},[37,67010,54467],{"class":2035},[37,67012,208],{"class":54},[37,67014,67015],{"class":309},"'ul'",[37,67017,214],{"class":54},[37,67019,67020,67023,67025,67027,67029,67031,67033,67035,67037],{"class":39,"line":1799},[37,67021,67022],{"class":54},"    ul.",[37,67024,57881],{"class":2035},[37,67026,208],{"class":54},[37,67028,57886],{"class":309},[37,67030,12507],{"class":54},[37,67032,54517],{"class":50},[37,67034,1730],{"class":54},[37,67036,279],{"class":5288},[37,67038,12514],{"class":54},[37,67040,67041],{"class":39,"line":1804},[37,67042,67043],{"class":43},"      \u002F\u002F alert(1)\n",[37,67045,67046],{"class":39,"line":1821},[37,67047,67048],{"class":43},"      \u002F\u002F e.target就是我们点击的对象\n",[37,67050,67051],{"class":39,"line":1826},[37,67052,67053],{"class":43},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[37,67055,67056],{"class":39,"line":1831},[37,67057,67058],{"class":43},"      \u002F\u002F e.target.style.color = 'red'\n",[37,67060,67061,67063,67065],{"class":39,"line":1836},[37,67062,58312],{"class":54},[37,67064,58315],{"class":2035},[37,67066,67067],{"class":54},"(e)\n",[37,67069,67070],{"class":39,"line":1850},[37,67071,2472],{"emptyLinePlaceholder":131},[37,67073,67074,67076,67079],{"class":39,"line":1855},[37,67075,58312],{"class":54},[37,67077,67078],{"class":2035},"dir",[37,67080,67081],{"class":54},"(e.target)\n",[37,67083,67084],{"class":39,"line":2649},[37,67085,2472],{"emptyLinePlaceholder":131},[37,67087,67088],{"class":39,"line":2663},[37,67089,67090],{"class":43},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[37,67092,67093],{"class":39,"line":2671},[37,67094,67095],{"class":43},"      \u002F\u002F 通过tagName来进行判断\n",[37,67097,67098,67100,67103,67105,67108],{"class":39,"line":2676},[37,67099,54548],{"class":50},[37,67101,67102],{"class":54}," (e.target.tagName ",[37,67104,54554],{"class":50},[37,67106,67107],{"class":309}," 'LI'",[37,67109,12514],{"class":54},[37,67111,67112,67115,67117],{"class":39,"line":2682},[37,67113,67114],{"class":54},"        e.target.style.color ",[37,67116,70],{"class":50},[37,67118,67119],{"class":309}," 'red'\n",[37,67121,67122],{"class":39,"line":2688},[37,67123,52466],{"class":54},[37,67125,67126],{"class":39,"line":2693},[37,67127,33530],{"class":54},[37,67129,67130,67132,67134],{"class":39,"line":8020},[37,67131,52485],{"class":54},[37,67133,51881],{"class":51368},[37,67135,51375],{"class":54},[37,67137,67138,67140,67142],{"class":39,"line":8044},[37,67139,51853],{"class":54},[37,67141,51868],{"class":51368},[37,67143,51375],{"class":54},[37,67145,67146],{"class":39,"line":8049},[37,67147,2472],{"emptyLinePlaceholder":131},[37,67149,67150,67152,67154],{"class":39,"line":8055},[37,67151,51853],{"class":54},[37,67153,50703],{"class":51368},[37,67155,51375],{"class":54},[14,67157,67158],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67160,67161],{},"if(e.target.ragName==='P') {}",[14,67163,67164],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67166,67167],{},"通过事件委托的方式实现tab栏切换改造：",[14,67169,67170],{},"一定要记住自定义属性！！！！！！",[14,67172,67173],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67175,67176],{},"id是自定义的属性名",[14,67178,67179],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[27,67181,67183],{"className":50701,"code":67182,"language":50703,"meta":32,"style":32},"\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",[34,67184,67185,67195,67209,67213,67221,67235,67255,67275,67287,67295,67301,67311,67321,67325,67329,67335,67347,67359,67371,67387,67391,67395,67401,67413,67425,67437,67447,67457,67461,67465,67473,67485,67495,67507,67511,67515,67523,67533,67543,67553,67557,67561,67571,67585,67597,67601,67605,67617,67627,67643,67653,67657,67661,67675,67685,67695,67699,67703,67709,67723,67727,67731,67739,67749,67753,67757,67766,67776,67780,67788,67796,67800,67808,67822,67836,67848,67856,67895,67927,67959,67991,68023,68031,68039,68053,68087,68121,68155,68189,68223,68231,68239,68247,68252,68257,68276,68281,68301,68309,68314,68327,68348,68361,68365,68370,68375,68388,68408,68436,68440,68444,68448,68456,68464,68468],{"__ignoreMap":32},[37,67186,67187,67189,67191,67193],{"class":39,"line":40},[37,67188,51365],{"class":54},[37,67190,51369],{"class":51368},[37,67192,51372],{"class":2035},[37,67194,51375],{"class":54},[37,67196,67197,67199,67201,67203,67205,67207],{"class":39,"line":47},[37,67198,1113],{"class":54},[37,67200,50703],{"class":51368},[37,67202,51384],{"class":2035},[37,67204,70],{"class":54},[37,67206,51389],{"class":309},[37,67208,51375],{"class":54},[37,67210,67211],{"class":39,"line":58},[37,67212,2472],{"emptyLinePlaceholder":131},[37,67214,67215,67217,67219],{"class":39,"line":64},[37,67216,1113],{"class":54},[37,67218,51402],{"class":51368},[37,67220,51375],{"class":54},[37,67222,67223,67225,67227,67229,67231,67233],{"class":39,"line":76},[37,67224,52212],{"class":54},[37,67226,51412],{"class":51368},[37,67228,51415],{"class":2035},[37,67230,70],{"class":54},[37,67232,51420],{"class":309},[37,67234,59195],{"class":54},[37,67236,67237,67239,67241,67243,67245,67247,67249,67251,67253],{"class":39,"line":92},[37,67238,52212],{"class":54},[37,67240,51412],{"class":51368},[37,67242,51431],{"class":2035},[37,67244,70],{"class":54},[37,67246,51436],{"class":309},[37,67248,51439],{"class":2035},[37,67250,70],{"class":54},[37,67252,51444],{"class":309},[37,67254,59195],{"class":54},[37,67256,67257,67259,67261,67263,67265,67267,67269,67271,67273],{"class":39,"line":97},[37,67258,52212],{"class":54},[37,67260,51412],{"class":51368},[37,67262,14992],{"class":2035},[37,67264,70],{"class":54},[37,67266,51459],{"class":309},[37,67268,51439],{"class":2035},[37,67270,70],{"class":54},[37,67272,51466],{"class":309},[37,67274,59195],{"class":54},[37,67276,67277,67279,67281,67283,67285],{"class":39,"line":107},[37,67278,52212],{"class":54},[37,67280,51475],{"class":51368},[37,67282,63693],{"class":54},[37,67284,51475],{"class":51368},[37,67286,51375],{"class":54},[37,67288,67289,67291,67293],{"class":39,"line":1390},[37,67290,52212],{"class":54},[37,67292,123],{"class":51368},[37,67294,51375],{"class":54},[37,67296,67297,67299],{"class":39,"line":1402},[37,67298,6475],{"class":51368},[37,67300,15644],{"class":54},[37,67302,67303,67305,67307,67309],{"class":39,"line":1684},[37,67304,54774],{"class":82},[37,67306,51505],{"class":54},[37,67308,396],{"class":82},[37,67310,1364],{"class":54},[37,67312,67313,67315,67317,67319],{"class":39,"line":1689},[37,67314,54763],{"class":82},[37,67316,51505],{"class":54},[37,67318,396],{"class":82},[37,67320,1364],{"class":54},[37,67322,67323],{"class":39,"line":1695},[37,67324,2259],{"class":54},[37,67326,67327],{"class":39,"line":1700},[37,67328,2472],{"emptyLinePlaceholder":131},[37,67330,67331,67333],{"class":39,"line":1714},[37,67332,63744],{"class":2035},[37,67334,15644],{"class":54},[37,67336,67337,67339,67341,67343,67345],{"class":39,"line":1719},[37,67338,54839],{"class":82},[37,67340,51505],{"class":54},[37,67342,63755],{"class":82},[37,67344,51560],{"class":50},[37,67346,1364],{"class":54},[37,67348,67349,67351,67353,67355,67357],{"class":39,"line":1725},[37,67350,54853],{"class":82},[37,67352,51505],{"class":54},[37,67354,63768],{"class":82},[37,67356,51560],{"class":50},[37,67358,1364],{"class":54},[37,67360,67361,67363,67365,67367,67369],{"class":39,"line":1746},[37,67362,54774],{"class":82},[37,67364,51505],{"class":54},[37,67366,903],{"class":82},[37,67368,51560],{"class":50},[37,67370,1364],{"class":54},[37,67372,67373,67375,67377,67379,67381,67383,67385],{"class":39,"line":1751},[37,67374,62045],{"class":82},[37,67376,51505],{"class":54},[37,67378,422],{"class":82},[37,67380,51560],{"class":50},[37,67382,51589],{"class":82},[37,67384,62312],{"class":82},[37,67386,1364],{"class":54},[37,67388,67389],{"class":39,"line":1765},[37,67390,2259],{"class":54},[37,67392,67393],{"class":39,"line":1770},[37,67394,2472],{"emptyLinePlaceholder":131},[37,67396,67397,67399],{"class":39,"line":1799},[37,67398,63813],{"class":2035},[37,67400,15644],{"class":54},[37,67402,67403,67405,67407,67409,67411],{"class":39,"line":1804},[37,67404,54839],{"class":82},[37,67406,51505],{"class":54},[37,67408,516],{"class":82},[37,67410,533],{"class":50},[37,67412,1364],{"class":54},[37,67414,67415,67417,67419,67421,67423],{"class":39,"line":1821},[37,67416,54853],{"class":82},[37,67418,51505],{"class":54},[37,67420,1110],{"class":82},[37,67422,51560],{"class":50},[37,67424,1364],{"class":54},[37,67426,67427,67429,67431,67433,67435],{"class":39,"line":1826},[37,67428,57427],{"class":82},[37,67430,51505],{"class":54},[37,67432,1110],{"class":82},[37,67434,51560],{"class":50},[37,67436,1364],{"class":54},[37,67438,67439,67441,67443,67445],{"class":39,"line":1831},[37,67440,55077],{"class":82},[37,67442,51505],{"class":54},[37,67444,51545],{"class":82},[37,67446,1364],{"class":54},[37,67448,67449,67451,67453,67455],{"class":39,"line":1836},[37,67450,55088],{"class":82},[37,67452,51505],{"class":54},[37,67454,51736],{"class":82},[37,67456,1364],{"class":54},[37,67458,67459],{"class":39,"line":1850},[37,67460,2259],{"class":54},[37,67462,67463],{"class":39,"line":1855},[37,67464,2472],{"emptyLinePlaceholder":131},[37,67466,67467,67469,67471],{"class":39,"line":2649},[37,67468,63813],{"class":2035},[37,67470,63886],{"class":51368},[37,67472,15644],{"class":54},[37,67474,67475,67477,67479,67481,67483],{"class":39,"line":2663},[37,67476,54990],{"class":82},[37,67478,51505],{"class":54},[37,67480,1003],{"class":82},[37,67482,51560],{"class":50},[37,67484,1364],{"class":54},[37,67486,67487,67489,67491,67493],{"class":39,"line":2671},[37,67488,62402],{"class":82},[37,67490,51505],{"class":54},[37,67492,63909],{"class":82},[37,67494,1364],{"class":54},[37,67496,67497,67499,67501,67503,67505],{"class":39,"line":2676},[37,67498,62068],{"class":82},[37,67500,51505],{"class":54},[37,67502,903],{"class":82},[37,67504,51560],{"class":50},[37,67506,1364],{"class":54},[37,67508,67509],{"class":39,"line":2682},[37,67510,2259],{"class":54},[37,67512,67513],{"class":39,"line":2688},[37,67514,2472],{"emptyLinePlaceholder":131},[37,67516,67517,67519,67521],{"class":39,"line":2693},[37,67518,63813],{"class":2035},[37,67520,61360],{"class":51368},[37,67522,15644],{"class":54},[37,67524,67525,67527,67529,67531],{"class":39,"line":8020},[37,67526,54800],{"class":82},[37,67528,51505],{"class":54},[37,67530,54805],{"class":82},[37,67532,1364],{"class":54},[37,67534,67535,67537,67539,67541],{"class":39,"line":8044},[37,67536,55077],{"class":82},[37,67538,51505],{"class":54},[37,67540,51545],{"class":82},[37,67542,1364],{"class":54},[37,67544,67545,67547,67549,67551],{"class":39,"line":8049},[37,67546,55088],{"class":82},[37,67548,51505],{"class":54},[37,67550,51648],{"class":82},[37,67552,1364],{"class":54},[37,67554,67555],{"class":39,"line":8055},[37,67556,2259],{"class":54},[37,67558,67559],{"class":39,"line":8082},[37,67560,2472],{"emptyLinePlaceholder":131},[37,67562,67563,67565,67567,67569],{"class":39,"line":8087},[37,67564,63813],{"class":2035},[37,67566,61360],{"class":51368},[37,67568,55143],{"class":51368},[37,67570,15644],{"class":54},[37,67572,67573,67575,67577,67579,67581,67583],{"class":39,"line":8093},[37,67574,54774],{"class":82},[37,67576,51505],{"class":54},[37,67578,396],{"class":82},[37,67580,9022],{"class":82},[37,67582,51560],{"class":50},[37,67584,1364],{"class":54},[37,67586,67587,67589,67591,67593,67595],{"class":39,"line":8105},[37,67588,54990],{"class":82},[37,67590,51505],{"class":54},[37,67592,752],{"class":82},[37,67594,51560],{"class":50},[37,67596,1364],{"class":54},[37,67598,67599],{"class":39,"line":8117},[37,67600,2259],{"class":54},[37,67602,67603],{"class":39,"line":8129},[37,67604,2472],{"emptyLinePlaceholder":131},[37,67606,67607,67609,67611,67613,67615],{"class":39,"line":9788},[37,67608,63813],{"class":2035},[37,67610,61360],{"class":51368},[37,67612,55143],{"class":51368},[37,67614,1471],{"class":51368},[37,67616,15644],{"class":54},[37,67618,67619,67621,67623,67625],{"class":39,"line":9813},[37,67620,64038],{"class":82},[37,67622,51505],{"class":54},[37,67624,54805],{"class":82},[37,67626,1364],{"class":54},[37,67628,67629,67631,67633,67635,67637,67639,67641],{"class":39,"line":9836},[37,67630,62300],{"class":82},[37,67632,51505],{"class":54},[37,67634,282],{"class":82},[37,67636,51560],{"class":50},[37,67638,51589],{"class":82},[37,67640,64059],{"class":82},[37,67642,1364],{"class":54},[37,67644,67645,67647,67649,67651],{"class":39,"line":9860},[37,67646,57484],{"class":82},[37,67648,51505],{"class":54},[37,67650,62437],{"class":82},[37,67652,1364],{"class":54},[37,67654,67655],{"class":39,"line":9865},[37,67656,2259],{"class":54},[37,67658,67659],{"class":39,"line":9870},[37,67660,2472],{"emptyLinePlaceholder":131},[37,67662,67663,67665,67667,67669,67671,67673],{"class":39,"line":9875},[37,67664,63813],{"class":2035},[37,67666,61360],{"class":51368},[37,67668,55143],{"class":51368},[37,67670,1471],{"class":51368},[37,67672,64092],{"class":2035},[37,67674,15644],{"class":54},[37,67676,67677,67679,67681,67683],{"class":39,"line":9884},[37,67678,61859],{"class":82},[37,67680,51505],{"class":54},[37,67682,64103],{"class":82},[37,67684,1364],{"class":54},[37,67686,67687,67689,67691,67693],{"class":39,"line":9889},[37,67688,57484],{"class":82},[37,67690,51505],{"class":54},[37,67692,64103],{"class":82},[37,67694,1364],{"class":54},[37,67696,67697],{"class":39,"line":9895},[37,67698,2259],{"class":54},[37,67700,67701],{"class":39,"line":9916},[37,67702,2472],{"emptyLinePlaceholder":131},[37,67704,67705,67707],{"class":39,"line":9922},[37,67706,64128],{"class":2035},[37,67708,15644],{"class":54},[37,67710,67711,67713,67715,67717,67719,67721],{"class":39,"line":9936},[37,67712,54763],{"class":82},[37,67714,51505],{"class":54},[37,67716,396],{"class":82},[37,67718,64141],{"class":82},[37,67720,51560],{"class":50},[37,67722,1364],{"class":54},[37,67724,67725],{"class":39,"line":9942},[37,67726,2259],{"class":54},[37,67728,67729],{"class":39,"line":9969},[37,67730,2472],{"emptyLinePlaceholder":131},[37,67732,67733,67735,67737],{"class":39,"line":9978},[37,67734,64128],{"class":2035},[37,67736,62242],{"class":2035},[37,67738,15644],{"class":54},[37,67740,67741,67743,67745,67747],{"class":39,"line":9984},[37,67742,55077],{"class":82},[37,67744,51505],{"class":54},[37,67746,54805],{"class":82},[37,67748,1364],{"class":54},[37,67750,67751],{"class":39,"line":9992},[37,67752,2259],{"class":54},[37,67754,67755],{"class":39,"line":9997},[37,67756,2472],{"emptyLinePlaceholder":131},[37,67758,67759,67761,67764],{"class":39,"line":16676},[37,67760,64128],{"class":2035},[37,67762,67763],{"class":2035}," .active",[37,67765,15644],{"class":54},[37,67767,67768,67770,67772,67774],{"class":39,"line":16682},[37,67769,55077],{"class":82},[37,67771,51505],{"class":54},[37,67773,60937],{"class":82},[37,67775,1364],{"class":54},[37,67777,67778],{"class":39,"line":16705},[37,67779,2259],{"class":54},[37,67781,67782,67784,67786],{"class":39,"line":16711},[37,67783,52485],{"class":54},[37,67785,123],{"class":51368},[37,67787,51375],{"class":54},[37,67789,67790,67792,67794],{"class":39,"line":16734},[37,67791,51853],{"class":54},[37,67793,51402],{"class":51368},[37,67795,51375],{"class":54},[37,67797,67798],{"class":39,"line":16748},[37,67799,2472],{"emptyLinePlaceholder":131},[37,67801,67802,67804,67806],{"class":39,"line":16768},[37,67803,1113],{"class":54},[37,67805,51868],{"class":51368},[37,67807,51375],{"class":54},[37,67809,67810,67812,67814,67816,67818,67820],{"class":39,"line":16774},[37,67811,52212],{"class":54},[37,67813,51679],{"class":51368},[37,67815,53554],{"class":2035},[37,67817,70],{"class":54},[37,67819,64243],{"class":309},[37,67821,51375],{"class":54},[37,67823,67824,67826,67828,67830,67832,67834],{"class":39,"line":16785},[37,67825,51409],{"class":54},[37,67827,51679],{"class":51368},[37,67829,53554],{"class":2035},[37,67831,70],{"class":54},[37,67833,64258],{"class":309},[37,67835,51375],{"class":54},[37,67837,67838,67840,67842,67844,67846],{"class":39,"line":16808},[37,67839,55302],{"class":54},[37,67841,175],{"class":51368},[37,67843,64269],{"class":54},[37,67845,175],{"class":51368},[37,67847,51375],{"class":54},[37,67849,67850,67852,67854],{"class":39,"line":16830},[37,67851,55302],{"class":54},[37,67853,1210],{"class":51368},[37,67855,51375],{"class":54},[37,67857,67858,67860,67862,67864,67866,67868,67870,67872,67874,67876,67878,67880,67882,67885,67887,67889,67891,67893],{"class":39,"line":16835},[37,67859,55370],{"class":54},[37,67861,161],{"class":51368},[37,67863,61120],{"class":54},[37,67865,443],{"class":51368},[37,67867,53554],{"class":2035},[37,67869,70],{"class":54},[37,67871,59774],{"class":309},[37,67873,61125],{"class":2035},[37,67875,70],{"class":54},[37,67877,64304],{"class":309},[37,67879,54019],{"class":2035},[37,67881,70],{"class":54},[37,67883,67884],{"class":309},"\"0\"",[37,67886,64307],{"class":54},[37,67888,443],{"class":51368},[37,67890,55382],{"class":54},[37,67892,161],{"class":51368},[37,67894,51375],{"class":54},[37,67896,67897,67899,67901,67903,67905,67907,67909,67911,67913,67915,67917,67919,67921,67923,67925],{"class":39,"line":16841},[37,67898,55370],{"class":54},[37,67900,161],{"class":51368},[37,67902,61120],{"class":54},[37,67904,443],{"class":51368},[37,67906,61125],{"class":2035},[37,67908,70],{"class":54},[37,67910,64304],{"class":309},[37,67912,54019],{"class":2035},[37,67914,70],{"class":54},[37,67916,3750],{"class":309},[37,67918,64334],{"class":54},[37,67920,443],{"class":51368},[37,67922,55382],{"class":54},[37,67924,161],{"class":51368},[37,67926,51375],{"class":54},[37,67928,67929,67931,67933,67935,67937,67939,67941,67943,67945,67947,67949,67951,67953,67955,67957],{"class":39,"line":16855},[37,67930,55370],{"class":54},[37,67932,161],{"class":51368},[37,67934,61120],{"class":54},[37,67936,443],{"class":51368},[37,67938,61125],{"class":2035},[37,67940,70],{"class":54},[37,67942,64304],{"class":309},[37,67944,54019],{"class":2035},[37,67946,70],{"class":54},[37,67948,3773],{"class":309},[37,67950,64361],{"class":54},[37,67952,443],{"class":51368},[37,67954,55382],{"class":54},[37,67956,161],{"class":51368},[37,67958,51375],{"class":54},[37,67960,67961,67963,67965,67967,67969,67971,67973,67975,67977,67979,67981,67983,67985,67987,67989],{"class":39,"line":16868},[37,67962,55370],{"class":54},[37,67964,161],{"class":51368},[37,67966,61120],{"class":54},[37,67968,443],{"class":51368},[37,67970,61125],{"class":2035},[37,67972,70],{"class":54},[37,67974,64304],{"class":309},[37,67976,54019],{"class":2035},[37,67978,70],{"class":54},[37,67980,3786],{"class":309},[37,67982,64388],{"class":54},[37,67984,443],{"class":51368},[37,67986,55382],{"class":54},[37,67988,161],{"class":51368},[37,67990,51375],{"class":54},[37,67992,67993,67995,67997,67999,68001,68003,68005,68007,68009,68011,68013,68015,68017,68019,68021],{"class":39,"line":16873},[37,67994,55370],{"class":54},[37,67996,161],{"class":51368},[37,67998,61120],{"class":54},[37,68000,443],{"class":51368},[37,68002,61125],{"class":2035},[37,68004,70],{"class":54},[37,68006,64304],{"class":309},[37,68008,54019],{"class":2035},[37,68010,70],{"class":54},[37,68012,3799],{"class":309},[37,68014,64415],{"class":54},[37,68016,443],{"class":51368},[37,68018,55382],{"class":54},[37,68020,161],{"class":51368},[37,68022,51375],{"class":54},[37,68024,68025,68027,68029],{"class":39,"line":16887},[37,68026,55475],{"class":54},[37,68028,1210],{"class":51368},[37,68030,51375],{"class":54},[37,68032,68033,68035,68037],{"class":39,"line":16892},[37,68034,51844],{"class":54},[37,68036,51679],{"class":51368},[37,68038,51375],{"class":54},[37,68040,68041,68043,68045,68047,68049,68051],{"class":39,"line":16898},[37,68042,51409],{"class":54},[37,68044,51679],{"class":51368},[37,68046,53554],{"class":2035},[37,68048,70],{"class":54},[37,68050,64452],{"class":309},[37,68052,51375],{"class":54},[37,68054,68055,68057,68059,68061,68063,68065,68067,68069,68071,68073,68075,68077,68079,68081,68083,68085],{"class":39,"line":16903},[37,68056,55302],{"class":54},[37,68058,51679],{"class":51368},[37,68060,53554],{"class":2035},[37,68062,70],{"class":54},[37,68064,64467],{"class":309},[37,68066,61120],{"class":54},[37,68068,119],{"class":51368},[37,68070,55307],{"class":2035},[37,68072,70],{"class":54},[37,68074,64478],{"class":309},[37,68076,55315],{"class":2035},[37,68078,70],{"class":54},[37,68080,7724],{"class":309},[37,68082,64487],{"class":54},[37,68084,51679],{"class":51368},[37,68086,51375],{"class":54},[37,68088,68089,68091,68093,68095,68097,68099,68101,68103,68105,68107,68109,68111,68113,68115,68117,68119],{"class":39,"line":16917},[37,68090,55302],{"class":54},[37,68092,51679],{"class":51368},[37,68094,53554],{"class":2035},[37,68096,70],{"class":54},[37,68098,62691],{"class":309},[37,68100,61120],{"class":54},[37,68102,119],{"class":51368},[37,68104,55307],{"class":2035},[37,68106,70],{"class":54},[37,68108,64514],{"class":309},[37,68110,55315],{"class":2035},[37,68112,70],{"class":54},[37,68114,7724],{"class":309},[37,68116,64487],{"class":54},[37,68118,51679],{"class":51368},[37,68120,51375],{"class":54},[37,68122,68123,68125,68127,68129,68131,68133,68135,68137,68139,68141,68143,68145,68147,68149,68151,68153],{"class":39,"line":16922},[37,68124,55302],{"class":54},[37,68126,51679],{"class":51368},[37,68128,53554],{"class":2035},[37,68130,70],{"class":54},[37,68132,62691],{"class":309},[37,68134,61120],{"class":54},[37,68136,119],{"class":51368},[37,68138,55307],{"class":2035},[37,68140,70],{"class":54},[37,68142,64549],{"class":309},[37,68144,55315],{"class":2035},[37,68146,70],{"class":54},[37,68148,7724],{"class":309},[37,68150,64487],{"class":54},[37,68152,51679],{"class":51368},[37,68154,51375],{"class":54},[37,68156,68157,68159,68161,68163,68165,68167,68169,68171,68173,68175,68177,68179,68181,68183,68185,68187],{"class":39,"line":16927},[37,68158,55302],{"class":54},[37,68160,51679],{"class":51368},[37,68162,53554],{"class":2035},[37,68164,70],{"class":54},[37,68166,62691],{"class":309},[37,68168,61120],{"class":54},[37,68170,119],{"class":51368},[37,68172,55307],{"class":2035},[37,68174,70],{"class":54},[37,68176,64584],{"class":309},[37,68178,55315],{"class":2035},[37,68180,70],{"class":54},[37,68182,7724],{"class":309},[37,68184,64487],{"class":54},[37,68186,51679],{"class":51368},[37,68188,51375],{"class":54},[37,68190,68191,68193,68195,68197,68199,68201,68203,68205,68207,68209,68211,68213,68215,68217,68219,68221],{"class":39,"line":16941},[37,68192,55302],{"class":54},[37,68194,51679],{"class":51368},[37,68196,53554],{"class":2035},[37,68198,70],{"class":54},[37,68200,62691],{"class":309},[37,68202,61120],{"class":54},[37,68204,119],{"class":51368},[37,68206,55307],{"class":2035},[37,68208,70],{"class":54},[37,68210,64619],{"class":309},[37,68212,55315],{"class":2035},[37,68214,70],{"class":54},[37,68216,7724],{"class":309},[37,68218,64487],{"class":54},[37,68220,51679],{"class":51368},[37,68222,51375],{"class":54},[37,68224,68225,68227,68229],{"class":39,"line":16953},[37,68226,51844],{"class":54},[37,68228,51679],{"class":51368},[37,68230,51375],{"class":54},[37,68232,68233,68235,68237],{"class":39,"line":16958},[37,68234,52485],{"class":54},[37,68236,51679],{"class":51368},[37,68238,51375],{"class":54},[37,68240,68241,68243,68245],{"class":39,"line":16971},[37,68242,52212],{"class":54},[37,68244,51881],{"class":51368},[37,68246,51375],{"class":54},[37,68248,68249],{"class":39,"line":16976},[37,68250,68251],{"class":43},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[37,68253,68254],{"class":39,"line":16981},[37,68255,68256],{"class":43},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[37,68258,68259,68261,68263,68265,68267,68269,68271,68274],{"class":39,"line":16986},[37,68260,11293],{"class":50},[37,68262,61360],{"class":82},[37,68264,13636],{"class":50},[37,68266,54464],{"class":54},[37,68268,54467],{"class":2035},[37,68270,208],{"class":54},[37,68272,68273],{"class":309},"'.tab-nav ul'",[37,68275,214],{"class":54},[37,68277,68278],{"class":39,"line":16999},[37,68279,68280],{"class":43},"    \u002F\u002F 2.添加事件\n",[37,68282,68283,68285,68287,68289,68291,68293,68295,68297,68299],{"class":39,"line":17004},[37,68284,67022],{"class":54},[37,68286,57881],{"class":2035},[37,68288,208],{"class":54},[37,68290,57886],{"class":309},[37,68292,12507],{"class":54},[37,68294,54517],{"class":50},[37,68296,1730],{"class":54},[37,68298,279],{"class":5288},[37,68300,12514],{"class":54},[37,68302,68303,68305,68307],{"class":39,"line":32702},[37,68304,58312],{"class":54},[37,68306,67078],{"class":2035},[37,68308,67081],{"class":54},[37,68310,68311],{"class":39,"line":32708},[37,68312,68313],{"class":43},"      \u002F\u002Fe.targer是我们点击的对象\n",[37,68315,68316,68318,68320,68322,68325],{"class":39,"line":32714},[37,68317,54548],{"class":50},[37,68319,67102],{"class":54},[37,68321,54554],{"class":50},[37,68323,68324],{"class":309}," 'A'",[37,68326,12514],{"class":54},[37,68328,68329,68331,68333,68335,68338,68340,68342,68344,68346],{"class":39,"line":32720},[37,68330,51993],{"class":54},[37,68332,54467],{"class":2035},[37,68334,208],{"class":54},[37,68336,68337],{"class":309},"'.active'",[37,68339,57071],{"class":54},[37,68341,57074],{"class":2035},[37,68343,208],{"class":54},[37,68345,64782],{"class":309},[37,68347,214],{"class":54},[37,68349,68350,68353,68355,68357,68359],{"class":39,"line":32726},[37,68351,68352],{"class":54},"        e.target.classList.",[37,68354,5406],{"class":2035},[37,68356,208],{"class":54},[37,68358,64782],{"class":309},[37,68360,214],{"class":54},[37,68362,68363],{"class":39,"line":32737},[37,68364,2472],{"emptyLinePlaceholder":131},[37,68366,68367],{"class":39,"line":32743},[37,68368,68369],{"class":43},"        \u002F\u002F 下面大盒子模块\n",[37,68371,68372],{"class":39,"line":32763},[37,68373,68374],{"class":43},"        \u002F\u002F console.log(e.target.dataset.id)\n",[37,68376,68377,68379,68381,68383,68385],{"class":39,"line":32769},[37,68378,61338],{"class":50},[37,68380,3104],{"class":82},[37,68382,13636],{"class":50},[37,68384,45635],{"class":50},[37,68386,68387],{"class":54},"e.target.dataset.id\n",[37,68389,68390,68392,68394,68396,68398,68400,68402,68404,68406],{"class":39,"line":32780},[37,68391,51993],{"class":54},[37,68393,54467],{"class":2035},[37,68395,208],{"class":54},[37,68397,64830],{"class":309},[37,68399,57071],{"class":54},[37,68401,57074],{"class":2035},[37,68403,208],{"class":54},[37,68405,64782],{"class":309},[37,68407,214],{"class":54},[37,68409,68410,68412,68414,68416,68418,68420,68422,68424,68426,68428,68430,68432,68434],{"class":39,"line":32786},[37,68411,51993],{"class":54},[37,68413,54467],{"class":2035},[37,68415,208],{"class":54},[37,68417,64856],{"class":309},[37,68419,645],{"class":54},[37,68421,45635],{"class":50},[37,68423,25191],{"class":82},[37,68425,57100],{"class":309},[37,68427,57071],{"class":54},[37,68429,5406],{"class":2035},[37,68431,208],{"class":54},[37,68433,64782],{"class":309},[37,68435,214],{"class":54},[37,68437,68438],{"class":39,"line":32792},[37,68439,2472],{"emptyLinePlaceholder":131},[37,68441,68442],{"class":39,"line":32798},[37,68443,52466],{"class":54},[37,68445,68446],{"class":39,"line":32804},[37,68447,33530],{"class":54},[37,68449,68450,68452,68454],{"class":39,"line":32810},[37,68451,52485],{"class":54},[37,68453,51881],{"class":51368},[37,68455,51375],{"class":54},[37,68457,68458,68460,68462],{"class":39,"line":32816},[37,68459,51853],{"class":54},[37,68461,51868],{"class":51368},[37,68463,51375],{"class":54},[37,68465,68466],{"class":39,"line":32822},[37,68467,2472],{"emptyLinePlaceholder":131},[37,68469,68470,68472,68474],{"class":39,"line":32842},[37,68471,51853],{"class":54},[37,68473,50703],{"class":51368},[37,68475,51375],{"class":54},[175,68477,68479],{"id":68478},"_333-页面加载事件","3.3.3 页面加载事件",[158,68481,68482],{},[161,68483,68484],{},"load",[14,68486,68487],{},[119,68488],{"alt":32,"src":68489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,68491,68492],{},"window代表整个窗口，比document还要大",[14,68494,68495],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,68497,68498],{},"img.addEventListener('load', function () {",[14,68500,68501],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,68503,52532],{},[158,68505,68506],{"start":47},[161,68507,68508],{},"DOMContentLoaded",[14,68510,68511],{},[119,68512],{"alt":32,"src":68513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,68515,68516],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[175,68518,68520],{"id":68519},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,68522,68523],{},[119,68524],{"alt":32,"src":68525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,68527,68528],{},[119,68529],{"alt":32,"src":68530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,68532,68533],{},[119,68534],{"alt":32,"src":68535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,68537,68538],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,68540,68541],{},"获得的是数字型数据，不带单位",[14,68543,68544],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,68546,68547],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,68549,68550],{},"它是通过document.documentElement来获取",[14,68552,68553],{},[119,68554],{"alt":32,"src":68555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,68557,68558],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[175,68560,68562],{"id":68561},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,68564,68565],{},[119,68566],{"alt":32,"src":68567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,68569,68570],{},[119,68571],{"alt":32,"src":68572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[175,68574,68576],{"id":68575},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,68578,68579],{},[119,68580],{"alt":32,"src":68581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,68583,68584],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,68586,68587],{},[119,68588],{"alt":32,"src":68589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,68591,68592],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,68594,68595],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,68597,68598],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,68600,68601],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,68603,68604],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,68606,68607],{},[119,68608],{"alt":32,"src":68609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,68611,68612],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,68614,68615],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,68617,68618],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,68620,68621],{},"e.pageX-box.getBoundingClientRect()",[175,68623,68625],{"id":68624},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,68627,68628],{},[119,68629],{"alt":32,"src":68630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,68632,68633],{},"这个是相对于视口来说的，它是个方法，不是属性值",[175,68635,68637],{"id":68636},"_338-总结","3.3.8 总结",[14,68639,68640],{},[119,68641],{"alt":32,"src":68642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,68644,68645],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,68647,68648],{},"修改盒子的宽高只能通过width和height来实现",[175,68650,68652],{"id":68651},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[27,68654,68656],{"className":50701,"code":68655,"language":50703,"meta":32,"style":32},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[34,68657,68658,68663,68668,68673,68678],{"__ignoreMap":32},[37,68659,68660],{"class":39,"line":40},[37,68661,68662],{"class":54},"\u002F* 页面滑动 *\u002F\n",[37,68664,68665],{"class":39,"line":47},[37,68666,68667],{"class":54},"html {\n",[37,68669,68670],{"class":39,"line":58},[37,68671,68672],{"class":54},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[37,68674,68675],{"class":39,"line":64},[37,68676,68677],{"class":54},"  scroll-behavior: smooth;\n",[37,68679,68680],{"class":39,"line":76},[37,68681,1637],{"class":54},[14,68683,68684],{},"默认是auto",[175,68686,68688],{"id":68687},"_3310-日期对象","3.3.10 日期对象",[22070,68690,68692],{"id":68691},"_33101-实例化","3.3.10.1 实例化",[14,68694,68695],{},[119,68696],{"alt":32,"src":68697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22070,68699,68701],{"id":68700},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,68703,68704],{},[119,68705],{"alt":32,"src":68706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,68708,68709],{},"月份+1",[14,68711,68712],{},"老外认为第一天为0，星期天",[14,68714,68715],{},"方法使用的时候必须要跟括号",[14,68717,68718],{},"快速获得日期",[14,68720,68721],{},"\u002F\u002F 得到年月日",[14,68723,68724],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,68726,68727],{},"\u002F\u002F 得到当地日期",[14,68729,68730],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,68732,68733],{},"\u002F\u002F 得到当地时间",[14,68735,68736],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,68738,68739],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,68741,68742],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51881,68744,68745],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[14,68747,68748],{},"学会去封装函数！",[22070,68750,68752],{"id":68751},"_33103-时间戳","3.3.10.3 时间戳",[14,68754,68755],{},[119,68756],{"alt":32,"src":68757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,68759,68760],{},[119,68761],{"alt":32,"src":68762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,68764,68765],{},"三种方法记住一个就可以",[175,68767,68769],{"id":68768},"_3311-节点操作","3.3.11 节点操作",[22070,68771,68773],{"id":68772},"_33111-dom节点","3.3.11.1 DOM节点",[14,68775,68776],{},[119,68777],{"alt":32,"src":68778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,68780,68781],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22070,68783,68785],{"id":68784},"_33112-查找节点","3.3.11.2 查找节点",[14,68787,68788],{},"前边的document.querySelector()是获取的元素",[14,68790,68791],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,68793,68794],{},[119,68795],{"alt":32,"src":68796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[158,68798,68799],{},[161,68800,68801],{},"父节点",[14,68803,68804],{},[119,68805],{"alt":32,"src":68806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[158,68808,68809],{"start":47},[161,68810,68811],{},"子节点",[14,68813,68814],{},[119,68815],{"alt":32,"src":68816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,68818,68819],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,68821,68822],{},"children获得的是伪数组，是亲儿子",[158,68824,68825],{"start":58},[161,68826,68827],{},"兄弟节点",[14,68829,68830],{},[119,68831],{"alt":32,"src":68832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22070,68834,68836],{"id":68835},"_33113-增加节点","3.3.11.3 增加节点",[14,68838,68839],{},[119,68840],{"alt":32,"src":68841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,68843,68844],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,68846,68847],{},[119,68848],{"alt":32,"src":68849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,68851,68852],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,68854,68855],{},"下面是写法的部分展示，就按照下边的格式来写",[14,68857,68858],{},"例：",[51881,68860,68861],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[14,68863,68864],{},[119,68865],{"alt":32,"src":68866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,68868,68869],{},"false只克隆标签，里边的内容不会克隆过来",[27,68871,68873],{"className":50701,"code":68872,"language":50703,"meta":32,"style":32},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[34,68874,68875],{"__ignoreMap":32},[37,68876,68877],{"class":39,"line":40},[37,68878,68872],{"class":54},[22070,68880,68882],{"id":68881},"_33114-删除节点","3.3.11.4 删除节点",[14,68884,68885],{},[119,68886],{"alt":32,"src":68887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,68889,68890],{},"父亲删儿子",[14,68892,68893],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[175,68895,68897],{"id":68896},"_3312-m端事件","3.3.12 M端事件",[14,68899,68900],{},"M端就是移动端",[14,68902,68903],{},[119,68904],{"alt":32,"src":68905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[175,68907,68909],{"id":68908},"_3313-插件","3.3.13 插件",[14,68911,68912],{},"要熟悉官网！！！",[14,68914,68915],{},[443,68916,68917],{"href":68917,"rel":68918},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23937],[14,68920,68921],{},[443,68922,68923],{"href":68923,"rel":68924},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23937],[175,68926,68928],{"id":68927},"_3314-学生信息表","3.3.14 学生信息表",[158,68930,68931,68934,68937,68940,68943,68946,68949,68952],{},[161,68932,68933],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[161,68935,68936],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[161,68938,68939],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[161,68941,68942],{},"用好表单元素自带的属性，value,name等",[161,68944,68945],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[161,68947,68948],{},"不要忘记事件对象",[161,68950,68951],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[161,68953,68954],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,68956,68957],{},"结构：",[27,68959,68961],{"className":50701,"code":68960,"language":50703,"meta":32,"style":32},"\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",[34,68962,68963,68973,68987,68991,68999,69013,69033,69054,69067,69091,69099,69103,69111,69124,69145,69173,69201,69206,69228,69248,69267,69275,69303,69325,69345,69365,69385,69405,69425,69433,69453,69461,69465,69478,69486,69494,69502,69515,69528,69541,69554,69567,69580,69593,69601,69609,69617,69622,69627,69632,69637,69642,69647,69652,69657,69662,69667,69672,69677,69682,69690,69698,69706,69710,69730,69749,69769,69789,69809,69829,69833,69838,69858,69863,69873,69878,69883,69903,69925,69930,69940,69944,69948,69953,69958,69987,70001,70016,70020,70024,70028,70033,70044,70057,70062,70067,70072,70077,70082,70086,70091,70096,70105,70110,70115,70127,70132,70139,70143,70148,70158,70163,70173,70178,70206,70227,70237,70257,70275,70292,70309,70326,70343,70347,70357,70362,70367,70372,70383,70387,70391,70395,70400,70405,70426,70438,70443,70448,70453,70467,70472,70479,70483,70487,70495,70499,70507,70511],{"__ignoreMap":32},[37,68964,68965,68967,68969,68971],{"class":39,"line":40},[37,68966,51365],{"class":54},[37,68968,51369],{"class":51368},[37,68970,51372],{"class":2035},[37,68972,51375],{"class":54},[37,68974,68975,68977,68979,68981,68983,68985],{"class":39,"line":47},[37,68976,1113],{"class":54},[37,68978,50703],{"class":51368},[37,68980,51384],{"class":2035},[37,68982,70],{"class":54},[37,68984,51389],{"class":309},[37,68986,51375],{"class":54},[37,68988,68989],{"class":39,"line":58},[37,68990,2472],{"emptyLinePlaceholder":131},[37,68992,68993,68995,68997],{"class":39,"line":64},[37,68994,1113],{"class":54},[37,68996,51402],{"class":51368},[37,68998,51375],{"class":54},[37,69000,69001,69003,69005,69007,69009,69011],{"class":39,"line":76},[37,69002,52212],{"class":54},[37,69004,51412],{"class":51368},[37,69006,51415],{"class":2035},[37,69008,70],{"class":54},[37,69010,51420],{"class":309},[37,69012,59195],{"class":54},[37,69014,69015,69017,69019,69021,69023,69025,69027,69029,69031],{"class":39,"line":92},[37,69016,52212],{"class":54},[37,69018,51412],{"class":51368},[37,69020,14992],{"class":2035},[37,69022,70],{"class":54},[37,69024,51459],{"class":309},[37,69026,51439],{"class":2035},[37,69028,70],{"class":54},[37,69030,51466],{"class":309},[37,69032,59195],{"class":54},[37,69034,69035,69037,69039,69041,69043,69045,69047,69049,69052],{"class":39,"line":97},[37,69036,52212],{"class":54},[37,69038,51412],{"class":51368},[37,69040,51431],{"class":2035},[37,69042,70],{"class":54},[37,69044,51436],{"class":309},[37,69046,51439],{"class":2035},[37,69048,70],{"class":54},[37,69050,69051],{"class":309},"\"ie=edge\"",[37,69053,59195],{"class":54},[37,69055,69056,69058,69060,69063,69065],{"class":39,"line":107},[37,69057,52212],{"class":54},[37,69059,51475],{"class":51368},[37,69061,69062],{"class":54},">学生信息管理\u003C\u002F",[37,69064,51475],{"class":51368},[37,69066,51375],{"class":54},[37,69068,69069,69071,69074,69077,69079,69082,69084,69086,69089],{"class":39,"line":1390},[37,69070,52212],{"class":54},[37,69072,69073],{"class":51368},"link",[37,69075,69076],{"class":2035}," rel",[37,69078,70],{"class":54},[37,69080,69081],{"class":309},"\"stylesheet\"",[37,69083,61125],{"class":2035},[37,69085,70],{"class":54},[37,69087,69088],{"class":309},"\"css\u002Findex.css\"",[37,69090,59195],{"class":54},[37,69092,69093,69095,69097],{"class":39,"line":1402},[37,69094,51853],{"class":54},[37,69096,51402],{"class":51368},[37,69098,51375],{"class":54},[37,69100,69101],{"class":39,"line":1684},[37,69102,2472],{"emptyLinePlaceholder":131},[37,69104,69105,69107,69109],{"class":39,"line":1689},[37,69106,1113],{"class":54},[37,69108,51868],{"class":51368},[37,69110,51375],{"class":54},[37,69112,69113,69115,69117,69120,69122],{"class":39,"line":1695},[37,69114,52212],{"class":54},[37,69116,10],{"class":51368},[37,69118,69119],{"class":54},">新增学员\u003C\u002F",[37,69121,10],{"class":51368},[37,69123,51375],{"class":54},[37,69125,69126,69128,69130,69132,69134,69136,69139,69141,69143],{"class":39,"line":1700},[37,69127,52212],{"class":54},[37,69129,66693],{"class":51368},[37,69131,53554],{"class":2035},[37,69133,70],{"class":54},[37,69135,62732],{"class":309},[37,69137,69138],{"class":2035}," autocomplete",[37,69140,70],{"class":54},[37,69142,31846],{"class":309},[37,69144,51375],{"class":54},[37,69146,69147,69150,69152,69154,69156,69158,69160,69162,69165,69167,69169,69171],{"class":39,"line":1714},[37,69148,69149],{"class":54},"    姓名：\u003C",[37,69151,53889],{"class":51368},[37,69153,53892],{"class":2035},[37,69155,70],{"class":54},[37,69157,62767],{"class":309},[37,69159,53554],{"class":2035},[37,69161,70],{"class":54},[37,69163,69164],{"class":309},"\"uname\"",[37,69166,14992],{"class":2035},[37,69168,70],{"class":54},[37,69170,69164],{"class":309},[37,69172,59195],{"class":54},[37,69174,69175,69178,69180,69182,69184,69186,69188,69190,69193,69195,69197,69199],{"class":39,"line":1719},[37,69176,69177],{"class":54},"    年龄：\u003C",[37,69179,53889],{"class":51368},[37,69181,53892],{"class":2035},[37,69183,70],{"class":54},[37,69185,62767],{"class":309},[37,69187,53554],{"class":2035},[37,69189,70],{"class":54},[37,69191,69192],{"class":309},"\"age\"",[37,69194,14992],{"class":2035},[37,69196,70],{"class":54},[37,69198,69192],{"class":309},[37,69200,59195],{"class":54},[37,69202,69203],{"class":39,"line":1725},[37,69204,69205],{"class":54},"    性别:\n",[37,69207,69208,69210,69213,69215,69217,69220,69222,69224,69226],{"class":39,"line":1746},[37,69209,51409],{"class":54},[37,69211,69212],{"class":51368},"select",[37,69214,14992],{"class":2035},[37,69216,70],{"class":54},[37,69218,69219],{"class":309},"\"gender\"",[37,69221,53554],{"class":2035},[37,69223,70],{"class":54},[37,69225,69219],{"class":309},[37,69227,51375],{"class":54},[37,69229,69230,69232,69235,69237,69239,69241,69244,69246],{"class":39,"line":1751},[37,69231,55302],{"class":54},[37,69233,69234],{"class":51368},"option",[37,69236,66719],{"class":2035},[37,69238,70],{"class":54},[37,69240,10033],{"class":309},[37,69242,69243],{"class":54},">男\u003C\u002F",[37,69245,69234],{"class":51368},[37,69247,51375],{"class":54},[37,69249,69250,69252,69254,69256,69258,69260,69263,69265],{"class":39,"line":1765},[37,69251,55302],{"class":54},[37,69253,69234],{"class":51368},[37,69255,66719],{"class":2035},[37,69257,70],{"class":54},[37,69259,10102],{"class":309},[37,69261,69262],{"class":54},">女\u003C\u002F",[37,69264,69234],{"class":51368},[37,69266,51375],{"class":54},[37,69268,69269,69271,69273],{"class":39,"line":1770},[37,69270,51844],{"class":54},[37,69272,69212],{"class":51368},[37,69274,51375],{"class":54},[37,69276,69277,69280,69282,69284,69286,69288,69290,69292,69295,69297,69299,69301],{"class":39,"line":1799},[37,69278,69279],{"class":54},"    薪资：\u003C",[37,69281,53889],{"class":51368},[37,69283,53892],{"class":2035},[37,69285,70],{"class":54},[37,69287,62767],{"class":309},[37,69289,53554],{"class":2035},[37,69291,70],{"class":54},[37,69293,69294],{"class":309},"\"salary\"",[37,69296,14992],{"class":2035},[37,69298,70],{"class":54},[37,69300,69294],{"class":309},[37,69302,59195],{"class":54},[37,69304,69305,69308,69310,69312,69314,69317,69319,69321,69323],{"class":39,"line":1804},[37,69306,69307],{"class":54},"    就业城市：\u003C",[37,69309,69212],{"class":51368},[37,69311,14992],{"class":2035},[37,69313,70],{"class":54},[37,69315,69316],{"class":309},"\"city\"",[37,69318,53554],{"class":2035},[37,69320,70],{"class":54},[37,69322,69316],{"class":309},[37,69324,51375],{"class":54},[37,69326,69327,69329,69331,69333,69335,69338,69341,69343],{"class":39,"line":1821},[37,69328,55302],{"class":54},[37,69330,69234],{"class":51368},[37,69332,66719],{"class":2035},[37,69334,70],{"class":54},[37,69336,69337],{"class":309},"\"北京\"",[37,69339,69340],{"class":54},">北京\u003C\u002F",[37,69342,69234],{"class":51368},[37,69344,51375],{"class":54},[37,69346,69347,69349,69351,69353,69355,69358,69361,69363],{"class":39,"line":1826},[37,69348,55302],{"class":54},[37,69350,69234],{"class":51368},[37,69352,66719],{"class":2035},[37,69354,70],{"class":54},[37,69356,69357],{"class":309},"\"上海\"",[37,69359,69360],{"class":54},">上海\u003C\u002F",[37,69362,69234],{"class":51368},[37,69364,51375],{"class":54},[37,69366,69367,69369,69371,69373,69375,69378,69381,69383],{"class":39,"line":1831},[37,69368,55302],{"class":54},[37,69370,69234],{"class":51368},[37,69372,66719],{"class":2035},[37,69374,70],{"class":54},[37,69376,69377],{"class":309},"\"广州\"",[37,69379,69380],{"class":54},">广州\u003C\u002F",[37,69382,69234],{"class":51368},[37,69384,51375],{"class":54},[37,69386,69387,69389,69391,69393,69395,69398,69401,69403],{"class":39,"line":1836},[37,69388,55302],{"class":54},[37,69390,69234],{"class":51368},[37,69392,66719],{"class":2035},[37,69394,70],{"class":54},[37,69396,69397],{"class":309},"\"深圳\"",[37,69399,69400],{"class":54},">深圳\u003C\u002F",[37,69402,69234],{"class":51368},[37,69404,51375],{"class":54},[37,69406,69407,69409,69411,69413,69415,69418,69421,69423],{"class":39,"line":1850},[37,69408,55302],{"class":54},[37,69410,69234],{"class":51368},[37,69412,66719],{"class":2035},[37,69414,70],{"class":54},[37,69416,69417],{"class":309},"\"曹县\"",[37,69419,69420],{"class":54},">曹县\u003C\u002F",[37,69422,69234],{"class":51368},[37,69424,51375],{"class":54},[37,69426,69427,69429,69431],{"class":39,"line":1855},[37,69428,51844],{"class":54},[37,69430,69212],{"class":51368},[37,69432,51375],{"class":54},[37,69434,69435,69437,69439,69441,69443,69446,69449,69451],{"class":39,"line":2649},[37,69436,51409],{"class":54},[37,69438,53955],{"class":51368},[37,69440,53554],{"class":2035},[37,69442,70],{"class":54},[37,69444,69445],{"class":309},"\"add\"",[37,69447,69448],{"class":54},">录入\u003C\u002F",[37,69450,53955],{"class":51368},[37,69452,51375],{"class":54},[37,69454,69455,69457,69459],{"class":39,"line":2663},[37,69456,52485],{"class":54},[37,69458,66693],{"class":51368},[37,69460,51375],{"class":54},[37,69462,69463],{"class":39,"line":2671},[37,69464,2472],{"emptyLinePlaceholder":131},[37,69466,69467,69469,69471,69474,69476],{"class":39,"line":2676},[37,69468,52212],{"class":54},[37,69470,10],{"class":51368},[37,69472,69473],{"class":54},">就业榜\u003C\u002F",[37,69475,10],{"class":51368},[37,69477,51375],{"class":54},[37,69479,69480,69482,69484],{"class":39,"line":2682},[37,69481,52212],{"class":54},[37,69483,342],{"class":51368},[37,69485,51375],{"class":54},[37,69487,69488,69490,69492],{"class":39,"line":2688},[37,69489,51409],{"class":54},[37,69491,345],{"class":51368},[37,69493,51375],{"class":54},[37,69495,69496,69498,69500],{"class":39,"line":2693},[37,69497,55302],{"class":54},[37,69499,348],{"class":51368},[37,69501,51375],{"class":54},[37,69503,69504,69506,69508,69511,69513],{"class":39,"line":8020},[37,69505,55370],{"class":54},[37,69507,351],{"class":51368},[37,69509,69510],{"class":54},">序号\u003C\u002F",[37,69512,351],{"class":51368},[37,69514,51375],{"class":54},[37,69516,69517,69519,69521,69524,69526],{"class":39,"line":8044},[37,69518,55370],{"class":54},[37,69520,351],{"class":51368},[37,69522,69523],{"class":54},">姓名\u003C\u002F",[37,69525,351],{"class":51368},[37,69527,51375],{"class":54},[37,69529,69530,69532,69534,69537,69539],{"class":39,"line":8049},[37,69531,55370],{"class":54},[37,69533,351],{"class":51368},[37,69535,69536],{"class":54},">年龄\u003C\u002F",[37,69538,351],{"class":51368},[37,69540,51375],{"class":54},[37,69542,69543,69545,69547,69550,69552],{"class":39,"line":8055},[37,69544,55370],{"class":54},[37,69546,351],{"class":51368},[37,69548,69549],{"class":54},">性别\u003C\u002F",[37,69551,351],{"class":51368},[37,69553,51375],{"class":54},[37,69555,69556,69558,69560,69563,69565],{"class":39,"line":8082},[37,69557,55370],{"class":54},[37,69559,351],{"class":51368},[37,69561,69562],{"class":54},">薪资\u003C\u002F",[37,69564,351],{"class":51368},[37,69566,51375],{"class":54},[37,69568,69569,69571,69573,69576,69578],{"class":39,"line":8087},[37,69570,55370],{"class":54},[37,69572,351],{"class":51368},[37,69574,69575],{"class":54},">就业城市\u003C\u002F",[37,69577,351],{"class":51368},[37,69579,51375],{"class":54},[37,69581,69582,69584,69586,69589,69591],{"class":39,"line":8093},[37,69583,55370],{"class":54},[37,69585,351],{"class":51368},[37,69587,69588],{"class":54},">操作\u003C\u002F",[37,69590,351],{"class":51368},[37,69592,51375],{"class":54},[37,69594,69595,69597,69599],{"class":39,"line":8105},[37,69596,55475],{"class":54},[37,69598,348],{"class":51368},[37,69600,51375],{"class":54},[37,69602,69603,69605,69607],{"class":39,"line":8117},[37,69604,51844],{"class":54},[37,69606,345],{"class":51368},[37,69608,51375],{"class":54},[37,69610,69611,69613,69615],{"class":39,"line":8129},[37,69612,51409],{"class":54},[37,69614,389],{"class":51368},[37,69616,51375],{"class":54},[37,69618,69619],{"class":39,"line":9788},[37,69620,69621],{"class":43},"      \u003C!-- \n",[37,69623,69624],{"class":39,"line":9813},[37,69625,69626],{"class":43},"        \u003Ctr>\n",[37,69628,69629],{"class":39,"line":9836},[37,69630,69631],{"class":43},"          \u003Ctd>1001\u003C\u002Ftd>\n",[37,69633,69634],{"class":39,"line":9860},[37,69635,69636],{"class":43},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[37,69638,69639],{"class":39,"line":9865},[37,69640,69641],{"class":43},"          \u003Ctd>19\u003C\u002Ftd>\n",[37,69643,69644],{"class":39,"line":9870},[37,69645,69646],{"class":43},"          \u003Ctd>男\u003C\u002Ftd>\n",[37,69648,69649],{"class":39,"line":9875},[37,69650,69651],{"class":43},"          \u003Ctd>15000\u003C\u002Ftd>\n",[37,69653,69654],{"class":39,"line":9884},[37,69655,69656],{"class":43},"          \u003Ctd>上海\u003C\u002Ftd>\n",[37,69658,69659],{"class":39,"line":9889},[37,69660,69661],{"class":43},"          \u003Ctd>\n",[37,69663,69664],{"class":39,"line":9895},[37,69665,69666],{"class":43},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[37,69668,69669],{"class":39,"line":9916},[37,69670,69671],{"class":43},"          \u003C\u002Ftd>\n",[37,69673,69674],{"class":39,"line":9922},[37,69675,69676],{"class":43},"        \u003C\u002Ftr> \n",[37,69678,69679],{"class":39,"line":9936},[37,69680,69681],{"class":43},"        -->\n",[37,69683,69684,69686,69688],{"class":39,"line":9942},[37,69685,51844],{"class":54},[37,69687,389],{"class":51368},[37,69689,51375],{"class":54},[37,69691,69692,69694,69696],{"class":39,"line":9969},[37,69693,52485],{"class":54},[37,69695,342],{"class":51368},[37,69697,51375],{"class":54},[37,69699,69700,69702,69704],{"class":39,"line":9978},[37,69701,52212],{"class":54},[37,69703,51881],{"class":51368},[37,69705,51375],{"class":54},[37,69707,69708],{"class":39,"line":9984},[37,69709,60026],{"class":43},[37,69711,69712,69714,69717,69719,69721,69723,69725,69728],{"class":39,"line":9992},[37,69713,11293],{"class":50},[37,69715,69716],{"class":82}," uname",[37,69718,13636],{"class":50},[37,69720,54464],{"class":54},[37,69722,54467],{"class":2035},[37,69724,208],{"class":54},[37,69726,69727],{"class":309},"'.uname'",[37,69729,214],{"class":54},[37,69731,69732,69734,69736,69738,69740,69742,69744,69747],{"class":39,"line":9997},[37,69733,11293],{"class":50},[37,69735,15761],{"class":82},[37,69737,13636],{"class":50},[37,69739,54464],{"class":54},[37,69741,54467],{"class":2035},[37,69743,208],{"class":54},[37,69745,69746],{"class":309},"'.age'",[37,69748,214],{"class":54},[37,69750,69751,69753,69756,69758,69760,69762,69764,69767],{"class":39,"line":16676},[37,69752,11293],{"class":50},[37,69754,69755],{"class":82}," gender",[37,69757,13636],{"class":50},[37,69759,54464],{"class":54},[37,69761,54467],{"class":2035},[37,69763,208],{"class":54},[37,69765,69766],{"class":309},"'.gender'",[37,69768,214],{"class":54},[37,69770,69771,69773,69776,69778,69780,69782,69784,69787],{"class":39,"line":16682},[37,69772,11293],{"class":50},[37,69774,69775],{"class":82}," salary",[37,69777,13636],{"class":50},[37,69779,54464],{"class":54},[37,69781,54467],{"class":2035},[37,69783,208],{"class":54},[37,69785,69786],{"class":309},"'.salary'",[37,69788,214],{"class":54},[37,69790,69791,69793,69796,69798,69800,69802,69804,69807],{"class":39,"line":16705},[37,69792,11293],{"class":50},[37,69794,69795],{"class":82}," city",[37,69797,13636],{"class":50},[37,69799,54464],{"class":54},[37,69801,54467],{"class":2035},[37,69803,208],{"class":54},[37,69805,69806],{"class":309},"'.city'",[37,69808,214],{"class":54},[37,69810,69811,69813,69816,69818,69820,69822,69824,69827],{"class":39,"line":16711},[37,69812,11293],{"class":50},[37,69814,69815],{"class":82}," tbody",[37,69817,13636],{"class":50},[37,69819,54464],{"class":54},[37,69821,54467],{"class":2035},[37,69823,208],{"class":54},[37,69825,69826],{"class":309},"'tbody'",[37,69828,214],{"class":54},[37,69830,69831],{"class":39,"line":16734},[37,69832,2472],{"emptyLinePlaceholder":131},[37,69834,69835],{"class":39,"line":16748},[37,69836,69837],{"class":43},"    \u002F\u002F 获取所有带有name属性的元素\n",[37,69839,69840,69842,69845,69847,69849,69851,69853,69856],{"class":39,"line":16768},[37,69841,11293],{"class":50},[37,69843,69844],{"class":82}," items",[37,69846,13636],{"class":50},[37,69848,54464],{"class":54},[37,69850,55749],{"class":2035},[37,69852,208],{"class":54},[37,69854,69855],{"class":309},"'[name]'",[37,69857,214],{"class":54},[37,69859,69860],{"class":39,"line":16774},[37,69861,69862],{"class":43},"    \u002F\u002F 声明一个空的数组\n",[37,69864,69865,69867,69869,69871],{"class":39,"line":16785},[37,69866,11293],{"class":50},[37,69868,57763],{"class":82},[37,69870,13636],{"class":50},[37,69872,51906],{"class":54},[37,69874,69875],{"class":39,"line":16808},[37,69876,69877],{"class":43},"    \u002F\u002F 1.录入模块\n",[37,69879,69880],{"class":39,"line":16830},[37,69881,69882],{"class":43},"    \u002F\u002F 1.1这是一个表单提交事件\n",[37,69884,69885,69887,69890,69892,69894,69896,69898,69901],{"class":39,"line":16835},[37,69886,11293],{"class":50},[37,69888,69889],{"class":82}," info",[37,69891,13636],{"class":50},[37,69893,54464],{"class":54},[37,69895,54467],{"class":2035},[37,69897,208],{"class":54},[37,69899,69900],{"class":309},"'.info'",[37,69902,214],{"class":54},[37,69904,69905,69908,69910,69912,69915,69917,69919,69921,69923],{"class":39,"line":16841},[37,69906,69907],{"class":54},"    info.",[37,69909,57881],{"class":2035},[37,69911,208],{"class":54},[37,69913,69914],{"class":309},"'submit'",[37,69916,12507],{"class":54},[37,69918,54517],{"class":50},[37,69920,1730],{"class":54},[37,69922,279],{"class":5288},[37,69924,12514],{"class":54},[37,69926,69927],{"class":39,"line":16855},[37,69928,69929],{"class":43},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[37,69931,69932,69935,69938],{"class":39,"line":16868},[37,69933,69934],{"class":54},"      e.",[37,69936,69937],{"class":2035},"preventDefault",[37,69939,2048],{"class":54},[37,69941,69942],{"class":39,"line":16873},[37,69943,60080],{"class":43},[37,69945,69946],{"class":39,"line":16887},[37,69947,2472],{"emptyLinePlaceholder":131},[37,69949,69950],{"class":39,"line":16892},[37,69951,69952],{"class":43},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[37,69954,69955],{"class":39,"line":16898},[37,69956,69957],{"class":43},"      \u002F\u002F 先遍历循环\n",[37,69959,69960,69962,69964,69966,69968,69970,69972,69974,69976,69979,69981,69983,69985],{"class":39,"line":16903},[37,69961,52352],{"class":50},[37,69963,1730],{"class":54},[37,69965,51915],{"class":50},[37,69967,9510],{"class":54},[37,69969,70],{"class":50},[37,69971,4165],{"class":82},[37,69973,9517],{"class":54},[37,69975,1113],{"class":50},[37,69977,69978],{"class":54}," items.",[37,69980,52036],{"class":82},[37,69982,3286],{"class":54},[37,69984,2364],{"class":50},[37,69986,12514],{"class":54},[37,69988,69989,69991,69994,69996,69999],{"class":39,"line":16917},[37,69990,2569],{"class":50},[37,69992,69993],{"class":54}," (items[i].value ",[37,69995,54554],{"class":50},[37,69997,69998],{"class":309}," ''",[37,70000,12514],{"class":54},[37,70002,70003,70006,70009,70011,70014],{"class":39,"line":16922},[37,70004,70005],{"class":50},"          return",[37,70007,70008],{"class":2035}," alert",[37,70010,208],{"class":54},[37,70012,70013],{"class":309},"'输入内容不能为空'",[37,70015,214],{"class":54},[37,70017,70018],{"class":39,"line":16927},[37,70019,2601],{"class":54},[37,70021,70022],{"class":39,"line":16941},[37,70023,52466],{"class":54},[37,70025,70026],{"class":39,"line":16953},[37,70027,2472],{"emptyLinePlaceholder":131},[37,70029,70030],{"class":39,"line":16958},[37,70031,70032],{"class":43},"      \u002F\u002F 创建新的对象\n",[37,70034,70035,70037,70040,70042],{"class":39,"line":16971},[37,70036,58296],{"class":50},[37,70038,70039],{"class":82}," obj",[37,70041,13636],{"class":50},[37,70043,15644],{"class":54},[37,70045,70046,70049,70051,70053,70055],{"class":39,"line":16976},[37,70047,70048],{"class":54},"        stuID: arr.",[37,70050,52036],{"class":82},[37,70052,45635],{"class":50},[37,70054,25191],{"class":82},[37,70056,31536],{"class":54},[37,70058,70059],{"class":39,"line":16981},[37,70060,70061],{"class":54},"        uname: uname.value,\n",[37,70063,70064],{"class":39,"line":16986},[37,70065,70066],{"class":54},"        age: age.value,\n",[37,70068,70069],{"class":39,"line":16999},[37,70070,70071],{"class":54},"        gender: gender.value,\n",[37,70073,70074],{"class":39,"line":17004},[37,70075,70076],{"class":54},"        salary: salary.value,\n",[37,70078,70079],{"class":39,"line":32702},[37,70080,70081],{"class":54},"        city: city.value\n",[37,70083,70084],{"class":39,"line":32708},[37,70085,52466],{"class":54},[37,70087,70088],{"class":39,"line":32714},[37,70089,70090],{"class":43},"      \u002F\u002F console.log(obj);\n",[37,70092,70093],{"class":39,"line":32720},[37,70094,70095],{"class":43},"      \u002F\u002F 追加到数组里面\n",[37,70097,70098,70100,70102],{"class":39,"line":32726},[37,70099,58075],{"class":54},[37,70101,51952],{"class":2035},[37,70103,70104],{"class":54},"(obj)\n",[37,70106,70107],{"class":39,"line":32737},[37,70108,70109],{"class":43},"      \u002F\u002F console.log(arr);\n",[37,70111,70112],{"class":39,"line":32743},[37,70113,70114],{"class":43},"      \u002F\u002F 清空表单  reset重置表单\n",[37,70116,70117,70120,70122,70125],{"class":39,"line":32763},[37,70118,70119],{"class":82},"      this",[37,70121,761],{"class":54},[37,70123,70124],{"class":2035},"reset",[37,70126,2048],{"class":54},[37,70128,70129],{"class":39,"line":32769},[37,70130,70131],{"class":43},"      \u002F\u002F 调用渲染函数\n",[37,70133,70134,70137],{"class":39,"line":32780},[37,70135,70136],{"class":2035},"      render",[37,70138,2048],{"class":54},[37,70140,70141],{"class":39,"line":32786},[37,70142,33530],{"class":54},[37,70144,70145],{"class":39,"line":32792},[37,70146,70147],{"class":43},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[37,70149,70150,70153,70156],{"class":39,"line":32798},[37,70151,70152],{"class":50},"    function",[37,70154,70155],{"class":2035}," render",[37,70157,10925],{"class":54},[37,70159,70160],{"class":39,"line":32804},[37,70161,70162],{"class":43},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[37,70164,70165,70168,70170],{"class":39,"line":32810},[37,70166,70167],{"class":54},"      tbody.innerHTML ",[37,70169,70],{"class":50},[37,70171,70172],{"class":309}," ''\n",[37,70174,70175],{"class":39,"line":32816},[37,70176,70177],{"class":43},"      \u002F\u002F 遍历数组\n",[37,70179,70180,70182,70184,70186,70188,70190,70192,70194,70196,70198,70200,70202,70204],{"class":39,"line":32822},[37,70181,52352],{"class":50},[37,70183,1730],{"class":54},[37,70185,51915],{"class":50},[37,70187,9510],{"class":54},[37,70189,70],{"class":50},[37,70191,4165],{"class":82},[37,70193,9517],{"class":54},[37,70195,1113],{"class":50},[37,70197,52033],{"class":54},[37,70199,52036],{"class":82},[37,70201,3286],{"class":54},[37,70203,2364],{"class":50},[37,70205,12514],{"class":54},[37,70207,70208,70210,70213,70215,70217,70220,70222,70225],{"class":39,"line":32842},[37,70209,61338],{"class":50},[37,70211,70212],{"class":82}," tr",[37,70214,13636],{"class":50},[37,70216,54464],{"class":54},[37,70218,70219],{"class":2035},"createElement",[37,70221,208],{"class":54},[37,70223,70224],{"class":309},"'tr'",[37,70226,214],{"class":54},[37,70228,70229,70232,70234],{"class":39,"line":32848},[37,70230,70231],{"class":54},"        tr.innerHTML ",[37,70233,70],{"class":50},[37,70235,70236],{"class":309}," `\n",[37,70238,70239,70242,70244,70246,70248,70251,70254],{"class":39,"line":32864},[37,70240,70241],{"class":309},"        \u003Ctd>${",[37,70243,3952],{"class":54},[37,70245,1093],{"class":309},[37,70247,645],{"class":54},[37,70249,70250],{"class":309},"].",[37,70252,70253],{"class":54},"stuID",[37,70255,70256],{"class":309},"}\u003C\u002Ftd>\n",[37,70258,70259,70262,70264,70266,70268,70270,70273],{"class":39,"line":32870},[37,70260,70261],{"class":309},"          \u003Ctd>${",[37,70263,3952],{"class":54},[37,70265,1093],{"class":309},[37,70267,645],{"class":54},[37,70269,70250],{"class":309},[37,70271,70272],{"class":54},"uname",[37,70274,70256],{"class":309},[37,70276,70277,70279,70281,70283,70285,70287,70290],{"class":39,"line":32884},[37,70278,70261],{"class":309},[37,70280,3952],{"class":54},[37,70282,1093],{"class":309},[37,70284,645],{"class":54},[37,70286,70250],{"class":309},[37,70288,70289],{"class":54},"age",[37,70291,70256],{"class":309},[37,70293,70294,70296,70298,70300,70302,70304,70307],{"class":39,"line":32890},[37,70295,70261],{"class":309},[37,70297,3952],{"class":54},[37,70299,1093],{"class":309},[37,70301,645],{"class":54},[37,70303,70250],{"class":309},[37,70305,70306],{"class":54},"gender",[37,70308,70256],{"class":309},[37,70310,70311,70313,70315,70317,70319,70321,70324],{"class":39,"line":32905},[37,70312,70261],{"class":309},[37,70314,3952],{"class":54},[37,70316,1093],{"class":309},[37,70318,645],{"class":54},[37,70320,70250],{"class":309},[37,70322,70323],{"class":54},"salary",[37,70325,70256],{"class":309},[37,70327,70328,70330,70332,70334,70336,70338,70341],{"class":39,"line":32911},[37,70329,70261],{"class":309},[37,70331,3952],{"class":54},[37,70333,1093],{"class":309},[37,70335,645],{"class":54},[37,70337,70250],{"class":309},[37,70339,70340],{"class":54},"city",[37,70342,70256],{"class":309},[37,70344,70345],{"class":39,"line":32920},[37,70346,69661],{"class":309},[37,70348,70349,70352,70354],{"class":39,"line":32926},[37,70350,70351],{"class":309},"            \u003Ca href=\"javascript:\" data-id=${",[37,70353,645],{"class":54},[37,70355,70356],{"class":309},"}>删除\u003C\u002Fa>\n",[37,70358,70359],{"class":39,"line":32935},[37,70360,70361],{"class":309},"          \u003C\u002Ftd> \n",[37,70363,70364],{"class":39,"line":32941},[37,70365,70366],{"class":309},"          `\n",[37,70368,70369],{"class":39,"line":32947},[37,70370,70371],{"class":43},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[37,70373,70374,70377,70380],{"class":39,"line":32956},[37,70375,70376],{"class":54},"        tbody.",[37,70378,70379],{"class":2035},"appendChild",[37,70381,70382],{"class":54},"(tr)\n",[37,70384,70385],{"class":39,"line":32962},[37,70386,52466],{"class":54},[37,70388,70389],{"class":39,"line":32973},[37,70390,2259],{"class":54},[37,70392,70393],{"class":39,"line":32979},[37,70394,2472],{"emptyLinePlaceholder":131},[37,70396,70397],{"class":39,"line":32998},[37,70398,70399],{"class":43},"    \u002F\u002F 3.删除委托\n",[37,70401,70402],{"class":39,"line":33004},[37,70403,70404],{"class":43},"    \u002F\u002F 3.1 事件委托 tbody\n",[37,70406,70407,70410,70412,70414,70416,70418,70420,70422,70424],{"class":39,"line":33015},[37,70408,70409],{"class":54},"    tbody.",[37,70411,57881],{"class":2035},[37,70413,208],{"class":54},[37,70415,57886],{"class":309},[37,70417,12507],{"class":54},[37,70419,54517],{"class":50},[37,70421,1730],{"class":54},[37,70423,279],{"class":5288},[37,70425,12514],{"class":54},[37,70427,70428,70430,70432,70434,70436],{"class":39,"line":33021},[37,70429,54548],{"class":50},[37,70431,67102],{"class":54},[37,70433,54554],{"class":50},[37,70435,68324],{"class":309},[37,70437,12514],{"class":54},[37,70439,70440],{"class":39,"line":33041},[37,70441,70442],{"class":43},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[37,70444,70445],{"class":39,"line":33057},[37,70446,70447],{"class":43},"        \u002F\u002F console.log(e.target.dataset.id);\n",[37,70449,70450],{"class":39,"line":33063},[37,70451,70452],{"class":43},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[37,70454,70455,70458,70460,70463,70465],{"class":39,"line":33077},[37,70456,70457],{"class":54},"        arr.",[37,70459,58078],{"class":2035},[37,70461,70462],{"class":54},"(e.target.dataset.id, ",[37,70464,422],{"class":82},[37,70466,214],{"class":54},[37,70468,70469],{"class":39,"line":33083},[37,70470,70471],{"class":43},"        \u002F\u002F 重新渲染一次\n",[37,70473,70474,70477],{"class":39,"line":33089},[37,70475,70476],{"class":2035},"        render",[37,70478,2048],{"class":54},[37,70480,70481],{"class":39,"line":33100},[37,70482,52466],{"class":54},[37,70484,70485],{"class":39,"line":33106},[37,70486,33530],{"class":54},[37,70488,70489,70491,70493],{"class":39,"line":33112},[37,70490,52485],{"class":54},[37,70492,51881],{"class":51368},[37,70494,51375],{"class":54},[37,70496,70497],{"class":39,"line":33122},[37,70498,2472],{"emptyLinePlaceholder":131},[37,70500,70501,70503,70505],{"class":39,"line":33128},[37,70502,51853],{"class":54},[37,70504,51868],{"class":51368},[37,70506,51375],{"class":54},[37,70508,70509],{"class":39,"line":33139},[37,70510,2472],{"emptyLinePlaceholder":131},[37,70512,70513,70515,70517],{"class":39,"line":33145},[37,70514,51853],{"class":54},[37,70516,50703],{"class":51368},[37,70518,51375],{"class":54},[14,70520,70521],{},"样式：",[27,70523,70527],{"className":70524,"code":70525,"language":70526,"meta":32,"style":32},"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",[34,70528,70529,70534,70544,70553,70557,70561,70566,70576,70581,70585,70590,70600,70605,70614,70618,70622,70627,70632,70642,70652,70657,70661,70666,70675,70685,70690,70700,70710,70714,70719,70727,70731,70736,70741,70746,70754,70763,70767,70772,70781,70785,70790,70799,70803,70808,70817,70826,70834,70838,70843,70852,70862,70871,70881,70887,70896,70906,70916,70920,70925,70934,70942,70952,70960,70969,70978,70988,70996,71000,71005,71014],{"__ignoreMap":32},[37,70530,70531],{"class":39,"line":40},[37,70532,70533],{"class":54},"* {\n",[37,70535,70536,70539,70541],{"class":39,"line":47},[37,70537,70538],{"class":51368},"  margin",[37,70540,51505],{"class":54},[37,70542,70543],{"class":309},"0;\n",[37,70545,70546,70549,70551],{"class":39,"line":58},[37,70547,70548],{"class":309},"  padding",[37,70550,51505],{"class":54},[37,70552,70543],{"class":309},[37,70554,70555],{"class":39,"line":64},[37,70556,1637],{"class":54},[37,70558,70559],{"class":39,"line":76},[37,70560,2472],{"emptyLinePlaceholder":131},[37,70562,70563],{"class":39,"line":92},[37,70564,70565],{"class":309},"a {\n",[37,70567,70568,70571,70573],{"class":39,"line":97},[37,70569,70570],{"class":51368},"  text-decoration",[37,70572,51505],{"class":54},[37,70574,70575],{"class":309},"none;\n",[37,70577,70578],{"class":39,"line":107},[37,70579,70580],{"class":309},"  color:#721c24;\n",[37,70582,70583],{"class":39,"line":1390},[37,70584,1637],{"class":54},[37,70586,70587],{"class":39,"line":1402},[37,70588,70589],{"class":309},"h1 {\n",[37,70591,70592,70595,70597],{"class":39,"line":1684},[37,70593,70594],{"class":51368},"  text-align",[37,70596,51505],{"class":54},[37,70598,70599],{"class":309},"center;\n",[37,70601,70602],{"class":39,"line":1689},[37,70603,70604],{"class":309},"  color:#333;\n",[37,70606,70607,70609,70611],{"class":39,"line":1695},[37,70608,70538],{"class":51368},[37,70610,51505],{"class":54},[37,70612,70613],{"class":309},"20px 0;\n",[37,70615,70616],{"class":39,"line":1700},[37,70617,2746],{"class":54},[37,70619,70620],{"class":39,"line":1714},[37,70621,1637],{"class":54},[37,70623,70624],{"class":39,"line":1719},[37,70625,70626],{"class":309},"table {\n",[37,70628,70629],{"class":39,"line":1725},[37,70630,70631],{"class":309},"  margin:0 auto;\n",[37,70633,70634,70637,70639],{"class":39,"line":1746},[37,70635,70636],{"class":51368},"  width",[37,70638,51505],{"class":54},[37,70640,70641],{"class":309},"800px;\n",[37,70643,70644,70647,70649],{"class":39,"line":1751},[37,70645,70646],{"class":51368},"  border-collapse",[37,70648,51505],{"class":54},[37,70650,70651],{"class":309},"collapse;\n",[37,70653,70654],{"class":39,"line":1765},[37,70655,70656],{"class":309},"  color:#004085;\n",[37,70658,70659],{"class":39,"line":1770},[37,70660,1637],{"class":54},[37,70662,70663],{"class":39,"line":1799},[37,70664,70665],{"class":309},"th {\n",[37,70667,70668,70670,70672],{"class":39,"line":1804},[37,70669,70548],{"class":51368},[37,70671,51505],{"class":54},[37,70673,70674],{"class":309},"10px;\n",[37,70676,70677,70680,70682],{"class":39,"line":1821},[37,70678,70679],{"class":51368},"  background",[37,70681,51505],{"class":54},[37,70683,70684],{"class":43},"#cfe5ff;\n",[37,70686,70687],{"class":39,"line":1826},[37,70688,70689],{"class":54},"  \n",[37,70691,70692,70695,70697],{"class":39,"line":1831},[37,70693,70694],{"class":51368},"  font-size",[37,70696,51505],{"class":54},[37,70698,70699],{"class":309},"20px;\n",[37,70701,70702,70705,70707],{"class":39,"line":1836},[37,70703,70704],{"class":51368},"  font-weight",[37,70706,51505],{"class":54},[37,70708,70709],{"class":309},"400;\n",[37,70711,70712],{"class":39,"line":1850},[37,70713,1637],{"class":54},[37,70715,70716],{"class":39,"line":1855},[37,70717,70718],{"class":309},"td,th {\n",[37,70720,70721,70724],{"class":39,"line":2649},[37,70722,70723],{"class":309},"  border:1px solid",[37,70725,70726],{"class":43}," #b8daff;\n",[37,70728,70729],{"class":39,"line":2663},[37,70730,1637],{"class":54},[37,70732,70733],{"class":39,"line":2671},[37,70734,70735],{"class":309},"td {\n",[37,70737,70738],{"class":39,"line":2676},[37,70739,70740],{"class":309},"  padding:10px;\n",[37,70742,70743],{"class":39,"line":2682},[37,70744,70745],{"class":309},"  color:#666;\n",[37,70747,70748,70750,70752],{"class":39,"line":2688},[37,70749,70594],{"class":51368},[37,70751,51505],{"class":54},[37,70753,70599],{"class":309},[37,70755,70756,70758,70760],{"class":39,"line":2693},[37,70757,70694],{"class":51368},[37,70759,51505],{"class":54},[37,70761,70762],{"class":309},"16px;\n",[37,70764,70765],{"class":39,"line":8020},[37,70766,1637],{"class":54},[37,70768,70769],{"class":39,"line":8044},[37,70770,70771],{"class":309},"tbody tr {\n",[37,70773,70774,70776,70778],{"class":39,"line":8049},[37,70775,70679],{"class":51368},[37,70777,51505],{"class":54},[37,70779,70780],{"class":43},"#fff;\n",[37,70782,70783],{"class":39,"line":8055},[37,70784,1637],{"class":54},[37,70786,70787],{"class":39,"line":8082},[37,70788,70789],{"class":309},"tbody tr:hover {\n",[37,70791,70792,70794,70796],{"class":39,"line":8087},[37,70793,70679],{"class":51368},[37,70795,51505],{"class":54},[37,70797,70798],{"class":43},"#e1ecf8;\n",[37,70800,70801],{"class":39,"line":8093},[37,70802,1637],{"class":54},[37,70804,70805],{"class":39,"line":8105},[37,70806,70807],{"class":309},".info {\n",[37,70809,70810,70812,70814],{"class":39,"line":8117},[37,70811,70636],{"class":51368},[37,70813,51505],{"class":54},[37,70815,70816],{"class":309},"900px;\n",[37,70818,70819,70821,70823],{"class":39,"line":8129},[37,70820,70538],{"class":51368},[37,70822,51505],{"class":54},[37,70824,70825],{"class":309},"50px auto;\n",[37,70827,70828,70830,70832],{"class":39,"line":9788},[37,70829,70594],{"class":51368},[37,70831,51505],{"class":54},[37,70833,70599],{"class":309},[37,70835,70836],{"class":39,"line":9813},[37,70837,1637],{"class":54},[37,70839,70840],{"class":39,"line":9836},[37,70841,70842],{"class":309},".info  input, .info select {\n",[37,70844,70845,70847,70849],{"class":39,"line":9860},[37,70846,70636],{"class":51368},[37,70848,51505],{"class":54},[37,70850,70851],{"class":309},"80px;\n",[37,70853,70854,70857,70859],{"class":39,"line":9865},[37,70855,70856],{"class":51368},"  height",[37,70858,51505],{"class":54},[37,70860,70861],{"class":309},"27px;\n",[37,70863,70864,70867,70869],{"class":39,"line":9870},[37,70865,70866],{"class":51368},"  outline",[37,70868,51505],{"class":54},[37,70870,70575],{"class":309},[37,70872,70873,70876,70878],{"class":39,"line":9875},[37,70874,70875],{"class":51368},"  border-radius",[37,70877,51505],{"class":54},[37,70879,70880],{"class":309},"5px;\n",[37,70882,70883,70885],{"class":39,"line":9884},[37,70884,70723],{"class":309},[37,70886,70726],{"class":43},[37,70888,70889,70892,70894],{"class":39,"line":9889},[37,70890,70891],{"class":51368},"  padding-left",[37,70893,51505],{"class":54},[37,70895,70880],{"class":309},[37,70897,70898,70901,70903],{"class":39,"line":9895},[37,70899,70900],{"class":51368},"  box-sizing",[37,70902,51505],{"class":54},[37,70904,70905],{"class":309},"border-box;\n",[37,70907,70908,70911,70913],{"class":39,"line":9916},[37,70909,70910],{"class":51368},"  margin-right",[37,70912,51505],{"class":54},[37,70914,70915],{"class":309},"15px;\n",[37,70917,70918],{"class":39,"line":9922},[37,70919,1637],{"class":54},[37,70921,70922],{"class":39,"line":9936},[37,70923,70924],{"class":309},".info button {\n",[37,70926,70927,70929,70931],{"class":39,"line":9942},[37,70928,70636],{"class":51368},[37,70930,51505],{"class":54},[37,70932,70933],{"class":309},"60px;\n",[37,70935,70936,70938,70940],{"class":39,"line":9969},[37,70937,70856],{"class":51368},[37,70939,51505],{"class":54},[37,70941,70861],{"class":309},[37,70943,70944,70947,70949],{"class":39,"line":9978},[37,70945,70946],{"class":51368},"  background-color",[37,70948,51505],{"class":54},[37,70950,70951],{"class":43},"#004085;\n",[37,70953,70954,70956,70958],{"class":39,"line":9984},[37,70955,70866],{"class":51368},[37,70957,51505],{"class":54},[37,70959,70575],{"class":309},[37,70961,70962,70965,70967],{"class":39,"line":9992},[37,70963,70964],{"class":51368},"  border",[37,70966,51505],{"class":54},[37,70968,70543],{"class":309},[37,70970,70971,70974,70976],{"class":39,"line":9997},[37,70972,70973],{"class":51368},"  color",[37,70975,51505],{"class":54},[37,70977,70780],{"class":43},[37,70979,70980,70983,70985],{"class":39,"line":16676},[37,70981,70982],{"class":51368},"  cursor",[37,70984,51505],{"class":54},[37,70986,70987],{"class":309},"pointer;\n",[37,70989,70990,70992,70994],{"class":39,"line":16682},[37,70991,70875],{"class":51368},[37,70993,51505],{"class":54},[37,70995,70880],{"class":309},[37,70997,70998],{"class":39,"line":16705},[37,70999,1637],{"class":54},[37,71001,71002],{"class":39,"line":16711},[37,71003,71004],{"class":309},".info .age {\n",[37,71006,71007,71009,71011],{"class":39,"line":16734},[37,71008,70636],{"class":51368},[37,71010,51505],{"class":54},[37,71012,71013],{"class":309},"50px;\n",[37,71015,71016],{"class":39,"line":16748},[37,71017,1637],{"class":54},[14,71019,71020],{},"思路：",[14,71022,71023],{},[119,71024],{"alt":32,"src":71025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,71027,71028],{},[119,71029],{"alt":32,"src":71030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,71032,71033],{},[119,71034],{"alt":32,"src":71035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[175,71037,71039],{"id":71038},"_3315-重绘回流","3.3.15 重绘回流",[14,71041,71042],{},[119,71043],{"alt":32,"src":71044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,71046,71047],{},[119,71048],{"alt":32,"src":71049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,71051,71052],{},[119,71053],{"alt":32,"src":71054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[146,71056,71058],{"id":71057},"_34-bom","3.4 BOM",[14,71060,71061],{},[119,71062],{"alt":32,"src":71063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,71065,71066],{},"平时写的document省略了window而已，实际上是window.document",[14,71068,71069],{},"函数也是这样，调用的时候实际为window.fn()",[14,71071,71072],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,71074,71075],{},"window大部分情况下可以省略",[175,71077,71079],{"id":71078},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,71081,71082],{},"只执行一次",[14,71084,71085],{},[119,71086],{"alt":32,"src":71087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71089,71090],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71092,71093],{},[119,71094],{"alt":32,"src":71095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[175,71097,71099],{"id":71098},"_342-js执行机制","3.4.2 JS执行机制",[14,71101,71102],{},[119,71103],{"alt":32,"src":71104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71106,71107],{},"两个的结果都是1111 3333 2222",[14,71109,71110],{},[119,71111],{"alt":32,"src":71112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71114,71115],{},[119,71116],{"alt":32,"src":71117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71119,71120],{},[119,71121],{"alt":32,"src":71122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71124,71125],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71127,71128],{},"工作流程：",[14,71130,71131],{},[119,71132],{"alt":32,"src":71133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71135,71136],{},[119,71137],{"alt":32,"src":71138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71140,71141],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71143,71144],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[175,71146,71148],{"id":71147},"_343-location对象","3.4.3 location对象",[14,71150,71151],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71153,71154],{},[119,71155],{"alt":32,"src":71156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71158,71159],{},"href可以跳转页面",[158,71161,71162],{},[161,71163,71164],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71166,71167],{},"search得到提交信息之后网站后边的地址",[14,71169,71170],{},[119,71171],{"alt":32,"src":71172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71174,71175],{},[119,71176],{"alt":32,"src":71177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[158,71179,71180],{"start":47},[161,71181,71182],{},"hash:这个获取单页面应用#后边的地址",[14,71184,71185],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71187,71188],{},[119,71189],{"alt":32,"src":71190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[27,71192,71194],{"className":53135,"code":71193,"language":53137,"meta":32,"style":32},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[34,71195,71196,71216,71236],{"__ignoreMap":32},[37,71197,71198,71200,71202,71204,71206,71209,71212,71214],{"class":39,"line":40},[37,71199,52212],{"class":54},[37,71201,443],{"class":51368},[37,71203,61125],{"class":2035},[37,71205,70],{"class":54},[37,71207,71208],{"class":309},"\"#\u002Fmy\"",[37,71210,71211],{"class":54},">我的\u003C\u002F",[37,71213,443],{"class":51368},[37,71215,51375],{"class":54},[37,71217,71218,71220,71222,71224,71226,71229,71232,71234],{"class":39,"line":47},[37,71219,52212],{"class":54},[37,71221,443],{"class":51368},[37,71223,61125],{"class":2035},[37,71225,70],{"class":54},[37,71227,71228],{"class":309},"\"#\u002Ffriend\"",[37,71230,71231],{"class":54},">关注\u003C\u002F",[37,71233,443],{"class":51368},[37,71235,51375],{"class":54},[37,71237,71238,71240,71242,71244,71246,71249,71252,71254],{"class":39,"line":58},[37,71239,52212],{"class":54},[37,71241,443],{"class":51368},[37,71243,61125],{"class":2035},[37,71245,70],{"class":54},[37,71247,71248],{"class":309},"\"#\u002Fdownload\"",[37,71250,71251],{"class":54},">下载\u003C\u002F",[37,71253,443],{"class":51368},[37,71255,51375],{"class":54},[14,71257,71258],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[158,71260,71261],{"start":58},[161,71262,71263,71264,71266,71267,71269],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53784,71265],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53784,71268],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[175,71271,71273],{"id":71272},"_345-navigator对象","3.4.5 navigator对象",[14,71275,71276],{},[119,71277],{"alt":32,"src":71278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[27,71280,71284],{"className":71281,"code":71282,"language":71283,"meta":32,"style":32},"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",[34,71285,71286,71291,71302,71314,71319,71370,71411,71416,71429,71441,71446],{"__ignoreMap":32},[37,71287,71288],{"class":39,"line":40},[37,71289,71290],{"class":43},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[37,71292,71293,71295,71297,71299],{"class":39,"line":47},[37,71294,431],{"class":50},[37,71296,208],{"class":54},[37,71298,54517],{"class":50},[37,71300,71301],{"class":54}," () { \n",[37,71303,71304,71306,71309,71311],{"class":39,"line":58},[37,71305,6864],{"class":50},[37,71307,71308],{"class":82}," userAgent",[37,71310,13636],{"class":50},[37,71312,71313],{"class":54}," navigator.userAgent \n",[37,71315,71316],{"class":39,"line":64},[37,71317,71318],{"class":43},"\u002F\u002F 验证是否为Android或iPhone \n",[37,71320,71321,71323,71326,71328,71331,71334,71336,71338,71341,71343,71346,71350,71352,71354,71356,71359,71361,71363,71365,71367],{"class":39,"line":76},[37,71322,6864],{"class":50},[37,71324,71325],{"class":82}," android",[37,71327,13636],{"class":50},[37,71329,71330],{"class":54}," userAgent.",[37,71332,71333],{"class":2035},"match",[37,71335,208],{"class":54},[37,71337,787],{"class":309},[37,71339,71340],{"class":48045},"(Android);",[37,71342,1189],{"class":50},[37,71344,71345],{"class":82},"[\\s",[37,71347,71349],{"class":71348},"snhLl","\\\u002F",[37,71351,1143],{"class":82},[37,71353,685],{"class":50},[37,71355,208],{"class":48045},[37,71357,71358],{"class":82},"[\\d.]",[37,71360,685],{"class":50},[37,71362,86],{"class":48045},[37,71364,1189],{"class":50},[37,71366,787],{"class":309},[37,71368,71369],{"class":54},") \n",[37,71371,71372,71374,71377,71379,71381,71383,71385,71387,71390,71393,71396,71398,71400,71403,71405,71407,71409],{"class":39,"line":92},[37,71373,6864],{"class":50},[37,71375,71376],{"class":82}," iphone",[37,71378,13636],{"class":50},[37,71380,71330],{"class":54},[37,71382,71333],{"class":2035},[37,71384,208],{"class":54},[37,71386,787],{"class":309},[37,71388,71389],{"class":48045},"(iPhone",[37,71391,71392],{"class":82},"\\s",[37,71394,71395],{"class":48045},"OS)",[37,71397,71392],{"class":82},[37,71399,208],{"class":48045},[37,71401,71402],{"class":82},"[\\d_]",[37,71404,685],{"class":50},[37,71406,86],{"class":48045},[37,71408,787],{"class":309},[37,71410,71369],{"class":54},[37,71412,71413],{"class":39,"line":97},[37,71414,71415],{"class":43},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[37,71417,71418,71420,71423,71426],{"class":39,"line":107},[37,71419,1603],{"class":50},[37,71421,71422],{"class":54}," (android ",[37,71424,71425],{"class":50},"||",[37,71427,71428],{"class":54}," iphone) { \n",[37,71430,71431,71434,71436,71439],{"class":39,"line":1390},[37,71432,71433],{"class":54},"location.href ",[37,71435,70],{"class":50},[37,71437,71438],{"class":309}," 'http:\u002F\u002Fm.itcast.cn'",[37,71440,2746],{"class":54},[37,71442,71443],{"class":39,"line":1402},[37,71444,71445],{"class":54},"} \n",[37,71447,71448],{"class":39,"line":1684},[37,71449,71450],{"class":54},"})()\n",[175,71452,71454],{"id":71453},"_346-histroy对象","3.4.6 histroy对象",[14,71456,71457],{},[119,71458],{"alt":32,"src":71459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,71461,71462],{},"浏览器地址的前进与后退!!!",[14,71464,71465],{},"history.back() 等效于 history.go(-1)",[14,71467,71468],{},"history.forward() 等效于 history.go(1)",[146,71470,71472],{"id":71471},"_35-本地存储","3.5 本地存储",[158,71474,71475,71478,71481],{},[161,71476,71477],{},"数据存储在用户浏览器中",[161,71479,71480],{},"设置、读取方便、甚至页面刷新不丢失数据",[161,71482,71483],{},"容量较大，sessionStorage和localStorage约 5M 左右",[175,71485,71487],{"id":71486},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,71489,71490],{},"只能存储字符串",[14,71492,71493],{},[119,71494],{"alt":32,"src":71495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,71497,71498],{},[119,71499],{"alt":32,"src":71500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,71502,71503],{},"键值对要加引号,不然就会当变量来看了",[14,71505,71506],{},"localStorage.setItem('uname', 'pink')",[14,71508,71509],{},"刷新之后信息不再丢失",[14,71511,71512],{},"操作key,value会跟着变",[14,71514,71515],{},"删除只删除键就可以,即名字",[14,71517,71506],{},[14,71519,71520],{},"改:",[14,71522,71523],{},"localStorage.setItem('uname','red')",[14,71525,71526],{},"有这个键就是改,没有这个键就是改",[14,71528,71529],{},[119,71530],{"alt":32,"src":71531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,71533,71534],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,71536,71537],{},[119,71538],{"alt":32,"src":71539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,71541,71542],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[175,71544,71546],{"id":71545},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,71548,71549],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,71551,71552],{},"特性:",[158,71554,71555,71558,71561,71564],{},[161,71556,71557],{},"生命周期为关闭浏览器窗口",[161,71559,71560],{},"在同一个窗口(页面)下数据可以共享",[161,71562,71563],{},"以键值对的形式存储使用",[161,71565,71566],{},"用法跟localStorage 基本相同",[175,71568,71570],{"id":71569},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,71572,71573],{},"本地只能存储字符串,无法直接存储复杂数据类型",[27,71575,71577],{"className":53135,"code":71576,"language":53137,"meta":32,"style":32},"\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",[34,71578,71579,71587,71592,71597,71602,71607,71611,71616,71621],{"__ignoreMap":32},[37,71580,71581,71583,71585],{"class":39,"line":40},[37,71582,1113],{"class":54},[37,71584,51881],{"class":51368},[37,71586,51375],{"class":54},[37,71588,71589],{"class":39,"line":47},[37,71590,71591],{"class":54},"    const obj = {\n",[37,71593,71594],{"class":39,"line":58},[37,71595,71596],{"class":54},"      uname: 'pink老师',\n",[37,71598,71599],{"class":39,"line":64},[37,71600,71601],{"class":54},"      age: 18,\n",[37,71603,71604],{"class":39,"line":76},[37,71605,71606],{"class":54},"      gender: '女'\n",[37,71608,71609],{"class":39,"line":92},[37,71610,2259],{"class":54},[37,71612,71613],{"class":39,"line":97},[37,71614,71615],{"class":54},"    \u002F\u002F 存储复杂数据类型\n",[37,71617,71618],{"class":39,"line":107},[37,71619,71620],{"class":54},"    localStorage.setItem('obj', obj)\n",[37,71622,71623,71625,71627],{"class":39,"line":1390},[37,71624,52485],{"class":54},[37,71626,51881],{"class":51368},[37,71628,51375],{"class":54},[14,71630,71631],{},[119,71632],{"alt":32,"src":71633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,71635,71636],{},"如果获取一下数据:",[14,71638,71639],{},"log(localStorage.getItem('obj'))",[14,71641,71642],{},[119,71643],{"alt":32,"src":71644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,71646,71647],{},"发现直接存对象是使用不了的!!!",[22070,71649,71651],{"id":71650},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,71653,71654],{},[119,71655],{"alt":32,"src":71656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[27,71658,71660],{"className":50701,"code":71659,"language":50703,"meta":32,"style":32},"\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",[34,71661,71662,71670,71680,71690,71699,71707,71711,71715,71741,71760,71768,71772,71777,71782],{"__ignoreMap":32},[37,71663,71664,71666,71668],{"class":39,"line":40},[37,71665,1113],{"class":54},[37,71667,51881],{"class":51368},[37,71669,51375],{"class":54},[37,71671,71672,71674,71676,71678],{"class":39,"line":47},[37,71673,11293],{"class":50},[37,71675,70039],{"class":82},[37,71677,13636],{"class":50},[37,71679,15644],{"class":54},[37,71681,71682,71685,71688],{"class":39,"line":58},[37,71683,71684],{"class":54},"      uname: ",[37,71686,71687],{"class":309},"'pink老师'",[37,71689,31536],{"class":54},[37,71691,71692,71695,71697],{"class":39,"line":64},[37,71693,71694],{"class":54},"      age: ",[37,71696,853],{"class":82},[37,71698,31536],{"class":54},[37,71700,71701,71704],{"class":39,"line":76},[37,71702,71703],{"class":54},"      gender: ",[37,71705,71706],{"class":309},"'女'\n",[37,71708,71709],{"class":39,"line":92},[37,71710,2259],{"class":54},[37,71712,71713],{"class":39,"line":97},[37,71714,71615],{"class":43},[37,71716,71717,71720,71723,71725,71728,71730,71733,71735,71738],{"class":39,"line":107},[37,71718,71719],{"class":54},"  localStorage.",[37,71721,71722],{"class":2035},"setItem",[37,71724,208],{"class":54},[37,71726,71727],{"class":309},"'obj'",[37,71729,12507],{"class":54},[37,71731,71732],{"class":82},"JSON",[37,71734,761],{"class":54},[37,71736,71737],{"class":2035},"stringify",[37,71739,71740],{"class":54},"(obj))\n",[37,71742,71743,71746,71748,71751,71754,71756,71758],{"class":39,"line":1390},[37,71744,71745],{"class":54},"  console.",[37,71747,58315],{"class":2035},[37,71749,71750],{"class":54},"(localStorage.",[37,71752,71753],{"class":2035},"getItem",[37,71755,208],{"class":54},[37,71757,71727],{"class":309},[37,71759,30567],{"class":54},[37,71761,71762,71764,71766],{"class":39,"line":1402},[37,71763,52485],{"class":54},[37,71765,51881],{"class":51368},[37,71767,51375],{"class":54},[37,71769,71770],{"class":39,"line":1684},[37,71771,70689],{"class":54},[37,71773,71774],{"class":39,"line":1689},[37,71775,71776],{"class":54},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[37,71778,71779],{"class":39,"line":1695},[37,71780,71781],{"class":54},"  类型是字符串的\n",[37,71783,71784],{"class":39,"line":1700},[37,71785,71786],{"class":54},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22070,71788,71790],{"id":71789},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,71792,71793],{},[119,71794],{"alt":32,"src":71795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,71797,71798],{},[119,71799],{"alt":32,"src":71800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[27,71802,71804],{"className":53135,"code":71803,"language":53137,"meta":32,"style":32},"  \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",[34,71805,71806,71814,71818,71822,71826,71830,71834,71839,71844,71849,71854,71859,71864,71869,71874],{"__ignoreMap":32},[37,71807,71808,71810,71812],{"class":39,"line":40},[37,71809,52212],{"class":54},[37,71811,51881],{"class":51368},[37,71813,51375],{"class":54},[37,71815,71816],{"class":39,"line":47},[37,71817,71591],{"class":54},[37,71819,71820],{"class":39,"line":58},[37,71821,71596],{"class":54},[37,71823,71824],{"class":39,"line":64},[37,71825,71601],{"class":54},[37,71827,71828],{"class":39,"line":76},[37,71829,71606],{"class":54},[37,71831,71832],{"class":39,"line":92},[37,71833,2259],{"class":54},[37,71835,71836],{"class":39,"line":97},[37,71837,71838],{"class":54},"    \u002F\u002F 1.存储复杂数据类型\n",[37,71840,71841],{"class":39,"line":107},[37,71842,71843],{"class":54},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[37,71845,71846],{"class":39,"line":1390},[37,71847,71848],{"class":54},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[37,71850,71851],{"class":39,"line":1402},[37,71852,71853],{"class":54},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[37,71855,71856],{"class":39,"line":1684},[37,71857,71858],{"class":54},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[37,71860,71861],{"class":39,"line":1689},[37,71862,71863],{"class":54},"    \u002F\u002F 取\n",[37,71865,71866],{"class":39,"line":1695},[37,71867,71868],{"class":54},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[37,71870,71871],{"class":39,"line":1700},[37,71872,71873],{"class":54},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[37,71875,71876,71878,71880],{"class":39,"line":1714},[37,71877,52485],{"class":54},[37,71879,51881],{"class":51368},[37,71881,51375],{"class":54},[14,71883,71884],{},[119,71885],{"alt":32,"src":71886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[175,71888,71890],{"id":71889},"_356-数组map方法","3.5.6 数组map方法",[14,71892,71893],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,71895,71896],{},[119,71897],{"alt":32,"src":71898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,71900,71901],{},[119,71902],{"alt":32,"src":71903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,71905,71906,71909],{},[354,71907,71908],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,71911,71912],{},"map有返回值，但是forEach没有返回值",[14,71914,71915],{},"map是个方法。用的时候要加 ()",[14,71917,71918],{},"map返回的是一个数组",[175,71920,71922],{"id":71921},"_357-数组中join方法","3.5.7 数组中join方法",[14,71924,71925],{},[119,71926],{"alt":32,"src":71927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,71929,71930],{},"类似于python中拼接字符串一样！",[158,71932,71933,71936,71939],{},[161,71934,71935],{},"小括号为空则逗号分开",[161,71937,71938],{},"小括号为空字符串 ''，则元素之间没有分隔符",[161,71940,71941],{},"小括号用啥符号就用进行分割",[175,71943,71945],{"id":71944},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[158,71947,71948,71951,71954,71957,71960],{},[161,71949,71950],{},"记住本地时间获取快速方式：new Date().toDateString()",[161,71952,71953],{},"尽量减少DOM操作，用好map+join的渲染方式",[161,71955,71956],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[161,71958,71959],{},"return可以实现函数的结束",[161,71961,71962],{},"禁止跳转是 preventDefault() 不要忘记",[27,71964,71966],{"className":50701,"code":71965,"language":50703,"meta":32,"style":32},"\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",[34,71967,71968,71978,71992,71996,72004,72018,72038,72050,72058,72064,72074,72084,72088,72092,72098,72108,72120,72124,72128,72135,72147,72161,72171,72175,72179,72186,72193,72200,72212,72224,72234,72246,72250,72254,72261,72268,72280,72292,72302,72314,72344,72348,72352,72359,72371,72383,72407,72417,72427,72431,72435,72443,72454,72466,72478,72490,72507,72519,72531,72535,72539,72546,72558,72570,72582,72593,72611,72624,72636,72660,72671,72675,72679,72687,72697,72701,72705,72711,72723,72734,72744,72748,72752,72758,72780,72784,72788,72794,72800,72812,72822,72834,72864,72877,72894,72898,72902,72913,72935,72945,72949,72953,72966,72976,72988,73000,73012,73024,73034,73044,73054,73065,73078,73082,73090,73098,73102,73110,73123,73143,73176,73209,73242,73268,73286,73304,73312,73338,73356,73374,73392,73410,73428,73436,73444,73462,73470,73499,73507,73515,73523,73536,73548,73560,73572,73584,73596,73609,73621,73629,73637,73645,73650,73655,73659,73663,73667,73671,73675,73679,73684,73689,73694,73699,73707,73715,73723,73728,73733,73738,73743,73748,73753,73758,73763,73768,73773,73778,73783,73788,73793,73797,73802,73807,73817,73826,73830,73835,73844,73860,73902,73942,73981,74046,74054,74058,74063,74081,74089,74094,74099,74129,74135,74140,74153,74165,74177,74189,74201,74213,74225,74229,74239,74243,74248,74253,74257,74266,74270,74275,74280,74299,74304,74324,74328,74333,74337,74342,74360,74378,74396,74415,74434,74453,74458,74464,74485,74491,74500,74506,74512,74518,74545,74558,74563,74573,74579,74585,74591,74597,74602,74608,74614,74620,74626,74659,74664,74669,74674,74679,74685,74691,74697,74708,74713,74719,74726,74740,74746,74770,74775,74780,74786,74792,74813,74819,74832,74838,74844,74850,74856,74861,74867,74873,74879,74897,74911,74917,74925,74931,74953,74958,74963,74968,74973,74978,74987,74996,75001],{"__ignoreMap":32},[37,71969,71970,71972,71974,71976],{"class":39,"line":40},[37,71971,51365],{"class":54},[37,71973,51369],{"class":51368},[37,71975,51372],{"class":2035},[37,71977,51375],{"class":54},[37,71979,71980,71982,71984,71986,71988,71990],{"class":39,"line":47},[37,71981,1113],{"class":54},[37,71983,50703],{"class":51368},[37,71985,51384],{"class":2035},[37,71987,70],{"class":54},[37,71989,51389],{"class":309},[37,71991,51375],{"class":54},[37,71993,71994],{"class":39,"line":58},[37,71995,2472],{"emptyLinePlaceholder":131},[37,71997,71998,72000,72002],{"class":39,"line":64},[37,71999,1113],{"class":54},[37,72001,51402],{"class":51368},[37,72003,51375],{"class":54},[37,72005,72006,72008,72010,72012,72014,72016],{"class":39,"line":76},[37,72007,52212],{"class":54},[37,72009,51412],{"class":51368},[37,72011,51415],{"class":2035},[37,72013,70],{"class":54},[37,72015,51420],{"class":309},[37,72017,51375],{"class":54},[37,72019,72020,72022,72024,72026,72028,72030,72032,72034,72036],{"class":39,"line":92},[37,72021,52212],{"class":54},[37,72023,51412],{"class":51368},[37,72025,14992],{"class":2035},[37,72027,70],{"class":54},[37,72029,51459],{"class":309},[37,72031,51439],{"class":2035},[37,72033,70],{"class":54},[37,72035,51466],{"class":309},[37,72037,51375],{"class":54},[37,72039,72040,72042,72044,72046,72048],{"class":39,"line":97},[37,72041,52212],{"class":54},[37,72043,51475],{"class":51368},[37,72045,51478],{"class":54},[37,72047,51475],{"class":51368},[37,72049,51375],{"class":54},[37,72051,72052,72054,72056],{"class":39,"line":107},[37,72053,52212],{"class":54},[37,72055,123],{"class":51368},[37,72057,51375],{"class":54},[37,72059,72060,72062],{"class":39,"line":1390},[37,72061,6475],{"class":51368},[37,72063,15644],{"class":54},[37,72065,72066,72068,72070,72072],{"class":39,"line":1402},[37,72067,54763],{"class":82},[37,72069,51505],{"class":54},[37,72071,396],{"class":82},[37,72073,1364],{"class":54},[37,72075,72076,72078,72080,72082],{"class":39,"line":1684},[37,72077,54774],{"class":82},[37,72079,51505],{"class":54},[37,72081,396],{"class":82},[37,72083,1364],{"class":54},[37,72085,72086],{"class":39,"line":1689},[37,72087,2259],{"class":54},[37,72089,72090],{"class":39,"line":1695},[37,72091,2472],{"emptyLinePlaceholder":131},[37,72093,72094,72096],{"class":39,"line":1700},[37,72095,57347],{"class":51368},[37,72097,15644],{"class":54},[37,72099,72100,72102,72104,72106],{"class":39,"line":1714},[37,72101,57354],{"class":82},[37,72103,51505],{"class":54},[37,72105,51660],{"class":82},[37,72107,1364],{"class":54},[37,72109,72110,72112,72114,72116,72118],{"class":39,"line":1719},[37,72111,62145],{"class":82},[37,72113,51505],{"class":54},[37,72115,903],{"class":82},[37,72117,51560],{"class":50},[37,72119,1364],{"class":54},[37,72121,72122],{"class":39,"line":1725},[37,72123,2259],{"class":54},[37,72125,72126],{"class":39,"line":1746},[37,72127,2472],{"emptyLinePlaceholder":131},[37,72129,72130,72133],{"class":39,"line":1751},[37,72131,72132],{"class":2035},"    .info",[37,72134,15644],{"class":54},[37,72136,72137,72139,72141,72143,72145],{"class":39,"line":1765},[37,72138,54839],{"class":82},[37,72140,51505],{"class":54},[37,72142,51557],{"class":82},[37,72144,51560],{"class":50},[37,72146,1364],{"class":54},[37,72148,72149,72151,72153,72155,72157,72159],{"class":39,"line":1770},[37,72150,54774],{"class":82},[37,72152,51505],{"class":54},[37,72154,650],{"class":82},[37,72156,51560],{"class":50},[37,72158,51624],{"class":82},[37,72160,1364],{"class":54},[37,72162,72163,72165,72167,72169],{"class":39,"line":1799},[37,72164,57354],{"class":82},[37,72166,51505],{"class":54},[37,72168,51660],{"class":82},[37,72170,1364],{"class":54},[37,72172,72173],{"class":39,"line":1804},[37,72174,2259],{"class":54},[37,72176,72177],{"class":39,"line":1821},[37,72178,2472],{"emptyLinePlaceholder":131},[37,72180,72181,72184],{"class":39,"line":1826},[37,72182,72183],{"class":2035},"    .uname",[37,72185,31536],{"class":54},[37,72187,72188,72191],{"class":39,"line":1831},[37,72189,72190],{"class":2035},"    .age",[37,72192,31536],{"class":54},[37,72194,72195,72198],{"class":39,"line":1836},[37,72196,72197],{"class":2035},"    .salary",[37,72199,15644],{"class":54},[37,72201,72202,72204,72206,72208,72210],{"class":39,"line":1850},[37,72203,54839],{"class":82},[37,72205,51505],{"class":54},[37,72207,516],{"class":82},[37,72209,51560],{"class":50},[37,72211,1364],{"class":54},[37,72213,72214,72216,72218,72220,72222],{"class":39,"line":1855},[37,72215,54853],{"class":82},[37,72217,51505],{"class":54},[37,72219,903],{"class":82},[37,72221,51560],{"class":50},[37,72223,1364],{"class":54},[37,72225,72226,72228,72230,72232],{"class":39,"line":2649},[37,72227,61848],{"class":82},[37,72229,51505],{"class":54},[37,72231,54805],{"class":82},[37,72233,1364],{"class":54},[37,72235,72236,72238,72240,72242,72244],{"class":39,"line":2663},[37,72237,61818],{"class":82},[37,72239,51505],{"class":54},[37,72241,778],{"class":82},[37,72243,51560],{"class":50},[37,72245,1364],{"class":54},[37,72247,72248],{"class":39,"line":2671},[37,72249,2259],{"class":54},[37,72251,72252],{"class":39,"line":2676},[37,72253,2472],{"emptyLinePlaceholder":131},[37,72255,72256,72259],{"class":39,"line":2682},[37,72257,72258],{"class":2035},"    .gender",[37,72260,31536],{"class":54},[37,72262,72263,72266],{"class":39,"line":2688},[37,72264,72265],{"class":2035},"    .city",[37,72267,15644],{"class":54},[37,72269,72270,72272,72274,72276,72278],{"class":39,"line":2693},[37,72271,54839],{"class":82},[37,72273,51505],{"class":54},[37,72275,516],{"class":82},[37,72277,51560],{"class":50},[37,72279,1364],{"class":54},[37,72281,72282,72284,72286,72288,72290],{"class":39,"line":8020},[37,72283,54853],{"class":82},[37,72285,51505],{"class":54},[37,72287,1028],{"class":82},[37,72289,51560],{"class":50},[37,72291,1364],{"class":54},[37,72293,72294,72296,72298,72300],{"class":39,"line":8044},[37,72295,61848],{"class":82},[37,72297,51505],{"class":54},[37,72299,54805],{"class":82},[37,72301,1364],{"class":54},[37,72303,72304,72306,72308,72310,72312],{"class":39,"line":8049},[37,72305,61818],{"class":82},[37,72307,51505],{"class":54},[37,72309,778],{"class":82},[37,72311,51560],{"class":50},[37,72313,1364],{"class":54},[37,72315,72316,72318,72320,72322,72324,72326,72329,72331,72333,72335,72338,72340,72342],{"class":39,"line":8055},[37,72317,62045],{"class":82},[37,72319,51505],{"class":54},[37,72321,422],{"class":82},[37,72323,51560],{"class":50},[37,72325,51589],{"class":82},[37,72327,72328],{"class":82}," rgb",[37,72330,208],{"class":54},[37,72332,1794],{"class":82},[37,72334,12507],{"class":54},[37,72336,72337],{"class":82},"197",[37,72339,12507],{"class":54},[37,72341,72337],{"class":82},[37,72343,2791],{"class":54},[37,72345,72346],{"class":39,"line":8082},[37,72347,2259],{"class":54},[37,72349,72350],{"class":39,"line":8087},[37,72351,2472],{"emptyLinePlaceholder":131},[37,72353,72354,72357],{"class":39,"line":8093},[37,72355,72356],{"class":51368},"    button",[37,72358,15644],{"class":54},[37,72360,72361,72363,72365,72367,72369],{"class":39,"line":8105},[37,72362,54853],{"class":82},[37,72364,51505],{"class":54},[37,72366,1028],{"class":82},[37,72368,51560],{"class":50},[37,72370,1364],{"class":54},[37,72372,72373,72375,72377,72379,72381],{"class":39,"line":8117},[37,72374,54839],{"class":82},[37,72376,51505],{"class":54},[37,72378,688],{"class":82},[37,72380,51560],{"class":50},[37,72382,1364],{"class":54},[37,72384,72385,72387,72389,72392,72394,72396,72398,72401,72403,72405],{"class":39,"line":8129},[37,72386,54952],{"class":82},[37,72388,51505],{"class":54},[37,72390,72391],{"class":82},"rgb",[37,72393,208],{"class":54},[37,72395,1172],{"class":82},[37,72397,12507],{"class":54},[37,72399,72400],{"class":82},"187",[37,72402,12507],{"class":54},[37,72404,504],{"class":82},[37,72406,2791],{"class":54},[37,72408,72409,72411,72413,72415],{"class":39,"line":9788},[37,72410,57484],{"class":82},[37,72412,51505],{"class":54},[37,72414,60910],{"class":82},[37,72416,1364],{"class":54},[37,72418,72419,72421,72423,72425],{"class":39,"line":9813},[37,72420,62045],{"class":82},[37,72422,51505],{"class":54},[37,72424,396],{"class":82},[37,72426,1364],{"class":54},[37,72428,72429],{"class":39,"line":9836},[37,72430,2259],{"class":54},[37,72432,72433],{"class":39,"line":9860},[37,72434,2472],{"emptyLinePlaceholder":131},[37,72436,72437,72439,72441],{"class":39,"line":9865},[37,72438,72356],{"class":51368},[37,72440,51756],{"class":51368},[37,72442,15644],{"class":54},[37,72444,72445,72447,72449,72452],{"class":39,"line":9870},[37,72446,55077],{"class":82},[37,72448,51505],{"class":54},[37,72450,72451],{"class":82},"inline-block",[37,72453,1364],{"class":54},[37,72455,72456,72458,72460,72462,72464],{"class":39,"line":9875},[37,72457,54839],{"class":82},[37,72459,51505],{"class":54},[37,72461,650],{"class":82},[37,72463,51560],{"class":50},[37,72465,1364],{"class":54},[37,72467,72468,72470,72472,72474,72476],{"class":39,"line":9884},[37,72469,54853],{"class":82},[37,72471,51505],{"class":54},[37,72473,650],{"class":82},[37,72475,51560],{"class":50},[37,72477,1364],{"class":54},[37,72479,72480,72482,72484,72486,72488],{"class":39,"line":9889},[37,72481,57427],{"class":82},[37,72483,51505],{"class":54},[37,72485,676],{"class":82},[37,72487,51560],{"class":50},[37,72489,1364],{"class":54},[37,72491,72492,72494,72496,72498,72500,72502,72505],{"class":39,"line":9895},[37,72493,62045],{"class":82},[37,72495,51505],{"class":54},[37,72497,422],{"class":82},[37,72499,51560],{"class":50},[37,72501,51589],{"class":82},[37,72503,72504],{"class":82}," #fff",[37,72506,1364],{"class":54},[37,72508,72509,72511,72513,72515,72517],{"class":39,"line":9916},[37,72510,55202],{"class":82},[37,72512,51505],{"class":54},[37,72514,524],{"class":82},[37,72516,51560],{"class":50},[37,72518,1364],{"class":54},[37,72520,72521,72523,72525,72527,72529],{"class":39,"line":9922},[37,72522,61818],{"class":82},[37,72524,51505],{"class":54},[37,72526,422],{"class":82},[37,72528,51560],{"class":50},[37,72530,1364],{"class":54},[37,72532,72533],{"class":39,"line":9936},[37,72534,2259],{"class":54},[37,72536,72537],{"class":39,"line":9942},[37,72538,2472],{"emptyLinePlaceholder":131},[37,72540,72541,72544],{"class":39,"line":9969},[37,72542,72543],{"class":2035},"    .total",[37,72545,15644],{"class":54},[37,72547,72548,72550,72552,72554,72556],{"class":39,"line":9978},[37,72549,54839],{"class":82},[37,72551,51505],{"class":54},[37,72553,61697],{"class":82},[37,72555,51560],{"class":50},[37,72557,1364],{"class":54},[37,72559,72560,72562,72564,72566,72568],{"class":39,"line":9984},[37,72561,54853],{"class":82},[37,72563,51505],{"class":54},[37,72565,606],{"class":82},[37,72567,51560],{"class":50},[37,72569,1364],{"class":54},[37,72571,72572,72574,72576,72578,72580],{"class":39,"line":9992},[37,72573,57427],{"class":82},[37,72575,51505],{"class":54},[37,72577,606],{"class":82},[37,72579,51560],{"class":50},[37,72581,1364],{"class":54},[37,72583,72584,72586,72588,72591],{"class":39,"line":9997},[37,72585,57354],{"class":82},[37,72587,51505],{"class":54},[37,72589,72590],{"class":82},"right",[37,72592,1364],{"class":54},[37,72594,72595,72597,72599,72601,72603,72605,72607,72609],{"class":39,"line":16676},[37,72596,54774],{"class":82},[37,72598,51505],{"class":54},[37,72600,606],{"class":82},[37,72602,51560],{"class":50},[37,72604,51624],{"class":82},[37,72606,2110],{"class":82},[37,72608,51560],{"class":50},[37,72610,1364],{"class":54},[37,72612,72613,72616,72618,72620,72622],{"class":39,"line":16682},[37,72614,72615],{"class":82},"      padding-right",[37,72617,51505],{"class":54},[37,72619,650],{"class":82},[37,72621,51560],{"class":50},[37,72623,1364],{"class":54},[37,72625,72626,72628,72630,72632,72634],{"class":39,"line":16705},[37,72627,54990],{"class":82},[37,72629,51505],{"class":54},[37,72631,727],{"class":82},[37,72633,51560],{"class":50},[37,72635,1364],{"class":54},[37,72637,72638,72640,72642,72644,72646,72649,72651,72654,72656,72658],{"class":39,"line":16711},[37,72639,54952],{"class":82},[37,72641,51505],{"class":54},[37,72643,72391],{"class":82},[37,72645,208],{"class":54},[37,72647,72648],{"class":82},"237",[37,72650,12507],{"class":54},[37,72652,72653],{"class":82},"235",[37,72655,12507],{"class":54},[37,72657,72653],{"class":82},[37,72659,2791],{"class":54},[37,72661,72662,72665,72667,72669],{"class":39,"line":16734},[37,72663,72664],{"class":82},"      box-sizing",[37,72666,51505],{"class":54},[37,72668,60573],{"class":82},[37,72670,1364],{"class":54},[37,72672,72673],{"class":39,"line":16748},[37,72674,2259],{"class":54},[37,72676,72677],{"class":39,"line":16768},[37,72678,2472],{"emptyLinePlaceholder":131},[37,72680,72681,72683,72685],{"class":39,"line":16774},[37,72682,72543],{"class":2035},[37,72684,51756],{"class":51368},[37,72686,15644],{"class":54},[37,72688,72689,72691,72693,72695],{"class":39,"line":16785},[37,72690,57484],{"class":82},[37,72692,51505],{"class":54},[37,72694,57489],{"class":82},[37,72696,1364],{"class":54},[37,72698,72699],{"class":39,"line":16808},[37,72700,2259],{"class":54},[37,72702,72703],{"class":39,"line":16830},[37,72704,2472],{"emptyLinePlaceholder":131},[37,72706,72707,72709],{"class":39,"line":16835},[37,72708,65091],{"class":51368},[37,72710,15644],{"class":54},[37,72712,72713,72715,72717,72719,72721],{"class":39,"line":16841},[37,72714,54839],{"class":82},[37,72716,51505],{"class":54},[37,72718,61697],{"class":82},[37,72720,51560],{"class":50},[37,72722,1364],{"class":54},[37,72724,72725,72727,72729,72732],{"class":39,"line":16855},[37,72726,54774],{"class":82},[37,72728,51505],{"class":54},[37,72730,72731],{"class":82},"auto",[37,72733,1364],{"class":54},[37,72735,72736,72738,72740,72742],{"class":39,"line":16868},[37,72737,65098],{"class":82},[37,72739,51505],{"class":54},[37,72741,65103],{"class":82},[37,72743,1364],{"class":54},[37,72745,72746],{"class":39,"line":16873},[37,72747,2259],{"class":54},[37,72749,72750],{"class":39,"line":16887},[37,72751,2472],{"emptyLinePlaceholder":131},[37,72753,72754,72756],{"class":39,"line":16892},[37,72755,65183],{"class":51368},[37,72757,15644],{"class":54},[37,72759,72760,72762,72764,72766,72768,72770,72772,72774,72776,72778],{"class":39,"line":16898},[37,72761,54952],{"class":82},[37,72763,51505],{"class":54},[37,72765,72391],{"class":82},[37,72767,208],{"class":54},[37,72769,72648],{"class":82},[37,72771,12507],{"class":54},[37,72773,72653],{"class":82},[37,72775,12507],{"class":54},[37,72777,72653],{"class":82},[37,72779,2791],{"class":54},[37,72781,72782],{"class":39,"line":16903},[37,72783,2259],{"class":54},[37,72785,72786],{"class":39,"line":16917},[37,72787,2472],{"emptyLinePlaceholder":131},[37,72789,72790,72792],{"class":39,"line":16922},[37,72791,65183],{"class":51368},[37,72793,31536],{"class":54},[37,72795,72796,72798],{"class":39,"line":16927},[37,72797,65249],{"class":51368},[37,72799,15644],{"class":54},[37,72801,72802,72804,72806,72808,72810],{"class":39,"line":16941},[37,72803,54853],{"class":82},[37,72805,51505],{"class":54},[37,72807,478],{"class":82},[37,72809,51560],{"class":50},[37,72811,1364],{"class":54},[37,72813,72814,72816,72818,72820],{"class":39,"line":16953},[37,72815,57354],{"class":82},[37,72817,51505],{"class":54},[37,72819,23808],{"class":82},[37,72821,1364],{"class":54},[37,72823,72824,72826,72828,72830,72832],{"class":39,"line":16958},[37,72825,54990],{"class":82},[37,72827,51505],{"class":54},[37,72829,752],{"class":82},[37,72831,51560],{"class":50},[37,72833,1364],{"class":54},[37,72835,72836,72838,72840,72842,72844,72846,72848,72850,72853,72855,72858,72860,72862],{"class":39,"line":16971},[37,72837,62045],{"class":82},[37,72839,51505],{"class":54},[37,72841,422],{"class":82},[37,72843,51560],{"class":50},[37,72845,51589],{"class":82},[37,72847,72328],{"class":82},[37,72849,208],{"class":54},[37,72851,72852],{"class":82},"228",[37,72854,12507],{"class":54},[37,72856,72857],{"class":82},"225",[37,72859,12507],{"class":54},[37,72861,72857],{"class":82},[37,72863,2791],{"class":54},[37,72865,72866,72869,72871,72873,72875],{"class":39,"line":16976},[37,72867,72868],{"class":82},"      padding-left",[37,72870,51505],{"class":54},[37,72872,524],{"class":82},[37,72874,51560],{"class":50},[37,72876,1364],{"class":54},[37,72878,72879,72881,72883,72885,72888,72890,72892],{"class":39,"line":16981},[37,72880,61928],{"class":82},[37,72882,51505],{"class":54},[37,72884,28194],{"class":82},[37,72886,72887],{"class":82}," linear",[37,72889,61935],{"class":82},[37,72891,898],{"class":50},[37,72893,1364],{"class":54},[37,72895,72896],{"class":39,"line":16986},[37,72897,2259],{"class":54},[37,72899,72900],{"class":39,"line":16999},[37,72901,2472],{"emptyLinePlaceholder":131},[37,72903,72904,72907,72909,72911],{"class":39,"line":17004},[37,72905,72906],{"class":51368},"    tbody",[37,72908,70212],{"class":51368},[37,72910,61008],{"class":2035},[37,72912,15644],{"class":54},[37,72914,72915,72917,72919,72921,72923,72925,72927,72929,72931,72933],{"class":39,"line":32702},[37,72916,54952],{"class":82},[37,72918,51505],{"class":54},[37,72920,72391],{"class":82},[37,72922,208],{"class":54},[37,72924,72648],{"class":82},[37,72926,12507],{"class":54},[37,72928,72653],{"class":82},[37,72930,12507],{"class":54},[37,72932,72653],{"class":82},[37,72934,2791],{"class":54},[37,72936,72937,72939,72941,72943],{"class":39,"line":32708},[37,72938,62093],{"class":82},[37,72940,51505],{"class":54},[37,72942,62098],{"class":82},[37,72944,1364],{"class":54},[37,72946,72947],{"class":39,"line":32714},[37,72948,2259],{"class":54},[37,72950,72951],{"class":39,"line":32720},[37,72952,2472],{"emptyLinePlaceholder":131},[37,72954,72955,72957,72959,72962,72964],{"class":39,"line":32726},[37,72956,72906],{"class":51368},[37,72958,70212],{"class":51368},[37,72960,72961],{"class":51368}," td",[37,72963,1471],{"class":51368},[37,72965,15644],{"class":54},[37,72967,72968,72970,72972,72974],{"class":39,"line":32737},[37,72969,55077],{"class":82},[37,72971,51505],{"class":54},[37,72973,60937],{"class":82},[37,72975,1364],{"class":54},[37,72977,72978,72980,72982,72984,72986],{"class":39,"line":32743},[37,72979,54839],{"class":82},[37,72981,51505],{"class":54},[37,72983,1110],{"class":82},[37,72985,51560],{"class":50},[37,72987,1364],{"class":54},[37,72989,72990,72992,72994,72996,72998],{"class":39,"line":32763},[37,72991,54853],{"class":82},[37,72993,51505],{"class":54},[37,72995,1028],{"class":82},[37,72997,51560],{"class":50},[37,72999,1364],{"class":54},[37,73001,73002,73004,73006,73008,73010],{"class":39,"line":32769},[37,73003,57427],{"class":82},[37,73005,51505],{"class":54},[37,73007,1028],{"class":82},[37,73009,51560],{"class":50},[37,73011,1364],{"class":54},[37,73013,73014,73016,73018,73020,73022],{"class":39,"line":32780},[37,73015,62145],{"class":82},[37,73017,51505],{"class":54},[37,73019,282],{"class":82},[37,73021,51560],{"class":50},[37,73023,1364],{"class":54},[37,73025,73026,73028,73030,73032],{"class":39,"line":32786},[37,73027,57484],{"class":82},[37,73029,51505],{"class":54},[37,73031,60910],{"class":82},[37,73033,1364],{"class":54},[37,73035,73036,73038,73040,73042],{"class":39,"line":32792},[37,73037,57354],{"class":82},[37,73039,51505],{"class":54},[37,73041,51660],{"class":82},[37,73043,1364],{"class":54},[37,73045,73046,73048,73050,73052],{"class":39,"line":32798},[37,73047,64038],{"class":82},[37,73049,51505],{"class":54},[37,73051,54805],{"class":82},[37,73053,1364],{"class":54},[37,73055,73056,73058,73060,73063],{"class":39,"line":32804},[37,73057,54952],{"class":82},[37,73059,51505],{"class":54},[37,73061,73062],{"class":82},"orange",[37,73064,1364],{"class":54},[37,73066,73067,73069,73071,73074,73076],{"class":39,"line":32810},[37,73068,55202],{"class":82},[37,73070,51505],{"class":54},[37,73072,73073],{"class":82},"12.5",[37,73075,51560],{"class":50},[37,73077,1364],{"class":54},[37,73079,73080],{"class":39,"line":32816},[37,73081,2259],{"class":54},[37,73083,73084,73086,73088],{"class":39,"line":32822},[37,73085,52485],{"class":54},[37,73087,123],{"class":51368},[37,73089,51375],{"class":54},[37,73091,73092,73094,73096],{"class":39,"line":32842},[37,73093,51853],{"class":54},[37,73095,51402],{"class":51368},[37,73097,51375],{"class":54},[37,73099,73100],{"class":39,"line":32848},[37,73101,2472],{"emptyLinePlaceholder":131},[37,73103,73104,73106,73108],{"class":39,"line":32864},[37,73105,1113],{"class":54},[37,73107,51868],{"class":51368},[37,73109,51375],{"class":54},[37,73111,73112,73114,73116,73119,73121],{"class":39,"line":32870},[37,73113,52212],{"class":54},[37,73115,146],{"class":51368},[37,73117,73118],{"class":54},">学生就业统计表\u003C\u002F",[37,73120,146],{"class":51368},[37,73122,51375],{"class":54},[37,73124,73125,73127,73129,73131,73133,73135,73137,73139,73141],{"class":39,"line":32884},[37,73126,52212],{"class":54},[37,73128,66693],{"class":51368},[37,73130,53554],{"class":2035},[37,73132,70],{"class":54},[37,73134,62732],{"class":309},[37,73136,69138],{"class":2035},[37,73138,70],{"class":54},[37,73140,31846],{"class":309},[37,73142,51375],{"class":54},[37,73144,73145,73147,73149,73151,73153,73155,73157,73159,73161,73163,73165,73168,73170,73172,73174],{"class":39,"line":32890},[37,73146,51409],{"class":54},[37,73148,53889],{"class":51368},[37,73150,53892],{"class":2035},[37,73152,70],{"class":54},[37,73154,62767],{"class":309},[37,73156,14992],{"class":2035},[37,73158,70],{"class":54},[37,73160,69164],{"class":309},[37,73162,61088],{"class":2035},[37,73164,70],{"class":54},[37,73166,73167],{"class":309},"\"姓名\"",[37,73169,53554],{"class":2035},[37,73171,70],{"class":54},[37,73173,69164],{"class":309},[37,73175,51375],{"class":54},[37,73177,73178,73180,73182,73184,73186,73188,73190,73192,73194,73196,73198,73201,73203,73205,73207],{"class":39,"line":32905},[37,73179,51409],{"class":54},[37,73181,53889],{"class":51368},[37,73183,53892],{"class":2035},[37,73185,70],{"class":54},[37,73187,62767],{"class":309},[37,73189,14992],{"class":2035},[37,73191,70],{"class":54},[37,73193,69192],{"class":309},[37,73195,61088],{"class":2035},[37,73197,70],{"class":54},[37,73199,73200],{"class":309},"\"年龄\"",[37,73202,53554],{"class":2035},[37,73204,70],{"class":54},[37,73206,69192],{"class":309},[37,73208,51375],{"class":54},[37,73210,73211,73213,73215,73217,73219,73221,73223,73225,73227,73229,73231,73234,73236,73238,73240],{"class":39,"line":32911},[37,73212,51409],{"class":54},[37,73214,53889],{"class":51368},[37,73216,53892],{"class":2035},[37,73218,70],{"class":54},[37,73220,62767],{"class":309},[37,73222,14992],{"class":2035},[37,73224,70],{"class":54},[37,73226,69294],{"class":309},[37,73228,61088],{"class":2035},[37,73230,70],{"class":54},[37,73232,73233],{"class":309},"\"薪资\"",[37,73235,53554],{"class":2035},[37,73237,70],{"class":54},[37,73239,69294],{"class":309},[37,73241,51375],{"class":54},[37,73243,73244,73246,73248,73250,73252,73254,73256,73258,73260,73262,73264,73266],{"class":39,"line":32920},[37,73245,51409],{"class":54},[37,73247,69212],{"class":51368},[37,73249,14992],{"class":2035},[37,73251,70],{"class":54},[37,73253,69219],{"class":309},[37,73255,15031],{"class":2035},[37,73257,70],{"class":54},[37,73259,7724],{"class":309},[37,73261,53554],{"class":2035},[37,73263,70],{"class":54},[37,73265,69219],{"class":309},[37,73267,51375],{"class":54},[37,73269,73270,73272,73274,73276,73278,73280,73282,73284],{"class":39,"line":32926},[37,73271,55302],{"class":54},[37,73273,69234],{"class":51368},[37,73275,66719],{"class":2035},[37,73277,70],{"class":54},[37,73279,10033],{"class":309},[37,73281,69243],{"class":54},[37,73283,69234],{"class":51368},[37,73285,51375],{"class":54},[37,73287,73288,73290,73292,73294,73296,73298,73300,73302],{"class":39,"line":32935},[37,73289,55302],{"class":54},[37,73291,69234],{"class":51368},[37,73293,66719],{"class":2035},[37,73295,70],{"class":54},[37,73297,10102],{"class":309},[37,73299,69262],{"class":54},[37,73301,69234],{"class":51368},[37,73303,51375],{"class":54},[37,73305,73306,73308,73310],{"class":39,"line":32941},[37,73307,51844],{"class":54},[37,73309,69212],{"class":51368},[37,73311,51375],{"class":54},[37,73313,73314,73316,73318,73320,73322,73324,73326,73328,73330,73332,73334,73336],{"class":39,"line":32947},[37,73315,51409],{"class":54},[37,73317,69212],{"class":51368},[37,73319,14992],{"class":2035},[37,73321,70],{"class":54},[37,73323,69316],{"class":309},[37,73325,15031],{"class":2035},[37,73327,70],{"class":54},[37,73329,7724],{"class":309},[37,73331,53554],{"class":2035},[37,73333,70],{"class":54},[37,73335,69316],{"class":309},[37,73337,51375],{"class":54},[37,73339,73340,73342,73344,73346,73348,73350,73352,73354],{"class":39,"line":32956},[37,73341,55302],{"class":54},[37,73343,69234],{"class":51368},[37,73345,66719],{"class":2035},[37,73347,70],{"class":54},[37,73349,69337],{"class":309},[37,73351,69340],{"class":54},[37,73353,69234],{"class":51368},[37,73355,51375],{"class":54},[37,73357,73358,73360,73362,73364,73366,73368,73370,73372],{"class":39,"line":32962},[37,73359,55302],{"class":54},[37,73361,69234],{"class":51368},[37,73363,66719],{"class":2035},[37,73365,70],{"class":54},[37,73367,69357],{"class":309},[37,73369,69360],{"class":54},[37,73371,69234],{"class":51368},[37,73373,51375],{"class":54},[37,73375,73376,73378,73380,73382,73384,73386,73388,73390],{"class":39,"line":32973},[37,73377,55302],{"class":54},[37,73379,69234],{"class":51368},[37,73381,66719],{"class":2035},[37,73383,70],{"class":54},[37,73385,69377],{"class":309},[37,73387,69380],{"class":54},[37,73389,69234],{"class":51368},[37,73391,51375],{"class":54},[37,73393,73394,73396,73398,73400,73402,73404,73406,73408],{"class":39,"line":32979},[37,73395,55302],{"class":54},[37,73397,69234],{"class":51368},[37,73399,66719],{"class":2035},[37,73401,70],{"class":54},[37,73403,69397],{"class":309},[37,73405,69400],{"class":54},[37,73407,69234],{"class":51368},[37,73409,51375],{"class":54},[37,73411,73412,73414,73416,73418,73420,73422,73424,73426],{"class":39,"line":32998},[37,73413,55302],{"class":54},[37,73415,69234],{"class":51368},[37,73417,66719],{"class":2035},[37,73419,70],{"class":54},[37,73421,69417],{"class":309},[37,73423,69420],{"class":54},[37,73425,69234],{"class":51368},[37,73427,51375],{"class":54},[37,73429,73430,73432,73434],{"class":39,"line":33004},[37,73431,51844],{"class":54},[37,73433,69212],{"class":51368},[37,73435,51375],{"class":54},[37,73437,73438,73440,73442],{"class":39,"line":33015},[37,73439,51409],{"class":54},[37,73441,53955],{"class":51368},[37,73443,51375],{"class":54},[37,73445,73446,73448,73450,73453,73455,73458,73460],{"class":39,"line":33021},[37,73447,55302],{"class":54},[37,73449,37],{"class":51368},[37,73451,73452],{"class":54},">+\u003C\u002F",[37,73454,37],{"class":51368},[37,73456,73457],{"class":54},">添加\u003C\u002F",[37,73459,53955],{"class":51368},[37,73461,51375],{"class":54},[37,73463,73464,73466,73468],{"class":39,"line":33041},[37,73465,52485],{"class":54},[37,73467,66693],{"class":51368},[37,73469,51375],{"class":54},[37,73471,73472,73474,73476,73478,73480,73482,73485,73487,73490,73492,73495,73497],{"class":39,"line":33057},[37,73473,52212],{"class":54},[37,73475,51679],{"class":51368},[37,73477,53554],{"class":2035},[37,73479,70],{"class":54},[37,73481,62648],{"class":309},[37,73483,73484],{"class":54},">共有数据 \u003C",[37,73486,37],{"class":51368},[37,73488,73489],{"class":54},">0\u003C\u002F",[37,73491,37],{"class":51368},[37,73493,73494],{"class":54},"> 条\u003C\u002F",[37,73496,51679],{"class":51368},[37,73498,51375],{"class":54},[37,73500,73501,73503,73505],{"class":39,"line":33063},[37,73502,52212],{"class":54},[37,73504,342],{"class":51368},[37,73506,51375],{"class":54},[37,73508,73509,73511,73513],{"class":39,"line":33077},[37,73510,51409],{"class":54},[37,73512,345],{"class":51368},[37,73514,51375],{"class":54},[37,73516,73517,73519,73521],{"class":39,"line":33083},[37,73518,55302],{"class":54},[37,73520,348],{"class":51368},[37,73522,51375],{"class":54},[37,73524,73525,73527,73529,73532,73534],{"class":39,"line":33089},[37,73526,55370],{"class":54},[37,73528,351],{"class":51368},[37,73530,73531],{"class":54},">ID\u003C\u002F",[37,73533,351],{"class":51368},[37,73535,51375],{"class":54},[37,73537,73538,73540,73542,73544,73546],{"class":39,"line":33100},[37,73539,55370],{"class":54},[37,73541,351],{"class":51368},[37,73543,69523],{"class":54},[37,73545,351],{"class":51368},[37,73547,51375],{"class":54},[37,73549,73550,73552,73554,73556,73558],{"class":39,"line":33106},[37,73551,55370],{"class":54},[37,73553,351],{"class":51368},[37,73555,69536],{"class":54},[37,73557,351],{"class":51368},[37,73559,51375],{"class":54},[37,73561,73562,73564,73566,73568,73570],{"class":39,"line":33112},[37,73563,55370],{"class":54},[37,73565,351],{"class":51368},[37,73567,69549],{"class":54},[37,73569,351],{"class":51368},[37,73571,51375],{"class":54},[37,73573,73574,73576,73578,73580,73582],{"class":39,"line":33122},[37,73575,55370],{"class":54},[37,73577,351],{"class":51368},[37,73579,69562],{"class":54},[37,73581,351],{"class":51368},[37,73583,51375],{"class":54},[37,73585,73586,73588,73590,73592,73594],{"class":39,"line":33128},[37,73587,55370],{"class":54},[37,73589,351],{"class":51368},[37,73591,69575],{"class":54},[37,73593,351],{"class":51368},[37,73595,51375],{"class":54},[37,73597,73598,73600,73602,73605,73607],{"class":39,"line":33139},[37,73599,55370],{"class":54},[37,73601,351],{"class":51368},[37,73603,73604],{"class":54},">录入时间\u003C\u002F",[37,73606,351],{"class":51368},[37,73608,51375],{"class":54},[37,73610,73611,73613,73615,73617,73619],{"class":39,"line":33145},[37,73612,55370],{"class":54},[37,73614,351],{"class":51368},[37,73616,69588],{"class":54},[37,73618,351],{"class":51368},[37,73620,51375],{"class":54},[37,73622,73623,73625,73627],{"class":39,"line":33155},[37,73624,55475],{"class":54},[37,73626,348],{"class":51368},[37,73628,51375],{"class":54},[37,73630,73631,73633,73635],{"class":39,"line":33160},[37,73632,51844],{"class":54},[37,73634,345],{"class":51368},[37,73636,51375],{"class":54},[37,73638,73639,73641,73643],{"class":39,"line":33166},[37,73640,51409],{"class":54},[37,73642,389],{"class":51368},[37,73644,51375],{"class":54},[37,73646,73647],{"class":39,"line":33215},[37,73648,73649],{"class":43},"      \u003C!-- \u003Ctr>\n",[37,73651,73652],{"class":39,"line":33262},[37,73653,73654],{"class":43},"        \u003Ctd>1\u003C\u002Ftd>\n",[37,73656,73657],{"class":39,"line":33267},[37,73658,73654],{"class":43},[37,73660,73661],{"class":39,"line":33273},[37,73662,73654],{"class":43},[37,73664,73665],{"class":39,"line":33292},[37,73666,73654],{"class":43},[37,73668,73669],{"class":39,"line":33298},[37,73670,73654],{"class":43},[37,73672,73673],{"class":39,"line":33318},[37,73674,73654],{"class":43},[37,73676,73677],{"class":39,"line":33324},[37,73678,73654],{"class":43},[37,73680,73681],{"class":39,"line":33330},[37,73682,73683],{"class":43},"        \u003Ctd>\n",[37,73685,73686],{"class":39,"line":33340},[37,73687,73688],{"class":43},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[37,73690,73691],{"class":39,"line":33345},[37,73692,73693],{"class":43},"        \u003C\u002Ftd>\n",[37,73695,73696],{"class":39,"line":33351},[37,73697,73698],{"class":43},"      \u003C\u002Ftr> -->\n",[37,73700,73701,73703,73705],{"class":39,"line":33367},[37,73702,51844],{"class":54},[37,73704,389],{"class":51368},[37,73706,51375],{"class":54},[37,73708,73709,73711,73713],{"class":39,"line":33412},[37,73710,52485],{"class":54},[37,73712,342],{"class":51368},[37,73714,51375],{"class":54},[37,73716,73717,73719,73721],{"class":39,"line":33418},[37,73718,52212],{"class":54},[37,73720,51881],{"class":51368},[37,73722,51375],{"class":54},[37,73724,73725],{"class":39,"line":33424},[37,73726,73727],{"class":43},"    \u002F\u002F const initData = [{\n",[37,73729,73730],{"class":39,"line":33430},[37,73731,73732],{"class":43},"    \u002F\u002F   unameId: 1,\n",[37,73734,73735],{"class":39,"line":33441},[37,73736,73737],{"class":43},"    \u002F\u002F   uname: '华晨宇',\n",[37,73739,73740],{"class":39,"line":33447},[37,73741,73742],{"class":43},"    \u002F\u002F   age: 22,\n",[37,73744,73745],{"class":39,"line":33453},[37,73746,73747],{"class":43},"    \u002F\u002F   salary: 12000,\n",[37,73749,73750],{"class":39,"line":33459},[37,73751,73752],{"class":43},"    \u002F\u002F   gender: '男',\n",[37,73754,73755],{"class":39,"line":33477},[37,73756,73757],{"class":43},"    \u002F\u002F   city: '北京',\n",[37,73759,73760],{"class":39,"line":33491},[37,73761,73762],{"class":43},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[37,73764,73765],{"class":39,"line":33500},[37,73766,73767],{"class":43},"    \u002F\u002F }]\n",[37,73769,73770],{"class":39,"line":33509},[37,73771,73772],{"class":43},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[37,73774,73775],{"class":39,"line":33518},[37,73776,73777],{"class":43},"    \u002F\u002F 1.渲染业务\n",[37,73779,73780],{"class":39,"line":33527},[37,73781,73782],{"class":43},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[37,73784,73785],{"class":39,"line":33533},[37,73786,73787],{"class":43},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[37,73789,73790],{"class":39,"line":33539},[37,73791,73792],{"class":43},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[37,73794,73795],{"class":39,"line":33547},[37,73796,2472],{"emptyLinePlaceholder":131},[37,73798,73799],{"class":39,"line":33552},[37,73800,73801],{"class":43},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[37,73803,73804],{"class":39,"line":33558},[37,73805,73806],{"class":43},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[37,73808,73809,73811,73813,73815],{"class":39,"line":33569},[37,73810,11293],{"class":50},[37,73812,57763],{"class":82},[37,73814,13636],{"class":50},[37,73816,51906],{"class":54},[37,73818,73819,73822,73824],{"class":39,"line":33575},[37,73820,73821],{"class":54},"    console.",[37,73823,58315],{"class":2035},[37,73825,52480],{"class":54},[37,73827,73828],{"class":39,"line":33595},[37,73829,2472],{"emptyLinePlaceholder":131},[37,73831,73832],{"class":39,"line":33601},[37,73833,73834],{"class":43},"    \u002F\u002F 时间函数\n",[37,73836,73837,73839,73842],{"class":39,"line":33607},[37,73838,70152],{"class":50},[37,73840,73841],{"class":2035}," getTime",[37,73843,10925],{"class":54},[37,73845,73846,73848,73851,73853,73855,73858],{"class":39,"line":33613},[37,73847,58296],{"class":50},[37,73849,73850],{"class":82}," date",[37,73852,13636],{"class":50},[37,73854,11650],{"class":50},[37,73856,73857],{"class":2035}," Date",[37,73859,2048],{"class":54},[37,73861,73862,73864,73866,73868,73871,73874,73876,73878,73880,73883,73886,73888,73890,73892,73894,73896,73898,73900],{"class":39,"line":33630},[37,73863,58296],{"class":50},[37,73865,16163],{"class":82},[37,73867,13636],{"class":50},[37,73869,73870],{"class":54}," date.",[37,73872,73873],{"class":2035},"getHours",[37,73875,13122],{"class":54},[37,73877,1113],{"class":50},[37,73879,2110],{"class":82},[37,73881,73882],{"class":50}," ?",[37,73884,73885],{"class":309}," '0'",[37,73887,45635],{"class":50},[37,73889,73870],{"class":54},[37,73891,73873],{"class":2035},[37,73893,13122],{"class":54},[37,73895,1062],{"class":50},[37,73897,73870],{"class":54},[37,73899,73873],{"class":2035},[37,73901,2048],{"class":54},[37,73903,73904,73906,73909,73911,73913,73916,73918,73920,73922,73924,73926,73928,73930,73932,73934,73936,73938,73940],{"class":39,"line":33636},[37,73905,58296],{"class":50},[37,73907,73908],{"class":82}," m",[37,73910,13636],{"class":50},[37,73912,73870],{"class":54},[37,73914,73915],{"class":2035},"getMinutes",[37,73917,13122],{"class":54},[37,73919,1113],{"class":50},[37,73921,2110],{"class":82},[37,73923,73882],{"class":50},[37,73925,73885],{"class":309},[37,73927,45635],{"class":50},[37,73929,73870],{"class":54},[37,73931,73915],{"class":2035},[37,73933,13122],{"class":54},[37,73935,1062],{"class":50},[37,73937,73870],{"class":54},[37,73939,73915],{"class":2035},[37,73941,2048],{"class":54},[37,73943,73944,73946,73948,73950,73952,73955,73957,73959,73961,73963,73965,73967,73969,73971,73973,73975,73977,73979],{"class":39,"line":33642},[37,73945,58296],{"class":50},[37,73947,8500],{"class":82},[37,73949,13636],{"class":50},[37,73951,73870],{"class":54},[37,73953,73954],{"class":2035},"getSeconds",[37,73956,13122],{"class":54},[37,73958,1113],{"class":50},[37,73960,2110],{"class":82},[37,73962,73882],{"class":50},[37,73964,73885],{"class":309},[37,73966,45635],{"class":50},[37,73968,73870],{"class":54},[37,73970,73954],{"class":2035},[37,73972,13122],{"class":54},[37,73974,1062],{"class":50},[37,73976,73870],{"class":54},[37,73978,73954],{"class":2035},[37,73980,2048],{"class":54},[37,73982,73983,73985,73988,73990,73992,73995,73997,74000,74002,74005,74007,74009,74012,74014,74016,74018,74020,74022,74024,74027,74029,74032,74034,74037,74039,74041,74043],{"class":39,"line":33648},[37,73984,58296],{"class":50},[37,73986,73987],{"class":82}," str",[37,73989,13636],{"class":50},[37,73991,62971],{"class":309},[37,73993,73994],{"class":54},"date",[37,73996,761],{"class":309},[37,73998,73999],{"class":2035},"getFullYear",[37,74001,2499],{"class":309},[37,74003,74004],{"class":309},"}\u002F${",[37,74006,73994],{"class":54},[37,74008,761],{"class":309},[37,74010,74011],{"class":2035},"getMonth",[37,74013,13122],{"class":309},[37,74015,685],{"class":50},[37,74017,25191],{"class":82},[37,74019,74004],{"class":309},[37,74021,73994],{"class":54},[37,74023,761],{"class":309},[37,74025,74026],{"class":2035},"getDate",[37,74028,2499],{"class":309},[37,74030,74031],{"class":309},"} ${",[37,74033,620],{"class":54},[37,74035,74036],{"class":309},"}:${",[37,74038,747],{"class":54},[37,74040,74036],{"class":309},[37,74042,898],{"class":54},[37,74044,74045],{"class":309},"}`\n",[37,74047,74048,74051],{"class":39,"line":33654},[37,74049,74050],{"class":50},"      return",[37,74052,74053],{"class":54}," str\n",[37,74055,74056],{"class":39,"line":33660},[37,74057,2259],{"class":54},[37,74059,74060],{"class":39,"line":33687},[37,74061,74062],{"class":43},"    \u002F\u002F 渲染函数\n",[37,74064,74065,74067,74069,74071,74073,74075,74077,74079],{"class":39,"line":33711},[37,74066,11293],{"class":50},[37,74068,69815],{"class":82},[37,74070,13636],{"class":50},[37,74072,54464],{"class":54},[37,74074,54467],{"class":2035},[37,74076,208],{"class":54},[37,74078,69826],{"class":309},[37,74080,214],{"class":54},[37,74082,74083,74085,74087],{"class":39,"line":33717},[37,74084,70152],{"class":50},[37,74086,70155],{"class":2035},[37,74088,10925],{"class":54},[37,74090,74091],{"class":39,"line":33723},[37,74092,74093],{"class":43},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[37,74095,74096],{"class":39,"line":33729},[37,74097,74098],{"class":43},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[37,74100,74101,74103,74106,74108,74110,74113,74115,74117,74119,74122,74124,74127],{"class":39,"line":33740},[37,74102,58296],{"class":50},[37,74104,74105],{"class":82}," trArr",[37,74107,13636],{"class":50},[37,74109,52033],{"class":54},[37,74111,74112],{"class":2035},"map",[37,74114,208],{"class":54},[37,74116,54517],{"class":50},[37,74118,1730],{"class":54},[37,74120,74121],{"class":5288},"ele",[37,74123,12507],{"class":54},[37,74125,74126],{"class":5288},"index",[37,74128,12514],{"class":54},[37,74130,74131,74133],{"class":39,"line":33751},[37,74132,14824],{"class":50},[37,74134,70236],{"class":309},[37,74136,74137],{"class":39,"line":33757},[37,74138,74139],{"class":309},"      \u003Ctr>\n",[37,74141,74142,74144,74146,74148,74151],{"class":39,"line":33774},[37,74143,70241],{"class":309},[37,74145,74121],{"class":54},[37,74147,761],{"class":309},[37,74149,74150],{"class":54},"unameId",[37,74152,70256],{"class":309},[37,74154,74155,74157,74159,74161,74163],{"class":39,"line":33797},[37,74156,70241],{"class":309},[37,74158,74121],{"class":54},[37,74160,761],{"class":309},[37,74162,70272],{"class":54},[37,74164,70256],{"class":309},[37,74166,74167,74169,74171,74173,74175],{"class":39,"line":33820},[37,74168,70241],{"class":309},[37,74170,74121],{"class":54},[37,74172,761],{"class":309},[37,74174,70289],{"class":54},[37,74176,70256],{"class":309},[37,74178,74179,74181,74183,74185,74187],{"class":39,"line":33826},[37,74180,70241],{"class":309},[37,74182,74121],{"class":54},[37,74184,761],{"class":309},[37,74186,70306],{"class":54},[37,74188,70256],{"class":309},[37,74190,74191,74193,74195,74197,74199],{"class":39,"line":33831},[37,74192,70241],{"class":309},[37,74194,74121],{"class":54},[37,74196,761],{"class":309},[37,74198,70323],{"class":54},[37,74200,70256],{"class":309},[37,74202,74203,74205,74207,74209,74211],{"class":39,"line":33840},[37,74204,70241],{"class":309},[37,74206,74121],{"class":54},[37,74208,761],{"class":309},[37,74210,70340],{"class":54},[37,74212,70256],{"class":309},[37,74214,74215,74217,74219,74221,74223],{"class":39,"line":33850},[37,74216,70241],{"class":309},[37,74218,74121],{"class":54},[37,74220,761],{"class":309},[37,74222,2459],{"class":54},[37,74224,70256],{"class":309},[37,74226,74227],{"class":39,"line":33856},[37,74228,73683],{"class":309},[37,74230,74231,74234,74236],{"class":39,"line":33861},[37,74232,74233],{"class":309},"          \u003Ca href=\"#\" data-id=\"${",[37,74235,74126],{"class":54},[37,74237,74238],{"class":309},"}\">删除\u003C\u002Fa>\n",[37,74240,74241],{"class":39,"line":33867},[37,74242,73693],{"class":309},[37,74244,74245],{"class":39,"line":33880},[37,74246,74247],{"class":309},"      \u003C\u002Ftr>\n",[37,74249,74250],{"class":39,"line":33886},[37,74251,74252],{"class":309},"  `\n",[37,74254,74255],{"class":39,"line":33897},[37,74256,64883],{"class":54},[37,74258,74259,74261,74263],{"class":39,"line":33908},[37,74260,58312],{"class":54},[37,74262,58315],{"class":2035},[37,74264,74265],{"class":54},"(trArr)\n",[37,74267,74268],{"class":39,"line":33927},[37,74269,2472],{"emptyLinePlaceholder":131},[37,74271,74272],{"class":39,"line":49586},[37,74273,74274],{"class":43},"      \u002F\u002F (2) 把数组转换为字符串join\n",[37,74276,74277],{"class":39,"line":49591},[37,74278,74279],{"class":43},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[37,74281,74282,74284,74286,74289,74292,74294,74297],{"class":39,"line":49600},[37,74283,70167],{"class":54},[37,74285,70],{"class":50},[37,74287,74288],{"class":54}," trArr.",[37,74290,74291],{"class":2035},"join",[37,74293,208],{"class":54},[37,74295,74296],{"class":309},"''",[37,74298,214],{"class":54},[37,74300,74301],{"class":39,"line":49609},[37,74302,74303],{"class":43},"      \u002F\u002F 显示共有几条\n",[37,74305,74306,74308,74310,74312,74315,74318,74320,74322],{"class":39,"line":49614},[37,74307,55839],{"class":54},[37,74309,54467],{"class":2035},[37,74311,208],{"class":54},[37,74313,74314],{"class":309},"'.total span'",[37,74316,74317],{"class":54},").innerHTML ",[37,74319,70],{"class":50},[37,74321,52033],{"class":54},[37,74323,55899],{"class":82},[37,74325,74326],{"class":39,"line":49619},[37,74327,2259],{"class":54},[37,74329,74330],{"class":39,"line":49624},[37,74331,74332],{"class":43},"    \u002F\u002F render()\n",[37,74334,74335],{"class":39,"line":49637},[37,74336,2472],{"emptyLinePlaceholder":131},[37,74338,74339],{"class":39,"line":49642},[37,74340,74341],{"class":43},"    \u002F\u002F 获取DOM对象\n",[37,74343,74344,74346,74348,74350,74352,74354,74356,74358],{"class":39,"line":49651},[37,74345,11293],{"class":50},[37,74347,69889],{"class":82},[37,74349,13636],{"class":50},[37,74351,54464],{"class":54},[37,74353,54467],{"class":2035},[37,74355,208],{"class":54},[37,74357,69900],{"class":309},[37,74359,214],{"class":54},[37,74361,74362,74364,74366,74368,74370,74372,74374,74376],{"class":39,"line":49660},[37,74363,11293],{"class":50},[37,74365,69716],{"class":82},[37,74367,13636],{"class":50},[37,74369,54464],{"class":54},[37,74371,54467],{"class":2035},[37,74373,208],{"class":54},[37,74375,69727],{"class":309},[37,74377,214],{"class":54},[37,74379,74380,74382,74384,74386,74388,74390,74392,74394],{"class":39,"line":49677},[37,74381,11293],{"class":50},[37,74383,15761],{"class":82},[37,74385,13636],{"class":50},[37,74387,54464],{"class":54},[37,74389,54467],{"class":2035},[37,74391,208],{"class":54},[37,74393,69746],{"class":309},[37,74395,214],{"class":54},[37,74397,74399,74401,74403,74405,74407,74409,74411,74413],{"class":39,"line":74398},231,[37,74400,11293],{"class":50},[37,74402,69775],{"class":82},[37,74404,13636],{"class":50},[37,74406,54464],{"class":54},[37,74408,54467],{"class":2035},[37,74410,208],{"class":54},[37,74412,69786],{"class":309},[37,74414,214],{"class":54},[37,74416,74418,74420,74422,74424,74426,74428,74430,74432],{"class":39,"line":74417},232,[37,74419,11293],{"class":50},[37,74421,69755],{"class":82},[37,74423,13636],{"class":50},[37,74425,54464],{"class":54},[37,74427,54467],{"class":2035},[37,74429,208],{"class":54},[37,74431,69766],{"class":309},[37,74433,214],{"class":54},[37,74435,74437,74439,74441,74443,74445,74447,74449,74451],{"class":39,"line":74436},233,[37,74438,11293],{"class":50},[37,74440,69795],{"class":82},[37,74442,13636],{"class":50},[37,74444,54464],{"class":54},[37,74446,54467],{"class":2035},[37,74448,208],{"class":54},[37,74450,69806],{"class":309},[37,74452,214],{"class":54},[37,74454,74456],{"class":39,"line":74455},234,[37,74457,2472],{"emptyLinePlaceholder":131},[37,74459,74461],{"class":39,"line":74460},235,[37,74462,74463],{"class":43},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[37,74465,74467,74469,74471,74473,74475,74477,74479,74481,74483],{"class":39,"line":74466},236,[37,74468,69907],{"class":54},[37,74470,57881],{"class":2035},[37,74472,208],{"class":54},[37,74474,69914],{"class":309},[37,74476,12507],{"class":54},[37,74478,54517],{"class":50},[37,74480,1730],{"class":54},[37,74482,279],{"class":5288},[37,74484,12514],{"class":54},[37,74486,74488],{"class":39,"line":74487},237,[37,74489,74490],{"class":43},"      \u002F\u002F 禁止浏览器跳转\n",[37,74492,74494,74496,74498],{"class":39,"line":74493},238,[37,74495,69934],{"class":54},[37,74497,69937],{"class":2035},[37,74499,2048],{"class":54},[37,74501,74503],{"class":39,"line":74502},239,[37,74504,74505],{"class":43},"      \u002F\u002F 非空判断\n",[37,74507,74509],{"class":39,"line":74508},240,[37,74510,74511],{"class":43},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[37,74513,74515],{"class":39,"line":74514},241,[37,74516,74517],{"class":43},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[37,74519,74521,74523,74525,74527,74530,74532,74535,74538,74540,74542],{"class":39,"line":74520},242,[37,74522,54548],{"class":50},[37,74524,1730],{"class":54},[37,74526,431],{"class":50},[37,74528,74529],{"class":54},"uname.value ",[37,74531,71425],{"class":50},[37,74533,74534],{"class":50}," !",[37,74536,74537],{"class":54},"age.value ",[37,74539,71425],{"class":50},[37,74541,74534],{"class":50},[37,74543,74544],{"class":54},"salary.value) {\n",[37,74546,74548,74550,74552,74554,74556],{"class":39,"line":74547},243,[37,74549,14824],{"class":50},[37,74551,70008],{"class":2035},[37,74553,208],{"class":54},[37,74555,70013],{"class":309},[37,74557,214],{"class":54},[37,74559,74561],{"class":39,"line":74560},244,[37,74562,52466],{"class":54},[37,74564,74566,74568,74570],{"class":39,"line":74565},245,[37,74567,58075],{"class":54},[37,74569,51952],{"class":2035},[37,74571,74572],{"class":54},"({\n",[37,74574,74576],{"class":39,"line":74575},246,[37,74577,74578],{"class":43},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[37,74580,74582],{"class":39,"line":74581},247,[37,74583,74584],{"class":43},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[37,74586,74588],{"class":39,"line":74587},248,[37,74589,74590],{"class":43},"        \u002F\u002F 对象的序号应为数组长度+1\n",[37,74592,74594],{"class":39,"line":74593},249,[37,74595,74596],{"class":43},"        \u002F\u002F unameId: arr.length + 1,\n",[37,74598,74600],{"class":39,"line":74599},250,[37,74601,2472],{"emptyLinePlaceholder":131},[37,74603,74605],{"class":39,"line":74604},251,[37,74606,74607],{"class":43},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[37,74609,74611],{"class":39,"line":74610},252,[37,74612,74613],{"class":43},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[37,74615,74617],{"class":39,"line":74616},253,[37,74618,74619],{"class":43},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[37,74621,74623],{"class":39,"line":74622},254,[37,74624,74625],{"class":43},"        \u002F\u002F 0当假看\n",[37,74627,74629,74632,74634,74636,74639,74641,74643,74645,74648,74650,74652,74655,74657],{"class":39,"line":74628},255,[37,74630,74631],{"class":54},"        unameId: arr.",[37,74633,52036],{"class":82},[37,74635,73882],{"class":50},[37,74637,74638],{"class":54}," arr[arr.",[37,74640,52036],{"class":82},[37,74642,52339],{"class":50},[37,74644,25191],{"class":82},[37,74646,74647],{"class":54},"].unameId ",[37,74649,685],{"class":50},[37,74651,25191],{"class":82},[37,74653,74654],{"class":50}," :",[37,74656,25191],{"class":82},[37,74658,31536],{"class":54},[37,74660,74662],{"class":39,"line":74661},256,[37,74663,70061],{"class":54},[37,74665,74667],{"class":39,"line":74666},257,[37,74668,70066],{"class":54},[37,74670,74672],{"class":39,"line":74671},258,[37,74673,70076],{"class":54},[37,74675,74677],{"class":39,"line":74676},259,[37,74678,70071],{"class":54},[37,74680,74682],{"class":39,"line":74681},260,[37,74683,74684],{"class":54},"        city: city.value,\n",[37,74686,74688],{"class":39,"line":74687},261,[37,74689,74690],{"class":43},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[37,74692,74694],{"class":39,"line":74693},262,[37,74695,74696],{"class":43},"        \u002F\u002F time: new Date().toDateString()\n",[37,74698,74700,74703,74706],{"class":39,"line":74699},263,[37,74701,74702],{"class":54},"        time: ",[37,74704,74705],{"class":2035},"getTime",[37,74707,2048],{"class":54},[37,74709,74711],{"class":39,"line":74710},264,[37,74712,64883],{"class":54},[37,74714,74716],{"class":39,"line":74715},265,[37,74717,74718],{"class":43},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[37,74720,74722,74724],{"class":39,"line":74721},266,[37,74723,70136],{"class":2035},[37,74725,2048],{"class":54},[37,74727,74729,74731,74733,74735,74737],{"class":39,"line":74728},267,[37,74730,70119],{"class":82},[37,74732,761],{"class":54},[37,74734,70124],{"class":2035},[37,74736,13122],{"class":54},[37,74738,74739],{"class":43},"\u002F\u002F重置表单\n",[37,74741,74743],{"class":39,"line":74742},268,[37,74744,74745],{"class":43},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[37,74747,74749,74752,74754,74756,74759,74761,74763,74765,74767],{"class":39,"line":74748},269,[37,74750,74751],{"class":54},"      localStorage.",[37,74753,71722],{"class":2035},[37,74755,208],{"class":54},[37,74757,74758],{"class":309},"'data'",[37,74760,12507],{"class":54},[37,74762,71732],{"class":82},[37,74764,761],{"class":54},[37,74766,71737],{"class":2035},[37,74768,74769],{"class":54},"(arr))\n",[37,74771,74773],{"class":39,"line":74772},270,[37,74774,33530],{"class":54},[37,74776,74778],{"class":39,"line":74777},271,[37,74779,2472],{"emptyLinePlaceholder":131},[37,74781,74783],{"class":39,"line":74782},272,[37,74784,74785],{"class":43},"    \u002F\u002F 3.删除业务\n",[37,74787,74789],{"class":39,"line":74788},273,[37,74790,74791],{"class":43},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[37,74793,74795,74797,74799,74801,74803,74805,74807,74809,74811],{"class":39,"line":74794},274,[37,74796,70409],{"class":54},[37,74798,57881],{"class":2035},[37,74800,208],{"class":54},[37,74802,57886],{"class":309},[37,74804,12507],{"class":54},[37,74806,54517],{"class":50},[37,74808,1730],{"class":54},[37,74810,279],{"class":5288},[37,74812,12514],{"class":54},[37,74814,74816],{"class":39,"line":74815},275,[37,74817,74818],{"class":43},"      \u002F\u002F 判断是否点击的是删除按钮\n",[37,74820,74822,74824,74826,74828,74830],{"class":39,"line":74821},276,[37,74823,54548],{"class":50},[37,74825,67102],{"class":54},[37,74827,54554],{"class":50},[37,74829,68324],{"class":309},[37,74831,12514],{"class":54},[37,74833,74835],{"class":39,"line":74834},277,[37,74836,74837],{"class":43},"        \u002F\u002F alert(1)\n",[37,74839,74841],{"class":39,"line":74840},278,[37,74842,74843],{"class":43},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[37,74845,74847],{"class":39,"line":74846},279,[37,74848,74849],{"class":43},"        \u002F\u002F console.log(e.target)\n",[37,74851,74853],{"class":39,"line":74852},280,[37,74854,74855],{"class":43},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[37,74857,74859],{"class":39,"line":74858},281,[37,74860,2472],{"emptyLinePlaceholder":131},[37,74862,74864],{"class":39,"line":74863},282,[37,74865,74866],{"class":43},"        \u002F\u002F 确认框，确然是否真的要删除\n",[37,74868,74870],{"class":39,"line":74869},283,[37,74871,74872],{"class":43},"        \u002F\u002F confirm()为确认框\n",[37,74874,74876],{"class":39,"line":74875},284,[37,74877,74878],{"class":43},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[37,74880,74882,74884,74886,74889,74891,74894],{"class":39,"line":74881},285,[37,74883,2569],{"class":50},[37,74885,1730],{"class":54},[37,74887,74888],{"class":2035},"confirm",[37,74890,208],{"class":54},[37,74892,74893],{"class":309},"'您确定要删除这条数据吗？'",[37,74895,74896],{"class":54},")) {\n",[37,74898,74900,74903,74905,74907,74909],{"class":39,"line":74899},286,[37,74901,74902],{"class":54},"          arr.",[37,74904,58078],{"class":2035},[37,74906,70462],{"class":54},[37,74908,422],{"class":82},[37,74910,214],{"class":54},[37,74912,74914],{"class":39,"line":74913},287,[37,74915,74916],{"class":43},"          \u002F\u002F 3.4 重新渲染页面\n",[37,74918,74920,74923],{"class":39,"line":74919},288,[37,74921,74922],{"class":2035},"          render",[37,74924,2048],{"class":54},[37,74926,74928],{"class":39,"line":74927},289,[37,74929,74930],{"class":43},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[37,74932,74934,74937,74939,74941,74943,74945,74947,74949,74951],{"class":39,"line":74933},290,[37,74935,74936],{"class":54},"          localStorage.",[37,74938,71722],{"class":2035},[37,74940,208],{"class":54},[37,74942,74758],{"class":309},[37,74944,12507],{"class":54},[37,74946,71732],{"class":82},[37,74948,761],{"class":54},[37,74950,71737],{"class":2035},[37,74952,74769],{"class":54},[37,74954,74956],{"class":39,"line":74955},291,[37,74957,2601],{"class":54},[37,74959,74961],{"class":39,"line":74960},292,[37,74962,52466],{"class":54},[37,74964,74966],{"class":39,"line":74965},293,[37,74967,2472],{"emptyLinePlaceholder":131},[37,74969,74971],{"class":39,"line":74970},294,[37,74972,33530],{"class":54},[37,74974,74976],{"class":39,"line":74975},295,[37,74977,2472],{"emptyLinePlaceholder":131},[37,74979,74981,74983,74985],{"class":39,"line":74980},296,[37,74982,52485],{"class":54},[37,74984,51881],{"class":51368},[37,74986,51375],{"class":54},[37,74988,74990,74992,74994],{"class":39,"line":74989},297,[37,74991,51853],{"class":54},[37,74993,51868],{"class":51368},[37,74995,51375],{"class":54},[37,74997,74999],{"class":39,"line":74998},298,[37,75000,2472],{"emptyLinePlaceholder":131},[37,75002,75004,75006,75008],{"class":39,"line":75003},299,[37,75005,51853],{"class":54},[37,75007,50703],{"class":51368},[37,75009,51375],{"class":54},[146,75011,75013],{"id":75012},"_36-正则表达式","3.6 正则表达式",[14,75015,75016],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,75018,75019],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,75021,75022],{},"正则表达式的作用：",[1210,75024,75025,75032,75038],{},[161,75026,75027,75028,75031],{},"表单验证（ ",[354,75029,75030],{},"匹配"," ）",[161,75033,75034,75035,75031],{},"过滤敏感词（ ",[354,75036,75037],{},"替换",[161,75039,75040,75041,75031],{},"字符串中提取我们想要的部分（ ",[354,75042,75043],{},"提取",[175,75045,75047],{"id":75046},"_361-语法","3.6.1 语法",[14,75049,75050],{},"正则表达式使用步骤：",[158,75052,75053,75056],{},[161,75054,75055],{},"定义规则",[161,75057,75058],{},"查找是否匹配",[14,75060,75061],{},"正则表达式里边不需要写引号",[14,75063,75064],{},[119,75065],{"alt":32,"src":75066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,75068,75069],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,75071,75072],{},"reg.test(str)",[14,75074,75075],{},[119,75076],{"alt":32,"src":75077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,75079,75080],{},[119,75081],{"alt":32,"src":75082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[175,75084,75086],{"id":75085},"_362-元字符","3.6.2 元字符",[158,75088,75089,75092,75095,75098,75105],{},[161,75090,75091],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[161,75093,75094],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[161,75096,75097],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[161,75099,75100,75101],{},"正则验证工具：",[443,75102,75103],{"href":75103,"rel":75104},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23937],[161,75106,75107],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22070,75109,75111],{"id":75110},"_3621-边界符","3.6.2.1 边界符",[14,75113,75114],{},[119,75115],{"alt":32,"src":75116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75118,75119],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75121,75122],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75124,75125],{},"只匹配一次",[14,75127,75128],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22070,75130,75132],{"id":75131},"_3622-量词","3.6.2.2 量词",[14,75134,75135],{},[119,75136],{"alt":32,"src":75137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75139,75140],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22070,75142,75144],{"id":75143},"_3623-元字符","3.6.2.3 元字符",[14,75146,75147],{},[119,75148],{"alt":32,"src":75149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75151,75152],{},"匹配的是a或b或c []只选一个",[14,75154,75155],{},[119,75156],{"alt":32,"src":75157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75159,75160],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75162,75163],{},[119,75164],{"alt":32,"src":75165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75167,75168],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75170,75171],{},[119,75172],{"alt":32,"src":75173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[27,75175,75177],{"className":50701,"code":75176,"language":50703,"meta":32,"style":32},"\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",[34,75178,75179,75189,75203,75207,75215,75229,75249,75261,75269,75273,75281,75289,75294,75325,75352,75380,75384,75389,75417,75448,75453,75458,75489,75521,75553,75557,75562,75593,75623,75653,75657,75662,75693,75724,75754,75784,75788,75793,75826,75830,75835,75866,75897,75901,75906,75937,75967,75998,76002,76007,76039,76070,76101,76128,76159,76191,76224,76255,76286,76318,76349,76357,76365,76369],{"__ignoreMap":32},[37,75180,75181,75183,75185,75187],{"class":39,"line":40},[37,75182,51365],{"class":54},[37,75184,51369],{"class":51368},[37,75186,51372],{"class":2035},[37,75188,51375],{"class":54},[37,75190,75191,75193,75195,75197,75199,75201],{"class":39,"line":47},[37,75192,1113],{"class":54},[37,75194,50703],{"class":51368},[37,75196,51384],{"class":2035},[37,75198,70],{"class":54},[37,75200,51389],{"class":309},[37,75202,51375],{"class":54},[37,75204,75205],{"class":39,"line":58},[37,75206,2472],{"emptyLinePlaceholder":131},[37,75208,75209,75211,75213],{"class":39,"line":64},[37,75210,1113],{"class":54},[37,75212,51402],{"class":51368},[37,75214,51375],{"class":54},[37,75216,75217,75219,75221,75223,75225,75227],{"class":39,"line":76},[37,75218,52212],{"class":54},[37,75220,51412],{"class":51368},[37,75222,51415],{"class":2035},[37,75224,70],{"class":54},[37,75226,51420],{"class":309},[37,75228,51375],{"class":54},[37,75230,75231,75233,75235,75237,75239,75241,75243,75245,75247],{"class":39,"line":92},[37,75232,52212],{"class":54},[37,75234,51412],{"class":51368},[37,75236,14992],{"class":2035},[37,75238,70],{"class":54},[37,75240,51459],{"class":309},[37,75242,51439],{"class":2035},[37,75244,70],{"class":54},[37,75246,51466],{"class":309},[37,75248,51375],{"class":54},[37,75250,75251,75253,75255,75257,75259],{"class":39,"line":97},[37,75252,52212],{"class":54},[37,75254,51475],{"class":51368},[37,75256,51478],{"class":54},[37,75258,51475],{"class":51368},[37,75260,51375],{"class":54},[37,75262,75263,75265,75267],{"class":39,"line":107},[37,75264,51853],{"class":54},[37,75266,51402],{"class":51368},[37,75268,51375],{"class":54},[37,75270,75271],{"class":39,"line":1390},[37,75272,2472],{"emptyLinePlaceholder":131},[37,75274,75275,75277,75279],{"class":39,"line":1402},[37,75276,1113],{"class":54},[37,75278,51868],{"class":51368},[37,75280,51375],{"class":54},[37,75282,75283,75285,75287],{"class":39,"line":1684},[37,75284,52212],{"class":54},[37,75286,51881],{"class":51368},[37,75288,51375],{"class":54},[37,75290,75291],{"class":39,"line":1689},[37,75292,75293],{"class":43},"    \u002F\u002F 元字符中\n",[37,75295,75296,75298,75300,75302,75304,75307,75309,75311,75314,75316,75319,75322],{"class":39,"line":1695},[37,75297,73821],{"class":54},[37,75299,58315],{"class":2035},[37,75301,208],{"class":54},[37,75303,787],{"class":309},[37,75305,75306],{"class":48045},"哈",[37,75308,787],{"class":309},[37,75310,761],{"class":54},[37,75312,75313],{"class":2035},"test",[37,75315,208],{"class":54},[37,75317,75318],{"class":309},"'哈'",[37,75320,75321],{"class":54},"))  ",[37,75323,75324],{"class":43},"\u002F\u002Ftrue\n",[37,75326,75327,75329,75331,75333,75335,75337,75339,75341,75343,75345,75348,75350],{"class":39,"line":1700},[37,75328,73821],{"class":54},[37,75330,58315],{"class":2035},[37,75332,208],{"class":54},[37,75334,787],{"class":309},[37,75336,75306],{"class":48045},[37,75338,787],{"class":309},[37,75340,761],{"class":54},[37,75342,75313],{"class":2035},[37,75344,208],{"class":54},[37,75346,75347],{"class":309},"'哈哈'",[37,75349,75321],{"class":54},[37,75351,75324],{"class":43},[37,75353,75354,75356,75358,75360,75362,75364,75366,75368,75370,75372,75375,75378],{"class":39,"line":1714},[37,75355,73821],{"class":54},[37,75357,58315],{"class":2035},[37,75359,208],{"class":54},[37,75361,787],{"class":309},[37,75363,75306],{"class":48045},[37,75365,787],{"class":309},[37,75367,761],{"class":54},[37,75369,75313],{"class":2035},[37,75371,208],{"class":54},[37,75373,75374],{"class":309},"'二哈'",[37,75376,75377],{"class":54},"))   ",[37,75379,75324],{"class":43},[37,75381,75382],{"class":39,"line":1719},[37,75383,2472],{"emptyLinePlaceholder":131},[37,75385,75386],{"class":39,"line":1725},[37,75387,75388],{"class":43},"    \u002F\u002F 1.边界符\n",[37,75390,75391,75393,75395,75397,75399,75401,75403,75405,75407,75409,75411,75413,75415],{"class":39,"line":1746},[37,75392,73821],{"class":54},[37,75394,58315],{"class":2035},[37,75396,208],{"class":54},[37,75398,787],{"class":309},[37,75400,1169],{"class":50},[37,75402,75306],{"class":48045},[37,75404,787],{"class":309},[37,75406,761],{"class":54},[37,75408,75313],{"class":2035},[37,75410,208],{"class":54},[37,75412,75318],{"class":309},[37,75414,75321],{"class":54},[37,75416,75324],{"class":43},[37,75418,75419,75421,75423,75425,75427,75429,75431,75433,75435,75437,75439,75441,75443,75445],{"class":39,"line":1751},[37,75420,73821],{"class":54},[37,75422,58315],{"class":2035},[37,75424,208],{"class":54},[37,75426,787],{"class":309},[37,75428,1169],{"class":50},[37,75430,75306],{"class":48045},[37,75432,507],{"class":50},[37,75434,787],{"class":309},[37,75436,761],{"class":54},[37,75438,75313],{"class":2035},[37,75440,208],{"class":54},[37,75442,75347],{"class":309},[37,75444,75321],{"class":54},[37,75446,75447],{"class":43},"\u002F\u002Ffalse\n",[37,75449,75450],{"class":39,"line":1765},[37,75451,75452],{"class":43},"    \u002F\u002F 2.量词\n",[37,75454,75455],{"class":39,"line":1770},[37,75456,75457],{"class":43},"    \u002F\u002F 量词 * 类似于 >= 0\n",[37,75459,75460,75462,75464,75466,75468,75470,75472,75475,75477,75479,75481,75483,75485,75487],{"class":39,"line":1799},[37,75461,73821],{"class":54},[37,75463,58315],{"class":2035},[37,75465,208],{"class":54},[37,75467,787],{"class":309},[37,75469,1169],{"class":50},[37,75471,75306],{"class":48045},[37,75473,75474],{"class":50},"*$",[37,75476,787],{"class":309},[37,75478,761],{"class":54},[37,75480,75313],{"class":2035},[37,75482,208],{"class":54},[37,75484,75347],{"class":309},[37,75486,75321],{"class":54},[37,75488,75324],{"class":43},[37,75490,75491,75493,75495,75497,75499,75501,75503,75505,75507,75509,75511,75513,75516,75518],{"class":39,"line":1804},[37,75492,73821],{"class":54},[37,75494,58315],{"class":2035},[37,75496,208],{"class":54},[37,75498,787],{"class":309},[37,75500,1169],{"class":50},[37,75502,75306],{"class":48045},[37,75504,75474],{"class":50},[37,75506,787],{"class":309},[37,75508,761],{"class":54},[37,75510,75313],{"class":2035},[37,75512,208],{"class":54},[37,75514,75515],{"class":309},"'二哈好傻'",[37,75517,75321],{"class":54},[37,75519,75520],{"class":43},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[37,75522,75523,75525,75527,75529,75531,75533,75535,75537,75539,75541,75543,75545,75548,75550],{"class":39,"line":1821},[37,75524,73821],{"class":54},[37,75526,58315],{"class":2035},[37,75528,208],{"class":54},[37,75530,787],{"class":309},[37,75532,1169],{"class":50},[37,75534,75306],{"class":48045},[37,75536,75474],{"class":50},[37,75538,787],{"class":309},[37,75540,761],{"class":54},[37,75542,75313],{"class":2035},[37,75544,208],{"class":54},[37,75546,75547],{"class":309},"'哈好哈'",[37,75549,75377],{"class":54},[37,75551,75552],{"class":43},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[37,75554,75555],{"class":39,"line":1826},[37,75556,2472],{"emptyLinePlaceholder":131},[37,75558,75559],{"class":39,"line":1831},[37,75560,75561],{"class":43},"    \u002F\u002F +类似于>=1\n",[37,75563,75564,75566,75568,75570,75572,75574,75576,75579,75581,75583,75585,75587,75589,75591],{"class":39,"line":1836},[37,75565,73821],{"class":54},[37,75567,58315],{"class":2035},[37,75569,208],{"class":54},[37,75571,787],{"class":309},[37,75573,1169],{"class":50},[37,75575,75306],{"class":48045},[37,75577,75578],{"class":50},"+$",[37,75580,787],{"class":309},[37,75582,761],{"class":54},[37,75584,75313],{"class":2035},[37,75586,208],{"class":54},[37,75588,75347],{"class":309},[37,75590,75321],{"class":54},[37,75592,75324],{"class":43},[37,75594,75595,75597,75599,75601,75603,75605,75607,75609,75611,75613,75615,75617,75619,75621],{"class":39,"line":1850},[37,75596,73821],{"class":54},[37,75598,58315],{"class":2035},[37,75600,208],{"class":54},[37,75602,787],{"class":309},[37,75604,1169],{"class":50},[37,75606,75306],{"class":48045},[37,75608,75578],{"class":50},[37,75610,787],{"class":309},[37,75612,761],{"class":54},[37,75614,75313],{"class":2035},[37,75616,208],{"class":54},[37,75618,75515],{"class":309},[37,75620,75321],{"class":54},[37,75622,75520],{"class":43},[37,75624,75625,75627,75629,75631,75633,75635,75637,75639,75641,75643,75645,75647,75649,75651],{"class":39,"line":1855},[37,75626,73821],{"class":54},[37,75628,58315],{"class":2035},[37,75630,208],{"class":54},[37,75632,787],{"class":309},[37,75634,1169],{"class":50},[37,75636,75306],{"class":48045},[37,75638,75578],{"class":50},[37,75640,787],{"class":309},[37,75642,761],{"class":54},[37,75644,75313],{"class":2035},[37,75646,208],{"class":54},[37,75648,75547],{"class":309},[37,75650,75377],{"class":54},[37,75652,75447],{"class":43},[37,75654,75655],{"class":39,"line":2649},[37,75656,2472],{"emptyLinePlaceholder":131},[37,75658,75659],{"class":39,"line":2663},[37,75660,75661],{"class":43},"    \u002F\u002F ?类似于0次或一次\n",[37,75663,75664,75666,75668,75670,75672,75674,75677,75679,75681,75683,75685,75687,75689,75691],{"class":39,"line":2671},[37,75665,73821],{"class":54},[37,75667,58315],{"class":2035},[37,75669,208],{"class":54},[37,75671,787],{"class":309},[37,75673,1169],{"class":50},[37,75675,75676],{"class":48045},"哈？",[37,75678,507],{"class":50},[37,75680,787],{"class":309},[37,75682,761],{"class":54},[37,75684,75313],{"class":2035},[37,75686,208],{"class":54},[37,75688,74296],{"class":309},[37,75690,75377],{"class":54},[37,75692,75324],{"class":43},[37,75694,75695,75697,75699,75701,75703,75705,75707,75710,75712,75714,75716,75718,75720,75722],{"class":39,"line":2676},[37,75696,73821],{"class":54},[37,75698,58315],{"class":2035},[37,75700,208],{"class":54},[37,75702,787],{"class":309},[37,75704,1169],{"class":50},[37,75706,75306],{"class":48045},[37,75708,75709],{"class":50},"?$",[37,75711,787],{"class":309},[37,75713,761],{"class":54},[37,75715,75313],{"class":2035},[37,75717,208],{"class":54},[37,75719,75347],{"class":309},[37,75721,75321],{"class":54},[37,75723,75447],{"class":43},[37,75725,75726,75728,75730,75732,75734,75736,75738,75740,75742,75744,75746,75748,75750,75752],{"class":39,"line":2682},[37,75727,73821],{"class":54},[37,75729,58315],{"class":2035},[37,75731,208],{"class":54},[37,75733,787],{"class":309},[37,75735,1169],{"class":50},[37,75737,75306],{"class":48045},[37,75739,75709],{"class":50},[37,75741,787],{"class":309},[37,75743,761],{"class":54},[37,75745,75313],{"class":2035},[37,75747,208],{"class":54},[37,75749,75515],{"class":309},[37,75751,75321],{"class":54},[37,75753,75520],{"class":43},[37,75755,75756,75758,75760,75762,75764,75766,75768,75770,75772,75774,75776,75778,75780,75782],{"class":39,"line":2688},[37,75757,73821],{"class":54},[37,75759,58315],{"class":2035},[37,75761,208],{"class":54},[37,75763,787],{"class":309},[37,75765,1169],{"class":50},[37,75767,75306],{"class":48045},[37,75769,75709],{"class":50},[37,75771,787],{"class":309},[37,75773,761],{"class":54},[37,75775,75313],{"class":2035},[37,75777,208],{"class":54},[37,75779,75547],{"class":309},[37,75781,75321],{"class":54},[37,75783,75447],{"class":43},[37,75785,75786],{"class":39,"line":2693},[37,75787,2472],{"emptyLinePlaceholder":131},[37,75789,75790],{"class":39,"line":8020},[37,75791,75792],{"class":43},"    \u002F\u002F {n}写几，就必须出现几次\n",[37,75794,75795,75797,75799,75801,75803,75805,75807,75810,75812,75814,75816,75818,75821,75824],{"class":39,"line":8044},[37,75796,73821],{"class":54},[37,75798,58315],{"class":2035},[37,75800,208],{"class":54},[37,75802,787],{"class":309},[37,75804,1169],{"class":50},[37,75806,75306],{"class":48045},[37,75808,75809],{"class":50},"{4}$",[37,75811,787],{"class":309},[37,75813,761],{"class":54},[37,75815,75313],{"class":2035},[37,75817,208],{"class":54},[37,75819,75820],{"class":309},"'哈哈哈哈'",[37,75822,75823],{"class":54},")) ",[37,75825,75324],{"class":43},[37,75827,75828],{"class":39,"line":8049},[37,75829,2472],{"emptyLinePlaceholder":131},[37,75831,75832],{"class":39,"line":8055},[37,75833,75834],{"class":43},"    \u002F\u002F {n,}大于等于n次\n",[37,75836,75837,75839,75841,75843,75845,75847,75849,75852,75854,75856,75858,75860,75862,75864],{"class":39,"line":8082},[37,75838,73821],{"class":54},[37,75840,58315],{"class":2035},[37,75842,208],{"class":54},[37,75844,787],{"class":309},[37,75846,1169],{"class":50},[37,75848,75306],{"class":48045},[37,75850,75851],{"class":50},"{4,}$",[37,75853,787],{"class":309},[37,75855,761],{"class":54},[37,75857,75313],{"class":2035},[37,75859,208],{"class":54},[37,75861,75820],{"class":309},[37,75863,75823],{"class":54},[37,75865,75324],{"class":43},[37,75867,75868,75870,75872,75874,75876,75878,75880,75882,75884,75886,75888,75890,75893,75895],{"class":39,"line":8087},[37,75869,73821],{"class":54},[37,75871,58315],{"class":2035},[37,75873,208],{"class":54},[37,75875,787],{"class":309},[37,75877,1169],{"class":50},[37,75879,75306],{"class":48045},[37,75881,75851],{"class":50},[37,75883,787],{"class":309},[37,75885,761],{"class":54},[37,75887,75313],{"class":2035},[37,75889,208],{"class":54},[37,75891,75892],{"class":309},"'哈哈哈哈哈'",[37,75894,75823],{"class":54},[37,75896,75324],{"class":43},[37,75898,75899],{"class":39,"line":8093},[37,75900,2472],{"emptyLinePlaceholder":131},[37,75902,75903],{"class":39,"line":8105},[37,75904,75905],{"class":43},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[37,75907,75908,75910,75912,75914,75916,75918,75920,75923,75925,75927,75929,75931,75933,75935],{"class":39,"line":8117},[37,75909,73821],{"class":54},[37,75911,58315],{"class":2035},[37,75913,208],{"class":54},[37,75915,787],{"class":309},[37,75917,1169],{"class":50},[37,75919,75306],{"class":48045},[37,75921,75922],{"class":50},"{4,6}$",[37,75924,787],{"class":309},[37,75926,761],{"class":54},[37,75928,75313],{"class":2035},[37,75930,208],{"class":54},[37,75932,75820],{"class":309},[37,75934,75823],{"class":54},[37,75936,75324],{"class":43},[37,75938,75939,75941,75943,75945,75947,75949,75951,75953,75955,75957,75959,75961,75963,75965],{"class":39,"line":8129},[37,75940,73821],{"class":54},[37,75942,58315],{"class":2035},[37,75944,208],{"class":54},[37,75946,787],{"class":309},[37,75948,1169],{"class":50},[37,75950,75306],{"class":48045},[37,75952,75922],{"class":50},[37,75954,787],{"class":309},[37,75956,761],{"class":54},[37,75958,75313],{"class":2035},[37,75960,208],{"class":54},[37,75962,75892],{"class":309},[37,75964,75823],{"class":54},[37,75966,75324],{"class":43},[37,75968,75969,75971,75973,75975,75977,75979,75981,75983,75985,75987,75989,75991,75994,75996],{"class":39,"line":9788},[37,75970,73821],{"class":54},[37,75972,58315],{"class":2035},[37,75974,208],{"class":54},[37,75976,787],{"class":309},[37,75978,1169],{"class":50},[37,75980,75306],{"class":48045},[37,75982,75922],{"class":50},[37,75984,787],{"class":309},[37,75986,761],{"class":54},[37,75988,75313],{"class":2035},[37,75990,208],{"class":54},[37,75992,75993],{"class":309},"'哈哈哈哈哈哈哈'",[37,75995,75823],{"class":54},[37,75997,75447],{"class":43},[37,75999,76000],{"class":39,"line":9813},[37,76001,2472],{"emptyLinePlaceholder":131},[37,76003,76004],{"class":39,"line":9836},[37,76005,76006],{"class":43},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[37,76008,76009,76011,76013,76015,76017,76019,76022,76024,76026,76028,76030,76032,76035,76037],{"class":39,"line":9860},[37,76010,73821],{"class":54},[37,76012,58315],{"class":2035},[37,76014,208],{"class":54},[37,76016,787],{"class":309},[37,76018,1169],{"class":50},[37,76020,76021],{"class":82},"[abc]",[37,76023,507],{"class":50},[37,76025,787],{"class":309},[37,76027,761],{"class":54},[37,76029,75313],{"class":2035},[37,76031,208],{"class":54},[37,76033,76034],{"class":309},"'a'",[37,76036,75321],{"class":54},[37,76038,75324],{"class":43},[37,76040,76041,76043,76045,76047,76049,76051,76053,76055,76057,76059,76061,76063,76066,76068],{"class":39,"line":9865},[37,76042,73821],{"class":54},[37,76044,58315],{"class":2035},[37,76046,208],{"class":54},[37,76048,787],{"class":309},[37,76050,1169],{"class":50},[37,76052,76021],{"class":82},[37,76054,507],{"class":50},[37,76056,787],{"class":309},[37,76058,761],{"class":54},[37,76060,75313],{"class":2035},[37,76062,208],{"class":54},[37,76064,76065],{"class":309},"'b'",[37,76067,75321],{"class":54},[37,76069,75324],{"class":43},[37,76071,76072,76074,76076,76078,76080,76082,76084,76086,76088,76090,76092,76094,76097,76099],{"class":39,"line":9870},[37,76073,73821],{"class":54},[37,76075,58315],{"class":2035},[37,76077,208],{"class":54},[37,76079,787],{"class":309},[37,76081,1169],{"class":50},[37,76083,76021],{"class":82},[37,76085,507],{"class":50},[37,76087,787],{"class":309},[37,76089,761],{"class":54},[37,76091,75313],{"class":2035},[37,76093,208],{"class":54},[37,76095,76096],{"class":309},"'c'",[37,76098,75321],{"class":54},[37,76100,75324],{"class":43},[37,76102,76103,76105,76107,76109,76111,76113,76115,76117,76119,76121,76124,76126],{"class":39,"line":9875},[37,76104,73821],{"class":54},[37,76106,58315],{"class":2035},[37,76108,208],{"class":54},[37,76110,787],{"class":309},[37,76112,76021],{"class":82},[37,76114,787],{"class":309},[37,76116,761],{"class":54},[37,76118,75313],{"class":2035},[37,76120,208],{"class":54},[37,76122,76123],{"class":309},"'ab'",[37,76125,75321],{"class":54},[37,76127,75324],{"class":43},[37,76129,76130,76132,76134,76136,76138,76140,76142,76144,76146,76148,76150,76152,76154,76156],{"class":39,"line":9884},[37,76131,73821],{"class":54},[37,76133,58315],{"class":2035},[37,76135,208],{"class":54},[37,76137,787],{"class":309},[37,76139,1169],{"class":50},[37,76141,76021],{"class":82},[37,76143,507],{"class":50},[37,76145,787],{"class":309},[37,76147,761],{"class":54},[37,76149,75313],{"class":2035},[37,76151,208],{"class":54},[37,76153,76123],{"class":309},[37,76155,75321],{"class":54},[37,76157,76158],{"class":43},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[37,76160,76161,76163,76165,76167,76169,76171,76173,76176,76178,76180,76182,76184,76186,76188],{"class":39,"line":9889},[37,76162,73821],{"class":54},[37,76164,58315],{"class":2035},[37,76166,208],{"class":54},[37,76168,787],{"class":309},[37,76170,1169],{"class":50},[37,76172,76021],{"class":82},[37,76174,76175],{"class":50},"{2}$",[37,76177,787],{"class":309},[37,76179,761],{"class":54},[37,76181,75313],{"class":2035},[37,76183,208],{"class":54},[37,76185,76123],{"class":309},[37,76187,75321],{"class":54},[37,76189,76190],{"class":43},"\u002F\u002Ftrue   可以选两个\n",[37,76192,76193,76195,76197,76199,76201,76203,76206,76208,76210,76212,76214,76216,76219,76221],{"class":39,"line":9895},[37,76194,73821],{"class":54},[37,76196,58315],{"class":2035},[37,76198,208],{"class":54},[37,76200,787],{"class":309},[37,76202,1169],{"class":50},[37,76204,76205],{"class":82},"[a-z]",[37,76207,507],{"class":50},[37,76209,787],{"class":309},[37,76211,761],{"class":54},[37,76213,75313],{"class":2035},[37,76215,208],{"class":54},[37,76217,76218],{"class":309},"'p'",[37,76220,75377],{"class":54},[37,76222,76223],{"class":43},"\u002F\u002Ftrue   依然只能选一个\n",[37,76225,76226,76228,76230,76232,76234,76236,76239,76241,76243,76245,76247,76249,76251,76253],{"class":39,"line":9916},[37,76227,73821],{"class":54},[37,76229,58315],{"class":2035},[37,76231,208],{"class":54},[37,76233,787],{"class":309},[37,76235,1169],{"class":50},[37,76237,76238],{"class":82},"[A-Z]",[37,76240,507],{"class":50},[37,76242,787],{"class":309},[37,76244,761],{"class":54},[37,76246,75313],{"class":2035},[37,76248,208],{"class":54},[37,76250,76218],{"class":309},[37,76252,75377],{"class":54},[37,76254,75447],{"class":43},[37,76256,76257,76259,76261,76263,76265,76267,76269,76271,76273,76275,76277,76279,76282,76284],{"class":39,"line":9922},[37,76258,73821],{"class":54},[37,76260,58315],{"class":2035},[37,76262,208],{"class":54},[37,76264,787],{"class":309},[37,76266,1169],{"class":50},[37,76268,76238],{"class":82},[37,76270,507],{"class":50},[37,76272,787],{"class":309},[37,76274,761],{"class":54},[37,76276,75313],{"class":2035},[37,76278,208],{"class":54},[37,76280,76281],{"class":309},"'P'",[37,76283,75377],{"class":54},[37,76285,75324],{"class":43},[37,76287,76288,76290,76292,76294,76296,76298,76301,76303,76305,76307,76309,76311,76314,76316],{"class":39,"line":9936},[37,76289,73821],{"class":54},[37,76291,58315],{"class":2035},[37,76293,208],{"class":54},[37,76295,787],{"class":309},[37,76297,1169],{"class":50},[37,76299,76300],{"class":82},"[0-9]",[37,76302,507],{"class":50},[37,76304,787],{"class":309},[37,76306,761],{"class":54},[37,76308,75313],{"class":2035},[37,76310,208],{"class":54},[37,76312,76313],{"class":309},"'0'",[37,76315,75377],{"class":54},[37,76317,75324],{"class":43},[37,76319,76320,76322,76324,76326,76328,76330,76333,76335,76337,76339,76341,76343,76345,76347],{"class":39,"line":9942},[37,76321,73821],{"class":54},[37,76323,58315],{"class":2035},[37,76325,208],{"class":54},[37,76327,787],{"class":309},[37,76329,1169],{"class":50},[37,76331,76332],{"class":82},"[a-zA-Z0-9]",[37,76334,507],{"class":50},[37,76336,787],{"class":309},[37,76338,761],{"class":54},[37,76340,75313],{"class":2035},[37,76342,208],{"class":54},[37,76344,76218],{"class":309},[37,76346,75321],{"class":54},[37,76348,75324],{"class":43},[37,76350,76351,76353,76355],{"class":39,"line":9969},[37,76352,52485],{"class":54},[37,76354,51881],{"class":51368},[37,76356,51375],{"class":54},[37,76358,76359,76361,76363],{"class":39,"line":9978},[37,76360,51853],{"class":54},[37,76362,51868],{"class":51368},[37,76364,51375],{"class":54},[37,76366,76367],{"class":39,"line":9984},[37,76368,2472],{"emptyLinePlaceholder":131},[37,76370,76371,76373,76375],{"class":39,"line":9992},[37,76372,51853],{"class":54},[37,76374,50703],{"class":51368},[37,76376,51375],{"class":54},[22070,76378,76380],{"id":76379},"_3624-修饰符","3.6.2.4 修饰符",[14,76382,76383],{},[119,76384],{"alt":32,"src":76385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,76387,76388],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,76390,76391],{},[119,76392],{"alt":32,"src":76393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[27,76395,76397],{"className":50701,"code":76396,"language":50703,"meta":32,"style":32},"\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",[34,76398,76399,76409,76423,76431,76445,76465,76477,76485,76493,76501,76533,76564,76569,76601,76612,76645,76654,76662,76670],{"__ignoreMap":32},[37,76400,76401,76403,76405,76407],{"class":39,"line":40},[37,76402,51365],{"class":54},[37,76404,51369],{"class":51368},[37,76406,51372],{"class":2035},[37,76408,51375],{"class":54},[37,76410,76411,76413,76415,76417,76419,76421],{"class":39,"line":47},[37,76412,1113],{"class":54},[37,76414,50703],{"class":51368},[37,76416,51384],{"class":2035},[37,76418,70],{"class":54},[37,76420,51389],{"class":309},[37,76422,51375],{"class":54},[37,76424,76425,76427,76429],{"class":39,"line":58},[37,76426,1113],{"class":54},[37,76428,51402],{"class":51368},[37,76430,51375],{"class":54},[37,76432,76433,76435,76437,76439,76441,76443],{"class":39,"line":64},[37,76434,52212],{"class":54},[37,76436,51412],{"class":51368},[37,76438,51415],{"class":2035},[37,76440,70],{"class":54},[37,76442,51420],{"class":309},[37,76444,51375],{"class":54},[37,76446,76447,76449,76451,76453,76455,76457,76459,76461,76463],{"class":39,"line":76},[37,76448,52212],{"class":54},[37,76450,51412],{"class":51368},[37,76452,14992],{"class":2035},[37,76454,70],{"class":54},[37,76456,51459],{"class":309},[37,76458,51439],{"class":2035},[37,76460,70],{"class":54},[37,76462,51466],{"class":309},[37,76464,51375],{"class":54},[37,76466,76467,76469,76471,76473,76475],{"class":39,"line":92},[37,76468,52212],{"class":54},[37,76470,51475],{"class":51368},[37,76472,51478],{"class":54},[37,76474,51475],{"class":51368},[37,76476,51375],{"class":54},[37,76478,76479,76481,76483],{"class":39,"line":97},[37,76480,51853],{"class":54},[37,76482,51402],{"class":51368},[37,76484,51375],{"class":54},[37,76486,76487,76489,76491],{"class":39,"line":107},[37,76488,1113],{"class":54},[37,76490,51868],{"class":51368},[37,76492,51375],{"class":54},[37,76494,76495,76497,76499],{"class":39,"line":1390},[37,76496,52212],{"class":54},[37,76498,51881],{"class":51368},[37,76500,51375],{"class":54},[37,76502,76503,76505,76507,76509,76511,76513,76516,76518,76520,76522,76524,76526,76529,76531],{"class":39,"line":1402},[37,76504,73821],{"class":54},[37,76506,58315],{"class":2035},[37,76508,208],{"class":54},[37,76510,787],{"class":309},[37,76512,1169],{"class":50},[37,76514,76515],{"class":48045},"java",[37,76517,507],{"class":50},[37,76519,787],{"class":309},[37,76521,761],{"class":54},[37,76523,75313],{"class":2035},[37,76525,208],{"class":54},[37,76527,76528],{"class":309},"'java'",[37,76530,75823],{"class":54},[37,76532,75324],{"class":43},[37,76534,76535,76537,76539,76541,76543,76545,76547,76549,76551,76553,76555,76557,76560,76562],{"class":39,"line":1684},[37,76536,73821],{"class":54},[37,76538,58315],{"class":2035},[37,76540,208],{"class":54},[37,76542,787],{"class":309},[37,76544,1169],{"class":50},[37,76546,76515],{"class":48045},[37,76548,507],{"class":50},[37,76550,787],{"class":309},[37,76552,761],{"class":54},[37,76554,75313],{"class":2035},[37,76556,208],{"class":54},[37,76558,76559],{"class":309},"'Java'",[37,76561,75823],{"class":54},[37,76563,75447],{"class":43},[37,76565,76566],{"class":39,"line":1689},[37,76567,76568],{"class":43},"    \u002F\u002F 不区分大小写、\n",[37,76570,76571,76573,76575,76577,76579,76581,76583,76585,76587,76589,76591,76593,76595,76597,76599],{"class":39,"line":1695},[37,76572,73821],{"class":54},[37,76574,58315],{"class":2035},[37,76576,208],{"class":54},[37,76578,787],{"class":309},[37,76580,1169],{"class":50},[37,76582,76515],{"class":48045},[37,76584,507],{"class":50},[37,76586,787],{"class":309},[37,76588,645],{"class":50},[37,76590,761],{"class":54},[37,76592,75313],{"class":2035},[37,76594,208],{"class":54},[37,76596,76559],{"class":309},[37,76598,75823],{"class":54},[37,76600,75324],{"class":43},[37,76602,76603,76605,76607,76609],{"class":39,"line":1700},[37,76604,11293],{"class":50},[37,76606,73987],{"class":82},[37,76608,13636],{"class":50},[37,76610,76611],{"class":309}," 'java是一门编程语言，学完java工资很高'\n",[37,76613,76614,76616,76619,76621,76624,76627,76629,76631,76633,76635,76638,76640,76643],{"class":39,"line":1714},[37,76615,11293],{"class":50},[37,76617,76618],{"class":82}," result",[37,76620,13636],{"class":50},[37,76622,76623],{"class":54}," str.",[37,76625,76626],{"class":2035},"replace",[37,76628,208],{"class":54},[37,76630,787],{"class":309},[37,76632,76515],{"class":48045},[37,76634,787],{"class":309},[37,76636,76637],{"class":50},"ig",[37,76639,12507],{"class":54},[37,76641,76642],{"class":309},"'前端'",[37,76644,214],{"class":54},[37,76646,76647,76649,76651],{"class":39,"line":1719},[37,76648,73821],{"class":54},[37,76650,58315],{"class":2035},[37,76652,76653],{"class":54},"(result)\n",[37,76655,76656,76658,76660],{"class":39,"line":1725},[37,76657,52485],{"class":54},[37,76659,51881],{"class":51368},[37,76661,51375],{"class":54},[37,76663,76664,76666,76668],{"class":39,"line":1746},[37,76665,51853],{"class":54},[37,76667,51868],{"class":51368},[37,76669,51375],{"class":54},[37,76671,76672,76674,76676],{"class":39,"line":1751},[37,76673,51853],{"class":54},[37,76675,50703],{"class":51368},[37,76677,51375],{"class":54},[123,76679,76680],{},"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":32,"searchDepth":47,"depth":47,"links":76682},[76683,76693,76705,76722,76729,76737],{"id":53428,"depth":47,"text":53429,"children":76684},[76685,76686,76687,76688,76689,76690,76691,76692],{"id":53432,"depth":58,"text":53433},{"id":53465,"depth":58,"text":53466},{"id":53504,"depth":58,"text":53505},{"id":53662,"depth":58,"text":53663},{"id":53710,"depth":58,"text":53711},{"id":53847,"depth":58,"text":53848},{"id":54169,"depth":58,"text":54170},{"id":57157,"depth":58,"text":57158},{"id":57185,"depth":47,"text":57186,"children":76694},[76695,76696,76697,76698,76699,76700,76701,76702,76703,76704],{"id":57189,"depth":58,"text":57190},{"id":57212,"depth":58,"text":57213},{"id":58127,"depth":58,"text":58128},{"id":58817,"depth":58,"text":58818},{"id":59099,"depth":58,"text":59100},{"id":63260,"depth":58,"text":63261},{"id":63430,"depth":58,"text":63431},{"id":63558,"depth":58,"text":63559},{"id":63583,"depth":58,"text":63584},{"id":64972,"depth":58,"text":64973},{"id":66125,"depth":47,"text":66126,"children":76706},[76707,76708,76709,76710,76711,76712,76713,76714,76715,76716,76717,76718,76719,76720,76721],{"id":66129,"depth":58,"text":66130},{"id":66783,"depth":58,"text":66784},{"id":68478,"depth":58,"text":68479},{"id":68519,"depth":58,"text":68520},{"id":68561,"depth":58,"text":68562},{"id":68575,"depth":58,"text":68576},{"id":68624,"depth":58,"text":68625},{"id":68636,"depth":58,"text":68637},{"id":68651,"depth":58,"text":68652},{"id":68687,"depth":58,"text":68688},{"id":68768,"depth":58,"text":68769},{"id":68896,"depth":58,"text":68897},{"id":68908,"depth":58,"text":68909},{"id":68927,"depth":58,"text":68928},{"id":71038,"depth":58,"text":71039},{"id":71057,"depth":47,"text":71058,"children":76723},[76724,76725,76726,76727,76728],{"id":71078,"depth":58,"text":71079},{"id":71098,"depth":58,"text":71099},{"id":71147,"depth":58,"text":71148},{"id":71272,"depth":58,"text":71273},{"id":71453,"depth":58,"text":71454},{"id":71471,"depth":47,"text":71472,"children":76730},[76731,76732,76733,76734,76735,76736],{"id":71486,"depth":58,"text":71487},{"id":71545,"depth":58,"text":71546},{"id":71569,"depth":58,"text":71570},{"id":71889,"depth":58,"text":71890},{"id":71921,"depth":58,"text":71922},{"id":71944,"depth":58,"text":71945},{"id":75012,"depth":47,"text":75013,"children":76738},[76739,76740],{"id":75046,"depth":58,"text":75047},{"id":75085,"depth":58,"text":75086},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53400,"description":128},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76747,"title":76748,"body":76749,"description":128,"extension":129,"meta":92886,"navigation":131,"path":92887,"seo":92888,"stem":92889,"__hash__":92890},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76750,"toc":92822},[76751,76754,76757,76761,76765,76770,76775,76786,76790,76795,76798,76802,76805,76810,76814,76818,76821,76826,76829,76833,76836,76844,76847,76851,76856,76861,76864,76868,76873,76878,76881,76885,76890,76893,76898,76901,76906,76909,76914,76919,76922,76925,76929,76934,76939,76942,76946,76950,76953,76956,76959,76963,76967,76972,76977,76980,76984,76989,76994,76997,77000,77003,77006,77009,77012,77015,77018,77021,77026,77030,77035,77040,77043,77046,77049,77052,77055,77058,77061,77064,77068,77072,77075,77078,77081,77086,77088,77091,77094,77097,77100,77103,77106,77109,77112,77115,77118,77121,77124,77127,77132,77137,77142,77145,77149,77152,77157,77161,77163,77174,77179,77280,77283,77286,77289,77292,77295,77298,77301,77304,77306,77309,77312,77315,77318,77321,77323,77326,77329,77332,77335,77338,77341,77343,77346,77348,77350,77353,77357,77361,77364,77367,77370,77373,77376,77379,77382,77385,77388,77393,77513,77516,77519,77524,77527,77530,77533,77536,77541,77544,77547,77550,77553,77558,77561,77661,77726,77800,77804,77807,77810,77814,77817,77831,77860,77863,77866,77869,77872,77875,77878,77881,77883,77886,77889,77892,77895,77899,77904,77908,77913,77988,77991,78174,78177,78180,78183,78186,78189,78191,78194,78197,78200,78203,78206,78209,78211,78215,78218,78223,78226,78229,78232,78235,78237,78242,78245,78248,78251,78254,78256,78261,78264,78267,78269,78271,78274,78278,78281,78284,78289,78292,78295,78298,78348,78353,78357,78362,78365,78434,78437,78446,78450,78455,78458,78461,78469,78472,78489,80291,80295,80299,80304,80307,80311,80317,80323,80475,80480,80485,80488,80491,80494,80497,80500,80503,80506,80509,80512,80515,80518,80521,80526,80530,80533,80544,80548,80553,80556,80559,80562,80565,80568,80570,80573,80576,80579,80582,80584,80601,80604,80608,80611,80616,80621,80624,80627,80631,80634,80637,80646,80649,80653,80656,80661,80666,80733,80737,80740,80743,80748,80753,80839,80844,80848,80851,80854,80869,80872,80877,80881,80886,80995,80998,81009,81159,81163,81168,81277,81281,81286,81291,81296,81299,81306,81326,81362,81526,81531,81534,81539,81546,81549,81552,81555,81614,81670,81726,81730,81735,82050,82053,82057,82060,82065,82174,82179,82183,82188,82192,82263,82267,82269,82272,82275,82313,82589,82593,82610,82676,82710,82714,82717,82722,82751,82758,82767,82772,82787,82792,82801,82804,82941,82945,83007,83011,83016,83261,83265,83270,83273,83276,83279,83282,83286,83291,84872,84876,84880,84886,84889,84894,84898,84901,84906,84909,84920,84924,84929,84933,84938,84943,84946,84951,84955,84959,84962,84967,84972,84975,84978,84981,85103,85108,85210,85213,85216,85220,85225,85397,85402,85406,85409,85414,85480,85485,85488,85619,85622,85627,85630,85633,85724,85729,85732,85735,85738,85741,85746,85751,85754,85759,85764,85769,85773,85776,85779,85784,85789,85794,85799,85853,85856,85859,85864,85867,85870,85875,85880,85885,85889,85894,85908,85913,85916,85921,85925,85930,85935,85940,85945,85950,85955,85960,85965,85968,85972,85977,85980,85983,85986,85991,85996,85999,86002,86006,86009,86012,86017,86022,86027,86032,86035,86040,86045,86106,86111,86114,86119,87360,87365,87369,87373,87378,87381,87386,87391,87394,87399,87401,87406,87410,87413,87416,87427,87431,87436,87441,87496,87501,87506,87511,87722,87727,87731,87736,87739,87741,87744,87747,88194,88199,88206,88212,88215,88218,88482,88487,88491,88756,88761,88765,88770,88775,88780,88785,89116,89119,89124,89129,89132,89136,89140,89145,89150,89155,89160,89165,89170,89174,89177,89182,89187,89190,89264,89269,89274,89279,89281,89284,89654,89659,89664,89669,89672,89675,89777,89782,89787,89890,89894,89899,89903,89907,89912,89917,89920,89925,89928,89931,90324,90329,90332,90335,90338,90341,90861,90865,90870,90875,90880,90883,90888,90891,90894,91276,91281,91283,91285,91288,91291,91803,91807,91868,91871,91874,91877,91881,91884,91889,91894,92819],[10,76752,76748],{"id":76753},"_4js进阶",[14,76755,76756],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[146,76758,76760],{"id":76759},"_41-作用域","4.1 作用域",[175,76762,76764],{"id":76763},"_411-局部作用域","4.1.1 局部作用域",[14,76766,76767],{},[119,76768],{"alt":32,"src":76769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,76771,76772],{},[119,76773],{"alt":32,"src":76774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1210,76776,76777,76780,76783],{},[161,76778,76779],{},"函数作用域在函数内部",[161,76781,76782],{},"块级作用域在{}",[161,76784,76785],{},"对象的那个{}不是作用域，不是块作用域",[175,76787,76789],{"id":76788},"_412-全局作用域","4.1.2 全局作用域",[14,76791,76792],{},[119,76793],{"alt":32,"src":76794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,76796,76797],{},"window.a=10不要这样写",[175,76799,76801],{"id":76800},"_413-作用域链","4.1.3 作用域链",[14,76803,76804],{},"变量查找机制",[14,76806,76807],{},[119,76808],{"alt":32,"src":76809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[146,76811,76813],{"id":76812},"_42-垃圾回收机制","4.2 垃圾回收机制",[175,76815,76817],{"id":76816},"_421-大体介绍","4.2.1 大体介绍",[14,76819,76820],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,76822,76823],{},[119,76824],{"alt":32,"src":76825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,76827,76828],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[175,76830,76832],{"id":76831},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,76834,76835],{},"堆栈空间分配区别：",[158,76837,76838,76841],{},[161,76839,76840],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[161,76842,76843],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,76845,76846],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22070,76848,76850],{"id":76849},"_4221-引用计数","4.2.2.1 引用计数",[14,76852,76853],{},[119,76854],{"alt":32,"src":76855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,76857,76858],{},[119,76859],{"alt":32,"src":76860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,76862,76863],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22070,76865,76867],{"id":76866},"_4222-标记清除法","4.2.2.2 标记清除法",[14,76869,76870],{},[119,76871],{"alt":32,"src":76872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,76874,76875],{},[119,76876],{"alt":32,"src":76877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,76879,76880],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[146,76882,76884],{"id":76883},"_43-闭包","4.3 闭包",[14,76886,76887],{},[119,76888],{"alt":32,"src":76889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,76891,76892],{},"闭包：内层函数+外层函数的变量",[14,76894,76895],{},[119,76896],{"alt":32,"src":76897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,76899,76900],{},"closure就是闭包",[14,76902,76903],{},[119,76904],{"alt":32,"src":76905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,76907,76908],{},"内层函数必须包含外层函数的变量才是闭包",[14,76910,76911],{},[119,76912],{"alt":32,"src":76913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,76915,76916],{},[119,76917],{"alt":32,"src":76918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,76920,76921],{},"闭包可能会引起内存泄漏",[14,76923,76924],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[146,76926,76928],{"id":76927},"_44-变量提升","4.4 变量提升",[14,76930,76931],{},[119,76932],{"alt":32,"src":76933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,76935,76936],{},[119,76937],{"alt":32,"src":76938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,76940,76941],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[146,76943,76945],{"id":76944},"_45-函数进阶","4.5 函数进阶",[175,76947,76949],{"id":76948},"_451-函数提升","4.5.1 函数提升",[14,76951,76952],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,76954,76955],{},"只提升函数声明，不提升函数调用",[51881,76957,76958],{},"\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",[175,76960,76962],{"id":76961},"_452-函数参数","4.5.2 函数参数",[22070,76964,76966],{"id":76965},"_4521-动态参数","4.5.2.1 动态参数",[14,76968,76969],{},[119,76970],{"alt":32,"src":76971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,76973,76974],{},[119,76975],{"alt":32,"src":76976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,76978,76979],{},"箭头函数里边没有arguments",[22070,76981,76983],{"id":76982},"_4522-剩余参数","4.5.2.2 剩余参数",[14,76985,76986],{},[119,76987],{"alt":32,"src":76988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,76990,76991],{},[119,76992],{"alt":32,"src":76993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,76995,76996],{},"剩余参数使用的时候不需要写...",[14,76998,76999],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,77001,77002],{},"  function getSum(a,b,...arr) {",[14,77004,77005],{},"  console.log(11)",[14,77007,77008],{},"  }",[14,77010,77011],{},"  getSum(1,2,3,4)",[14,77013,77014],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,77016,77017],{},"  getSum(1,2)",[14,77019,77020],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,77022,77023],{},[119,77024],{"alt":32,"src":77025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22070,77027,77029],{"id":77028},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,77031,77032],{},[119,77033],{"alt":32,"src":77034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,77036,77037],{},[119,77038],{"alt":32,"src":77039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,77041,77042],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,77044,77045],{},"展开运算符可以用于数组之间的合并：",[14,77047,77048],{},"const arr1 = [1, 2, 3]",[14,77050,77051],{},"const arr2 = [3, 4, 5]",[14,77053,77054],{},"const arr = [...arr1, ...arr2]",[14,77056,77057],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,77059,77060],{},"剩余参数：函数参数使用，得到真数组",[14,77062,77063],{},"展开运算符：数组中使用，数组展开",[175,77065,77067],{"id":77066},"_453-箭头函数","4.5.3 箭头函数",[22070,77069,77071],{"id":77070},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,77073,77074],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,77076,77077],{},"它不是万能的！！！",[14,77079,77080],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,77082,77083],{},[119,77084],{"alt":32,"src":77085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77087,237],{},[14,77089,77090],{},"① 只有一个形参的时候，可以省略小括号：",[14,77092,77093],{},"const fn=x=>{console.log(x)}",[14,77095,77096],{},"② 只有一行代码时可以省略大括号：",[14,77098,77099],{},"const fn=x=>console.log(11)",[14,77101,77102],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77104,77105],{},"const fn=x=>x+x",[14,77107,77108],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77110,77111],{},"⑤ 阻止表单默认提交：",[14,77113,77114],{},"const form = document.querySelector('form')",[14,77116,77117],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77119,77120],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77122,77123],{},"const fn=uname=>({uname:uname})",[14,77125,77126],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77128,77129],{},[119,77130],{"alt":32,"src":77131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77133,77134],{},[119,77135],{"alt":32,"src":77136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77138,77139],{},[119,77140],{"alt":32,"src":77141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77143,77144],{},"一定不要忘记用()，有()就理解为自带return",[22070,77146,77148],{"id":77147},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77150,77151],{},"箭头函数是没有动态参数的arguments",[14,77153,77154],{},[119,77155],{"alt":32,"src":77156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22070,77158,77160],{"id":77159},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77162,11404],{},[158,77164,77165,77168,77171],{},[161,77166,77167],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[161,77169,77170],{},"事件回调函数使用箭头函数时，this 为全局的 window",[161,77172,77173],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77175,77176],{},[119,77177],{"alt":32,"src":77178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[27,77180,77182],{"className":53135,"code":77181,"language":53137,"meta":32,"style":32},"  \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",[34,77183,77184,77192,77197,77202,77207,77212,77217,77221,77226,77230,77234,77239,77244,77249,77253,77257,77262,77267,77272],{"__ignoreMap":32},[37,77185,77186,77188,77190],{"class":39,"line":40},[37,77187,52212],{"class":54},[37,77189,51881],{"class":51368},[37,77191,51375],{"class":54},[37,77193,77194],{"class":39,"line":47},[37,77195,77196],{"class":54},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[37,77198,77199],{"class":39,"line":58},[37,77200,77201],{"class":54},"    console.log(this) \u002F\u002F指向window\n",[37,77203,77204],{"class":39,"line":64},[37,77205,77206],{"class":54},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[37,77208,77209],{"class":39,"line":76},[37,77210,77211],{"class":54},"    function fn() {\n",[37,77213,77214],{"class":39,"line":92},[37,77215,77216],{"class":54},"      console.log(this)  \u002F\u002F指向window\n",[37,77218,77219],{"class":39,"line":97},[37,77220,2259],{"class":54},[37,77222,77223],{"class":39,"line":107},[37,77224,77225],{"class":54},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[37,77227,77228],{"class":39,"line":1390},[37,77229,2472],{"emptyLinePlaceholder":131},[37,77231,77232],{"class":39,"line":1402},[37,77233,71591],{"class":54},[37,77235,77236],{"class":39,"line":1684},[37,77237,77238],{"class":54},"      name: 'andy',\n",[37,77240,77241],{"class":39,"line":1689},[37,77242,77243],{"class":54},"      sayHai: function () {\n",[37,77245,77246],{"class":39,"line":1695},[37,77247,77248],{"class":54},"        console.log(this)\n",[37,77250,77251],{"class":39,"line":1700},[37,77252,52466],{"class":54},[37,77254,77255],{"class":39,"line":1714},[37,77256,2259],{"class":54},[37,77258,77259],{"class":39,"line":1719},[37,77260,77261],{"class":54},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[37,77263,77264],{"class":39,"line":1725},[37,77265,77266],{"class":54},"    \u002F\u002F 2.箭头函数的this\n",[37,77268,77269],{"class":39,"line":1746},[37,77270,77271],{"class":54},"    const fn = () => console.log(this)\n",[37,77273,77274,77276,77278],{"class":39,"line":1751},[37,77275,52485],{"class":54},[37,77277,51881],{"class":51368},[37,77279,51375],{"class":54},[14,77281,77282],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77284,77285],{},"const fn = () => console.log(this)",[14,77287,77288],{},"fn() \u002F\u002F指向window",[14,77290,77291],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77293,77294],{},"①",[14,77296,77297],{},"const obj = {",[14,77299,77300],{},"uname: 'pink老师',",[14,77302,77303],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77305,1149],{},[14,77307,77308],{},"调用对象里边的函数",[14,77310,77311],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77313,77314],{},"obj.sayHai()",[14,77316,77317],{},"②",[14,77319,77320],{},"const obj1 = {",[14,77322,77300],{},[14,77324,77325],{},"sayHai: function () {",[14,77327,77328],{},"let i = 10",[14,77330,77331],{},"const count = () => {",[14,77333,77334],{},"console.log(this)",[14,77336,77337],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77339,77340],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77342,1149],{},[14,77344,77345],{},"count()",[14,77347,1149],{},[14,77349,1149],{},[14,77351,77352],{},"obj1.sayHai()",[146,77354,77356],{"id":77355},"_46-解构赋值","4.6 解构赋值",[175,77358,77360],{"id":77359},"_461-数组解构","4.6.1 数组解构",[14,77362,77363],{},"以前要是使用数组中的值的话：",[14,77365,77366],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,77368,77369],{},"const arr=[100,60,80]",[14,77371,77372],{},"const max=arr[0]",[14,77374,77375],{},"const min=arr[1]",[14,77377,77378],{},"const avg=arr[2]",[14,77380,77381],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,77383,77384],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,77386,77387],{},"这个写法就类似于上边的那种用很多const的方法",[14,77389,77390],{},[119,77391],{"alt":32,"src":77392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[27,77394,77396],{"className":50701,"code":77395,"language":50703,"meta":32,"style":32},"①变量之间交换值:\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",[34,77397,77398,77403,77408,77413,77418,77423,77427,77431,77436,77440,77445,77450,77454,77459,77464,77475,77485,77490,77495,77500,77504,77508],{"__ignoreMap":32},[37,77399,77400],{"class":39,"line":40},[37,77401,77402],{"class":54},"①变量之间交换值:\n",[37,77404,77405],{"class":39,"line":47},[37,77406,77407],{"class":54},"let a=1\n",[37,77409,77410],{"class":39,"line":58},[37,77411,77412],{"class":54},"let b=2;\n",[37,77414,77415],{"class":39,"line":64},[37,77416,77417],{"class":54},"必须加这行代码，不然就会报错\n",[37,77419,77420],{"class":39,"line":76},[37,77421,77422],{"class":54},"[b,a]=[a,b]\n",[37,77424,77425],{"class":39,"line":92},[37,77426,2472],{"emptyLinePlaceholder":131},[37,77428,77429],{"class":39,"line":97},[37,77430,2472],{"emptyLinePlaceholder":131},[37,77432,77433],{"class":39,"line":107},[37,77434,77435],{"class":54},"可以写成下面的方式：\n",[37,77437,77438],{"class":39,"line":1390},[37,77439,77407],{"class":54},[37,77441,77442],{"class":39,"line":1402},[37,77443,77444],{"class":54},"let b=2\n",[37,77446,77447],{"class":39,"line":1684},[37,77448,77449],{"class":54},";[b,a]=[a,b]\n",[37,77451,77452],{"class":39,"line":1689},[37,77453,2472],{"emptyLinePlaceholder":131},[37,77455,77456],{"class":39,"line":1695},[37,77457,77458],{"class":54},"②排序\n",[37,77460,77461],{"class":39,"line":1700},[37,77462,77463],{"class":54},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[37,77465,77466,77469,77472],{"class":39,"line":1714},[37,77467,77468],{"class":54},"for (let i = 0; i ",[37,77470,1113],{"class":77471},"s7hpK",[37,77473,77474],{"class":54}," arr1.length; i++) {\n",[37,77476,77477,77480,77482],{"class":39,"line":1719},[37,77478,77479],{"class":54},"   for (let j = 0; j ",[37,77481,1113],{"class":77471},[37,77483,77484],{"class":54}," arr1.length - 1; j++) {\n",[37,77486,77487],{"class":39,"line":1725},[37,77488,77489],{"class":54},"      if (arr1[j] > arr1[j + 1]) {\n",[37,77491,77492],{"class":39,"line":1746},[37,77493,77494],{"class":54},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[37,77496,77497],{"class":39,"line":1751},[37,77498,77499],{"class":54},"       }\n",[37,77501,77502],{"class":39,"line":1765},[37,77503,4381],{"class":54},[37,77505,77506],{"class":39,"line":1770},[37,77507,1637],{"class":54},[37,77509,77510],{"class":39,"line":1799},[37,77511,77512],{"class":54},"console.log(arr1)\n",[14,77514,77515],{},"数组解构的细节：",[14,77517,77518],{},"①变量多，单元值少",[14,77520,77521],{},[119,77522],{"alt":32,"src":77523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,77525,77526],{},"防止出现undefined的方法：",[14,77528,77529],{},"const [a=0,b=0] =[1]",[14,77531,77532],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,77534,77535],{},"②变量少，单元值多",[14,77537,77538],{},[119,77539],{"alt":32,"src":77540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,77542,77543],{},"此时可以使用剩余参数来接收多余的值",[14,77545,77546],{},"const [a,b,...c]=[1,2,3,4]",[14,77548,77549],{},"console.log(c) 输出[3,4]",[14,77551,77552],{},"③可以按需导入，忽略某些返回值",[14,77554,77555],{},[119,77556],{"alt":32,"src":77557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,77559,77560],{},"④支持多维数组的结构",[27,77562,77566],{"className":77563,"code":77564,"language":77565,"meta":32,"style":32},"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",[34,77567,77568,77596,77612,77627,77642],{"__ignoreMap":32},[37,77569,77570,77572,77574,77576,77578,77580,77582,77584,77587,77589,77591,77593],{"class":39,"line":40},[37,77571,6864],{"class":50},[37,77573,51901],{"class":54},[37,77575,70],{"class":50},[37,77577,52294],{"class":54},[37,77579,422],{"class":82},[37,77581,12507],{"class":54},[37,77583,282],{"class":82},[37,77585,77586],{"class":54},", [",[37,77588,276],{"class":82},[37,77590,12507],{"class":54},[37,77592,498],{"class":82},[37,77594,77595],{"class":54},"]]\n",[37,77597,77598,77601,77603,77605,77607,77609],{"class":39,"line":47},[37,77599,77600],{"class":54},"console.",[37,77602,58315],{"class":2035},[37,77604,3923],{"class":54},[37,77606,396],{"class":82},[37,77608,4288],{"class":54},[37,77610,77611],{"class":43},"  \u002F\u002F1\n",[37,77613,77614,77616,77618,77620,77622,77624],{"class":39,"line":58},[37,77615,77600],{"class":54},[37,77617,58315],{"class":2035},[37,77619,3923],{"class":54},[37,77621,422],{"class":82},[37,77623,4288],{"class":54},[37,77625,77626],{"class":43},"  \u002F\u002F2\n",[37,77628,77629,77631,77633,77635,77637,77639],{"class":39,"line":64},[37,77630,77600],{"class":54},[37,77632,58315],{"class":2035},[37,77634,3923],{"class":54},[37,77636,282],{"class":82},[37,77638,4288],{"class":54},[37,77640,77641],{"class":43},"  \u002F\u002F[3,4]\n",[37,77643,77644,77646,77648,77650,77652,77654,77656,77658],{"class":39,"line":76},[37,77645,77600],{"class":54},[37,77647,58315],{"class":2035},[37,77649,3923],{"class":54},[37,77651,282],{"class":82},[37,77653,4973],{"class":54},[37,77655,396],{"class":82},[37,77657,4288],{"class":54},[37,77659,77660],{"class":43},"  \u002F\u002F3\n",[27,77662,77664],{"className":77563,"code":77663,"language":77565,"meta":32,"style":32},"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",[34,77665,77666,77693,77704,77715],{"__ignoreMap":32},[37,77667,77668,77670,77673,77675,77677,77679,77681,77683,77685,77687,77689,77691],{"class":39,"line":40},[37,77669,6864],{"class":50},[37,77671,77672],{"class":54}," [a, b, c] ",[37,77674,70],{"class":50},[37,77676,52294],{"class":54},[37,77678,422],{"class":82},[37,77680,12507],{"class":54},[37,77682,282],{"class":82},[37,77684,77586],{"class":54},[37,77686,276],{"class":82},[37,77688,12507],{"class":54},[37,77690,498],{"class":82},[37,77692,77595],{"class":54},[37,77694,77695,77697,77699,77702],{"class":39,"line":47},[37,77696,77600],{"class":54},[37,77698,58315],{"class":2035},[37,77700,77701],{"class":54},"(a)",[37,77703,77611],{"class":43},[37,77705,77706,77708,77710,77713],{"class":39,"line":58},[37,77707,77600],{"class":54},[37,77709,58315],{"class":2035},[37,77711,77712],{"class":54},"(b)",[37,77714,77626],{"class":43},[37,77716,77717,77719,77721,77724],{"class":39,"line":64},[37,77718,77600],{"class":54},[37,77720,58315],{"class":2035},[37,77722,77723],{"class":54},"(c)",[37,77725,77641],{"class":43},[27,77727,77729],{"className":77563,"code":77728,"language":77565,"meta":32,"style":32},"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",[34,77730,77731,77758,77768,77778,77788],{"__ignoreMap":32},[37,77732,77733,77735,77738,77740,77742,77744,77746,77748,77750,77752,77754,77756],{"class":39,"line":40},[37,77734,6864],{"class":50},[37,77736,77737],{"class":54}," [a, b, [c, d]] ",[37,77739,70],{"class":50},[37,77741,52294],{"class":54},[37,77743,422],{"class":82},[37,77745,12507],{"class":54},[37,77747,282],{"class":82},[37,77749,77586],{"class":54},[37,77751,276],{"class":82},[37,77753,12507],{"class":54},[37,77755,498],{"class":82},[37,77757,77595],{"class":54},[37,77759,77760,77762,77764,77766],{"class":39,"line":47},[37,77761,77600],{"class":54},[37,77763,58315],{"class":2035},[37,77765,77701],{"class":54},[37,77767,77611],{"class":43},[37,77769,77770,77772,77774,77776],{"class":39,"line":58},[37,77771,77600],{"class":54},[37,77773,58315],{"class":2035},[37,77775,77712],{"class":54},[37,77777,77626],{"class":43},[37,77779,77780,77782,77784,77786],{"class":39,"line":64},[37,77781,77600],{"class":54},[37,77783,58315],{"class":2035},[37,77785,77723],{"class":54},[37,77787,77660],{"class":43},[37,77789,77790,77792,77794,77797],{"class":39,"line":76},[37,77791,77600],{"class":54},[37,77793,58315],{"class":2035},[37,77795,77796],{"class":54},"(d)",[37,77798,77799],{"class":43},"  \u002F\u002F4\n",[175,77801,77803],{"id":77802},"_462-对象解构","4.6.2 对象解构",[14,77805,77806],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,77808,77809],{},"用的非常非常多！！！！！！",[22070,77811,77813],{"id":77812},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,77815,77816],{},"基本语法：",[158,77818,77819,77822,77825,77828],{},[161,77820,77821],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[161,77823,77824],{},"对象属性的值将被赋值给与属性名相同的变量",[161,77826,77827],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[161,77829,77830],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[27,77832,77834],{"className":50701,"code":77833,"language":50703,"meta":32,"style":32},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[34,77835,77836,77841,77846,77851,77855],{"__ignoreMap":32},[37,77837,77838],{"class":39,"line":40},[37,77839,77840],{"class":54},"const obj = {\n",[37,77842,77843],{"class":39,"line":47},[37,77844,77845],{"class":54},"   uname: 'pink老师',\n",[37,77847,77848],{"class":39,"line":58},[37,77849,77850],{"class":54},"   age: 18,\n",[37,77852,77853],{"class":39,"line":64},[37,77854,1637],{"class":54},[37,77856,77857],{"class":39,"line":76},[37,77858,77859],{"class":54},"const { uname, age } = obj\n",[14,77861,77862],{},"上方代码这样写等价于：",[14,77864,77865],{},"const uname等价于obj.uname",[14,77867,77868],{},"变量名可以重新改名：",[14,77870,77871],{},"const uname='red老师'",[14,77873,77874],{},"const user={",[14,77876,77877],{},"  uname:'pink老师',",[14,77879,77880],{},"  age:18",[14,77882,1149],{},[14,77884,77885],{},"const {uname,age}=user",[14,77887,77888],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,77890,77891],{},"const {旧变量名：新变量名}=对象",[14,77893,77894],{},"const {uname:username,age}=user",[22070,77896,77898],{"id":77897},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,77900,77901],{},[119,77902],{"alt":32,"src":77903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22070,77905,77907],{"id":77906},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,77909,77910],{},[119,77911],{"alt":32,"src":77912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[27,77914,77916],{"className":53135,"code":77915,"language":53137,"meta":32,"style":32},"  \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",[34,77917,77918,77926,77931,77936,77941,77946,77951,77956,77961,77966,77970,77975,77980],{"__ignoreMap":32},[37,77919,77920,77922,77924],{"class":39,"line":40},[37,77921,52212],{"class":54},[37,77923,51881],{"class":51368},[37,77925,51375],{"class":54},[37,77927,77928],{"class":39,"line":47},[37,77929,77930],{"class":54},"    const pig = {\n",[37,77932,77933],{"class":39,"line":58},[37,77934,77935],{"class":54},"      name: '佩奇',\n",[37,77937,77938],{"class":39,"line":64},[37,77939,77940],{"class":54},"      family: {\n",[37,77942,77943],{"class":39,"line":76},[37,77944,77945],{"class":54},"        mother: '猪妈妈',\n",[37,77947,77948],{"class":39,"line":92},[37,77949,77950],{"class":54},"        father: '猪爸爸',\n",[37,77952,77953],{"class":39,"line":97},[37,77954,77955],{"class":54},"        sister: '乔治'\n",[37,77957,77958],{"class":39,"line":107},[37,77959,77960],{"class":54},"      },\n",[37,77962,77963],{"class":39,"line":1390},[37,77964,77965],{"class":54},"      age: 6\n",[37,77967,77968],{"class":39,"line":1402},[37,77969,2259],{"class":54},[37,77971,77972],{"class":39,"line":1684},[37,77973,77974],{"class":54},"    \u002F\u002F 多级对象解构\n",[37,77976,77977],{"class":39,"line":1689},[37,77978,77979],{"class":54},"    const { name, family: { mother, father, sister }, age } = pig\n",[37,77981,77982,77984,77986],{"class":39,"line":1695},[37,77983,52485],{"class":54},[37,77985,51881],{"class":51368},[37,77987,51375],{"class":54},[14,77989,77990],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[27,77992,77995],{"className":77993,"code":77994,"language":76515,"meta":32,"style":32},"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",[34,77996,77997,78002,78013,78025,78037,78046,78050,78061,78073,78083,78088,78092,78102,78113,78122,78126,78130,78141,78152,78161,78165,78170],{"__ignoreMap":32},[37,77998,77999],{"class":39,"line":40},[37,78000,78001],{"class":43},"    \u002F\u002F 这是后台传递过来的数据\n",[37,78003,78004,78006,78009,78011],{"class":39,"line":47},[37,78005,11293],{"class":50},[37,78007,78008],{"class":54}," msg ",[37,78010,70],{"class":50},[37,78012,15644],{"class":54},[37,78014,78015,78018,78020,78023],{"class":39,"line":58},[37,78016,78017],{"class":309},"      \"code\"",[37,78019,1062],{"class":50},[37,78021,78022],{"class":82}," 200",[37,78024,31536],{"class":54},[37,78026,78027,78030,78032,78035],{"class":39,"line":64},[37,78028,78029],{"class":309},"      \"msg\"",[37,78031,1062],{"class":50},[37,78033,78034],{"class":309}," \"获取新闻列表成功\"",[37,78036,31536],{"class":54},[37,78038,78039,78042,78044],{"class":39,"line":76},[37,78040,78041],{"class":309},"      \"data\"",[37,78043,1062],{"class":50},[37,78045,55515],{"class":54},[37,78047,78048],{"class":39,"line":92},[37,78049,2582],{"class":54},[37,78051,78052,78055,78057,78059],{"class":39,"line":97},[37,78053,78054],{"class":309},"          \"id\"",[37,78056,1062],{"class":50},[37,78058,25191],{"class":82},[37,78060,31536],{"class":54},[37,78062,78063,78066,78068,78071],{"class":39,"line":107},[37,78064,78065],{"class":309},"          \"title\"",[37,78067,1062],{"class":50},[37,78069,78070],{"class":309}," \"5G商用自己，三大运用商收入下降\"",[37,78072,31536],{"class":54},[37,78074,78075,78078,78080],{"class":39,"line":1390},[37,78076,78077],{"class":309},"          \"count\"",[37,78079,1062],{"class":50},[37,78081,78082],{"class":82}," 58\n",[37,78084,78085],{"class":39,"line":1402},[37,78086,78087],{"class":54},"        },\n",[37,78089,78090],{"class":39,"line":1684},[37,78091,2582],{"class":54},[37,78093,78094,78096,78098,78100],{"class":39,"line":1689},[37,78095,78054],{"class":309},[37,78097,1062],{"class":50},[37,78099,14827],{"class":82},[37,78101,31536],{"class":54},[37,78103,78104,78106,78108,78111],{"class":39,"line":1695},[37,78105,78065],{"class":309},[37,78107,1062],{"class":50},[37,78109,78110],{"class":309}," \"国际媒体头条速览\"",[37,78112,31536],{"class":54},[37,78114,78115,78117,78119],{"class":39,"line":1700},[37,78116,78077],{"class":309},[37,78118,1062],{"class":50},[37,78120,78121],{"class":82}," 56\n",[37,78123,78124],{"class":39,"line":1714},[37,78125,78087],{"class":54},[37,78127,78128],{"class":39,"line":1719},[37,78129,2582],{"class":54},[37,78131,78132,78134,78136,78139],{"class":39,"line":1725},[37,78133,78054],{"class":309},[37,78135,1062],{"class":50},[37,78137,78138],{"class":82}," 3",[37,78140,31536],{"class":54},[37,78142,78143,78145,78147,78150],{"class":39,"line":1746},[37,78144,78065],{"class":309},[37,78146,1062],{"class":50},[37,78148,78149],{"class":309}," \"乌克兰和俄罗斯持续冲突\"",[37,78151,31536],{"class":54},[37,78153,78154,78156,78158],{"class":39,"line":1751},[37,78155,78077],{"class":309},[37,78157,1062],{"class":50},[37,78159,78160],{"class":82}," 1669\n",[37,78162,78163],{"class":39,"line":1765},[37,78164,78087],{"class":54},[37,78166,78167],{"class":39,"line":1770},[37,78168,78169],{"class":54},"      ]\n",[37,78171,78172],{"class":39,"line":1799},[37,78173,2259],{"class":54},[14,78175,78176],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78178,78179],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78181,78182],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[14,78184,78185],{},"function({data}) {",[14,78187,78188],{},"console.log(data)",[14,78190,1149],{},[14,78192,78193],{},"render(msg)",[14,78195,78196],{},"实参传递给形参的时候解构了",[14,78198,78199],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78201,78202],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78204,78205],{},"function render({data:mydata}) {",[14,78207,78208],{},"  console.log(data)",[14,78210,1149],{},[175,78212,78214],{"id":78213},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78216,78217],{},"有两种情况：一个是数组结构，一个是立即执行函数",[158,78219,78220],{},[161,78221,78222],{},"如果对一个数组进行遍历，有两种方式：",[14,78224,78225],{},"①法1",[14,78227,78228],{},"const arr=[1,2,3]",[14,78230,78231],{},"arr.map(function(item,index) {",[14,78233,78234],{},"  console.log(item)",[14,78236,52532],{},[14,78238,78239],{},[119,78240],{"alt":32,"src":78241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78243,78244],{},"②法2",[14,78246,78247],{},"const str='pink'",[14,78249,78250],{},"[1,2,3].map(function(item,index) {",[14,78252,78253],{},"console.log(item)",[14,78255,52532],{},[14,78257,78258],{},[119,78259],{"alt":32,"src":78260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78262,78263],{},"此时会报错",[14,78265,78266],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78268,78253],{},[14,78270,52532],{},[14,78272,78273],{},"内部会当成这样处理，所以我们用分号进行隔开",[146,78275,78277],{"id":78276},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78279,78280],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78282,78283],{},"可以理解为加强版的for循环",[14,78285,78286],{},[119,78287],{"alt":32,"src":78288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78290,78291],{},"里边不写return，不返回数组，只遍历不返回",[14,78293,78294],{},"map是返回数组",[14,78296,78297],{},"forEach主要用于遍历数组对象",[27,78299,78301],{"className":53135,"code":78300,"language":53137,"meta":32,"style":32},"  \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",[34,78302,78303,78311,78316,78321,78326,78331,78335,78340],{"__ignoreMap":32},[37,78304,78305,78307,78309],{"class":39,"line":40},[37,78306,52212],{"class":54},[37,78308,51881],{"class":51368},[37,78310,51375],{"class":54},[37,78312,78313],{"class":39,"line":47},[37,78314,78315],{"class":54},"    const arr = ['red', 'green', 'pink']\n",[37,78317,78318],{"class":39,"line":58},[37,78319,78320],{"class":54},"    const result = arr.forEach(function (item, index) {\n",[37,78322,78323],{"class":39,"line":64},[37,78324,78325],{"class":54},"      console.log(item)\n",[37,78327,78328],{"class":39,"line":76},[37,78329,78330],{"class":54},"      console.log(index)\n",[37,78332,78333],{"class":39,"line":92},[37,78334,33530],{"class":54},[37,78336,78337],{"class":39,"line":97},[37,78338,78339],{"class":54},"    console.log(result)\n",[37,78341,78342,78344,78346],{"class":39,"line":107},[37,78343,52485],{"class":54},[37,78345,51881],{"class":51368},[37,78347,51375],{"class":54},[14,78349,78350],{},[119,78351],{"alt":32,"src":78352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[146,78354,78356],{"id":78355},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,78358,78359],{},[119,78360],{"alt":32,"src":78361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,78363,78364],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[27,78366,78368],{"className":53135,"code":78367,"language":53137,"meta":32,"style":32},"\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",[34,78369,78370,78378,78386,78391,78396,78400,78404,78409,78413,78418,78426],{"__ignoreMap":32},[37,78371,78372,78374,78376],{"class":39,"line":40},[37,78373,1113],{"class":54},[37,78375,51868],{"class":51368},[37,78377,51375],{"class":54},[37,78379,78380,78382,78384],{"class":39,"line":47},[37,78381,52212],{"class":54},[37,78383,51881],{"class":51368},[37,78385,51375],{"class":54},[37,78387,78388],{"class":39,"line":58},[37,78389,78390],{"class":54},"    const arr = [10, 20, 30]\n",[37,78392,78393],{"class":39,"line":64},[37,78394,78395],{"class":54},"    const newArr = arr.filter(function (item, index) {\n",[37,78397,78398],{"class":39,"line":76},[37,78399,78325],{"class":54},[37,78401,78402],{"class":39,"line":92},[37,78403,78330],{"class":54},[37,78405,78406],{"class":39,"line":97},[37,78407,78408],{"class":54},"      return item >= 20\n",[37,78410,78411],{"class":39,"line":107},[37,78412,33530],{"class":54},[37,78414,78415],{"class":39,"line":1390},[37,78416,78417],{"class":54},"    console.log(newArr)\n",[37,78419,78420,78422,78424],{"class":39,"line":1402},[37,78421,52485],{"class":54},[37,78423,51881],{"class":51368},[37,78425,51375],{"class":54},[37,78427,78428,78430,78432],{"class":39,"line":1684},[37,78429,51853],{"class":54},[37,78431,51868],{"class":51368},[37,78433,51375],{"class":54},[14,78435,78436],{},"这个也可以写成箭头函数：",[27,78438,78440],{"className":50701,"code":78439,"language":50703,"meta":32,"style":32},"const newArr = arr.filter(item => item >= 20)\n",[34,78441,78442],{"__ignoreMap":32},[37,78443,78444],{"class":39,"line":40},[37,78445,78439],{"class":54},[146,78447,78449],{"id":78448},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,78451,78452],{},[119,78453],{"alt":32,"src":78454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,78456,78457],{},"步骤：",[14,78459,78460],{},"①：渲染页面模块",[1210,78462,78463,78466],{},[161,78464,78465],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[161,78467,78468],{},"用forEach+字符串的形式",[14,78470,78471],{},"②：点击不同需求，显示不同页面内容",[1210,78473,78474,78477,78480,78483,78486],{},[161,78475,78476],{},"点击采取事件委托方式 .filter",[161,78478,78479],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[161,78481,78482],{},"筛选条件是根据点击的 data-index 来判断",[161,78484,78485],{},"可以使用对象解构，把事件对象解构",[161,78487,78488],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[27,78490,78492],{"className":50701,"code":78491,"language":50703,"meta":32,"style":32},"\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",[34,78493,78494,78504,78518,78522,78530,78544,78564,78576,78584,78590,78600,78610,78620,78624,78628,78634,78647,78659,78669,78681,78685,78689,78696,78709,78721,78738,78756,78769,78773,78777,78789,78799,78803,78807,78814,78855,78882,78892,78896,78900,78908,78920,78924,78928,78936,78948,78960,78971,78975,78979,78988,79000,79011,79015,79019,79028,79040,79052,79056,79060,79067,79077,79089,79101,79116,79120,79124,79132,79148,79158,79168,79178,79190,79194,79198,79208,79219,79229,79233,79241,79249,79253,79261,79276,79302,79327,79352,79371,79379,79393,79398,79403,79408,79413,79418,79426,79434,79439,79450,79455,79465,79475,79485,79495,79499,79503,79512,79521,79530,79539,79543,79547,79556,79565,79574,79583,79587,79591,79600,79609,79618,79627,79631,79635,79644,79653,79662,79671,79675,79679,79688,79697,79706,79715,79719,79723,79732,79741,79750,79759,79763,79767,79776,79785,79793,79802,79806,79810,79814,79819,79831,79836,79848,79852,79869,79897,79906,79911,79921,79931,79940,79945,79950,79954,79959,79976,79980,79985,79993,79998,80025,80030,80050,80055,80067,80072,80077,80082,80093,80107,80144,80162,80195,80212,80236,80240,80245,80251,80255,80259,80263,80271,80279,80283],{"__ignoreMap":32},[37,78495,78496,78498,78500,78502],{"class":39,"line":40},[37,78497,51365],{"class":54},[37,78499,51369],{"class":51368},[37,78501,51372],{"class":2035},[37,78503,51375],{"class":54},[37,78505,78506,78508,78510,78512,78514,78516],{"class":39,"line":47},[37,78507,1113],{"class":54},[37,78509,50703],{"class":51368},[37,78511,51384],{"class":2035},[37,78513,70],{"class":54},[37,78515,51389],{"class":309},[37,78517,51375],{"class":54},[37,78519,78520],{"class":39,"line":58},[37,78521,2472],{"emptyLinePlaceholder":131},[37,78523,78524,78526,78528],{"class":39,"line":64},[37,78525,1113],{"class":54},[37,78527,51402],{"class":51368},[37,78529,51375],{"class":54},[37,78531,78532,78534,78536,78538,78540,78542],{"class":39,"line":76},[37,78533,52212],{"class":54},[37,78535,51412],{"class":51368},[37,78537,51415],{"class":2035},[37,78539,70],{"class":54},[37,78541,51420],{"class":309},[37,78543,51375],{"class":54},[37,78545,78546,78548,78550,78552,78554,78556,78558,78560,78562],{"class":39,"line":92},[37,78547,52212],{"class":54},[37,78549,51412],{"class":51368},[37,78551,14992],{"class":2035},[37,78553,70],{"class":54},[37,78555,51459],{"class":309},[37,78557,51439],{"class":2035},[37,78559,70],{"class":54},[37,78561,51466],{"class":309},[37,78563,51375],{"class":54},[37,78565,78566,78568,78570,78572,78574],{"class":39,"line":97},[37,78567,52212],{"class":54},[37,78569,51475],{"class":51368},[37,78571,51478],{"class":54},[37,78573,51475],{"class":51368},[37,78575,51375],{"class":54},[37,78577,78578,78580,78582],{"class":39,"line":107},[37,78579,52212],{"class":54},[37,78581,123],{"class":51368},[37,78583,51375],{"class":54},[37,78585,78586,78588],{"class":39,"line":1390},[37,78587,6475],{"class":51368},[37,78589,15644],{"class":54},[37,78591,78592,78594,78596,78598],{"class":39,"line":1402},[37,78593,54763],{"class":82},[37,78595,51505],{"class":54},[37,78597,396],{"class":82},[37,78599,1364],{"class":54},[37,78601,78602,78604,78606,78608],{"class":39,"line":1684},[37,78603,54774],{"class":82},[37,78605,51505],{"class":54},[37,78607,396],{"class":82},[37,78609,1364],{"class":54},[37,78611,78612,78614,78616,78618],{"class":39,"line":1689},[37,78613,72664],{"class":82},[37,78615,51505],{"class":54},[37,78617,60573],{"class":82},[37,78619,1364],{"class":54},[37,78621,78622],{"class":39,"line":1695},[37,78623,2259],{"class":54},[37,78625,78626],{"class":39,"line":1700},[37,78627,2472],{"emptyLinePlaceholder":131},[37,78629,78630,78632],{"class":39,"line":1714},[37,78631,62191],{"class":2035},[37,78633,15644],{"class":54},[37,78635,78636,78638,78640,78643,78645],{"class":39,"line":1719},[37,78637,54839],{"class":82},[37,78639,51505],{"class":54},[37,78641,78642],{"class":82},"990",[37,78644,51560],{"class":50},[37,78646,1364],{"class":54},[37,78648,78649,78651,78653,78655,78657],{"class":39,"line":1725},[37,78650,54774],{"class":82},[37,78652,51505],{"class":54},[37,78654,396],{"class":82},[37,78656,51624],{"class":82},[37,78658,1364],{"class":54},[37,78660,78661,78663,78665,78667],{"class":39,"line":1746},[37,78662,55077],{"class":82},[37,78664,51505],{"class":54},[37,78666,51545],{"class":82},[37,78668,1364],{"class":54},[37,78670,78671,78674,78676,78679],{"class":39,"line":1751},[37,78672,78673],{"class":82},"      flex-wrap",[37,78675,51505],{"class":54},[37,78677,78678],{"class":82},"wrap",[37,78680,1364],{"class":54},[37,78682,78683],{"class":39,"line":1765},[37,78684,2259],{"class":54},[37,78686,78687],{"class":39,"line":1770},[37,78688,2472],{"emptyLinePlaceholder":131},[37,78690,78691,78694],{"class":39,"line":1799},[37,78692,78693],{"class":2035},"    .item",[37,78695,15644],{"class":54},[37,78697,78698,78700,78702,78705,78707],{"class":39,"line":1804},[37,78699,54839],{"class":82},[37,78701,51505],{"class":54},[37,78703,78704],{"class":82},"240",[37,78706,51560],{"class":50},[37,78708,1364],{"class":54},[37,78710,78711,78713,78715,78717,78719],{"class":39,"line":1821},[37,78712,62068],{"class":82},[37,78714,51505],{"class":54},[37,78716,650],{"class":82},[37,78718,51560],{"class":50},[37,78720,1364],{"class":54},[37,78722,78723,78725,78727,78729,78731,78734,78736],{"class":39,"line":1826},[37,78724,54763],{"class":82},[37,78726,51505],{"class":54},[37,78728,903],{"class":82},[37,78730,51560],{"class":50},[37,78732,78733],{"class":82}," 30",[37,78735,51560],{"class":50},[37,78737,1364],{"class":54},[37,78739,78740,78742,78744,78746,78749,78752,78754],{"class":39,"line":1831},[37,78741,61928],{"class":82},[37,78743,51505],{"class":54},[37,78745,28194],{"class":82},[37,78747,78748],{"class":82}," ease",[37,78750,78751],{"class":82}," .5",[37,78753,898],{"class":50},[37,78755,1364],{"class":54},[37,78757,78758,78761,78763,78765,78767],{"class":39,"line":1836},[37,78759,78760],{"class":82},"      margin-bottom",[37,78762,51505],{"class":54},[37,78764,903],{"class":82},[37,78766,51560],{"class":50},[37,78768,1364],{"class":54},[37,78770,78771],{"class":39,"line":1850},[37,78772,2259],{"class":54},[37,78774,78775],{"class":39,"line":1855},[37,78776,2472],{"emptyLinePlaceholder":131},[37,78778,78779,78782,78784,78787],{"class":39,"line":2649},[37,78780,78781],{"class":2035},"    .item:nth-child",[37,78783,208],{"class":54},[37,78785,78786],{"class":82},"4n",[37,78788,12514],{"class":54},[37,78790,78791,78793,78795,78797],{"class":39,"line":2663},[37,78792,62068],{"class":82},[37,78794,51505],{"class":54},[37,78796,396],{"class":82},[37,78798,1364],{"class":54},[37,78800,78801],{"class":39,"line":2671},[37,78802,2259],{"class":54},[37,78804,78805],{"class":39,"line":2676},[37,78806,2472],{"emptyLinePlaceholder":131},[37,78808,78809,78812],{"class":39,"line":2682},[37,78810,78811],{"class":2035},"    .item:hover",[37,78813,15644],{"class":54},[37,78815,78816,78819,78821,78823,78825,78827,78829,78831,78833,78836,78838,78840,78842,78844,78846,78848,78850,78853],{"class":39,"line":2688},[37,78817,78818],{"class":82},"      box-shadow",[37,78820,51505],{"class":54},[37,78822,396],{"class":82},[37,78824,51560],{"class":50},[37,78826,4165],{"class":82},[37,78828,51560],{"class":50},[37,78830,2220],{"class":82},[37,78832,51560],{"class":50},[37,78834,78835],{"class":82}," rgba",[37,78837,208],{"class":54},[37,78839,396],{"class":82},[37,78841,12507],{"class":54},[37,78843,396],{"class":82},[37,78845,12507],{"class":54},[37,78847,396],{"class":82},[37,78849,12507],{"class":54},[37,78851,78852],{"class":82},".2",[37,78854,2791],{"class":54},[37,78856,78857,78860,78862,78865,78867,78869,78871,78874,78876,78878,78880],{"class":39,"line":2693},[37,78858,78859],{"class":82},"      transform",[37,78861,51505],{"class":54},[37,78863,78864],{"class":82},"translate3d",[37,78866,208],{"class":54},[37,78868,396],{"class":82},[37,78870,12507],{"class":54},[37,78872,78873],{"class":82},"-4",[37,78875,51560],{"class":50},[37,78877,12507],{"class":54},[37,78879,396],{"class":82},[37,78881,2791],{"class":54},[37,78883,78884,78886,78888,78890],{"class":39,"line":8020},[37,78885,62093],{"class":82},[37,78887,51505],{"class":54},[37,78889,62098],{"class":82},[37,78891,1364],{"class":54},[37,78893,78894],{"class":39,"line":8044},[37,78895,2259],{"class":54},[37,78897,78898],{"class":39,"line":8049},[37,78899,2472],{"emptyLinePlaceholder":131},[37,78901,78902,78904,78906],{"class":39,"line":8055},[37,78903,78693],{"class":2035},[37,78905,55683],{"class":51368},[37,78907,15644],{"class":54},[37,78909,78910,78912,78914,78916,78918],{"class":39,"line":8082},[37,78911,54839],{"class":82},[37,78913,51505],{"class":54},[37,78915,516],{"class":82},[37,78917,533],{"class":50},[37,78919,1364],{"class":54},[37,78921,78922],{"class":39,"line":8087},[37,78923,2259],{"class":54},[37,78925,78926],{"class":39,"line":8093},[37,78927,2472],{"emptyLinePlaceholder":131},[37,78929,78930,78932,78934],{"class":39,"line":8105},[37,78931,78693],{"class":2035},[37,78933,62372],{"class":2035},[37,78935,15644],{"class":54},[37,78937,78938,78940,78942,78944,78946],{"class":39,"line":8117},[37,78939,54990],{"class":82},[37,78941,51505],{"class":54},[37,78943,853],{"class":82},[37,78945,51560],{"class":50},[37,78947,1364],{"class":54},[37,78949,78950,78952,78954,78956,78958],{"class":39,"line":8129},[37,78951,78760],{"class":82},[37,78953,51505],{"class":54},[37,78955,650],{"class":82},[37,78957,51560],{"class":50},[37,78959,1364],{"class":54},[37,78961,78962,78964,78966,78969],{"class":39,"line":9788},[37,78963,57484],{"class":82},[37,78965,51505],{"class":54},[37,78967,78968],{"class":82},"#666",[37,78970,1364],{"class":54},[37,78972,78973],{"class":39,"line":9813},[37,78974,2259],{"class":54},[37,78976,78977],{"class":39,"line":9836},[37,78978,2472],{"emptyLinePlaceholder":131},[37,78980,78981,78983,78986],{"class":39,"line":9860},[37,78982,78693],{"class":2035},[37,78984,78985],{"class":2035}," .price",[37,78987,15644],{"class":54},[37,78989,78990,78992,78994,78996,78998],{"class":39,"line":9865},[37,78991,54990],{"class":82},[37,78993,51505],{"class":54},[37,78995,953],{"class":82},[37,78997,51560],{"class":50},[37,78999,1364],{"class":54},[37,79001,79002,79004,79006,79009],{"class":39,"line":9870},[37,79003,57484],{"class":82},[37,79005,51505],{"class":54},[37,79007,79008],{"class":82},"firebrick",[37,79010,1364],{"class":54},[37,79012,79013],{"class":39,"line":9875},[37,79014,2259],{"class":54},[37,79016,79017],{"class":39,"line":9884},[37,79018,2472],{"emptyLinePlaceholder":131},[37,79020,79021,79023,79026],{"class":39,"line":9889},[37,79022,78693],{"class":2035},[37,79024,79025],{"class":2035}," .price::before",[37,79027,15644],{"class":54},[37,79029,79030,79033,79035,79038],{"class":39,"line":9895},[37,79031,79032],{"class":82},"      content",[37,79034,51505],{"class":54},[37,79036,79037],{"class":309},"'￥'",[37,79039,1364],{"class":54},[37,79041,79042,79044,79046,79048,79050],{"class":39,"line":9916},[37,79043,54990],{"class":82},[37,79045,51505],{"class":54},[37,79047,752],{"class":82},[37,79049,51560],{"class":50},[37,79051,1364],{"class":54},[37,79053,79054],{"class":39,"line":9922},[37,79055,2259],{"class":54},[37,79057,79058],{"class":39,"line":9936},[37,79059,2472],{"emptyLinePlaceholder":131},[37,79061,79062,79065],{"class":39,"line":9942},[37,79063,79064],{"class":2035},"    .filter",[37,79066,15644],{"class":54},[37,79068,79069,79071,79073,79075],{"class":39,"line":9969},[37,79070,55077],{"class":82},[37,79072,51505],{"class":54},[37,79074,51545],{"class":82},[37,79076,1364],{"class":54},[37,79078,79079,79081,79083,79085,79087],{"class":39,"line":9978},[37,79080,54839],{"class":82},[37,79082,51505],{"class":54},[37,79084,78642],{"class":82},[37,79086,51560],{"class":50},[37,79088,1364],{"class":54},[37,79090,79091,79093,79095,79097,79099],{"class":39,"line":9984},[37,79092,54774],{"class":82},[37,79094,51505],{"class":54},[37,79096,396],{"class":82},[37,79098,51624],{"class":82},[37,79100,1364],{"class":54},[37,79102,79103,79105,79107,79109,79111,79113],{"class":39,"line":9992},[37,79104,54763],{"class":82},[37,79106,51505],{"class":54},[37,79108,859],{"class":82},[37,79110,51560],{"class":50},[37,79112,78733],{"class":82},[37,79114,79115],{"class":50},"px\n",[37,79117,79118],{"class":39,"line":9997},[37,79119,2259],{"class":54},[37,79121,79122],{"class":39,"line":16676},[37,79123,2472],{"emptyLinePlaceholder":131},[37,79125,79126,79128,79130],{"class":39,"line":16682},[37,79127,79064],{"class":2035},[37,79129,1471],{"class":51368},[37,79131,15644],{"class":54},[37,79133,79134,79136,79138,79140,79142,79144,79146],{"class":39,"line":16705},[37,79135,54763],{"class":82},[37,79137,51505],{"class":54},[37,79139,650],{"class":82},[37,79141,51560],{"class":50},[37,79143,9022],{"class":82},[37,79145,51560],{"class":50},[37,79147,1364],{"class":54},[37,79149,79150,79152,79154,79156],{"class":39,"line":16711},[37,79151,61789],{"class":82},[37,79153,51505],{"class":54},[37,79155,61886],{"class":82},[37,79157,1364],{"class":54},[37,79159,79160,79162,79164,79166],{"class":39,"line":16734},[37,79161,57484],{"class":82},[37,79163,51505],{"class":54},[37,79165,78968],{"class":82},[37,79167,1364],{"class":54},[37,79169,79170,79172,79174,79176],{"class":39,"line":16748},[37,79171,64038],{"class":82},[37,79173,51505],{"class":54},[37,79175,54805],{"class":82},[37,79177,1364],{"class":54},[37,79179,79180,79182,79184,79186,79188],{"class":39,"line":16768},[37,79181,61818],{"class":82},[37,79183,51505],{"class":54},[37,79185,903],{"class":82},[37,79187,51560],{"class":50},[37,79189,1364],{"class":54},[37,79191,79192],{"class":39,"line":16774},[37,79193,2259],{"class":54},[37,79195,79196],{"class":39,"line":16785},[37,79197,2472],{"emptyLinePlaceholder":131},[37,79199,79200,79202,79204,79206],{"class":39,"line":16808},[37,79201,79064],{"class":2035},[37,79203,1471],{"class":51368},[37,79205,61968],{"class":2035},[37,79207,15644],{"class":54},[37,79209,79210,79212,79214,79217],{"class":39,"line":16830},[37,79211,54952],{"class":82},[37,79213,51505],{"class":54},[37,79215,79216],{"class":82},"#05943c",[37,79218,1364],{"class":54},[37,79220,79221,79223,79225,79227],{"class":39,"line":16835},[37,79222,57484],{"class":82},[37,79224,51505],{"class":54},[37,79226,60910],{"class":82},[37,79228,1364],{"class":54},[37,79230,79231],{"class":39,"line":16841},[37,79232,2259],{"class":54},[37,79234,79235,79237,79239],{"class":39,"line":16855},[37,79236,52485],{"class":54},[37,79238,123],{"class":51368},[37,79240,51375],{"class":54},[37,79242,79243,79245,79247],{"class":39,"line":16868},[37,79244,51853],{"class":54},[37,79246,51402],{"class":51368},[37,79248,51375],{"class":54},[37,79250,79251],{"class":39,"line":16873},[37,79252,2472],{"emptyLinePlaceholder":131},[37,79254,79255,79257,79259],{"class":39,"line":16887},[37,79256,1113],{"class":54},[37,79258,51868],{"class":51368},[37,79260,51375],{"class":54},[37,79262,79263,79265,79267,79269,79271,79274],{"class":39,"line":16892},[37,79264,52212],{"class":54},[37,79266,51679],{"class":51368},[37,79268,53554],{"class":2035},[37,79270,70],{"class":54},[37,79272,79273],{"class":309},"\"filter\"",[37,79275,51375],{"class":54},[37,79277,79278,79280,79282,79284,79286,79288,79291,79293,79295,79298,79300],{"class":39,"line":16898},[37,79279,51409],{"class":54},[37,79281,443],{"class":51368},[37,79283,61125],{"class":2035},[37,79285,70],{"class":54},[37,79287,61130],{"class":309},[37,79289,79290],{"class":2035}," data-index",[37,79292,70],{"class":54},[37,79294,3750],{"class":309},[37,79296,79297],{"class":54},">0-100元\u003C\u002F",[37,79299,443],{"class":51368},[37,79301,51375],{"class":54},[37,79303,79304,79306,79308,79310,79312,79314,79316,79318,79320,79323,79325],{"class":39,"line":16903},[37,79305,51409],{"class":54},[37,79307,443],{"class":51368},[37,79309,61125],{"class":2035},[37,79311,70],{"class":54},[37,79313,61130],{"class":309},[37,79315,79290],{"class":2035},[37,79317,70],{"class":54},[37,79319,3773],{"class":309},[37,79321,79322],{"class":54},">100-300元\u003C\u002F",[37,79324,443],{"class":51368},[37,79326,51375],{"class":54},[37,79328,79329,79331,79333,79335,79337,79339,79341,79343,79345,79348,79350],{"class":39,"line":16917},[37,79330,51409],{"class":54},[37,79332,443],{"class":51368},[37,79334,61125],{"class":2035},[37,79336,70],{"class":54},[37,79338,61130],{"class":309},[37,79340,79290],{"class":2035},[37,79342,70],{"class":54},[37,79344,3786],{"class":309},[37,79346,79347],{"class":54},">300元以上\u003C\u002F",[37,79349,443],{"class":51368},[37,79351,51375],{"class":54},[37,79353,79354,79356,79358,79360,79362,79364,79367,79369],{"class":39,"line":16922},[37,79355,51409],{"class":54},[37,79357,443],{"class":51368},[37,79359,61125],{"class":2035},[37,79361,70],{"class":54},[37,79363,61130],{"class":309},[37,79365,79366],{"class":54},">全部区间\u003C\u002F",[37,79368,443],{"class":51368},[37,79370,51375],{"class":54},[37,79372,79373,79375,79377],{"class":39,"line":16927},[37,79374,52485],{"class":54},[37,79376,51679],{"class":51368},[37,79378,51375],{"class":54},[37,79380,79381,79383,79385,79387,79389,79391],{"class":39,"line":16941},[37,79382,52212],{"class":54},[37,79384,51679],{"class":51368},[37,79386,53554],{"class":2035},[37,79388,70],{"class":54},[37,79390,62676],{"class":309},[37,79392,51375],{"class":54},[37,79394,79395],{"class":39,"line":16953},[37,79396,79397],{"class":43},"    \u003C!-- \u003Cdiv class=\"item\">\n",[37,79399,79400],{"class":39,"line":16958},[37,79401,79402],{"class":43},"      \u003Cimg src=\"\" alt=\"\">\n",[37,79404,79405],{"class":39,"line":16971},[37,79406,79407],{"class":43},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[37,79409,79410],{"class":39,"line":16976},[37,79411,79412],{"class":43},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[37,79414,79415],{"class":39,"line":16981},[37,79416,79417],{"class":43},"    \u003C\u002Fdiv> -->\n",[37,79419,79420,79422,79424],{"class":39,"line":16986},[37,79421,52485],{"class":54},[37,79423,51679],{"class":51368},[37,79425,51375],{"class":54},[37,79427,79428,79430,79432],{"class":39,"line":16999},[37,79429,52212],{"class":54},[37,79431,51881],{"class":51368},[37,79433,51375],{"class":54},[37,79435,79436],{"class":39,"line":17004},[37,79437,79438],{"class":43},"    \u002F\u002F 2. 初始化数据\n",[37,79440,79441,79443,79446,79448],{"class":39,"line":32702},[37,79442,11293],{"class":50},[37,79444,79445],{"class":82}," goodsList",[37,79447,13636],{"class":50},[37,79449,55515],{"class":54},[37,79451,79452],{"class":39,"line":32708},[37,79453,79454],{"class":54},"      {\n",[37,79456,79457,79460,79463],{"class":39,"line":32714},[37,79458,79459],{"class":54},"        id: ",[37,79461,79462],{"class":309},"'4001172'",[37,79464,31536],{"class":54},[37,79466,79467,79470,79473],{"class":39,"line":32720},[37,79468,79469],{"class":54},"        name: ",[37,79471,79472],{"class":309},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[37,79474,31536],{"class":54},[37,79476,79477,79480,79483],{"class":39,"line":32726},[37,79478,79479],{"class":54},"        price: ",[37,79481,79482],{"class":309},"'289.00'",[37,79484,31536],{"class":54},[37,79486,79487,79490,79493],{"class":39,"line":32737},[37,79488,79489],{"class":54},"        picture: ",[37,79491,79492],{"class":309},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[37,79494,31536],{"class":54},[37,79496,79497],{"class":39,"line":32743},[37,79498,77960],{"class":54},[37,79500,79501],{"class":39,"line":32763},[37,79502,79454],{"class":54},[37,79504,79505,79507,79510],{"class":39,"line":32769},[37,79506,79459],{"class":54},[37,79508,79509],{"class":309},"'4001594'",[37,79511,31536],{"class":54},[37,79513,79514,79516,79519],{"class":39,"line":32780},[37,79515,79469],{"class":54},[37,79517,79518],{"class":309},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[37,79520,31536],{"class":54},[37,79522,79523,79525,79528],{"class":39,"line":32786},[37,79524,79479],{"class":54},[37,79526,79527],{"class":309},"'288.00'",[37,79529,31536],{"class":54},[37,79531,79532,79534,79537],{"class":39,"line":32792},[37,79533,79489],{"class":54},[37,79535,79536],{"class":309},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[37,79538,31536],{"class":54},[37,79540,79541],{"class":39,"line":32798},[37,79542,77960],{"class":54},[37,79544,79545],{"class":39,"line":32804},[37,79546,79454],{"class":54},[37,79548,79549,79551,79554],{"class":39,"line":32810},[37,79550,79459],{"class":54},[37,79552,79553],{"class":309},"'4001009'",[37,79555,31536],{"class":54},[37,79557,79558,79560,79563],{"class":39,"line":32816},[37,79559,79469],{"class":54},[37,79561,79562],{"class":309},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[37,79564,31536],{"class":54},[37,79566,79567,79569,79572],{"class":39,"line":32822},[37,79568,79479],{"class":54},[37,79570,79571],{"class":309},"'109.00'",[37,79573,31536],{"class":54},[37,79575,79576,79578,79581],{"class":39,"line":32842},[37,79577,79489],{"class":54},[37,79579,79580],{"class":309},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[37,79582,31536],{"class":54},[37,79584,79585],{"class":39,"line":32848},[37,79586,77960],{"class":54},[37,79588,79589],{"class":39,"line":32864},[37,79590,79454],{"class":54},[37,79592,79593,79595,79598],{"class":39,"line":32870},[37,79594,79459],{"class":54},[37,79596,79597],{"class":309},"'4001874'",[37,79599,31536],{"class":54},[37,79601,79602,79604,79607],{"class":39,"line":32884},[37,79603,79469],{"class":54},[37,79605,79606],{"class":309},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[37,79608,31536],{"class":54},[37,79610,79611,79613,79616],{"class":39,"line":32890},[37,79612,79479],{"class":54},[37,79614,79615],{"class":309},"'488.00'",[37,79617,31536],{"class":54},[37,79619,79620,79622,79625],{"class":39,"line":32905},[37,79621,79489],{"class":54},[37,79623,79624],{"class":309},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[37,79626,31536],{"class":54},[37,79628,79629],{"class":39,"line":32911},[37,79630,77960],{"class":54},[37,79632,79633],{"class":39,"line":32920},[37,79634,79454],{"class":54},[37,79636,79637,79639,79642],{"class":39,"line":32926},[37,79638,79459],{"class":54},[37,79640,79641],{"class":309},"'4001649'",[37,79643,31536],{"class":54},[37,79645,79646,79648,79651],{"class":39,"line":32935},[37,79647,79469],{"class":54},[37,79649,79650],{"class":309},"'大师监制龙泉青瓷茶叶罐'",[37,79652,31536],{"class":54},[37,79654,79655,79657,79660],{"class":39,"line":32941},[37,79656,79479],{"class":54},[37,79658,79659],{"class":309},"'139.00'",[37,79661,31536],{"class":54},[37,79663,79664,79666,79669],{"class":39,"line":32947},[37,79665,79489],{"class":54},[37,79667,79668],{"class":309},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[37,79670,31536],{"class":54},[37,79672,79673],{"class":39,"line":32956},[37,79674,77960],{"class":54},[37,79676,79677],{"class":39,"line":32962},[37,79678,79454],{"class":54},[37,79680,79681,79683,79686],{"class":39,"line":32973},[37,79682,79459],{"class":54},[37,79684,79685],{"class":309},"'3997185'",[37,79687,31536],{"class":54},[37,79689,79690,79692,79695],{"class":39,"line":32979},[37,79691,79469],{"class":54},[37,79693,79694],{"class":309},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[37,79696,31536],{"class":54},[37,79698,79699,79701,79704],{"class":39,"line":32998},[37,79700,79479],{"class":54},[37,79702,79703],{"class":309},"'108.00'",[37,79705,31536],{"class":54},[37,79707,79708,79710,79713],{"class":39,"line":33004},[37,79709,79489],{"class":54},[37,79711,79712],{"class":309},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[37,79714,31536],{"class":54},[37,79716,79717],{"class":39,"line":33015},[37,79718,77960],{"class":54},[37,79720,79721],{"class":39,"line":33021},[37,79722,79454],{"class":54},[37,79724,79725,79727,79730],{"class":39,"line":33041},[37,79726,79459],{"class":54},[37,79728,79729],{"class":309},"'3997403'",[37,79731,31536],{"class":54},[37,79733,79734,79736,79739],{"class":39,"line":33057},[37,79735,79469],{"class":54},[37,79737,79738],{"class":309},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[37,79740,31536],{"class":54},[37,79742,79743,79745,79748],{"class":39,"line":33063},[37,79744,79479],{"class":54},[37,79746,79747],{"class":309},"'100.00'",[37,79749,31536],{"class":54},[37,79751,79752,79754,79757],{"class":39,"line":33077},[37,79753,79489],{"class":54},[37,79755,79756],{"class":309},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[37,79758,31536],{"class":54},[37,79760,79761],{"class":39,"line":33083},[37,79762,77960],{"class":54},[37,79764,79765],{"class":39,"line":33089},[37,79766,79454],{"class":54},[37,79768,79769,79771,79774],{"class":39,"line":33100},[37,79770,79459],{"class":54},[37,79772,79773],{"class":309},"'3998274'",[37,79775,31536],{"class":54},[37,79777,79778,79780,79783],{"class":39,"line":33106},[37,79779,79469],{"class":54},[37,79781,79782],{"class":309},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[37,79784,31536],{"class":54},[37,79786,79787,79789,79791],{"class":39,"line":33112},[37,79788,79479],{"class":54},[37,79790,79659],{"class":309},[37,79792,31536],{"class":54},[37,79794,79795,79797,79800],{"class":39,"line":33122},[37,79796,79489],{"class":54},[37,79798,79799],{"class":309},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[37,79801,31536],{"class":54},[37,79803,79804],{"class":39,"line":33128},[37,79805,77960],{"class":54},[37,79807,79808],{"class":39,"line":33139},[37,79809,53177],{"class":54},[37,79811,79812],{"class":39,"line":33145},[37,79813,2472],{"emptyLinePlaceholder":131},[37,79815,79816],{"class":39,"line":33155},[37,79817,79818],{"class":43},"    \u002F\u002F 1.渲染函数\n",[37,79820,79821,79823,79825,79827,79829],{"class":39,"line":33160},[37,79822,70152],{"class":50},[37,79824,70155],{"class":2035},[37,79826,208],{"class":54},[37,79828,3952],{"class":5288},[37,79830,12514],{"class":54},[37,79832,79833],{"class":39,"line":33166},[37,79834,79835],{"class":43},"      \u002F\u002F 声明空字符串\n",[37,79837,79838,79841,79844,79846],{"class":39,"line":33215},[37,79839,79840],{"class":50},"      let",[37,79842,79843],{"class":54}," str ",[37,79845,70],{"class":50},[37,79847,70172],{"class":309},[37,79849,79850],{"class":39,"line":33262},[37,79851,70177],{"class":43},[37,79853,79854,79856,79859,79861,79864,79867],{"class":39,"line":33267},[37,79855,58075],{"class":54},[37,79857,79858],{"class":2035},"forEach",[37,79860,208],{"class":54},[37,79862,79863],{"class":5288},"item",[37,79865,79866],{"class":50}," =>",[37,79868,15644],{"class":54},[37,79870,79871,79873,79876,79879,79881,79884,79886,79889,79892,79894],{"class":39,"line":33273},[37,79872,61338],{"class":50},[37,79874,79875],{"class":54}," { ",[37,79877,79878],{"class":82},"name",[37,79880,12507],{"class":54},[37,79882,79883],{"class":82},"price",[37,79885,12507],{"class":54},[37,79887,79888],{"class":82},"picture",[37,79890,79891],{"class":54}," } ",[37,79893,70],{"class":50},[37,79895,79896],{"class":54}," item\n",[37,79898,79899,79902,79904],{"class":39,"line":33292},[37,79900,79901],{"class":54},"        str ",[37,79903,9549],{"class":50},[37,79905,70236],{"class":309},[37,79907,79908],{"class":39,"line":33298},[37,79909,79910],{"class":309},"          \u003Cdiv class=\"item\">\n",[37,79912,79913,79916,79918],{"class":39,"line":33318},[37,79914,79915],{"class":309},"            \u003Cimg src=\"${",[37,79917,79888],{"class":54},[37,79919,79920],{"class":309},"}\" alt=\"\">\n",[37,79922,79923,79926,79928],{"class":39,"line":33324},[37,79924,79925],{"class":309},"            \u003Cp class=\"name\">${",[37,79927,79878],{"class":54},[37,79929,79930],{"class":309},"}\u003C\u002Fp>\n",[37,79932,79933,79936,79938],{"class":39,"line":33330},[37,79934,79935],{"class":309},"            \u003Cp class=\"price\">${",[37,79937,79883],{"class":54},[37,79939,79930],{"class":309},[37,79941,79942],{"class":39,"line":33340},[37,79943,79944],{"class":309},"          \u003C\u002Fdiv>\n",[37,79946,79947],{"class":39,"line":33345},[37,79948,79949],{"class":309},"        `\n",[37,79951,79952],{"class":39,"line":33351},[37,79953,64883],{"class":54},[37,79955,79956],{"class":39,"line":33367},[37,79957,79958],{"class":43},"      \u002F\u002F 追加给List\n",[37,79960,79961,79963,79965,79967,79970,79972,79974],{"class":39,"line":33412},[37,79962,55839],{"class":54},[37,79964,54467],{"class":2035},[37,79966,208],{"class":54},[37,79968,79969],{"class":309},"'.list'",[37,79971,74317],{"class":54},[37,79973,70],{"class":50},[37,79975,74053],{"class":54},[37,79977,79978],{"class":39,"line":33418},[37,79979,2259],{"class":54},[37,79981,79982],{"class":39,"line":33424},[37,79983,79984],{"class":43},"    \u002F\u002F 页面一打开就需要渲染\n",[37,79986,79987,79990],{"class":39,"line":33430},[37,79988,79989],{"class":2035},"    render",[37,79991,79992],{"class":54},"(goodsList)\n",[37,79994,79995],{"class":39,"line":33441},[37,79996,79997],{"class":43},"    \u002F\u002F 2.过滤筛选\n",[37,79999,80000,80002,80004,80006,80009,80011,80013,80015,80017,80019,80021,80023],{"class":39,"line":33447},[37,80001,52475],{"class":54},[37,80003,54467],{"class":2035},[37,80005,208],{"class":54},[37,80007,80008],{"class":309},"'.filter'",[37,80010,30896],{"class":54},[37,80012,57881],{"class":2035},[37,80014,208],{"class":54},[37,80016,57886],{"class":309},[37,80018,12507],{"class":54},[37,80020,279],{"class":5288},[37,80022,79866],{"class":50},[37,80024,15644],{"class":54},[37,80026,80027],{"class":39,"line":33453},[37,80028,80029],{"class":43},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[37,80031,80032,80034,80036,80039,80041,80043,80045,80047],{"class":39,"line":33459},[37,80033,58296],{"class":50},[37,80035,79875],{"class":54},[37,80037,80038],{"class":82},"tagName",[37,80040,12507],{"class":54},[37,80042,31607],{"class":82},[37,80044,79891],{"class":54},[37,80046,70],{"class":50},[37,80048,80049],{"class":54}," e.target\n",[37,80051,80052],{"class":39,"line":33477},[37,80053,80054],{"class":43},"      \u002F\u002F 判断\n",[37,80056,80057,80059,80061,80063,80065],{"class":39,"line":33491},[37,80058,54548],{"class":50},[37,80060,67102],{"class":54},[37,80062,54554],{"class":50},[37,80064,68324],{"class":309},[37,80066,12514],{"class":54},[37,80068,80069],{"class":39,"line":33500},[37,80070,80071],{"class":43},"        \u002F\u002F console.log(11)\n",[37,80073,80074],{"class":39,"line":33509},[37,80075,80076],{"class":43},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[37,80078,80079],{"class":39,"line":33518},[37,80080,80081],{"class":43},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[37,80083,80084,80086,80088,80090],{"class":39,"line":33527},[37,80085,51898],{"class":50},[37,80087,51901],{"class":54},[37,80089,70],{"class":50},[37,80091,80092],{"class":54}," goodsList\n",[37,80094,80095,80097,80100,80102,80105],{"class":39,"line":33533},[37,80096,2569],{"class":50},[37,80098,80099],{"class":54}," (dataset.index ",[37,80101,54554],{"class":50},[37,80103,80104],{"class":309}," '1'",[37,80106,12514],{"class":54},[37,80108,80109,80112,80114,80117,80120,80122,80124,80126,80129,80131,80133,80136,80138,80140,80142],{"class":39,"line":33539},[37,80110,80111],{"class":54},"          arr ",[37,80113,70],{"class":50},[37,80115,80116],{"class":54}," goodsList.",[37,80118,80119],{"class":2035},"filter",[37,80121,208],{"class":54},[37,80123,79863],{"class":5288},[37,80125,79866],{"class":50},[37,80127,80128],{"class":54}," item.price ",[37,80130,1782],{"class":50},[37,80132,4165],{"class":82},[37,80134,80135],{"class":50}," &&",[37,80137,80128],{"class":54},[37,80139,1660],{"class":50},[37,80141,5826],{"class":82},[37,80143,214],{"class":54},[37,80145,80146,80149,80151,80153,80155,80157,80160],{"class":39,"line":33547},[37,80147,80148],{"class":54},"        } ",[37,80150,1773],{"class":50},[37,80152,1776],{"class":50},[37,80154,80099],{"class":54},[37,80156,54554],{"class":50},[37,80158,80159],{"class":309}," '2'",[37,80161,12514],{"class":54},[37,80163,80164,80166,80168,80170,80172,80174,80176,80178,80180,80182,80184,80186,80188,80190,80193],{"class":39,"line":33552},[37,80165,80111],{"class":54},[37,80167,70],{"class":50},[37,80169,80116],{"class":54},[37,80171,80119],{"class":2035},[37,80173,208],{"class":54},[37,80175,79863],{"class":5288},[37,80177,79866],{"class":50},[37,80179,80128],{"class":54},[37,80181,1782],{"class":50},[37,80183,5826],{"class":82},[37,80185,80135],{"class":50},[37,80187,80128],{"class":54},[37,80189,1660],{"class":50},[37,80191,80192],{"class":82}," 300",[37,80194,214],{"class":54},[37,80196,80197,80199,80201,80203,80205,80207,80210],{"class":39,"line":33558},[37,80198,80148],{"class":54},[37,80200,1773],{"class":50},[37,80202,1776],{"class":50},[37,80204,80099],{"class":54},[37,80206,54554],{"class":50},[37,80208,80209],{"class":309}," '3'",[37,80211,12514],{"class":54},[37,80213,80214,80216,80218,80220,80222,80224,80226,80228,80230,80232,80234],{"class":39,"line":33569},[37,80215,80111],{"class":54},[37,80217,70],{"class":50},[37,80219,80116],{"class":54},[37,80221,80119],{"class":2035},[37,80223,208],{"class":54},[37,80225,79863],{"class":5288},[37,80227,79866],{"class":50},[37,80229,80128],{"class":54},[37,80231,1782],{"class":50},[37,80233,80192],{"class":82},[37,80235,214],{"class":54},[37,80237,80238],{"class":39,"line":33575},[37,80239,2601],{"class":54},[37,80241,80242],{"class":39,"line":33595},[37,80243,80244],{"class":43},"        \u002F\u002F 渲染函数\n",[37,80246,80247,80249],{"class":39,"line":33601},[37,80248,70476],{"class":2035},[37,80250,52480],{"class":54},[37,80252,80253],{"class":39,"line":33607},[37,80254,52466],{"class":54},[37,80256,80257],{"class":39,"line":33613},[37,80258,2472],{"emptyLinePlaceholder":131},[37,80260,80261],{"class":39,"line":33630},[37,80262,33530],{"class":54},[37,80264,80265,80267,80269],{"class":39,"line":33636},[37,80266,52485],{"class":54},[37,80268,51881],{"class":51368},[37,80270,51375],{"class":54},[37,80272,80273,80275,80277],{"class":39,"line":33642},[37,80274,51853],{"class":54},[37,80276,51868],{"class":51368},[37,80278,51375],{"class":54},[37,80280,80281],{"class":39,"line":33648},[37,80282,2472],{"emptyLinePlaceholder":131},[37,80284,80285,80287,80289],{"class":39,"line":33654},[37,80286,51853],{"class":54},[37,80288,50703],{"class":51368},[37,80290,51375],{"class":54},[146,80292,80294],{"id":80293},"_410-深入了解对象","4.10 深入了解对象",[175,80296,80298],{"id":80297},"_4101-创建对象","4.10.1 创建对象",[14,80300,80301],{},[119,80302],{"alt":32,"src":80303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80305,80306],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[175,80308,80310],{"id":80309},"_4102-构造函数","4.10.2 构造函数",[14,80312,80313,80316],{},[354,80314,80315],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80318,80319,80322],{},[354,80320,80321],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[27,80324,80326],{"className":50701,"code":80325,"language":50703,"meta":32,"style":32},"\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",[34,80327,80328,80336,80341,80362,80375,80387,80399,80403,80408,80435,80440,80467],{"__ignoreMap":32},[37,80329,80330,80332,80334],{"class":39,"line":40},[37,80331,1113],{"class":54},[37,80333,51881],{"class":51368},[37,80335,51375],{"class":54},[37,80337,80338],{"class":39,"line":47},[37,80339,80340],{"class":43},"\u002F\u002F例：\n",[37,80342,80343,80345,80348,80350,80352,80354,80356,80358,80360],{"class":39,"line":58},[37,80344,54517],{"class":50},[37,80346,80347],{"class":2035}," Pig",[37,80349,208],{"class":54},[37,80351,79878],{"class":5288},[37,80353,583],{"class":54},[37,80355,70289],{"class":5288},[37,80357,583],{"class":54},[37,80359,70306],{"class":5288},[37,80361,12514],{"class":54},[37,80363,80364,80367,80370,80372],{"class":39,"line":64},[37,80365,80366],{"class":82},"    this",[37,80368,80369],{"class":54},".name",[37,80371,70],{"class":50},[37,80373,80374],{"class":54},"name\n",[37,80376,80377,80379,80382,80384],{"class":39,"line":76},[37,80378,80366],{"class":82},[37,80380,80381],{"class":54},".age",[37,80383,70],{"class":50},[37,80385,80386],{"class":54},"age\n",[37,80388,80389,80391,80394,80396],{"class":39,"line":92},[37,80390,80366],{"class":82},[37,80392,80393],{"class":54},".gender",[37,80395,70],{"class":50},[37,80397,80398],{"class":54},"gender    \n",[37,80400,80401],{"class":39,"line":97},[37,80402,1637],{"class":54},[37,80404,80405],{"class":39,"line":107},[37,80406,80407],{"class":43},"\u002F\u002F创建佩奇对象\n",[37,80409,80410,80412,80415,80417,80419,80421,80424,80426,80428,80430,80433],{"class":39,"line":1390},[37,80411,6864],{"class":50},[37,80413,80414],{"class":82}," Peppa",[37,80416,11789],{"class":50},[37,80418,80347],{"class":2035},[37,80420,208],{"class":54},[37,80422,80423],{"class":309},"'佩奇'",[37,80425,583],{"class":54},[37,80427,549],{"class":82},[37,80429,583],{"class":54},[37,80431,80432],{"class":309},"'女'",[37,80434,214],{"class":54},[37,80436,80437],{"class":39,"line":1402},[37,80438,80439],{"class":43},"\u002F\u002F创建乔治对象\n",[37,80441,80442,80444,80447,80449,80451,80453,80456,80458,80460,80462,80465],{"class":39,"line":1684},[37,80443,6864],{"class":50},[37,80445,80446],{"class":82}," George",[37,80448,11789],{"class":50},[37,80450,80347],{"class":2035},[37,80452,208],{"class":54},[37,80454,80455],{"class":309},"'乔治'",[37,80457,583],{"class":54},[37,80459,276],{"class":82},[37,80461,583],{"class":54},[37,80463,80464],{"class":309},"'男'",[37,80466,214],{"class":54},[37,80468,80469,80471,80473],{"class":39,"line":1689},[37,80470,51853],{"class":54},[37,80472,51881],{"class":51368},[37,80474,51375],{"class":54},[14,80476,80477],{},[119,80478],{"alt":32,"src":80479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,80481,80482],{},[119,80483],{"alt":32,"src":80484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,80486,80487],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,80489,80490],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,80492,80493],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,80495,80496],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,80498,80499],{},"这里用等号是因为：对象.属性=值",[14,80501,80502],{},"①利用对象字面量创建对象",[14,80504,80505],{},"const o={",[14,80507,80508],{},"name:'pink'",[14,80510,80511],{},"} ②利用new Object创建对象",[14,80513,80514],{},"const o=new Object({name:'pink'})",[14,80516,80517],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,80519,80520],{},"构造函数创建对象的执行过程：",[14,80522,80523],{},[119,80524],{"alt":32,"src":80525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[175,80527,80529],{"id":80528},"_4103-实例成员","4.10.3 实例成员",[14,80531,80532],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[158,80534,80535,80538,80541],{},[161,80536,80537],{},"实例对象的属性和方法即为实例成员",[161,80539,80540],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[161,80542,80543],{},"构造函数创建的实例对象彼此独立互不影响",[175,80545,80547],{"id":80546},"_4104-静态成员","4.10.4 静态成员",[14,80549,80550],{},[119,80551],{"alt":32,"src":80552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,80554,80555],{},"静态成员有Date.now() Math.PI Math.random()",[14,80557,80558],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,80560,80561],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,80563,80564],{},"function Pig(name) n {",[14,80566,80567],{},"this.name=name",[14,80569,1149],{},[14,80571,80572],{},"Pig.eyes=2",[14,80574,80575],{},"Pig.sayHai=function () { console.log(this) }",[14,80577,80578],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,80580,80581],{},"console.log(Pig.eyes) \u002F\u002F2",[14,80583,11404],{},[158,80585,80586,80589,80592,80595,80598],{},[161,80587,80588],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[161,80590,80591],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[161,80593,80594],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[161,80596,80597],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[161,80599,80600],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,80602,80603],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[175,80605,80607],{"id":80606},"_4105-内置构造函数","4.10.5 内置构造函数",[14,80609,80610],{},"内置构造函数包含：",[14,80612,80613],{},[119,80614],{"alt":32,"src":80615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,80617,80618],{},[119,80619],{"alt":32,"src":80620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,80622,80623],{},"这些基本数据类型，js对他们进行了包装",[51881,80625,80626],{},"\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",[22070,80628,80630],{"id":80629},"_41051-object","4.10.5.1 Object",[14,80632,80633],{},"Object 是内置的构造函数，用于创建普通对象",[14,80635,80636],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[27,80638,80640],{"className":50701,"code":80639,"language":50703,"meta":32,"style":32},"const user=new Object({name:'小明',age:15})\n",[34,80641,80642],{"__ignoreMap":32},[37,80643,80644],{"class":39,"line":40},[37,80645,80639],{"class":54},[14,80647,80648],{},"三个常用的静态方法：",[22982,80650,80652],{"id":80651},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,80654,80655],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,80657,80658],{},[119,80659],{"alt":32,"src":80660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,80662,80663],{},[119,80664],{"alt":32,"src":80665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[27,80667,80669],{"className":53135,"code":80668,"language":53137,"meta":32,"style":32},"\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",[34,80670,80671,80679,80687,80692,80697,80702,80707,80712,80717,80725],{"__ignoreMap":32},[37,80672,80673,80675,80677],{"class":39,"line":40},[37,80674,1113],{"class":54},[37,80676,51868],{"class":51368},[37,80678,51375],{"class":54},[37,80680,80681,80683,80685],{"class":39,"line":47},[37,80682,52212],{"class":54},[37,80684,51881],{"class":51368},[37,80686,51375],{"class":54},[37,80688,80689],{"class":39,"line":58},[37,80690,80691],{"class":54},"    const o = { name: 'pink', age: 6 }\n",[37,80693,80694],{"class":39,"line":64},[37,80695,80696],{"class":54},"    \u002F\u002F 获得所有属性名\n",[37,80698,80699],{"class":39,"line":76},[37,80700,80701],{"class":54},"    const arr = Object.keys(o)\n",[37,80703,80704],{"class":39,"line":92},[37,80705,80706],{"class":54},"    console.log(arr)\n",[37,80708,80709],{"class":39,"line":97},[37,80710,80711],{"class":54},"    \u002F\u002F 获得所有属性值\n",[37,80713,80714],{"class":39,"line":107},[37,80715,80716],{"class":54},"    console.log(Object.values(o))\n",[37,80718,80719,80721,80723],{"class":39,"line":1390},[37,80720,52485],{"class":54},[37,80722,51881],{"class":51368},[37,80724,51375],{"class":54},[37,80726,80727,80729,80731],{"class":39,"line":1402},[37,80728,51853],{"class":54},[37,80730,51868],{"class":51368},[37,80732,51375],{"class":54},[22982,80734,80736],{"id":80735},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,80738,80739],{},"Object.assign(oo,o)",[14,80741,80742],{},"后的东西添加给前 是追加",[14,80744,80745],{},[119,80746],{"alt":32,"src":80747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,80749,80750],{},[119,80751],{"alt":32,"src":80752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[27,80754,80756],{"className":53135,"code":80755,"language":53137,"meta":32,"style":32},"\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",[34,80757,80758,80766,80774,80778,80782,80786,80790,80794,80798,80803,80808,80813,80818,80823,80831],{"__ignoreMap":32},[37,80759,80760,80762,80764],{"class":39,"line":40},[37,80761,1113],{"class":54},[37,80763,51868],{"class":51368},[37,80765,51375],{"class":54},[37,80767,80768,80770,80772],{"class":39,"line":47},[37,80769,52212],{"class":54},[37,80771,51881],{"class":51368},[37,80773,51375],{"class":54},[37,80775,80776],{"class":39,"line":58},[37,80777,80691],{"class":54},[37,80779,80780],{"class":39,"line":64},[37,80781,80696],{"class":54},[37,80783,80784],{"class":39,"line":76},[37,80785,80701],{"class":54},[37,80787,80788],{"class":39,"line":92},[37,80789,80706],{"class":54},[37,80791,80792],{"class":39,"line":97},[37,80793,80711],{"class":54},[37,80795,80796],{"class":39,"line":107},[37,80797,80716],{"class":54},[37,80799,80800],{"class":39,"line":1390},[37,80801,80802],{"class":54},"    const oo = {}\n",[37,80804,80805],{"class":39,"line":1402},[37,80806,80807],{"class":54},"    Object.assign(oo, o)\n",[37,80809,80810],{"class":39,"line":1684},[37,80811,80812],{"class":54},"    console.log(oo)\n",[37,80814,80815],{"class":39,"line":1689},[37,80816,80817],{"class":54},"    Object.assign(o, { gender: '女' })\n",[37,80819,80820],{"class":39,"line":1695},[37,80821,80822],{"class":54},"    console.log(o)\n",[37,80824,80825,80827,80829],{"class":39,"line":1700},[37,80826,52485],{"class":54},[37,80828,51881],{"class":51368},[37,80830,51375],{"class":54},[37,80832,80833,80835,80837],{"class":39,"line":1714},[37,80834,51853],{"class":54},[37,80836,51868],{"class":51368},[37,80838,51375],{"class":54},[14,80840,80841],{},[119,80842],{"alt":32,"src":80843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22070,80845,80847],{"id":80846},"_41052-array","4.10.5.2 Array",[14,80849,80850],{},"Array 是内置的构造函数，用于创建数组",[14,80852,80853],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[27,80855,80857],{"className":50701,"code":80856,"language":50703,"meta":32,"style":32},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[34,80858,80859,80864],{"__ignoreMap":32},[37,80860,80861],{"class":39,"line":40},[37,80862,80863],{"class":54},"const arr=new Array(3,5)\n",[37,80865,80866],{"class":39,"line":47},[37,80867,80868],{"class":54},"console.log(arr)  \u002F\u002F[3,5]\n",[14,80870,80871],{},"Array的实例方法，这个方法是实例成员",[14,80873,80874],{},[119,80875],{"alt":32,"src":80876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22982,80878,80880],{"id":80879},"_410521-reduce","4.10.5.2.1 reduce",[14,80882,80883],{},[119,80884],{"alt":32,"src":80885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[27,80887,80889],{"className":53135,"code":80888,"language":53137,"meta":32,"style":32},"\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",[34,80890,80891,80899,80907,80912,80917,80922,80927,80931,80936,80941,80946,80950,80955,80960,80964,80969,80974,80979,80987],{"__ignoreMap":32},[37,80892,80893,80895,80897],{"class":39,"line":40},[37,80894,1113],{"class":54},[37,80896,51868],{"class":51368},[37,80898,51375],{"class":54},[37,80900,80901,80903,80905],{"class":39,"line":47},[37,80902,52212],{"class":54},[37,80904,51881],{"class":51368},[37,80906,51375],{"class":54},[37,80908,80909],{"class":39,"line":58},[37,80910,80911],{"class":54},"    const arr = [1, 5, 8]\n",[37,80913,80914],{"class":39,"line":64},[37,80915,80916],{"class":54},"    \u002F\u002F 1.没有初始值\n",[37,80918,80919],{"class":39,"line":76},[37,80920,80921],{"class":54},"    const total = arr.reduce(function (prev, current) {\n",[37,80923,80924],{"class":39,"line":92},[37,80925,80926],{"class":54},"      return prev + current\n",[37,80928,80929],{"class":39,"line":97},[37,80930,33530],{"class":54},[37,80932,80933],{"class":39,"line":107},[37,80934,80935],{"class":54},"    console.log(total)   \u002F\u002F14\n",[37,80937,80938],{"class":39,"line":1390},[37,80939,80940],{"class":54},"    \u002F\u002F 2.有初始值\n",[37,80942,80943],{"class":39,"line":1402},[37,80944,80945],{"class":54},"    const total1 = arr.reduce(function (prev, current) {\n",[37,80947,80948],{"class":39,"line":1684},[37,80949,80926],{"class":54},[37,80951,80952],{"class":39,"line":1689},[37,80953,80954],{"class":54},"    }, 10)\n",[37,80956,80957],{"class":39,"line":1695},[37,80958,80959],{"class":54},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[37,80961,80962],{"class":39,"line":1700},[37,80963,2472],{"emptyLinePlaceholder":131},[37,80965,80966],{"class":39,"line":1714},[37,80967,80968],{"class":54},"    \u002F\u002F 3.箭头函数写法\n",[37,80970,80971],{"class":39,"line":1719},[37,80972,80973],{"class":54},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[37,80975,80976],{"class":39,"line":1725},[37,80977,80978],{"class":54},"    console.log(total2)   \u002F\u002F24\n",[37,80980,80981,80983,80985],{"class":39,"line":1746},[37,80982,52485],{"class":54},[37,80984,51881],{"class":51368},[37,80986,51375],{"class":54},[37,80988,80989,80991,80993],{"class":39,"line":1751},[37,80990,51853],{"class":54},[37,80992,51868],{"class":51368},[37,80994,51375],{"class":54},[14,80996,80997],{},"执行过程：",[158,80999,81000,81003,81006],{},[161,81001,81002],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[161,81004,81005],{},"每一次循环，把返回值给作为下一次循环的上一次值",[161,81007,81008],{},"如果有起始值，则起始值作为上一次值",[27,81010,81012],{"className":53135,"code":81011,"language":53137,"meta":32,"style":32},"\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",[34,81013,81014,81022,81030,81034,81038,81042,81046,81050,81054,81059,81064,81069,81074,81079,81083,81087,81091,81095,81099,81103,81108,81112,81117,81121,81126,81131,81135,81139,81143,81151],{"__ignoreMap":32},[37,81015,81016,81018,81020],{"class":39,"line":40},[37,81017,1113],{"class":54},[37,81019,51868],{"class":51368},[37,81021,51375],{"class":54},[37,81023,81024,81026,81028],{"class":39,"line":47},[37,81025,52212],{"class":54},[37,81027,51881],{"class":51368},[37,81029,51375],{"class":54},[37,81031,81032],{"class":39,"line":58},[37,81033,80911],{"class":54},[37,81035,81036],{"class":39,"line":64},[37,81037,80916],{"class":54},[37,81039,81040],{"class":39,"line":76},[37,81041,80921],{"class":54},[37,81043,81044],{"class":39,"line":92},[37,81045,80926],{"class":54},[37,81047,81048],{"class":39,"line":97},[37,81049,33530],{"class":54},[37,81051,81052],{"class":39,"line":107},[37,81053,80935],{"class":54},[37,81055,81056],{"class":39,"line":1390},[37,81057,81058],{"class":54},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[37,81060,81061],{"class":39,"line":1402},[37,81062,81063],{"class":54},"    \u002F\u002F     1              5                    6\n",[37,81065,81066],{"class":39,"line":1684},[37,81067,81068],{"class":54},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[37,81070,81071],{"class":39,"line":1689},[37,81072,81073],{"class":54},"    \u002F\u002F     6              8                    14\n",[37,81075,81076],{"class":39,"line":1695},[37,81077,81078],{"class":54},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[37,81080,81081],{"class":39,"line":1700},[37,81082,80940],{"class":54},[37,81084,81085],{"class":39,"line":1714},[37,81086,80945],{"class":54},[37,81088,81089],{"class":39,"line":1719},[37,81090,80926],{"class":54},[37,81092,81093],{"class":39,"line":1725},[37,81094,80954],{"class":54},[37,81096,81097],{"class":39,"line":1746},[37,81098,80959],{"class":54},[37,81100,81101],{"class":39,"line":1751},[37,81102,81058],{"class":54},[37,81104,81105],{"class":39,"line":1765},[37,81106,81107],{"class":54},"    \u002F\u002F     10             1                     11\n",[37,81109,81110],{"class":39,"line":1770},[37,81111,81068],{"class":54},[37,81113,81114],{"class":39,"line":1799},[37,81115,81116],{"class":54},"    \u002F\u002F     11             5                    16\n",[37,81118,81119],{"class":39,"line":1804},[37,81120,81068],{"class":54},[37,81122,81123],{"class":39,"line":1821},[37,81124,81125],{"class":54},"    \u002F\u002F     16             8                    24\n",[37,81127,81128],{"class":39,"line":1826},[37,81129,81130],{"class":54},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[37,81132,81133],{"class":39,"line":1831},[37,81134,80968],{"class":54},[37,81136,81137],{"class":39,"line":1836},[37,81138,80973],{"class":54},[37,81140,81141],{"class":39,"line":1850},[37,81142,80978],{"class":54},[37,81144,81145,81147,81149],{"class":39,"line":1855},[37,81146,52485],{"class":54},[37,81148,51881],{"class":51368},[37,81150,51375],{"class":54},[37,81152,81153,81155,81157],{"class":39,"line":2649},[37,81154,51853],{"class":54},[37,81156,51868],{"class":51368},[37,81158,51375],{"class":54},[22982,81160,81162],{"id":81161},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81164,81165],{},[119,81166],{"alt":32,"src":81167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[27,81169,81171],{"className":53135,"code":81170,"language":53137,"meta":32,"style":32},"\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",[34,81172,81173,81181,81189,81194,81199,81204,81209,81213,81218,81223,81228,81233,81238,81243,81247,81252,81256,81261,81269],{"__ignoreMap":32},[37,81174,81175,81177,81179],{"class":39,"line":40},[37,81176,1113],{"class":54},[37,81178,51868],{"class":51368},[37,81180,51375],{"class":54},[37,81182,81183,81185,81187],{"class":39,"line":47},[37,81184,52212],{"class":54},[37,81186,51881],{"class":51368},[37,81188,51375],{"class":54},[37,81190,81191],{"class":39,"line":58},[37,81192,81193],{"class":54},"    const arr = [\n",[37,81195,81196],{"class":39,"line":64},[37,81197,81198],{"class":54},"      { name: '张三', salary: 10000 },\n",[37,81200,81201],{"class":39,"line":76},[37,81202,81203],{"class":54},"      { name: '李四', salary: 10000 },\n",[37,81205,81206],{"class":39,"line":92},[37,81207,81208],{"class":54},"      { name: '王五', salary: 10000 }\n",[37,81210,81211],{"class":39,"line":97},[37,81212,53177],{"class":54},[37,81214,81215],{"class":39,"line":107},[37,81216,81217],{"class":54},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[37,81219,81220],{"class":39,"line":1390},[37,81221,81222],{"class":54},"    \u002F\u002F prev是累计值\n",[37,81224,81225],{"class":39,"line":1402},[37,81226,81227],{"class":54},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[37,81229,81230],{"class":39,"line":1684},[37,81231,81232],{"class":54},"    console.log(total)\n",[37,81234,81235],{"class":39,"line":1689},[37,81236,81237],{"class":54},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[37,81239,81240],{"class":39,"line":1695},[37,81241,81242],{"class":54},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[37,81244,81245],{"class":39,"line":1700},[37,81246,81237],{"class":54},[37,81248,81249],{"class":39,"line":1714},[37,81250,81251],{"class":54},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[37,81253,81254],{"class":39,"line":1719},[37,81255,81237],{"class":54},[37,81257,81258],{"class":39,"line":1725},[37,81259,81260],{"class":54},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[37,81262,81263,81265,81267],{"class":39,"line":1746},[37,81264,52485],{"class":54},[37,81266,51881],{"class":51368},[37,81268,51375],{"class":54},[37,81270,81271,81273,81275],{"class":39,"line":1751},[37,81272,51853],{"class":54},[37,81274,51868],{"class":51368},[37,81276,51375],{"class":54},[22982,81278,81280],{"id":81279},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81282,81283],{},[119,81284],{"alt":32,"src":81285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81287,81288],{},[119,81289],{"alt":32,"src":81290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[158,81292,81293],{},[161,81294,81295],{},"find()",[14,81297,81298],{},"循环查找，找到第一个就ok",[14,81300,81301],{},[443,81302,81305],{"href":81303,"rel":81304},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23937],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[27,81307,81309],{"className":50701,"code":81308,"language":50703,"meta":32,"style":32},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[34,81310,81311,81316,81321],{"__ignoreMap":32},[37,81312,81313],{"class":39,"line":40},[37,81314,81315],{"class":54},"const array1 = [5, 12, 8, 130, 44]\n",[37,81317,81318],{"class":39,"line":47},[37,81319,81320],{"class":54},"const found = array1.find((element) => element > 10)\n",[37,81322,81323],{"class":39,"line":58},[37,81324,81325],{"class":54},"console.log(found)  \u002F\u002F12\n",[14,81327,81328,81330,81331,81336,81337,81340,81341,81343,81344,81349,81350,81352,81353,81355,81356,81358,81359],{},[34,81329,81295],{}," 方法是一个",[443,81332,81335],{"href":81333,"rel":81334},"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",[23937],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[34,81338,81339],{},"callbackFn"," 函数，直到 ",[34,81342,81339],{}," 返回一个",[443,81345,81348],{"href":81346,"rel":81347},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23937],"真值","。然后 ",[34,81351,81295],{}," 返回该元素并停止迭代数组。如果 ",[34,81354,81339],{}," 从未返回真值，则 ",[34,81357,81295],{}," 返回 ",[34,81360,81361],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[27,81363,81365],{"className":53135,"code":81364,"language":53137,"meta":32,"style":32},"\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",[34,81366,81367,81375,81383,81388,81393,81398,81402,81407,81412,81416,81421,81426,81430,81434,81439,81444,81448,81452,81457,81462,81467,81472,81477,81481,81486,81491,81496,81501,81505,81510,81518],{"__ignoreMap":32},[37,81368,81369,81371,81373],{"class":39,"line":40},[37,81370,1113],{"class":54},[37,81372,51868],{"class":51368},[37,81374,51375],{"class":54},[37,81376,81377,81379,81381],{"class":39,"line":47},[37,81378,52212],{"class":54},[37,81380,51881],{"class":51368},[37,81382,51375],{"class":54},[37,81384,81385],{"class":39,"line":58},[37,81386,81387],{"class":54},"    const arr = ['red', 'blue', 'green']\n",[37,81389,81390],{"class":39,"line":64},[37,81391,81392],{"class":54},"    const found = arr.find(item => item === 'pink')\n",[37,81394,81395],{"class":39,"line":76},[37,81396,81397],{"class":54},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[37,81399,81400],{"class":39,"line":92},[37,81401,2472],{"emptyLinePlaceholder":131},[37,81403,81404],{"class":39,"line":97},[37,81405,81406],{"class":54},"    \u002F\u002F 使用场景，用于查找数据\n",[37,81408,81409],{"class":39,"line":107},[37,81410,81411],{"class":54},"    const arr1 = [\n",[37,81413,81414],{"class":39,"line":1390},[37,81415,79454],{"class":54},[37,81417,81418],{"class":39,"line":1402},[37,81419,81420],{"class":54},"        name: '小米',\n",[37,81422,81423],{"class":39,"line":1684},[37,81424,81425],{"class":54},"        price: 1999\n",[37,81427,81428],{"class":39,"line":1689},[37,81429,77960],{"class":54},[37,81431,81432],{"class":39,"line":1695},[37,81433,79454],{"class":54},[37,81435,81436],{"class":39,"line":1700},[37,81437,81438],{"class":54},"        name: '华为',\n",[37,81440,81441],{"class":39,"line":1714},[37,81442,81443],{"class":54},"        price: 3999\n",[37,81445,81446],{"class":39,"line":1719},[37,81447,52466],{"class":54},[37,81449,81450],{"class":39,"line":1725},[37,81451,53177],{"class":54},[37,81453,81454],{"class":39,"line":1746},[37,81455,81456],{"class":54},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[37,81458,81459],{"class":39,"line":1751},[37,81460,81461],{"class":54},"    \u002F\u002F const found1 = arr1.find(item => {\n",[37,81463,81464],{"class":39,"line":1765},[37,81465,81466],{"class":54},"    \u002F\u002F   if (item.name === '小米') {\n",[37,81468,81469],{"class":39,"line":1770},[37,81470,81471],{"class":54},"    \u002F\u002F     return item\n",[37,81473,81474],{"class":39,"line":1799},[37,81475,81476],{"class":54},"    \u002F\u002F   }\n",[37,81478,81479],{"class":39,"line":1804},[37,81480,63358],{"class":54},[37,81482,81483],{"class":39,"line":1821},[37,81484,81485],{"class":54},"    \u002F\u002F 另一种写法\n",[37,81487,81488],{"class":39,"line":1826},[37,81489,81490],{"class":54},"    const found1 = arr1.find(item => {\n",[37,81492,81493],{"class":39,"line":1831},[37,81494,81495],{"class":54},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[37,81497,81498],{"class":39,"line":1836},[37,81499,81500],{"class":54},"      return item.name = '小米'\n",[37,81502,81503],{"class":39,"line":1850},[37,81504,33530],{"class":54},[37,81506,81507],{"class":39,"line":1855},[37,81508,81509],{"class":54},"    console.log(found1)\n",[37,81511,81512,81514,81516],{"class":39,"line":2649},[37,81513,52485],{"class":54},[37,81515,51881],{"class":51368},[37,81517,51375],{"class":54},[37,81519,81520,81522,81524],{"class":39,"line":2663},[37,81521,51853],{"class":54},[37,81523,51868],{"class":51368},[37,81525,51375],{"class":54},[14,81527,81528],{},[119,81529],{"alt":32,"src":81530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,81532,81533],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[158,81535,81536],{"start":47},[161,81537,81538],{},"every()返回的是布尔值",[14,81540,81541],{},[443,81542,81545],{"href":81543,"rel":81544},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23937],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,81547,81548],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,81550,81551],{},"some是只有有一个就没问题",[14,81553,81554],{},"every是必须全是才行",[27,81556,81560],{"className":81557,"code":81558,"language":81559,"meta":32,"style":32},"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",[34,81561,81562,81578,81592,81596,81605],{"__ignoreMap":32},[37,81563,81564,81566,81569,81571,81573,81576],{"class":39,"line":40},[37,81565,54517],{"class":50},[37,81567,81568],{"class":54}," isBigEnough(element, ",[37,81570,74126],{"class":50},[37,81572,12507],{"class":54},[37,81574,81575],{"class":50},"array",[37,81577,12514],{"class":54},[37,81579,81580,81583,81586,81588,81590],{"class":39,"line":47},[37,81581,81582],{"class":50},"  return",[37,81584,81585],{"class":54}," element ",[37,81587,1782],{"class":50},[37,81589,2110],{"class":82},[37,81591,1364],{"class":54},[37,81593,81594],{"class":39,"line":58},[37,81595,1637],{"class":54},[37,81597,81598,81601,81603],{"class":39,"line":64},[37,81599,81600],{"class":54},"[12, 5, 8, 130, 44].every(isBigEnough); ",[37,81602,33398],{"class":50},[37,81604,54584],{"class":54},[37,81606,81607,81610,81612],{"class":39,"line":76},[37,81608,81609],{"class":54},"[12, 54, 18, 130, 44].every(isBigEnough); ",[37,81611,33398],{"class":50},[37,81613,58008],{"class":54},[27,81615,81617],{"className":53135,"code":81616,"language":53137,"meta":32,"style":32},"\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",[34,81618,81619,81627,81635,81640,81644,81649,81654,81662],{"__ignoreMap":32},[37,81620,81621,81623,81625],{"class":39,"line":40},[37,81622,1113],{"class":54},[37,81624,51868],{"class":51368},[37,81626,51375],{"class":54},[37,81628,81629,81631,81633],{"class":39,"line":47},[37,81630,52212],{"class":54},[37,81632,51881],{"class":51368},[37,81634,51375],{"class":54},[37,81636,81637],{"class":39,"line":58},[37,81638,81639],{"class":54},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[37,81641,81642],{"class":39,"line":64},[37,81643,78390],{"class":54},[37,81645,81646],{"class":39,"line":76},[37,81647,81648],{"class":54},"    const flag = arr.every(item => item >= 10)\n",[37,81650,81651],{"class":39,"line":92},[37,81652,81653],{"class":54},"    console.log(flag)    \u002F\u002Ftrue\n",[37,81655,81656,81658,81660],{"class":39,"line":97},[37,81657,52485],{"class":54},[37,81659,51881],{"class":51368},[37,81661,51375],{"class":54},[37,81663,81664,81666,81668],{"class":39,"line":107},[37,81665,51853],{"class":54},[37,81667,51868],{"class":51368},[37,81669,51375],{"class":54},[27,81671,81673],{"className":53135,"code":81672,"language":53137,"meta":32,"style":32},"\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",[34,81674,81675,81683,81691,81695,81700,81705,81710,81718],{"__ignoreMap":32},[37,81676,81677,81679,81681],{"class":39,"line":40},[37,81678,1113],{"class":54},[37,81680,51868],{"class":51368},[37,81682,51375],{"class":54},[37,81684,81685,81687,81689],{"class":39,"line":47},[37,81686,52212],{"class":54},[37,81688,51881],{"class":51368},[37,81690,51375],{"class":54},[37,81692,81693],{"class":39,"line":58},[37,81694,81639],{"class":54},[37,81696,81697],{"class":39,"line":64},[37,81698,81699],{"class":54},"    const arr = [10, 0, 5]\n",[37,81701,81702],{"class":39,"line":76},[37,81703,81704],{"class":54},"    const flag = arr.some(item => item >= 10)\n",[37,81706,81707],{"class":39,"line":92},[37,81708,81709],{"class":54},"    console.log(flag)   \u002F\u002Ftrue\n",[37,81711,81712,81714,81716],{"class":39,"line":97},[37,81713,52485],{"class":54},[37,81715,51881],{"class":51368},[37,81717,51375],{"class":54},[37,81719,81720,81722,81724],{"class":39,"line":107},[37,81721,51853],{"class":54},[37,81723,51868],{"class":51368},[37,81725,51375],{"class":54},[22982,81727,81729],{"id":81728},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,81731,81732],{},[119,81733],{"alt":32,"src":81734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[27,81736,81738],{"className":50701,"code":81737,"language":50703,"meta":32,"style":32},"\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",[34,81739,81740,81750,81764,81768,81776,81790,81810,81822,81830,81837,81849,81861,81873,81885,81895,81905,81909,81917,81925,81929,81937,81949,81957,81979,81984,81989,82022,82030,82038,82042],{"__ignoreMap":32},[37,81741,81742,81744,81746,81748],{"class":39,"line":40},[37,81743,51365],{"class":54},[37,81745,51369],{"class":51368},[37,81747,51372],{"class":2035},[37,81749,51375],{"class":54},[37,81751,81752,81754,81756,81758,81760,81762],{"class":39,"line":47},[37,81753,1113],{"class":54},[37,81755,50703],{"class":51368},[37,81757,51384],{"class":2035},[37,81759,70],{"class":54},[37,81761,51389],{"class":309},[37,81763,51375],{"class":54},[37,81765,81766],{"class":39,"line":58},[37,81767,2472],{"emptyLinePlaceholder":131},[37,81769,81770,81772,81774],{"class":39,"line":64},[37,81771,1113],{"class":54},[37,81773,51402],{"class":51368},[37,81775,51375],{"class":54},[37,81777,81778,81780,81782,81784,81786,81788],{"class":39,"line":76},[37,81779,52212],{"class":54},[37,81781,51412],{"class":51368},[37,81783,51415],{"class":2035},[37,81785,70],{"class":54},[37,81787,51420],{"class":309},[37,81789,51375],{"class":54},[37,81791,81792,81794,81796,81798,81800,81802,81804,81806,81808],{"class":39,"line":92},[37,81793,52212],{"class":54},[37,81795,51412],{"class":51368},[37,81797,14992],{"class":2035},[37,81799,70],{"class":54},[37,81801,51459],{"class":309},[37,81803,51439],{"class":2035},[37,81805,70],{"class":54},[37,81807,51466],{"class":309},[37,81809,51375],{"class":54},[37,81811,81812,81814,81816,81818,81820],{"class":39,"line":97},[37,81813,52212],{"class":54},[37,81815,51475],{"class":51368},[37,81817,51478],{"class":54},[37,81819,51475],{"class":51368},[37,81821,51375],{"class":54},[37,81823,81824,81826,81828],{"class":39,"line":107},[37,81825,52212],{"class":54},[37,81827,123],{"class":51368},[37,81829,51375],{"class":54},[37,81831,81832,81835],{"class":39,"line":1390},[37,81833,81834],{"class":51368},"    div",[37,81836,15644],{"class":54},[37,81838,81839,81841,81843,81845,81847],{"class":39,"line":1402},[37,81840,54839],{"class":82},[37,81842,51505],{"class":54},[37,81844,1794],{"class":82},[37,81846,51560],{"class":50},[37,81848,1364],{"class":54},[37,81850,81851,81853,81855,81857,81859],{"class":39,"line":1684},[37,81852,54853],{"class":82},[37,81854,51505],{"class":54},[37,81856,606],{"class":82},[37,81858,51560],{"class":50},[37,81860,1364],{"class":54},[37,81862,81863,81865,81867,81869,81871],{"class":39,"line":1689},[37,81864,57427],{"class":82},[37,81866,51505],{"class":54},[37,81868,606],{"class":82},[37,81870,51560],{"class":50},[37,81872,1364],{"class":54},[37,81874,81875,81877,81879,81881,81883],{"class":39,"line":1695},[37,81876,65201],{"class":82},[37,81878,51505],{"class":54},[37,81880,702],{"class":82},[37,81882,51560],{"class":50},[37,81884,1364],{"class":54},[37,81886,81887,81889,81891,81893],{"class":39,"line":1700},[37,81888,57354],{"class":82},[37,81890,51505],{"class":54},[37,81892,51660],{"class":82},[37,81894,1364],{"class":54},[37,81896,81897,81899,81901,81903],{"class":39,"line":1714},[37,81898,54952],{"class":82},[37,81900,51505],{"class":54},[37,81902,51713],{"class":82},[37,81904,1364],{"class":54},[37,81906,81907],{"class":39,"line":1719},[37,81908,2259],{"class":54},[37,81910,81911,81913,81915],{"class":39,"line":1725},[37,81912,52485],{"class":54},[37,81914,123],{"class":51368},[37,81916,51375],{"class":54},[37,81918,81919,81921,81923],{"class":39,"line":1746},[37,81920,51853],{"class":54},[37,81922,51402],{"class":51368},[37,81924,51375],{"class":54},[37,81926,81927],{"class":39,"line":1751},[37,81928,2472],{"emptyLinePlaceholder":131},[37,81930,81931,81933,81935],{"class":39,"line":1765},[37,81932,1113],{"class":54},[37,81934,51868],{"class":51368},[37,81936,51375],{"class":54},[37,81938,81939,81941,81943,81945,81947],{"class":39,"line":1770},[37,81940,52212],{"class":54},[37,81942,51679],{"class":51368},[37,81944,55382],{"class":54},[37,81946,51679],{"class":51368},[37,81948,51375],{"class":54},[37,81950,81951,81953,81955],{"class":39,"line":1799},[37,81952,52212],{"class":54},[37,81954,51881],{"class":51368},[37,81956,51375],{"class":54},[37,81958,81959,81961,81964,81966,81969,81972,81974,81977],{"class":39,"line":1804},[37,81960,11293],{"class":50},[37,81962,81963],{"class":82}," spec",[37,81965,13636],{"class":50},[37,81967,81968],{"class":54}," { size: ",[37,81970,81971],{"class":309},"'40cm*40cm'",[37,81973,55532],{"class":54},[37,81975,81976],{"class":309},"'黑色'",[37,81978,55672],{"class":54},[37,81980,81981],{"class":39,"line":1821},[37,81982,81983],{"class":43},"    \u002F\u002F const arr = Object.values(spec)\n",[37,81985,81986],{"class":39,"line":1826},[37,81987,81988],{"class":43},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[37,81990,81991,81993,81995,81997,82000,82002,82004,82007,82010,82013,82015,82017,82020],{"class":39,"line":1831},[37,81992,52475],{"class":54},[37,81994,54467],{"class":2035},[37,81996,208],{"class":54},[37,81998,81999],{"class":309},"'div'",[37,82001,74317],{"class":54},[37,82003,70],{"class":50},[37,82005,82006],{"class":54}," Object.",[37,82008,82009],{"class":2035},"values",[37,82011,82012],{"class":54},"(spec).",[37,82014,74291],{"class":2035},[37,82016,208],{"class":54},[37,82018,82019],{"class":309},"'\u002F'",[37,82021,214],{"class":54},[37,82023,82024,82026,82028],{"class":39,"line":1836},[37,82025,52485],{"class":54},[37,82027,51881],{"class":51368},[37,82029,51375],{"class":54},[37,82031,82032,82034,82036],{"class":39,"line":1850},[37,82033,51853],{"class":54},[37,82035,51868],{"class":51368},[37,82037,51375],{"class":54},[37,82039,82040],{"class":39,"line":1855},[37,82041,2472],{"emptyLinePlaceholder":131},[37,82043,82044,82046,82048],{"class":39,"line":2649},[37,82045,51853],{"class":54},[37,82047,50703],{"class":51368},[37,82049,51375],{"class":54},[14,82051,82052],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22982,82054,82056],{"id":82055},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,82058,82059],{},"静态方法，将伪数组转换为真数组",[14,82061,82062],{},[119,82063],{"alt":32,"src":82064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[27,82066,82068],{"className":53135,"code":82067,"language":53137,"meta":32,"style":32},"\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",[34,82069,82070,82078,82086,82098,82110,82122,82130,82138,82143,82148,82153,82158,82166],{"__ignoreMap":32},[37,82071,82072,82074,82076],{"class":39,"line":40},[37,82073,1113],{"class":54},[37,82075,51868],{"class":51368},[37,82077,51375],{"class":54},[37,82079,82080,82082,82084],{"class":39,"line":47},[37,82081,52212],{"class":54},[37,82083,1210],{"class":51368},[37,82085,51375],{"class":54},[37,82087,82088,82090,82092,82094,82096],{"class":39,"line":58},[37,82089,51409],{"class":54},[37,82091,161],{"class":51368},[37,82093,55382],{"class":54},[37,82095,161],{"class":51368},[37,82097,51375],{"class":54},[37,82099,82100,82102,82104,82106,82108],{"class":39,"line":64},[37,82101,51409],{"class":54},[37,82103,161],{"class":51368},[37,82105,55382],{"class":54},[37,82107,161],{"class":51368},[37,82109,51375],{"class":54},[37,82111,82112,82114,82116,82118,82120],{"class":39,"line":76},[37,82113,51409],{"class":54},[37,82115,161],{"class":51368},[37,82117,55382],{"class":54},[37,82119,161],{"class":51368},[37,82121,51375],{"class":54},[37,82123,82124,82126,82128],{"class":39,"line":92},[37,82125,52485],{"class":54},[37,82127,1210],{"class":51368},[37,82129,51375],{"class":54},[37,82131,82132,82134,82136],{"class":39,"line":97},[37,82133,52212],{"class":54},[37,82135,51881],{"class":51368},[37,82137,51375],{"class":54},[37,82139,82140],{"class":39,"line":107},[37,82141,82142],{"class":54},"    const lis = document.querySelectorAll('li')\n",[37,82144,82145],{"class":39,"line":1390},[37,82146,82147],{"class":54},"    const liss = Array.from(lis)\n",[37,82149,82150],{"class":39,"line":1402},[37,82151,82152],{"class":54},"    liss.pop()\n",[37,82154,82155],{"class":39,"line":1684},[37,82156,82157],{"class":54},"    console.log(liss)\n",[37,82159,82160,82162,82164],{"class":39,"line":1689},[37,82161,52485],{"class":54},[37,82163,51881],{"class":51368},[37,82165,51375],{"class":54},[37,82167,82168,82170,82172],{"class":39,"line":1695},[37,82169,51853],{"class":54},[37,82171,51868],{"class":51368},[37,82173,51375],{"class":54},[14,82175,82176],{},[119,82177],{"alt":32,"src":82178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22070,82180,82182],{"id":82181},"_41053-string","4.10.5.3 String",[14,82184,82185],{},[119,82186],{"alt":32,"src":82187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22982,82189,82191],{"id":82190},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[27,82193,82195],{"className":53135,"code":82194,"language":53137,"meta":32,"style":32},"\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",[34,82196,82197,82205,82213,82218,82223,82228,82232,82237,82242,82247,82255],{"__ignoreMap":32},[37,82198,82199,82201,82203],{"class":39,"line":40},[37,82200,1113],{"class":54},[37,82202,51868],{"class":51368},[37,82204,51375],{"class":54},[37,82206,82207,82209,82211],{"class":39,"line":47},[37,82208,52212],{"class":54},[37,82210,51881],{"class":51368},[37,82212,51375],{"class":54},[37,82214,82215],{"class":39,"line":58},[37,82216,82217],{"class":54},"    \u002F\u002F 把字符串转化为数组\n",[37,82219,82220],{"class":39,"line":64},[37,82221,82222],{"class":54},"    const str = 'pink,red'\n",[37,82224,82225],{"class":39,"line":76},[37,82226,82227],{"class":54},"    const arr = str.split(',')\n",[37,82229,82230],{"class":39,"line":92},[37,82231,80706],{"class":54},[37,82233,82234],{"class":39,"line":97},[37,82235,82236],{"class":54},"    const str1 = '2025-8-25'\n",[37,82238,82239],{"class":39,"line":107},[37,82240,82241],{"class":54},"    const arr1 = str1.split('-')\n",[37,82243,82244],{"class":39,"line":1390},[37,82245,82246],{"class":54},"    console.log(arr1)\n",[37,82248,82249,82251,82253],{"class":39,"line":1402},[37,82250,52485],{"class":54},[37,82252,51881],{"class":51368},[37,82254,51375],{"class":54},[37,82256,82257,82259,82261],{"class":39,"line":1684},[37,82258,51853],{"class":54},[37,82260,51868],{"class":51368},[37,82262,51375],{"class":54},[22982,82264,82266],{"id":82265},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82268,5253],{},[14,82270,82271],{},"substring(indexStart)",[14,82273,82274],{},"substring(indexStart, indexEnd)",[1210,82276,82277,82288,82300,82310],{},[161,82278,82279,82280,82283,82284,82287],{},"如果省略了 ",[34,82281,82282],{},"indexEnd","，则 ",[34,82285,82286],{},"substring()"," 提取字符直到字符串的末尾",[161,82289,82290,82291,82294,82295,82283,82297,82299],{},"如果 ",[34,82292,82293],{},"indexStart"," 等于 ",[34,82296,82282],{},[34,82298,82286],{}," 返回一个空字符串",[161,82301,82290,82302,82304,82305,82283,82307,82309],{},[34,82303,82293],{}," 大于 ",[34,82306,82282],{},[34,82308,82286],{}," 的效果就像交换了这两个参数一样",[161,82311,82312],{},"结束的索引号不包含想要截取的部分",[27,82314,82316],{"className":81557,"code":82315,"language":81559,"meta":32,"style":32},"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",[34,82317,82318,82330,82334,82368,82398,82402,82433,82437,82464,82494,82524,82528,82559],{"__ignoreMap":32},[37,82319,82320,82323,82325,82328],{"class":39,"line":40},[37,82321,82322],{"class":54},"const anyString ",[37,82324,70],{"class":50},[37,82326,82327],{"class":309}," \"Mozilla\"",[37,82329,1364],{"class":54},[37,82331,82332],{"class":39,"line":47},[37,82333,2472],{"emptyLinePlaceholder":131},[37,82335,82336,82339,82341,82343,82345,82348,82350,82353,82355,82357,82359,82361,82363,82365],{"class":39,"line":58},[37,82337,82338],{"class":82},"console",[37,82340,761],{"class":54},[37,82342,58315],{"class":82},[37,82344,208],{"class":54},[37,82346,82347],{"class":82},"anyString",[37,82349,761],{"class":54},[37,82351,82352],{"class":82},"substring",[37,82354,208],{"class":54},[37,82356,396],{"class":82},[37,82358,12507],{"class":54},[37,82360,422],{"class":82},[37,82362,75321],{"class":54},[37,82364,33398],{"class":50},[37,82366,82367],{"class":309}," 'M'\n",[37,82369,82370,82372,82374,82376,82378,82380,82382,82384,82386,82388,82390,82392,82394,82396],{"class":39,"line":64},[37,82371,82338],{"class":82},[37,82373,761],{"class":54},[37,82375,58315],{"class":82},[37,82377,208],{"class":54},[37,82379,82347],{"class":82},[37,82381,761],{"class":54},[37,82383,82352],{"class":82},[37,82385,208],{"class":54},[37,82387,422],{"class":82},[37,82389,12507],{"class":54},[37,82391,396],{"class":82},[37,82393,75321],{"class":54},[37,82395,33398],{"class":50},[37,82397,82367],{"class":309},[37,82399,82400],{"class":39,"line":76},[37,82401,2472],{"emptyLinePlaceholder":131},[37,82403,82404,82406,82408,82410,82412,82414,82416,82418,82420,82422,82424,82426,82428,82430],{"class":39,"line":92},[37,82405,82338],{"class":82},[37,82407,761],{"class":54},[37,82409,58315],{"class":82},[37,82411,208],{"class":54},[37,82413,82347],{"class":82},[37,82415,761],{"class":54},[37,82417,82352],{"class":82},[37,82419,208],{"class":54},[37,82421,396],{"class":82},[37,82423,12507],{"class":54},[37,82425,549],{"class":82},[37,82427,75321],{"class":54},[37,82429,33398],{"class":50},[37,82431,82432],{"class":309}," 'Mozill'\n",[37,82434,82435],{"class":39,"line":97},[37,82436,2472],{"emptyLinePlaceholder":131},[37,82438,82439,82441,82443,82445,82447,82449,82451,82453,82455,82457,82459,82461],{"class":39,"line":107},[37,82440,82338],{"class":82},[37,82442,761],{"class":54},[37,82444,58315],{"class":82},[37,82446,208],{"class":54},[37,82448,82347],{"class":82},[37,82450,761],{"class":54},[37,82452,82352],{"class":82},[37,82454,208],{"class":54},[37,82456,498],{"class":82},[37,82458,75321],{"class":54},[37,82460,33398],{"class":50},[37,82462,82463],{"class":309}," 'lla'\n",[37,82465,82466,82468,82470,82472,82474,82476,82478,82480,82482,82484,82486,82488,82490,82492],{"class":39,"line":1390},[37,82467,82338],{"class":82},[37,82469,761],{"class":54},[37,82471,58315],{"class":82},[37,82473,208],{"class":54},[37,82475,82347],{"class":82},[37,82477,761],{"class":54},[37,82479,82352],{"class":82},[37,82481,208],{"class":54},[37,82483,498],{"class":82},[37,82485,12507],{"class":54},[37,82487,574],{"class":82},[37,82489,75377],{"class":54},[37,82491,33398],{"class":50},[37,82493,82463],{"class":309},[37,82495,82496,82498,82500,82502,82504,82506,82508,82510,82512,82514,82516,82518,82520,82522],{"class":39,"line":1402},[37,82497,82338],{"class":82},[37,82499,761],{"class":54},[37,82501,58315],{"class":82},[37,82503,208],{"class":54},[37,82505,82347],{"class":82},[37,82507,761],{"class":54},[37,82509,82352],{"class":82},[37,82511,208],{"class":54},[37,82513,574],{"class":82},[37,82515,12507],{"class":54},[37,82517,498],{"class":82},[37,82519,75321],{"class":54},[37,82521,33398],{"class":50},[37,82523,82463],{"class":309},[37,82525,82526],{"class":39,"line":1684},[37,82527,2472],{"emptyLinePlaceholder":131},[37,82529,82530,82532,82534,82536,82538,82540,82542,82544,82546,82548,82550,82552,82554,82556],{"class":39,"line":1689},[37,82531,82338],{"class":82},[37,82533,761],{"class":54},[37,82535,58315],{"class":82},[37,82537,208],{"class":54},[37,82539,82347],{"class":82},[37,82541,761],{"class":54},[37,82543,82352],{"class":82},[37,82545,208],{"class":54},[37,82547,396],{"class":82},[37,82549,12507],{"class":54},[37,82551,574],{"class":82},[37,82553,75321],{"class":54},[37,82555,33398],{"class":50},[37,82557,82558],{"class":309}," 'Mozilla'\n",[37,82560,82561,82563,82565,82567,82569,82571,82573,82575,82577,82579,82581,82583,82585,82587],{"class":39,"line":1695},[37,82562,82338],{"class":82},[37,82564,761],{"class":54},[37,82566,58315],{"class":82},[37,82568,208],{"class":54},[37,82570,82347],{"class":82},[37,82572,761],{"class":54},[37,82574,82352],{"class":82},[37,82576,208],{"class":54},[37,82578,396],{"class":82},[37,82580,12507],{"class":54},[37,82582,650],{"class":82},[37,82584,75321],{"class":54},[37,82586,33398],{"class":50},[37,82588,82558],{"class":309},[22982,82590,82592],{"id":82591},"_410533-startswith","4.10.5.3.3 startsWith",[14,82594,82595,82598,82599,82604,82605,82607,82608],{},[34,82596,82597],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[354,82600,82601],{},[34,82602,82603],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[34,82606,1435],{}," 或 ",[34,82609,66088],{},[27,82611,82613],{"className":77563,"code":82612,"language":77565,"meta":32,"style":32},"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",[34,82614,82615,82627,82646,82651,82671],{"__ignoreMap":32},[37,82616,82617,82619,82622,82624],{"class":39,"line":40},[37,82618,6864],{"class":50},[37,82620,82621],{"class":54}," str1 ",[37,82623,70],{"class":50},[37,82625,82626],{"class":309}," \"Saturday night plans\"\n",[37,82628,82629,82631,82633,82636,82639,82641,82644],{"class":39,"line":47},[37,82630,77600],{"class":54},[37,82632,58315],{"class":2035},[37,82634,82635],{"class":54},"(str1.",[37,82637,82638],{"class":2035},"startsWith",[37,82640,208],{"class":54},[37,82642,82643],{"class":309},"\"Sat\"",[37,82645,30567],{"class":54},[37,82647,82648],{"class":39,"line":58},[37,82649,82650],{"class":43},"\u002F\u002F Expected output: true\n",[37,82652,82653,82655,82657,82659,82661,82663,82665,82667,82669],{"class":39,"line":64},[37,82654,77600],{"class":54},[37,82656,58315],{"class":2035},[37,82658,82635],{"class":54},[37,82660,82638],{"class":2035},[37,82662,208],{"class":54},[37,82664,82643],{"class":309},[37,82666,12507],{"class":54},[37,82668,276],{"class":82},[37,82670,30567],{"class":54},[37,82672,82673],{"class":39,"line":76},[37,82674,82675],{"class":43},"\u002F\u002F Expected output: false\n",[27,82677,82679],{"className":50701,"code":82678,"language":50703,"meta":32,"style":32},"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",[34,82680,82681,82686,82691,82695,82700,82705],{"__ignoreMap":32},[37,82682,82683],{"class":39,"line":40},[37,82684,82685],{"class":54},"startsWith(searchString)\n",[37,82687,82688],{"class":39,"line":47},[37,82689,82690],{"class":54},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[37,82692,82693],{"class":39,"line":58},[37,82694,2472],{"emptyLinePlaceholder":131},[37,82696,82697],{"class":39,"line":64},[37,82698,82699],{"class":54},"const str3 = 'pink老师上课中'\n",[37,82701,82702],{"class":39,"line":76},[37,82703,82704],{"class":54},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[37,82706,82707],{"class":39,"line":92},[37,82708,82709],{"class":54},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22982,82711,82713],{"id":82712},"_410534-includes","4.10.5.3.4 includes",[14,82715,82716],{},"includes(searchString) includes(searchString, position)",[158,82718,82719],{},[161,82720,82721],{},"searchString:",[14,82723,82724,82725,82727,82728,82733,82734,82739,82740,21572,82743,82746,82747,82750],{},"一个要在 ",[34,82726,1373],{}," 中查找的字符串。",[443,82729,82732],{"href":82730,"rel":82731},"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",[23937],"不能是正则表达式","。所有非正则表达式的值都会被",[443,82735,82738],{"href":82736,"rel":82737},"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",[23937],"强制转换为字符串","，因此如果该参数被省略或传入 ",[34,82741,82742],{},"undefined",[34,82744,82745],{},"includes()"," 方法会在字符串中搜索 ",[34,82748,82749],{},"\"undefined\"","，这通常不是你想要的",[158,82752,82753],{"start":47},[161,82754,82755,1062],{},[34,82756,82757],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,82759,82760,82761,82764,82765],{},"在字符串中开始搜索 ",[34,82762,82763],{},"searchString"," 的位置。默认值为 ",[34,82766,396],{},[158,82768,82769],{"start":58},[161,82770,82771],{},"返回值：",[14,82773,82774,82775,82777,82778,82782,82783],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[34,82776,82763],{}," 为空字符串的情况），则返回 ",[354,82779,82780],{},[34,82781,1435],{}," ，否则返回 ",[354,82784,82785],{},[34,82786,66088],{},[158,82788,82789],{"start":64},[161,82790,82791],{},"异常：",[14,82793,82290,82794,13867,82796,82800],{},[34,82795,82763],{},[443,82797,82799],{"href":82730,"rel":82798},[23937],"是一个正则表达式","，则会抛出",[14,82802,82803],{},"只要是有就是true，不需要非得以谁开头结尾",[27,82805,82807],{"className":77563,"code":82806,"language":77565,"meta":32,"style":32},"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",[34,82808,82809,82820,82843,82862,82882,82904,82923],{"__ignoreMap":32},[37,82810,82811,82813,82815,82817],{"class":39,"line":40},[37,82812,6864],{"class":50},[37,82814,79843],{"class":54},[37,82816,70],{"class":50},[37,82818,82819],{"class":309}," \"To be, or not to be, that is the question.\"\n",[37,82821,82822,82824,82826,82829,82832,82834,82837,82840],{"class":39,"line":47},[37,82823,77600],{"class":54},[37,82825,58315],{"class":2035},[37,82827,82828],{"class":54},"(str.",[37,82830,82831],{"class":2035},"includes",[37,82833,208],{"class":54},[37,82835,82836],{"class":309},"\"To be\"",[37,82838,82839],{"class":54},"))",[37,82841,82842],{"class":43},"  \u002F\u002F true\n",[37,82844,82845,82847,82849,82851,82853,82855,82858,82860],{"class":39,"line":58},[37,82846,77600],{"class":54},[37,82848,58315],{"class":2035},[37,82850,82828],{"class":54},[37,82852,82831],{"class":2035},[37,82854,208],{"class":54},[37,82856,82857],{"class":309},"\"question\"",[37,82859,82839],{"class":54},[37,82861,82842],{"class":43},[37,82863,82864,82866,82868,82870,82872,82874,82877,82879],{"class":39,"line":64},[37,82865,77600],{"class":54},[37,82867,58315],{"class":2035},[37,82869,82828],{"class":54},[37,82871,82831],{"class":2035},[37,82873,208],{"class":54},[37,82875,82876],{"class":309},"\"nonexistent\"",[37,82878,82839],{"class":54},[37,82880,82881],{"class":43},"  \u002F\u002F false\n",[37,82883,82884,82886,82888,82890,82892,82894,82896,82898,82900,82902],{"class":39,"line":76},[37,82885,77600],{"class":54},[37,82887,58315],{"class":2035},[37,82889,82828],{"class":54},[37,82891,82831],{"class":2035},[37,82893,208],{"class":54},[37,82895,82836],{"class":309},[37,82897,12507],{"class":54},[37,82899,422],{"class":82},[37,82901,82839],{"class":54},[37,82903,82881],{"class":43},[37,82905,82906,82908,82910,82912,82914,82916,82919,82921],{"class":39,"line":92},[37,82907,77600],{"class":54},[37,82909,58315],{"class":2035},[37,82911,82828],{"class":54},[37,82913,82831],{"class":2035},[37,82915,208],{"class":54},[37,82917,82918],{"class":309},"\"TO BE\"",[37,82920,82839],{"class":54},[37,82922,82881],{"class":43},[37,82924,82925,82927,82929,82931,82933,82935,82937,82939],{"class":39,"line":97},[37,82926,77600],{"class":54},[37,82928,58315],{"class":2035},[37,82930,82828],{"class":54},[37,82932,82831],{"class":2035},[37,82934,208],{"class":54},[37,82936,7724],{"class":309},[37,82938,82839],{"class":54},[37,82940,82842],{"class":43},[22982,82942,82944],{"id":82943},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[27,82946,82948],{"className":53135,"code":82947,"language":53137,"meta":32,"style":32},"\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",[34,82949,82950,82958,82966,82971,82976,82981,82986,82991,82999],{"__ignoreMap":32},[37,82951,82952,82954,82956],{"class":39,"line":40},[37,82953,1113],{"class":54},[37,82955,51868],{"class":51368},[37,82957,51375],{"class":54},[37,82959,82960,82962,82964],{"class":39,"line":47},[37,82961,52212],{"class":54},[37,82963,51881],{"class":51368},[37,82965,51375],{"class":54},[37,82967,82968],{"class":39,"line":58},[37,82969,82970],{"class":54},"    const num = 10\n",[37,82972,82973],{"class":39,"line":64},[37,82974,82975],{"class":54},"    \u002F\u002F 强制转换\n",[37,82977,82978],{"class":39,"line":76},[37,82979,82980],{"class":54},"    console.log(String(num))\n",[37,82982,82983],{"class":39,"line":92},[37,82984,82985],{"class":54},"    \u002F\u002F toString()方法转换\n",[37,82987,82988],{"class":39,"line":97},[37,82989,82990],{"class":54},"    console.log(num.toString())\n",[37,82992,82993,82995,82997],{"class":39,"line":107},[37,82994,52485],{"class":54},[37,82996,51881],{"class":51368},[37,82998,51375],{"class":54},[37,83000,83001,83003,83005],{"class":39,"line":1390},[37,83002,51853],{"class":54},[37,83004,51868],{"class":51368},[37,83006,51375],{"class":54},[22982,83008,83010],{"id":83009},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,83012,83013],{},[119,83014],{"alt":32,"src":83015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[27,83017,83019],{"className":50701,"code":83018,"language":50703,"meta":32,"style":32},"\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",[34,83020,83021,83031,83045,83049,83057,83071,83091,83103,83111,83115,83123,83135,83143,83155,83160,83165,83170,83217,83233,83241,83249,83253],{"__ignoreMap":32},[37,83022,83023,83025,83027,83029],{"class":39,"line":40},[37,83024,51365],{"class":54},[37,83026,51369],{"class":51368},[37,83028,51372],{"class":2035},[37,83030,51375],{"class":54},[37,83032,83033,83035,83037,83039,83041,83043],{"class":39,"line":47},[37,83034,1113],{"class":54},[37,83036,50703],{"class":51368},[37,83038,51384],{"class":2035},[37,83040,70],{"class":54},[37,83042,51389],{"class":309},[37,83044,51375],{"class":54},[37,83046,83047],{"class":39,"line":58},[37,83048,2472],{"emptyLinePlaceholder":131},[37,83050,83051,83053,83055],{"class":39,"line":64},[37,83052,1113],{"class":54},[37,83054,51402],{"class":51368},[37,83056,51375],{"class":54},[37,83058,83059,83061,83063,83065,83067,83069],{"class":39,"line":76},[37,83060,52212],{"class":54},[37,83062,51412],{"class":51368},[37,83064,51415],{"class":2035},[37,83066,70],{"class":54},[37,83068,51420],{"class":309},[37,83070,51375],{"class":54},[37,83072,83073,83075,83077,83079,83081,83083,83085,83087,83089],{"class":39,"line":92},[37,83074,52212],{"class":54},[37,83076,51412],{"class":51368},[37,83078,14992],{"class":2035},[37,83080,70],{"class":54},[37,83082,51459],{"class":309},[37,83084,51439],{"class":2035},[37,83086,70],{"class":54},[37,83088,51466],{"class":309},[37,83090,51375],{"class":54},[37,83092,83093,83095,83097,83099,83101],{"class":39,"line":97},[37,83094,52212],{"class":54},[37,83096,51475],{"class":51368},[37,83098,51478],{"class":54},[37,83100,51475],{"class":51368},[37,83102,51375],{"class":54},[37,83104,83105,83107,83109],{"class":39,"line":107},[37,83106,51853],{"class":54},[37,83108,51402],{"class":51368},[37,83110,51375],{"class":54},[37,83112,83113],{"class":39,"line":1390},[37,83114,2472],{"emptyLinePlaceholder":131},[37,83116,83117,83119,83121],{"class":39,"line":1402},[37,83118,1113],{"class":54},[37,83120,51868],{"class":51368},[37,83122,51375],{"class":54},[37,83124,83125,83127,83129,83131,83133],{"class":39,"line":1684},[37,83126,52212],{"class":54},[37,83128,51679],{"class":51368},[37,83130,55382],{"class":54},[37,83132,51679],{"class":51368},[37,83134,51375],{"class":54},[37,83136,83137,83139,83141],{"class":39,"line":1689},[37,83138,52212],{"class":54},[37,83140,51881],{"class":51368},[37,83142,51375],{"class":54},[37,83144,83145,83147,83150,83152],{"class":39,"line":1695},[37,83146,11293],{"class":50},[37,83148,83149],{"class":82}," gift",[37,83151,13636],{"class":50},[37,83153,83154],{"class":309}," '50g的茶叶，清洗球'\n",[37,83156,83157],{"class":39,"line":1700},[37,83158,83159],{"class":43},"    \u002F\u002F 1.把字符串拆分为数组\n",[37,83161,83162],{"class":39,"line":1714},[37,83163,83164],{"class":43},"    \u002F\u002F console.log(gift.split(','))\n",[37,83166,83167],{"class":39,"line":1719},[37,83168,83169],{"class":43},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[37,83171,83172,83174,83176,83178,83181,83184,83186,83189,83191,83193,83195,83197,83199,83202,83204,83207,83209,83211,83213,83215],{"class":39,"line":1725},[37,83173,11293],{"class":50},[37,83175,73987],{"class":82},[37,83177,13636],{"class":50},[37,83179,83180],{"class":54}," gift.",[37,83182,83183],{"class":2035},"split",[37,83185,208],{"class":54},[37,83187,83188],{"class":309},"'，'",[37,83190,30896],{"class":54},[37,83192,74112],{"class":2035},[37,83194,208],{"class":54},[37,83196,79863],{"class":5288},[37,83198,79866],{"class":50},[37,83200,83201],{"class":309}," `\u003Cspan>【赠品】${",[37,83203,79863],{"class":54},[37,83205,83206],{"class":309},"}\u003C\u002Fspan>\u003Cbr>`",[37,83208,30896],{"class":54},[37,83210,74291],{"class":2035},[37,83212,208],{"class":54},[37,83214,74296],{"class":309},[37,83216,214],{"class":54},[37,83218,83219,83221,83223,83225,83227,83229,83231],{"class":39,"line":1746},[37,83220,52475],{"class":54},[37,83222,54467],{"class":2035},[37,83224,208],{"class":54},[37,83226,81999],{"class":309},[37,83228,74317],{"class":54},[37,83230,70],{"class":50},[37,83232,74053],{"class":54},[37,83234,83235,83237,83239],{"class":39,"line":1751},[37,83236,52485],{"class":54},[37,83238,51881],{"class":51368},[37,83240,51375],{"class":54},[37,83242,83243,83245,83247],{"class":39,"line":1765},[37,83244,51853],{"class":54},[37,83246,51868],{"class":51368},[37,83248,51375],{"class":54},[37,83250,83251],{"class":39,"line":1770},[37,83252,2472],{"emptyLinePlaceholder":131},[37,83254,83255,83257,83259],{"class":39,"line":1799},[37,83256,51853],{"class":54},[37,83258,50703],{"class":51368},[37,83260,51375],{"class":54},[22070,83262,83264],{"id":83263},"_41054-number","4.10.5.4 Number",[14,83266,83267],{},[119,83268],{"alt":32,"src":83269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83271,83272],{},"整数也可以进行toFixed来保留小数",[14,83274,83275],{},"比如：",[14,83277,83278],{},"const price=10",[14,83280,83281],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22070,83283,83285],{"id":83284},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83287,83288],{},[119,83289],{"alt":32,"src":83290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[27,83292,83294],{"className":50701,"code":83293,"language":50703,"meta":32,"style":32},"\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",[34,83295,83296,83306,83320,83324,83332,83346,83366,83378,83386,83392,83402,83412,83422,83426,83430,83436,83448,83462,83466,83470,83476,83488,83504,83514,83530,83534,83538,83544,83554,83564,83568,83572,83580,83592,83604,83616,83620,83624,83632,83644,83648,83652,83663,83673,83685,83697,83707,83711,83715,83723,83732,83744,83754,83764,83768,83772,83780,83789,83796,83806,83818,83822,83826,83835,83845,83856,83868,83880,83884,83888,83897,83907,83918,83922,83926,83932,83944,83956,83966,83976,83994,84006,84010,84014,84023,84035,84045,84055,84067,84071,84079,84087,84091,84099,84113,84121,84135,84163,84171,84179,84189,84193,84201,84209,84218,84226,84235,84245,84249,84253,84261,84269,84278,84286,84294,84307,84311,84315,84323,84331,84340,84348,84356,84371,84375,84379,84387,84395,84404,84412,84420,84434,84442,84446,84450,84455,84481,84486,84523,84528,84551,84556,84610,84615,84651,84655,84661,84666,84675,84689,84698,84717,84726,84736,84741,84746,84759,84764,84818,84844,84852,84860,84864],{"__ignoreMap":32},[37,83297,83298,83300,83302,83304],{"class":39,"line":40},[37,83299,51365],{"class":54},[37,83301,51369],{"class":51368},[37,83303,51372],{"class":2035},[37,83305,51375],{"class":54},[37,83307,83308,83310,83312,83314,83316,83318],{"class":39,"line":47},[37,83309,1113],{"class":54},[37,83311,50703],{"class":51368},[37,83313,51384],{"class":2035},[37,83315,70],{"class":54},[37,83317,51389],{"class":309},[37,83319,51375],{"class":54},[37,83321,83322],{"class":39,"line":58},[37,83323,2472],{"emptyLinePlaceholder":131},[37,83325,83326,83328,83330],{"class":39,"line":64},[37,83327,1113],{"class":54},[37,83329,51402],{"class":51368},[37,83331,51375],{"class":54},[37,83333,83334,83336,83338,83340,83342,83344],{"class":39,"line":76},[37,83335,52212],{"class":54},[37,83337,51412],{"class":51368},[37,83339,51415],{"class":2035},[37,83341,70],{"class":54},[37,83343,51420],{"class":309},[37,83345,51375],{"class":54},[37,83347,83348,83350,83352,83354,83356,83358,83360,83362,83364],{"class":39,"line":92},[37,83349,52212],{"class":54},[37,83351,51412],{"class":51368},[37,83353,14992],{"class":2035},[37,83355,70],{"class":54},[37,83357,51459],{"class":309},[37,83359,51439],{"class":2035},[37,83361,70],{"class":54},[37,83363,51466],{"class":309},[37,83365,51375],{"class":54},[37,83367,83368,83370,83372,83374,83376],{"class":39,"line":97},[37,83369,52212],{"class":54},[37,83371,51475],{"class":51368},[37,83373,51478],{"class":54},[37,83375,51475],{"class":51368},[37,83377,51375],{"class":54},[37,83379,83380,83382,83384],{"class":39,"line":107},[37,83381,52212],{"class":54},[37,83383,123],{"class":51368},[37,83385,51375],{"class":54},[37,83387,83388,83390],{"class":39,"line":1390},[37,83389,6475],{"class":51368},[37,83391,15644],{"class":54},[37,83393,83394,83396,83398,83400],{"class":39,"line":1402},[37,83395,54763],{"class":82},[37,83397,51505],{"class":54},[37,83399,396],{"class":82},[37,83401,1364],{"class":54},[37,83403,83404,83406,83408,83410],{"class":39,"line":1684},[37,83405,54774],{"class":82},[37,83407,51505],{"class":54},[37,83409,396],{"class":82},[37,83411,1364],{"class":54},[37,83413,83414,83416,83418,83420],{"class":39,"line":1689},[37,83415,72664],{"class":82},[37,83417,51505],{"class":54},[37,83419,60573],{"class":82},[37,83421,1364],{"class":54},[37,83423,83424],{"class":39,"line":1695},[37,83425,2259],{"class":54},[37,83427,83428],{"class":39,"line":1700},[37,83429,2472],{"emptyLinePlaceholder":131},[37,83431,83432,83434],{"class":39,"line":1714},[37,83433,62191],{"class":2035},[37,83435,15644],{"class":54},[37,83437,83438,83440,83442,83444,83446],{"class":39,"line":1719},[37,83439,54839],{"class":82},[37,83441,51505],{"class":54},[37,83443,78642],{"class":82},[37,83445,51560],{"class":50},[37,83447,1364],{"class":54},[37,83449,83450,83452,83454,83456,83458,83460],{"class":39,"line":1725},[37,83451,54774],{"class":82},[37,83453,51505],{"class":54},[37,83455,516],{"class":82},[37,83457,51560],{"class":50},[37,83459,51624],{"class":82},[37,83461,1364],{"class":54},[37,83463,83464],{"class":39,"line":1746},[37,83465,2259],{"class":54},[37,83467,83468],{"class":39,"line":1751},[37,83469,2472],{"emptyLinePlaceholder":131},[37,83471,83472,83474],{"class":39,"line":1765},[37,83473,78693],{"class":2035},[37,83475,15644],{"class":54},[37,83477,83478,83480,83482,83484,83486],{"class":39,"line":1770},[37,83479,54763],{"class":82},[37,83481,51505],{"class":54},[37,83483,778],{"class":82},[37,83485,51560],{"class":50},[37,83487,1364],{"class":54},[37,83489,83490,83492,83494,83496,83498,83500,83502],{"class":39,"line":1799},[37,83491,61928],{"class":82},[37,83493,51505],{"class":54},[37,83495,28194],{"class":82},[37,83497,78748],{"class":82},[37,83499,78751],{"class":82},[37,83501,898],{"class":50},[37,83503,1364],{"class":54},[37,83505,83506,83508,83510,83512],{"class":39,"line":1804},[37,83507,55077],{"class":82},[37,83509,51505],{"class":54},[37,83511,51545],{"class":82},[37,83513,1364],{"class":54},[37,83515,83516,83518,83520,83522,83524,83526,83528],{"class":39,"line":1821},[37,83517,62045],{"class":82},[37,83519,51505],{"class":54},[37,83521,422],{"class":82},[37,83523,51560],{"class":50},[37,83525,51589],{"class":82},[37,83527,62312],{"class":82},[37,83529,1364],{"class":54},[37,83531,83532],{"class":39,"line":1826},[37,83533,2259],{"class":54},[37,83535,83536],{"class":39,"line":1831},[37,83537,2472],{"emptyLinePlaceholder":131},[37,83539,83540,83542],{"class":39,"line":1836},[37,83541,78811],{"class":2035},[37,83543,15644],{"class":54},[37,83545,83546,83548,83550,83552],{"class":39,"line":1850},[37,83547,62093],{"class":82},[37,83549,51505],{"class":54},[37,83551,62098],{"class":82},[37,83553,1364],{"class":54},[37,83555,83556,83558,83560,83562],{"class":39,"line":1855},[37,83557,54952],{"class":82},[37,83559,51505],{"class":54},[37,83561,61886],{"class":82},[37,83563,1364],{"class":54},[37,83565,83566],{"class":39,"line":2649},[37,83567,2259],{"class":54},[37,83569,83570],{"class":39,"line":2663},[37,83571,2472],{"emptyLinePlaceholder":131},[37,83573,83574,83576,83578],{"class":39,"line":2671},[37,83575,78693],{"class":2035},[37,83577,55683],{"class":51368},[37,83579,15644],{"class":54},[37,83581,83582,83584,83586,83588,83590],{"class":39,"line":2676},[37,83583,54839],{"class":82},[37,83585,51505],{"class":54},[37,83587,815],{"class":82},[37,83589,51560],{"class":50},[37,83591,1364],{"class":54},[37,83593,83594,83596,83598,83600,83602],{"class":39,"line":2682},[37,83595,54853],{"class":82},[37,83597,51505],{"class":54},[37,83599,815],{"class":82},[37,83601,51560],{"class":50},[37,83603,1364],{"class":54},[37,83605,83606,83608,83610,83612,83614],{"class":39,"line":2688},[37,83607,61818],{"class":82},[37,83609,51505],{"class":54},[37,83611,524],{"class":82},[37,83613,51560],{"class":50},[37,83615,1364],{"class":54},[37,83617,83618],{"class":39,"line":2693},[37,83619,2259],{"class":54},[37,83621,83622],{"class":39,"line":8020},[37,83623,2472],{"emptyLinePlaceholder":131},[37,83625,83626,83628,83630],{"class":39,"line":8044},[37,83627,78693],{"class":2035},[37,83629,62372],{"class":2035},[37,83631,15644],{"class":54},[37,83633,83634,83636,83638,83640,83642],{"class":39,"line":8049},[37,83635,54839],{"class":82},[37,83637,51505],{"class":54},[37,83639,1794],{"class":82},[37,83641,51560],{"class":50},[37,83643,1364],{"class":54},[37,83645,83646],{"class":39,"line":8055},[37,83647,2259],{"class":54},[37,83649,83650],{"class":39,"line":8082},[37,83651,2472],{"emptyLinePlaceholder":131},[37,83653,83654,83656,83658,83661],{"class":39,"line":8087},[37,83655,78693],{"class":2035},[37,83657,62372],{"class":2035},[37,83659,83660],{"class":2035}," .tag",[37,83662,15644],{"class":54},[37,83664,83665,83667,83669,83671],{"class":39,"line":8093},[37,83666,55077],{"class":82},[37,83668,51505],{"class":54},[37,83670,60937],{"class":82},[37,83672,1364],{"class":54},[37,83674,83675,83677,83679,83681,83683],{"class":39,"line":8105},[37,83676,54763],{"class":82},[37,83678,51505],{"class":54},[37,83680,282],{"class":82},[37,83682,51560],{"class":50},[37,83684,1364],{"class":54},[37,83686,83687,83689,83691,83693,83695],{"class":39,"line":8117},[37,83688,54990],{"class":82},[37,83690,51505],{"class":54},[37,83692,702],{"class":82},[37,83694,51560],{"class":50},[37,83696,1364],{"class":54},[37,83698,83699,83701,83703,83705],{"class":39,"line":8129},[37,83700,57484],{"class":82},[37,83702,51505],{"class":54},[37,83704,62138],{"class":82},[37,83706,1364],{"class":54},[37,83708,83709],{"class":39,"line":9788},[37,83710,2259],{"class":54},[37,83712,83713],{"class":39,"line":9813},[37,83714,2472],{"emptyLinePlaceholder":131},[37,83716,83717,83719,83721],{"class":39,"line":9836},[37,83718,78693],{"class":2035},[37,83720,78985],{"class":2035},[37,83722,31536],{"class":54},[37,83724,83725,83727,83730],{"class":39,"line":9860},[37,83726,78693],{"class":2035},[37,83728,83729],{"class":2035}," .sub-total",[37,83731,15644],{"class":54},[37,83733,83734,83736,83738,83740,83742],{"class":39,"line":9865},[37,83735,54990],{"class":82},[37,83737,51505],{"class":54},[37,83739,853],{"class":82},[37,83741,51560],{"class":50},[37,83743,1364],{"class":54},[37,83745,83746,83748,83750,83752],{"class":39,"line":9870},[37,83747,57484],{"class":82},[37,83749,51505],{"class":54},[37,83751,79008],{"class":82},[37,83753,1364],{"class":54},[37,83755,83756,83758,83760,83762],{"class":39,"line":9875},[37,83757,61905],{"class":82},[37,83759,51505],{"class":54},[37,83761,422],{"class":82},[37,83763,1364],{"class":54},[37,83765,83766],{"class":39,"line":9884},[37,83767,2259],{"class":54},[37,83769,83770],{"class":39,"line":9889},[37,83771,2472],{"emptyLinePlaceholder":131},[37,83773,83774,83776,83778],{"class":39,"line":9895},[37,83775,78693],{"class":2035},[37,83777,79025],{"class":2035},[37,83779,31536],{"class":54},[37,83781,83782,83784,83787],{"class":39,"line":9916},[37,83783,78693],{"class":2035},[37,83785,83786],{"class":2035}," .sub-total::before",[37,83788,31536],{"class":54},[37,83790,83791,83794],{"class":39,"line":9922},[37,83792,83793],{"class":2035},"    .amount::before",[37,83795,15644],{"class":54},[37,83797,83798,83800,83802,83804],{"class":39,"line":9936},[37,83799,79032],{"class":82},[37,83801,51505],{"class":54},[37,83803,79037],{"class":309},[37,83805,1364],{"class":54},[37,83807,83808,83810,83812,83814,83816],{"class":39,"line":9942},[37,83809,54990],{"class":82},[37,83811,51505],{"class":54},[37,83813,702],{"class":82},[37,83815,51560],{"class":50},[37,83817,1364],{"class":54},[37,83819,83820],{"class":39,"line":9969},[37,83821,2259],{"class":54},[37,83823,83824],{"class":39,"line":9978},[37,83825,2472],{"emptyLinePlaceholder":131},[37,83827,83828,83830,83833],{"class":39,"line":9984},[37,83829,78693],{"class":2035},[37,83831,83832],{"class":2035}," .spec",[37,83834,15644],{"class":54},[37,83836,83837,83839,83841,83843],{"class":39,"line":9992},[37,83838,61905],{"class":82},[37,83840,51505],{"class":54},[37,83842,282],{"class":82},[37,83844,1364],{"class":54},[37,83846,83847,83849,83851,83854],{"class":39,"line":9997},[37,83848,57484],{"class":82},[37,83850,51505],{"class":54},[37,83852,83853],{"class":82},"#888",[37,83855,1364],{"class":54},[37,83857,83858,83860,83862,83864,83866],{"class":39,"line":16676},[37,83859,54990],{"class":82},[37,83861,51505],{"class":54},[37,83863,752],{"class":82},[37,83865,51560],{"class":50},[37,83867,1364],{"class":54},[37,83869,83870,83872,83874,83876,83878],{"class":39,"line":16682},[37,83871,62068],{"class":82},[37,83873,51505],{"class":54},[37,83875,903],{"class":82},[37,83877,51560],{"class":50},[37,83879,1364],{"class":54},[37,83881,83882],{"class":39,"line":16705},[37,83883,2259],{"class":54},[37,83885,83886],{"class":39,"line":16711},[37,83887,2472],{"emptyLinePlaceholder":131},[37,83889,83890,83892,83895],{"class":39,"line":16734},[37,83891,78693],{"class":2035},[37,83893,83894],{"class":2035}," .count",[37,83896,15644],{"class":54},[37,83898,83899,83901,83903,83905],{"class":39,"line":16748},[37,83900,61905],{"class":82},[37,83902,51505],{"class":54},[37,83904,422],{"class":82},[37,83906,1364],{"class":54},[37,83908,83909,83911,83913,83916],{"class":39,"line":16768},[37,83910,57484],{"class":82},[37,83912,51505],{"class":54},[37,83914,83915],{"class":82},"#aaa",[37,83917,1364],{"class":54},[37,83919,83920],{"class":39,"line":16774},[37,83921,2259],{"class":54},[37,83923,83924],{"class":39,"line":16785},[37,83925,2472],{"emptyLinePlaceholder":131},[37,83927,83928,83930],{"class":39,"line":16808},[37,83929,72543],{"class":2035},[37,83931,15644],{"class":54},[37,83933,83934,83936,83938,83940,83942],{"class":39,"line":16830},[37,83935,54839],{"class":82},[37,83937,51505],{"class":54},[37,83939,78642],{"class":82},[37,83941,51560],{"class":50},[37,83943,1364],{"class":54},[37,83945,83946,83948,83950,83952,83954],{"class":39,"line":16835},[37,83947,54774],{"class":82},[37,83949,51505],{"class":54},[37,83951,396],{"class":82},[37,83953,51624],{"class":82},[37,83955,1364],{"class":54},[37,83957,83958,83960,83962,83964],{"class":39,"line":16841},[37,83959,55077],{"class":82},[37,83961,51505],{"class":54},[37,83963,51545],{"class":82},[37,83965,1364],{"class":54},[37,83967,83968,83970,83972,83974],{"class":39,"line":16855},[37,83969,55088],{"class":82},[37,83971,51505],{"class":54},[37,83973,51648],{"class":82},[37,83975,1364],{"class":54},[37,83977,83978,83981,83983,83985,83987,83989,83992],{"class":39,"line":16868},[37,83979,83980],{"class":82},"      border-top",[37,83982,51505],{"class":54},[37,83984,422],{"class":82},[37,83986,51560],{"class":50},[37,83988,51589],{"class":82},[37,83990,83991],{"class":82}," #4e4e4e",[37,83993,1364],{"class":54},[37,83995,83996,83998,84000,84002,84004],{"class":39,"line":16873},[37,83997,54763],{"class":82},[37,83999,51505],{"class":54},[37,84001,903],{"class":82},[37,84003,51560],{"class":50},[37,84005,1364],{"class":54},[37,84007,84008],{"class":39,"line":16887},[37,84009,2259],{"class":54},[37,84011,84012],{"class":39,"line":16892},[37,84013,2472],{"emptyLinePlaceholder":131},[37,84015,84016,84018,84021],{"class":39,"line":16898},[37,84017,72543],{"class":2035},[37,84019,84020],{"class":2035}," .amount",[37,84022,15644],{"class":54},[37,84024,84025,84027,84029,84031,84033],{"class":39,"line":16903},[37,84026,54990],{"class":82},[37,84028,51505],{"class":54},[37,84030,853],{"class":82},[37,84032,51560],{"class":50},[37,84034,1364],{"class":54},[37,84036,84037,84039,84041,84043],{"class":39,"line":16917},[37,84038,57484],{"class":82},[37,84040,51505],{"class":54},[37,84042,79008],{"class":82},[37,84044,1364],{"class":54},[37,84046,84047,84049,84051,84053],{"class":39,"line":16922},[37,84048,62402],{"class":82},[37,84050,51505],{"class":54},[37,84052,51557],{"class":82},[37,84054,1364],{"class":54},[37,84056,84057,84059,84061,84063,84065],{"class":39,"line":16927},[37,84058,61818],{"class":82},[37,84060,51505],{"class":54},[37,84062,859],{"class":82},[37,84064,51560],{"class":50},[37,84066,1364],{"class":54},[37,84068,84069],{"class":39,"line":16941},[37,84070,2259],{"class":54},[37,84072,84073,84075,84077],{"class":39,"line":16953},[37,84074,52485],{"class":54},[37,84076,123],{"class":51368},[37,84078,51375],{"class":54},[37,84080,84081,84083,84085],{"class":39,"line":16958},[37,84082,51853],{"class":54},[37,84084,51402],{"class":51368},[37,84086,51375],{"class":54},[37,84088,84089],{"class":39,"line":16971},[37,84090,2472],{"emptyLinePlaceholder":131},[37,84092,84093,84095,84097],{"class":39,"line":16976},[37,84094,1113],{"class":54},[37,84096,51868],{"class":51368},[37,84098,51375],{"class":54},[37,84100,84101,84103,84105,84107,84109,84111],{"class":39,"line":16981},[37,84102,52212],{"class":54},[37,84104,51679],{"class":51368},[37,84106,53554],{"class":2035},[37,84108,70],{"class":54},[37,84110,62676],{"class":309},[37,84112,51375],{"class":54},[37,84114,84115,84117,84119],{"class":39,"line":16986},[37,84116,52485],{"class":54},[37,84118,51679],{"class":51368},[37,84120,51375],{"class":54},[37,84122,84123,84125,84127,84129,84131,84133],{"class":39,"line":16999},[37,84124,52212],{"class":54},[37,84126,51679],{"class":51368},[37,84128,53554],{"class":2035},[37,84130,70],{"class":54},[37,84132,62648],{"class":309},[37,84134,51375],{"class":54},[37,84136,84137,84139,84141,84144,84146,84148,84150,84153,84155,84157,84159,84161],{"class":39,"line":17004},[37,84138,51409],{"class":54},[37,84140,51679],{"class":51368},[37,84142,84143],{"class":54},">合计：\u003C",[37,84145,37],{"class":51368},[37,84147,53554],{"class":2035},[37,84149,70],{"class":54},[37,84151,84152],{"class":309},"\"amount\"",[37,84154,55382],{"class":54},[37,84156,37],{"class":51368},[37,84158,55382],{"class":54},[37,84160,51679],{"class":51368},[37,84162,51375],{"class":54},[37,84164,84165,84167,84169],{"class":39,"line":32702},[37,84166,52485],{"class":54},[37,84168,51679],{"class":51368},[37,84170,51375],{"class":54},[37,84172,84173,84175,84177],{"class":39,"line":32708},[37,84174,52212],{"class":54},[37,84176,51881],{"class":51368},[37,84178,51375],{"class":54},[37,84180,84181,84183,84185,84187],{"class":39,"line":32714},[37,84182,11293],{"class":50},[37,84184,79445],{"class":82},[37,84186,13636],{"class":50},[37,84188,55515],{"class":54},[37,84190,84191],{"class":39,"line":32720},[37,84192,79454],{"class":54},[37,84194,84195,84197,84199],{"class":39,"line":32726},[37,84196,79459],{"class":54},[37,84198,79462],{"class":309},[37,84200,31536],{"class":54},[37,84202,84203,84205,84207],{"class":39,"line":32737},[37,84204,79469],{"class":54},[37,84206,79472],{"class":309},[37,84208,31536],{"class":54},[37,84210,84211,84213,84216],{"class":39,"line":32743},[37,84212,79479],{"class":54},[37,84214,84215],{"class":82},"289.9",[37,84217,31536],{"class":54},[37,84219,84220,84222,84224],{"class":39,"line":32763},[37,84221,79489],{"class":54},[37,84223,79492],{"class":309},[37,84225,31536],{"class":54},[37,84227,84228,84231,84233],{"class":39,"line":32769},[37,84229,84230],{"class":54},"        count: ",[37,84232,282],{"class":82},[37,84234,31536],{"class":54},[37,84236,84237,84240,84243],{"class":39,"line":32780},[37,84238,84239],{"class":54},"        spec: { color: ",[37,84241,84242],{"class":309},"'白色'",[37,84244,55672],{"class":54},[37,84246,84247],{"class":39,"line":32786},[37,84248,77960],{"class":54},[37,84250,84251],{"class":39,"line":32792},[37,84252,79454],{"class":54},[37,84254,84255,84257,84259],{"class":39,"line":32798},[37,84256,79459],{"class":54},[37,84258,79553],{"class":309},[37,84260,31536],{"class":54},[37,84262,84263,84265,84267],{"class":39,"line":32804},[37,84264,79469],{"class":54},[37,84266,79562],{"class":309},[37,84268,31536],{"class":54},[37,84270,84271,84273,84276],{"class":39,"line":32810},[37,84272,79479],{"class":54},[37,84274,84275],{"class":82},"109.8",[37,84277,31536],{"class":54},[37,84279,84280,84282,84284],{"class":39,"line":32816},[37,84281,79489],{"class":54},[37,84283,79580],{"class":309},[37,84285,31536],{"class":54},[37,84287,84288,84290,84292],{"class":39,"line":32822},[37,84289,84230],{"class":54},[37,84291,276],{"class":82},[37,84293,31536],{"class":54},[37,84295,84296,84299,84301,84303,84305],{"class":39,"line":32842},[37,84297,84298],{"class":54},"        spec: { size: ",[37,84300,81971],{"class":309},[37,84302,55532],{"class":54},[37,84304,81976],{"class":309},[37,84306,55672],{"class":54},[37,84308,84309],{"class":39,"line":32848},[37,84310,77960],{"class":54},[37,84312,84313],{"class":39,"line":32864},[37,84314,79454],{"class":54},[37,84316,84317,84319,84321],{"class":39,"line":32870},[37,84318,79459],{"class":54},[37,84320,79597],{"class":309},[37,84322,31536],{"class":54},[37,84324,84325,84327,84329],{"class":39,"line":32884},[37,84326,79469],{"class":54},[37,84328,79606],{"class":309},[37,84330,31536],{"class":54},[37,84332,84333,84335,84338],{"class":39,"line":32890},[37,84334,79479],{"class":54},[37,84336,84337],{"class":82},"488",[37,84339,31536],{"class":54},[37,84341,84342,84344,84346],{"class":39,"line":32905},[37,84343,79489],{"class":54},[37,84345,79624],{"class":309},[37,84347,31536],{"class":54},[37,84349,84350,84352,84354],{"class":39,"line":32911},[37,84351,84230],{"class":54},[37,84353,422],{"class":82},[37,84355,31536],{"class":54},[37,84357,84358,84360,84363,84366,84369],{"class":39,"line":32920},[37,84359,84239],{"class":54},[37,84361,84362],{"class":309},"'青色'",[37,84364,84365],{"class":54},", sum: ",[37,84367,84368],{"class":309},"'一大四小'",[37,84370,55672],{"class":54},[37,84372,84373],{"class":39,"line":32926},[37,84374,77960],{"class":54},[37,84376,84377],{"class":39,"line":32935},[37,84378,79454],{"class":54},[37,84380,84381,84383,84385],{"class":39,"line":32941},[37,84382,79459],{"class":54},[37,84384,79641],{"class":309},[37,84386,31536],{"class":54},[37,84388,84389,84391,84393],{"class":39,"line":32947},[37,84390,79469],{"class":54},[37,84392,79650],{"class":309},[37,84394,31536],{"class":54},[37,84396,84397,84399,84402],{"class":39,"line":32956},[37,84398,79479],{"class":54},[37,84400,84401],{"class":82},"139",[37,84403,31536],{"class":54},[37,84405,84406,84408,84410],{"class":39,"line":32962},[37,84407,79489],{"class":54},[37,84409,79668],{"class":309},[37,84411,31536],{"class":54},[37,84413,84414,84416,84418],{"class":39,"line":32973},[37,84415,84230],{"class":54},[37,84417,422],{"class":82},[37,84419,31536],{"class":54},[37,84421,84422,84424,84427,84429,84432],{"class":39,"line":32979},[37,84423,84298],{"class":54},[37,84425,84426],{"class":309},"'小号'",[37,84428,55532],{"class":54},[37,84430,84431],{"class":309},"'紫色'",[37,84433,55538],{"class":54},[37,84435,84436,84439],{"class":39,"line":32998},[37,84437,84438],{"class":54},"        gift: ",[37,84440,84441],{"class":309},"'50g茶叶,清洗球'\n",[37,84443,84444],{"class":39,"line":33004},[37,84445,52466],{"class":54},[37,84447,84448],{"class":39,"line":33015},[37,84449,53177],{"class":54},[37,84451,84452],{"class":39,"line":33021},[37,84453,84454],{"class":43},"    \u002F\u002F  1.根据数据渲染页面\n",[37,84456,84457,84459,84461,84463,84465,84467,84469,84471,84473,84475,84477,84479],{"class":39,"line":33041},[37,84458,52475],{"class":54},[37,84460,54467],{"class":2035},[37,84462,208],{"class":54},[37,84464,79969],{"class":309},[37,84466,74317],{"class":54},[37,84468,70],{"class":50},[37,84470,80116],{"class":54},[37,84472,74112],{"class":2035},[37,84474,208],{"class":54},[37,84476,79863],{"class":5288},[37,84478,79866],{"class":50},[37,84480,15644],{"class":54},[37,84482,84483],{"class":39,"line":33057},[37,84484,84485],{"class":43},"      \u002F\u002F 对象解构\n",[37,84487,84488,84490,84492,84494,84496,84498,84500,84503,84505,84507,84509,84512,84514,84517,84519,84521],{"class":39,"line":33063},[37,84489,58296],{"class":50},[37,84491,79875],{"class":54},[37,84493,79888],{"class":82},[37,84495,12507],{"class":54},[37,84497,79878],{"class":82},[37,84499,12507],{"class":54},[37,84501,84502],{"class":82},"count",[37,84504,12507],{"class":54},[37,84506,79883],{"class":82},[37,84508,12507],{"class":54},[37,84510,84511],{"class":82},"spec",[37,84513,12507],{"class":54},[37,84515,84516],{"class":82},"gift",[37,84518,79891],{"class":54},[37,84520,70],{"class":50},[37,84522,79896],{"class":54},[37,84524,84525],{"class":39,"line":33077},[37,84526,84527],{"class":43},"      \u002F\u002F 规格文字模块处理\n",[37,84529,84530,84532,84535,84537,84539,84541,84543,84545,84547,84549],{"class":39,"line":33083},[37,84531,58296],{"class":50},[37,84533,84534],{"class":82}," text",[37,84536,13636],{"class":50},[37,84538,82006],{"class":54},[37,84540,82009],{"class":2035},[37,84542,82012],{"class":54},[37,84544,74291],{"class":2035},[37,84546,208],{"class":54},[37,84548,82019],{"class":309},[37,84550,214],{"class":54},[37,84552,84553],{"class":39,"line":33089},[37,84554,84555],{"class":43},"      \u002F\u002F 处理赠品模块\n",[37,84557,84558,84560,84562,84564,84567,84569,84571,84573,84575,84578,84580,84582,84584,84586,84588,84591,84593,84596,84598,84600,84602,84604,84606,84608],{"class":39,"line":33100},[37,84559,58296],{"class":50},[37,84561,73987],{"class":82},[37,84563,13636],{"class":50},[37,84565,84566],{"class":54}," gift ",[37,84568,1189],{"class":50},[37,84570,83180],{"class":54},[37,84572,83183],{"class":2035},[37,84574,208],{"class":54},[37,84576,84577],{"class":309},"','",[37,84579,30896],{"class":54},[37,84581,74112],{"class":2035},[37,84583,208],{"class":54},[37,84585,79863],{"class":5288},[37,84587,79866],{"class":50},[37,84589,84590],{"class":309}," `\u003Cspan class=\"tag\">【赠品】${",[37,84592,79863],{"class":54},[37,84594,84595],{"class":309},"}\u003C\u002Fspan>`",[37,84597,30896],{"class":54},[37,84599,74291],{"class":2035},[37,84601,208],{"class":54},[37,84603,74296],{"class":309},[37,84605,13786],{"class":54},[37,84607,1062],{"class":50},[37,84609,70172],{"class":309},[37,84611,84612],{"class":39,"line":33106},[37,84613,84614],{"class":43},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[37,84616,84617,84619,84622,84624,84627,84629,84631,84633,84636,84638,84640,84642,84645,84647,84649],{"class":39,"line":33112},[37,84618,58296],{"class":50},[37,84620,84621],{"class":82}," subtotal",[37,84623,13636],{"class":50},[37,84625,84626],{"class":54}," ((price ",[37,84628,659],{"class":50},[37,84630,5826],{"class":82},[37,84632,6590],{"class":50},[37,84634,84635],{"class":54}," count) ",[37,84637,787],{"class":50},[37,84639,5826],{"class":82},[37,84641,30896],{"class":54},[37,84643,84644],{"class":2035},"toFixed",[37,84646,208],{"class":54},[37,84648,282],{"class":82},[37,84650,214],{"class":54},[37,84652,84653],{"class":39,"line":33122},[37,84654,2472],{"emptyLinePlaceholder":131},[37,84656,84657,84659],{"class":39,"line":33128},[37,84658,74050],{"class":50},[37,84660,70236],{"class":309},[37,84662,84663],{"class":39,"line":33139},[37,84664,84665],{"class":309},"        \u003Cdiv class=\"item\">\n",[37,84667,84668,84671,84673],{"class":39,"line":33145},[37,84669,84670],{"class":309},"          \u003Cimg src=\"${",[37,84672,79888],{"class":54},[37,84674,79920],{"class":309},[37,84676,84677,84680,84682,84685,84687],{"class":39,"line":33155},[37,84678,84679],{"class":309},"          \u003Cp class=\"name\">${",[37,84681,79878],{"class":54},[37,84683,84684],{"class":309},"}${",[37,84686,1373],{"class":54},[37,84688,79930],{"class":309},[37,84690,84691,84694,84696],{"class":39,"line":33160},[37,84692,84693],{"class":309},"          \u003Cp class=\"spec\">${",[37,84695,5259],{"class":54},[37,84697,79930],{"class":309},[37,84699,84700,84703,84705,84707,84709,84711,84713,84715],{"class":39,"line":33166},[37,84701,84702],{"class":309},"          \u003Cp class=\"price\">${",[37,84704,79883],{"class":54},[37,84706,761],{"class":309},[37,84708,84644],{"class":2035},[37,84710,208],{"class":309},[37,84712,282],{"class":82},[37,84714,86],{"class":309},[37,84716,79930],{"class":309},[37,84718,84719,84722,84724],{"class":39,"line":33215},[37,84720,84721],{"class":309},"          \u003Cp class=\"count\">x${",[37,84723,84502],{"class":54},[37,84725,79930],{"class":309},[37,84727,84728,84731,84734],{"class":39,"line":33262},[37,84729,84730],{"class":309},"          \u003Cp class=\"sub-total\">${",[37,84732,84733],{"class":54},"subtotal",[37,84735,79930],{"class":309},[37,84737,84738],{"class":39,"line":33267},[37,84739,84740],{"class":309},"        \u003C\u002Fdiv> \n",[37,84742,84743],{"class":39,"line":33273},[37,84744,84745],{"class":309},"             `\n",[37,84747,84748,84751,84753,84755,84757],{"class":39,"line":33292},[37,84749,84750],{"class":54},"    }).",[37,84752,74291],{"class":2035},[37,84754,208],{"class":54},[37,84756,74296],{"class":309},[37,84758,214],{"class":54},[37,84760,84761],{"class":39,"line":33298},[37,84762,84763],{"class":43},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[37,84765,84766,84768,84770,84772,84774,84777,84779,84782,84784,84786,84788,84791,84794,84796,84799,84801,84803,84805,84808,84810,84812,84814,84816],{"class":39,"line":33318},[37,84767,11293],{"class":50},[37,84769,62853],{"class":82},[37,84771,13636],{"class":50},[37,84773,80116],{"class":54},[37,84775,84776],{"class":2035},"reduce",[37,84778,2448],{"class":54},[37,84780,84781],{"class":5288},"prev",[37,84783,12507],{"class":54},[37,84785,79863],{"class":5288},[37,84787,13786],{"class":54},[37,84789,84790],{"class":50},"=>",[37,84792,84793],{"class":54}," prev ",[37,84795,685],{"class":50},[37,84797,84798],{"class":54}," (item.price ",[37,84800,659],{"class":50},[37,84802,5826],{"class":82},[37,84804,6590],{"class":50},[37,84806,84807],{"class":54}," item.count) ",[37,84809,787],{"class":50},[37,84811,5826],{"class":82},[37,84813,12507],{"class":54},[37,84815,396],{"class":82},[37,84817,214],{"class":54},[37,84819,84820,84822,84824,84826,84829,84831,84833,84836,84838,84840,84842],{"class":39,"line":33324},[37,84821,52475],{"class":54},[37,84823,54467],{"class":2035},[37,84825,208],{"class":54},[37,84827,84828],{"class":309},"'.amount'",[37,84830,74317],{"class":54},[37,84832,70],{"class":50},[37,84834,84835],{"class":54}," total.",[37,84837,84644],{"class":2035},[37,84839,208],{"class":54},[37,84841,282],{"class":82},[37,84843,214],{"class":54},[37,84845,84846,84848,84850],{"class":39,"line":33330},[37,84847,52485],{"class":54},[37,84849,51881],{"class":51368},[37,84851,51375],{"class":54},[37,84853,84854,84856,84858],{"class":39,"line":33340},[37,84855,51853],{"class":54},[37,84857,51868],{"class":51368},[37,84859,51375],{"class":54},[37,84861,84862],{"class":39,"line":33345},[37,84863,2472],{"emptyLinePlaceholder":131},[37,84865,84866,84868,84870],{"class":39,"line":33351},[37,84867,51853],{"class":54},[37,84869,50703],{"class":51368},[37,84871,51375],{"class":54},[146,84873,84875],{"id":84874},"_411-编程思想","4.11 编程思想",[175,84877,84879],{"id":84878},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,84881,84882,84885],{},[354,84883,84884],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,84887,84888],{},"调用就可以了",[14,84890,84891],{},[119,84892],{"alt":32,"src":84893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[175,84895,84897],{"id":84896},"_4112-面向对象","4.11.2 面向对象",[14,84899,84900],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,84902,84903],{},[119,84904],{"alt":32,"src":84905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,84907,84908],{},"面向对象的特性：",[1210,84910,84911,84914,84917],{},[161,84912,84913],{},"封装性",[161,84915,84916],{},"继承性",[161,84918,84919],{},"多态性",[175,84921,84923],{"id":84922},"_4113-两者比较","4.11.3 两者比较",[14,84925,84926],{},[119,84927],{"alt":32,"src":84928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[146,84930,84932],{"id":84931},"_412-构造函数回顾","4.12 构造函数回顾",[14,84934,84935],{},[119,84936],{"alt":32,"src":84937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,84939,84940],{},[119,84941],{"alt":32,"src":84942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,84944,84945],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,84947,84948],{},[119,84949],{"alt":32,"src":84950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[146,84952,84954],{"id":84953},"_413-原型","4.13 原型",[175,84956,84958],{"id":84957},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,84960,84961],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,84963,84964],{},[119,84965],{"alt":32,"src":84966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,84968,84969],{},[119,84970],{"alt":32,"src":84971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,84973,84974],{},"原型是构造函数的属性，它也是一个对象",[14,84976,84977],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,84979,84980],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[27,84982,84984],{"className":53135,"code":84983,"language":53137,"meta":32,"style":32},"\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",[34,84985,84986,84994,84999,85007,85012,85017,85022,85027,85032,85036,85040,85044,85049,85054,85058,85063,85068,85073,85078,85083,85087,85095],{"__ignoreMap":32},[37,84987,84988,84990,84992],{"class":39,"line":40},[37,84989,1113],{"class":54},[37,84991,51868],{"class":51368},[37,84993,51375],{"class":54},[37,84995,84996],{"class":39,"line":47},[37,84997,84998],{"class":43},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[37,85000,85001,85003,85005],{"class":39,"line":58},[37,85002,52212],{"class":54},[37,85004,51881],{"class":51368},[37,85006,51375],{"class":54},[37,85008,85009],{"class":39,"line":64},[37,85010,85011],{"class":54},"    function Star(uname, age) {\n",[37,85013,85014],{"class":39,"line":76},[37,85015,85016],{"class":54},"      this.uname = uname,\n",[37,85018,85019],{"class":39,"line":92},[37,85020,85021],{"class":54},"        this.age = age\n",[37,85023,85024],{"class":39,"line":97},[37,85025,85026],{"class":54},"      \u002F\u002F this.sing = function () {\n",[37,85028,85029],{"class":39,"line":107},[37,85030,85031],{"class":54},"      \u002F\u002F   console.log('唱歌')\n",[37,85033,85034],{"class":39,"line":1390},[37,85035,2472],{"emptyLinePlaceholder":131},[37,85037,85038],{"class":39,"line":1402},[37,85039,60105],{"class":54},[37,85041,85042],{"class":39,"line":1684},[37,85043,2259],{"class":54},[37,85045,85046],{"class":39,"line":1689},[37,85047,85048],{"class":54},"    Star.prototype.sing = function () {\n",[37,85050,85051],{"class":39,"line":1695},[37,85052,85053],{"class":54},"      console.log('唱歌')\n",[37,85055,85056],{"class":39,"line":1700},[37,85057,2259],{"class":54},[37,85059,85060],{"class":39,"line":1714},[37,85061,85062],{"class":54},"    \u002F\u002F console.dir(Star.prototype)\n",[37,85064,85065],{"class":39,"line":1719},[37,85066,85067],{"class":54},"    const pink = new Star('pink', 18)\n",[37,85069,85070],{"class":39,"line":1725},[37,85071,85072],{"class":54},"    const red = new Star('red', 20)\n",[37,85074,85075],{"class":39,"line":1746},[37,85076,85077],{"class":54},"    pink.sing()\n",[37,85079,85080],{"class":39,"line":1751},[37,85081,85082],{"class":54},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[37,85084,85085],{"class":39,"line":1765},[37,85086,2472],{"emptyLinePlaceholder":131},[37,85088,85089,85091,85093],{"class":39,"line":1770},[37,85090,52485],{"class":54},[37,85092,51881],{"class":51368},[37,85094,51375],{"class":54},[37,85096,85097,85099,85101],{"class":39,"line":1799},[37,85098,51853],{"class":54},[37,85100,51868],{"class":51368},[37,85102,51375],{"class":54},[14,85104,85105],{},[119,85106],{"alt":32,"src":85107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[27,85109,85111],{"className":53135,"code":85110,"language":53137,"meta":32,"style":32},"\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",[34,85112,85113,85121,85129,85134,85139,85144,85149,85153,85158,85163,85168,85172,85177,85181,85185,85190,85194,85202],{"__ignoreMap":32},[37,85114,85115,85117,85119],{"class":39,"line":40},[37,85116,1113],{"class":54},[37,85118,51868],{"class":51368},[37,85120,51375],{"class":54},[37,85122,85123,85125,85127],{"class":39,"line":47},[37,85124,52212],{"class":54},[37,85126,51881],{"class":51368},[37,85128,51375],{"class":54},[37,85130,85131],{"class":39,"line":58},[37,85132,85133],{"class":54},"    let that\n",[37,85135,85136],{"class":39,"line":64},[37,85137,85138],{"class":54},"    function Star(uname) {\n",[37,85140,85141],{"class":39,"line":76},[37,85142,85143],{"class":54},"      this.uname = uname\n",[37,85145,85146],{"class":39,"line":92},[37,85147,85148],{"class":54},"      that = this\n",[37,85150,85151],{"class":39,"line":97},[37,85152,2259],{"class":54},[37,85154,85155],{"class":39,"line":107},[37,85156,85157],{"class":54},"    \u002F\u002F 实例对象是 ldh\n",[37,85159,85160],{"class":39,"line":1390},[37,85161,85162],{"class":54},"    const ldh = new Star('刘德华')\n",[37,85164,85165],{"class":39,"line":1402},[37,85166,85167],{"class":54},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[37,85169,85170],{"class":39,"line":1684},[37,85171,2472],{"emptyLinePlaceholder":131},[37,85173,85174],{"class":39,"line":1689},[37,85175,85176],{"class":54},"    Star.sing = function () {\n",[37,85178,85179],{"class":39,"line":1695},[37,85180,85053],{"class":54},[37,85182,85183],{"class":39,"line":1700},[37,85184,2259],{"class":54},[37,85186,85187],{"class":39,"line":1714},[37,85188,85189],{"class":54},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[37,85191,85192],{"class":39,"line":1719},[37,85193,2472],{"emptyLinePlaceholder":131},[37,85195,85196,85198,85200],{"class":39,"line":1725},[37,85197,52485],{"class":54},[37,85199,51881],{"class":51368},[37,85201,51375],{"class":54},[37,85203,85204,85206,85208],{"class":39,"line":1746},[37,85205,51853],{"class":54},[37,85207,51868],{"class":51368},[37,85209,51375],{"class":54},[14,85211,85212],{},"构造函数的this指向的是实例对象；",[14,85214,85215],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[175,85217,85219],{"id":85218},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85221,85222],{},[119,85223],{"alt":32,"src":85224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[27,85226,85228],{"className":53135,"code":85227,"language":53137,"meta":32,"style":32},"\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",[34,85229,85230,85238,85246,85251,85256,85261,85266,85271,85276,85281,85286,85291,85296,85300,85305,85310,85315,85320,85324,85329,85334,85339,85344,85348,85353,85358,85363,85368,85372,85377,85381,85389],{"__ignoreMap":32},[37,85231,85232,85234,85236],{"class":39,"line":40},[37,85233,1113],{"class":54},[37,85235,51868],{"class":51368},[37,85237,51375],{"class":54},[37,85239,85240,85242,85244],{"class":39,"line":47},[37,85241,52212],{"class":54},[37,85243,51881],{"class":51368},[37,85245,51375],{"class":54},[37,85247,85248],{"class":39,"line":58},[37,85249,85250],{"class":54},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[37,85252,85253],{"class":39,"line":64},[37,85254,85255],{"class":54},"    const arr = [1, 2, 3]\n",[37,85257,85258],{"class":39,"line":76},[37,85259,85260],{"class":54},"    \u002F\u002F 自己定义数组的扩展方法\n",[37,85262,85263],{"class":39,"line":92},[37,85264,85265],{"class":54},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[37,85267,85268],{"class":39,"line":97},[37,85269,85270],{"class":54},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[37,85272,85273],{"class":39,"line":107},[37,85274,85275],{"class":54},"    \u002F\u002F ①.最大值\n",[37,85277,85278],{"class":39,"line":1390},[37,85279,85280],{"class":54},"    Array.prototype.max = function () {\n",[37,85282,85283],{"class":39,"line":1402},[37,85284,85285],{"class":54},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[37,85287,85288],{"class":39,"line":1684},[37,85289,85290],{"class":54},"      return Math.max(...this)\n",[37,85292,85293],{"class":39,"line":1689},[37,85294,85295],{"class":54},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[37,85297,85298],{"class":39,"line":1695},[37,85299,2259],{"class":54},[37,85301,85302],{"class":39,"line":1700},[37,85303,85304],{"class":54},"    console.log(arr.max())\n",[37,85306,85307],{"class":39,"line":1714},[37,85308,85309],{"class":54},"    \u002F\u002F ②最小值\n",[37,85311,85312],{"class":39,"line":1719},[37,85313,85314],{"class":54},"    Array.prototype.min = function () {\n",[37,85316,85317],{"class":39,"line":1725},[37,85318,85319],{"class":54},"      return Math.min(...this)\n",[37,85321,85322],{"class":39,"line":1746},[37,85323,2259],{"class":54},[37,85325,85326],{"class":39,"line":1751},[37,85327,85328],{"class":54},"    console.log(arr.min())\n",[37,85330,85331],{"class":39,"line":1765},[37,85332,85333],{"class":54},"    \u002F\u002F③求和\n",[37,85335,85336],{"class":39,"line":1770},[37,85337,85338],{"class":54},"    Array.prototype.sum = function () {\n",[37,85340,85341],{"class":39,"line":1799},[37,85342,85343],{"class":54},"      return this.reduce((prev, current) => prev + current, 0)\n",[37,85345,85346],{"class":39,"line":1804},[37,85347,2259],{"class":54},[37,85349,85350],{"class":39,"line":1821},[37,85351,85352],{"class":54},"    console.log(arr.sum())\n",[37,85354,85355],{"class":39,"line":1826},[37,85356,85357],{"class":54},"    \u002F\u002F ③排序\n",[37,85359,85360],{"class":39,"line":1831},[37,85361,85362],{"class":54},"    Array.prototype.rever = function () {\n",[37,85364,85365],{"class":39,"line":1836},[37,85366,85367],{"class":54},"      return this.reverse()\n",[37,85369,85370],{"class":39,"line":1850},[37,85371,2259],{"class":54},[37,85373,85374],{"class":39,"line":1855},[37,85375,85376],{"class":54},"    console.log(arr.rever())\n",[37,85378,85379],{"class":39,"line":2649},[37,85380,2472],{"emptyLinePlaceholder":131},[37,85382,85383,85385,85387],{"class":39,"line":2663},[37,85384,52485],{"class":54},[37,85386,51881],{"class":51368},[37,85388,51375],{"class":54},[37,85390,85391,85393,85395],{"class":39,"line":2671},[37,85392,51853],{"class":54},[37,85394,51868],{"class":51368},[37,85396,51375],{"class":54},[14,85398,85399],{},[119,85400],{"alt":32,"src":85401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[175,85403,85405],{"id":85404},"_4133-constructor-属性","4.13.3 constructor 属性",[14,85407,85408],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,85410,85411],{},[119,85412],{"alt":32,"src":85413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[27,85415,85417],{"className":53135,"code":85416,"language":53137,"meta":32,"style":32},"\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",[34,85418,85419,85427,85435,85440,85445,85449,85454,85459,85464,85472],{"__ignoreMap":32},[37,85420,85421,85423,85425],{"class":39,"line":40},[37,85422,1113],{"class":54},[37,85424,51868],{"class":51368},[37,85426,51375],{"class":54},[37,85428,85429,85431,85433],{"class":39,"line":47},[37,85430,52212],{"class":54},[37,85432,51881],{"class":51368},[37,85434,51375],{"class":54},[37,85436,85437],{"class":39,"line":58},[37,85438,85439],{"class":54},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[37,85441,85442],{"class":39,"line":64},[37,85443,85444],{"class":54},"    function Star() {\n",[37,85446,85447],{"class":39,"line":76},[37,85448,2259],{"class":54},[37,85450,85451],{"class":39,"line":92},[37,85452,85453],{"class":54},"    const ldh = new Star()\n",[37,85455,85456],{"class":39,"line":97},[37,85457,85458],{"class":54},"    console.log(Star.prototype)\n",[37,85460,85461],{"class":39,"line":107},[37,85462,85463],{"class":54},"    console.log(Star.prototype.constructor === Star)\n",[37,85465,85466,85468,85470],{"class":39,"line":1390},[37,85467,52485],{"class":54},[37,85469,51881],{"class":51368},[37,85471,51375],{"class":54},[37,85473,85474,85476,85478],{"class":39,"line":1402},[37,85475,51853],{"class":54},[37,85477,51868],{"class":51368},[37,85479,51375],{"class":54},[14,85481,85482],{},[119,85483],{"alt":32,"src":85484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,85486,85487],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[27,85489,85491],{"className":53135,"code":85490,"language":53137,"meta":32,"style":32},"  \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",[34,85492,85493,85501,85505,85509,85513,85518,85523,85528,85532,85537,85542,85547,85552,85557,85562,85566,85570,85575,85580,85585,85589,85594,85599,85603,85607,85611],{"__ignoreMap":32},[37,85494,85495,85497,85499],{"class":39,"line":40},[37,85496,52212],{"class":54},[37,85498,51881],{"class":51368},[37,85500,51375],{"class":54},[37,85502,85503],{"class":39,"line":47},[37,85504,85439],{"class":54},[37,85506,85507],{"class":39,"line":58},[37,85508,85444],{"class":54},[37,85510,85511],{"class":39,"line":64},[37,85512,2259],{"class":54},[37,85514,85515],{"class":39,"line":76},[37,85516,85517],{"class":54},"    \u002F\u002F const ldh = new Star()\n",[37,85519,85520],{"class":39,"line":92},[37,85521,85522],{"class":54},"    \u002F\u002F console.log(Star.prototype)\n",[37,85524,85525],{"class":39,"line":97},[37,85526,85527],{"class":54},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[37,85529,85530],{"class":39,"line":107},[37,85531,2472],{"emptyLinePlaceholder":131},[37,85533,85534],{"class":39,"line":1390},[37,85535,85536],{"class":54},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[37,85538,85539],{"class":39,"line":1402},[37,85540,85541],{"class":54},"    \u002F\u002F Star.prototype.sing = function () {\n",[37,85543,85544],{"class":39,"line":1684},[37,85545,85546],{"class":54},"    \u002F\u002F   console.log('唱歌')\n",[37,85548,85549],{"class":39,"line":1689},[37,85550,85551],{"class":54},"    \u002F\u002F }\n",[37,85553,85554],{"class":39,"line":1695},[37,85555,85556],{"class":54},"    \u002F\u002F Star.prototype.dance = function () {\n",[37,85558,85559],{"class":39,"line":1700},[37,85560,85561],{"class":54},"    \u002F\u002F   console.log('跳舞')\n",[37,85563,85564],{"class":39,"line":1714},[37,85565,85551],{"class":54},[37,85567,85568],{"class":39,"line":1719},[37,85569,85458],{"class":54},[37,85571,85572],{"class":39,"line":1725},[37,85573,85574],{"class":54},"    Star.prototype = {\n",[37,85576,85577],{"class":39,"line":1746},[37,85578,85579],{"class":54},"      sing: function () {\n",[37,85581,85582],{"class":39,"line":1751},[37,85583,85584],{"class":54},"        console.log('唱歌')\n",[37,85586,85587],{"class":39,"line":1765},[37,85588,77960],{"class":54},[37,85590,85591],{"class":39,"line":1770},[37,85592,85593],{"class":54},"      dance: function () {\n",[37,85595,85596],{"class":39,"line":1799},[37,85597,85598],{"class":54},"        console.log('跳舞')\n",[37,85600,85601],{"class":39,"line":1804},[37,85602,52466],{"class":54},[37,85604,85605],{"class":39,"line":1821},[37,85606,2259],{"class":54},[37,85608,85609],{"class":39,"line":1826},[37,85610,85458],{"class":54},[37,85612,85613,85615,85617],{"class":39,"line":1831},[37,85614,52485],{"class":54},[37,85616,51881],{"class":51368},[37,85618,51375],{"class":54},[14,85620,85621],{},"进行输出结果后会发现：",[14,85623,85624],{},[119,85625],{"alt":32,"src":85626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,85628,85629],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,85631,85632],{},"所以，要重新指回创造这个原型对象的构造函数",[27,85634,85636],{"className":71281,"code":85635,"language":71283,"meta":32,"style":32},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[34,85637,85638,85652,85657,85662,85673,85686,85691,85702,85716,85720],{"__ignoreMap":32},[37,85639,85640,85643,85645,85648,85650],{"class":39,"line":40},[37,85641,85642],{"class":82},"Star",[37,85644,761],{"class":54},[37,85646,85647],{"class":82},"prototype",[37,85649,13636],{"class":50},[37,85651,15644],{"class":54},[37,85653,85654],{"class":39,"line":47},[37,85655,85656],{"class":43},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[37,85658,85659],{"class":39,"line":58},[37,85660,85661],{"class":54},"  constructor: Star,\n",[37,85663,85664,85667,85669,85671],{"class":39,"line":64},[37,85665,85666],{"class":2035},"  sing",[37,85668,51505],{"class":54},[37,85670,54517],{"class":50},[37,85672,54520],{"class":54},[37,85674,85675,85677,85679,85681,85684],{"class":39,"line":76},[37,85676,73821],{"class":54},[37,85678,58315],{"class":2035},[37,85680,208],{"class":54},[37,85682,85683],{"class":309},"'唱歌'",[37,85685,214],{"class":54},[37,85687,85688],{"class":39,"line":92},[37,85689,85690],{"class":54},"   },\n",[37,85692,85693,85696,85698,85700],{"class":39,"line":97},[37,85694,85695],{"class":2035},"   dance",[37,85697,51505],{"class":54},[37,85699,54517],{"class":50},[37,85701,54520],{"class":54},[37,85703,85704,85707,85709,85711,85714],{"class":39,"line":107},[37,85705,85706],{"class":54},"     console.",[37,85708,58315],{"class":2035},[37,85710,208],{"class":54},[37,85712,85713],{"class":309},"'跳舞'",[37,85715,214],{"class":54},[37,85717,85718],{"class":39,"line":1390},[37,85719,4381],{"class":54},[37,85721,85722],{"class":39,"line":1402},[37,85723,1637],{"class":54},[14,85725,85726],{},[119,85727],{"alt":32,"src":85728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,85730,85731],{},"总结1：",[14,85733,85734],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,85736,85737],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,85739,85740],{},"constructor指的是他的来源",[14,85742,85743],{},[119,85744],{"alt":32,"src":85745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,85747,85748],{},[119,85749],{"alt":32,"src":85750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,85752,85753],{},"总结2：",[14,85755,85756],{},[119,85757],{"alt":32,"src":85758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,85760,85761],{},[119,85762],{"alt":32,"src":85763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,85765,85766],{},[119,85767],{"alt":32,"src":85768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[175,85770,85772],{"id":85771},"_4134-对象原型","4.13.4 对象原型",[14,85774,85775],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,85777,85778],{},"对象原型就是__proto__这个属性",[14,85780,85781],{},[119,85782],{"alt":32,"src":85783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,85785,85786],{},[119,85787],{"alt":32,"src":85788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,85790,85791],{},[119,85792],{"alt":32,"src":85793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,85795,85796],{},[119,85797],{"alt":32,"src":85798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[27,85800,85802],{"className":53135,"code":85801,"language":53137,"meta":32,"style":32},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[34,85803,85804,85812,85820,85824,85828,85832,85837,85845],{"__ignoreMap":32},[37,85805,85806,85808,85810],{"class":39,"line":40},[37,85807,1113],{"class":54},[37,85809,51868],{"class":51368},[37,85811,51375],{"class":54},[37,85813,85814,85816,85818],{"class":39,"line":47},[37,85815,52212],{"class":54},[37,85817,51881],{"class":51368},[37,85819,51375],{"class":54},[37,85821,85822],{"class":39,"line":58},[37,85823,85444],{"class":54},[37,85825,85826],{"class":39,"line":64},[37,85827,2259],{"class":54},[37,85829,85830],{"class":39,"line":76},[37,85831,85453],{"class":54},[37,85833,85834],{"class":39,"line":92},[37,85835,85836],{"class":54},"    console.log(ldh)\n",[37,85838,85839,85841,85843],{"class":39,"line":97},[37,85840,52485],{"class":54},[37,85842,51881],{"class":51368},[37,85844,51375],{"class":54},[37,85846,85847,85849,85851],{"class":39,"line":107},[37,85848,51853],{"class":54},[37,85850,51868],{"class":51368},[37,85852,51375],{"class":54},[14,85854,85855],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,85857,85858],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,85860,85861],{},[119,85862],{"alt":32,"src":85863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,85865,85866],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,85868,85869],{},"对象原型指向原型对象",[14,85871,85872],{},[119,85873],{"alt":32,"src":85874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,85876,85877],{},[119,85878],{"alt":32,"src":85879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,85881,85882],{},[119,85883],{"alt":32,"src":85884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[175,85886,85888],{"id":85887},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,85890,85891],{},[119,85892],{"alt":32,"src":85893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[158,85895,85896,85899,85902,85905],{},[161,85897,85898],{},"构造函数通过new的形式实例化得到实例对象",[161,85900,85901],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[161,85903,85904],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[161,85906,85907],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,85909,85910],{},[119,85911],{"alt":32,"src":85912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,85914,85915],{},"题目梳理：",[14,85917,85918],{},[119,85919],{"alt":32,"src":85920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[175,85922,85924],{"id":85923},"_4136-原型继承","4.13.6 原型继承",[14,85926,85927],{},[119,85928],{"alt":32,"src":85929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,85931,85932],{},[119,85933],{"alt":32,"src":85934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,85936,85937],{},[119,85938],{"alt":32,"src":85939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,85941,85942],{},[119,85943],{"alt":32,"src":85944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,85946,85947],{},[119,85948],{"alt":32,"src":85949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,85951,85952],{},[119,85953],{"alt":32,"src":85954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,85956,85957],{},[119,85958],{"alt":32,"src":85959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,85961,85962],{},[119,85963],{"alt":32,"src":85964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,85966,85967],{},"回顾：构造函数每次new得到对象都是不同的",[175,85969,85971],{"id":85970},"_4137-原型链","4.13.7 原型链",[14,85973,85974],{},[119,85975],{"alt":32,"src":85976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,85978,85979],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,85981,85982],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,85984,85985],{},"大哥是Object",[14,85987,85988],{},[119,85989],{"alt":32,"src":85990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,85992,85993],{},[119,85994],{"alt":32,"src":85995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,85997,85998],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,86000,86001],{},"万物皆对象",[175,86003,86005],{"id":86004},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,86007,86008],{},"模态框",[14,86010,86011],{},"以后遇见这个效果直接使用这个就行",[14,86013,86014],{},[119,86015],{"alt":32,"src":86016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,86018,86019],{},[119,86020],{"alt":32,"src":86021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,86023,86024],{},[119,86025],{"alt":32,"src":86026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,86028,86029],{},[119,86030],{"alt":32,"src":86031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,86033,86034],{},"补充知识点：",[158,86036,86037],{},[161,86038,86039],{},"append()",[14,86041,86042],{},[119,86043],{"alt":32,"src":86044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[27,86046,86048],{"className":50701,"code":86047,"language":50703,"meta":32,"style":32},"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",[34,86049,86050,86055,86060,86065,86069,86073,86077,86082,86087,86092,86096],{"__ignoreMap":32},[37,86051,86052],{"class":39,"line":40},[37,86053,86054],{"class":54},"append(param1)\n",[37,86056,86057],{"class":39,"line":47},[37,86058,86059],{"class":54},"append(param1, param2)\n",[37,86061,86062],{"class":39,"line":58},[37,86063,86064],{"class":54},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[37,86066,86067],{"class":39,"line":64},[37,86068,2472],{"emptyLinePlaceholder":131},[37,86070,86071],{"class":39,"line":76},[37,86072,2472],{"emptyLinePlaceholder":131},[37,86074,86075],{"class":39,"line":92},[37,86076,2472],{"emptyLinePlaceholder":131},[37,86078,86079],{"class":39,"line":97},[37,86080,86081],{"class":54},"let div = document.createElement(\"div\");\n",[37,86083,86084],{"class":39,"line":107},[37,86085,86086],{"class":54},"let p = document.createElement(\"p\");\n",[37,86088,86089],{"class":39,"line":1390},[37,86090,86091],{"class":54},"div.append(p);\n",[37,86093,86094],{"class":39,"line":1402},[37,86095,2472],{"emptyLinePlaceholder":131},[37,86097,86098,86101,86103],{"class":39,"line":1684},[37,86099,86100],{"class":54},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[37,86102,14],{"class":51368},[37,86104,86105],{"class":54},"> ]\n",[158,86107,86108],{"start":47},[161,86109,86110],{},"remove()",[14,86112,86113],{},"自己删自己",[14,86115,86116],{},[119,86117],{"alt":32,"src":86118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[27,86120,86122],{"className":50701,"code":86121,"language":50703,"meta":32,"style":32},"\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",[34,86123,86124,86134,86148,86152,86160,86174,86194,86206,86214,86221,86233,86246,86281,86293,86304,86316,86328,86340,86367,86377,86381,86385,86394,86406,86420,86430,86442,86446,86450,86460,86471,86481,86491,86504,86517,86527,86531,86535,86544,86554,86566,86570,86574,86583,86593,86603,86615,86619,86623,86633,86649,86660,86670,86680,86692,86704,86716,86720,86724,86737,86748,86752,86760,86768,86772,86780,86800,86820,86828,86833,86859,86864,86869,86888,86893,86905,86910,86921,86931,86941,86946,86951,86955,86960,86965,86970,86990,86995,87015,87020,87034,87039,87044,87049,87065,87069,87074,87103,87108,87113,87118,87129,87133,87137,87141,87146,87171,87176,87201,87206,87215,87219,87224,87249,87253,87278,87282,87291,87295,87300,87318,87328,87332,87340,87348,87352],{"__ignoreMap":32},[37,86125,86126,86128,86130,86132],{"class":39,"line":40},[37,86127,51365],{"class":54},[37,86129,51369],{"class":51368},[37,86131,51372],{"class":2035},[37,86133,51375],{"class":54},[37,86135,86136,86138,86140,86142,86144,86146],{"class":39,"line":47},[37,86137,1113],{"class":54},[37,86139,50703],{"class":51368},[37,86141,51384],{"class":2035},[37,86143,70],{"class":54},[37,86145,51389],{"class":309},[37,86147,51375],{"class":54},[37,86149,86150],{"class":39,"line":58},[37,86151,2472],{"emptyLinePlaceholder":131},[37,86153,86154,86156,86158],{"class":39,"line":64},[37,86155,1113],{"class":54},[37,86157,51402],{"class":51368},[37,86159,51375],{"class":54},[37,86161,86162,86164,86166,86168,86170,86172],{"class":39,"line":76},[37,86163,52212],{"class":54},[37,86165,51412],{"class":51368},[37,86167,51415],{"class":2035},[37,86169,70],{"class":54},[37,86171,51420],{"class":309},[37,86173,51375],{"class":54},[37,86175,86176,86178,86180,86182,86184,86186,86188,86190,86192],{"class":39,"line":92},[37,86177,52212],{"class":54},[37,86179,51412],{"class":51368},[37,86181,14992],{"class":2035},[37,86183,70],{"class":54},[37,86185,51459],{"class":309},[37,86187,51439],{"class":2035},[37,86189,70],{"class":54},[37,86191,51466],{"class":309},[37,86193,51375],{"class":54},[37,86195,86196,86198,86200,86202,86204],{"class":39,"line":97},[37,86197,52212],{"class":54},[37,86199,51475],{"class":51368},[37,86201,51478],{"class":54},[37,86203,51475],{"class":51368},[37,86205,51375],{"class":54},[37,86207,86208,86210,86212],{"class":39,"line":107},[37,86209,52212],{"class":54},[37,86211,123],{"class":51368},[37,86213,51375],{"class":54},[37,86215,86216,86219],{"class":39,"line":1390},[37,86217,86218],{"class":2035},"    .modal",[37,86220,15644],{"class":54},[37,86222,86223,86225,86227,86229,86231],{"class":39,"line":1402},[37,86224,54839],{"class":82},[37,86226,51505],{"class":54},[37,86228,4045],{"class":82},[37,86230,51560],{"class":50},[37,86232,1364],{"class":54},[37,86234,86235,86238,86240,86242,86244],{"class":39,"line":1684},[37,86236,86237],{"class":82},"      min-height",[37,86239,51505],{"class":54},[37,86241,516],{"class":82},[37,86243,51560],{"class":50},[37,86245,1364],{"class":54},[37,86247,86248,86250,86252,86254,86256,86258,86260,86262,86264,86266,86268,86270,86272,86274,86276,86279],{"class":39,"line":1689},[37,86249,78818],{"class":82},[37,86251,51505],{"class":54},[37,86253,396],{"class":82},[37,86255,4165],{"class":82},[37,86257,2110],{"class":82},[37,86259,51560],{"class":50},[37,86261,78835],{"class":82},[37,86263,208],{"class":54},[37,86265,396],{"class":82},[37,86267,12507],{"class":54},[37,86269,396],{"class":82},[37,86271,12507],{"class":54},[37,86273,396],{"class":82},[37,86275,12507],{"class":54},[37,86277,86278],{"class":82},"0.1",[37,86280,2791],{"class":54},[37,86282,86283,86285,86287,86289,86291],{"class":39,"line":1695},[37,86284,55202],{"class":82},[37,86286,51505],{"class":54},[37,86288,498],{"class":82},[37,86290,51560],{"class":50},[37,86292,1364],{"class":54},[37,86294,86295,86297,86299,86302],{"class":39,"line":1700},[37,86296,54827],{"class":82},[37,86298,51505],{"class":54},[37,86300,86301],{"class":82},"fixed",[37,86303,1364],{"class":54},[37,86305,86306,86309,86311,86314],{"class":39,"line":1714},[37,86307,86308],{"class":82},"      z-index",[37,86310,51505],{"class":54},[37,86312,86313],{"class":82},"999",[37,86315,1364],{"class":54},[37,86317,86318,86320,86322,86324,86326],{"class":39,"line":1719},[37,86319,54906],{"class":82},[37,86321,51505],{"class":54},[37,86323,859],{"class":82},[37,86325,533],{"class":50},[37,86327,1364],{"class":54},[37,86329,86330,86332,86334,86336,86338],{"class":39,"line":1725},[37,86331,55015],{"class":82},[37,86333,51505],{"class":54},[37,86335,859],{"class":82},[37,86337,533],{"class":50},[37,86339,1364],{"class":54},[37,86341,86342,86344,86346,86348,86350,86353,86355,86357,86359,86361,86363,86365],{"class":39,"line":1746},[37,86343,78859],{"class":82},[37,86345,51505],{"class":54},[37,86347,78864],{"class":82},[37,86349,208],{"class":54},[37,86351,86352],{"class":82},"-50",[37,86354,533],{"class":50},[37,86356,12507],{"class":54},[37,86358,86352],{"class":82},[37,86360,533],{"class":50},[37,86362,12507],{"class":54},[37,86364,396],{"class":82},[37,86366,2791],{"class":54},[37,86368,86369,86371,86373,86375],{"class":39,"line":1751},[37,86370,54952],{"class":82},[37,86372,51505],{"class":54},[37,86374,60910],{"class":82},[37,86376,1364],{"class":54},[37,86378,86379],{"class":39,"line":1765},[37,86380,2259],{"class":54},[37,86382,86383],{"class":39,"line":1770},[37,86384,2472],{"emptyLinePlaceholder":131},[37,86386,86387,86389,86392],{"class":39,"line":1799},[37,86388,86218],{"class":2035},[37,86390,86391],{"class":2035}," .header",[37,86393,15644],{"class":54},[37,86395,86396,86398,86400,86402,86404],{"class":39,"line":1804},[37,86397,57427],{"class":82},[37,86399,51505],{"class":54},[37,86401,606],{"class":82},[37,86403,51560],{"class":50},[37,86405,1364],{"class":54},[37,86407,86408,86410,86412,86414,86416,86418],{"class":39,"line":1821},[37,86409,54763],{"class":82},[37,86411,51505],{"class":54},[37,86413,396],{"class":82},[37,86415,2110],{"class":82},[37,86417,51560],{"class":50},[37,86419,1364],{"class":54},[37,86421,86422,86424,86426,86428],{"class":39,"line":1826},[37,86423,54827],{"class":82},[37,86425,51505],{"class":54},[37,86427,54832],{"class":82},[37,86429,1364],{"class":54},[37,86431,86432,86434,86436,86438,86440],{"class":39,"line":1831},[37,86433,54990],{"class":82},[37,86435,51505],{"class":54},[37,86437,903],{"class":82},[37,86439,51560],{"class":50},[37,86441,1364],{"class":54},[37,86443,86444],{"class":39,"line":1836},[37,86445,2259],{"class":54},[37,86447,86448],{"class":39,"line":1850},[37,86449,2472],{"emptyLinePlaceholder":131},[37,86451,86452,86454,86456,86458],{"class":39,"line":1855},[37,86453,86218],{"class":2035},[37,86455,86391],{"class":2035},[37,86457,3104],{"class":51368},[37,86459,15644],{"class":54},[37,86461,86462,86465,86467,86469],{"class":39,"line":2649},[37,86463,86464],{"class":82},"      font-style",[37,86466,51505],{"class":54},[37,86468,63909],{"class":82},[37,86470,1364],{"class":54},[37,86472,86473,86475,86477,86479],{"class":39,"line":2663},[37,86474,57484],{"class":82},[37,86476,51505],{"class":54},[37,86478,62138],{"class":82},[37,86480,1364],{"class":54},[37,86482,86483,86485,86487,86489],{"class":39,"line":2671},[37,86484,54827],{"class":82},[37,86486,51505],{"class":54},[37,86488,54899],{"class":82},[37,86490,1364],{"class":54},[37,86492,86493,86496,86498,86500,86502],{"class":39,"line":2676},[37,86494,86495],{"class":82},"      right",[37,86497,51505],{"class":54},[37,86499,778],{"class":82},[37,86501,51560],{"class":50},[37,86503,1364],{"class":54},[37,86505,86506,86508,86510,86513,86515],{"class":39,"line":2682},[37,86507,55015],{"class":82},[37,86509,51505],{"class":54},[37,86511,86512],{"class":82},"-2",[37,86514,51560],{"class":50},[37,86516,1364],{"class":54},[37,86518,86519,86521,86523,86525],{"class":39,"line":2688},[37,86520,62093],{"class":82},[37,86522,51505],{"class":54},[37,86524,62098],{"class":82},[37,86526,1364],{"class":54},[37,86528,86529],{"class":39,"line":2693},[37,86530,2259],{"class":54},[37,86532,86533],{"class":39,"line":8020},[37,86534,2472],{"emptyLinePlaceholder":131},[37,86536,86537,86539,86542],{"class":39,"line":8044},[37,86538,86218],{"class":2035},[37,86540,86541],{"class":2035}," .body",[37,86543,15644],{"class":54},[37,86545,86546,86548,86550,86552],{"class":39,"line":8049},[37,86547,57354],{"class":82},[37,86549,51505],{"class":54},[37,86551,51660],{"class":82},[37,86553,1364],{"class":54},[37,86555,86556,86558,86560,86562,86564],{"class":39,"line":8055},[37,86557,54763],{"class":82},[37,86559,51505],{"class":54},[37,86561,650],{"class":82},[37,86563,51560],{"class":50},[37,86565,1364],{"class":54},[37,86567,86568],{"class":39,"line":8082},[37,86569,2259],{"class":54},[37,86571,86572],{"class":39,"line":8087},[37,86573,2472],{"emptyLinePlaceholder":131},[37,86575,86576,86578,86581],{"class":39,"line":8093},[37,86577,86218],{"class":2035},[37,86579,86580],{"class":2035}," .footer",[37,86582,15644],{"class":54},[37,86584,86585,86587,86589,86591],{"class":39,"line":8105},[37,86586,55077],{"class":82},[37,86588,51505],{"class":54},[37,86590,51545],{"class":82},[37,86592,1364],{"class":54},[37,86594,86595,86597,86599,86601],{"class":39,"line":8117},[37,86596,55088],{"class":82},[37,86598,51505],{"class":54},[37,86600,51648],{"class":82},[37,86602,1364],{"class":54},[37,86604,86605,86607,86609,86611,86613],{"class":39,"line":8129},[37,86606,54763],{"class":82},[37,86608,51505],{"class":54},[37,86610,650],{"class":82},[37,86612,51560],{"class":50},[37,86614,1364],{"class":54},[37,86616,86617],{"class":39,"line":9788},[37,86618,2259],{"class":54},[37,86620,86621],{"class":39,"line":9813},[37,86622,2472],{"emptyLinePlaceholder":131},[37,86624,86625,86627,86629,86631],{"class":39,"line":9836},[37,86626,86218],{"class":2035},[37,86628,86580],{"class":2035},[37,86630,1471],{"class":51368},[37,86632,15644],{"class":54},[37,86634,86635,86637,86639,86641,86643,86645,86647],{"class":39,"line":9860},[37,86636,54763],{"class":82},[37,86638,51505],{"class":54},[37,86640,276],{"class":82},[37,86642,51560],{"class":50},[37,86644,2155],{"class":82},[37,86646,51560],{"class":50},[37,86648,1364],{"class":54},[37,86650,86651,86653,86655,86658],{"class":39,"line":9865},[37,86652,61789],{"class":82},[37,86654,51505],{"class":54},[37,86656,86657],{"class":82},"#ccc",[37,86659,1364],{"class":54},[37,86661,86662,86664,86666,86668],{"class":39,"line":9870},[37,86663,64038],{"class":82},[37,86665,51505],{"class":54},[37,86667,54805],{"class":82},[37,86669,1364],{"class":54},[37,86671,86672,86674,86676,86678],{"class":39,"line":9875},[37,86673,57484],{"class":82},[37,86675,51505],{"class":54},[37,86677,60910],{"class":82},[37,86679,1364],{"class":54},[37,86681,86682,86684,86686,86688,86690],{"class":39,"line":9884},[37,86683,55202],{"class":82},[37,86685,51505],{"class":54},[37,86687,282],{"class":82},[37,86689,51560],{"class":50},[37,86691,1364],{"class":54},[37,86693,86694,86696,86698,86700,86702],{"class":39,"line":9889},[37,86695,61818],{"class":82},[37,86697,51505],{"class":54},[37,86699,650],{"class":82},[37,86701,51560],{"class":50},[37,86703,1364],{"class":54},[37,86705,86706,86708,86710,86712,86714],{"class":39,"line":9895},[37,86707,54990],{"class":82},[37,86709,51505],{"class":54},[37,86711,752],{"class":82},[37,86713,51560],{"class":50},[37,86715,1364],{"class":54},[37,86717,86718],{"class":39,"line":9916},[37,86719,2259],{"class":54},[37,86721,86722],{"class":39,"line":9922},[37,86723,2472],{"emptyLinePlaceholder":131},[37,86725,86726,86728,86730,86732,86735],{"class":39,"line":9936},[37,86727,86218],{"class":2035},[37,86729,86580],{"class":2035},[37,86731,1471],{"class":51368},[37,86733,86734],{"class":2035},".submit",[37,86736,15644],{"class":54},[37,86738,86739,86741,86743,86746],{"class":39,"line":9942},[37,86740,54952],{"class":82},[37,86742,51505],{"class":54},[37,86744,86745],{"class":82},"#369",[37,86747,1364],{"class":54},[37,86749,86750],{"class":39,"line":9969},[37,86751,2259],{"class":54},[37,86753,86754,86756,86758],{"class":39,"line":9978},[37,86755,52485],{"class":54},[37,86757,123],{"class":51368},[37,86759,51375],{"class":54},[37,86761,86762,86764,86766],{"class":39,"line":9984},[37,86763,51853],{"class":54},[37,86765,51402],{"class":51368},[37,86767,51375],{"class":54},[37,86769,86770],{"class":39,"line":9992},[37,86771,2472],{"emptyLinePlaceholder":131},[37,86773,86774,86776,86778],{"class":39,"line":9997},[37,86775,1113],{"class":54},[37,86777,51868],{"class":51368},[37,86779,51375],{"class":54},[37,86781,86782,86784,86786,86788,86790,86793,86796,86798],{"class":39,"line":16676},[37,86783,52212],{"class":54},[37,86785,53955],{"class":51368},[37,86787,15031],{"class":2035},[37,86789,70],{"class":54},[37,86791,86792],{"class":309},"\"delete\"",[37,86794,86795],{"class":54},">删除\u003C\u002F",[37,86797,53955],{"class":51368},[37,86799,51375],{"class":54},[37,86801,86802,86804,86806,86808,86810,86813,86816,86818],{"class":39,"line":16682},[37,86803,52212],{"class":54},[37,86805,53955],{"class":51368},[37,86807,15031],{"class":2035},[37,86809,70],{"class":54},[37,86811,86812],{"class":309},"\"login\"",[37,86814,86815],{"class":54},">登录\u003C\u002F",[37,86817,53955],{"class":51368},[37,86819,51375],{"class":54},[37,86821,86822,86824,86826],{"class":39,"line":16705},[37,86823,52212],{"class":54},[37,86825,51881],{"class":51368},[37,86827,51375],{"class":54},[37,86829,86830],{"class":39,"line":16711},[37,86831,86832],{"class":43},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[37,86834,86835,86837,86840,86842,86844,86846,86848,86850,86853,86855,86857],{"class":39,"line":16734},[37,86836,70152],{"class":50},[37,86838,86839],{"class":2035}," Modal",[37,86841,208],{"class":54},[37,86843,51475],{"class":5288},[37,86845,13636],{"class":50},[37,86847,69998],{"class":309},[37,86849,12507],{"class":54},[37,86851,86852],{"class":5288},"message",[37,86854,13636],{"class":50},[37,86856,69998],{"class":309},[37,86858,12514],{"class":54},[37,86860,86861],{"class":39,"line":16748},[37,86862,86863],{"class":43},"      \u002F\u002F 创建Model 模态框盒子\n",[37,86865,86866],{"class":39,"line":16768},[37,86867,86868],{"class":43},"      \u002F\u002F 1.1 创建div标签\n",[37,86870,86871,86873,86876,86878,86880,86882,86884,86886],{"class":39,"line":16774},[37,86872,70119],{"class":82},[37,86874,86875],{"class":54},".modalBox ",[37,86877,70],{"class":50},[37,86879,54464],{"class":54},[37,86881,70219],{"class":2035},[37,86883,208],{"class":54},[37,86885,81999],{"class":309},[37,86887,214],{"class":54},[37,86889,86890],{"class":39,"line":16785},[37,86891,86892],{"class":43},"      \u002F\u002F 1.2 给div 添加类名为model\n",[37,86894,86895,86897,86900,86902],{"class":39,"line":16808},[37,86896,70119],{"class":82},[37,86898,86899],{"class":54},".modalBox.className ",[37,86901,70],{"class":50},[37,86903,86904],{"class":309}," 'modal'\n",[37,86906,86907],{"class":39,"line":16830},[37,86908,86909],{"class":43},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[37,86911,86912,86914,86917,86919],{"class":39,"line":16835},[37,86913,70119],{"class":82},[37,86915,86916],{"class":54},".modalBox.innerHTML ",[37,86918,70],{"class":50},[37,86920,70236],{"class":309},[37,86922,86923,86926,86928],{"class":39,"line":16841},[37,86924,86925],{"class":309},"        \u003Cdiv class=\"header\">${",[37,86927,51475],{"class":54},[37,86929,86930],{"class":309},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[37,86932,86933,86936,86938],{"class":39,"line":16855},[37,86934,86935],{"class":309},"        \u003Cdiv class=\"body\">${",[37,86937,86852],{"class":54},[37,86939,86940],{"class":309},"}\u003C\u002Fdiv>\n",[37,86942,86943],{"class":39,"line":16868},[37,86944,86945],{"class":309},"      `\n",[37,86947,86948],{"class":39,"line":16873},[37,86949,86950],{"class":43},"      \u002F\u002F console.log(this.modalBox)\n",[37,86952,86953],{"class":39,"line":16887},[37,86954,2259],{"class":54},[37,86956,86957],{"class":39,"line":16892},[37,86958,86959],{"class":43},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[37,86961,86962],{"class":39,"line":16898},[37,86963,86964],{"class":43},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[37,86966,86967],{"class":39,"line":16903},[37,86968,86969],{"class":43},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[37,86971,86972,86975,86977,86979,86981,86984,86986,86988],{"class":39,"line":16917},[37,86973,86974],{"class":82},"    Modal",[37,86976,761],{"class":54},[37,86978,85647],{"class":82},[37,86980,761],{"class":54},[37,86982,86983],{"class":2035},"open",[37,86985,13636],{"class":50},[37,86987,58986],{"class":50},[37,86989,54520],{"class":54},[37,86991,86992],{"class":39,"line":16922},[37,86993,86994],{"class":43},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[37,86996,86997,86999,87002,87004,87006,87008,87010,87013],{"class":39,"line":16927},[37,86998,58296],{"class":50},[37,87000,87001],{"class":82}," box",[37,87003,13636],{"class":50},[37,87005,54464],{"class":54},[37,87007,54467],{"class":2035},[37,87009,208],{"class":54},[37,87011,87012],{"class":309},"'.modal'",[37,87014,214],{"class":54},[37,87016,87017],{"class":39,"line":16941},[37,87018,87019],{"class":43},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[37,87021,87022,87025,87027,87030,87032],{"class":39,"line":16953},[37,87023,87024],{"class":54},"      box ",[37,87026,1787],{"class":50},[37,87028,87029],{"class":54}," box.",[37,87031,57074],{"class":2035},[37,87033,2048],{"class":54},[37,87035,87036],{"class":39,"line":16958},[37,87037,87038],{"class":43},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[37,87040,87041],{"class":39,"line":16971},[37,87042,87043],{"class":43},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[37,87045,87046],{"class":39,"line":16976},[37,87047,87048],{"class":43},"      \u002F\u002F append可以增加对象\n",[37,87050,87051,87054,87057,87059,87062],{"class":39,"line":16981},[37,87052,87053],{"class":54},"      document.body.",[37,87055,87056],{"class":2035},"append",[37,87058,208],{"class":54},[37,87060,87061],{"class":82},"this",[37,87063,87064],{"class":54},".modalBox)\n",[37,87066,87067],{"class":39,"line":16986},[37,87068,2472],{"emptyLinePlaceholder":131},[37,87070,87071],{"class":39,"line":16999},[37,87072,87073],{"class":43},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[37,87075,87076,87078,87081,87083,87085,87088,87090,87092,87094,87096,87099,87101],{"class":39,"line":17004},[37,87077,70119],{"class":82},[37,87079,87080],{"class":54},".modalBox.",[37,87082,54467],{"class":2035},[37,87084,208],{"class":54},[37,87086,87087],{"class":309},"'i'",[37,87089,30896],{"class":54},[37,87091,57881],{"class":2035},[37,87093,208],{"class":54},[37,87095,57886],{"class":309},[37,87097,87098],{"class":54},", () ",[37,87100,84790],{"class":50},[37,87102,15644],{"class":54},[37,87104,87105],{"class":39,"line":32702},[37,87106,87107],{"class":43},"        \u002F\u002F 这个地方需要用到箭头函数\n",[37,87109,87110],{"class":39,"line":32708},[37,87111,87112],{"class":43},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[37,87114,87115],{"class":39,"line":32714},[37,87116,87117],{"class":43},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[37,87119,87120,87122,87124,87127],{"class":39,"line":32720},[37,87121,64794],{"class":82},[37,87123,761],{"class":54},[37,87125,87126],{"class":2035},"close",[37,87128,2048],{"class":54},[37,87130,87131],{"class":39,"line":32726},[37,87132,64883],{"class":54},[37,87134,87135],{"class":39,"line":32737},[37,87136,2259],{"class":54},[37,87138,87139],{"class":39,"line":32743},[37,87140,2472],{"emptyLinePlaceholder":131},[37,87142,87143],{"class":39,"line":32763},[37,87144,87145],{"class":43},"    \u002F\u002F 测试一下 点击 删除按钮\n",[37,87147,87148,87150,87152,87154,87157,87159,87161,87163,87165,87167,87169],{"class":39,"line":32769},[37,87149,52475],{"class":54},[37,87151,54467],{"class":2035},[37,87153,208],{"class":54},[37,87155,87156],{"class":309},"'#delete'",[37,87158,30896],{"class":54},[37,87160,57881],{"class":2035},[37,87162,208],{"class":54},[37,87164,57886],{"class":309},[37,87166,87098],{"class":54},[37,87168,84790],{"class":50},[37,87170,15644],{"class":54},[37,87172,87173],{"class":39,"line":32780},[37,87174,87175],{"class":43},"      \u002F\u002F 先调用Model构造函数\n",[37,87177,87178,87180,87183,87185,87187,87189,87191,87194,87196,87199],{"class":39,"line":32786},[37,87179,58296],{"class":50},[37,87181,87182],{"class":82}," del",[37,87184,13636],{"class":50},[37,87186,11650],{"class":50},[37,87188,86839],{"class":2035},[37,87190,208],{"class":54},[37,87192,87193],{"class":309},"'温馨的提示'",[37,87195,12507],{"class":54},[37,87197,87198],{"class":309},"'您没有删除权限操作'",[37,87200,214],{"class":54},[37,87202,87203],{"class":39,"line":32792},[37,87204,87205],{"class":43},"      \u002F\u002F 实例对象调用open方法\n",[37,87207,87208,87211,87213],{"class":39,"line":32798},[37,87209,87210],{"class":54},"      del.",[37,87212,86983],{"class":2035},[37,87214,2048],{"class":54},[37,87216,87217],{"class":39,"line":32804},[37,87218,33530],{"class":54},[37,87220,87221],{"class":39,"line":32810},[37,87222,87223],{"class":43},"    \u002F\u002F 测试一下 点击 登录按钮\n",[37,87225,87226,87228,87230,87232,87235,87237,87239,87241,87243,87245,87247],{"class":39,"line":32816},[37,87227,52475],{"class":54},[37,87229,54467],{"class":2035},[37,87231,208],{"class":54},[37,87233,87234],{"class":309},"'#login'",[37,87236,30896],{"class":54},[37,87238,57881],{"class":2035},[37,87240,208],{"class":54},[37,87242,57886],{"class":309},[37,87244,87098],{"class":54},[37,87246,84790],{"class":50},[37,87248,15644],{"class":54},[37,87250,87251],{"class":39,"line":32822},[37,87252,87175],{"class":43},[37,87254,87255,87257,87260,87262,87264,87266,87268,87271,87273,87276],{"class":39,"line":32842},[37,87256,58296],{"class":50},[37,87258,87259],{"class":82}," log",[37,87261,13636],{"class":50},[37,87263,11650],{"class":50},[37,87265,86839],{"class":2035},[37,87267,208],{"class":54},[37,87269,87270],{"class":309},"'友情提示'",[37,87272,12507],{"class":54},[37,87274,87275],{"class":309},"'您还没有登录呢'",[37,87277,214],{"class":54},[37,87279,87280],{"class":39,"line":32848},[37,87281,87205],{"class":43},[37,87283,87284,87287,87289],{"class":39,"line":32864},[37,87285,87286],{"class":54},"      log.",[37,87288,86983],{"class":2035},[37,87290,2048],{"class":54},[37,87292,87293],{"class":39,"line":32870},[37,87294,33530],{"class":54},[37,87296,87297],{"class":39,"line":32884},[37,87298,87299],{"class":43},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[37,87301,87302,87304,87306,87308,87310,87312,87314,87316],{"class":39,"line":32890},[37,87303,86974],{"class":82},[37,87305,761],{"class":54},[37,87307,85647],{"class":82},[37,87309,761],{"class":54},[37,87311,87126],{"class":2035},[37,87313,13636],{"class":50},[37,87315,58986],{"class":50},[37,87317,54520],{"class":54},[37,87319,87320,87322,87324,87326],{"class":39,"line":32905},[37,87321,70119],{"class":82},[37,87323,87080],{"class":54},[37,87325,57074],{"class":2035},[37,87327,2048],{"class":54},[37,87329,87330],{"class":39,"line":32911},[37,87331,2259],{"class":54},[37,87333,87334,87336,87338],{"class":39,"line":32920},[37,87335,52485],{"class":54},[37,87337,51881],{"class":51368},[37,87339,51375],{"class":54},[37,87341,87342,87344,87346],{"class":39,"line":32926},[37,87343,51853],{"class":54},[37,87345,51868],{"class":51368},[37,87347,51375],{"class":54},[37,87349,87350],{"class":39,"line":32935},[37,87351,2472],{"emptyLinePlaceholder":131},[37,87353,87354,87356,87358],{"class":39,"line":32941},[37,87355,51853],{"class":54},[37,87357,50703],{"class":51368},[37,87359,51375],{"class":54},[14,87361,87362],{},[119,87363],{"alt":32,"src":87364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[146,87366,87368],{"id":87367},"_414-深浅拷贝","4.14 深浅拷贝",[175,87370,87372],{"id":87371},"_4141-浅拷贝","4.14.1 浅拷贝",[14,87374,87375],{},[119,87376],{"alt":32,"src":87377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,87379,87380],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,87382,87383],{},[119,87384],{"alt":32,"src":87385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,87387,87388],{},[119,87389],{"alt":32,"src":87390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,87392,87393],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,87395,87396],{},[119,87397],{"alt":32,"src":87398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,87400,11404],{},[14,87402,87403],{},[119,87404],{"alt":32,"src":87405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[175,87407,87409],{"id":87408},"_4142-深拷贝","4.14.2 深拷贝",[14,87411,87412],{},"深拷贝：拷贝的是对象，不是地址",[14,87414,87415],{},"常用的三种方法：",[158,87417,87418,87421,87424],{},[161,87419,87420],{},"通过递归实现深拷贝",[161,87422,87423],{},"lodash\u002FcloneDeep",[161,87425,87426],{},"通过JSON.stringify()实现",[22070,87428,87430],{"id":87429},"_41421-递归函数","4.14.2.1 递归函数",[14,87432,87433],{},[119,87434],{"alt":32,"src":87435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[158,87437,87438],{},[161,87439,87440],{},"死递归占溢出：",[27,87442,87444],{"className":53135,"code":87443,"language":53137,"meta":32,"style":32},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[34,87445,87446,87454,87462,87466,87471,87475,87480,87488],{"__ignoreMap":32},[37,87447,87448,87450,87452],{"class":39,"line":40},[37,87449,1113],{"class":54},[37,87451,51868],{"class":51368},[37,87453,51375],{"class":54},[37,87455,87456,87458,87460],{"class":39,"line":47},[37,87457,52212],{"class":54},[37,87459,51881],{"class":51368},[37,87461,51375],{"class":54},[37,87463,87464],{"class":39,"line":58},[37,87465,77211],{"class":54},[37,87467,87468],{"class":39,"line":64},[37,87469,87470],{"class":54},"      fn()\n",[37,87472,87473],{"class":39,"line":76},[37,87474,2259],{"class":54},[37,87476,87477],{"class":39,"line":92},[37,87478,87479],{"class":54},"    fn()\n",[37,87481,87482,87484,87486],{"class":39,"line":97},[37,87483,52485],{"class":54},[37,87485,51881],{"class":51368},[37,87487,51375],{"class":54},[37,87489,87490,87492,87494],{"class":39,"line":107},[37,87491,51853],{"class":54},[37,87493,51868],{"class":51368},[37,87495,51375],{"class":54},[158,87497,87498],{"start":47},[161,87499,87500],{},"递归函数要加判断条件：",[14,87502,87503],{},[119,87504],{"alt":32,"src":87505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[158,87507,87508],{"start":58},[161,87509,87510],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[27,87512,87514],{"className":50701,"code":87513,"language":50703,"meta":32,"style":32},"\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",[34,87515,87516,87526,87540,87544,87552,87566,87586,87598,87606,87610,87618,87630,87638,87646,87671,87683,87687,87694,87702,87710,87714],{"__ignoreMap":32},[37,87517,87518,87520,87522,87524],{"class":39,"line":40},[37,87519,51365],{"class":54},[37,87521,51369],{"class":51368},[37,87523,51372],{"class":2035},[37,87525,51375],{"class":54},[37,87527,87528,87530,87532,87534,87536,87538],{"class":39,"line":47},[37,87529,1113],{"class":54},[37,87531,50703],{"class":51368},[37,87533,51384],{"class":2035},[37,87535,70],{"class":54},[37,87537,51389],{"class":309},[37,87539,51375],{"class":54},[37,87541,87542],{"class":39,"line":58},[37,87543,2472],{"emptyLinePlaceholder":131},[37,87545,87546,87548,87550],{"class":39,"line":64},[37,87547,1113],{"class":54},[37,87549,51402],{"class":51368},[37,87551,51375],{"class":54},[37,87553,87554,87556,87558,87560,87562,87564],{"class":39,"line":76},[37,87555,52212],{"class":54},[37,87557,51412],{"class":51368},[37,87559,51415],{"class":2035},[37,87561,70],{"class":54},[37,87563,51420],{"class":309},[37,87565,51375],{"class":54},[37,87567,87568,87570,87572,87574,87576,87578,87580,87582,87584],{"class":39,"line":92},[37,87569,52212],{"class":54},[37,87571,51412],{"class":51368},[37,87573,14992],{"class":2035},[37,87575,70],{"class":54},[37,87577,51459],{"class":309},[37,87579,51439],{"class":2035},[37,87581,70],{"class":54},[37,87583,51466],{"class":309},[37,87585,51375],{"class":54},[37,87587,87588,87590,87592,87594,87596],{"class":39,"line":97},[37,87589,52212],{"class":54},[37,87591,51475],{"class":51368},[37,87593,51478],{"class":54},[37,87595,51475],{"class":51368},[37,87597,51375],{"class":54},[37,87599,87600,87602,87604],{"class":39,"line":107},[37,87601,51853],{"class":54},[37,87603,51402],{"class":51368},[37,87605,51375],{"class":54},[37,87607,87608],{"class":39,"line":1390},[37,87609,2472],{"emptyLinePlaceholder":131},[37,87611,87612,87614,87616],{"class":39,"line":1402},[37,87613,1113],{"class":54},[37,87615,51868],{"class":51368},[37,87617,51375],{"class":54},[37,87619,87620,87622,87624,87626,87628],{"class":39,"line":1684},[37,87621,52212],{"class":54},[37,87623,51679],{"class":51368},[37,87625,55382],{"class":54},[37,87627,51679],{"class":51368},[37,87629,51375],{"class":54},[37,87631,87632,87634,87636],{"class":39,"line":1689},[37,87633,52212],{"class":54},[37,87635,51881],{"class":51368},[37,87637,51375],{"class":54},[37,87639,87640,87642,87644],{"class":39,"line":1695},[37,87641,70152],{"class":50},[37,87643,73841],{"class":2035},[37,87645,10925],{"class":54},[37,87647,87648,87650,87652,87654,87656,87658,87660,87662,87664,87666,87669],{"class":39,"line":1700},[37,87649,55839],{"class":54},[37,87651,54467],{"class":2035},[37,87653,208],{"class":54},[37,87655,81999],{"class":309},[37,87657,74317],{"class":54},[37,87659,70],{"class":50},[37,87661,11650],{"class":50},[37,87663,73857],{"class":2035},[37,87665,17333],{"class":54},[37,87667,87668],{"class":2035},"toLocaleString",[37,87670,2048],{"class":54},[37,87672,87673,87676,87679,87681],{"class":39,"line":1714},[37,87674,87675],{"class":2035},"      setTimeout",[37,87677,87678],{"class":54},"(getTime, ",[37,87680,6482],{"class":82},[37,87682,214],{"class":54},[37,87684,87685],{"class":39,"line":1719},[37,87686,2259],{"class":54},[37,87688,87689,87692],{"class":39,"line":1725},[37,87690,87691],{"class":2035},"    getTime",[37,87693,2048],{"class":54},[37,87695,87696,87698,87700],{"class":39,"line":1746},[37,87697,52485],{"class":54},[37,87699,51881],{"class":51368},[37,87701,51375],{"class":54},[37,87703,87704,87706,87708],{"class":39,"line":1751},[37,87705,51853],{"class":54},[37,87707,51868],{"class":51368},[37,87709,51375],{"class":54},[37,87711,87712],{"class":39,"line":1765},[37,87713,2472],{"emptyLinePlaceholder":131},[37,87715,87716,87718,87720],{"class":39,"line":1770},[37,87717,51853],{"class":54},[37,87719,50703],{"class":51368},[37,87721,51375],{"class":54},[14,87723,87724],{},[119,87725],{"alt":32,"src":87726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[158,87728,87729],{"start":64},[161,87730,87420],{},[14,87732,87733],{},[119,87734],{"alt":32,"src":87735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,87737,87738],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,87740,39258],{},[14,87742,87743],{},"这个是简易版的递归函数深拷贝",[14,87745,87746],{},"一定要注意先数组再对象，因为万物皆可对象",[27,87748,87750],{"className":50701,"code":87749,"language":50703,"meta":32,"style":32},"\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",[34,87751,87752,87762,87776,87780,87788,87802,87822,87834,87842,87846,87854,87862,87872,87881,87889,87905,87909,87917,87921,87925,87937,87942,87961,87977,87982,87987,87992,88007,88012,88017,88026,88034,88051,88059,88065,88073,88078,88083,88092,88096,88100,88104,88115,88124,88134,88148,88158,88166,88174,88182,88186],{"__ignoreMap":32},[37,87753,87754,87756,87758,87760],{"class":39,"line":40},[37,87755,51365],{"class":54},[37,87757,51369],{"class":51368},[37,87759,51372],{"class":2035},[37,87761,51375],{"class":54},[37,87763,87764,87766,87768,87770,87772,87774],{"class":39,"line":47},[37,87765,1113],{"class":54},[37,87767,50703],{"class":51368},[37,87769,51384],{"class":2035},[37,87771,70],{"class":54},[37,87773,51389],{"class":309},[37,87775,51375],{"class":54},[37,87777,87778],{"class":39,"line":58},[37,87779,2472],{"emptyLinePlaceholder":131},[37,87781,87782,87784,87786],{"class":39,"line":64},[37,87783,1113],{"class":54},[37,87785,51402],{"class":51368},[37,87787,51375],{"class":54},[37,87789,87790,87792,87794,87796,87798,87800],{"class":39,"line":76},[37,87791,52212],{"class":54},[37,87793,51412],{"class":51368},[37,87795,51415],{"class":2035},[37,87797,70],{"class":54},[37,87799,51420],{"class":309},[37,87801,51375],{"class":54},[37,87803,87804,87806,87808,87810,87812,87814,87816,87818,87820],{"class":39,"line":92},[37,87805,52212],{"class":54},[37,87807,51412],{"class":51368},[37,87809,14992],{"class":2035},[37,87811,70],{"class":54},[37,87813,51459],{"class":309},[37,87815,51439],{"class":2035},[37,87817,70],{"class":54},[37,87819,51466],{"class":309},[37,87821,51375],{"class":54},[37,87823,87824,87826,87828,87830,87832],{"class":39,"line":97},[37,87825,52212],{"class":54},[37,87827,51475],{"class":51368},[37,87829,51478],{"class":54},[37,87831,51475],{"class":51368},[37,87833,51375],{"class":54},[37,87835,87836,87838,87840],{"class":39,"line":107},[37,87837,51853],{"class":54},[37,87839,51402],{"class":51368},[37,87841,51375],{"class":54},[37,87843,87844],{"class":39,"line":1390},[37,87845,2472],{"emptyLinePlaceholder":131},[37,87847,87848,87850,87852],{"class":39,"line":1402},[37,87849,1113],{"class":54},[37,87851,51868],{"class":51368},[37,87853,51375],{"class":54},[37,87855,87856,87858,87860],{"class":39,"line":1684},[37,87857,52212],{"class":54},[37,87859,51881],{"class":51368},[37,87861,51375],{"class":54},[37,87863,87864,87866,87868,87870],{"class":39,"line":1689},[37,87865,11293],{"class":50},[37,87867,70039],{"class":82},[37,87869,13636],{"class":50},[37,87871,15644],{"class":54},[37,87873,87874,87876,87879],{"class":39,"line":1695},[37,87875,71684],{"class":54},[37,87877,87878],{"class":309},"'pink'",[37,87880,31536],{"class":54},[37,87882,87883,87885,87887],{"class":39,"line":1700},[37,87884,71694],{"class":54},[37,87886,853],{"class":82},[37,87888,31536],{"class":54},[37,87890,87891,87894,87897,87899,87902],{"class":39,"line":1714},[37,87892,87893],{"class":54},"      hobby: [",[37,87895,87896],{"class":309},"'乒乓球'",[37,87898,12507],{"class":54},[37,87900,87901],{"class":309},"'足球'",[37,87903,87904],{"class":54},"],\n",[37,87906,87907],{"class":39,"line":1719},[37,87908,77940],{"class":54},[37,87910,87911,87914],{"class":39,"line":1725},[37,87912,87913],{"class":54},"        baby: ",[37,87915,87916],{"class":309},"'小pink'\n",[37,87918,87919],{"class":39,"line":1746},[37,87920,52466],{"class":54},[37,87922,87923],{"class":39,"line":1751},[37,87924,2259],{"class":54},[37,87926,87927,87929,87932,87934],{"class":39,"line":1765},[37,87928,11293],{"class":50},[37,87930,87931],{"class":82}," o",[37,87933,13636],{"class":50},[37,87935,87936],{"class":54}," {}\n",[37,87938,87939],{"class":39,"line":1770},[37,87940,87941],{"class":43},"    \u002F\u002F 拷贝函数\n",[37,87943,87944,87946,87949,87951,87954,87956,87959],{"class":39,"line":1799},[37,87945,70152],{"class":50},[37,87947,87948],{"class":2035}," deepCopy",[37,87950,208],{"class":54},[37,87952,87953],{"class":5288},"newObj",[37,87955,12507],{"class":54},[37,87957,87958],{"class":5288},"oldObj",[37,87960,12514],{"class":54},[37,87962,87963,87965,87967,87969,87972,87974],{"class":39,"line":1804},[37,87964,52352],{"class":50},[37,87966,1730],{"class":54},[37,87968,51915],{"class":50},[37,87970,87971],{"class":54}," k ",[37,87973,26116],{"class":50},[37,87975,87976],{"class":54}," oldObj) {\n",[37,87978,87979],{"class":39,"line":1821},[37,87980,87981],{"class":43},"        \u002F\u002F 处理数组的问题\n",[37,87983,87984],{"class":39,"line":1826},[37,87985,87986],{"class":43},"        \u002F\u002F 判断是否属于数组\n",[37,87988,87989],{"class":39,"line":1831},[37,87990,87991],{"class":43},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[37,87993,87994,87996,87999,88002,88005],{"class":39,"line":1836},[37,87995,2569],{"class":50},[37,87997,87998],{"class":54}," (oldObj[k] ",[37,88000,88001],{"class":50},"instanceof",[37,88003,88004],{"class":2035}," Array",[37,88006,12514],{"class":54},[37,88008,88009],{"class":39,"line":1850},[37,88010,88011],{"class":43},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[37,88013,88014],{"class":39,"line":1855},[37,88015,88016],{"class":43},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[37,88018,88019,88022,88024],{"class":39,"line":2649},[37,88020,88021],{"class":54},"          newObj[k] ",[37,88023,70],{"class":50},[37,88025,51906],{"class":54},[37,88027,88028,88031],{"class":39,"line":2663},[37,88029,88030],{"class":2035},"          deepCopy",[37,88032,88033],{"class":54},"(newObj[k], oldObj[k])\n",[37,88035,88036,88038,88040,88042,88044,88046,88049],{"class":39,"line":2671},[37,88037,80148],{"class":54},[37,88039,1773],{"class":50},[37,88041,1776],{"class":50},[37,88043,87998],{"class":54},[37,88045,88001],{"class":50},[37,88047,88048],{"class":2035}," Object",[37,88050,12514],{"class":54},[37,88052,88053,88055,88057],{"class":39,"line":2676},[37,88054,88021],{"class":54},[37,88056,70],{"class":50},[37,88058,87936],{"class":54},[37,88060,88061,88063],{"class":39,"line":2682},[37,88062,88030],{"class":2035},[37,88064,88033],{"class":54},[37,88066,88067,88069,88071],{"class":39,"line":2688},[37,88068,80148],{"class":54},[37,88070,1773],{"class":50},[37,88072,15644],{"class":54},[37,88074,88075],{"class":39,"line":2693},[37,88076,88077],{"class":43},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[37,88079,88080],{"class":39,"line":8020},[37,88081,88082],{"class":43},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[37,88084,88085,88087,88089],{"class":39,"line":8044},[37,88086,88021],{"class":54},[37,88088,70],{"class":50},[37,88090,88091],{"class":54}," oldObj[k]\n",[37,88093,88094],{"class":39,"line":8049},[37,88095,2601],{"class":54},[37,88097,88098],{"class":39,"line":8055},[37,88099,52466],{"class":54},[37,88101,88102],{"class":39,"line":8082},[37,88103,2259],{"class":54},[37,88105,88106,88109,88112],{"class":39,"line":8087},[37,88107,88108],{"class":2035},"    deepCopy",[37,88110,88111],{"class":54},"(o, obj) ",[37,88113,88114],{"class":43},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[37,88116,88117,88119,88121],{"class":39,"line":8093},[37,88118,73821],{"class":54},[37,88120,58315],{"class":2035},[37,88122,88123],{"class":54},"(o)\n",[37,88125,88126,88129,88131],{"class":39,"line":8105},[37,88127,88128],{"class":54},"    o.age ",[37,88130,70],{"class":50},[37,88132,88133],{"class":82}," 20\n",[37,88135,88136,88139,88141,88143,88145],{"class":39,"line":8117},[37,88137,88138],{"class":54},"    o.hobby[",[37,88140,396],{"class":82},[37,88142,4515],{"class":54},[37,88144,70],{"class":50},[37,88146,88147],{"class":309}," '篮球'\n",[37,88149,88150,88153,88155],{"class":39,"line":8129},[37,88151,88152],{"class":54},"    o.family ",[37,88154,70],{"class":50},[37,88156,88157],{"class":309}," '老pink'\n",[37,88159,88160,88162,88164],{"class":39,"line":9788},[37,88161,73821],{"class":54},[37,88163,58315],{"class":2035},[37,88165,70104],{"class":54},[37,88167,88168,88170,88172],{"class":39,"line":9813},[37,88169,52485],{"class":54},[37,88171,51881],{"class":51368},[37,88173,51375],{"class":54},[37,88175,88176,88178,88180],{"class":39,"line":9836},[37,88177,51853],{"class":54},[37,88179,51868],{"class":51368},[37,88181,51375],{"class":54},[37,88183,88184],{"class":39,"line":9860},[37,88185,2472],{"emptyLinePlaceholder":131},[37,88187,88188,88190,88192],{"class":39,"line":9865},[37,88189,51853],{"class":54},[37,88191,50703],{"class":51368},[37,88193,51375],{"class":54},[14,88195,88196],{},[119,88197],{"alt":32,"src":88198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22070,88200,88202,88203],{"id":88201},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[354,88204,88205],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88207,88208],{},[443,88209,88210],{"href":88210,"rel":88211},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23937],[14,88213,88214],{},"lodash里边的方法都要加上一个下划线_",[14,88216,88217],{},"_.cloneDeep()",[27,88219,88221],{"className":50701,"code":88220,"language":50703,"meta":32,"style":32},"\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",[34,88222,88223,88233,88247,88251,88259,88273,88293,88305,88313,88317,88325,88330,88349,88357,88367,88375,88383,88395,88399,88405,88409,88413,88429,88437,88446,88454,88462,88470,88474],{"__ignoreMap":32},[37,88224,88225,88227,88229,88231],{"class":39,"line":40},[37,88226,51365],{"class":54},[37,88228,51369],{"class":51368},[37,88230,51372],{"class":2035},[37,88232,51375],{"class":54},[37,88234,88235,88237,88239,88241,88243,88245],{"class":39,"line":47},[37,88236,1113],{"class":54},[37,88238,50703],{"class":51368},[37,88240,51384],{"class":2035},[37,88242,70],{"class":54},[37,88244,51389],{"class":309},[37,88246,51375],{"class":54},[37,88248,88249],{"class":39,"line":58},[37,88250,2472],{"emptyLinePlaceholder":131},[37,88252,88253,88255,88257],{"class":39,"line":64},[37,88254,1113],{"class":54},[37,88256,51402],{"class":51368},[37,88258,51375],{"class":54},[37,88260,88261,88263,88265,88267,88269,88271],{"class":39,"line":76},[37,88262,52212],{"class":54},[37,88264,51412],{"class":51368},[37,88266,51415],{"class":2035},[37,88268,70],{"class":54},[37,88270,51420],{"class":309},[37,88272,51375],{"class":54},[37,88274,88275,88277,88279,88281,88283,88285,88287,88289,88291],{"class":39,"line":92},[37,88276,52212],{"class":54},[37,88278,51412],{"class":51368},[37,88280,14992],{"class":2035},[37,88282,70],{"class":54},[37,88284,51459],{"class":309},[37,88286,51439],{"class":2035},[37,88288,70],{"class":54},[37,88290,51466],{"class":309},[37,88292,51375],{"class":54},[37,88294,88295,88297,88299,88301,88303],{"class":39,"line":97},[37,88296,52212],{"class":54},[37,88298,51475],{"class":51368},[37,88300,51478],{"class":54},[37,88302,51475],{"class":51368},[37,88304,51375],{"class":54},[37,88306,88307,88309,88311],{"class":39,"line":107},[37,88308,51853],{"class":54},[37,88310,51402],{"class":51368},[37,88312,51375],{"class":54},[37,88314,88315],{"class":39,"line":1390},[37,88316,2472],{"emptyLinePlaceholder":131},[37,88318,88319,88321,88323],{"class":39,"line":1402},[37,88320,1113],{"class":54},[37,88322,51868],{"class":51368},[37,88324,51375],{"class":54},[37,88326,88327],{"class":39,"line":1684},[37,88328,88329],{"class":43},"  \u003C!-- 先引用这个库 -->\n",[37,88331,88332,88334,88336,88338,88340,88343,88345,88347],{"class":39,"line":1689},[37,88333,52212],{"class":54},[37,88335,51881],{"class":51368},[37,88337,55307],{"class":2035},[37,88339,70],{"class":54},[37,88341,88342],{"class":309},"\"lodash.min.js\"",[37,88344,55382],{"class":54},[37,88346,51881],{"class":51368},[37,88348,51375],{"class":54},[37,88350,88351,88353,88355],{"class":39,"line":1695},[37,88352,52212],{"class":54},[37,88354,51881],{"class":51368},[37,88356,51375],{"class":54},[37,88358,88359,88361,88363,88365],{"class":39,"line":1700},[37,88360,11293],{"class":50},[37,88362,70039],{"class":82},[37,88364,13636],{"class":50},[37,88366,15644],{"class":54},[37,88368,88369,88371,88373],{"class":39,"line":1714},[37,88370,71684],{"class":54},[37,88372,87878],{"class":309},[37,88374,31536],{"class":54},[37,88376,88377,88379,88381],{"class":39,"line":1719},[37,88378,71694],{"class":54},[37,88380,853],{"class":82},[37,88382,31536],{"class":54},[37,88384,88385,88387,88389,88391,88393],{"class":39,"line":1725},[37,88386,87893],{"class":54},[37,88388,87896],{"class":309},[37,88390,12507],{"class":54},[37,88392,87901],{"class":309},[37,88394,87904],{"class":54},[37,88396,88397],{"class":39,"line":1746},[37,88398,77940],{"class":54},[37,88400,88401,88403],{"class":39,"line":1751},[37,88402,87913],{"class":54},[37,88404,87916],{"class":309},[37,88406,88407],{"class":39,"line":1765},[37,88408,52466],{"class":54},[37,88410,88411],{"class":39,"line":1770},[37,88412,2259],{"class":54},[37,88414,88415,88417,88419,88421,88424,88427],{"class":39,"line":1799},[37,88416,11293],{"class":50},[37,88418,87931],{"class":82},[37,88420,13636],{"class":50},[37,88422,88423],{"class":54}," _.",[37,88425,88426],{"class":2035},"cloneDeep",[37,88428,70104],{"class":54},[37,88430,88431,88433,88435],{"class":39,"line":1804},[37,88432,73821],{"class":54},[37,88434,58315],{"class":2035},[37,88436,88123],{"class":54},[37,88438,88439,88442,88444],{"class":39,"line":1821},[37,88440,88441],{"class":54},"    o.family.baby ",[37,88443,70],{"class":50},[37,88445,88157],{"class":309},[37,88447,88448,88450,88452],{"class":39,"line":1826},[37,88449,73821],{"class":54},[37,88451,58315],{"class":2035},[37,88453,70104],{"class":54},[37,88455,88456,88458,88460],{"class":39,"line":1831},[37,88457,52485],{"class":54},[37,88459,51881],{"class":51368},[37,88461,51375],{"class":54},[37,88463,88464,88466,88468],{"class":39,"line":1836},[37,88465,51853],{"class":54},[37,88467,51868],{"class":51368},[37,88469,51375],{"class":54},[37,88471,88472],{"class":39,"line":1850},[37,88473,2472],{"emptyLinePlaceholder":131},[37,88475,88476,88478,88480],{"class":39,"line":1855},[37,88477,51853],{"class":54},[37,88479,50703],{"class":51368},[37,88481,51375],{"class":54},[14,88483,88484],{},[119,88485],{"alt":32,"src":88486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22070,88488,88490],{"id":88489},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[27,88492,88494],{"className":50701,"code":88493,"language":50703,"meta":32,"style":32},"\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",[34,88495,88496,88506,88520,88524,88532,88546,88566,88578,88586,88590,88598,88606,88616,88624,88632,88644,88648,88654,88658,88662,88667,88672,88677,88703,88711,88720,88728,88736,88744,88748],{"__ignoreMap":32},[37,88497,88498,88500,88502,88504],{"class":39,"line":40},[37,88499,51365],{"class":54},[37,88501,51369],{"class":51368},[37,88503,51372],{"class":2035},[37,88505,51375],{"class":54},[37,88507,88508,88510,88512,88514,88516,88518],{"class":39,"line":47},[37,88509,1113],{"class":54},[37,88511,50703],{"class":51368},[37,88513,51384],{"class":2035},[37,88515,70],{"class":54},[37,88517,51389],{"class":309},[37,88519,51375],{"class":54},[37,88521,88522],{"class":39,"line":58},[37,88523,2472],{"emptyLinePlaceholder":131},[37,88525,88526,88528,88530],{"class":39,"line":64},[37,88527,1113],{"class":54},[37,88529,51402],{"class":51368},[37,88531,51375],{"class":54},[37,88533,88534,88536,88538,88540,88542,88544],{"class":39,"line":76},[37,88535,52212],{"class":54},[37,88537,51412],{"class":51368},[37,88539,51415],{"class":2035},[37,88541,70],{"class":54},[37,88543,51420],{"class":309},[37,88545,51375],{"class":54},[37,88547,88548,88550,88552,88554,88556,88558,88560,88562,88564],{"class":39,"line":92},[37,88549,52212],{"class":54},[37,88551,51412],{"class":51368},[37,88553,14992],{"class":2035},[37,88555,70],{"class":54},[37,88557,51459],{"class":309},[37,88559,51439],{"class":2035},[37,88561,70],{"class":54},[37,88563,51466],{"class":309},[37,88565,51375],{"class":54},[37,88567,88568,88570,88572,88574,88576],{"class":39,"line":97},[37,88569,52212],{"class":54},[37,88571,51475],{"class":51368},[37,88573,51478],{"class":54},[37,88575,51475],{"class":51368},[37,88577,51375],{"class":54},[37,88579,88580,88582,88584],{"class":39,"line":107},[37,88581,51853],{"class":54},[37,88583,51402],{"class":51368},[37,88585,51375],{"class":54},[37,88587,88588],{"class":39,"line":1390},[37,88589,2472],{"emptyLinePlaceholder":131},[37,88591,88592,88594,88596],{"class":39,"line":1402},[37,88593,1113],{"class":54},[37,88595,51868],{"class":51368},[37,88597,51375],{"class":54},[37,88599,88600,88602,88604],{"class":39,"line":1684},[37,88601,52212],{"class":54},[37,88603,51881],{"class":51368},[37,88605,51375],{"class":54},[37,88607,88608,88610,88612,88614],{"class":39,"line":1689},[37,88609,11293],{"class":50},[37,88611,70039],{"class":82},[37,88613,13636],{"class":50},[37,88615,15644],{"class":54},[37,88617,88618,88620,88622],{"class":39,"line":1695},[37,88619,71684],{"class":54},[37,88621,87878],{"class":309},[37,88623,31536],{"class":54},[37,88625,88626,88628,88630],{"class":39,"line":1700},[37,88627,71694],{"class":54},[37,88629,853],{"class":82},[37,88631,31536],{"class":54},[37,88633,88634,88636,88638,88640,88642],{"class":39,"line":1714},[37,88635,87893],{"class":54},[37,88637,87896],{"class":309},[37,88639,12507],{"class":54},[37,88641,87901],{"class":309},[37,88643,87904],{"class":54},[37,88645,88646],{"class":39,"line":1719},[37,88647,77940],{"class":54},[37,88649,88650,88652],{"class":39,"line":1725},[37,88651,87913],{"class":54},[37,88653,87916],{"class":309},[37,88655,88656],{"class":39,"line":1746},[37,88657,52466],{"class":54},[37,88659,88660],{"class":39,"line":1751},[37,88661,2259],{"class":54},[37,88663,88664],{"class":39,"line":1765},[37,88665,88666],{"class":43},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[37,88668,88669],{"class":39,"line":1770},[37,88670,88671],{"class":43},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[37,88673,88674],{"class":39,"line":1799},[37,88675,88676],{"class":43},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[37,88678,88679,88681,88683,88685,88688,88690,88693,88695,88697,88699,88701],{"class":39,"line":1804},[37,88680,11293],{"class":50},[37,88682,87931],{"class":82},[37,88684,13636],{"class":50},[37,88686,88687],{"class":82}," JSON",[37,88689,761],{"class":54},[37,88691,88692],{"class":2035},"parse",[37,88694,208],{"class":54},[37,88696,71732],{"class":82},[37,88698,761],{"class":54},[37,88700,71737],{"class":2035},[37,88702,71740],{"class":54},[37,88704,88705,88707,88709],{"class":39,"line":1821},[37,88706,73821],{"class":54},[37,88708,58315],{"class":2035},[37,88710,88123],{"class":54},[37,88712,88713,88715,88717],{"class":39,"line":1826},[37,88714,88441],{"class":54},[37,88716,70],{"class":50},[37,88718,88719],{"class":309}," '123'\n",[37,88721,88722,88724,88726],{"class":39,"line":1831},[37,88723,73821],{"class":54},[37,88725,58315],{"class":2035},[37,88727,70104],{"class":54},[37,88729,88730,88732,88734],{"class":39,"line":1836},[37,88731,52485],{"class":54},[37,88733,51881],{"class":51368},[37,88735,51375],{"class":54},[37,88737,88738,88740,88742],{"class":39,"line":1850},[37,88739,51853],{"class":54},[37,88741,51868],{"class":51368},[37,88743,51375],{"class":54},[37,88745,88746],{"class":39,"line":1855},[37,88747,2472],{"emptyLinePlaceholder":131},[37,88749,88750,88752,88754],{"class":39,"line":2649},[37,88751,51853],{"class":54},[37,88753,50703],{"class":51368},[37,88755,51375],{"class":54},[14,88757,88758],{},[119,88759],{"alt":32,"src":88760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[146,88762,88764],{"id":88763},"_415-异常处理","4.15 异常处理",[158,88766,88767],{},[161,88768,88769],{},"throw抛异常",[14,88771,88772],{},[119,88773],{"alt":32,"src":88774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[158,88776,88777],{"start":47},[161,88778,88779],{},"try\u002Fcatch 捕获错误信息",[14,88781,88782],{},[119,88783],{"alt":32,"src":88784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[27,88786,88788],{"className":50701,"code":88787,"language":50703,"meta":32,"style":32},"\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",[34,88789,88790,88800,88814,88818,88826,88840,88860,88872,88880,88884,88892,88904,88912,88921,88928,88933,88952,88961,88972,88977,88987,88992,88997,89002,89019,89023,89028,89035,89047,89051,89063,89067,89071,89076,89081,89088,89096,89104,89108],{"__ignoreMap":32},[37,88791,88792,88794,88796,88798],{"class":39,"line":40},[37,88793,51365],{"class":54},[37,88795,51369],{"class":51368},[37,88797,51372],{"class":2035},[37,88799,51375],{"class":54},[37,88801,88802,88804,88806,88808,88810,88812],{"class":39,"line":47},[37,88803,1113],{"class":54},[37,88805,50703],{"class":51368},[37,88807,51384],{"class":2035},[37,88809,70],{"class":54},[37,88811,51389],{"class":309},[37,88813,51375],{"class":54},[37,88815,88816],{"class":39,"line":58},[37,88817,2472],{"emptyLinePlaceholder":131},[37,88819,88820,88822,88824],{"class":39,"line":64},[37,88821,1113],{"class":54},[37,88823,51402],{"class":51368},[37,88825,51375],{"class":54},[37,88827,88828,88830,88832,88834,88836,88838],{"class":39,"line":76},[37,88829,52212],{"class":54},[37,88831,51412],{"class":51368},[37,88833,51415],{"class":2035},[37,88835,70],{"class":54},[37,88837,51420],{"class":309},[37,88839,51375],{"class":54},[37,88841,88842,88844,88846,88848,88850,88852,88854,88856,88858],{"class":39,"line":92},[37,88843,52212],{"class":54},[37,88845,51412],{"class":51368},[37,88847,14992],{"class":2035},[37,88849,70],{"class":54},[37,88851,51459],{"class":309},[37,88853,51439],{"class":2035},[37,88855,70],{"class":54},[37,88857,51466],{"class":309},[37,88859,51375],{"class":54},[37,88861,88862,88864,88866,88868,88870],{"class":39,"line":97},[37,88863,52212],{"class":54},[37,88865,51475],{"class":51368},[37,88867,51478],{"class":54},[37,88869,51475],{"class":51368},[37,88871,51375],{"class":54},[37,88873,88874,88876,88878],{"class":39,"line":107},[37,88875,51853],{"class":54},[37,88877,51402],{"class":51368},[37,88879,51375],{"class":54},[37,88881,88882],{"class":39,"line":1390},[37,88883,2472],{"emptyLinePlaceholder":131},[37,88885,88886,88888,88890],{"class":39,"line":1402},[37,88887,1113],{"class":54},[37,88889,51868],{"class":51368},[37,88891,51375],{"class":54},[37,88893,88894,88896,88898,88900,88902],{"class":39,"line":1684},[37,88895,52212],{"class":54},[37,88897,14],{"class":51368},[37,88899,53562],{"class":54},[37,88901,14],{"class":51368},[37,88903,51375],{"class":54},[37,88905,88906,88908,88910],{"class":39,"line":1689},[37,88907,52212],{"class":54},[37,88909,51881],{"class":51368},[37,88911,51375],{"class":54},[37,88913,88914,88916,88919],{"class":39,"line":1695},[37,88915,70152],{"class":50},[37,88917,88918],{"class":2035}," fn",[37,88920,10925],{"class":54},[37,88922,88923,88926],{"class":39,"line":1700},[37,88924,88925],{"class":50},"      try",[37,88927,15644],{"class":54},[37,88929,88930],{"class":39,"line":1714},[37,88931,88932],{"class":43},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[37,88934,88935,88937,88939,88941,88943,88945,88947,88950],{"class":39,"line":1719},[37,88936,61338],{"class":50},[37,88938,6897],{"class":82},[37,88940,13636],{"class":50},[37,88942,54464],{"class":54},[37,88944,54467],{"class":2035},[37,88946,208],{"class":54},[37,88948,88949],{"class":309},"'.p'",[37,88951,214],{"class":54},[37,88953,88954,88957,88959],{"class":39,"line":1725},[37,88955,88956],{"class":54},"        p.style.color ",[37,88958,70],{"class":50},[37,88960,67119],{"class":309},[37,88962,88963,88966,88969],{"class":39,"line":1746},[37,88964,88965],{"class":54},"      } ",[37,88967,88968],{"class":50},"catch",[37,88970,88971],{"class":54}," (err) {\n",[37,88973,88974],{"class":39,"line":1751},[37,88975,88976],{"class":43},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[37,88978,88979,88982,88984],{"class":39,"line":1765},[37,88980,88981],{"class":54},"        console.",[37,88983,58315],{"class":2035},[37,88985,88986],{"class":54},"(err.message)\n",[37,88988,88989],{"class":39,"line":1770},[37,88990,88991],{"class":43},"        \u002F\u002F 想要中断程序，需要加return\n",[37,88993,88994],{"class":39,"line":1799},[37,88995,88996],{"class":43},"        \u002F\u002F return\n",[37,88998,88999],{"class":39,"line":1804},[37,89000,89001],{"class":43},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[37,89003,89004,89007,89009,89012,89014,89017],{"class":39,"line":1821},[37,89005,89006],{"class":50},"        throw",[37,89008,11650],{"class":50},[37,89010,89011],{"class":2035}," Error",[37,89013,208],{"class":54},[37,89015,89016],{"class":309},"'你看看，选择器错误了吧'",[37,89018,214],{"class":54},[37,89020,89021],{"class":39,"line":1826},[37,89022,52466],{"class":54},[37,89024,89025],{"class":39,"line":1831},[37,89026,89027],{"class":43},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[37,89029,89030,89033],{"class":39,"line":1836},[37,89031,89032],{"class":50},"      finally",[37,89034,15644],{"class":54},[37,89036,89037,89040,89042,89045],{"class":39,"line":1850},[37,89038,89039],{"class":2035},"        alert",[37,89041,208],{"class":54},[37,89043,89044],{"class":309},"'弹出对话框'",[37,89046,214],{"class":54},[37,89048,89049],{"class":39,"line":1855},[37,89050,52466],{"class":54},[37,89052,89053,89055,89057,89059,89061],{"class":39,"line":2649},[37,89054,58312],{"class":54},[37,89056,58315],{"class":2035},[37,89058,208],{"class":54},[37,89060,676],{"class":82},[37,89062,214],{"class":54},[37,89064,89065],{"class":39,"line":2663},[37,89066,2472],{"emptyLinePlaceholder":131},[37,89068,89069],{"class":39,"line":2671},[37,89070,2259],{"class":54},[37,89072,89073],{"class":39,"line":2676},[37,89074,89075],{"class":43},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[37,89077,89078],{"class":39,"line":2682},[37,89079,89080],{"class":43},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[37,89082,89083,89086],{"class":39,"line":2688},[37,89084,89085],{"class":2035},"    fn",[37,89087,2048],{"class":54},[37,89089,89090,89092,89094],{"class":39,"line":2693},[37,89091,52485],{"class":54},[37,89093,51881],{"class":51368},[37,89095,51375],{"class":54},[37,89097,89098,89100,89102],{"class":39,"line":8020},[37,89099,51853],{"class":54},[37,89101,51868],{"class":51368},[37,89103,51375],{"class":54},[37,89105,89106],{"class":39,"line":8044},[37,89107,2472],{"emptyLinePlaceholder":131},[37,89109,89110,89112,89114],{"class":39,"line":8049},[37,89111,51853],{"class":54},[37,89113,50703],{"class":51368},[37,89115,51375],{"class":54},[14,89117,89118],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[158,89120,89121],{"start":58},[161,89122,89123],{},"debugger",[14,89125,89126],{},[119,89127],{"alt":32,"src":89128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89130,89131],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[146,89133,89135],{"id":89134},"_416-处理this","4.16 处理this",[175,89137,89139],{"id":89138},"_4161-this的指向","4.16.1 this的指向",[158,89141,89142],{},[161,89143,89144],{},"普通函数的this",[14,89146,89147],{},[119,89148],{"alt":32,"src":89149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[158,89151,89152],{"start":47},[161,89153,89154],{},"箭头函数的this",[14,89156,89157],{},[119,89158],{"alt":32,"src":89159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89161,89162],{},[119,89163],{"alt":32,"src":89164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89166,89167],{},[119,89168],{"alt":32,"src":89169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[175,89171,89173],{"id":89172},"_4162-this的改变","4.16.2 this的改变",[14,89175,89176],{},"call() apply() bind()",[158,89178,89179],{},[161,89180,89181],{},"call()",[14,89183,89184],{},[119,89185],{"alt":32,"src":89186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89188,89189],{},"两个作用：①调用函数；②改变this指向",[27,89191,89193],{"className":53135,"code":89192,"language":53137,"meta":32,"style":32},"\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",[34,89194,89195,89203,89211,89215,89220,89224,89229,89234,89239,89243,89248,89256],{"__ignoreMap":32},[37,89196,89197,89199,89201],{"class":39,"line":40},[37,89198,1113],{"class":54},[37,89200,51868],{"class":51368},[37,89202,51375],{"class":54},[37,89204,89205,89207,89209],{"class":39,"line":47},[37,89206,52212],{"class":54},[37,89208,51881],{"class":51368},[37,89210,51375],{"class":54},[37,89212,89213],{"class":39,"line":58},[37,89214,71591],{"class":54},[37,89216,89217],{"class":39,"line":64},[37,89218,89219],{"class":54},"      uname: 'pink'\n",[37,89221,89222],{"class":39,"line":76},[37,89223,2259],{"class":54},[37,89225,89226],{"class":39,"line":92},[37,89227,89228],{"class":54},"    function fn(x, y) {\n",[37,89230,89231],{"class":39,"line":97},[37,89232,89233],{"class":54},"      console.log(this)  \u002F\u002Fwindow\n",[37,89235,89236],{"class":39,"line":107},[37,89237,89238],{"class":54},"      console.log(x + y)\n",[37,89240,89241],{"class":39,"line":1390},[37,89242,2259],{"class":54},[37,89244,89245],{"class":39,"line":1402},[37,89246,89247],{"class":54},"    fn.call(obj, 1, 2)\n",[37,89249,89250,89252,89254],{"class":39,"line":1684},[37,89251,52485],{"class":54},[37,89253,51881],{"class":51368},[37,89255,51375],{"class":54},[37,89257,89258,89260,89262],{"class":39,"line":1689},[37,89259,51853],{"class":54},[37,89261,51868],{"class":51368},[37,89263,51375],{"class":54},[14,89265,89266],{},[119,89267],{"alt":32,"src":89268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[158,89270,89271],{"start":47},[161,89272,89273],{},"apply()",[14,89275,89276],{},[119,89277],{"alt":32,"src":89278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89280,89189],{},[14,89282,89283],{},"call传递的是普通参数，而apply必须传递的是数组",[27,89285,89287],{"className":50701,"code":89286,"language":50703,"meta":32,"style":32},"\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",[34,89288,89289,89299,89313,89317,89325,89339,89359,89371,89379,89383,89391,89399,89409,89416,89420,89425,89441,89453,89467,89471,89476,89495,89500,89504,89509,89514,89522,89527,89549,89554,89570,89586,89598,89602,89607,89626,89634,89642,89646],{"__ignoreMap":32},[37,89290,89291,89293,89295,89297],{"class":39,"line":40},[37,89292,51365],{"class":54},[37,89294,51369],{"class":51368},[37,89296,51372],{"class":2035},[37,89298,51375],{"class":54},[37,89300,89301,89303,89305,89307,89309,89311],{"class":39,"line":47},[37,89302,1113],{"class":54},[37,89304,50703],{"class":51368},[37,89306,51384],{"class":2035},[37,89308,70],{"class":54},[37,89310,51389],{"class":309},[37,89312,51375],{"class":54},[37,89314,89315],{"class":39,"line":58},[37,89316,2472],{"emptyLinePlaceholder":131},[37,89318,89319,89321,89323],{"class":39,"line":64},[37,89320,1113],{"class":54},[37,89322,51402],{"class":51368},[37,89324,51375],{"class":54},[37,89326,89327,89329,89331,89333,89335,89337],{"class":39,"line":76},[37,89328,52212],{"class":54},[37,89330,51412],{"class":51368},[37,89332,51415],{"class":2035},[37,89334,70],{"class":54},[37,89336,51420],{"class":309},[37,89338,51375],{"class":54},[37,89340,89341,89343,89345,89347,89349,89351,89353,89355,89357],{"class":39,"line":92},[37,89342,52212],{"class":54},[37,89344,51412],{"class":51368},[37,89346,14992],{"class":2035},[37,89348,70],{"class":54},[37,89350,51459],{"class":309},[37,89352,51439],{"class":2035},[37,89354,70],{"class":54},[37,89356,51466],{"class":309},[37,89358,51375],{"class":54},[37,89360,89361,89363,89365,89367,89369],{"class":39,"line":97},[37,89362,52212],{"class":54},[37,89364,51475],{"class":51368},[37,89366,51478],{"class":54},[37,89368,51475],{"class":51368},[37,89370,51375],{"class":54},[37,89372,89373,89375,89377],{"class":39,"line":107},[37,89374,51853],{"class":54},[37,89376,51402],{"class":51368},[37,89378,51375],{"class":54},[37,89380,89381],{"class":39,"line":1390},[37,89382,2472],{"emptyLinePlaceholder":131},[37,89384,89385,89387,89389],{"class":39,"line":1402},[37,89386,1113],{"class":54},[37,89388,51868],{"class":51368},[37,89390,51375],{"class":54},[37,89392,89393,89395,89397],{"class":39,"line":1684},[37,89394,52212],{"class":54},[37,89396,51881],{"class":51368},[37,89398,51375],{"class":54},[37,89400,89401,89403,89405,89407],{"class":39,"line":1689},[37,89402,11293],{"class":50},[37,89404,70039],{"class":82},[37,89406,13636],{"class":50},[37,89408,15644],{"class":54},[37,89410,89411,89413],{"class":39,"line":1695},[37,89412,71694],{"class":54},[37,89414,89415],{"class":82},"18\n",[37,89417,89418],{"class":39,"line":1700},[37,89419,2259],{"class":54},[37,89421,89422],{"class":39,"line":1714},[37,89423,89424],{"class":43},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[37,89426,89427,89429,89431,89433,89435,89437,89439],{"class":39,"line":1719},[37,89428,70152],{"class":50},[37,89430,88918],{"class":2035},[37,89432,208],{"class":54},[37,89434,1023],{"class":5288},[37,89436,12507],{"class":54},[37,89438,1048],{"class":5288},[37,89440,12514],{"class":54},[37,89442,89443,89445,89447,89449,89451],{"class":39,"line":1725},[37,89444,58312],{"class":54},[37,89446,58315],{"class":2035},[37,89448,208],{"class":54},[37,89450,87061],{"class":82},[37,89452,214],{"class":54},[37,89454,89455,89457,89459,89462,89464],{"class":39,"line":1746},[37,89456,58312],{"class":54},[37,89458,58315],{"class":2035},[37,89460,89461],{"class":54},"(x ",[37,89463,685],{"class":50},[37,89465,89466],{"class":54}," y)\n",[37,89468,89469],{"class":39,"line":1751},[37,89470,2259],{"class":54},[37,89472,89473],{"class":39,"line":1765},[37,89474,89475],{"class":43},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[37,89477,89478,89481,89484,89487,89489,89491,89493],{"class":39,"line":1770},[37,89479,89480],{"class":54},"    fn.",[37,89482,89483],{"class":2035},"apply",[37,89485,89486],{"class":54},"(obj, [",[37,89488,422],{"class":82},[37,89490,12507],{"class":54},[37,89492,282],{"class":82},[37,89494,4729],{"class":54},[37,89496,89497],{"class":39,"line":1799},[37,89498,89499],{"class":43},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[37,89501,89502],{"class":39,"line":1804},[37,89503,2472],{"emptyLinePlaceholder":131},[37,89505,89506],{"class":39,"line":1821},[37,89507,89508],{"class":43},"    \u002F\u002F 使用场景：求数组最大值\n",[37,89510,89511],{"class":39,"line":1826},[37,89512,89513],{"class":43},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[37,89515,89516,89519],{"class":39,"line":1831},[37,89517,89518],{"class":43},"    \u002F\u002F console.log(max)",[37,89520,89521],{"class":43},"   \u002F\u002F3\n",[37,89523,89524],{"class":39,"line":1836},[37,89525,89526],{"class":43},"    \u002F\u002F 指向空或者Math都是可以的\n",[37,89528,89529,89531,89533,89535,89537,89539,89541,89543,89545,89547],{"class":39,"line":1850},[37,89530,11293],{"class":50},[37,89532,57763],{"class":82},[37,89534,13636],{"class":50},[37,89536,52294],{"class":54},[37,89538,516],{"class":82},[37,89540,12507],{"class":54},[37,89542,708],{"class":82},[37,89544,12507],{"class":54},[37,89546,738],{"class":82},[37,89548,33315],{"class":54},[37,89550,89551],{"class":39,"line":1855},[37,89552,89553],{"class":43},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[37,89555,89556,89558,89560,89562,89565,89567],{"class":39,"line":2649},[37,89557,11293],{"class":50},[37,89559,6023],{"class":82},[37,89561,13636],{"class":50},[37,89563,89564],{"class":54}," Math.max.",[37,89566,89483],{"class":2035},[37,89568,89569],{"class":54},"(Math, arr)\n",[37,89571,89572,89574,89577,89579,89582,89584],{"class":39,"line":2663},[37,89573,11293],{"class":50},[37,89575,89576],{"class":82}," min",[37,89578,13636],{"class":50},[37,89580,89581],{"class":54}," Math.min.",[37,89583,89483],{"class":2035},[37,89585,89569],{"class":54},[37,89587,89588,89590,89592,89595],{"class":39,"line":2671},[37,89589,73821],{"class":54},[37,89591,58315],{"class":2035},[37,89593,89594],{"class":54},"(max, min)     ",[37,89596,89597],{"class":43},"\u002F\u002F100,4\n",[37,89599,89600],{"class":39,"line":2676},[37,89601,2472],{"emptyLinePlaceholder":131},[37,89603,89604],{"class":39,"line":2682},[37,89605,89606],{"class":43},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[37,89608,89609,89611,89613,89616,89618,89620,89623],{"class":39,"line":2688},[37,89610,73821],{"class":54},[37,89612,58315],{"class":2035},[37,89614,89615],{"class":54},"(Max.",[37,89617,6087],{"class":2035},[37,89619,208],{"class":54},[37,89621,89622],{"class":50},"...",[37,89624,89625],{"class":54},"arr))\n",[37,89627,89628,89630,89632],{"class":39,"line":2693},[37,89629,52485],{"class":54},[37,89631,51881],{"class":51368},[37,89633,51375],{"class":54},[37,89635,89636,89638,89640],{"class":39,"line":8020},[37,89637,51853],{"class":54},[37,89639,51868],{"class":51368},[37,89641,51375],{"class":54},[37,89643,89644],{"class":39,"line":8044},[37,89645,2472],{"emptyLinePlaceholder":131},[37,89647,89648,89650,89652],{"class":39,"line":8049},[37,89649,51853],{"class":54},[37,89651,50703],{"class":51368},[37,89653,51375],{"class":54},[14,89655,89656],{},[119,89657],{"alt":32,"src":89658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[158,89660,89661],{"start":58},[161,89662,89663],{},"bind()",[14,89665,89666],{},[119,89667],{"alt":32,"src":89668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,89670,89671],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,89673,89674],{},"bind的语法跟call很相似",[27,89676,89678],{"className":53135,"code":89677,"language":53137,"meta":32,"style":32},"\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",[34,89679,89680,89688,89696,89700,89705,89709,89713,89718,89722,89727,89732,89737,89742,89747,89752,89757,89761,89769],{"__ignoreMap":32},[37,89681,89682,89684,89686],{"class":39,"line":40},[37,89683,1113],{"class":54},[37,89685,51868],{"class":51368},[37,89687,51375],{"class":54},[37,89689,89690,89692,89694],{"class":39,"line":47},[37,89691,52212],{"class":54},[37,89693,51881],{"class":51368},[37,89695,51375],{"class":54},[37,89697,89698],{"class":39,"line":58},[37,89699,71591],{"class":54},[37,89701,89702],{"class":39,"line":64},[37,89703,89704],{"class":54},"      age: 18\n",[37,89706,89707],{"class":39,"line":76},[37,89708,2259],{"class":54},[37,89710,89711],{"class":39,"line":92},[37,89712,77211],{"class":54},[37,89714,89715],{"class":39,"line":97},[37,89716,89717],{"class":54},"      console.log(this)\n",[37,89719,89720],{"class":39,"line":107},[37,89721,2259],{"class":54},[37,89723,89724],{"class":39,"line":1390},[37,89725,89726],{"class":54},"    \u002F\u002F 1.bind 不会调用函数\n",[37,89728,89729],{"class":39,"line":1402},[37,89730,89731],{"class":54},"    \u002F\u002F 2.bind能改变this的指向\n",[37,89733,89734],{"class":39,"line":1684},[37,89735,89736],{"class":54},"    fn.bind()\n",[37,89738,89739],{"class":39,"line":1689},[37,89740,89741],{"class":54},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[37,89743,89744],{"class":39,"line":1695},[37,89745,89746],{"class":54},"    const fun = fn.bind(obj)\n",[37,89748,89749],{"class":39,"line":1700},[37,89750,89751],{"class":54},"    \u002F\u002F console.log(fun)\n",[37,89753,89754],{"class":39,"line":1714},[37,89755,89756],{"class":54},"    \u002F\u002F 调用,查看this的指向\n",[37,89758,89759],{"class":39,"line":1719},[37,89760,52719],{"class":54},[37,89762,89763,89765,89767],{"class":39,"line":1725},[37,89764,52485],{"class":54},[37,89766,51881],{"class":51368},[37,89768,51375],{"class":54},[37,89770,89771,89773,89775],{"class":39,"line":1746},[37,89772,51853],{"class":54},[37,89774,51868],{"class":51368},[37,89776,51375],{"class":54},[14,89778,89779],{},[119,89780],{"alt":32,"src":89781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[158,89783,89784],{"start":64},[161,89785,89786],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[27,89788,89790],{"className":53135,"code":89789,"language":53137,"meta":32,"style":32},"\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",[34,89791,89792,89800,89813,89821,89826,89830,89835,89840,89845,89850,89855,89860,89865,89870,89874,89882],{"__ignoreMap":32},[37,89793,89794,89796,89798],{"class":39,"line":40},[37,89795,1113],{"class":54},[37,89797,51868],{"class":51368},[37,89799,51375],{"class":54},[37,89801,89802,89804,89806,89809,89811],{"class":39,"line":47},[37,89803,52212],{"class":54},[37,89805,53955],{"class":51368},[37,89807,89808],{"class":54},">禁用\u003C\u002F",[37,89810,53955],{"class":51368},[37,89812,51375],{"class":54},[37,89814,89815,89817,89819],{"class":39,"line":58},[37,89816,52212],{"class":54},[37,89818,51881],{"class":51368},[37,89820,51375],{"class":54},[37,89822,89823],{"class":39,"line":64},[37,89824,89825],{"class":54},"    const btn = document.querySelector('button')\n",[37,89827,89828],{"class":39,"line":76},[37,89829,59084],{"class":54},[37,89831,89832],{"class":39,"line":92},[37,89833,89834],{"class":54},"      this.disabled = true\n",[37,89836,89837],{"class":39,"line":97},[37,89838,89839],{"class":54},"      \u002F\u002F 定时器是window进行调用的\n",[37,89841,89842],{"class":39,"line":107},[37,89843,89844],{"class":54},"      setTimeout(function () {\n",[37,89846,89847],{"class":39,"line":1390},[37,89848,89849],{"class":54},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[37,89851,89852],{"class":39,"line":1402},[37,89853,89854],{"class":54},"        this.disabled = false\n",[37,89856,89857],{"class":39,"line":1684},[37,89858,89859],{"class":54},"      }.bind(this), 2000)\n",[37,89861,89862],{"class":39,"line":1689},[37,89863,89864],{"class":54},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[37,89866,89867],{"class":39,"line":1695},[37,89868,89869],{"class":54},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[37,89871,89872],{"class":39,"line":1700},[37,89873,33530],{"class":54},[37,89875,89876,89878,89880],{"class":39,"line":1714},[37,89877,52485],{"class":54},[37,89879,51881],{"class":51368},[37,89881,51375],{"class":54},[37,89883,89884,89886,89888],{"class":39,"line":1719},[37,89885,51853],{"class":54},[37,89887,51868],{"class":51368},[37,89889,51375],{"class":54},[158,89891,89892],{"start":76},[161,89893,22025],{},[14,89895,89896],{},[119,89897],{"alt":32,"src":89898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[146,89900,89902],{"id":89901},"_417-性能优化","4.17 性能优化",[175,89904,89906],{"id":89905},"_4171-防抖","4.17.1 防抖",[14,89908,89909],{},[119,89910],{"alt":32,"src":89911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,89913,89914],{},[354,89915,89916],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,89918,89919],{},"防抖实现方式：",[1210,89921,89922],{},[161,89923,89924],{},"lodash 提供了防抖处理",[14,89926,89927],{},"_.debounce(func,[wait=0],[options={}])",[14,89929,89930],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[27,89932,89934],{"className":50701,"code":89933,"language":50703,"meta":32,"style":32},"\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",[34,89935,89936,89946,89960,89964,89972,89986,90006,90018,90026,90032,90042,90054,90066,90077,90089,90099,90109,90122,90126,90134,90142,90146,90154,90172,90190,90198,90217,90227,90236,90247,90252,90256,90261,90266,90271,90296,90304,90312,90316],{"__ignoreMap":32},[37,89937,89938,89940,89942,89944],{"class":39,"line":40},[37,89939,51365],{"class":54},[37,89941,51369],{"class":51368},[37,89943,51372],{"class":2035},[37,89945,51375],{"class":54},[37,89947,89948,89950,89952,89954,89956,89958],{"class":39,"line":47},[37,89949,1113],{"class":54},[37,89951,50703],{"class":51368},[37,89953,51384],{"class":2035},[37,89955,70],{"class":54},[37,89957,51389],{"class":309},[37,89959,51375],{"class":54},[37,89961,89962],{"class":39,"line":58},[37,89963,2472],{"emptyLinePlaceholder":131},[37,89965,89966,89968,89970],{"class":39,"line":64},[37,89967,1113],{"class":54},[37,89969,51402],{"class":51368},[37,89971,51375],{"class":54},[37,89973,89974,89976,89978,89980,89982,89984],{"class":39,"line":76},[37,89975,52212],{"class":54},[37,89977,51412],{"class":51368},[37,89979,51415],{"class":2035},[37,89981,70],{"class":54},[37,89983,51420],{"class":309},[37,89985,51375],{"class":54},[37,89987,89988,89990,89992,89994,89996,89998,90000,90002,90004],{"class":39,"line":92},[37,89989,52212],{"class":54},[37,89991,51412],{"class":51368},[37,89993,14992],{"class":2035},[37,89995,70],{"class":54},[37,89997,51459],{"class":309},[37,89999,51439],{"class":2035},[37,90001,70],{"class":54},[37,90003,51466],{"class":309},[37,90005,51375],{"class":54},[37,90007,90008,90010,90012,90014,90016],{"class":39,"line":97},[37,90009,52212],{"class":54},[37,90011,51475],{"class":51368},[37,90013,51478],{"class":54},[37,90015,51475],{"class":51368},[37,90017,51375],{"class":54},[37,90019,90020,90022,90024],{"class":39,"line":107},[37,90021,52212],{"class":54},[37,90023,123],{"class":51368},[37,90025,51375],{"class":54},[37,90027,90028,90030],{"class":39,"line":1390},[37,90029,54820],{"class":2035},[37,90031,15644],{"class":54},[37,90033,90034,90036,90038,90040],{"class":39,"line":1402},[37,90035,72664],{"class":82},[37,90037,51505],{"class":54},[37,90039,60573],{"class":82},[37,90041,1364],{"class":54},[37,90043,90044,90046,90048,90050,90052],{"class":39,"line":1684},[37,90045,54839],{"class":82},[37,90047,51505],{"class":54},[37,90049,1794],{"class":82},[37,90051,51560],{"class":50},[37,90053,1364],{"class":54},[37,90055,90056,90058,90060,90062,90064],{"class":39,"line":1689},[37,90057,54853],{"class":82},[37,90059,51505],{"class":54},[37,90061,1794],{"class":82},[37,90063,51560],{"class":50},[37,90065,1364],{"class":54},[37,90067,90068,90070,90072,90075],{"class":39,"line":1695},[37,90069,54952],{"class":82},[37,90071,51505],{"class":54},[37,90073,90074],{"class":82},"gray",[37,90076,1364],{"class":54},[37,90078,90079,90081,90083,90085,90087],{"class":39,"line":1700},[37,90080,54990],{"class":82},[37,90082,51505],{"class":54},[37,90084,1028],{"class":82},[37,90086,51560],{"class":50},[37,90088,1364],{"class":54},[37,90090,90091,90093,90095,90097],{"class":39,"line":1714},[37,90092,57484],{"class":82},[37,90094,51505],{"class":54},[37,90096,60910],{"class":82},[37,90098,1364],{"class":54},[37,90100,90101,90103,90105,90107],{"class":39,"line":1719},[37,90102,57354],{"class":82},[37,90104,51505],{"class":54},[37,90106,51660],{"class":82},[37,90108,1364],{"class":54},[37,90110,90111,90114,90116,90118,90120],{"class":39,"line":1725},[37,90112,90113],{"class":82},"      padding-top",[37,90115,51505],{"class":54},[37,90117,524],{"class":82},[37,90119,51560],{"class":50},[37,90121,1364],{"class":54},[37,90123,90124],{"class":39,"line":1746},[37,90125,2259],{"class":54},[37,90127,90128,90130,90132],{"class":39,"line":1751},[37,90129,52485],{"class":54},[37,90131,123],{"class":51368},[37,90133,51375],{"class":54},[37,90135,90136,90138,90140],{"class":39,"line":1765},[37,90137,51853],{"class":54},[37,90139,51402],{"class":51368},[37,90141,51375],{"class":54},[37,90143,90144],{"class":39,"line":1770},[37,90145,2472],{"emptyLinePlaceholder":131},[37,90147,90148,90150,90152],{"class":39,"line":1799},[37,90149,1113],{"class":54},[37,90151,51868],{"class":51368},[37,90153,51375],{"class":54},[37,90155,90156,90158,90160,90162,90164,90166,90168,90170],{"class":39,"line":1804},[37,90157,52212],{"class":54},[37,90159,51679],{"class":51368},[37,90161,53554],{"class":2035},[37,90163,70],{"class":54},[37,90165,53559],{"class":309},[37,90167,55382],{"class":54},[37,90169,51679],{"class":51368},[37,90171,51375],{"class":54},[37,90173,90174,90176,90178,90180,90182,90184,90186,90188],{"class":39,"line":1821},[37,90175,52212],{"class":54},[37,90177,51881],{"class":51368},[37,90179,55307],{"class":2035},[37,90181,70],{"class":54},[37,90183,88342],{"class":309},[37,90185,55382],{"class":54},[37,90187,51881],{"class":51368},[37,90189,51375],{"class":54},[37,90191,90192,90194,90196],{"class":39,"line":1826},[37,90193,52212],{"class":54},[37,90195,51881],{"class":51368},[37,90197,51375],{"class":54},[37,90199,90200,90202,90204,90206,90208,90210,90212,90215],{"class":39,"line":1831},[37,90201,11293],{"class":50},[37,90203,87001],{"class":82},[37,90205,13636],{"class":50},[37,90207,54464],{"class":54},[37,90209,54467],{"class":2035},[37,90211,208],{"class":54},[37,90213,90214],{"class":309},"'.box'",[37,90216,214],{"class":54},[37,90218,90219,90221,90223,90225],{"class":39,"line":1836},[37,90220,52287],{"class":50},[37,90222,9510],{"class":54},[37,90224,70],{"class":50},[37,90226,47401],{"class":82},[37,90228,90229,90231,90234],{"class":39,"line":1850},[37,90230,70152],{"class":50},[37,90232,90233],{"class":2035}," mouseMove",[37,90235,10925],{"class":54},[37,90237,90238,90241,90243,90245],{"class":39,"line":1855},[37,90239,90240],{"class":54},"      box.innerHTML ",[37,90242,70],{"class":50},[37,90244,3104],{"class":54},[37,90246,2774],{"class":50},[37,90248,90249],{"class":39,"line":2649},[37,90250,90251],{"class":43},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[37,90253,90254],{"class":39,"line":2663},[37,90255,2259],{"class":54},[37,90257,90258],{"class":39,"line":2671},[37,90259,90260],{"class":43},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[37,90262,90263],{"class":39,"line":2676},[37,90264,90265],{"class":43},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[37,90267,90268],{"class":39,"line":2682},[37,90269,90270],{"class":43},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[37,90272,90273,90276,90278,90280,90283,90286,90289,90292,90294],{"class":39,"line":2688},[37,90274,90275],{"class":54},"    box.",[37,90277,57881],{"class":2035},[37,90279,208],{"class":54},[37,90281,90282],{"class":309},"'mousemove'",[37,90284,90285],{"class":54},", _.",[37,90287,90288],{"class":2035},"debounce",[37,90290,90291],{"class":54},"(mouseMove, ",[37,90293,65142],{"class":82},[37,90295,30567],{"class":54},[37,90297,90298,90300,90302],{"class":39,"line":2693},[37,90299,52485],{"class":54},[37,90301,51881],{"class":51368},[37,90303,51375],{"class":54},[37,90305,90306,90308,90310],{"class":39,"line":8020},[37,90307,51853],{"class":54},[37,90309,51868],{"class":51368},[37,90311,51375],{"class":54},[37,90313,90314],{"class":39,"line":8044},[37,90315,2472],{"emptyLinePlaceholder":131},[37,90317,90318,90320,90322],{"class":39,"line":8049},[37,90319,51853],{"class":54},[37,90321,50703],{"class":51368},[37,90323,51375],{"class":54},[1210,90325,90326],{},[161,90327,90328],{},"手写一个防抖函数来处理",[14,90330,90331],{},"防抖的核心就是利用定时器来实现的：",[14,90333,90334],{},"①声明一个定时器变量",[14,90336,90337],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90339,90340],{},"③如果没有定时器则开启定时器，记得存到变量里面",[27,90342,90344],{"className":50701,"code":90343,"language":50703,"meta":32,"style":32},"\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",[34,90345,90346,90356,90370,90374,90382,90396,90416,90428,90436,90442,90452,90464,90476,90486,90498,90508,90518,90530,90534,90542,90550,90554,90562,90580,90598,90606,90624,90634,90642,90652,90656,90660,90664,90669,90674,90679,90684,90689,90694,90712,90719,90724,90732,90737,90750,90766,90776,90781,90785,90789,90809,90813,90818,90823,90828,90833,90841,90849,90853],{"__ignoreMap":32},[37,90347,90348,90350,90352,90354],{"class":39,"line":40},[37,90349,51365],{"class":54},[37,90351,51369],{"class":51368},[37,90353,51372],{"class":2035},[37,90355,51375],{"class":54},[37,90357,90358,90360,90362,90364,90366,90368],{"class":39,"line":47},[37,90359,1113],{"class":54},[37,90361,50703],{"class":51368},[37,90363,51384],{"class":2035},[37,90365,70],{"class":54},[37,90367,51389],{"class":309},[37,90369,51375],{"class":54},[37,90371,90372],{"class":39,"line":58},[37,90373,2472],{"emptyLinePlaceholder":131},[37,90375,90376,90378,90380],{"class":39,"line":64},[37,90377,1113],{"class":54},[37,90379,51402],{"class":51368},[37,90381,51375],{"class":54},[37,90383,90384,90386,90388,90390,90392,90394],{"class":39,"line":76},[37,90385,52212],{"class":54},[37,90387,51412],{"class":51368},[37,90389,51415],{"class":2035},[37,90391,70],{"class":54},[37,90393,51420],{"class":309},[37,90395,51375],{"class":54},[37,90397,90398,90400,90402,90404,90406,90408,90410,90412,90414],{"class":39,"line":92},[37,90399,52212],{"class":54},[37,90401,51412],{"class":51368},[37,90403,14992],{"class":2035},[37,90405,70],{"class":54},[37,90407,51459],{"class":309},[37,90409,51439],{"class":2035},[37,90411,70],{"class":54},[37,90413,51466],{"class":309},[37,90415,51375],{"class":54},[37,90417,90418,90420,90422,90424,90426],{"class":39,"line":97},[37,90419,52212],{"class":54},[37,90421,51475],{"class":51368},[37,90423,51478],{"class":54},[37,90425,51475],{"class":51368},[37,90427,51375],{"class":54},[37,90429,90430,90432,90434],{"class":39,"line":107},[37,90431,52212],{"class":54},[37,90433,123],{"class":51368},[37,90435,51375],{"class":54},[37,90437,90438,90440],{"class":39,"line":1390},[37,90439,54820],{"class":2035},[37,90441,15644],{"class":54},[37,90443,90444,90446,90448,90450],{"class":39,"line":1402},[37,90445,72664],{"class":82},[37,90447,51505],{"class":54},[37,90449,60573],{"class":82},[37,90451,1364],{"class":54},[37,90453,90454,90456,90458,90460,90462],{"class":39,"line":1684},[37,90455,54839],{"class":82},[37,90457,51505],{"class":54},[37,90459,1794],{"class":82},[37,90461,51560],{"class":50},[37,90463,1364],{"class":54},[37,90465,90466,90468,90470,90472,90474],{"class":39,"line":1689},[37,90467,54853],{"class":82},[37,90469,51505],{"class":54},[37,90471,1794],{"class":82},[37,90473,51560],{"class":50},[37,90475,1364],{"class":54},[37,90477,90478,90480,90482,90484],{"class":39,"line":1695},[37,90479,54952],{"class":82},[37,90481,51505],{"class":54},[37,90483,90074],{"class":82},[37,90485,1364],{"class":54},[37,90487,90488,90490,90492,90494,90496],{"class":39,"line":1700},[37,90489,54990],{"class":82},[37,90491,51505],{"class":54},[37,90493,1028],{"class":82},[37,90495,51560],{"class":50},[37,90497,1364],{"class":54},[37,90499,90500,90502,90504,90506],{"class":39,"line":1714},[37,90501,57484],{"class":82},[37,90503,51505],{"class":54},[37,90505,60910],{"class":82},[37,90507,1364],{"class":54},[37,90509,90510,90512,90514,90516],{"class":39,"line":1719},[37,90511,57354],{"class":82},[37,90513,51505],{"class":54},[37,90515,51660],{"class":82},[37,90517,1364],{"class":54},[37,90519,90520,90522,90524,90526,90528],{"class":39,"line":1725},[37,90521,90113],{"class":82},[37,90523,51505],{"class":54},[37,90525,524],{"class":82},[37,90527,51560],{"class":50},[37,90529,1364],{"class":54},[37,90531,90532],{"class":39,"line":1746},[37,90533,2259],{"class":54},[37,90535,90536,90538,90540],{"class":39,"line":1751},[37,90537,52485],{"class":54},[37,90539,123],{"class":51368},[37,90541,51375],{"class":54},[37,90543,90544,90546,90548],{"class":39,"line":1765},[37,90545,51853],{"class":54},[37,90547,51402],{"class":51368},[37,90549,51375],{"class":54},[37,90551,90552],{"class":39,"line":1770},[37,90553,2472],{"emptyLinePlaceholder":131},[37,90555,90556,90558,90560],{"class":39,"line":1799},[37,90557,1113],{"class":54},[37,90559,51868],{"class":51368},[37,90561,51375],{"class":54},[37,90563,90564,90566,90568,90570,90572,90574,90576,90578],{"class":39,"line":1804},[37,90565,52212],{"class":54},[37,90567,51679],{"class":51368},[37,90569,53554],{"class":2035},[37,90571,70],{"class":54},[37,90573,53559],{"class":309},[37,90575,55382],{"class":54},[37,90577,51679],{"class":51368},[37,90579,51375],{"class":54},[37,90581,90582,90584,90586,90588,90590,90592,90594,90596],{"class":39,"line":1821},[37,90583,52212],{"class":54},[37,90585,51881],{"class":51368},[37,90587,55307],{"class":2035},[37,90589,70],{"class":54},[37,90591,88342],{"class":309},[37,90593,55382],{"class":54},[37,90595,51881],{"class":51368},[37,90597,51375],{"class":54},[37,90599,90600,90602,90604],{"class":39,"line":1826},[37,90601,52212],{"class":54},[37,90603,51881],{"class":51368},[37,90605,51375],{"class":54},[37,90607,90608,90610,90612,90614,90616,90618,90620,90622],{"class":39,"line":1831},[37,90609,11293],{"class":50},[37,90611,87001],{"class":82},[37,90613,13636],{"class":50},[37,90615,54464],{"class":54},[37,90617,54467],{"class":2035},[37,90619,208],{"class":54},[37,90621,90214],{"class":309},[37,90623,214],{"class":54},[37,90625,90626,90628,90630,90632],{"class":39,"line":1836},[37,90627,52287],{"class":50},[37,90629,9510],{"class":54},[37,90631,70],{"class":50},[37,90633,47401],{"class":82},[37,90635,90636,90638,90640],{"class":39,"line":1850},[37,90637,70152],{"class":50},[37,90639,90233],{"class":2035},[37,90641,10925],{"class":54},[37,90643,90644,90646,90648,90650],{"class":39,"line":1855},[37,90645,90240],{"class":54},[37,90647,70],{"class":50},[37,90649,3104],{"class":54},[37,90651,2774],{"class":50},[37,90653,90654],{"class":39,"line":2649},[37,90655,90251],{"class":43},[37,90657,90658],{"class":39,"line":2663},[37,90659,2259],{"class":54},[37,90661,90662],{"class":39,"line":2671},[37,90663,90260],{"class":43},[37,90665,90666],{"class":39,"line":2676},[37,90667,90668],{"class":43},"    \u002F\u002F 手写防抖函数\n",[37,90670,90671],{"class":39,"line":2682},[37,90672,90673],{"class":43},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[37,90675,90676],{"class":39,"line":2688},[37,90677,90678],{"class":43},"    \u002F\u002F 1.声明定时器变量\n",[37,90680,90681],{"class":39,"line":2693},[37,90682,90683],{"class":43},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[37,90685,90686],{"class":39,"line":8020},[37,90687,90688],{"class":43},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[37,90690,90691],{"class":39,"line":8044},[37,90692,90693],{"class":43},"    \u002F\u002F 4.定时器里面写函数调用\n",[37,90695,90696,90698,90701,90703,90706,90708,90710],{"class":39,"line":8049},[37,90697,70152],{"class":50},[37,90699,90700],{"class":2035}," debounce",[37,90702,208],{"class":54},[37,90704,90705],{"class":5288},"fn",[37,90707,12507],{"class":54},[37,90709,923],{"class":5288},[37,90711,12514],{"class":54},[37,90713,90714,90716],{"class":39,"line":8055},[37,90715,79840],{"class":50},[37,90717,90718],{"class":54}," timer\n",[37,90720,90721],{"class":39,"line":8082},[37,90722,90723],{"class":43},"      \u002F\u002F return 返回一个匿名函数\n",[37,90725,90726,90728,90730],{"class":39,"line":8087},[37,90727,74050],{"class":50},[37,90729,58986],{"class":50},[37,90731,54520],{"class":54},[37,90733,90734],{"class":39,"line":8093},[37,90735,90736],{"class":43},"        \u002F\u002F 这里边写第二三四步\n",[37,90738,90739,90741,90744,90747],{"class":39,"line":8105},[37,90740,2569],{"class":50},[37,90742,90743],{"class":54}," (timer) ",[37,90745,90746],{"class":2035},"clearTimeout",[37,90748,90749],{"class":54},"(timer)\n",[37,90751,90752,90755,90757,90760,90762,90764],{"class":39,"line":8117},[37,90753,90754],{"class":54},"        timer ",[37,90756,70],{"class":50},[37,90758,90759],{"class":2035}," setTimeout",[37,90761,208],{"class":54},[37,90763,54517],{"class":50},[37,90765,54520],{"class":54},[37,90767,90768,90771,90773],{"class":39,"line":8129},[37,90769,90770],{"class":2035},"          fn",[37,90772,13122],{"class":54},[37,90774,90775],{"class":43},"\u002F\u002F加小括号调用fn }, t)\n",[37,90777,90778],{"class":39,"line":9788},[37,90779,90780],{"class":54},"        }, t)\n",[37,90782,90783],{"class":39,"line":9813},[37,90784,52466],{"class":54},[37,90786,90787],{"class":39,"line":9836},[37,90788,2259],{"class":54},[37,90790,90791,90793,90795,90797,90799,90801,90803,90805,90807],{"class":39,"line":9860},[37,90792,90275],{"class":54},[37,90794,57881],{"class":2035},[37,90796,208],{"class":54},[37,90798,90282],{"class":309},[37,90800,12507],{"class":54},[37,90802,90288],{"class":2035},[37,90804,90291],{"class":54},[37,90806,65142],{"class":82},[37,90808,30567],{"class":54},[37,90810,90811],{"class":39,"line":9865},[37,90812,2472],{"emptyLinePlaceholder":131},[37,90814,90815],{"class":39,"line":9870},[37,90816,90817],{"class":43},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[37,90819,90820],{"class":39,"line":9875},[37,90821,90822],{"class":43},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[37,90824,90825],{"class":39,"line":9884},[37,90826,90827],{"class":43},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[37,90829,90830],{"class":39,"line":9889},[37,90831,90832],{"class":43},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[37,90834,90835,90837,90839],{"class":39,"line":9895},[37,90836,52485],{"class":54},[37,90838,51881],{"class":51368},[37,90840,51375],{"class":54},[37,90842,90843,90845,90847],{"class":39,"line":9916},[37,90844,51853],{"class":54},[37,90846,51868],{"class":51368},[37,90848,51375],{"class":54},[37,90850,90851],{"class":39,"line":9922},[37,90852,2472],{"emptyLinePlaceholder":131},[37,90854,90855,90857,90859],{"class":39,"line":9936},[37,90856,51853],{"class":54},[37,90858,50703],{"class":51368},[37,90860,51375],{"class":54},[175,90862,90864],{"id":90863},"_4172-节流","4.17.2 节流",[14,90866,90867],{},[119,90868],{"alt":32,"src":90869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,90871,90872],{},[119,90873],{"alt":32,"src":90874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,90876,90877],{},[354,90878,90879],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,90881,90882],{},"实现方式：",[1210,90884,90885],{},[161,90886,90887],{},"lodash 提供的节流函数来处理",[14,90889,90890],{},"_.throttle(func,[wait=0],[options=])",[14,90892,90893],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[27,90895,90897],{"className":50701,"code":90896,"language":50703,"meta":32,"style":32},"\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",[34,90898,90899,90909,90923,90927,90935,90949,90969,90981,90989,90995,91005,91017,91029,91039,91051,91061,91071,91083,91087,91095,91103,91107,91115,91133,91151,91159,91177,91187,91195,91205,91209,91213,91217,91222,91227,91248,91256,91264,91268],{"__ignoreMap":32},[37,90900,90901,90903,90905,90907],{"class":39,"line":40},[37,90902,51365],{"class":54},[37,90904,51369],{"class":51368},[37,90906,51372],{"class":2035},[37,90908,51375],{"class":54},[37,90910,90911,90913,90915,90917,90919,90921],{"class":39,"line":47},[37,90912,1113],{"class":54},[37,90914,50703],{"class":51368},[37,90916,51384],{"class":2035},[37,90918,70],{"class":54},[37,90920,51389],{"class":309},[37,90922,51375],{"class":54},[37,90924,90925],{"class":39,"line":58},[37,90926,2472],{"emptyLinePlaceholder":131},[37,90928,90929,90931,90933],{"class":39,"line":64},[37,90930,1113],{"class":54},[37,90932,51402],{"class":51368},[37,90934,51375],{"class":54},[37,90936,90937,90939,90941,90943,90945,90947],{"class":39,"line":76},[37,90938,52212],{"class":54},[37,90940,51412],{"class":51368},[37,90942,51415],{"class":2035},[37,90944,70],{"class":54},[37,90946,51420],{"class":309},[37,90948,51375],{"class":54},[37,90950,90951,90953,90955,90957,90959,90961,90963,90965,90967],{"class":39,"line":92},[37,90952,52212],{"class":54},[37,90954,51412],{"class":51368},[37,90956,14992],{"class":2035},[37,90958,70],{"class":54},[37,90960,51459],{"class":309},[37,90962,51439],{"class":2035},[37,90964,70],{"class":54},[37,90966,51466],{"class":309},[37,90968,51375],{"class":54},[37,90970,90971,90973,90975,90977,90979],{"class":39,"line":97},[37,90972,52212],{"class":54},[37,90974,51475],{"class":51368},[37,90976,51478],{"class":54},[37,90978,51475],{"class":51368},[37,90980,51375],{"class":54},[37,90982,90983,90985,90987],{"class":39,"line":107},[37,90984,52212],{"class":54},[37,90986,123],{"class":51368},[37,90988,51375],{"class":54},[37,90990,90991,90993],{"class":39,"line":1390},[37,90992,54820],{"class":2035},[37,90994,15644],{"class":54},[37,90996,90997,90999,91001,91003],{"class":39,"line":1402},[37,90998,72664],{"class":82},[37,91000,51505],{"class":54},[37,91002,60573],{"class":82},[37,91004,1364],{"class":54},[37,91006,91007,91009,91011,91013,91015],{"class":39,"line":1684},[37,91008,54839],{"class":82},[37,91010,51505],{"class":54},[37,91012,1794],{"class":82},[37,91014,51560],{"class":50},[37,91016,1364],{"class":54},[37,91018,91019,91021,91023,91025,91027],{"class":39,"line":1689},[37,91020,54853],{"class":82},[37,91022,51505],{"class":54},[37,91024,1794],{"class":82},[37,91026,51560],{"class":50},[37,91028,1364],{"class":54},[37,91030,91031,91033,91035,91037],{"class":39,"line":1695},[37,91032,54952],{"class":82},[37,91034,51505],{"class":54},[37,91036,90074],{"class":82},[37,91038,1364],{"class":54},[37,91040,91041,91043,91045,91047,91049],{"class":39,"line":1700},[37,91042,54990],{"class":82},[37,91044,51505],{"class":54},[37,91046,1028],{"class":82},[37,91048,51560],{"class":50},[37,91050,1364],{"class":54},[37,91052,91053,91055,91057,91059],{"class":39,"line":1714},[37,91054,57484],{"class":82},[37,91056,51505],{"class":54},[37,91058,60910],{"class":82},[37,91060,1364],{"class":54},[37,91062,91063,91065,91067,91069],{"class":39,"line":1719},[37,91064,57354],{"class":82},[37,91066,51505],{"class":54},[37,91068,51660],{"class":82},[37,91070,1364],{"class":54},[37,91072,91073,91075,91077,91079,91081],{"class":39,"line":1725},[37,91074,90113],{"class":82},[37,91076,51505],{"class":54},[37,91078,524],{"class":82},[37,91080,51560],{"class":50},[37,91082,1364],{"class":54},[37,91084,91085],{"class":39,"line":1746},[37,91086,2259],{"class":54},[37,91088,91089,91091,91093],{"class":39,"line":1751},[37,91090,52485],{"class":54},[37,91092,123],{"class":51368},[37,91094,51375],{"class":54},[37,91096,91097,91099,91101],{"class":39,"line":1765},[37,91098,51853],{"class":54},[37,91100,51402],{"class":51368},[37,91102,51375],{"class":54},[37,91104,91105],{"class":39,"line":1770},[37,91106,2472],{"emptyLinePlaceholder":131},[37,91108,91109,91111,91113],{"class":39,"line":1799},[37,91110,1113],{"class":54},[37,91112,51868],{"class":51368},[37,91114,51375],{"class":54},[37,91116,91117,91119,91121,91123,91125,91127,91129,91131],{"class":39,"line":1804},[37,91118,52212],{"class":54},[37,91120,51679],{"class":51368},[37,91122,53554],{"class":2035},[37,91124,70],{"class":54},[37,91126,53559],{"class":309},[37,91128,55382],{"class":54},[37,91130,51679],{"class":51368},[37,91132,51375],{"class":54},[37,91134,91135,91137,91139,91141,91143,91145,91147,91149],{"class":39,"line":1821},[37,91136,52212],{"class":54},[37,91138,51881],{"class":51368},[37,91140,55307],{"class":2035},[37,91142,70],{"class":54},[37,91144,88342],{"class":309},[37,91146,55382],{"class":54},[37,91148,51881],{"class":51368},[37,91150,51375],{"class":54},[37,91152,91153,91155,91157],{"class":39,"line":1826},[37,91154,52212],{"class":54},[37,91156,51881],{"class":51368},[37,91158,51375],{"class":54},[37,91160,91161,91163,91165,91167,91169,91171,91173,91175],{"class":39,"line":1831},[37,91162,11293],{"class":50},[37,91164,87001],{"class":82},[37,91166,13636],{"class":50},[37,91168,54464],{"class":54},[37,91170,54467],{"class":2035},[37,91172,208],{"class":54},[37,91174,90214],{"class":309},[37,91176,214],{"class":54},[37,91178,91179,91181,91183,91185],{"class":39,"line":1836},[37,91180,52287],{"class":50},[37,91182,9510],{"class":54},[37,91184,70],{"class":50},[37,91186,47401],{"class":82},[37,91188,91189,91191,91193],{"class":39,"line":1850},[37,91190,70152],{"class":50},[37,91192,90233],{"class":2035},[37,91194,10925],{"class":54},[37,91196,91197,91199,91201,91203],{"class":39,"line":1855},[37,91198,90240],{"class":54},[37,91200,70],{"class":50},[37,91202,3104],{"class":54},[37,91204,2774],{"class":50},[37,91206,91207],{"class":39,"line":2649},[37,91208,90251],{"class":43},[37,91210,91211],{"class":39,"line":2663},[37,91212,2259],{"class":54},[37,91214,91215],{"class":39,"line":2671},[37,91216,90260],{"class":43},[37,91218,91219],{"class":39,"line":2676},[37,91220,91221],{"class":43},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[37,91223,91224],{"class":39,"line":2682},[37,91225,91226],{"class":43},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[37,91228,91229,91231,91233,91235,91237,91239,91242,91244,91246],{"class":39,"line":2688},[37,91230,90275],{"class":54},[37,91232,57881],{"class":2035},[37,91234,208],{"class":54},[37,91236,90282],{"class":309},[37,91238,90285],{"class":54},[37,91240,91241],{"class":2035},"throttle",[37,91243,90291],{"class":54},[37,91245,65142],{"class":82},[37,91247,30567],{"class":54},[37,91249,91250,91252,91254],{"class":39,"line":2693},[37,91251,52485],{"class":54},[37,91253,51881],{"class":51368},[37,91255,51375],{"class":54},[37,91257,91258,91260,91262],{"class":39,"line":8020},[37,91259,51853],{"class":54},[37,91261,51868],{"class":51368},[37,91263,51375],{"class":54},[37,91265,91266],{"class":39,"line":8044},[37,91267,2472],{"emptyLinePlaceholder":131},[37,91269,91270,91272,91274],{"class":39,"line":8049},[37,91271,51853],{"class":54},[37,91273,50703],{"class":51368},[37,91275,51375],{"class":54},[1210,91277,91278],{},[161,91279,91280],{},"手写一个节流函数来处理",[14,91282,71020],{},[14,91284,90334],{},[14,91286,91287],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91289,91290],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[27,91292,91294],{"className":50701,"code":91293,"language":50703,"meta":32,"style":32},"\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",[34,91295,91296,91306,91320,91324,91332,91346,91366,91378,91386,91392,91402,91414,91426,91436,91448,91458,91468,91480,91484,91492,91500,91504,91512,91530,91548,91556,91574,91584,91592,91602,91606,91610,91614,91619,91624,91629,91634,91639,91644,91661,91667,91675,91686,91701,91708,91713,91718,91728,91733,91738,91743,91747,91751,91755,91775,91783,91791,91795],{"__ignoreMap":32},[37,91297,91298,91300,91302,91304],{"class":39,"line":40},[37,91299,51365],{"class":54},[37,91301,51369],{"class":51368},[37,91303,51372],{"class":2035},[37,91305,51375],{"class":54},[37,91307,91308,91310,91312,91314,91316,91318],{"class":39,"line":47},[37,91309,1113],{"class":54},[37,91311,50703],{"class":51368},[37,91313,51384],{"class":2035},[37,91315,70],{"class":54},[37,91317,51389],{"class":309},[37,91319,51375],{"class":54},[37,91321,91322],{"class":39,"line":58},[37,91323,2472],{"emptyLinePlaceholder":131},[37,91325,91326,91328,91330],{"class":39,"line":64},[37,91327,1113],{"class":54},[37,91329,51402],{"class":51368},[37,91331,51375],{"class":54},[37,91333,91334,91336,91338,91340,91342,91344],{"class":39,"line":76},[37,91335,52212],{"class":54},[37,91337,51412],{"class":51368},[37,91339,51415],{"class":2035},[37,91341,70],{"class":54},[37,91343,51420],{"class":309},[37,91345,51375],{"class":54},[37,91347,91348,91350,91352,91354,91356,91358,91360,91362,91364],{"class":39,"line":92},[37,91349,52212],{"class":54},[37,91351,51412],{"class":51368},[37,91353,14992],{"class":2035},[37,91355,70],{"class":54},[37,91357,51459],{"class":309},[37,91359,51439],{"class":2035},[37,91361,70],{"class":54},[37,91363,51466],{"class":309},[37,91365,51375],{"class":54},[37,91367,91368,91370,91372,91374,91376],{"class":39,"line":97},[37,91369,52212],{"class":54},[37,91371,51475],{"class":51368},[37,91373,51478],{"class":54},[37,91375,51475],{"class":51368},[37,91377,51375],{"class":54},[37,91379,91380,91382,91384],{"class":39,"line":107},[37,91381,52212],{"class":54},[37,91383,123],{"class":51368},[37,91385,51375],{"class":54},[37,91387,91388,91390],{"class":39,"line":1390},[37,91389,54820],{"class":2035},[37,91391,15644],{"class":54},[37,91393,91394,91396,91398,91400],{"class":39,"line":1402},[37,91395,72664],{"class":82},[37,91397,51505],{"class":54},[37,91399,60573],{"class":82},[37,91401,1364],{"class":54},[37,91403,91404,91406,91408,91410,91412],{"class":39,"line":1684},[37,91405,54839],{"class":82},[37,91407,51505],{"class":54},[37,91409,1794],{"class":82},[37,91411,51560],{"class":50},[37,91413,1364],{"class":54},[37,91415,91416,91418,91420,91422,91424],{"class":39,"line":1689},[37,91417,54853],{"class":82},[37,91419,51505],{"class":54},[37,91421,1794],{"class":82},[37,91423,51560],{"class":50},[37,91425,1364],{"class":54},[37,91427,91428,91430,91432,91434],{"class":39,"line":1695},[37,91429,54952],{"class":82},[37,91431,51505],{"class":54},[37,91433,90074],{"class":82},[37,91435,1364],{"class":54},[37,91437,91438,91440,91442,91444,91446],{"class":39,"line":1700},[37,91439,54990],{"class":82},[37,91441,51505],{"class":54},[37,91443,1028],{"class":82},[37,91445,51560],{"class":50},[37,91447,1364],{"class":54},[37,91449,91450,91452,91454,91456],{"class":39,"line":1714},[37,91451,57484],{"class":82},[37,91453,51505],{"class":54},[37,91455,60910],{"class":82},[37,91457,1364],{"class":54},[37,91459,91460,91462,91464,91466],{"class":39,"line":1719},[37,91461,57354],{"class":82},[37,91463,51505],{"class":54},[37,91465,51660],{"class":82},[37,91467,1364],{"class":54},[37,91469,91470,91472,91474,91476,91478],{"class":39,"line":1725},[37,91471,90113],{"class":82},[37,91473,51505],{"class":54},[37,91475,524],{"class":82},[37,91477,51560],{"class":50},[37,91479,1364],{"class":54},[37,91481,91482],{"class":39,"line":1746},[37,91483,2259],{"class":54},[37,91485,91486,91488,91490],{"class":39,"line":1751},[37,91487,52485],{"class":54},[37,91489,123],{"class":51368},[37,91491,51375],{"class":54},[37,91493,91494,91496,91498],{"class":39,"line":1765},[37,91495,51853],{"class":54},[37,91497,51402],{"class":51368},[37,91499,51375],{"class":54},[37,91501,91502],{"class":39,"line":1770},[37,91503,2472],{"emptyLinePlaceholder":131},[37,91505,91506,91508,91510],{"class":39,"line":1799},[37,91507,1113],{"class":54},[37,91509,51868],{"class":51368},[37,91511,51375],{"class":54},[37,91513,91514,91516,91518,91520,91522,91524,91526,91528],{"class":39,"line":1804},[37,91515,52212],{"class":54},[37,91517,51679],{"class":51368},[37,91519,53554],{"class":2035},[37,91521,70],{"class":54},[37,91523,53559],{"class":309},[37,91525,55382],{"class":54},[37,91527,51679],{"class":51368},[37,91529,51375],{"class":54},[37,91531,91532,91534,91536,91538,91540,91542,91544,91546],{"class":39,"line":1821},[37,91533,52212],{"class":54},[37,91535,51881],{"class":51368},[37,91537,55307],{"class":2035},[37,91539,70],{"class":54},[37,91541,88342],{"class":309},[37,91543,55382],{"class":54},[37,91545,51881],{"class":51368},[37,91547,51375],{"class":54},[37,91549,91550,91552,91554],{"class":39,"line":1826},[37,91551,52212],{"class":54},[37,91553,51881],{"class":51368},[37,91555,51375],{"class":54},[37,91557,91558,91560,91562,91564,91566,91568,91570,91572],{"class":39,"line":1831},[37,91559,11293],{"class":50},[37,91561,87001],{"class":82},[37,91563,13636],{"class":50},[37,91565,54464],{"class":54},[37,91567,54467],{"class":2035},[37,91569,208],{"class":54},[37,91571,90214],{"class":309},[37,91573,214],{"class":54},[37,91575,91576,91578,91580,91582],{"class":39,"line":1836},[37,91577,52287],{"class":50},[37,91579,9510],{"class":54},[37,91581,70],{"class":50},[37,91583,47401],{"class":82},[37,91585,91586,91588,91590],{"class":39,"line":1850},[37,91587,70152],{"class":50},[37,91589,90233],{"class":2035},[37,91591,10925],{"class":54},[37,91593,91594,91596,91598,91600],{"class":39,"line":1855},[37,91595,90240],{"class":54},[37,91597,70],{"class":50},[37,91599,3104],{"class":54},[37,91601,2774],{"class":50},[37,91603,91604],{"class":39,"line":2649},[37,91605,90251],{"class":43},[37,91607,91608],{"class":39,"line":2663},[37,91609,2259],{"class":54},[37,91611,91612],{"class":39,"line":2671},[37,91613,90260],{"class":43},[37,91615,91616],{"class":39,"line":2676},[37,91617,91618],{"class":43},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[37,91620,91621],{"class":39,"line":2682},[37,91622,91623],{"class":43},"    \u002F\u002F 1.声明一个定时器变量\n",[37,91625,91626],{"class":39,"line":2688},[37,91627,91628],{"class":43},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[37,91630,91631],{"class":39,"line":2693},[37,91632,91633],{"class":43},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[37,91635,91636],{"class":39,"line":8020},[37,91637,91638],{"class":43},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[37,91640,91641],{"class":39,"line":8044},[37,91642,91643],{"class":43},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[37,91645,91646,91648,91651,91653,91655,91657,91659],{"class":39,"line":8049},[37,91647,70152],{"class":50},[37,91649,91650],{"class":2035}," throttle",[37,91652,208],{"class":54},[37,91654,90705],{"class":5288},[37,91656,12507],{"class":54},[37,91658,923],{"class":5288},[37,91660,12514],{"class":54},[37,91662,91663,91665],{"class":39,"line":8055},[37,91664,79840],{"class":50},[37,91666,90718],{"class":54},[37,91668,91669,91671,91673],{"class":39,"line":8082},[37,91670,74050],{"class":50},[37,91672,58986],{"class":50},[37,91674,54520],{"class":54},[37,91676,91677,91679,91681,91683],{"class":39,"line":8087},[37,91678,2569],{"class":50},[37,91680,1730],{"class":54},[37,91682,431],{"class":50},[37,91684,91685],{"class":54},"timer) {\n",[37,91687,91688,91691,91693,91695,91697,91699],{"class":39,"line":8093},[37,91689,91690],{"class":54},"          timer ",[37,91692,70],{"class":50},[37,91694,90759],{"class":2035},[37,91696,208],{"class":54},[37,91698,54517],{"class":50},[37,91700,54520],{"class":54},[37,91702,91703,91706],{"class":39,"line":8105},[37,91704,91705],{"class":2035},"            fn",[37,91707,2048],{"class":54},[37,91709,91710],{"class":39,"line":8117},[37,91711,91712],{"class":43},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[37,91714,91715],{"class":39,"line":8129},[37,91716,91717],{"class":43},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[37,91719,91720,91723,91725],{"class":39,"line":9788},[37,91721,91722],{"class":54},"            timer ",[37,91724,70],{"class":50},[37,91726,91727],{"class":82}," null\n",[37,91729,91730],{"class":39,"line":9813},[37,91731,91732],{"class":43},"            \u002F\u002F 不能用clearTimeout(timer)\n",[37,91734,91735],{"class":39,"line":9836},[37,91736,91737],{"class":43},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[37,91739,91740],{"class":39,"line":9860},[37,91741,91742],{"class":54},"          }, t)\n",[37,91744,91745],{"class":39,"line":9865},[37,91746,2601],{"class":54},[37,91748,91749],{"class":39,"line":9870},[37,91750,52466],{"class":54},[37,91752,91753],{"class":39,"line":9875},[37,91754,2259],{"class":54},[37,91756,91757,91759,91761,91763,91765,91767,91769,91771,91773],{"class":39,"line":9884},[37,91758,90275],{"class":54},[37,91760,57881],{"class":2035},[37,91762,208],{"class":54},[37,91764,90282],{"class":309},[37,91766,12507],{"class":54},[37,91768,91241],{"class":2035},[37,91770,90291],{"class":54},[37,91772,65142],{"class":82},[37,91774,30567],{"class":54},[37,91776,91777,91779,91781],{"class":39,"line":9889},[37,91778,52485],{"class":54},[37,91780,51881],{"class":51368},[37,91782,51375],{"class":54},[37,91784,91785,91787,91789],{"class":39,"line":9895},[37,91786,51853],{"class":54},[37,91788,51868],{"class":51368},[37,91790,51375],{"class":54},[37,91792,91793],{"class":39,"line":9916},[37,91794,2472],{"emptyLinePlaceholder":131},[37,91796,91797,91799,91801],{"class":39,"line":9922},[37,91798,51853],{"class":54},[37,91800,50703],{"class":51368},[37,91802,51375],{"class":54},[175,91804,91806],{"id":91805},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[27,91808,91810],{"className":53135,"code":91809,"language":53137,"meta":32,"style":32},"\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",[34,91811,91812,91820,91828,91833,91838,91843,91848,91852,91860],{"__ignoreMap":32},[37,91813,91814,91816,91818],{"class":39,"line":40},[37,91815,1113],{"class":54},[37,91817,51868],{"class":51368},[37,91819,51375],{"class":54},[37,91821,91822,91824,91826],{"class":39,"line":47},[37,91823,52212],{"class":54},[37,91825,51881],{"class":51368},[37,91827,51375],{"class":54},[37,91829,91830],{"class":39,"line":58},[37,91831,91832],{"class":54},"    let timer = null\n",[37,91834,91835],{"class":39,"line":64},[37,91836,91837],{"class":54},"    timer = setTimeout(() => {\n",[37,91839,91840],{"class":39,"line":76},[37,91841,91842],{"class":54},"      clearTimeout(timer)\n",[37,91844,91845],{"class":39,"line":92},[37,91846,91847],{"class":54},"      console.log(timer)\n",[37,91849,91850],{"class":39,"line":97},[37,91851,60293],{"class":54},[37,91853,91854,91856,91858],{"class":39,"line":107},[37,91855,52485],{"class":54},[37,91857,51881],{"class":51368},[37,91859,51375],{"class":54},[37,91861,91862,91864,91866],{"class":39,"line":1390},[37,91863,51853],{"class":54},[37,91865,51868],{"class":51368},[37,91867,51375],{"class":54},[14,91869,91870],{},"输出为1",[14,91872,91873],{},"在开启的定时器里边写清除定时器",[14,91875,91876],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[175,91878,91880],{"id":91879},"_4174-节流综合案例","4.17.4 节流综合案例",[14,91882,91883],{},"页面打开，可以记录上一次的视频播放位置",[14,91885,91886],{},[119,91887],{"alt":32,"src":91888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,91890,91891],{},[119,91892],{"alt":32,"src":91893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[27,91895,91897],{"className":50701,"code":91896,"language":50703,"meta":32,"style":32},"\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",[34,91898,91899,91909,91923,91927,91935,91949,91969,91989,92011,92024,92032,92038,92048,92058,92068,92072,92076,92083,92096,92108,92112,92116,92126,92138,92152,92156,92160,92167,92177,92190,92202,92212,92222,92238,92250,92254,92258,92266,92276,92288,92298,92308,92318,92322,92326,92336,92347,92351,92359,92367,92371,92379,92394,92409,92424,92445,92453,92461,92476,92498,92506,92521,92547,92573,92599,92607,92615,92634,92642,92647,92666,92671,92689,92694,92699,92707,92712,92726,92734,92739,92756,92760,92765,92787,92791,92799,92807,92811],{"__ignoreMap":32},[37,91900,91901,91903,91905,91907],{"class":39,"line":40},[37,91902,51365],{"class":54},[37,91904,51369],{"class":51368},[37,91906,51372],{"class":2035},[37,91908,51375],{"class":54},[37,91910,91911,91913,91915,91917,91919,91921],{"class":39,"line":47},[37,91912,1113],{"class":54},[37,91914,50703],{"class":51368},[37,91916,51384],{"class":2035},[37,91918,70],{"class":54},[37,91920,51389],{"class":309},[37,91922,51375],{"class":54},[37,91924,91925],{"class":39,"line":58},[37,91926,2472],{"emptyLinePlaceholder":131},[37,91928,91929,91931,91933],{"class":39,"line":64},[37,91930,1113],{"class":54},[37,91932,51402],{"class":51368},[37,91934,51375],{"class":54},[37,91936,91937,91939,91941,91943,91945,91947],{"class":39,"line":76},[37,91938,52212],{"class":54},[37,91940,51412],{"class":51368},[37,91942,51415],{"class":2035},[37,91944,70],{"class":54},[37,91946,51420],{"class":309},[37,91948,59195],{"class":54},[37,91950,91951,91953,91955,91957,91959,91961,91963,91965,91967],{"class":39,"line":92},[37,91952,52212],{"class":54},[37,91954,51412],{"class":51368},[37,91956,51431],{"class":2035},[37,91958,70],{"class":54},[37,91960,51436],{"class":309},[37,91962,51439],{"class":2035},[37,91964,70],{"class":54},[37,91966,51444],{"class":309},[37,91968,59195],{"class":54},[37,91970,91971,91973,91975,91977,91979,91981,91983,91985,91987],{"class":39,"line":97},[37,91972,52212],{"class":54},[37,91974,51412],{"class":51368},[37,91976,14992],{"class":2035},[37,91978,70],{"class":54},[37,91980,51459],{"class":309},[37,91982,51439],{"class":2035},[37,91984,70],{"class":54},[37,91986,51466],{"class":309},[37,91988,59195],{"class":54},[37,91990,91991,91993,91995,91997,91999,92002,92004,92006,92009],{"class":39,"line":107},[37,91992,52212],{"class":54},[37,91994,51412],{"class":51368},[37,91996,14992],{"class":2035},[37,91998,70],{"class":54},[37,92000,92001],{"class":309},"\"referrer\"",[37,92003,51439],{"class":2035},[37,92005,70],{"class":54},[37,92007,92008],{"class":309},"\"never\"",[37,92010,59195],{"class":54},[37,92012,92013,92015,92017,92020,92022],{"class":39,"line":1390},[37,92014,52212],{"class":54},[37,92016,51475],{"class":51368},[37,92018,92019],{"class":54},">综合案例\u003C\u002F",[37,92021,51475],{"class":51368},[37,92023,51375],{"class":54},[37,92025,92026,92028,92030],{"class":39,"line":1402},[37,92027,52212],{"class":54},[37,92029,123],{"class":51368},[37,92031,51375],{"class":54},[37,92033,92034,92036],{"class":39,"line":1684},[37,92035,6475],{"class":51368},[37,92037,15644],{"class":54},[37,92039,92040,92042,92044,92046],{"class":39,"line":1689},[37,92041,54763],{"class":82},[37,92043,51505],{"class":54},[37,92045,396],{"class":82},[37,92047,1364],{"class":54},[37,92049,92050,92052,92054,92056],{"class":39,"line":1695},[37,92051,54774],{"class":82},[37,92053,51505],{"class":54},[37,92055,396],{"class":82},[37,92057,1364],{"class":54},[37,92059,92060,92062,92064,92066],{"class":39,"line":1700},[37,92061,72664],{"class":82},[37,92063,51505],{"class":54},[37,92065,60573],{"class":82},[37,92067,1364],{"class":54},[37,92069,92070],{"class":39,"line":1714},[37,92071,2259],{"class":54},[37,92073,92074],{"class":39,"line":1719},[37,92075,2472],{"emptyLinePlaceholder":131},[37,92077,92078,92081],{"class":39,"line":1725},[37,92079,92080],{"class":2035},"    .container",[37,92082,15644],{"class":54},[37,92084,92085,92087,92089,92092,92094],{"class":39,"line":1746},[37,92086,54839],{"class":82},[37,92088,51505],{"class":54},[37,92090,92091],{"class":82},"1200",[37,92093,51560],{"class":50},[37,92095,1364],{"class":54},[37,92097,92098,92100,92102,92104,92106],{"class":39,"line":1751},[37,92099,54774],{"class":82},[37,92101,51505],{"class":54},[37,92103,396],{"class":82},[37,92105,51624],{"class":82},[37,92107,1364],{"class":54},[37,92109,92110],{"class":39,"line":1765},[37,92111,2259],{"class":54},[37,92113,92114],{"class":39,"line":1770},[37,92115,2472],{"emptyLinePlaceholder":131},[37,92117,92118,92121,92124],{"class":39,"line":1799},[37,92119,92120],{"class":2035},"    .video",[37,92122,92123],{"class":51368}," video",[37,92125,15644],{"class":54},[37,92127,92128,92130,92132,92134,92136],{"class":39,"line":1804},[37,92129,54839],{"class":82},[37,92131,51505],{"class":54},[37,92133,516],{"class":82},[37,92135,533],{"class":50},[37,92137,1364],{"class":54},[37,92139,92140,92142,92144,92146,92148,92150],{"class":39,"line":1821},[37,92141,54763],{"class":82},[37,92143,51505],{"class":54},[37,92145,903],{"class":82},[37,92147,51560],{"class":50},[37,92149,4165],{"class":82},[37,92151,1364],{"class":54},[37,92153,92154],{"class":39,"line":1826},[37,92155,2259],{"class":54},[37,92157,92158],{"class":39,"line":1831},[37,92159,2472],{"emptyLinePlaceholder":131},[37,92161,92162,92165],{"class":39,"line":1836},[37,92163,92164],{"class":2035},"    .elevator",[37,92166,15644],{"class":54},[37,92168,92169,92171,92173,92175],{"class":39,"line":1850},[37,92170,54827],{"class":82},[37,92172,51505],{"class":54},[37,92174,86301],{"class":82},[37,92176,1364],{"class":54},[37,92178,92179,92181,92183,92186,92188],{"class":39,"line":1855},[37,92180,55015],{"class":82},[37,92182,51505],{"class":54},[37,92184,92185],{"class":82},"280",[37,92187,51560],{"class":50},[37,92189,1364],{"class":54},[37,92191,92192,92194,92196,92198,92200],{"class":39,"line":2649},[37,92193,86495],{"class":82},[37,92195,51505],{"class":54},[37,92197,903],{"class":82},[37,92199,51560],{"class":50},[37,92201,1364],{"class":54},[37,92203,92204,92206,92208,92210],{"class":39,"line":2663},[37,92205,86308],{"class":82},[37,92207,51505],{"class":54},[37,92209,86313],{"class":82},[37,92211,1364],{"class":54},[37,92213,92214,92216,92218,92220],{"class":39,"line":2671},[37,92215,61789],{"class":82},[37,92217,51505],{"class":54},[37,92219,60910],{"class":82},[37,92221,1364],{"class":54},[37,92223,92224,92226,92228,92230,92232,92234,92236],{"class":39,"line":2676},[37,92225,62045],{"class":82},[37,92227,51505],{"class":54},[37,92229,422],{"class":82},[37,92231,51560],{"class":50},[37,92233,51589],{"class":82},[37,92235,62312],{"class":82},[37,92237,1364],{"class":54},[37,92239,92240,92242,92244,92246,92248],{"class":39,"line":2682},[37,92241,54839],{"class":82},[37,92243,51505],{"class":54},[37,92245,1110],{"class":82},[37,92247,51560],{"class":50},[37,92249,1364],{"class":54},[37,92251,92252],{"class":39,"line":2688},[37,92253,2259],{"class":54},[37,92255,92256],{"class":39,"line":2693},[37,92257,2472],{"emptyLinePlaceholder":131},[37,92259,92260,92262,92264],{"class":39,"line":8020},[37,92261,92164],{"class":2035},[37,92263,1471],{"class":51368},[37,92265,15644],{"class":54},[37,92267,92268,92270,92272,92274],{"class":39,"line":8044},[37,92269,55077],{"class":82},[37,92271,51505],{"class":54},[37,92273,60937],{"class":82},[37,92275,1364],{"class":54},[37,92277,92278,92280,92282,92284,92286],{"class":39,"line":8049},[37,92279,54763],{"class":82},[37,92281,51505],{"class":54},[37,92283,650],{"class":82},[37,92285,51560],{"class":50},[37,92287,1364],{"class":54},[37,92289,92290,92292,92294,92296],{"class":39,"line":8055},[37,92291,64038],{"class":82},[37,92293,51505],{"class":54},[37,92295,54805],{"class":82},[37,92297,1364],{"class":54},[37,92299,92300,92302,92304,92306],{"class":39,"line":8082},[37,92301,57354],{"class":82},[37,92303,51505],{"class":54},[37,92305,51660],{"class":82},[37,92307,1364],{"class":54},[37,92309,92310,92312,92314,92316],{"class":39,"line":8087},[37,92311,57484],{"class":82},[37,92313,51505],{"class":54},[37,92315,62138],{"class":82},[37,92317,1364],{"class":54},[37,92319,92320],{"class":39,"line":8093},[37,92321,2259],{"class":54},[37,92323,92324],{"class":39,"line":8105},[37,92325,2472],{"emptyLinePlaceholder":131},[37,92327,92328,92330,92332,92334],{"class":39,"line":8117},[37,92329,92164],{"class":2035},[37,92331,1471],{"class":51368},[37,92333,64092],{"class":2035},[37,92335,15644],{"class":54},[37,92337,92338,92340,92342,92345],{"class":39,"line":8129},[37,92339,57484],{"class":82},[37,92341,51505],{"class":54},[37,92343,92344],{"class":82},"#1286ff",[37,92346,1364],{"class":54},[37,92348,92349],{"class":39,"line":9788},[37,92350,2259],{"class":54},[37,92352,92353,92355,92357],{"class":39,"line":9813},[37,92354,52485],{"class":54},[37,92356,123],{"class":51368},[37,92358,51375],{"class":54},[37,92360,92361,92363,92365],{"class":39,"line":9836},[37,92362,51853],{"class":54},[37,92364,51402],{"class":51368},[37,92366,51375],{"class":54},[37,92368,92369],{"class":39,"line":9860},[37,92370,2472],{"emptyLinePlaceholder":131},[37,92372,92373,92375,92377],{"class":39,"line":9865},[37,92374,1113],{"class":54},[37,92376,51868],{"class":51368},[37,92378,51375],{"class":54},[37,92380,92381,92383,92385,92387,92389,92392],{"class":39,"line":9870},[37,92382,52212],{"class":54},[37,92384,51679],{"class":51368},[37,92386,53554],{"class":2035},[37,92388,70],{"class":54},[37,92390,92391],{"class":309},"\"container\"",[37,92393,51375],{"class":54},[37,92395,92396,92398,92400,92402,92404,92407],{"class":39,"line":9875},[37,92397,51409],{"class":54},[37,92399,51679],{"class":51368},[37,92401,53554],{"class":2035},[37,92403,70],{"class":54},[37,92405,92406],{"class":309},"\"header\"",[37,92408,51375],{"class":54},[37,92410,92411,92413,92415,92417,92419,92422],{"class":39,"line":9884},[37,92412,55302],{"class":54},[37,92414,443],{"class":51368},[37,92416,61125],{"class":2035},[37,92418,70],{"class":54},[37,92420,92421],{"class":309},"\"http:\u002F\u002Fpip.itcast.cn\"",[37,92423,51375],{"class":54},[37,92425,92426,92428,92430,92432,92434,92437,92439,92441,92443],{"class":39,"line":9889},[37,92427,55370],{"class":54},[37,92429,119],{"class":51368},[37,92431,55307],{"class":2035},[37,92433,70],{"class":54},[37,92435,92436],{"class":309},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[37,92438,55315],{"class":2035},[37,92440,70],{"class":54},[37,92442,7724],{"class":309},[37,92444,59195],{"class":54},[37,92446,92447,92449,92451],{"class":39,"line":9895},[37,92448,55475],{"class":54},[37,92450,443],{"class":51368},[37,92452,51375],{"class":54},[37,92454,92455,92457,92459],{"class":39,"line":9916},[37,92456,51844],{"class":54},[37,92458,51679],{"class":51368},[37,92460,51375],{"class":54},[37,92462,92463,92465,92467,92469,92471,92474],{"class":39,"line":9922},[37,92464,51409],{"class":54},[37,92466,51679],{"class":51368},[37,92468,53554],{"class":2035},[37,92470,70],{"class":54},[37,92472,92473],{"class":309},"\"video\"",[37,92475,51375],{"class":54},[37,92477,92478,92480,92482,92484,92486,92489,92492,92494,92496],{"class":39,"line":9936},[37,92479,55302],{"class":54},[37,92481,28256],{"class":51368},[37,92483,55307],{"class":2035},[37,92485,70],{"class":54},[37,92487,92488],{"class":309},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[37,92490,92491],{"class":2035}," controls",[37,92493,55382],{"class":54},[37,92495,28256],{"class":51368},[37,92497,51375],{"class":54},[37,92499,92500,92502,92504],{"class":39,"line":9942},[37,92501,51844],{"class":54},[37,92503,51679],{"class":51368},[37,92505,51375],{"class":54},[37,92507,92508,92510,92512,92514,92516,92519],{"class":39,"line":9969},[37,92509,51409],{"class":54},[37,92511,51679],{"class":51368},[37,92513,53554],{"class":2035},[37,92515,70],{"class":54},[37,92517,92518],{"class":309},"\"elevator\"",[37,92520,51375],{"class":54},[37,92522,92523,92525,92527,92529,92531,92533,92536,92538,92540,92543,92545],{"class":39,"line":9978},[37,92524,55302],{"class":54},[37,92526,443],{"class":51368},[37,92528,61125],{"class":2035},[37,92530,70],{"class":54},[37,92532,64304],{"class":309},[37,92534,92535],{"class":2035}," data-ref",[37,92537,70],{"class":54},[37,92539,92473],{"class":309},[37,92541,92542],{"class":54},">视频介绍\u003C\u002F",[37,92544,443],{"class":51368},[37,92546,51375],{"class":54},[37,92548,92549,92551,92553,92555,92557,92559,92561,92563,92566,92569,92571],{"class":39,"line":9984},[37,92550,55302],{"class":54},[37,92552,443],{"class":51368},[37,92554,61125],{"class":2035},[37,92556,70],{"class":54},[37,92558,64304],{"class":309},[37,92560,92535],{"class":2035},[37,92562,70],{"class":54},[37,92564,92565],{"class":309},"\"intro\"",[37,92567,92568],{"class":54},">课程简介\u003C\u002F",[37,92570,443],{"class":51368},[37,92572,51375],{"class":54},[37,92574,92575,92577,92579,92581,92583,92585,92587,92589,92592,92595,92597],{"class":39,"line":9992},[37,92576,55302],{"class":54},[37,92578,443],{"class":51368},[37,92580,61125],{"class":2035},[37,92582,70],{"class":54},[37,92584,64304],{"class":309},[37,92586,92535],{"class":2035},[37,92588,70],{"class":54},[37,92590,92591],{"class":309},"\"outline\"",[37,92593,92594],{"class":54},">评论列表\u003C\u002F",[37,92596,443],{"class":51368},[37,92598,51375],{"class":54},[37,92600,92601,92603,92605],{"class":39,"line":9997},[37,92602,51844],{"class":54},[37,92604,51679],{"class":51368},[37,92606,51375],{"class":54},[37,92608,92609,92611,92613],{"class":39,"line":16676},[37,92610,52485],{"class":54},[37,92612,51679],{"class":51368},[37,92614,51375],{"class":54},[37,92616,92617,92619,92621,92623,92625,92628,92630,92632],{"class":39,"line":16682},[37,92618,52212],{"class":54},[37,92620,51881],{"class":51368},[37,92622,55307],{"class":2035},[37,92624,70],{"class":54},[37,92626,92627],{"class":309},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[37,92629,55382],{"class":54},[37,92631,51881],{"class":51368},[37,92633,51375],{"class":54},[37,92635,92636,92638,92640],{"class":39,"line":16705},[37,92637,52212],{"class":54},[37,92639,51881],{"class":51368},[37,92641,51375],{"class":54},[37,92643,92644],{"class":39,"line":16711},[37,92645,92646],{"class":43},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[37,92648,92649,92651,92653,92655,92657,92659,92661,92664],{"class":39,"line":16734},[37,92650,11293],{"class":50},[37,92652,92123],{"class":82},[37,92654,13636],{"class":50},[37,92656,54464],{"class":54},[37,92658,54467],{"class":2035},[37,92660,208],{"class":54},[37,92662,92663],{"class":309},"'video'",[37,92665,214],{"class":54},[37,92667,92668],{"class":39,"line":16748},[37,92669,92670],{"class":43},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[37,92672,92673,92676,92678,92680,92682,92685,92687],{"class":39,"line":16768},[37,92674,92675],{"class":54},"    video.ontimeupdate ",[37,92677,70],{"class":50},[37,92679,88423],{"class":54},[37,92681,91241],{"class":2035},[37,92683,92684],{"class":54},"(() ",[37,92686,84790],{"class":50},[37,92688,15644],{"class":54},[37,92690,92691],{"class":39,"line":16774},[37,92692,92693],{"class":43},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[37,92695,92696],{"class":39,"line":16785},[37,92697,92698],{"class":43},"      \u002F\u002F 控制台输出当前的时间\n",[37,92700,92701,92704],{"class":39,"line":16808},[37,92702,92703],{"class":43},"      \u002F\u002F console.log(video.currentTime)",[37,92705,92706],{"class":43},"  \u002F\u002F获得当前的视频时间\n",[37,92708,92709],{"class":39,"line":16830},[37,92710,92711],{"class":43},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[37,92713,92714,92716,92718,92720,92723],{"class":39,"line":16835},[37,92715,74751],{"class":54},[37,92717,71722],{"class":2035},[37,92719,208],{"class":54},[37,92721,92722],{"class":309},"'currentTime'",[37,92724,92725],{"class":54},", video.currentTime)\n",[37,92727,92728,92730,92732],{"class":39,"line":16841},[37,92729,54603],{"class":54},[37,92731,6482],{"class":82},[37,92733,214],{"class":54},[37,92735,92736],{"class":39,"line":16855},[37,92737,92738],{"class":43},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[37,92740,92741,92744,92747,92749,92752,92754],{"class":39,"line":16868},[37,92742,92743],{"class":54},"    video.",[37,92745,92746],{"class":2035},"onloadeddata",[37,92748,13636],{"class":50},[37,92750,92751],{"class":54}," () ",[37,92753,84790],{"class":50},[37,92755,15644],{"class":54},[37,92757,92758],{"class":39,"line":16873},[37,92759,60080],{"class":43},[37,92761,92762],{"class":39,"line":16887},[37,92763,92764],{"class":43},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[37,92766,92767,92770,92772,92775,92777,92779,92781,92783,92785],{"class":39,"line":16892},[37,92768,92769],{"class":54},"      video.currentTime ",[37,92771,70],{"class":50},[37,92773,92774],{"class":54}," localStorage.",[37,92776,71753],{"class":2035},[37,92778,208],{"class":54},[37,92780,92722],{"class":309},[37,92782,13786],{"class":54},[37,92784,71425],{"class":50},[37,92786,47401],{"class":82},[37,92788,92789],{"class":39,"line":16898},[37,92790,2259],{"class":54},[37,92792,92793,92795,92797],{"class":39,"line":16903},[37,92794,52485],{"class":54},[37,92796,51881],{"class":51368},[37,92798,51375],{"class":54},[37,92800,92801,92803,92805],{"class":39,"line":16917},[37,92802,51853],{"class":54},[37,92804,51868],{"class":51368},[37,92806,51375],{"class":54},[37,92808,92809],{"class":39,"line":16922},[37,92810,2472],{"emptyLinePlaceholder":131},[37,92812,92813,92815,92817],{"class":39,"line":16927},[37,92814,51853],{"class":54},[37,92816,50703],{"class":51368},[37,92818,51375],{"class":54},[123,92820,92821],{},"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":32,"searchDepth":47,"depth":47,"links":92823},[92824,92829,92833,92834,92835,92840,92845,92846,92847,92848,92855,92860,92861,92871,92875,92876,92880],{"id":76759,"depth":47,"text":76760,"children":92825},[92826,92827,92828],{"id":76763,"depth":58,"text":76764},{"id":76788,"depth":58,"text":76789},{"id":76800,"depth":58,"text":76801},{"id":76812,"depth":47,"text":76813,"children":92830},[92831,92832],{"id":76816,"depth":58,"text":76817},{"id":76831,"depth":58,"text":76832},{"id":76883,"depth":47,"text":76884},{"id":76927,"depth":47,"text":76928},{"id":76944,"depth":47,"text":76945,"children":92836},[92837,92838,92839],{"id":76948,"depth":58,"text":76949},{"id":76961,"depth":58,"text":76962},{"id":77066,"depth":58,"text":77067},{"id":77355,"depth":47,"text":77356,"children":92841},[92842,92843,92844],{"id":77359,"depth":58,"text":77360},{"id":77802,"depth":58,"text":77803},{"id":78213,"depth":58,"text":78214},{"id":78276,"depth":47,"text":78277},{"id":78355,"depth":47,"text":78356},{"id":78448,"depth":47,"text":78449},{"id":80293,"depth":47,"text":80294,"children":92849},[92850,92851,92852,92853,92854],{"id":80297,"depth":58,"text":80298},{"id":80309,"depth":58,"text":80310},{"id":80528,"depth":58,"text":80529},{"id":80546,"depth":58,"text":80547},{"id":80606,"depth":58,"text":80607},{"id":84874,"depth":47,"text":84875,"children":92856},[92857,92858,92859],{"id":84878,"depth":58,"text":84879},{"id":84896,"depth":58,"text":84897},{"id":84922,"depth":58,"text":84923},{"id":84931,"depth":47,"text":84932},{"id":84953,"depth":47,"text":84954,"children":92862},[92863,92864,92865,92866,92867,92868,92869,92870],{"id":84957,"depth":58,"text":84958},{"id":85218,"depth":58,"text":85219},{"id":85404,"depth":58,"text":85405},{"id":85771,"depth":58,"text":85772},{"id":85887,"depth":58,"text":85888},{"id":85923,"depth":58,"text":85924},{"id":85970,"depth":58,"text":85971},{"id":86004,"depth":58,"text":86005},{"id":87367,"depth":47,"text":87368,"children":92872},[92873,92874],{"id":87371,"depth":58,"text":87372},{"id":87408,"depth":58,"text":87409},{"id":88763,"depth":47,"text":88764},{"id":89134,"depth":47,"text":89135,"children":92877},[92878,92879],{"id":89138,"depth":58,"text":89139},{"id":89172,"depth":58,"text":89173},{"id":89901,"depth":47,"text":89902,"children":92881},[92882,92883,92884,92885],{"id":89905,"depth":58,"text":89906},{"id":90863,"depth":58,"text":90864},{"id":91805,"depth":58,"text":91806},{"id":91879,"depth":58,"text":91880},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76748,"description":128},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92892,"title":92893,"body":92894,"description":92905,"extension":129,"meta":92906,"navigation":131,"path":92908,"seo":92909,"stem":92910,"__hash__":92911},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92895,"toc":92903},[92896],[14,92897,92898,92899],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[443,92900,92901],{"href":92901,"rel":92902},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23937],{"title":32,"searchDepth":47,"depth":47,"links":92904},[],"三件套第三套学习",{"category":92907},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92893,"description":92905},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92913,"title":92914,"body":92915,"description":128,"extension":129,"meta":93020,"navigation":131,"path":93021,"seo":93022,"stem":93023,"__hash__":93024},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92916,"toc":93015},[92917,92924,92927,92930,92933,92937,92946,92949,92952,92956,92965,92968,92972,92975,92995,92998,93012],[14,92918,92919],{},[443,92920,92923],{"href":92921,"rel":92922},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[23937],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92925,92914],{"id":92926},"_1安装",[14,92928,92929],{},"numpy是科学计算基础库,底层是C语言",[14,92931,92932],{},"三种方式：",[146,92934,92936],{"id":92935},"_11-通过pip安装","1.1 通过pip安装",[27,92938,92940],{"className":29,"code":92939,"language":31,"meta":32,"style":32},"pip install numpy\n",[34,92941,92942],{"__ignoreMap":32},[37,92943,92944],{"class":39,"line":40},[37,92945,92939],{"class":54},[14,92947,92948],{},"首选方式，自动处理依赖项",[14,92950,92951],{},"在提示系统命令符中使用cmd",[146,92953,92955],{"id":92954},"_12-通过anaconda安装","1.2 通过Anaconda安装",[27,92957,92959],{"className":29,"code":92958,"language":31,"meta":32,"style":32},"conda install numpy\n",[34,92960,92961],{"__ignoreMap":32},[37,92962,92963],{"class":39,"line":40},[37,92964,92958],{"class":54},[14,92966,92967],{},"自动解决环境依赖",[146,92969,92971],{"id":92970},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,92973,92974],{},"对于Debian\u002FUbuntu",[27,92976,92978],{"className":29,"code":92977,"language":31,"meta":32,"style":32},"sudo apt-get install python3-numpy\n",[34,92979,92980],{"__ignoreMap":32},[37,92981,92982,92985,92987,92990,92992],{"class":39,"line":40},[37,92983,92984],{"class":54},"sudo apt",[37,92986,112],{"class":50},[37,92988,92989],{"class":54},"get install python3",[37,92991,112],{"class":50},[37,92993,92994],{"class":54},"numpy\n",[14,92996,92997],{},"对于Fedora:",[27,92999,93001],{"className":29,"code":93000,"language":31,"meta":32,"style":32},"sudo dnf install python3-numpy\n",[34,93002,93003],{"__ignoreMap":32},[37,93004,93005,93008,93010],{"class":39,"line":40},[37,93006,93007],{"class":54},"sudo dnf install python3",[37,93009,112],{"class":50},[37,93011,92994],{"class":54},[123,93013,93014],{},"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":32,"searchDepth":47,"depth":47,"links":93016},[93017,93018,93019],{"id":92935,"depth":47,"text":92936},{"id":92954,"depth":47,"text":92955},{"id":92970,"depth":47,"text":92971},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92914,"description":128},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93026,"title":93027,"body":93028,"description":128,"extension":129,"meta":93141,"navigation":131,"path":93142,"seo":93143,"stem":93144,"__hash__":93145},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93029,"toc":93139},[93030,93033,93036,93039,93042,93045,93048,93051,93054,93057,93133,93136],[10,93031,93027],{"id":93032},"_10算数函数",[14,93034,93035],{},"加减乘除运算跟python基础语法没区别",[14,93037,93038],{},"除了python那种方法外还可以使用函数",[14,93040,93041],{},"加：np.add(a,b)",[14,93043,93044],{},"减：np.subtract(a,b)",[14,93046,93047],{},"乘：np.multiply(a,b)",[14,93049,93050],{},"除：np.divide(a,b) == a\u002Fb",[14,93052,93053],{},"取余：np.mod(a,b) == a%b",[14,93055,93056],{},"必须会的用法：",[27,93058,93060],{"className":29,"code":93059,"language":31,"meta":32,"style":32},"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",[34,93061,93062,93084,93105,93115,93128],{"__ignoreMap":32},[37,93063,93064,93066,93068,93071,93073,93076,93078,93080,93082],{"class":39,"line":40},[37,93065,443],{"class":54},[37,93067,70],{"class":50},[37,93069,93070],{"class":54},"np.arange(",[37,93072,625],{"class":82},[37,93074,93075],{"class":54},").reshape(",[37,93077,276],{"class":82},[37,93079,583],{"class":54},[37,93081,276],{"class":82},[37,93083,214],{"class":54},[37,93085,93086,93088,93090,93093,93095,93097,93099,93101,93103],{"class":39,"line":47},[37,93087,468],{"class":54},[37,93089,70],{"class":50},[37,93091,93092],{"class":54},"np.array([",[37,93094,650],{"class":82},[37,93096,583],{"class":54},[37,93098,650],{"class":82},[37,93100,583],{"class":54},[37,93102,650],{"class":82},[37,93104,4729],{"class":54},[37,93106,93107,93110,93112],{"class":39,"line":58},[37,93108,93109],{"class":54},"result",[37,93111,70],{"class":50},[37,93113,93114],{"class":54},"np.empty_like(a)\n",[37,93116,93117,93120,93123,93125],{"class":39,"line":64},[37,93118,93119],{"class":54},"np.add(a,b,",[37,93121,93122],{"class":5288},"out",[37,93124,70],{"class":50},[37,93126,93127],{"class":54},"result)\n",[37,93129,93130],{"class":39,"line":76},[37,93131,93132],{"class":54},"result\n",[14,93134,93135],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[123,93137,93138],{},"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":32,"searchDepth":47,"depth":47,"links":93140},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93027,"description":128},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93147,"title":93148,"body":93149,"description":128,"extension":129,"meta":93911,"navigation":131,"path":93912,"seo":93913,"stem":93914,"__hash__":93915},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93150,"toc":93898},[93151,93154,93157,93160,93164,93203,93207,93251,93311,93315,93318,93357,93360,93405,93409,93445,93449,93518,93522,93586,93590,93593,93596,93599,93602,93638,93642,93682,93686,93758,93761,93765,93828,93832,93895],[10,93152,93148],{"id":93153},"_11统计函数",[14,93155,93156],{},"sum max min mean",[14,93158,93159],{},"这些有axis参数，可以指定方向",[146,93161,93163],{"id":93162},"_111-sum求和函数","11.1 sum()求和函数",[27,93165,93167],{"className":29,"code":93166,"language":31,"meta":32,"style":32},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[34,93168,93169,93174,93195],{"__ignoreMap":32},[37,93170,93171],{"class":39,"line":40},[37,93172,93173],{"class":43},"#创建一维数组\n",[37,93175,93176,93178,93180,93183,93185,93187,93189,93191,93193],{"class":39,"line":47},[37,93177,443],{"class":54},[37,93179,70],{"class":50},[37,93181,93182],{"class":54},"np.random.randint(",[37,93184,422],{"class":82},[37,93186,583],{"class":54},[37,93188,516],{"class":82},[37,93190,583],{"class":54},[37,93192,903],{"class":82},[37,93194,214],{"class":54},[37,93196,93197,93200],{"class":39,"line":58},[37,93198,93199],{"class":54},"np.sum(a)",[37,93201,93202],{"class":43},"#求和\n",[146,93204,93206],{"id":93205},"_112-max求最大值函数","11.2 max()求最大值函数",[27,93208,93210],{"className":29,"code":93209,"language":31,"meta":32,"style":32},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[34,93211,93212,93216,93236,93241,93246],{"__ignoreMap":32},[37,93213,93214],{"class":39,"line":40},[37,93215,93173],{"class":43},[37,93217,93218,93220,93222,93224,93226,93228,93230,93232,93234],{"class":39,"line":47},[37,93219,443],{"class":54},[37,93221,70],{"class":50},[37,93223,93182],{"class":54},[37,93225,422],{"class":82},[37,93227,583],{"class":54},[37,93229,516],{"class":82},[37,93231,583],{"class":54},[37,93233,903],{"class":82},[37,93235,214],{"class":54},[37,93237,93238],{"class":39,"line":58},[37,93239,93240],{"class":54},"np.max(a)\n",[37,93242,93243],{"class":39,"line":64},[37,93244,93245],{"class":43},"#最大索引(求最大元素的索引)arg\n",[37,93247,93248],{"class":39,"line":76},[37,93249,93250],{"class":54},"np.argmax(a)\n",[27,93252,93254],{"className":29,"code":93253,"language":31,"meta":32,"style":32},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[34,93255,93256,93277,93297,93301],{"__ignoreMap":32},[37,93257,93258,93260,93262,93265,93267,93269,93271,93273,93275],{"class":39,"line":40},[37,93259,10991],{"class":54},[37,93261,70],{"class":50},[37,93263,93264],{"class":54}," np.array([",[37,93266,422],{"class":82},[37,93268,12507],{"class":54},[37,93270,524],{"class":82},[37,93272,12507],{"class":54},[37,93274,276],{"class":82},[37,93276,4729],{"class":54},[37,93278,93279,93281,93283,93285,93287,93289,93291,93293,93295],{"class":39,"line":47},[37,93280,11017],{"class":54},[37,93282,70],{"class":50},[37,93284,93264],{"class":54},[37,93286,276],{"class":82},[37,93288,12507],{"class":54},[37,93290,282],{"class":82},[37,93292,12507],{"class":54},[37,93294,498],{"class":82},[37,93296,4729],{"class":54},[37,93298,93299],{"class":39,"line":58},[37,93300,2472],{"emptyLinePlaceholder":131},[37,93302,93303,93305,93308],{"class":39,"line":64},[37,93304,30485],{"class":82},[37,93306,93307],{"class":54},"(np.maximum(a, b))   ",[37,93309,93310],{"class":43},"# [3 5 4]，每个位置上取较大值\n",[146,93312,93314],{"id":93313},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93316,93317],{},"①一维数组：",[27,93319,93321],{"className":29,"code":93320,"language":31,"meta":32,"style":32},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[34,93322,93323,93327,93347,93352],{"__ignoreMap":32},[37,93324,93325],{"class":39,"line":40},[37,93326,93173],{"class":43},[37,93328,93329,93331,93333,93335,93337,93339,93341,93343,93345],{"class":39,"line":47},[37,93330,443],{"class":54},[37,93332,70],{"class":50},[37,93334,93182],{"class":54},[37,93336,422],{"class":82},[37,93338,583],{"class":54},[37,93340,516],{"class":82},[37,93342,583],{"class":54},[37,93344,903],{"class":82},[37,93346,214],{"class":54},[37,93348,93349],{"class":39,"line":58},[37,93350,93351],{"class":43},"#求平均值\n",[37,93353,93354],{"class":39,"line":64},[37,93355,93356],{"class":54},"np.mean(a)\n",[14,93358,93359],{},"②二维数组",[27,93361,93363],{"className":29,"code":93362,"language":31,"meta":32,"style":32},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[34,93364,93365,93370,93395,93400],{"__ignoreMap":32},[37,93366,93367],{"class":39,"line":40},[37,93368,93369],{"class":43},"#二维数组\n",[37,93371,93372,93375,93377,93379,93381,93383,93385,93387,93389,93391,93393],{"class":39,"line":47},[37,93373,93374],{"class":54},"aa",[37,93376,70],{"class":50},[37,93378,93070],{"class":54},[37,93380,422],{"class":82},[37,93382,583],{"class":54},[37,93384,727],{"class":82},[37,93386,93075],{"class":54},[37,93388,276],{"class":82},[37,93390,583],{"class":54},[37,93392,498],{"class":82},[37,93394,214],{"class":54},[37,93396,93397],{"class":39,"line":58},[37,93398,93399],{"class":43},"#对数组中的所有数求平均\n",[37,93401,93402],{"class":39,"line":64},[37,93403,93404],{"class":54},"np.mean(aa)\n",[146,93406,93408],{"id":93407},"_114-median求中位数函数","11.4 median()求中位数函数",[27,93410,93412],{"className":29,"code":93411,"language":31,"meta":32,"style":32},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[34,93413,93414,93419,93435,93440],{"__ignoreMap":32},[37,93415,93416],{"class":39,"line":40},[37,93417,93418],{"class":43},"#求中位数\n",[37,93420,93421,93423,93425,93427,93429,93431,93433],{"class":39,"line":47},[37,93422,468],{"class":54},[37,93424,70],{"class":50},[37,93426,93070],{"class":54},[37,93428,422],{"class":82},[37,93430,583],{"class":54},[37,93432,650],{"class":82},[37,93434,214],{"class":54},[37,93436,93437],{"class":39,"line":58},[37,93438,93439],{"class":54},"np.median(b)\n",[37,93441,93442],{"class":39,"line":64},[37,93443,93444],{"class":43},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[146,93446,93448],{"id":93447},"_115-power求幂运算函数","11.5 power()求幂运算函数",[27,93450,93452],{"className":29,"code":93451,"language":31,"meta":32,"style":32},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[34,93453,93454,93470,93475,93480,93489,93494,93503],{"__ignoreMap":32},[37,93455,93456,93458,93460,93462,93464,93466,93468],{"class":39,"line":40},[37,93457,468],{"class":54},[37,93459,70],{"class":50},[37,93461,93070],{"class":54},[37,93463,422],{"class":82},[37,93465,583],{"class":54},[37,93467,650],{"class":82},[37,93469,214],{"class":54},[37,93471,93472],{"class":39,"line":47},[37,93473,93474],{"class":43},"#幂运算\n",[37,93476,93477],{"class":39,"line":58},[37,93478,93479],{"class":43},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[37,93481,93482,93485,93487],{"class":39,"line":64},[37,93483,93484],{"class":54},"np.power(b,",[37,93486,282],{"class":82},[37,93488,214],{"class":54},[37,93490,93491],{"class":39,"line":76},[37,93492,93493],{"class":43},"#或者以下代码，将数据存储起来\n",[37,93495,93496,93498,93500],{"class":39,"line":92},[37,93497,1048],{"class":54},[37,93499,70],{"class":50},[37,93501,93502],{"class":54},"np.empty_like(b)\n",[37,93504,93505,93507,93509,93511,93513,93515],{"class":39,"line":97},[37,93506,93484],{"class":54},[37,93508,282],{"class":82},[37,93510,583],{"class":54},[37,93512,93122],{"class":5288},[37,93514,70],{"class":50},[37,93516,93517],{"class":54},"y)\n",[146,93519,93521],{"id":93520},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[27,93523,93525],{"className":29,"code":93524,"language":31,"meta":32,"style":32},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[34,93526,93527,93543,93548,93553,93557,93575],{"__ignoreMap":32},[37,93528,93529,93531,93533,93535,93537,93539,93541],{"class":39,"line":40},[37,93530,468],{"class":54},[37,93532,70],{"class":50},[37,93534,93070],{"class":54},[37,93536,422],{"class":82},[37,93538,583],{"class":54},[37,93540,650],{"class":82},[37,93542,214],{"class":54},[37,93544,93545],{"class":39,"line":47},[37,93546,93547],{"class":43},"#开方\n",[37,93549,93550],{"class":39,"line":58},[37,93551,93552],{"class":54},"np.sqrt(b)\n",[37,93554,93555],{"class":39,"line":64},[37,93556,93493],{"class":43},[37,93558,93559,93561,93563,93566,93569,93571,93573],{"class":39,"line":76},[37,93560,1048],{"class":54},[37,93562,70],{"class":50},[37,93564,93565],{"class":54},"np.empty_like(b,",[37,93567,93568],{"class":5288},"dtype",[37,93570,70],{"class":50},[37,93572,247],{"class":82},[37,93574,214],{"class":54},[37,93576,93577,93580,93582,93584],{"class":39,"line":92},[37,93578,93579],{"class":54},"np.sqrt(b,",[37,93581,93122],{"class":5288},[37,93583,70],{"class":50},[37,93585,93517],{"class":54},[146,93587,93589],{"id":93588},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,93591,93592],{},"对数组中的元素累计求和，可指定轴",[14,93594,93595],{},"#累计求和的意思是：",[14,93597,93598],{},"a = np.array([1, 2, 3, 4])",[14,93600,93601],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[27,93603,93605],{"className":29,"code":93604,"language":31,"meta":32,"style":32},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[34,93606,93607,93623,93628,93633],{"__ignoreMap":32},[37,93608,93609,93611,93613,93615,93617,93619,93621],{"class":39,"line":40},[37,93610,468],{"class":54},[37,93612,70],{"class":50},[37,93614,93070],{"class":54},[37,93616,422],{"class":82},[37,93618,583],{"class":54},[37,93620,650],{"class":82},[37,93622,214],{"class":54},[37,93624,93625],{"class":39,"line":47},[37,93626,93627],{"class":54},"np.cumsum(b)\n",[37,93629,93630],{"class":39,"line":58},[37,93631,93632],{"class":43},"#结果：\n",[37,93634,93635],{"class":39,"line":64},[37,93636,93637],{"class":43},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[146,93639,93641],{"id":93640},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[27,93643,93645],{"className":29,"code":93644,"language":31,"meta":32,"style":32},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[34,93646,93647,93663,93668,93673,93677],{"__ignoreMap":32},[37,93648,93649,93651,93653,93655,93657,93659,93661],{"class":39,"line":40},[37,93650,468],{"class":54},[37,93652,70],{"class":50},[37,93654,93070],{"class":54},[37,93656,422],{"class":82},[37,93658,583],{"class":54},[37,93660,650],{"class":82},[37,93662,214],{"class":54},[37,93664,93665],{"class":39,"line":47},[37,93666,93667],{"class":43},"#对数组中的元素累计求积，可指定轴\n",[37,93669,93670],{"class":39,"line":58},[37,93671,93672],{"class":54},"np.cumprod(b)\n",[37,93674,93675],{"class":39,"line":64},[37,93676,93632],{"class":43},[37,93678,93679],{"class":39,"line":76},[37,93680,93681],{"class":43},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[146,93683,93685],{"id":93684},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[27,93687,93689],{"className":29,"code":93688,"language":31,"meta":32,"style":32},"#删除数组中的重复数据，并对数据进行排序\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",[34,93690,93691,93696,93744,93749,93753],{"__ignoreMap":32},[37,93692,93693],{"class":39,"line":40},[37,93694,93695],{"class":43},"#删除数组中的重复数据，并对数据进行排序\n",[37,93697,93698,93700,93702,93704,93706,93708,93710,93712,93714,93716,93718,93720,93722,93724,93726,93728,93730,93732,93734,93736,93738,93740,93742],{"class":39,"line":47},[37,93699,443],{"class":54},[37,93701,70],{"class":50},[37,93703,93092],{"class":54},[37,93705,422],{"class":82},[37,93707,583],{"class":54},[37,93709,282],{"class":82},[37,93711,583],{"class":54},[37,93713,276],{"class":82},[37,93715,583],{"class":54},[37,93717,702],{"class":82},[37,93719,583],{"class":54},[37,93721,276],{"class":82},[37,93723,583],{"class":54},[37,93725,650],{"class":82},[37,93727,583],{"class":54},[37,93729,402],{"class":82},[37,93731,583],{"class":54},[37,93733,396],{"class":82},[37,93735,583],{"class":54},[37,93737,978],{"class":82},[37,93739,583],{"class":54},[37,93741,498],{"class":82},[37,93743,4729],{"class":54},[37,93745,93746],{"class":39,"line":58},[37,93747,93748],{"class":54},"np.unique(a)\n",[37,93750,93751],{"class":39,"line":64},[37,93752,93632],{"class":43},[37,93754,93755],{"class":39,"line":76},[37,93756,93757],{"class":43},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,93759,93760],{},"升序形式排序",[146,93762,93764],{"id":93763},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[27,93766,93768],{"className":29,"code":93767,"language":31,"meta":32,"style":32},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[34,93769,93770,93818,93823],{"__ignoreMap":32},[37,93771,93772,93774,93776,93778,93780,93782,93784,93786,93788,93790,93792,93794,93796,93798,93800,93802,93804,93806,93808,93810,93812,93814,93816],{"class":39,"line":40},[37,93773,443],{"class":54},[37,93775,70],{"class":50},[37,93777,93092],{"class":54},[37,93779,422],{"class":82},[37,93781,583],{"class":54},[37,93783,282],{"class":82},[37,93785,583],{"class":54},[37,93787,276],{"class":82},[37,93789,583],{"class":54},[37,93791,702],{"class":82},[37,93793,583],{"class":54},[37,93795,276],{"class":82},[37,93797,583],{"class":54},[37,93799,650],{"class":82},[37,93801,583],{"class":54},[37,93803,402],{"class":82},[37,93805,583],{"class":54},[37,93807,396],{"class":82},[37,93809,583],{"class":54},[37,93811,978],{"class":82},[37,93813,583],{"class":54},[37,93815,498],{"class":82},[37,93817,4729],{"class":54},[37,93819,93820],{"class":39,"line":47},[37,93821,93822],{"class":43},"#返回数组中非零元素的索引\n",[37,93824,93825],{"class":39,"line":58},[37,93826,93827],{"class":54},"np.nonzero(a)\n",[146,93829,93831],{"id":93830},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[27,93833,93835],{"className":29,"code":93834,"language":31,"meta":32,"style":32},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[34,93836,93837,93885,93890],{"__ignoreMap":32},[37,93838,93839,93841,93843,93845,93847,93849,93851,93853,93855,93857,93859,93861,93863,93865,93867,93869,93871,93873,93875,93877,93879,93881,93883],{"class":39,"line":40},[37,93840,443],{"class":54},[37,93842,70],{"class":50},[37,93844,93092],{"class":54},[37,93846,422],{"class":82},[37,93848,583],{"class":54},[37,93850,282],{"class":82},[37,93852,583],{"class":54},[37,93854,276],{"class":82},[37,93856,583],{"class":54},[37,93858,702],{"class":82},[37,93860,583],{"class":54},[37,93862,276],{"class":82},[37,93864,583],{"class":54},[37,93866,650],{"class":82},[37,93868,583],{"class":54},[37,93870,402],{"class":82},[37,93872,583],{"class":54},[37,93874,396],{"class":82},[37,93876,583],{"class":54},[37,93878,978],{"class":82},[37,93880,583],{"class":54},[37,93882,498],{"class":82},[37,93884,4729],{"class":54},[37,93886,93887],{"class":39,"line":47},[37,93888,93889],{"class":43},"#计算一组数中最大值与最小值的差，可指定轴\n",[37,93891,93892],{"class":39,"line":58},[37,93893,93894],{"class":54},"np.ptp(a)\n",[123,93896,93897],{},"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":32,"searchDepth":47,"depth":47,"links":93899},[93900,93901,93902,93903,93904,93905,93906,93907,93908,93909,93910],{"id":93162,"depth":47,"text":93163},{"id":93205,"depth":47,"text":93206},{"id":93313,"depth":47,"text":93314},{"id":93407,"depth":47,"text":93408},{"id":93447,"depth":47,"text":93448},{"id":93520,"depth":47,"text":93521},{"id":93588,"depth":47,"text":93589},{"id":93640,"depth":47,"text":93641},{"id":93684,"depth":47,"text":93685},{"id":93763,"depth":47,"text":93764},{"id":93830,"depth":47,"text":93831},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93148,"description":128},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93917,"title":93918,"body":93919,"description":128,"extension":129,"meta":94574,"navigation":131,"path":94575,"seo":94576,"stem":94577,"__hash__":94578},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93920,"toc":94562},[93921,93924,93928,93931,94147,94151,94154,94363,94367,94433,94438,94442,94445,94448,94486,94490,94493,94498,94502,94505,94508,94513,94517,94520,94524,94527,94530,94535,94539,94542,94545,94550,94554,94559],[10,93922,93918],{"id":93923},"_12其他常用函数",[146,93925,93927],{"id":93926},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,93929,93930],{},"将数组的数据按照行列复制扩展",[27,93932,93934],{"className":29,"code":93933,"language":31,"meta":32,"style":32},"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",[34,93935,93936,93952,93961,93965,93970,93975,93988,93992,93997,94002,94007,94011,94016,94040,94052,94056,94060,94065,94070,94075,94080,94084,94097,94101,94105,94110,94115,94120,94125,94130,94134,94138,94143],{"__ignoreMap":32},[37,93937,93938,93940,93942,93944,93946,93948,93950],{"class":39,"line":40},[37,93939,443],{"class":54},[37,93941,70],{"class":50},[37,93943,93070],{"class":54},[37,93945,422],{"class":82},[37,93947,583],{"class":54},[37,93949,524],{"class":82},[37,93951,214],{"class":54},[37,93953,93954,93957,93959],{"class":39,"line":47},[37,93955,93956],{"class":54},"np.tile(a,",[37,93958,282],{"class":82},[37,93960,214],{"class":54},[37,93962,93963],{"class":39,"line":58},[37,93964,93632],{"class":43},[37,93966,93967],{"class":39,"line":64},[37,93968,93969],{"class":43},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[37,93971,93972],{"class":39,"line":76},[37,93973,93974],{"class":43},"#行复制两次，列复制三次\n",[37,93976,93977,93980,93982,93984,93986],{"class":39,"line":92},[37,93978,93979],{"class":54},"np.tile(a,(",[37,93981,282],{"class":82},[37,93983,583],{"class":54},[37,93985,276],{"class":82},[37,93987,30567],{"class":54},[37,93989,93990],{"class":39,"line":97},[37,93991,93632],{"class":43},[37,93993,93994],{"class":39,"line":107},[37,93995,93996],{"class":309},"'''\n",[37,93998,93999],{"class":39,"line":1390},[37,94000,94001],{"class":309},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[37,94003,94004],{"class":39,"line":1402},[37,94005,94006],{"class":309},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[37,94008,94009],{"class":39,"line":1684},[37,94010,93996],{"class":309},[37,94012,94013],{"class":39,"line":1689},[37,94014,94015],{"class":43},"#创建二维数组\n",[37,94017,94018,94020,94022,94024,94026,94028,94030,94032,94034,94036,94038],{"class":39,"line":1695},[37,94019,93374],{"class":54},[37,94021,70],{"class":50},[37,94023,93070],{"class":54},[37,94025,422],{"class":82},[37,94027,583],{"class":54},[37,94029,727],{"class":82},[37,94031,93075],{"class":54},[37,94033,498],{"class":82},[37,94035,583],{"class":54},[37,94037,276],{"class":82},[37,94039,214],{"class":54},[37,94041,94042,94045,94047,94049],{"class":39,"line":1700},[37,94043,94044],{"class":54},"np.tile(aa,",[37,94046,282],{"class":82},[37,94048,86],{"class":54},[37,94050,94051],{"class":43},"#一个数的时候就是行\n",[37,94053,94054],{"class":39,"line":1714},[37,94055,93632],{"class":43},[37,94057,94058],{"class":39,"line":1719},[37,94059,93996],{"class":309},[37,94061,94062],{"class":39,"line":1725},[37,94063,94064],{"class":309},"array([[ 1,  2,  3,  1,  2,  3],\n",[37,94066,94067],{"class":39,"line":1746},[37,94068,94069],{"class":309},"       [ 4,  5,  6,  4,  5,  6],\n",[37,94071,94072],{"class":39,"line":1751},[37,94073,94074],{"class":309},"       [ 7,  8,  9,  7,  8,  9],\n",[37,94076,94077],{"class":39,"line":1765},[37,94078,94079],{"class":309},"       [10, 11, 12, 10, 11, 12]])\n",[37,94081,94082],{"class":39,"line":1770},[37,94083,93996],{"class":309},[37,94085,94086,94089,94091,94093,94095],{"class":39,"line":1799},[37,94087,94088],{"class":54},"np.tile(aa,(",[37,94090,282],{"class":82},[37,94092,583],{"class":54},[37,94094,276],{"class":82},[37,94096,30567],{"class":54},[37,94098,94099],{"class":39,"line":1804},[37,94100,93632],{"class":43},[37,94102,94103],{"class":39,"line":1821},[37,94104,93996],{"class":309},[37,94106,94107],{"class":39,"line":1826},[37,94108,94109],{"class":309},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[37,94111,94112],{"class":39,"line":1831},[37,94113,94114],{"class":309},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[37,94116,94117],{"class":39,"line":1836},[37,94118,94119],{"class":309},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[37,94121,94122],{"class":39,"line":1850},[37,94123,94124],{"class":309},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[37,94126,94127],{"class":39,"line":1855},[37,94128,94129],{"class":309},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[37,94131,94132],{"class":39,"line":2649},[37,94133,94114],{"class":309},[37,94135,94136],{"class":39,"line":2663},[37,94137,94119],{"class":309},[37,94139,94140],{"class":39,"line":2671},[37,94141,94142],{"class":309},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[37,94144,94145],{"class":39,"line":2676},[37,94146,93996],{"class":309},[146,94148,94150],{"id":94149},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94152,94153],{},"repeat()将数组中的每个元素重复若干次",[27,94155,94157],{"className":29,"code":94156,"language":31,"meta":32,"style":32},"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",[34,94158,94159,94175,94184,94188,94193,94217,94222,94231,94235,94240,94244,94249,94265,94269,94273,94278,94283,94288,94292,94297,94301,94306,94311,94315,94331,94335,94339,94344,94349,94354,94359],{"__ignoreMap":32},[37,94160,94161,94163,94165,94167,94169,94171,94173],{"class":39,"line":40},[37,94162,443],{"class":54},[37,94164,70],{"class":50},[37,94166,93070],{"class":54},[37,94168,422],{"class":82},[37,94170,583],{"class":54},[37,94172,524],{"class":82},[37,94174,214],{"class":54},[37,94176,94177,94180,94182],{"class":39,"line":47},[37,94178,94179],{"class":54},"np.repeat(a,",[37,94181,276],{"class":82},[37,94183,214],{"class":54},[37,94185,94186],{"class":39,"line":58},[37,94187,93632],{"class":43},[37,94189,94190],{"class":39,"line":64},[37,94191,94192],{"class":43},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[37,94194,94195,94197,94199,94201,94203,94205,94207,94209,94211,94213,94215],{"class":39,"line":76},[37,94196,93374],{"class":54},[37,94198,70],{"class":50},[37,94200,93070],{"class":54},[37,94202,422],{"class":82},[37,94204,583],{"class":54},[37,94206,727],{"class":82},[37,94208,93075],{"class":54},[37,94210,498],{"class":82},[37,94212,583],{"class":54},[37,94214,276],{"class":82},[37,94216,214],{"class":54},[37,94218,94219],{"class":39,"line":92},[37,94220,94221],{"class":43},"#这个重复之后二维变成一维\n",[37,94223,94224,94227,94229],{"class":39,"line":97},[37,94225,94226],{"class":54},"np.repeat(aa,",[37,94228,282],{"class":82},[37,94230,214],{"class":54},[37,94232,94233],{"class":39,"line":107},[37,94234,93996],{"class":309},[37,94236,94237],{"class":39,"line":1390},[37,94238,94239],{"class":309},"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",[37,94241,94242],{"class":39,"line":1402},[37,94243,93996],{"class":309},[37,94245,94246],{"class":39,"line":1684},[37,94247,94248],{"class":43},"#指定axis\n",[37,94250,94251,94253,94255,94257,94259,94261,94263],{"class":39,"line":1689},[37,94252,94226],{"class":54},[37,94254,282],{"class":82},[37,94256,583],{"class":54},[37,94258,47582],{"class":5288},[37,94260,70],{"class":50},[37,94262,396],{"class":82},[37,94264,214],{"class":54},[37,94266,94267],{"class":39,"line":1695},[37,94268,93632],{"class":43},[37,94270,94271],{"class":39,"line":1700},[37,94272,93996],{"class":309},[37,94274,94275],{"class":39,"line":1714},[37,94276,94277],{"class":309},"array([[ 1,  2,  3],\n",[37,94279,94280],{"class":39,"line":1719},[37,94281,94282],{"class":309},"       [ 1,  2,  3],\n",[37,94284,94285],{"class":39,"line":1725},[37,94286,94287],{"class":309},"       [ 4,  5,  6],\n",[37,94289,94290],{"class":39,"line":1746},[37,94291,94287],{"class":309},[37,94293,94294],{"class":39,"line":1751},[37,94295,94296],{"class":309},"       [ 7,  8,  9],\n",[37,94298,94299],{"class":39,"line":1765},[37,94300,94296],{"class":309},[37,94302,94303],{"class":39,"line":1770},[37,94304,94305],{"class":309},"       [10, 11, 12],\n",[37,94307,94308],{"class":39,"line":1799},[37,94309,94310],{"class":309},"       [10, 11, 12]])\n",[37,94312,94313],{"class":39,"line":1804},[37,94314,93996],{"class":309},[37,94316,94317,94319,94321,94323,94325,94327,94329],{"class":39,"line":1821},[37,94318,94226],{"class":54},[37,94320,282],{"class":82},[37,94322,583],{"class":54},[37,94324,47582],{"class":5288},[37,94326,70],{"class":50},[37,94328,422],{"class":82},[37,94330,214],{"class":54},[37,94332,94333],{"class":39,"line":1826},[37,94334,93632],{"class":43},[37,94336,94337],{"class":39,"line":1831},[37,94338,93996],{"class":309},[37,94340,94341],{"class":39,"line":1836},[37,94342,94343],{"class":309},"array([[ 1,  1,  2,  2,  3,  3],\n",[37,94345,94346],{"class":39,"line":1850},[37,94347,94348],{"class":309},"       [ 4,  4,  5,  5,  6,  6],\n",[37,94350,94351],{"class":39,"line":1855},[37,94352,94353],{"class":309},"       [ 7,  7,  8,  8,  9,  9],\n",[37,94355,94356],{"class":39,"line":2649},[37,94357,94358],{"class":309},"       [10, 10, 11, 11, 12, 12]])\n",[37,94360,94361],{"class":39,"line":2663},[37,94362,93996],{"class":309},[146,94364,94366],{"id":94365},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[27,94368,94370],{"className":29,"code":94369,"language":31,"meta":32,"style":32},"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",[34,94371,94372,94388,94393,94405,94409,94414,94424,94428],{"__ignoreMap":32},[37,94373,94374,94376,94378,94380,94382,94384,94386],{"class":39,"line":40},[37,94375,443],{"class":54},[37,94377,70],{"class":50},[37,94379,93070],{"class":54},[37,94381,422],{"class":82},[37,94383,583],{"class":54},[37,94385,524],{"class":82},[37,94387,214],{"class":54},[37,94389,94390],{"class":39,"line":47},[37,94391,94392],{"class":43},"#array([，2，3，4])\n",[37,94394,94395,94398,94400,94402],{"class":39,"line":58},[37,94396,94397],{"class":54},"np.roll(a,",[37,94399,282],{"class":82},[37,94401,86],{"class":54},[37,94403,94404],{"class":43},"#传正数向后调多少位，传负数向前调多少位\n",[37,94406,94407],{"class":39,"line":64},[37,94408,93632],{"class":43},[37,94410,94411],{"class":39,"line":76},[37,94412,94413],{"class":43},"#array([3, 4, 1, 2])\n",[37,94415,94416,94418,94420,94422],{"class":39,"line":92},[37,94417,94397],{"class":54},[37,94419,112],{"class":50},[37,94421,422],{"class":82},[37,94423,214],{"class":54},[37,94425,94426],{"class":39,"line":97},[37,94427,93632],{"class":43},[37,94429,94430],{"class":39,"line":107},[37,94431,94432],{"class":43},"#array([2, 3, 4, 1])\n",[14,94434,94435],{},[119,94436],{"alt":32,"src":94437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[146,94439,94441],{"id":94440},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,94443,94444],{},"resize()重新调整数组的大小",[14,94446,94447],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[27,94449,94451],{"className":29,"code":94450,"language":31,"meta":32,"style":32},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[34,94452,94453,94458,94471],{"__ignoreMap":32},[37,94454,94455],{"class":39,"line":40},[37,94456,94457],{"class":43},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[37,94459,94460,94463,94465,94467,94469],{"class":39,"line":47},[37,94461,94462],{"class":54},"np.resize(aa,(",[37,94464,282],{"class":82},[37,94466,583],{"class":54},[37,94468,549],{"class":82},[37,94470,30567],{"class":54},[37,94472,94473,94475,94477,94479,94481,94483],{"class":39,"line":58},[37,94474,94462],{"class":54},[37,94476,282],{"class":82},[37,94478,583],{"class":54},[37,94480,625],{"class":82},[37,94482,82839],{"class":54},[37,94484,94485],{"class":43},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[146,94487,94489],{"id":94488},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,94491,94492],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,94494,94495],{},[119,94496],{"alt":32,"src":94497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[146,94499,94501],{"id":94500},"_126-保存加载文件","12.6 保存加载文件",[14,94503,94504],{},"savetxt():将数据保存到txt文件中",[14,94506,94507],{},"loadtxt():从文件加载数据",[14,94509,94510],{},[119,94511],{"alt":32,"src":94512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[146,94514,94516],{"id":94515},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,94518,94519],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[146,94521,94523],{"id":94522},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,94525,94526],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,94528,94529],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,94531,94532],{},[119,94533],{"alt":32,"src":94534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[146,94536,94538],{"id":94537},"_129-where语句","12.9 where语句",[14,94540,94541],{},"np.where(条件,x,y)",[14,94543,94544],{},"如果条件为True,对应值为x,否则对应值为y",[14,94546,94547],{},[119,94548],{"alt":32,"src":94549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[146,94551,94553],{"id":94552},"_1210-dot矩阵","12.10 dot()矩阵",[14,94555,94556],{},[119,94557],{"alt":32,"src":94558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[123,94560,94561],{},"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":32,"searchDepth":47,"depth":47,"links":94563},[94564,94565,94566,94567,94568,94569,94570,94571,94572,94573],{"id":93926,"depth":47,"text":93927},{"id":94149,"depth":47,"text":94150},{"id":94365,"depth":47,"text":94366},{"id":94440,"depth":47,"text":94441},{"id":94488,"depth":47,"text":94489},{"id":94500,"depth":47,"text":94501},{"id":94515,"depth":47,"text":94516},{"id":94522,"depth":47,"text":94523},{"id":94537,"depth":47,"text":94538},{"id":94552,"depth":47,"text":94553},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93918,"description":128},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94580,"title":94581,"body":94582,"description":128,"extension":129,"meta":94935,"navigation":131,"path":94936,"seo":94937,"stem":94938,"__hash__":94939},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94583,"toc":94933},[94584,94587,94590,94593,94596,94599,94664,94666,94930],[10,94585,94581],{"id":94586},"_13数组排序",[14,94588,94589],{},"排序主要用到的方法是np.sort和np.argsort",[14,94591,94592],{},"其中np.sort()对数组直接排序",[14,94594,94595],{},"而np.argsort()是返回排序后的原始索引",[14,94597,94598],{},"①一维数组",[27,94600,94602],{"className":29,"code":94601,"language":31,"meta":32,"style":32},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[34,94603,94604,94608,94648,94656],{"__ignoreMap":32},[37,94605,94606],{"class":39,"line":40},[37,94607,93173],{"class":43},[37,94609,94610,94612,94614,94616,94618,94620,94622,94624,94626,94628,94630,94632,94634,94636,94638,94640,94642,94644,94646],{"class":39,"line":47},[37,94611,443],{"class":54},[37,94613,70],{"class":50},[37,94615,93092],{"class":54},[37,94617,276],{"class":82},[37,94619,583],{"class":54},[37,94621,702],{"class":82},[37,94623,583],{"class":54},[37,94625,600],{"class":82},[37,94627,583],{"class":54},[37,94629,978],{"class":82},[37,94631,583],{"class":54},[37,94633,484],{"class":82},[37,94635,583],{"class":54},[37,94637,1096],{"class":82},[37,94639,583],{"class":54},[37,94641,549],{"class":82},[37,94643,583],{"class":54},[37,94645,650],{"class":82},[37,94647,4729],{"class":54},[37,94649,94650,94653],{"class":39,"line":58},[37,94651,94652],{"class":54},"np.sort(a)",[37,94654,94655],{"class":43},"#升序排序\n",[37,94657,94658,94661],{"class":39,"line":64},[37,94659,94660],{"class":54},"np.argsort(a)",[37,94662,94663],{"class":43},"#按照元素大小来索引排序\n",[14,94665,93359],{},[27,94667,94669],{"className":29,"code":94668,"language":31,"meta":32,"style":32},"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",[34,94670,94671,94683,94709,94714,94718,94723,94728,94733,94738,94742,94750,94754,94759,94764,94769,94774,94778,94783,94796,94800,94805,94810,94815,94820,94824,94829,94841,94845,94849,94853,94857,94861,94865,94870,94885,94890,94899,94904,94908,94912,94917,94921,94926],{"__ignoreMap":32},[37,94672,94673,94676,94678,94680],{"class":39,"line":40},[37,94674,94675],{"class":54},"np.random.seed(",[37,94677,396],{"class":82},[37,94679,86],{"class":54},[37,94681,94682],{"class":43},"#保证每次值一样\n",[37,94684,94685,94687,94689,94691,94693,94695,94697,94699,94701,94703,94705,94707],{"class":39,"line":47},[37,94686,93374],{"class":54},[37,94688,70],{"class":50},[37,94690,93182],{"class":54},[37,94692,516],{"class":82},[37,94694,583],{"class":54},[37,94696,31566],{"class":5288},[37,94698,70],{"class":50},[37,94700,208],{"class":54},[37,94702,498],{"class":82},[37,94704,583],{"class":54},[37,94706,549],{"class":82},[37,94708,30567],{"class":54},[37,94710,94711],{"class":39,"line":58},[37,94712,94713],{"class":43},"#原数组：\n",[37,94715,94716],{"class":39,"line":64},[37,94717,93996],{"class":309},[37,94719,94720],{"class":39,"line":76},[37,94721,94722],{"class":309},"array([[44, 47, 64, 67, 67,  9],\n",[37,94724,94725],{"class":39,"line":92},[37,94726,94727],{"class":309},"       [83, 21, 36, 87, 70, 88],\n",[37,94729,94730],{"class":39,"line":97},[37,94731,94732],{"class":309},"       [88, 12, 58, 65, 39, 87],\n",[37,94734,94735],{"class":39,"line":107},[37,94736,94737],{"class":309},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[37,94739,94740],{"class":39,"line":1390},[37,94741,93996],{"class":309},[37,94743,94744,94747],{"class":39,"line":1402},[37,94745,94746],{"class":54},"np.sort(aa)",[37,94748,94749],{"class":43},"#每行进行了排序\n",[37,94751,94752],{"class":39,"line":1684},[37,94753,93996],{"class":309},[37,94755,94756],{"class":39,"line":1689},[37,94757,94758],{"class":309},"array([[ 9, 44, 47, 64, 67, 67],\n",[37,94760,94761],{"class":39,"line":1695},[37,94762,94763],{"class":309},"       [21, 36, 70, 83, 87, 88],\n",[37,94765,94766],{"class":39,"line":1700},[37,94767,94768],{"class":309},"       [12, 39, 58, 65, 87, 88],\n",[37,94770,94771],{"class":39,"line":1714},[37,94772,94773],{"class":309},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[37,94775,94776],{"class":39,"line":1719},[37,94777,93996],{"class":309},[37,94779,94780],{"class":39,"line":1725},[37,94781,94782],{"class":43},"#axis=0时\n",[37,94784,94785,94788,94790,94792,94794],{"class":39,"line":1746},[37,94786,94787],{"class":54},"np.sort(aa,",[37,94789,47582],{"class":5288},[37,94791,70],{"class":50},[37,94793,396],{"class":82},[37,94795,214],{"class":54},[37,94797,94798],{"class":39,"line":1751},[37,94799,93996],{"class":309},[37,94801,94802],{"class":39,"line":1765},[37,94803,94804],{"class":309},"array([[44, 12, 36, 37, 25,  9],\n",[37,94806,94807],{"class":39,"line":1770},[37,94808,94809],{"class":309},"       [46, 21, 58, 65, 39, 77],\n",[37,94811,94812],{"class":39,"line":1799},[37,94813,94814],{"class":309},"       [83, 47, 64, 67, 67, 87],\n",[37,94816,94817],{"class":39,"line":1804},[37,94818,94819],{"class":309},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[37,94821,94822],{"class":39,"line":1821},[37,94823,93996],{"class":309},[37,94825,94826],{"class":39,"line":1826},[37,94827,94828],{"class":43},"#axis=1时,为默认值\n",[37,94830,94831,94833,94835,94837,94839],{"class":39,"line":1831},[37,94832,94787],{"class":54},[37,94834,47582],{"class":5288},[37,94836,70],{"class":50},[37,94838,422],{"class":82},[37,94840,214],{"class":54},[37,94842,94843],{"class":39,"line":1836},[37,94844,93996],{"class":309},[37,94846,94847],{"class":39,"line":1850},[37,94848,94758],{"class":309},[37,94850,94851],{"class":39,"line":1855},[37,94852,94763],{"class":309},[37,94854,94855],{"class":39,"line":2649},[37,94856,94768],{"class":309},[37,94858,94859],{"class":39,"line":2663},[37,94860,94773],{"class":309},[37,94862,94863],{"class":39,"line":2671},[37,94864,93996],{"class":309},[37,94866,94867],{"class":39,"line":2676},[37,94868,94869],{"class":43},"#按最后一列排序\n",[37,94871,94872,94874,94876,94879,94881,94883],{"class":39,"line":2682},[37,94873,468],{"class":54},[37,94875,70],{"class":50},[37,94877,94878],{"class":54},"aa[:,",[37,94880,112],{"class":50},[37,94882,422],{"class":82},[37,94884,33315],{"class":54},[37,94886,94887],{"class":39,"line":2688},[37,94888,94889],{"class":43},"#获取最后一列排好序的索引\n",[37,94891,94892,94894,94896],{"class":39,"line":2693},[37,94893,74126],{"class":54},[37,94895,70],{"class":50},[37,94897,94898],{"class":54},"np.argsort(b)\n",[37,94900,94901],{"class":39,"line":8020},[37,94902,94903],{"class":54},"aa[index]\n",[37,94905,94906],{"class":39,"line":8044},[37,94907,93996],{"class":309},[37,94909,94910],{"class":39,"line":8049},[37,94911,94722],{"class":309},[37,94913,94914],{"class":39,"line":8055},[37,94915,94916],{"class":309},"       [46, 88, 81, 37, 25, 77],\n",[37,94918,94919],{"class":39,"line":8082},[37,94920,94732],{"class":309},[37,94922,94923],{"class":39,"line":8087},[37,94924,94925],{"class":309},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[37,94927,94928],{"class":39,"line":8093},[37,94929,93996],{"class":309},[123,94931,94932],{},"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":32,"searchDepth":47,"depth":47,"links":94934},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94581,"description":128},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94941,"title":94942,"body":94943,"description":128,"extension":129,"meta":94973,"navigation":131,"path":94974,"seo":94975,"stem":94976,"__hash__":94977},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94944,"toc":94971},[94945,94948,94951,94954,94957,94960,94963,94966],[10,94946,94942],{"id":94947},"_14广播机制",[14,94949,94950],{},"广播的规则：",[14,94952,94953],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,94955,94956],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,94958,94959],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,94961,94962],{},"3.如果没有维度形状为1，则会引发异常",[14,94964,94965],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,94967,94968],{},[119,94969],{"alt":32,"src":94970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":32,"searchDepth":47,"depth":47,"links":94972},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94942,"description":128},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94979,"title":94980,"body":94981,"description":128,"extension":129,"meta":95079,"navigation":131,"path":95080,"seo":95081,"stem":95082,"__hash__":95083},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94982,"toc":95077},[94983,94986,94989,95074],[10,94984,94980],{"id":94985},"_15比较掩码",[14,94987,94988],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[27,94990,94992],{"className":29,"code":94991,"language":31,"meta":32,"style":32},"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",[34,94993,94994,95040,95051,95065,95069],{"__ignoreMap":32},[37,94995,94996,94998,95000,95003,95005,95007,95009,95011,95013,95015,95017,95019,95021,95023,95025,95027,95029,95031,95033,95035,95037],{"class":39,"line":40},[37,94997,443],{"class":54},[37,94999,70],{"class":50},[37,95001,95002],{"class":54},"np.array([[",[37,95004,422],{"class":82},[37,95006,583],{"class":54},[37,95008,282],{"class":82},[37,95010,583],{"class":54},[37,95012,276],{"class":82},[37,95014,48098],{"class":54},[37,95016,676],{"class":82},[37,95018,583],{"class":54},[37,95020,702],{"class":82},[37,95022,583],{"class":54},[37,95024,727],{"class":82},[37,95026,48098],{"class":54},[37,95028,928],{"class":82},[37,95030,583],{"class":54},[37,95032,953],{"class":82},[37,95034,583],{"class":54},[37,95036,978],{"class":82},[37,95038,95039],{"class":54},"]])\n",[37,95041,95042,95044,95046,95048],{"class":39,"line":47},[37,95043,443],{"class":54},[37,95045,1113],{"class":50},[37,95047,903],{"class":82},[37,95049,95050],{"class":43},"#结果是一个由True,False组成的数组\n",[37,95052,95053,95056,95058,95060,95062],{"class":39,"line":58},[37,95054,95055],{"class":54},"a[a",[37,95057,1113],{"class":50},[37,95059,903],{"class":82},[37,95061,1143],{"class":54},[37,95063,95064],{"class":43},"#小于20的元素会存到这个数组中\n",[37,95066,95067],{"class":39,"line":64},[37,95068,93632],{"class":43},[37,95070,95071],{"class":39,"line":76},[37,95072,95073],{"class":43},"#array([ 1,  2,  3, 11, 12, 13])\n",[123,95075,95076],{},"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":32,"searchDepth":47,"depth":47,"links":95078},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94980,"description":128},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":4,"title":5,"body":95085,"description":128,"extension":129,"meta":95161,"navigation":131,"path":132,"seo":95162,"stem":134,"__hash__":135},{"type":7,"value":95086,"toc":95159},[95087,95089,95091,95093,95095,95097,95153,95157],[10,95088,5],{"id":12},[14,95090,16],{},[14,95092,19],{},[14,95094,22],{},[14,95096,25],{},[27,95098,95099],{"className":29,"code":30,"language":31,"meta":32,"style":32},[34,95100,95101,95105,95111,95115,95123,95133,95137,95145],{"__ignoreMap":32},[37,95102,95103],{"class":39,"line":40},[37,95104,44],{"class":43},[37,95106,95107,95109],{"class":39,"line":47},[37,95108,51],{"class":50},[37,95110,55],{"class":54},[37,95112,95113],{"class":39,"line":58},[37,95114,61],{"class":43},[37,95116,95117,95119,95121],{"class":39,"line":64},[37,95118,67],{"class":54},[37,95120,70],{"class":50},[37,95122,73],{"class":54},[37,95124,95125,95127,95129,95131],{"class":39,"line":76},[37,95126,79],{"class":54},[37,95128,83],{"class":82},[37,95130,86],{"class":54},[37,95132,89],{"class":43},[37,95134,95135],{"class":39,"line":92},[37,95136,61],{"class":43},[37,95138,95139,95141,95143],{"class":39,"line":97},[37,95140,100],{"class":54},[37,95142,70],{"class":50},[37,95144,73],{"class":54},[37,95146,95147,95149,95151],{"class":39,"line":107},[37,95148,100],{"class":54},[37,95150,112],{"class":50},[37,95152,115],{"class":54},[14,95154,95155],{},[119,95156],{"alt":32,"src":121},[123,95158,125],{},{"title":32,"searchDepth":47,"depth":47,"links":95160},[],{},{"title":5,"description":128},{"id":95164,"title":95165,"body":95166,"description":128,"extension":129,"meta":95201,"navigation":131,"path":95202,"seo":95203,"stem":95204,"__hash__":95205},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95167,"toc":95199},[95168,95171,95174,95177,95180,95183,95186,95189,95194],[10,95169,95165],{"id":95170},"_17魔法命令timeit",[14,95172,95173],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95175,95176],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95178,95179],{},"单元格模式：",[14,95181,95182],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95184,95185],{},"初始化语句执行次数由轮数来决定",[14,95187,95188],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95190,95191],{},[119,95192],{"alt":32,"src":95193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95195,95196],{},[119,95197],{"alt":32,"src":95198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":32,"searchDepth":47,"depth":47,"links":95200},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95165,"description":128},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95207,"title":95208,"body":95209,"description":128,"extension":129,"meta":95227,"navigation":131,"path":95228,"seo":95229,"stem":95230,"__hash__":95231},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95210,"toc":95225},[95211,95214,95217,95220],[10,95212,95208],{"id":95213},"_18魔法命令writefile和run",[14,95215,95216],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95218,95219],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95221,95222],{},[119,95223],{"alt":32,"src":95224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":32,"searchDepth":47,"depth":47,"links":95226},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95208,"description":128},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95233,"title":95234,"body":95235,"description":128,"extension":129,"meta":95288,"navigation":131,"path":95289,"seo":95290,"stem":95291,"__hash__":95292},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95236,"toc":95286},[95237,95240,95243,95245,95248,95251,95256,95259,95262,95265,95268,95271,95274,95277,95280,95283],[10,95238,95234],{"id":95239},"_19魔法命令memit",[14,95241,95242],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95244,24672],{},[14,95246,95247],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95249,95250],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,95252,95253],{},[119,95254],{"alt":32,"src":95255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95257,95258],{},"补充：",[14,95260,95261],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95263,95264],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95266,95267],{},"解决方法：",[14,95269,95270],{},"1.cmd",[14,95272,95273],{},"2.依次输入以下代码：",[14,95275,95276],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95278,95279],{},"pip install --upgrade ipython",[14,95281,95282],{},"#升级 memory_profiler 和 setuptools",[14,95284,95285],{},"pip install --upgrade memory_profiler setuptools",{"title":32,"searchDepth":47,"depth":47,"links":95287},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95234,"description":128},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95294,"title":95295,"body":95296,"description":128,"extension":129,"meta":96942,"navigation":131,"path":96943,"seo":96944,"stem":96945,"__hash__":96946},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95297,"toc":96912},[95298,95301,95305,95309,95370,95373,95378,95382,95387,95392,95397,95402,95405,95410,95414,95418,95451,95454,95457,95460,95512,95515,95551,95554,95596,95600,95621,95623,95660,95662,95667,95669,95674,95678,95681,95709,95713,95717,95770,95774,95866,95870,95874,95877,95882,95886,95911,95916,95920,95923,95926,95929,95932,95935,95938,95941,95953,95957,95961,95964,95996,95999,96022,96025,96051,96054,96080,96083,96117,96120,96182,96186,96189,96193,96196,96222,96225,96228,96233,96236,96305,96307,96312,96373,96376,96387,96393,96398,96402,96405,96418,96422,96437,96439,96462,96464,96490,96493,96496,96499,96547,96549,96554,96558,96562,96589,96593,96620,96623,96628,96633,96723,96727,96785,96790,96793,96796,96838,96842,96898,96903,96906,96909],[10,95299,95295],{"id":95300},"_2创建数组",[146,95302,95304],{"id":95303},"_21-array函数创建数组","2.1 array()函数创建数组",[175,95306,95308],{"id":95307},"_221-函数语句","2.2.1 函数语句",[27,95310,95312],{"className":29,"code":95311,"language":31,"meta":32,"style":32},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[34,95313,95314],{"__ignoreMap":32},[37,95315,95316,95319,95322,95324,95326,95328,95330,95332,95335,95337,95340,95342,95345,95347,95349,95351,95354,95356,95359,95361,95364,95366,95368],{"class":39,"line":40},[37,95317,95318],{"class":54},"numpy.array(",[37,95320,95321],{"class":82},"object",[37,95323,12507],{"class":54},[37,95325,93568],{"class":5288},[37,95327,13636],{"class":50},[37,95329,39002],{"class":82},[37,95331,12507],{"class":54},[37,95333,95334],{"class":5288},"copy",[37,95336,13636],{"class":50},[37,95338,95339],{"class":82}," True",[37,95341,12507],{"class":54},[37,95343,95344],{"class":5288},"order",[37,95346,13636],{"class":50},[37,95348,39002],{"class":82},[37,95350,12507],{"class":54},[37,95352,95353],{"class":5288},"subok",[37,95355,13636],{"class":50},[37,95357,95358],{"class":82}," False",[37,95360,12507],{"class":54},[37,95362,95363],{"class":5288},"ndmin",[37,95365,13636],{"class":50},[37,95367,4165],{"class":82},[37,95369,214],{"class":54},[14,95371,95372],{},"参数：",[14,95374,95375],{},[119,95376],{"alt":32,"src":95377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[175,95379,95381],{"id":95380},"_222-实例","2.2.2 实例",[14,95383,95384],{},[119,95385],{"alt":32,"src":95386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95388,95389],{},[119,95390],{"alt":32,"src":95391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95393,95394],{},[119,95395],{"alt":32,"src":95396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95398,95399],{},[119,95400],{"alt":32,"src":95401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,95403,95404],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,95406,95407],{},[119,95408],{"alt":32,"src":95409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[146,95411,95413],{"id":95412},"_22-随机数创建数组","2.2 随机数创建数组",[175,95415,95417],{"id":95416},"_221-random语句","2.2.1 random语句",[27,95419,95421],{"className":29,"code":95420,"language":31,"meta":32,"style":32},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[34,95422,95423,95428,95433,95441,95446],{"__ignoreMap":32},[37,95424,95425],{"class":39,"line":40},[37,95426,95427],{"class":43},"#random.random()\n",[37,95429,95430],{"class":39,"line":47},[37,95431,95432],{"class":43},"#确定随机种子,就是每次运行结果是相同的\n",[37,95434,95435,95437,95439],{"class":39,"line":58},[37,95436,94675],{"class":54},[37,95438,396],{"class":82},[37,95440,214],{"class":54},[37,95442,95443],{"class":39,"line":64},[37,95444,95445],{"class":54},"np.random.random()\n",[37,95447,95448],{"class":39,"line":76},[37,95449,95450],{"class":43},"#生成一个随机的数目\n",[14,95452,95453],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,95455,95456],{},"可以指定数组形状 size",[14,95458,95459],{},"①生成一维数组",[27,95461,95463],{"className":29,"code":95462,"language":31,"meta":32,"style":32},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[34,95464,95465,95470,95483,95488,95504],{"__ignoreMap":32},[37,95466,95467],{"class":39,"line":40},[37,95468,95469],{"class":43},"#random.random(size())\n",[37,95471,95472,95475,95477,95479,95481],{"class":39,"line":47},[37,95473,95474],{"class":54},"np.random.random(",[37,95476,31566],{"class":5288},[37,95478,70],{"class":50},[37,95480,524],{"class":82},[37,95482,214],{"class":54},[37,95484,95485],{"class":39,"line":58},[37,95486,95487],{"class":43},"#生成一位的五个元素\n",[37,95489,95490,95492,95494,95496,95498,95500,95502],{"class":39,"line":64},[37,95491,443],{"class":54},[37,95493,70],{"class":50},[37,95495,95474],{"class":54},[37,95497,31566],{"class":5288},[37,95499,70],{"class":50},[37,95501,498],{"class":82},[37,95503,214],{"class":54},[37,95505,95506,95509],{"class":39,"line":76},[37,95507,95508],{"class":54},"a.shape ",[37,95510,95511],{"class":43},"#输出数组形状\n",[14,95513,95514],{},"②生成二维数组",[27,95516,95518],{"className":29,"code":95517,"language":31,"meta":32,"style":32},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[34,95519,95520,95524,95546],{"__ignoreMap":32},[37,95521,95522],{"class":39,"line":40},[37,95523,93369],{"class":43},[37,95525,95526,95528,95530,95532,95534,95536,95538,95540,95542,95544],{"class":39,"line":47},[37,95527,93374],{"class":54},[37,95529,70],{"class":50},[37,95531,95474],{"class":54},[37,95533,31566],{"class":5288},[37,95535,70],{"class":50},[37,95537,208],{"class":54},[37,95539,498],{"class":82},[37,95541,583],{"class":54},[37,95543,524],{"class":82},[37,95545,30567],{"class":54},[37,95547,95548],{"class":39,"line":58},[37,95549,95550],{"class":43},"#生成四行五列的数组\n",[14,95552,95553],{},"③生成三维数组",[27,95555,95557],{"className":29,"code":95556,"language":31,"meta":32,"style":32},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[34,95558,95559,95564,95591],{"__ignoreMap":32},[37,95560,95561],{"class":39,"line":40},[37,95562,95563],{"class":43},"#三维数组\n",[37,95565,95566,95569,95571,95573,95575,95577,95579,95581,95583,95585,95587,95589],{"class":39,"line":47},[37,95567,95568],{"class":54},"aaa",[37,95570,70],{"class":50},[37,95572,95474],{"class":54},[37,95574,31566],{"class":5288},[37,95576,70],{"class":50},[37,95578,208],{"class":54},[37,95580,282],{"class":82},[37,95582,583],{"class":54},[37,95584,276],{"class":82},[37,95586,583],{"class":54},[37,95588,498],{"class":82},[37,95590,30567],{"class":54},[37,95592,95593],{"class":39,"line":58},[37,95594,95595],{"class":54},"aaa.shape\n",[175,95597,95599],{"id":95598},"_222-randint语句","2.2.2 randint语句",[27,95601,95603],{"className":29,"code":95602,"language":31,"meta":32,"style":32},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[34,95604,95605,95610],{"__ignoreMap":32},[37,95606,95607],{"class":39,"line":40},[37,95608,95609],{"class":43},"#生成随机的整数 random.randint(low,high,size)\n",[37,95611,95612,95614,95616,95618],{"class":39,"line":47},[37,95613,93182],{"class":54},[37,95615,524],{"class":82},[37,95617,13786],{"class":54},[37,95619,95620],{"class":43},"#0~5中的随机一个数\n",[14,95622,95459],{},[27,95624,95626],{"className":29,"code":95625,"language":31,"meta":32,"style":32},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[34,95627,95628,95633,95655],{"__ignoreMap":32},[37,95629,95630],{"class":39,"line":40},[37,95631,95632],{"class":43},"#一维\n",[37,95634,95635,95637,95639,95641,95643,95645,95647,95649,95651,95653],{"class":39,"line":47},[37,95636,93182],{"class":54},[37,95638,422],{"class":82},[37,95640,583],{"class":54},[37,95642,676],{"class":82},[37,95644,583],{"class":54},[37,95646,31566],{"class":5288},[37,95648,70],{"class":50},[37,95650,208],{"class":54},[37,95652,650],{"class":82},[37,95654,30567],{"class":54},[37,95656,95657],{"class":39,"line":58},[37,95658,95659],{"class":43},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,95661,95514],{},[14,95663,95664],{},[119,95665],{"alt":32,"src":95666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,95668,95553],{},[14,95670,95671],{},[119,95672],{"alt":32,"src":95673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[175,95675,95677],{"id":95676},"_222-rand语句","2.2.2 rand语句",[14,95679,95680],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[27,95682,95684],{"className":29,"code":95683,"language":31,"meta":32,"style":32},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[34,95685,95686,95699,95704],{"__ignoreMap":32},[37,95687,95688,95691,95693,95695,95697],{"class":39,"line":40},[37,95689,95690],{"class":54},"np.random.rand(",[37,95692,516],{"class":82},[37,95694,583],{"class":54},[37,95696,650],{"class":82},[37,95698,214],{"class":54},[37,95700,95701],{"class":39,"line":47},[37,95702,95703],{"class":43},"#第一个参数100：行数，表示有100个样本\n",[37,95705,95706],{"class":39,"line":58},[37,95707,95708],{"class":43},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[146,95710,95712],{"id":95711},"_23-arange创建数组","2.3 arange()创建数组",[175,95714,95716],{"id":95715},"_231-函数语句","2.3.1 函数语句",[27,95718,95720],{"className":29,"code":95719,"language":31,"meta":32,"style":32},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[34,95721,95722,95736,95741,95746,95751,95756,95761,95766],{"__ignoreMap":32},[37,95723,95724,95727,95729,95731,95734],{"class":39,"line":40},[37,95725,95726],{"class":54},"numpy.arange([start,] stop[, step], ",[37,95728,93568],{"class":5288},[37,95730,70],{"class":50},[37,95732,95733],{"class":82},"None",[37,95735,214],{"class":54},[37,95737,95738],{"class":39,"line":47},[37,95739,95740],{"class":43},"#参数\n",[37,95742,95743],{"class":39,"line":58},[37,95744,95745],{"class":309},"\"\"\"\n",[37,95747,95748],{"class":39,"line":64},[37,95749,95750],{"class":309},"start:起始值，可选，默认从 0 开始。\n",[37,95752,95753],{"class":39,"line":76},[37,95754,95755],{"class":309},"stop:结束值（不包含该值）。\n",[37,95757,95758],{"class":39,"line":92},[37,95759,95760],{"class":309},"step:步长，可选，默认是 1。可以为浮点数。\n",[37,95762,95763],{"class":39,"line":97},[37,95764,95765],{"class":309},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[37,95767,95768],{"class":39,"line":107},[37,95769,95745],{"class":309},[175,95771,95773],{"id":95772},"_232-实例","2.3.2 实例",[27,95775,95777],{"className":29,"code":95776,"language":31,"meta":32,"style":32},"#创建一维数组\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",[34,95778,95779,95783,95807,95812,95817,95821,95844,95848,95852,95857,95862],{"__ignoreMap":32},[37,95780,95781],{"class":39,"line":40},[37,95782,93173],{"class":43},[37,95784,95785,95787,95789,95791,95793,95795,95797,95799,95801,95803,95805],{"class":39,"line":47},[37,95786,93070],{"class":54},[37,95788,422],{"class":82},[37,95790,583],{"class":54},[37,95792,928],{"class":82},[37,95794,583],{"class":54},[37,95796,422],{"class":82},[37,95798,583],{"class":54},[37,95800,93568],{"class":5288},[37,95802,70],{"class":50},[37,95804,211],{"class":82},[37,95806,214],{"class":54},[37,95808,95809],{"class":39,"line":58},[37,95810,95811],{"class":43},"#输出结果：\n",[37,95813,95814],{"class":39,"line":64},[37,95815,95816],{"class":43},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[37,95818,95819],{"class":39,"line":76},[37,95820,94015],{"class":43},[37,95822,95823,95826,95828,95830,95832,95835,95837,95839,95841],{"class":39,"line":92},[37,95824,95825],{"class":54},"np.array([np.arange(",[37,95827,422],{"class":82},[37,95829,583],{"class":54},[37,95831,498],{"class":82},[37,95833,95834],{"class":54},"),np.arange(",[37,95836,498],{"class":82},[37,95838,583],{"class":54},[37,95840,574],{"class":82},[37,95842,95843],{"class":54},")])\n",[37,95845,95846],{"class":39,"line":97},[37,95847,93632],{"class":43},[37,95849,95850],{"class":39,"line":107},[37,95851,95745],{"class":309},[37,95853,95854],{"class":39,"line":1390},[37,95855,95856],{"class":309},"array([[1, 2, 3],\n",[37,95858,95859],{"class":39,"line":1402},[37,95860,95861],{"class":309},"       [4, 5, 6]])\n",[37,95863,95864],{"class":39,"line":1684},[37,95865,95745],{"class":309},[146,95867,95869],{"id":95868},"_24-生态分布","2.4 生态分布",[175,95871,95873],{"id":95872},"_241-标准正态分布","2.4.1 标准正态分布",[14,95875,95876],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,95878,95879],{},[119,95880],{"alt":32,"src":95881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[175,95883,95885],{"id":95884},"_242-常规正态分布","2.4.2 常规正态分布",[27,95887,95889],{"className":29,"code":95888,"language":31,"meta":32,"style":32},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[34,95890,95891,95896,95901,95906],{"__ignoreMap":32},[37,95892,95893],{"class":39,"line":40},[37,95894,95895],{"class":54},"random.normal(loc,scale,size)也可以生成正态分布\n",[37,95897,95898],{"class":39,"line":47},[37,95899,95900],{"class":43},"#loc:期望\n",[37,95902,95903],{"class":39,"line":58},[37,95904,95905],{"class":43},"#scale:方差\n",[37,95907,95908],{"class":39,"line":64},[37,95909,95910],{"class":43},"#size:用于确定是几维的数列\n",[14,95912,95913],{},[119,95914],{"alt":32,"src":95915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[146,95917,95919],{"id":95918},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,95921,95922],{},"ndim:秩，维度个数",[14,95924,95925],{},"size:数组元素的个数",[14,95927,95928],{},"shape:数组的形状",[14,95930,95931],{},"dtype:数组元素的类型",[14,95933,95934],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,95936,95937],{},"他们都是属性，通过数组.属性的形式来确定",[14,95939,95940],{},"如果需要输出多个可以通过以下方式：",[27,95942,95944],{"className":29,"code":95943,"language":31,"meta":32,"style":32},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[34,95945,95946],{"__ignoreMap":32},[37,95947,95948,95950],{"class":39,"line":40},[37,95949,30485],{"class":82},[37,95951,95952],{"class":54},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[146,95954,95956],{"id":95955},"_26-其他方式创建数组","2.6 其他方式创建数组",[175,95958,95960],{"id":95959},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,95962,95963],{},"①创建一维数组",[27,95965,95967],{"className":29,"code":95966,"language":31,"meta":32,"style":32},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[34,95968,95969,95978,95982,95987,95992],{"__ignoreMap":32},[37,95970,95971,95974,95976],{"class":39,"line":40},[37,95972,95973],{"class":54},"np.zeros(",[37,95975,650],{"class":82},[37,95977,214],{"class":54},[37,95979,95980],{"class":39,"line":47},[37,95981,95745],{"class":309},[37,95983,95984],{"class":39,"line":58},[37,95985,95986],{"class":309},"输出结果：\n",[37,95988,95989],{"class":39,"line":64},[37,95990,95991],{"class":309},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[37,95993,95994],{"class":39,"line":76},[37,95995,95745],{"class":309},[14,95997,95998],{},"上方代码等价于：",[27,96000,96002],{"className":29,"code":96001,"language":31,"meta":32,"style":32},"np.zeros(shape=(10))#创建10个元素的0数组\n",[34,96003,96004],{"__ignoreMap":32},[37,96005,96006,96008,96011,96013,96015,96017,96019],{"class":39,"line":40},[37,96007,95973],{"class":54},[37,96009,96010],{"class":5288},"shape",[37,96012,70],{"class":50},[37,96014,208],{"class":54},[37,96016,650],{"class":82},[37,96018,82839],{"class":54},[37,96020,96021],{"class":43},"#创建10个元素的0数组\n",[14,96023,96024],{},"也可以指定类型",[27,96026,96028],{"className":29,"code":96027,"language":31,"meta":32,"style":32},"#指定类型\nnp.zeros(5,dtype=int)\n",[34,96029,96030,96035],{"__ignoreMap":32},[37,96031,96032],{"class":39,"line":40},[37,96033,96034],{"class":43},"#指定类型\n",[37,96036,96037,96039,96041,96043,96045,96047,96049],{"class":39,"line":47},[37,96038,95973],{"class":54},[37,96040,524],{"class":82},[37,96042,583],{"class":54},[37,96044,93568],{"class":5288},[37,96046,70],{"class":50},[37,96048,211],{"class":82},[37,96050,214],{"class":54},[14,96052,96053],{},"②创建二维数组",[27,96055,96057],{"className":29,"code":96056,"language":31,"meta":32,"style":32},"np.zeros((3,4),dtype=int)\n",[34,96058,96059],{"__ignoreMap":32},[37,96060,96061,96064,96066,96068,96070,96072,96074,96076,96078],{"class":39,"line":40},[37,96062,96063],{"class":54},"np.zeros((",[37,96065,276],{"class":82},[37,96067,583],{"class":54},[37,96069,498],{"class":82},[37,96071,42325],{"class":54},[37,96073,93568],{"class":5288},[37,96075,70],{"class":50},[37,96077,211],{"class":82},[37,96079,214],{"class":54},[14,96081,96082],{},"③创建三维数组",[27,96084,96086],{"className":29,"code":96085,"language":31,"meta":32,"style":32},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[34,96087,96088,96093],{"__ignoreMap":32},[37,96089,96090],{"class":39,"line":40},[37,96091,96092],{"class":43},"#创建三维数组\n",[37,96094,96095,96097,96099,96101,96103,96105,96107,96109,96111,96113,96115],{"class":39,"line":47},[37,96096,96063],{"class":54},[37,96098,276],{"class":82},[37,96100,583],{"class":54},[37,96102,498],{"class":82},[37,96104,583],{"class":54},[37,96106,524],{"class":82},[37,96108,42325],{"class":54},[37,96110,93568],{"class":5288},[37,96112,70],{"class":50},[37,96114,211],{"class":82},[37,96116,214],{"class":54},[14,96118,96119],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[27,96121,96123],{"className":29,"code":96122,"language":31,"meta":32,"style":32},"#使用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",[34,96124,96125,96130,96145,96150,96155,96177],{"__ignoreMap":32},[37,96126,96127],{"class":39,"line":40},[37,96128,96129],{"class":43},"#使用zeros_like将创建的一维数组变成全0的数组\n",[37,96131,96132,96134,96136,96138,96140,96142],{"class":39,"line":47},[37,96133,443],{"class":54},[37,96135,70],{"class":50},[37,96137,93070],{"class":54},[37,96139,498],{"class":82},[37,96141,86],{"class":54},[37,96143,96144],{"class":43},"#这个得到的结果：一维数组0，1，2，3\n",[37,96146,96147],{"class":39,"line":58},[37,96148,96149],{"class":54},"np.zeros_like(a)\n",[37,96151,96152],{"class":39,"line":64},[37,96153,96154],{"class":43},"#使用zeros_like将创建的二维数组变成全0的数组\n",[37,96156,96157,96159,96161,96163,96165,96167,96169,96171,96173,96175],{"class":39,"line":76},[37,96158,93374],{"class":54},[37,96160,70],{"class":50},[37,96162,95474],{"class":54},[37,96164,31566],{"class":5288},[37,96166,70],{"class":50},[37,96168,208],{"class":54},[37,96170,498],{"class":82},[37,96172,583],{"class":54},[37,96174,524],{"class":82},[37,96176,30567],{"class":54},[37,96178,96179],{"class":39,"line":92},[37,96180,96181],{"class":54},"np.zeros_like(aa)\n",[175,96183,96185],{"id":96184},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96187,96188],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[175,96190,96192],{"id":96191},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96194,96195],{},"①empty()用法",[27,96197,96199],{"className":29,"code":96198,"language":31,"meta":32,"style":32},"numpy.empty(shape,dtype=float,order='c')\n",[34,96200,96201],{"__ignoreMap":32},[37,96202,96203,96206,96208,96210,96212,96214,96216,96218,96220],{"class":39,"line":40},[37,96204,96205],{"class":54},"numpy.empty(shape,",[37,96207,93568],{"class":5288},[37,96209,70],{"class":50},[37,96211,247],{"class":82},[37,96213,583],{"class":54},[37,96215,95344],{"class":5288},[37,96217,70],{"class":50},[37,96219,76096],{"class":309},[37,96221,214],{"class":54},[14,96223,96224],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96226,96227],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96229,96230],{},[119,96231],{"alt":32,"src":96232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96234,96235],{},"②empty()用法",[27,96237,96239],{"className":29,"code":96238,"language":31,"meta":32,"style":32},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[34,96240,96241,96262,96274,96295,96300],{"__ignoreMap":32},[37,96242,96243,96245,96247,96250,96252,96254,96256,96258,96260],{"class":39,"line":40},[37,96244,1048],{"class":54},[37,96246,70],{"class":50},[37,96248,96249],{"class":54},"np.empty(",[37,96251,650],{"class":82},[37,96253,583],{"class":54},[37,96255,93568],{"class":5288},[37,96257,70],{"class":50},[37,96259,211],{"class":82},[37,96261,214],{"class":54},[37,96263,96264,96266,96268,96270,96272],{"class":39,"line":47},[37,96265,1023],{"class":54},[37,96267,70],{"class":50},[37,96269,93070],{"class":54},[37,96271,524],{"class":82},[37,96273,214],{"class":54},[37,96275,96276,96279,96281,96284,96286,96288,96291,96293],{"class":39,"line":58},[37,96277,96278],{"class":54},"np.add(",[37,96280,282],{"class":82},[37,96282,96283],{"class":54},",x,",[37,96285,93122],{"class":5288},[37,96287,70],{"class":50},[37,96289,96290],{"class":54},"y[:",[37,96292,524],{"class":82},[37,96294,4729],{"class":54},[37,96296,96297],{"class":39,"line":64},[37,96298,96299],{"class":43},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[37,96301,96302],{"class":39,"line":76},[37,96303,96304],{"class":54},"y\n",[14,96306,11586],{},[14,96308,96309],{},[119,96310],{"alt":32,"src":96311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[27,96313,96315],{"className":29,"code":96314,"language":31,"meta":32,"style":32},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[34,96316,96317,96333,96353,96368],{"__ignoreMap":32},[37,96318,96319,96321,96323,96325,96327,96329,96331],{"class":39,"line":40},[37,96320,1023],{"class":54},[37,96322,70],{"class":50},[37,96324,93070],{"class":54},[37,96326,422],{"class":82},[37,96328,583],{"class":54},[37,96330,549],{"class":82},[37,96332,214],{"class":54},[37,96334,96335,96337,96339,96341,96343,96345,96347,96349,96351],{"class":39,"line":47},[37,96336,1048],{"class":54},[37,96338,70],{"class":50},[37,96340,96249],{"class":54},[37,96342,524],{"class":82},[37,96344,583],{"class":54},[37,96346,93568],{"class":5288},[37,96348,70],{"class":50},[37,96350,211],{"class":82},[37,96352,214],{"class":54},[37,96354,96355,96358,96360,96362,96364,96366],{"class":39,"line":58},[37,96356,96357],{"class":54},"np.add(x,",[37,96359,282],{"class":82},[37,96361,583],{"class":54},[37,96363,93122],{"class":5288},[37,96365,70],{"class":50},[37,96367,93517],{"class":54},[37,96369,96370],{"class":39,"line":64},[37,96371,96372],{"class":43},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96374,96375],{},"③empty_like()",[14,96377,96378],{},[354,96379,96380,96381,96386],{},"创建一个",[354,96382,96383],{},[354,96384,96385],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96388,96389,96392],{},[34,96390,96391],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96394,96395],{},[119,96396],{"alt":32,"src":96397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[175,96399,96401],{"id":96400},"_264-用法","2.6.4 ？？用法",[14,96403,96404],{},"当想查看一个函数的参数时，可以通过？？来实现",[27,96406,96408],{"className":29,"code":96407,"language":31,"meta":32,"style":32},"np.full??\n",[34,96409,96410],{"__ignoreMap":32},[37,96411,96412,96415],{"class":39,"line":40},[37,96413,96414],{"class":54},"np.full",[37,96416,96417],{"class":77471},"??\n",[175,96419,96421],{"id":96420},"_265-full创建数组","2.6.5 full()创建数组",[27,96423,96425],{"className":29,"code":96424,"language":31,"meta":32,"style":32},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[34,96426,96427,96432],{"__ignoreMap":32},[37,96428,96429],{"class":39,"line":40},[37,96430,96431],{"class":54},"full(shape,fill_value)\n",[37,96433,96434],{"class":39,"line":47},[37,96435,96436],{"class":54},"创建全为某个指定值的数组\n",[14,96438,94598],{},[27,96440,96442],{"className":29,"code":96441,"language":31,"meta":32,"style":32},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[34,96443,96444,96449],{"__ignoreMap":32},[37,96445,96446],{"class":39,"line":40},[37,96447,96448],{"class":43},"#创建一个一维数组,以20进行填充\n",[37,96450,96451,96454,96456,96458,96460],{"class":39,"line":47},[37,96452,96453],{"class":54},"np.full(",[37,96455,650],{"class":82},[37,96457,583],{"class":54},[37,96459,903],{"class":82},[37,96461,214],{"class":54},[14,96463,93359],{},[27,96465,96467],{"className":29,"code":96466,"language":31,"meta":32,"style":32},"#创建二维数组\nnp.full((3,5),11)\n",[34,96468,96469,96473],{"__ignoreMap":32},[37,96470,96471],{"class":39,"line":40},[37,96472,94015],{"class":43},[37,96474,96475,96478,96480,96482,96484,96486,96488],{"class":39,"line":47},[37,96476,96477],{"class":54},"np.full((",[37,96479,276],{"class":82},[37,96481,583],{"class":54},[37,96483,524],{"class":82},[37,96485,42325],{"class":54},[37,96487,676],{"class":82},[37,96489,214],{"class":54},[14,96491,96492],{},"③full_like用法",[14,96494,96495],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,96497,96498],{},"这里是指定填充而已",[27,96500,96502],{"className":29,"code":96501,"language":31,"meta":32,"style":32},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[34,96503,96504,96509,96533,96538],{"__ignoreMap":32},[37,96505,96506],{"class":39,"line":40},[37,96507,96508],{"class":43},"#创建一个指定形状数组\n",[37,96510,96511,96513,96515,96517,96519,96521,96523,96525,96527,96529,96531],{"class":39,"line":47},[37,96512,443],{"class":54},[37,96514,70],{"class":50},[37,96516,93070],{"class":54},[37,96518,422],{"class":82},[37,96520,583],{"class":54},[37,96522,530],{"class":82},[37,96524,93075],{"class":54},[37,96526,498],{"class":82},[37,96528,583],{"class":54},[37,96530,625],{"class":82},[37,96532,214],{"class":54},[37,96534,96535],{"class":39,"line":58},[37,96536,96537],{"class":43},"#进行指定填充\n",[37,96539,96540,96543,96545],{"class":39,"line":64},[37,96541,96542],{"class":54},"np.full_like(a,",[37,96544,650],{"class":82},[37,96546,214],{"class":54},[14,96548,11586],{},[14,96550,96551],{},[119,96552],{"alt":32,"src":96553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[175,96555,96557],{"id":96556},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22070,96559,96561],{"id":96560},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[27,96563,96565],{"className":29,"code":96564,"language":31,"meta":32,"style":32},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[34,96566,96567,96584],{"__ignoreMap":32},[37,96568,96569,96572,96574,96576,96578,96580,96582],{"class":39,"line":40},[37,96570,96571],{"class":54},"np.eye(",[37,96573,498],{"class":82},[37,96575,583],{"class":54},[37,96577,93568],{"class":5288},[37,96579,70],{"class":50},[37,96581,211],{"class":82},[37,96583,214],{"class":54},[37,96585,96586],{"class":39,"line":47},[37,96587,96588],{"class":43},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22070,96590,96592],{"id":96591},"_2662-法2identity","2.6.6.2 法2：identity()",[27,96594,96596],{"className":29,"code":96595,"language":31,"meta":32,"style":32},"#identity()\nnp.identity(5,dtype=int)\n",[34,96597,96598,96603],{"__ignoreMap":32},[37,96599,96600],{"class":39,"line":40},[37,96601,96602],{"class":43},"#identity()\n",[37,96604,96605,96608,96610,96612,96614,96616,96618],{"class":39,"line":47},[37,96606,96607],{"class":54},"np.identity(",[37,96609,524],{"class":82},[37,96611,583],{"class":54},[37,96613,93568],{"class":5288},[37,96615,70],{"class":50},[37,96617,211],{"class":82},[37,96619,214],{"class":54},[14,96621,96622],{},"两个函数是有区别的",[14,96624,96625],{},[119,96626],{"alt":32,"src":96627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,96629,96630],{},[119,96631],{"alt":32,"src":96632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[27,96634,96636],{"className":29,"code":96635,"language":31,"meta":32,"style":32},"# 创建一个 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",[34,96637,96638,96643,96655,96660,96665,96670,96675,96679,96684,96704,96708,96713,96718],{"__ignoreMap":32},[37,96639,96640],{"class":39,"line":40},[37,96641,96642],{"class":43},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[37,96644,96645,96647,96649,96651,96653],{"class":39,"line":47},[37,96646,96571],{"class":54},[37,96648,276],{"class":82},[37,96650,12507],{"class":54},[37,96652,498],{"class":82},[37,96654,214],{"class":54},[37,96656,96657],{"class":39,"line":58},[37,96658,96659],{"class":43},"# 输出:\n",[37,96661,96662],{"class":39,"line":64},[37,96663,96664],{"class":43},"# [[1. 0. 0. 0.]\n",[37,96666,96667],{"class":39,"line":76},[37,96668,96669],{"class":43},"#  [0. 1. 0. 0.]\n",[37,96671,96672],{"class":39,"line":92},[37,96673,96674],{"class":43},"#  [0. 0. 1. 0.]]\n",[37,96676,96677],{"class":39,"line":97},[37,96678,2472],{"emptyLinePlaceholder":131},[37,96680,96681],{"class":39,"line":107},[37,96682,96683],{"class":43},"# 对角线向上偏移1\n",[37,96685,96686,96688,96690,96692,96694,96696,96698,96700,96702],{"class":39,"line":1390},[37,96687,96571],{"class":54},[37,96689,276],{"class":82},[37,96691,12507],{"class":54},[37,96693,498],{"class":82},[37,96695,12507],{"class":54},[37,96697,697],{"class":5288},[37,96699,70],{"class":50},[37,96701,422],{"class":82},[37,96703,214],{"class":54},[37,96705,96706],{"class":39,"line":1402},[37,96707,96659],{"class":43},[37,96709,96710],{"class":39,"line":1684},[37,96711,96712],{"class":43},"# [[0. 1. 0. 0.]\n",[37,96714,96715],{"class":39,"line":1689},[37,96716,96717],{"class":43},"#  [0. 0. 1. 0.]\n",[37,96719,96720],{"class":39,"line":1695},[37,96721,96722],{"class":43},"#  [0. 0. 0. 1.]]\n",[175,96724,96726],{"id":96725},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[27,96728,96730],{"className":29,"code":96729,"language":31,"meta":32,"style":32},"#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",[34,96731,96732,96737,96741,96746,96751,96756,96761,96766,96771,96776,96781],{"__ignoreMap":32},[37,96733,96734],{"class":39,"line":40},[37,96735,96736],{"class":43},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[37,96738,96739],{"class":39,"line":47},[37,96740,95745],{"class":309},[37,96742,96743],{"class":39,"line":58},[37,96744,96745],{"class":309},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[37,96747,96748],{"class":39,"line":64},[37,96749,96750],{"class":309},"参数介绍：\n",[37,96752,96753],{"class":39,"line":76},[37,96754,96755],{"class":309},"start：序列的起始值\n",[37,96757,96758],{"class":39,"line":92},[37,96759,96760],{"class":309},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[37,96762,96763],{"class":39,"line":97},[37,96764,96765],{"class":309},"num：要生长的等步长的样本数量，默认为50\n",[37,96767,96768],{"class":39,"line":107},[37,96769,96770],{"class":309},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[37,96772,96773],{"class":39,"line":1390},[37,96774,96775],{"class":309},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[37,96777,96778],{"class":39,"line":1402},[37,96779,96780],{"class":309},"dtype：ndarry的数据类型\n",[37,96782,96783],{"class":39,"line":1684},[37,96784,95745],{"class":309},[14,96786,96787],{},[119,96788],{"alt":32,"src":96789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,96791,96792],{},"这里num=是可以省略的",[14,96794,96795],{},"也就是下方两行代码结果是一模一样的",[27,96797,96799],{"className":29,"code":96798,"language":31,"meta":32,"style":32},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[34,96800,96801,96818],{"__ignoreMap":32},[37,96802,96803,96806,96808,96810,96812,96814,96816],{"class":39,"line":40},[37,96804,96805],{"class":54},"np.linspace(",[37,96807,422],{"class":82},[37,96809,583],{"class":54},[37,96811,524],{"class":82},[37,96813,583],{"class":54},[37,96815,524],{"class":82},[37,96817,214],{"class":54},[37,96819,96820,96822,96824,96826,96828,96830,96832,96834,96836],{"class":39,"line":47},[37,96821,96805],{"class":54},[37,96823,422],{"class":82},[37,96825,583],{"class":54},[37,96827,524],{"class":82},[37,96829,583],{"class":54},[37,96831,1737],{"class":5288},[37,96833,70],{"class":50},[37,96835,524],{"class":82},[37,96837,214],{"class":54},[175,96839,96841],{"id":96840},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[27,96843,96845],{"className":29,"code":96844,"language":31,"meta":32,"style":32},"#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",[34,96846,96847,96852,96856,96861,96866,96871,96876,96880,96885,96890,96894],{"__ignoreMap":32},[37,96848,96849],{"class":39,"line":40},[37,96850,96851],{"class":43},"#logspace函数用于创建一个等比数列，格式如下：\n",[37,96853,96854],{"class":39,"line":47},[37,96855,95745],{"class":309},[37,96857,96858],{"class":39,"line":58},[37,96859,96860],{"class":309},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[37,96862,96863],{"class":39,"line":64},[37,96864,96865],{"class":309},"参数为：\n",[37,96867,96868],{"class":39,"line":76},[37,96869,96870],{"class":309},"start:序列的起始位置为：base**start\n",[37,96872,96873],{"class":39,"line":92},[37,96874,96875],{"class":309},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[37,96877,96878],{"class":39,"line":97},[37,96879,96765],{"class":309},[37,96881,96882],{"class":39,"line":107},[37,96883,96884],{"class":309},"endpoint：是否包含 stop 这个值，默认是 True\n",[37,96886,96887],{"class":39,"line":1390},[37,96888,96889],{"class":309},"base：对数的底数，默认是 10（常见对数）\n",[37,96891,96892],{"class":39,"line":1402},[37,96893,96780],{"class":309},[37,96895,96896],{"class":39,"line":1684},[37,96897,95745],{"class":309},[14,96899,96900],{},[119,96901],{"alt":32,"src":96902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,96904,96905],{},"logspace()函数中的num参数也是可以不写num=的",[14,96907,96908],{},"endpoint是不可以省略的",[123,96910,96911],{},"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":32,"searchDepth":47,"depth":47,"links":96913},[96914,96918,96923,96927,96931,96932],{"id":95303,"depth":47,"text":95304,"children":96915},[96916,96917],{"id":95307,"depth":58,"text":95308},{"id":95380,"depth":58,"text":95381},{"id":95412,"depth":47,"text":95413,"children":96919},[96920,96921,96922],{"id":95416,"depth":58,"text":95417},{"id":95598,"depth":58,"text":95599},{"id":95676,"depth":58,"text":95677},{"id":95711,"depth":47,"text":95712,"children":96924},[96925,96926],{"id":95715,"depth":58,"text":95716},{"id":95772,"depth":58,"text":95773},{"id":95868,"depth":47,"text":95869,"children":96928},[96929,96930],{"id":95872,"depth":58,"text":95873},{"id":95884,"depth":58,"text":95885},{"id":95918,"depth":47,"text":95919},{"id":95955,"depth":47,"text":95956,"children":96933},[96934,96935,96936,96937,96938,96939,96940,96941],{"id":95959,"depth":58,"text":95960},{"id":96184,"depth":58,"text":96185},{"id":96191,"depth":58,"text":96192},{"id":96400,"depth":58,"text":96401},{"id":96420,"depth":58,"text":96421},{"id":96556,"depth":58,"text":96557},{"id":96725,"depth":58,"text":96726},{"id":96840,"depth":58,"text":96841},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95295,"description":128},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96948,"title":96949,"body":96950,"description":128,"extension":129,"meta":97043,"navigation":131,"path":97044,"seo":97045,"stem":97046,"__hash__":97047},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96951,"toc":97041},[96952,96955,96958,96961,96964,96967,96970,96973,96976,96979,96982,96985,96987,96990,96993,96998,97001,97004,97038],[10,96953,96949],{"id":96954},"_20魔法命令mprun",[14,96956,96957],{},"逐行分析数据内存的使用情况",[14,96959,96960],{},"语法格式：",[14,96962,96963],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,96965,96966],{},"分析结果列如下：",[14,96968,96969],{},"Line行号",[14,96971,96972],{},"Mem usage内存使用大小",[14,96974,96975],{},"increment内存增量",[14,96977,96978],{},"Line content代码内容",[14,96980,96981],{},"补充说明：",[14,96983,96984],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,96986,95250],{},[14,96988,96989],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,96991,96992],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,96994,96995],{},[119,96996],{"alt":32,"src":96997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,96999,97000],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,97002,97003],{},"这时候需要重新加载模块",[27,97005,97007],{"className":29,"code":97006,"language":31,"meta":32,"style":32},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[34,97008,97009,97014,97021,97026],{"__ignoreMap":32},[37,97010,97011],{"class":39,"line":40},[37,97012,97013],{"class":43},"#重新加载模块\n",[37,97015,97016,97018],{"class":39,"line":47},[37,97017,51],{"class":50},[37,97019,97020],{"class":54}," importlib\n",[37,97022,97023],{"class":39,"line":58},[37,97024,97025],{"class":54},"importlib.reload(mprun_test)\n",[37,97027,97028,97030,97033,97035],{"class":39,"line":64},[37,97029,533],{"class":50},[37,97031,97032],{"class":54},"mprun ",[37,97034,112],{"class":50},[37,97036,97037],{"class":54},"f mprun_test.fun_test mprun_test.fun_test()\n",[123,97039,97040],{},"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":32,"searchDepth":47,"depth":47,"links":97042},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96949,"description":128},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97049,"title":97050,"body":97051,"description":128,"extension":129,"meta":97068,"navigation":131,"path":97069,"seo":97070,"stem":97071,"__hash__":97072},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97052,"toc":97066},[97053,97056,97061],[10,97054,97050],{"id":97055},"_3一维数组的索引和切片",[14,97057,97058],{},[119,97059],{"alt":32,"src":97060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,97062,97063],{},[119,97064],{"alt":32,"src":97065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":32,"searchDepth":47,"depth":47,"links":97067},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97050,"description":128},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97074,"title":97075,"body":97076,"description":128,"extension":129,"meta":97559,"navigation":131,"path":97560,"seo":97561,"stem":97562,"__hash__":97563},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97077,"toc":97557},[97078,97081,97084,97089,97122,97125,97163,97166,97200,97203,97308,97311,97348,97351,97452,97455,97506,97509,97551,97554],[10,97079,97075],{"id":97080},"_4二维数组的索引与切片",[14,97082,97083],{},"①获取指定单个元素",[14,97085,97086],{},[119,97087],{"alt":32,"src":97088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[27,97090,97092],{"className":29,"code":97091,"language":31,"meta":32,"style":32},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[34,97093,97094,97099,97104,97109],{"__ignoreMap":32},[37,97095,97096],{"class":39,"line":40},[37,97097,97098],{"class":43},"#获取元素9\n",[37,97100,97101],{"class":39,"line":47},[37,97102,97103],{"class":43},"#先获取所在行，再获取所在列\n",[37,97105,97106],{"class":39,"line":58},[37,97107,97108],{"class":43},"#数组[行索引号，列索引号]\n",[37,97110,97111,97114,97116,97118,97120],{"class":39,"line":64},[37,97112,97113],{"class":54},"a[",[37,97115,422],{"class":82},[37,97117,583],{"class":54},[37,97119,282],{"class":82},[37,97121,33315],{"class":54},[14,97123,97124],{},"②获取整行元素",[27,97126,97128],{"className":29,"code":97127,"language":31,"meta":32,"style":32},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[34,97129,97130,97135,97140,97148,97153],{"__ignoreMap":32},[37,97131,97132],{"class":39,"line":40},[37,97133,97134],{"class":43},"#获取整行 数组[行索引号]\n",[37,97136,97137],{"class":39,"line":47},[37,97138,97139],{"class":43},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[37,97141,97142,97144,97146],{"class":39,"line":58},[37,97143,97113],{"class":54},[37,97145,282],{"class":82},[37,97147,33315],{"class":54},[37,97149,97150],{"class":39,"line":64},[37,97151,97152],{"class":43},"#也可以负索引获取一行\n",[37,97154,97155,97157,97159,97161],{"class":39,"line":76},[37,97156,97113],{"class":54},[37,97158,112],{"class":50},[37,97160,422],{"class":82},[37,97162,33315],{"class":54},[14,97164,97165],{},"③获取整列元素",[27,97167,97169],{"className":29,"code":97168,"language":31,"meta":32,"style":32},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[34,97170,97171,97176,97185,97190],{"__ignoreMap":32},[37,97172,97173],{"class":39,"line":40},[37,97174,97175],{"class":43},"#获取整列 数组名[:,列索引]\n",[37,97177,97178,97181,97183],{"class":39,"line":47},[37,97179,97180],{"class":54},"a[:,",[37,97182,282],{"class":82},[37,97184,33315],{"class":54},[37,97186,97187],{"class":39,"line":58},[37,97188,97189],{"class":43},"#也可以负索引获取一列\n",[37,97191,97192,97194,97196,97198],{"class":39,"line":64},[37,97193,97180],{"class":54},[37,97195,112],{"class":50},[37,97197,422],{"class":82},[37,97199,33315],{"class":54},[14,97201,97202],{},"④部分行部分列的元素",[27,97204,97206],{"className":29,"code":97205,"language":31,"meta":32,"style":32},"#部分行部分列 数组名[行切片，列切片]\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",[34,97207,97208,97213,97223,97227,97231,97236,97241,97245,97257,97261,97265,97270,97275,97280,97285,97289,97294],{"__ignoreMap":32},[37,97209,97210],{"class":39,"line":40},[37,97211,97212],{"class":43},"#部分行部分列 数组名[行切片，列切片]\n",[37,97214,97215,97218,97220],{"class":39,"line":47},[37,97216,97217],{"class":54},"a[:",[37,97219,282],{"class":82},[37,97221,97222],{"class":54},",:]\n",[37,97224,97225],{"class":39,"line":58},[37,97226,93632],{"class":43},[37,97228,97229],{"class":39,"line":64},[37,97230,93996],{"class":309},[37,97232,97233],{"class":39,"line":76},[37,97234,97235],{"class":309},"array([[ 1,  2,  3,  4,  5,  6],\n",[37,97237,97238],{"class":39,"line":92},[37,97239,97240],{"class":309},"       [ 7,  8,  9, 10, 11, 12]])\n",[37,97242,97243],{"class":39,"line":97},[37,97244,93996],{"class":309},[37,97246,97247,97249,97251,97253,97255],{"class":39,"line":107},[37,97248,97180],{"class":54},[37,97250,422],{"class":82},[37,97252,1062],{"class":54},[37,97254,498],{"class":82},[37,97256,33315],{"class":54},[37,97258,97259],{"class":39,"line":1390},[37,97260,93632],{"class":43},[37,97262,97263],{"class":39,"line":1402},[37,97264,93996],{"class":309},[37,97266,97267],{"class":39,"line":1684},[37,97268,97269],{"class":309},"array([[ 2,  3,  4],\n",[37,97271,97272],{"class":39,"line":1689},[37,97273,97274],{"class":309},"       [ 8,  9, 10],\n",[37,97276,97277],{"class":39,"line":1695},[37,97278,97279],{"class":309},"       [14, 15, 16],\n",[37,97281,97282],{"class":39,"line":1700},[37,97283,97284],{"class":309},"       [20, 21, 22]])\n",[37,97286,97287],{"class":39,"line":1714},[37,97288,93996],{"class":309},[37,97290,97291],{"class":39,"line":1719},[37,97292,97293],{"class":43},"#对列行同时进行切片，使用了step参数\n",[37,97295,97296,97299,97301,97304,97306],{"class":39,"line":1725},[37,97297,97298],{"class":54},"a[::",[37,97300,282],{"class":82},[37,97302,97303],{"class":54},",::",[37,97305,282],{"class":82},[37,97307,33315],{"class":54},[14,97309,97310],{},"⑤同时获取两个元素",[27,97312,97314],{"className":29,"code":97313,"language":31,"meta":32,"style":32},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[34,97315,97316,97321,97326],{"__ignoreMap":32},[37,97317,97318],{"class":39,"line":40},[37,97319,97320],{"class":43},"#同时获取第三行第二列，第四行第一列\n",[37,97322,97323],{"class":39,"line":47},[37,97324,97325],{"class":43},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[37,97327,97328,97331,97333,97335,97337,97339,97341,97343,97345],{"class":39,"line":58},[37,97329,97330],{"class":54},"a[(",[37,97332,282],{"class":82},[37,97334,583],{"class":54},[37,97336,276],{"class":82},[37,97338,42316],{"class":54},[37,97340,422],{"class":82},[37,97342,583],{"class":54},[37,97344,396],{"class":82},[37,97346,97347],{"class":54},")]\n",[14,97349,97350],{},"⑥切片，对行进行反向获取",[27,97352,97354],{"className":29,"code":97353,"language":31,"meta":32,"style":32},"#切片 对所有行进行反向获取\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",[34,97355,97356,97361,97371,97375,97379,97384,97389,97394,97399,97403,97408,97424,97428,97433,97438,97443,97448],{"__ignoreMap":32},[37,97357,97358],{"class":39,"line":40},[37,97359,97360],{"class":43},"#切片 对所有行进行反向获取\n",[37,97362,97363,97365,97367,97369],{"class":39,"line":47},[37,97364,97298],{"class":54},[37,97366,112],{"class":50},[37,97368,422],{"class":82},[37,97370,33315],{"class":54},[37,97372,97373],{"class":39,"line":58},[37,97374,93632],{"class":43},[37,97376,97377],{"class":39,"line":64},[37,97378,93996],{"class":309},[37,97380,97381],{"class":39,"line":76},[37,97382,97383],{"class":309},"array([[19, 20, 21, 22, 23, 24],\n",[37,97385,97386],{"class":39,"line":92},[37,97387,97388],{"class":309},"       [13, 14, 15, 16, 17, 18],\n",[37,97390,97391],{"class":39,"line":97},[37,97392,97393],{"class":309},"       [ 7,  8,  9, 10, 11, 12],\n",[37,97395,97396],{"class":39,"line":107},[37,97397,97398],{"class":309},"       [ 1,  2,  3,  4,  5,  6]])\n",[37,97400,97401],{"class":39,"line":1390},[37,97402,93996],{"class":309},[37,97404,97405],{"class":39,"line":1402},[37,97406,97407],{"class":43},"#对行列都进行反向切片获取\n",[37,97409,97410,97412,97414,97416,97418,97420,97422],{"class":39,"line":1684},[37,97411,97298],{"class":54},[37,97413,112],{"class":50},[37,97415,422],{"class":82},[37,97417,97303],{"class":54},[37,97419,112],{"class":50},[37,97421,422],{"class":82},[37,97423,33315],{"class":54},[37,97425,97426],{"class":39,"line":1689},[37,97427,93996],{"class":309},[37,97429,97430],{"class":39,"line":1695},[37,97431,97432],{"class":309},"array([[24, 23, 22, 21, 20, 19],\n",[37,97434,97435],{"class":39,"line":1700},[37,97436,97437],{"class":309},"       [18, 17, 16, 15, 14, 13],\n",[37,97439,97440],{"class":39,"line":1714},[37,97441,97442],{"class":309},"       [12, 11, 10,  9,  8,  7],\n",[37,97444,97445],{"class":39,"line":1719},[37,97446,97447],{"class":309},"       [ 6,  5,  4,  3,  2,  1]])\n",[37,97449,97450],{"class":39,"line":1725},[37,97451,93996],{"class":309},[14,97453,97454],{},"⑦修改元素",[27,97456,97458],{"className":29,"code":97457,"language":31,"meta":32,"style":32},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[34,97459,97460,97465,97483,97488],{"__ignoreMap":32},[37,97461,97462],{"class":39,"line":40},[37,97463,97464],{"class":43},"#获取前两行和前两列\n",[37,97466,97467,97470,97472,97474,97476,97479,97481],{"class":39,"line":47},[37,97468,97469],{"class":54},"sub_a",[37,97471,70],{"class":50},[37,97473,97217],{"class":54},[37,97475,282],{"class":82},[37,97477,97478],{"class":54},",:",[37,97480,282],{"class":82},[37,97482,33315],{"class":54},[37,97484,97485],{"class":39,"line":58},[37,97486,97487],{"class":43},"#修改sub_a第一个元素的值\n",[37,97489,97490,97493,97495,97497,97499,97501,97503],{"class":39,"line":64},[37,97491,97492],{"class":54},"sub_a[",[37,97494,396],{"class":82},[37,97496,583],{"class":54},[37,97498,396],{"class":82},[37,97500,1143],{"class":54},[37,97502,70],{"class":50},[37,97504,97505],{"class":82},"100\n",[14,97507,97508],{},"⑧数组复制copy()",[27,97510,97512],{"className":29,"code":97511,"language":31,"meta":32,"style":32},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[34,97513,97514,97519,97529,97534],{"__ignoreMap":32},[37,97515,97516],{"class":39,"line":40},[37,97517,97518],{"class":43},"#数组复制\n",[37,97520,97521,97524,97526],{"class":39,"line":47},[37,97522,97523],{"class":54},"copy_a",[37,97525,70],{"class":50},[37,97527,97528],{"class":54},"np.copy(sub_a)\n",[37,97530,97531],{"class":39,"line":58},[37,97532,97533],{"class":43},"#修改copy_a后不影响原数组\n",[37,97535,97536,97539,97541,97543,97545,97547,97549],{"class":39,"line":64},[37,97537,97538],{"class":54},"copy_a[",[37,97540,396],{"class":82},[37,97542,583],{"class":54},[37,97544,396],{"class":82},[37,97546,1143],{"class":54},[37,97548,70],{"class":50},[37,97550,97505],{"class":82},[14,97552,97553],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[123,97555,97556],{},"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":32,"searchDepth":47,"depth":47,"links":97558},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97075,"description":128},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97565,"title":97566,"body":97567,"description":128,"extension":129,"meta":98059,"navigation":131,"path":98060,"seo":98061,"stem":98062,"__hash__":98063},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97568,"toc":98051},[97569,97572,97576,97579,97582,97635,97638,97663,97666,97685,97705,97708,97724,97728,97774,97778,97820,97824,97827,97830,97833,97836,97839,97901,97961,97965,97968,98025,98029,98034,98043,98048],[10,97570,97566],{"id":97571},"_5改变数组的维度",[146,97573,97575],{"id":97574},"_51-使用reshape","5.1 使用reshape()",[14,97577,97578],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,97580,97581],{},"①一维数组转换为二维数组",[27,97583,97585],{"className":29,"code":97584,"language":31,"meta":32,"style":32},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[34,97586,97587,97603,97608,97613,97618],{"__ignoreMap":32},[37,97588,97589,97591,97593,97595,97597,97599,97601],{"class":39,"line":40},[37,97590,443],{"class":54},[37,97592,70],{"class":50},[37,97594,93070],{"class":54},[37,97596,422],{"class":82},[37,97598,583],{"class":54},[37,97600,727],{"class":82},[37,97602,214],{"class":54},[37,97604,97605],{"class":39,"line":47},[37,97606,97607],{"class":43},"#将一维数组进行转换\n",[37,97609,97610],{"class":39,"line":58},[37,97611,97612],{"class":43},"#注意点：元素个数不可以变\n",[37,97614,97615],{"class":39,"line":64},[37,97616,97617],{"class":43},"#转换维度要保持一致，不一致就异常！！！\n",[37,97619,97620,97622,97624,97627,97629,97631,97633],{"class":39,"line":76},[37,97621,93374],{"class":54},[37,97623,70],{"class":50},[37,97625,97626],{"class":54},"a.reshape(",[37,97628,282],{"class":82},[37,97630,583],{"class":54},[37,97632,549],{"class":82},[37,97634,214],{"class":54},[14,97636,97637],{},"②一维数组转换为三维数组",[27,97639,97641],{"className":29,"code":97640,"language":31,"meta":32,"style":32},"aaa=a.reshape(2,3,2)\n",[34,97642,97643],{"__ignoreMap":32},[37,97644,97645,97647,97649,97651,97653,97655,97657,97659,97661],{"class":39,"line":40},[37,97646,95568],{"class":54},[37,97648,70],{"class":50},[37,97650,97626],{"class":54},[37,97652,282],{"class":82},[37,97654,583],{"class":54},[37,97656,276],{"class":82},[37,97658,583],{"class":54},[37,97660,282],{"class":82},[37,97662,214],{"class":54},[14,97664,97665],{},"③二维数组转化为一维数组",[27,97667,97669],{"className":29,"code":97668,"language":31,"meta":32,"style":32},"#知道元素个数：\naa.reshape(12)\n",[34,97670,97671,97676],{"__ignoreMap":32},[37,97672,97673],{"class":39,"line":40},[37,97674,97675],{"class":43},"#知道元素个数：\n",[37,97677,97678,97681,97683],{"class":39,"line":47},[37,97679,97680],{"class":54},"aa.reshape(",[37,97682,702],{"class":82},[37,97684,214],{"class":54},[27,97686,97688],{"className":29,"code":97687,"language":31,"meta":32,"style":32},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[34,97689,97690,97695],{"__ignoreMap":32},[37,97691,97692],{"class":39,"line":40},[37,97693,97694],{"class":43},"#不知道元素个数，参数传递-1\n",[37,97696,97697,97699,97701,97703],{"class":39,"line":47},[37,97698,97680],{"class":54},[37,97700,112],{"class":50},[37,97702,422],{"class":82},[37,97704,214],{"class":54},[14,97706,97707],{},"④三维数组转换为一维数组",[27,97709,97711],{"className":29,"code":97710,"language":31,"meta":32,"style":32},"aaa.reshape(-1)\n",[34,97712,97713],{"__ignoreMap":32},[37,97714,97715,97718,97720,97722],{"class":39,"line":40},[37,97716,97717],{"class":54},"aaa.reshape(",[37,97719,112],{"class":50},[37,97721,422],{"class":82},[37,97723,214],{"class":54},[146,97725,97727],{"id":97726},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[27,97729,97731],{"className":29,"code":97730,"language":31,"meta":32,"style":32},"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",[34,97732,97733,97760,97765,97769],{"__ignoreMap":32},[37,97734,97735,97737,97739,97741,97743,97745,97747,97749,97751,97753,97755,97757],{"class":39,"line":40},[37,97736,93374],{"class":54},[37,97738,70],{"class":50},[37,97740,93070],{"class":54},[37,97742,422],{"class":82},[37,97744,583],{"class":54},[37,97746,727],{"class":82},[37,97748,93075],{"class":54},[37,97750,282],{"class":82},[37,97752,583],{"class":54},[37,97754,549],{"class":82},[37,97756,86],{"class":54},[37,97758,97759],{"class":43},"#转换为2行6列的数组\n",[37,97761,97762],{"class":39,"line":47},[37,97763,97764],{"class":54},"aa.revel()\n",[37,97766,97767],{"class":39,"line":58},[37,97768,93632],{"class":43},[37,97770,97771],{"class":39,"line":64},[37,97772,97773],{"class":43},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[146,97775,97777],{"id":97776},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[27,97779,97781],{"className":29,"code":97780,"language":31,"meta":32,"style":32},"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",[34,97782,97783,97807,97812,97816],{"__ignoreMap":32},[37,97784,97785,97787,97789,97791,97793,97795,97797,97799,97801,97803,97805],{"class":39,"line":40},[37,97786,93374],{"class":54},[37,97788,70],{"class":50},[37,97790,93070],{"class":54},[37,97792,422],{"class":82},[37,97794,583],{"class":54},[37,97796,727],{"class":82},[37,97798,93075],{"class":54},[37,97800,282],{"class":82},[37,97802,583],{"class":54},[37,97804,549],{"class":82},[37,97806,214],{"class":54},[37,97808,97809],{"class":39,"line":47},[37,97810,97811],{"class":54},"aa.flatten()\n",[37,97813,97814],{"class":39,"line":58},[37,97815,93632],{"class":43},[37,97817,97818],{"class":39,"line":64},[37,97819,97773],{"class":43},[146,97821,97823],{"id":97822},"_54-使用resize","5.4 使用resize()",[14,97825,97826],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,97828,97829],{},"通过resize方法可以改变数组的维度",[14,97831,97832],{},"#resize修改数组维度",[14,97834,97835],{},"#以元组的形式指定形状",[14,97837,97838],{},"#改变的是原数组",[27,97840,97842],{"className":29,"code":97841,"language":31,"meta":32,"style":32},"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",[34,97843,97844,97860,97880,97893,97897],{"__ignoreMap":32},[37,97845,97846,97848,97850,97852,97854,97856,97858],{"class":39,"line":40},[37,97847,443],{"class":54},[37,97849,70],{"class":50},[37,97851,93070],{"class":54},[37,97853,422],{"class":82},[37,97855,583],{"class":54},[37,97857,727],{"class":82},[37,97859,214],{"class":54},[37,97861,97862,97865,97867,97869,97871,97873,97875,97877],{"class":39,"line":47},[37,97863,97864],{"class":54},"a.shape",[37,97866,70],{"class":50},[37,97868,208],{"class":54},[37,97870,282],{"class":82},[37,97872,583],{"class":54},[37,97874,549],{"class":82},[37,97876,86],{"class":54},[37,97878,97879],{"class":43},"#改变了原数组\n",[37,97881,97882,97884,97886,97889,97891],{"class":39,"line":58},[37,97883,443],{"class":54},[37,97885,70],{"class":50},[37,97887,97888],{"class":54},"resize((",[37,97890,702],{"class":82},[37,97892,30567],{"class":54},[37,97894,97895],{"class":39,"line":64},[37,97896,93632],{"class":43},[37,97898,97899],{"class":39,"line":76},[37,97900,97773],{"class":43},[27,97902,97904],{"className":29,"code":97903,"language":31,"meta":32,"style":32},"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",[34,97905,97906,97919,97923,97927,97932,97937,97942,97947,97952,97957],{"__ignoreMap":32},[37,97907,97908,97911,97913,97915,97917],{"class":39,"line":40},[37,97909,97910],{"class":54},"a.resize((",[37,97912,549],{"class":82},[37,97914,583],{"class":54},[37,97916,282],{"class":82},[37,97918,30567],{"class":54},[37,97920,97921],{"class":39,"line":47},[37,97922,93632],{"class":43},[37,97924,97925],{"class":39,"line":58},[37,97926,93996],{"class":309},[37,97928,97929],{"class":39,"line":64},[37,97930,97931],{"class":309},"array([[ 1,  2],\n",[37,97933,97934],{"class":39,"line":76},[37,97935,97936],{"class":309},"       [ 3,  4],\n",[37,97938,97939],{"class":39,"line":92},[37,97940,97941],{"class":309},"       [ 5,  6],\n",[37,97943,97944],{"class":39,"line":97},[37,97945,97946],{"class":309},"       [ 7,  8],\n",[37,97948,97949],{"class":39,"line":107},[37,97950,97951],{"class":309},"       [ 9, 10],\n",[37,97953,97954],{"class":39,"line":1390},[37,97955,97956],{"class":309},"       [11, 12]])\n",[37,97958,97959],{"class":39,"line":1402},[37,97960,93996],{"class":309},[146,97962,97964],{"id":97963},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,97966,97967],{},"改变了原数组",[27,97969,97971],{"className":29,"code":97970,"language":31,"meta":32,"style":32},"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",[34,97972,97973,97989,98005,98009,98013,98017,98021],{"__ignoreMap":32},[37,97974,97975,97977,97979,97981,97983,97985,97987],{"class":39,"line":40},[37,97976,443],{"class":54},[37,97978,70],{"class":50},[37,97980,93070],{"class":54},[37,97982,422],{"class":82},[37,97984,583],{"class":54},[37,97986,727],{"class":82},[37,97988,214],{"class":54},[37,97990,97991,97993,97995,97997,97999,98001,98003],{"class":39,"line":47},[37,97992,97864],{"class":54},[37,97994,70],{"class":50},[37,97996,208],{"class":54},[37,97998,282],{"class":82},[37,98000,583],{"class":54},[37,98002,549],{"class":82},[37,98004,214],{"class":54},[37,98006,98007],{"class":39,"line":58},[37,98008,93632],{"class":43},[37,98010,98011],{"class":39,"line":64},[37,98012,93996],{"class":309},[37,98014,98015],{"class":39,"line":76},[37,98016,97235],{"class":309},[37,98018,98019],{"class":39,"line":92},[37,98020,97240],{"class":309},[37,98022,98023],{"class":39,"line":97},[37,98024,93996],{"class":309},[146,98026,98028],{"id":98027},"_56-重要比较","5.6 重要比较：",[14,98030,98031],{},[119,98032],{"alt":32,"src":98033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,98035,98036,98037,98039,98040,98042],{},"口诀：NumPy 函数要么用 ",[34,98038,96010],{},"，要么用 ",[34,98041,31566],{},"，创建结构用 shape，造数据用 size",[14,98044,98045],{},[119,98046],{"alt":32,"src":98047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[123,98049,98050],{},"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":32,"searchDepth":47,"depth":47,"links":98052},[98053,98054,98055,98056,98057,98058],{"id":97574,"depth":47,"text":97575},{"id":97726,"depth":47,"text":97727},{"id":97776,"depth":47,"text":97777},{"id":97822,"depth":47,"text":97823},{"id":97963,"depth":47,"text":97964},{"id":98027,"depth":47,"text":98028},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97566,"description":128},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98065,"title":98066,"body":98067,"description":128,"extension":129,"meta":99139,"navigation":131,"path":99140,"seo":99141,"stem":99142,"__hash__":99143},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98068,"toc":99133},[98069,98072,98076,98079,98082,98085,98150,98153,98193,98196,98278,98281,98286,98308,98310,98315,98320,98323,98326,98481,98484,98686,98690,98693,98696,98764,98766,98771,98774,98777,98857,98861,98864,98866,98939,98941,98946,98948,99028,99032,99035,99038,99041,99044,99047,99050,99130],[10,98070,98066],{"id":98071},"_6数组的拼接",[146,98073,98075],{"id":98074},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98077,98078],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98080,98081],{},"函数内部传两个数列构成的数列或者元组",[14,98083,98084],{},"①一维数组的拼接",[27,98086,98088],{"className":29,"code":98087,"language":31,"meta":32,"style":32},"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",[34,98089,98090,98110,98130,98135,98140,98145],{"__ignoreMap":32},[37,98091,98092,98094,98096,98098,98100,98102,98104,98106,98108],{"class":39,"line":40},[37,98093,443],{"class":54},[37,98095,70],{"class":50},[37,98097,93092],{"class":54},[37,98099,422],{"class":82},[37,98101,583],{"class":54},[37,98103,282],{"class":82},[37,98105,583],{"class":54},[37,98107,276],{"class":82},[37,98109,4729],{"class":54},[37,98111,98112,98114,98116,98118,98120,98122,98124,98126,98128],{"class":39,"line":47},[37,98113,468],{"class":54},[37,98115,70],{"class":50},[37,98117,93092],{"class":54},[37,98119,498],{"class":82},[37,98121,583],{"class":54},[37,98123,524],{"class":82},[37,98125,583],{"class":54},[37,98127,549],{"class":82},[37,98129,4729],{"class":54},[37,98131,98132],{"class":39,"line":58},[37,98133,98134],{"class":43},"#调用concatenate进行数组拼接\n",[37,98136,98137],{"class":39,"line":64},[37,98138,98139],{"class":54},"np.concatenate((a,b))\n",[37,98141,98142],{"class":39,"line":76},[37,98143,98144],{"class":43},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[37,98146,98147],{"class":39,"line":92},[37,98148,98149],{"class":43},"#np.concatenate([a,b])\n",[14,98151,98152],{},"②一维多个数组拼接",[27,98154,98156],{"className":29,"code":98155,"language":31,"meta":32,"style":32},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[34,98157,98158,98163,98183,98188],{"__ignoreMap":32},[37,98159,98160],{"class":39,"line":40},[37,98161,98162],{"class":43},"#也可以多个数组进行拼接\n",[37,98164,98165,98167,98169,98171,98173,98175,98177,98179,98181],{"class":39,"line":47},[37,98166,493],{"class":54},[37,98168,70],{"class":50},[37,98170,93092],{"class":54},[37,98172,650],{"class":82},[37,98174,583],{"class":54},[37,98176,676],{"class":82},[37,98178,583],{"class":54},[37,98180,727],{"class":82},[37,98182,4729],{"class":54},[37,98184,98185],{"class":39,"line":58},[37,98186,98187],{"class":54},"c\n",[37,98189,98190],{"class":39,"line":64},[37,98191,98192],{"class":54},"np.concatenate((a,b,c))\n",[14,98194,98195],{},"③二维数组拼接",[27,98197,98199],{"className":29,"code":98198,"language":31,"meta":32,"style":32},"#二维数组使用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",[34,98200,98201,98206,98230,98255,98260,98265],{"__ignoreMap":32},[37,98202,98203],{"class":39,"line":40},[37,98204,98205],{"class":43},"#二维数组使用concatenate进行拼接\n",[37,98207,98208,98210,98212,98214,98216,98218,98220,98222,98224,98226,98228],{"class":39,"line":47},[37,98209,93374],{"class":54},[37,98211,70],{"class":50},[37,98213,93070],{"class":54},[37,98215,422],{"class":82},[37,98217,583],{"class":54},[37,98219,727],{"class":82},[37,98221,93075],{"class":54},[37,98223,276],{"class":82},[37,98225,583],{"class":54},[37,98227,498],{"class":82},[37,98229,214],{"class":54},[37,98231,98232,98235,98237,98239,98241,98243,98245,98247,98249,98251,98253],{"class":39,"line":58},[37,98233,98234],{"class":54},"bb",[37,98236,70],{"class":50},[37,98238,93070],{"class":54},[37,98240,542],{"class":82},[37,98242,583],{"class":54},[37,98244,845],{"class":82},[37,98246,93075],{"class":54},[37,98248,276],{"class":82},[37,98250,583],{"class":54},[37,98252,498],{"class":82},[37,98254,214],{"class":54},[37,98256,98257],{"class":39,"line":64},[37,98258,98259],{"class":43},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[37,98261,98262],{"class":39,"line":76},[37,98263,98264],{"class":43},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[37,98266,98267,98270,98272,98274,98276],{"class":39,"line":92},[37,98268,98269],{"class":54},"np.concatenate((aa,bb),",[37,98271,47582],{"class":5288},[37,98273,70],{"class":50},[37,98275,396],{"class":82},[37,98277,214],{"class":54},[14,98279,98280],{},"结果：",[14,98282,98283],{},[119,98284],{"alt":32,"src":98285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[27,98287,98289],{"className":29,"code":98288,"language":31,"meta":32,"style":32},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[34,98290,98291,98296],{"__ignoreMap":32},[37,98292,98293],{"class":39,"line":40},[37,98294,98295],{"class":43},"#指定axis为1进行拼接\n",[37,98297,98298,98300,98302,98304,98306],{"class":39,"line":47},[37,98299,98269],{"class":54},[37,98301,47582],{"class":5288},[37,98303,70],{"class":50},[37,98305,422],{"class":82},[37,98307,214],{"class":54},[14,98309,98280],{},[14,98311,98312],{},[119,98313],{"alt":32,"src":98314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98316,98317],{},[354,98318,98319],{},"二维数组总结：0竖着方向，1横着方向",[14,98321,98322],{},"④三维数组拼接",[14,98324,98325],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[27,98327,98329],{"className":29,"code":98328,"language":31,"meta":32,"style":32},"#两个三行六列\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",[34,98330,98331,98336,98364,98394,98399,98416,98421,98426,98431,98448,98453,98458,98463,98476],{"__ignoreMap":32},[37,98332,98333],{"class":39,"line":40},[37,98334,98335],{"class":43},"#两个三行六列\n",[37,98337,98338,98340,98342,98344,98346,98348,98350,98352,98354,98356,98358,98360,98362],{"class":39,"line":47},[37,98339,95568],{"class":54},[37,98341,70],{"class":50},[37,98343,93070],{"class":54},[37,98345,422],{"class":82},[37,98347,583],{"class":54},[37,98349,530],{"class":82},[37,98351,93075],{"class":54},[37,98353,282],{"class":82},[37,98355,583],{"class":54},[37,98357,276],{"class":82},[37,98359,583],{"class":54},[37,98361,549],{"class":82},[37,98363,214],{"class":54},[37,98365,98366,98369,98371,98373,98375,98377,98380,98382,98384,98386,98388,98390,98392],{"class":39,"line":58},[37,98367,98368],{"class":54},"bbb",[37,98370,70],{"class":50},[37,98372,93070],{"class":54},[37,98374,542],{"class":82},[37,98376,583],{"class":54},[37,98378,98379],{"class":82},"137",[37,98381,93075],{"class":54},[37,98383,282],{"class":82},[37,98385,583],{"class":54},[37,98387,276],{"class":82},[37,98389,583],{"class":54},[37,98391,549],{"class":82},[37,98393,214],{"class":54},[37,98395,98396],{"class":39,"line":64},[37,98397,98398],{"class":43},"#axis=0\n",[37,98400,98401,98403,98405,98408,98410,98412,98414],{"class":39,"line":76},[37,98402,898],{"class":54},[37,98404,70],{"class":50},[37,98406,98407],{"class":54},"np.concatenate((aaa,bbb),",[37,98409,47582],{"class":5288},[37,98411,70],{"class":50},[37,98413,396],{"class":82},[37,98415,214],{"class":54},[37,98417,98418],{"class":39,"line":92},[37,98419,98420],{"class":54},"s.shape\n",[37,98422,98423],{"class":39,"line":97},[37,98424,98425],{"class":43},"#输出：(4,3,6)\n",[37,98427,98428],{"class":39,"line":107},[37,98429,98430],{"class":43},"#axis=1\n",[37,98432,98433,98436,98438,98440,98442,98444,98446],{"class":39,"line":1390},[37,98434,98435],{"class":54},"ss",[37,98437,70],{"class":50},[37,98439,98407],{"class":54},[37,98441,47582],{"class":5288},[37,98443,70],{"class":50},[37,98445,422],{"class":82},[37,98447,214],{"class":54},[37,98449,98450],{"class":39,"line":1402},[37,98451,98452],{"class":54},"ss.shape\n",[37,98454,98455],{"class":39,"line":1684},[37,98456,98457],{"class":43},"#输出：(2,6,6)\n",[37,98459,98460],{"class":39,"line":1689},[37,98461,98462],{"class":43},"#axis=2\n",[37,98464,98465,98467,98469,98471,98473],{"class":39,"line":1695},[37,98466,98407],{"class":54},[37,98468,47582],{"class":5288},[37,98470,70],{"class":50},[37,98472,282],{"class":82},[37,98474,98475],{"class":54},").shape\n",[37,98477,98478],{"class":39,"line":1700},[37,98479,98480],{"class":43},"#输出：（2，3，12）\n",[14,98482,98483],{},"⑤四维数组拼接",[27,98485,98487],{"className":29,"code":98486,"language":31,"meta":32,"style":32},"#两个三行六列\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",[34,98488,98489,98493,98521,98549,98574,98600,98604,98617,98622,98626,98638,98643,98647,98659,98664,98669,98681],{"__ignoreMap":32},[37,98490,98491],{"class":39,"line":40},[37,98492,98335],{"class":43},[37,98494,98495,98497,98499,98501,98503,98505,98507,98509,98511,98513,98515,98517,98519],{"class":39,"line":47},[37,98496,95568],{"class":54},[37,98498,70],{"class":50},[37,98500,93070],{"class":54},[37,98502,422],{"class":82},[37,98504,583],{"class":54},[37,98506,530],{"class":82},[37,98508,93075],{"class":54},[37,98510,282],{"class":82},[37,98512,583],{"class":54},[37,98514,276],{"class":82},[37,98516,583],{"class":54},[37,98518,549],{"class":82},[37,98520,214],{"class":54},[37,98522,98523,98525,98527,98529,98531,98533,98535,98537,98539,98541,98543,98545,98547],{"class":39,"line":58},[37,98524,98368],{"class":54},[37,98526,70],{"class":50},[37,98528,93070],{"class":54},[37,98530,542],{"class":82},[37,98532,583],{"class":54},[37,98534,98379],{"class":82},[37,98536,93075],{"class":54},[37,98538,282],{"class":82},[37,98540,583],{"class":54},[37,98542,276],{"class":82},[37,98544,583],{"class":54},[37,98546,549],{"class":82},[37,98548,214],{"class":54},[37,98550,98551,98554,98556,98558,98560,98562,98564,98566,98568,98570,98572],{"class":39,"line":64},[37,98552,98553],{"class":54},"aaaa",[37,98555,70],{"class":50},[37,98557,97717],{"class":54},[37,98559,282],{"class":82},[37,98561,583],{"class":54},[37,98563,276],{"class":82},[37,98565,583],{"class":54},[37,98567,276],{"class":82},[37,98569,583],{"class":54},[37,98571,282],{"class":82},[37,98573,214],{"class":54},[37,98575,98576,98579,98581,98584,98586,98588,98590,98592,98594,98596,98598],{"class":39,"line":76},[37,98577,98578],{"class":54},"bbbb",[37,98580,70],{"class":50},[37,98582,98583],{"class":54},"bbb.reshape(",[37,98585,282],{"class":82},[37,98587,583],{"class":54},[37,98589,276],{"class":82},[37,98591,583],{"class":54},[37,98593,276],{"class":82},[37,98595,583],{"class":54},[37,98597,282],{"class":82},[37,98599,214],{"class":54},[37,98601,98602],{"class":39,"line":92},[37,98603,98398],{"class":43},[37,98605,98606,98609,98611,98613,98615],{"class":39,"line":97},[37,98607,98608],{"class":54},"np.concatenate((aaaa,bbbb),",[37,98610,47582],{"class":5288},[37,98612,70],{"class":50},[37,98614,396],{"class":82},[37,98616,98475],{"class":54},[37,98618,98619],{"class":39,"line":107},[37,98620,98621],{"class":43},"#结果：（4，3，3，2）\n",[37,98623,98624],{"class":39,"line":1390},[37,98625,98430],{"class":43},[37,98627,98628,98630,98632,98634,98636],{"class":39,"line":1402},[37,98629,98608],{"class":54},[37,98631,47582],{"class":5288},[37,98633,70],{"class":50},[37,98635,422],{"class":82},[37,98637,98475],{"class":54},[37,98639,98640],{"class":39,"line":1684},[37,98641,98642],{"class":43},"#结果：（2，6，3，2）\n",[37,98644,98645],{"class":39,"line":1689},[37,98646,98462],{"class":43},[37,98648,98649,98651,98653,98655,98657],{"class":39,"line":1695},[37,98650,98608],{"class":54},[37,98652,47582],{"class":5288},[37,98654,70],{"class":50},[37,98656,282],{"class":82},[37,98658,98475],{"class":54},[37,98660,98661],{"class":39,"line":1700},[37,98662,98663],{"class":43},"#结果：（2，3，6，2）\n",[37,98665,98666],{"class":39,"line":1714},[37,98667,98668],{"class":43},"#axis=3\n",[37,98670,98671,98673,98675,98677,98679],{"class":39,"line":1719},[37,98672,98608],{"class":54},[37,98674,47582],{"class":5288},[37,98676,70],{"class":50},[37,98678,276],{"class":82},[37,98680,98475],{"class":54},[37,98682,98683],{"class":39,"line":1725},[37,98684,98685],{"class":43},"#结果：（2，3，3，4）\n",[146,98687,98689],{"id":98688},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,98691,98692],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,98694,98695],{},"①二维数组",[27,98697,98699],{"className":29,"code":98698,"language":31,"meta":32,"style":32},"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",[34,98700,98701,98725,98749,98754,98759],{"__ignoreMap":32},[37,98702,98703,98705,98707,98709,98711,98713,98715,98717,98719,98721,98723],{"class":39,"line":40},[37,98704,93374],{"class":54},[37,98706,70],{"class":50},[37,98708,93070],{"class":54},[37,98710,422],{"class":82},[37,98712,583],{"class":54},[37,98714,727],{"class":82},[37,98716,93075],{"class":54},[37,98718,276],{"class":82},[37,98720,583],{"class":54},[37,98722,498],{"class":82},[37,98724,214],{"class":54},[37,98726,98727,98729,98731,98733,98735,98737,98739,98741,98743,98745,98747],{"class":39,"line":47},[37,98728,98234],{"class":54},[37,98730,70],{"class":50},[37,98732,93070],{"class":54},[37,98734,542],{"class":82},[37,98736,583],{"class":54},[37,98738,845],{"class":82},[37,98740,93075],{"class":54},[37,98742,276],{"class":82},[37,98744,583],{"class":54},[37,98746,498],{"class":82},[37,98748,214],{"class":54},[37,98750,98751],{"class":39,"line":58},[37,98752,98753],{"class":54},"np.hstack((aa,bb))\n",[37,98755,98756],{"class":39,"line":64},[37,98757,98758],{"class":43},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[37,98760,98761],{"class":39,"line":76},[37,98762,98763],{"class":43},"#np.hstack([aa,bb])\n",[14,98765,98280],{},[14,98767,98768],{},[119,98769],{"alt":32,"src":98770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,98772,98773],{},"等效于concatenate()函数中axis=1时的情况",[14,98775,98776],{},"②三维数组",[27,98778,98780],{"className":29,"code":98779,"language":31,"meta":32,"style":32},"#两个三行六列\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",[34,98781,98782,98786,98814,98842,98847,98852],{"__ignoreMap":32},[37,98783,98784],{"class":39,"line":40},[37,98785,98335],{"class":43},[37,98787,98788,98790,98792,98794,98796,98798,98800,98802,98804,98806,98808,98810,98812],{"class":39,"line":47},[37,98789,95568],{"class":54},[37,98791,70],{"class":50},[37,98793,93070],{"class":54},[37,98795,422],{"class":82},[37,98797,583],{"class":54},[37,98799,530],{"class":82},[37,98801,93075],{"class":54},[37,98803,282],{"class":82},[37,98805,583],{"class":54},[37,98807,276],{"class":82},[37,98809,583],{"class":54},[37,98811,549],{"class":82},[37,98813,214],{"class":54},[37,98815,98816,98818,98820,98822,98824,98826,98828,98830,98832,98834,98836,98838,98840],{"class":39,"line":58},[37,98817,98368],{"class":54},[37,98819,70],{"class":50},[37,98821,93070],{"class":54},[37,98823,542],{"class":82},[37,98825,583],{"class":54},[37,98827,98379],{"class":82},[37,98829,93075],{"class":54},[37,98831,282],{"class":82},[37,98833,583],{"class":54},[37,98835,276],{"class":82},[37,98837,583],{"class":54},[37,98839,549],{"class":82},[37,98841,214],{"class":54},[37,98843,98844],{"class":39,"line":64},[37,98845,98846],{"class":43},"#使用hstack\n",[37,98848,98849],{"class":39,"line":76},[37,98850,98851],{"class":54},"np.hstack((aaa,bbb)).shape\n",[37,98853,98854],{"class":39,"line":92},[37,98855,98856],{"class":43},"#输出：（2，6，6）\n",[146,98858,98860],{"id":98859},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,98862,98863],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,98865,98695],{},[27,98867,98869],{"className":29,"code":98868,"language":31,"meta":32,"style":32},"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",[34,98870,98871,98895,98919,98924,98929,98934],{"__ignoreMap":32},[37,98872,98873,98875,98877,98879,98881,98883,98885,98887,98889,98891,98893],{"class":39,"line":40},[37,98874,93374],{"class":54},[37,98876,70],{"class":50},[37,98878,93070],{"class":54},[37,98880,422],{"class":82},[37,98882,583],{"class":54},[37,98884,727],{"class":82},[37,98886,93075],{"class":54},[37,98888,276],{"class":82},[37,98890,583],{"class":54},[37,98892,498],{"class":82},[37,98894,214],{"class":54},[37,98896,98897,98899,98901,98903,98905,98907,98909,98911,98913,98915,98917],{"class":39,"line":47},[37,98898,98234],{"class":54},[37,98900,70],{"class":50},[37,98902,93070],{"class":54},[37,98904,542],{"class":82},[37,98906,583],{"class":54},[37,98908,845],{"class":82},[37,98910,93075],{"class":54},[37,98912,276],{"class":82},[37,98914,583],{"class":54},[37,98916,498],{"class":82},[37,98918,214],{"class":54},[37,98920,98921],{"class":39,"line":58},[37,98922,98923],{"class":43},"#vstack 垂直方向进行堆叠\n",[37,98925,98926],{"class":39,"line":64},[37,98927,98928],{"class":54},"np.vstack((aa,bb))\n",[37,98930,98931],{"class":39,"line":76},[37,98932,98933],{"class":43},"#与hstack传的参数类似，等价于：\n",[37,98935,98936],{"class":39,"line":92},[37,98937,98938],{"class":54},"np.vstack([aa,bb])\n",[14,98940,98280],{},[14,98942,98943],{},[119,98944],{"alt":32,"src":98945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,98947,98776],{},[27,98949,98951],{"className":29,"code":98950,"language":31,"meta":32,"style":32},"#两个三行六列\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",[34,98952,98953,98957,98985,99013,99018,99023],{"__ignoreMap":32},[37,98954,98955],{"class":39,"line":40},[37,98956,98335],{"class":43},[37,98958,98959,98961,98963,98965,98967,98969,98971,98973,98975,98977,98979,98981,98983],{"class":39,"line":47},[37,98960,95568],{"class":54},[37,98962,70],{"class":50},[37,98964,93070],{"class":54},[37,98966,422],{"class":82},[37,98968,583],{"class":54},[37,98970,530],{"class":82},[37,98972,93075],{"class":54},[37,98974,282],{"class":82},[37,98976,583],{"class":54},[37,98978,276],{"class":82},[37,98980,583],{"class":54},[37,98982,549],{"class":82},[37,98984,214],{"class":54},[37,98986,98987,98989,98991,98993,98995,98997,98999,99001,99003,99005,99007,99009,99011],{"class":39,"line":58},[37,98988,98368],{"class":54},[37,98990,70],{"class":50},[37,98992,93070],{"class":54},[37,98994,542],{"class":82},[37,98996,583],{"class":54},[37,98998,98379],{"class":82},[37,99000,93075],{"class":54},[37,99002,282],{"class":82},[37,99004,583],{"class":54},[37,99006,276],{"class":82},[37,99008,583],{"class":54},[37,99010,549],{"class":82},[37,99012,214],{"class":54},[37,99014,99015],{"class":39,"line":64},[37,99016,99017],{"class":43},"#使用vstack\n",[37,99019,99020],{"class":39,"line":76},[37,99021,99022],{"class":54},"np.vstack((aaa,bbb)).shape\n",[37,99024,99025],{"class":39,"line":92},[37,99026,99027],{"class":43},"#输出：（4，3，6）\n",[146,99029,99031],{"id":99030},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,99033,99034],{},"该方法是三维数组特有的方法",[14,99036,99037],{},"也就是说",[14,99039,99040],{},"一维数组拼接方法用：concatenate()",[14,99042,99043],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,99045,99046],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,99048,99049],{},"四维数组及多维数组只能用concatenate进行拼接",[27,99051,99053],{"className":29,"code":99052,"language":31,"meta":32,"style":32},"#两个三行六列\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",[34,99054,99055,99059,99087,99115,99120,99125],{"__ignoreMap":32},[37,99056,99057],{"class":39,"line":40},[37,99058,98335],{"class":43},[37,99060,99061,99063,99065,99067,99069,99071,99073,99075,99077,99079,99081,99083,99085],{"class":39,"line":47},[37,99062,95568],{"class":54},[37,99064,70],{"class":50},[37,99066,93070],{"class":54},[37,99068,422],{"class":82},[37,99070,583],{"class":54},[37,99072,530],{"class":82},[37,99074,93075],{"class":54},[37,99076,282],{"class":82},[37,99078,583],{"class":54},[37,99080,276],{"class":82},[37,99082,583],{"class":54},[37,99084,549],{"class":82},[37,99086,214],{"class":54},[37,99088,99089,99091,99093,99095,99097,99099,99101,99103,99105,99107,99109,99111,99113],{"class":39,"line":58},[37,99090,98368],{"class":54},[37,99092,70],{"class":50},[37,99094,93070],{"class":54},[37,99096,542],{"class":82},[37,99098,583],{"class":54},[37,99100,98379],{"class":82},[37,99102,93075],{"class":54},[37,99104,282],{"class":82},[37,99106,583],{"class":54},[37,99108,276],{"class":82},[37,99110,583],{"class":54},[37,99112,549],{"class":82},[37,99114,214],{"class":54},[37,99116,99117],{"class":39,"line":64},[37,99118,99119],{"class":43},"#使用dstack\n",[37,99121,99122],{"class":39,"line":76},[37,99123,99124],{"class":54},"np.dstack((aaa,bbb)).shape\n",[37,99126,99127],{"class":39,"line":92},[37,99128,99129],{"class":43},"#结果：（2，3，12）\n",[123,99131,99132],{},"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":32,"searchDepth":47,"depth":47,"links":99134},[99135,99136,99137,99138],{"id":98074,"depth":47,"text":98075},{"id":98688,"depth":47,"text":98689},{"id":98859,"depth":47,"text":98860},{"id":99030,"depth":47,"text":99031},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98066,"description":128},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99145,"title":99146,"body":99147,"description":128,"extension":129,"meta":99422,"navigation":131,"path":99423,"seo":99424,"stem":99425,"__hash__":99426},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99148,"toc":99420},[99149,99152,99155,99249,99252,99255,99258,99261,99264,99267,99270,99273,99417],[10,99150,99146],{"id":99151},"_7数组转置",[14,99153,99154],{},"使用transpose()函数",[27,99156,99158],{"className":29,"code":99157,"language":31,"meta":32,"style":32},"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",[34,99159,99160,99170,99194,99199,99204,99209,99214,99222,99226,99230,99235,99240,99245],{"__ignoreMap":32},[37,99161,99162,99164,99166,99168],{"class":39,"line":40},[37,99163,51],{"class":50},[37,99165,31450],{"class":54},[37,99167,31453],{"class":50},[37,99169,31456],{"class":54},[37,99171,99172,99174,99176,99178,99180,99182,99184,99186,99188,99190,99192],{"class":39,"line":47},[37,99173,443],{"class":54},[37,99175,70],{"class":50},[37,99177,31787],{"class":54},[37,99179,422],{"class":82},[37,99181,583],{"class":54},[37,99183,727],{"class":82},[37,99185,93075],{"class":54},[37,99187,498],{"class":82},[37,99189,583],{"class":54},[37,99191,276],{"class":82},[37,99193,214],{"class":54},[37,99195,99196],{"class":39,"line":58},[37,99197,99198],{"class":43},"#二维数组转置\n",[37,99200,99201],{"class":39,"line":64},[37,99202,99203],{"class":43},"#调用transpose()函数\n",[37,99205,99206],{"class":39,"line":76},[37,99207,99208],{"class":54},"a.transpose()\n",[37,99210,99211],{"class":39,"line":92},[37,99212,99213],{"class":43},"#对于二维数组也可以采用.T来实现\n",[37,99215,99216,99219],{"class":39,"line":97},[37,99217,99218],{"class":54},"a.T",[37,99220,99221],{"class":43},"#与上述代码一样\n",[37,99223,99224],{"class":39,"line":107},[37,99225,93632],{"class":43},[37,99227,99228],{"class":39,"line":1390},[37,99229,93996],{"class":309},[37,99231,99232],{"class":39,"line":1402},[37,99233,99234],{"class":309},"array([[ 1,  4,  7, 10],\n",[37,99236,99237],{"class":39,"line":1684},[37,99238,99239],{"class":309},"       [ 2,  5,  8, 11],\n",[37,99241,99242],{"class":39,"line":1689},[37,99243,99244],{"class":309},"       [ 3,  6,  9, 12]])\n",[37,99246,99247],{"class":39,"line":1695},[37,99248,93996],{"class":309},[14,99250,99251],{},"也可以使用np.transpose()的形式",[14,99253,99254],{},"#多维数组进行转置 np.transpose()",[14,99256,99257],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99259,99260],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99262,99263],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99265,99266],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99268,99269],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99271,99272],{},"四维及以上的数组也是一样的道理",[27,99274,99276],{"className":29,"code":99275,"language":31,"meta":32,"style":32},"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",[34,99277,99278,99306,99311,99316,99321,99339,99344,99376,99381,99386,99391,99412],{"__ignoreMap":32},[37,99279,99280,99282,99284,99286,99288,99290,99292,99294,99296,99298,99300,99302,99304],{"class":39,"line":40},[37,99281,1023],{"class":54},[37,99283,70],{"class":50},[37,99285,93070],{"class":54},[37,99287,422],{"class":82},[37,99289,583],{"class":54},[37,99291,530],{"class":82},[37,99293,93075],{"class":54},[37,99295,276],{"class":82},[37,99297,583],{"class":54},[37,99299,549],{"class":82},[37,99301,583],{"class":54},[37,99303,282],{"class":82},[37,99305,214],{"class":54},[37,99307,99308],{"class":39,"line":47},[37,99309,99310],{"class":54},"x.shape\n",[37,99312,99313],{"class":39,"line":58},[37,99314,99315],{"class":43},"#结果：（3,6,2）\n",[37,99317,99318],{"class":39,"line":64},[37,99319,99320],{"class":43},"#使用np.transpose()进行转置 变为(2,6,3)\n",[37,99322,99323,99326,99328,99330,99332,99334,99336],{"class":39,"line":76},[37,99324,99325],{"class":54},"np.transpose(x,(",[37,99327,282],{"class":82},[37,99329,583],{"class":54},[37,99331,422],{"class":82},[37,99333,583],{"class":54},[37,99335,396],{"class":82},[37,99337,99338],{"class":54},")).shape\n",[37,99340,99341],{"class":39,"line":92},[37,99342,99343],{"class":43},"#结果：(2,6,3)\n",[37,99345,99346,99348,99350,99352,99354,99356,99358,99360,99362,99364,99366,99368,99370,99372,99374],{"class":39,"line":97},[37,99347,98553],{"class":54},[37,99349,70],{"class":50},[37,99351,93070],{"class":54},[37,99353,422],{"class":82},[37,99355,583],{"class":54},[37,99357,530],{"class":82},[37,99359,93075],{"class":54},[37,99361,276],{"class":82},[37,99363,583],{"class":54},[37,99365,282],{"class":82},[37,99367,583],{"class":54},[37,99369,422],{"class":82},[37,99371,583],{"class":54},[37,99373,549],{"class":82},[37,99375,214],{"class":54},[37,99377,99378],{"class":39,"line":107},[37,99379,99380],{"class":54},"aaaa.shape\n",[37,99382,99383],{"class":39,"line":1390},[37,99384,99385],{"class":43},"#结果：（3，2，1，6）\n",[37,99387,99388],{"class":39,"line":1402},[37,99389,99390],{"class":43},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[37,99392,99393,99396,99398,99400,99402,99404,99406,99408,99410],{"class":39,"line":1684},[37,99394,99395],{"class":54},"np.transpose(aaaa,(",[37,99397,422],{"class":82},[37,99399,583],{"class":54},[37,99401,282],{"class":82},[37,99403,583],{"class":54},[37,99405,396],{"class":82},[37,99407,583],{"class":54},[37,99409,276],{"class":82},[37,99411,99338],{"class":54},[37,99413,99414],{"class":39,"line":1689},[37,99415,99416],{"class":43},"#结果：(2,1,3,6)\n",[123,99418,99419],{},"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":32,"searchDepth":47,"depth":47,"links":99421},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99146,"description":128},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99428,"title":99429,"body":99430,"description":128,"extension":129,"meta":100164,"navigation":131,"path":100165,"seo":100166,"stem":100167,"__hash__":100168},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99431,"toc":100162},[99432,99435,99438,99441,99444,99447,99450,99453,99456,99565,99568,99571,100159],[10,99433,99429],{"id":99434},"_8数组分割",[14,99436,99437],{},"split分割",[14,99439,99440],{},"numpy.split(ary,indics_or_sections,axis)",[14,99442,99443],{},"解释：",[14,99445,99446],{},"ary:被分割的数组",[14,99448,99449],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,99451,99452],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,99454,99455],{},"①一维数组的分割",[27,99457,99459],{"className":29,"code":99458,"language":31,"meta":32,"style":32},"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",[34,99460,99461,99477,99482,99491,99495,99500,99508,99512,99517,99522,99535,99539,99544,99556,99560],{"__ignoreMap":32},[37,99462,99463,99465,99467,99469,99471,99473,99475],{"class":39,"line":40},[37,99464,443],{"class":54},[37,99466,70],{"class":50},[37,99468,93070],{"class":54},[37,99470,422],{"class":82},[37,99472,583],{"class":54},[37,99474,625],{"class":82},[37,99476,214],{"class":54},[37,99478,99479],{"class":39,"line":47},[37,99480,99481],{"class":43},"#如果传入整数，必须能够平分，否则会报错\n",[37,99483,99484,99487,99489],{"class":39,"line":58},[37,99485,99486],{"class":54},"np.split(a,",[37,99488,282],{"class":82},[37,99490,214],{"class":54},[37,99492,99493],{"class":39,"line":64},[37,99494,93632],{"class":43},[37,99496,99497],{"class":39,"line":76},[37,99498,99499],{"class":43},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[37,99501,99502,99504,99506],{"class":39,"line":92},[37,99503,99486],{"class":54},[37,99505,498],{"class":82},[37,99507,214],{"class":54},[37,99509,99510],{"class":39,"line":97},[37,99511,93632],{"class":43},[37,99513,99514],{"class":39,"line":107},[37,99515,99516],{"class":43},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[37,99518,99519],{"class":39,"line":1390},[37,99520,99521],{"class":43},"#传入数组\n",[37,99523,99524,99527,99529,99531,99533],{"class":39,"line":1402},[37,99525,99526],{"class":54},"np.split(a,[",[37,99528,276],{"class":82},[37,99530,583],{"class":54},[37,99532,524],{"class":82},[37,99534,4729],{"class":54},[37,99536,99537],{"class":39,"line":1684},[37,99538,93632],{"class":43},[37,99540,99541],{"class":39,"line":1689},[37,99542,99543],{"class":43},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[37,99545,99546,99548,99550,99552,99554],{"class":39,"line":1695},[37,99547,99526],{"class":54},[37,99549,524],{"class":82},[37,99551,583],{"class":54},[37,99553,574],{"class":82},[37,99555,4729],{"class":54},[37,99557,99558],{"class":39,"line":1700},[37,99559,93632],{"class":43},[37,99561,99562],{"class":39,"line":1714},[37,99563,99564],{"class":43},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,99566,99567],{},"②二维数组的分割",[14,99569,99570],{},"使用split()",[27,99572,99574],{"className":29,"code":99573,"language":31,"meta":32,"style":32},"#二维数组分割\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",[34,99575,99576,99581,99605,99610,99619,99623,99627,99632,99637,99642,99647,99652,99657,99662,99666,99679,99683,99687,99691,99695,99699,99704,99709,99714,99718,99723,99739,99743,99747,99752,99757,99762,99767,99772,99777,99782,99787,99792,99797,99802,99807,99812,99817,99822,99827,99832,99837,99841,99845,99865,99869,99873,99878,99883,99888,99893,99898,99903,99908,99913,99918,99923,99928,99933,99938,99943,99948,99953,99958,99963,99967,99972,99981,99985,99989,99993,99997,100001,100005,100009,100013,100017,100026,100030,100034,100038,100042,100046,100050,100054,100058,100062,100066,100070,100074,100078,100082,100086,100090,100094,100098,100102,100106,100110,100123,100127,100131,100135,100139,100143,100147,100151,100155],{"__ignoreMap":32},[37,99577,99578],{"class":39,"line":40},[37,99579,99580],{"class":43},"#二维数组分割\n",[37,99582,99583,99585,99587,99589,99591,99593,99595,99597,99599,99601,99603],{"class":39,"line":47},[37,99584,93374],{"class":54},[37,99586,70],{"class":50},[37,99588,93070],{"class":54},[37,99590,422],{"class":82},[37,99592,583],{"class":54},[37,99594,530],{"class":82},[37,99596,93075],{"class":54},[37,99598,549],{"class":82},[37,99600,583],{"class":54},[37,99602,549],{"class":82},[37,99604,214],{"class":54},[37,99606,99607],{"class":39,"line":58},[37,99608,99609],{"class":43},"#默认axis=0  传入整数平均分,按行来的\n",[37,99611,99612,99615,99617],{"class":39,"line":64},[37,99613,99614],{"class":54},"np.split(aa,",[37,99616,276],{"class":82},[37,99618,214],{"class":54},[37,99620,99621],{"class":39,"line":76},[37,99622,95811],{"class":43},[37,99624,99625],{"class":39,"line":92},[37,99626,93996],{"class":309},[37,99628,99629],{"class":39,"line":97},[37,99630,99631],{"class":309},"[array([[ 1,  2,  3,  4,  5,  6],\n",[37,99633,99634],{"class":39,"line":107},[37,99635,99636],{"class":309},"        [ 7,  8,  9, 10, 11, 12]]),\n",[37,99638,99639],{"class":39,"line":1390},[37,99640,99641],{"class":309}," array([[13, 14, 15, 16, 17, 18],\n",[37,99643,99644],{"class":39,"line":1402},[37,99645,99646],{"class":309},"        [19, 20, 21, 22, 23, 24]]),\n",[37,99648,99649],{"class":39,"line":1684},[37,99650,99651],{"class":309}," array([[25, 26, 27, 28, 29, 30],\n",[37,99653,99654],{"class":39,"line":1689},[37,99655,99656],{"class":309},"        [31, 32, 33, 34, 35, 36]])]\n",[37,99658,99659],{"class":39,"line":1695},[37,99660,99661],{"class":309}," '''\n",[37,99663,99664],{"class":39,"line":1700},[37,99665,99521],{"class":43},[37,99667,99668,99671,99673,99675,99677],{"class":39,"line":1714},[37,99669,99670],{"class":54},"np.split(aa,[",[37,99672,282],{"class":82},[37,99674,583],{"class":54},[37,99676,524],{"class":82},[37,99678,4729],{"class":54},[37,99680,99681],{"class":39,"line":1719},[37,99682,95811],{"class":43},[37,99684,99685],{"class":39,"line":1725},[37,99686,93996],{"class":309},[37,99688,99689],{"class":39,"line":1746},[37,99690,99631],{"class":309},[37,99692,99693],{"class":39,"line":1751},[37,99694,99636],{"class":309},[37,99696,99697],{"class":39,"line":1765},[37,99698,99641],{"class":309},[37,99700,99701],{"class":39,"line":1770},[37,99702,99703],{"class":309},"        [19, 20, 21, 22, 23, 24],\n",[37,99705,99706],{"class":39,"line":1799},[37,99707,99708],{"class":309},"        [25, 26, 27, 28, 29, 30]]),\n",[37,99710,99711],{"class":39,"line":1804},[37,99712,99713],{"class":309}," array([[31, 32, 33, 34, 35, 36]])]\n",[37,99715,99716],{"class":39,"line":1821},[37,99717,93996],{"class":309},[37,99719,99720],{"class":39,"line":1826},[37,99721,99722],{"class":43},"#axis=1 按照列来分\n",[37,99724,99725,99727,99729,99731,99733,99735,99737],{"class":39,"line":1831},[37,99726,99614],{"class":54},[37,99728,276],{"class":82},[37,99730,583],{"class":54},[37,99732,47582],{"class":5288},[37,99734,70],{"class":50},[37,99736,422],{"class":82},[37,99738,214],{"class":54},[37,99740,99741],{"class":39,"line":1836},[37,99742,95811],{"class":43},[37,99744,99745],{"class":39,"line":1850},[37,99746,93996],{"class":309},[37,99748,99749],{"class":39,"line":1855},[37,99750,99751],{"class":309},"[array([[ 1,  2],\n",[37,99753,99754],{"class":39,"line":2649},[37,99755,99756],{"class":309},"        [ 7,  8],\n",[37,99758,99759],{"class":39,"line":2663},[37,99760,99761],{"class":309},"        [13, 14],\n",[37,99763,99764],{"class":39,"line":2671},[37,99765,99766],{"class":309},"        [19, 20],\n",[37,99768,99769],{"class":39,"line":2676},[37,99770,99771],{"class":309},"        [25, 26],\n",[37,99773,99774],{"class":39,"line":2682},[37,99775,99776],{"class":309},"        [31, 32]]),\n",[37,99778,99779],{"class":39,"line":2688},[37,99780,99781],{"class":309}," array([[ 3,  4],\n",[37,99783,99784],{"class":39,"line":2693},[37,99785,99786],{"class":309},"        [ 9, 10],\n",[37,99788,99789],{"class":39,"line":8020},[37,99790,99791],{"class":309},"        [15, 16],\n",[37,99793,99794],{"class":39,"line":8044},[37,99795,99796],{"class":309},"        [21, 22],\n",[37,99798,99799],{"class":39,"line":8049},[37,99800,99801],{"class":309},"        [27, 28],\n",[37,99803,99804],{"class":39,"line":8055},[37,99805,99806],{"class":309},"        [33, 34]]),\n",[37,99808,99809],{"class":39,"line":8082},[37,99810,99811],{"class":309}," array([[ 5,  6],\n",[37,99813,99814],{"class":39,"line":8087},[37,99815,99816],{"class":309},"        [11, 12],\n",[37,99818,99819],{"class":39,"line":8093},[37,99820,99821],{"class":309},"        [17, 18],\n",[37,99823,99824],{"class":39,"line":8105},[37,99825,99826],{"class":309},"        [23, 24],\n",[37,99828,99829],{"class":39,"line":8117},[37,99830,99831],{"class":309},"        [29, 30],\n",[37,99833,99834],{"class":39,"line":8129},[37,99835,99836],{"class":309},"        [35, 36]])]\n",[37,99838,99839],{"class":39,"line":9788},[37,99840,99661],{"class":309},[37,99842,99843],{"class":39,"line":9813},[37,99844,99521],{"class":43},[37,99846,99847,99849,99851,99853,99855,99857,99859,99861,99863],{"class":39,"line":9836},[37,99848,99670],{"class":54},[37,99850,422],{"class":82},[37,99852,583],{"class":54},[37,99854,282],{"class":82},[37,99856,41678],{"class":54},[37,99858,47582],{"class":5288},[37,99860,70],{"class":50},[37,99862,422],{"class":82},[37,99864,214],{"class":54},[37,99866,99867],{"class":39,"line":9860},[37,99868,93632],{"class":43},[37,99870,99871],{"class":39,"line":9865},[37,99872,93996],{"class":309},[37,99874,99875],{"class":39,"line":9870},[37,99876,99877],{"class":309},"[array([[ 1],\n",[37,99879,99880],{"class":39,"line":9875},[37,99881,99882],{"class":309},"        [ 7],\n",[37,99884,99885],{"class":39,"line":9884},[37,99886,99887],{"class":309},"        [13],\n",[37,99889,99890],{"class":39,"line":9889},[37,99891,99892],{"class":309},"        [19],\n",[37,99894,99895],{"class":39,"line":9895},[37,99896,99897],{"class":309},"        [25],\n",[37,99899,99900],{"class":39,"line":9916},[37,99901,99902],{"class":309},"        [31]]),\n",[37,99904,99905],{"class":39,"line":9922},[37,99906,99907],{"class":309}," array([[ 2],\n",[37,99909,99910],{"class":39,"line":9936},[37,99911,99912],{"class":309},"        [ 8],\n",[37,99914,99915],{"class":39,"line":9942},[37,99916,99917],{"class":309},"        [14],\n",[37,99919,99920],{"class":39,"line":9969},[37,99921,99922],{"class":309},"        [20],\n",[37,99924,99925],{"class":39,"line":9978},[37,99926,99927],{"class":309},"        [26],\n",[37,99929,99930],{"class":39,"line":9984},[37,99931,99932],{"class":309},"        [32]]),\n",[37,99934,99935],{"class":39,"line":9992},[37,99936,99937],{"class":309}," array([[ 3,  4,  5,  6],\n",[37,99939,99940],{"class":39,"line":9997},[37,99941,99942],{"class":309},"        [ 9, 10, 11, 12],\n",[37,99944,99945],{"class":39,"line":16676},[37,99946,99947],{"class":309},"        [15, 16, 17, 18],\n",[37,99949,99950],{"class":39,"line":16682},[37,99951,99952],{"class":309},"        [21, 22, 23, 24],\n",[37,99954,99955],{"class":39,"line":16705},[37,99956,99957],{"class":309},"        [27, 28, 29, 30],\n",[37,99959,99960],{"class":39,"line":16711},[37,99961,99962],{"class":309},"        [33, 34, 35, 36]])]\n",[37,99964,99965],{"class":39,"line":16734},[37,99966,93996],{"class":309},[37,99968,99969],{"class":39,"line":16748},[37,99970,99971],{"class":43},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[37,99973,99974,99977,99979],{"class":39,"line":16768},[37,99975,99976],{"class":54},"np.vsplit(aa,",[37,99978,276],{"class":82},[37,99980,214],{"class":54},[37,99982,99983],{"class":39,"line":16774},[37,99984,93632],{"class":43},[37,99986,99987],{"class":39,"line":16785},[37,99988,93996],{"class":309},[37,99990,99991],{"class":39,"line":16808},[37,99992,99631],{"class":309},[37,99994,99995],{"class":39,"line":16830},[37,99996,99636],{"class":309},[37,99998,99999],{"class":39,"line":16835},[37,100000,99641],{"class":309},[37,100002,100003],{"class":39,"line":16841},[37,100004,99646],{"class":309},[37,100006,100007],{"class":39,"line":16855},[37,100008,99651],{"class":309},[37,100010,100011],{"class":39,"line":16868},[37,100012,99656],{"class":309},[37,100014,100015],{"class":39,"line":16873},[37,100016,93996],{"class":309},[37,100018,100019,100022,100024],{"class":39,"line":16887},[37,100020,100021],{"class":54},"np.hsplit(aa,",[37,100023,276],{"class":82},[37,100025,214],{"class":54},[37,100027,100028],{"class":39,"line":16892},[37,100029,93632],{"class":43},[37,100031,100032],{"class":39,"line":16898},[37,100033,93996],{"class":309},[37,100035,100036],{"class":39,"line":16903},[37,100037,99751],{"class":309},[37,100039,100040],{"class":39,"line":16917},[37,100041,99756],{"class":309},[37,100043,100044],{"class":39,"line":16922},[37,100045,99761],{"class":309},[37,100047,100048],{"class":39,"line":16927},[37,100049,99766],{"class":309},[37,100051,100052],{"class":39,"line":16941},[37,100053,99771],{"class":309},[37,100055,100056],{"class":39,"line":16953},[37,100057,99776],{"class":309},[37,100059,100060],{"class":39,"line":16958},[37,100061,99781],{"class":309},[37,100063,100064],{"class":39,"line":16971},[37,100065,99786],{"class":309},[37,100067,100068],{"class":39,"line":16976},[37,100069,99791],{"class":309},[37,100071,100072],{"class":39,"line":16981},[37,100073,99796],{"class":309},[37,100075,100076],{"class":39,"line":16986},[37,100077,99801],{"class":309},[37,100079,100080],{"class":39,"line":16999},[37,100081,99806],{"class":309},[37,100083,100084],{"class":39,"line":17004},[37,100085,99811],{"class":309},[37,100087,100088],{"class":39,"line":32702},[37,100089,99816],{"class":309},[37,100091,100092],{"class":39,"line":32708},[37,100093,99821],{"class":309},[37,100095,100096],{"class":39,"line":32714},[37,100097,99826],{"class":309},[37,100099,100100],{"class":39,"line":32720},[37,100101,99831],{"class":309},[37,100103,100104],{"class":39,"line":32726},[37,100105,99836],{"class":309},[37,100107,100108],{"class":39,"line":32737},[37,100109,93996],{"class":309},[37,100111,100112,100115,100117,100119,100121],{"class":39,"line":32743},[37,100113,100114],{"class":54},"np.vsplit(aa,[",[37,100116,282],{"class":82},[37,100118,583],{"class":54},[37,100120,524],{"class":82},[37,100122,4729],{"class":54},[37,100124,100125],{"class":39,"line":32763},[37,100126,93632],{"class":43},[37,100128,100129],{"class":39,"line":32769},[37,100130,93996],{"class":309},[37,100132,100133],{"class":39,"line":32780},[37,100134,99631],{"class":309},[37,100136,100137],{"class":39,"line":32786},[37,100138,99636],{"class":309},[37,100140,100141],{"class":39,"line":32792},[37,100142,99641],{"class":309},[37,100144,100145],{"class":39,"line":32798},[37,100146,99703],{"class":309},[37,100148,100149],{"class":39,"line":32804},[37,100150,99708],{"class":309},[37,100152,100153],{"class":39,"line":32810},[37,100154,99713],{"class":309},[37,100156,100157],{"class":39,"line":32816},[37,100158,99661],{"class":309},[123,100160,100161],{},"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":32,"searchDepth":47,"depth":47,"links":100163},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99429,"description":128},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100170,"title":100171,"body":100172,"description":128,"extension":129,"meta":100666,"navigation":131,"path":100667,"seo":100668,"stem":100669,"__hash__":100670},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100173,"toc":100657},[100174,100177,100180,100205,100209,100268,100320,100324,100326,100362,100416,100418,100456,100527,100531,100536,100540,100543,100576,100579,100583,100586,100589,100592,100595,100600,100604,100607,100610,100613,100616,100621,100625,100630,100633,100654],[10,100175,100171],{"id":100176},"_9数学函数",[14,100178,100179],{},"补充回顾：python的列表推导式",[27,100181,100183],{"className":29,"code":100182,"language":31,"meta":32,"style":32},"[1\u002Fi for i in a]\n",[34,100184,100185],{"__ignoreMap":32},[37,100186,100187,100189,100191,100193,100196,100198,100200,100202],{"class":39,"line":40},[37,100188,1093],{"class":54},[37,100190,422],{"class":82},[37,100192,787],{"class":50},[37,100194,100195],{"class":54},"i ",[37,100197,3097],{"class":50},[37,100199,9510],{"class":54},[37,100201,26116],{"class":50},[37,100203,100204],{"class":54}," a]\n",[146,100206,100208],{"id":100207},"_91-求倒数","9.1 求倒数",[27,100210,100212],{"className":29,"code":100211,"language":31,"meta":32,"style":32},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[34,100213,100214,100219,100247,100259],{"__ignoreMap":32},[37,100215,100216],{"class":39,"line":40},[37,100217,100218],{"class":43},"#数组求倒数\n",[37,100220,100221,100223,100225,100227,100229,100231,100233,100235,100237,100239,100241,100243,100245],{"class":39,"line":47},[37,100222,443],{"class":54},[37,100224,70],{"class":50},[37,100226,1093],{"class":54},[37,100228,422],{"class":82},[37,100230,583],{"class":54},[37,100232,282],{"class":82},[37,100234,583],{"class":54},[37,100236,276],{"class":82},[37,100238,583],{"class":54},[37,100240,498],{"class":82},[37,100242,583],{"class":54},[37,100244,524],{"class":82},[37,100246,33315],{"class":54},[37,100248,100249,100251,100253,100256],{"class":39,"line":58},[37,100250,468],{"class":54},[37,100252,70],{"class":50},[37,100254,100255],{"class":54},"np.array(a)",[37,100257,100258],{"class":43},"#将列表转换为数组\n",[37,100260,100261,100263,100265],{"class":39,"line":64},[37,100262,422],{"class":82},[37,100264,787],{"class":50},[37,100266,100267],{"class":54},"b\n",[27,100269,100271],{"className":29,"code":100270,"language":31,"meta":32,"style":32},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[34,100272,100273,100301,100310,100315],{"__ignoreMap":32},[37,100274,100275,100277,100279,100281,100283,100285,100287,100289,100291,100293,100295,100297,100299],{"class":39,"line":40},[37,100276,443],{"class":54},[37,100278,70],{"class":50},[37,100280,1093],{"class":54},[37,100282,422],{"class":82},[37,100284,583],{"class":54},[37,100286,282],{"class":82},[37,100288,583],{"class":54},[37,100290,276],{"class":82},[37,100292,583],{"class":54},[37,100294,498],{"class":82},[37,100296,583],{"class":54},[37,100298,524],{"class":82},[37,100300,33315],{"class":54},[37,100302,100303,100305,100307],{"class":39,"line":47},[37,100304,468],{"class":54},[37,100306,70],{"class":50},[37,100308,100309],{"class":54},"np.array(a)\n",[37,100311,100312],{"class":39,"line":58},[37,100313,100314],{"class":43},"#调用numpy中的函数reciprocal()\n",[37,100316,100317],{"class":39,"line":64},[37,100318,100319],{"class":54},"np.reciprocal(b)\n",[146,100321,100323],{"id":100322},"_92-求平方","9.2 求平方",[14,100325,94598],{},[27,100327,100329],{"className":29,"code":100328,"language":31,"meta":32,"style":32},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[34,100330,100331,100336,100341,100357],{"__ignoreMap":32},[37,100332,100333],{"class":39,"line":40},[37,100334,100335],{"class":43},"#square()，求平方\n",[37,100337,100338],{"class":39,"line":47},[37,100339,100340],{"class":43},"#一维数组\n",[37,100342,100343,100345,100347,100349,100351,100353,100355],{"class":39,"line":58},[37,100344,443],{"class":54},[37,100346,70],{"class":50},[37,100348,93070],{"class":54},[37,100350,422],{"class":82},[37,100352,583],{"class":54},[37,100354,650],{"class":82},[37,100356,214],{"class":54},[37,100358,100359],{"class":39,"line":64},[37,100360,100361],{"class":54},"np.square(a)\n",[27,100363,100365],{"className":29,"code":100364,"language":31,"meta":32,"style":32},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[34,100366,100367,100372,100377,100398],{"__ignoreMap":32},[37,100368,100369],{"class":39,"line":40},[37,100370,100371],{"class":43},"#或者通过循环遍历的形式来计算\n",[37,100373,100374],{"class":39,"line":47},[37,100375,100376],{"class":43},"#这是一个列表\n",[37,100378,100379,100382,100384,100386,100388,100390,100392,100395],{"class":39,"line":58},[37,100380,100381],{"class":54},"[i",[37,100383,659],{"class":50},[37,100385,100195],{"class":54},[37,100387,3097],{"class":50},[37,100389,9510],{"class":54},[37,100391,26116],{"class":50},[37,100393,100394],{"class":54}," a]",[37,100396,100397],{"class":43},"#这个求完之后在数列当中\n",[37,100399,100400,100403,100405,100407,100409,100411,100413],{"class":39,"line":64},[37,100401,100402],{"class":54},"np.array([i",[37,100404,659],{"class":50},[37,100406,100195],{"class":54},[37,100408,3097],{"class":50},[37,100410,9510],{"class":54},[37,100412,26116],{"class":50},[37,100414,100415],{"class":54}," a])\n",[14,100417,93359],{},[27,100419,100421],{"className":29,"code":100420,"language":31,"meta":32,"style":32},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[34,100422,100423,100427,100451],{"__ignoreMap":32},[37,100424,100425],{"class":39,"line":40},[37,100426,93369],{"class":43},[37,100428,100429,100431,100433,100435,100437,100439,100441,100443,100445,100447,100449],{"class":39,"line":47},[37,100430,93374],{"class":54},[37,100432,70],{"class":50},[37,100434,93070],{"class":54},[37,100436,422],{"class":82},[37,100438,583],{"class":54},[37,100440,727],{"class":82},[37,100442,93075],{"class":54},[37,100444,498],{"class":82},[37,100446,583],{"class":54},[37,100448,276],{"class":82},[37,100450,214],{"class":54},[37,100452,100453],{"class":39,"line":58},[37,100454,100455],{"class":54},"np.square(aa)\n",[27,100457,100459],{"className":29,"code":100458,"language":31,"meta":32,"style":32},"#传统的方式\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",[34,100460,100461,100466,100475,100491,100507,100522],{"__ignoreMap":32},[37,100462,100463],{"class":39,"line":40},[37,100464,100465],{"class":43},"#传统的方式\n",[37,100467,100468,100470,100472],{"class":39,"line":47},[37,100469,98234],{"class":54},[37,100471,70],{"class":50},[37,100473,100474],{"class":54},"np.empty_like(aa)\n",[37,100476,100477,100479,100481,100483,100485,100487,100489],{"class":39,"line":58},[37,100478,3097],{"class":50},[37,100480,9510],{"class":54},[37,100482,26116],{"class":50},[37,100484,32512],{"class":82},[37,100486,208],{"class":54},[37,100488,498],{"class":82},[37,100490,30856],{"class":54},[37,100492,100493,100495,100497,100499,100501,100503,100505],{"class":39,"line":64},[37,100494,3273],{"class":50},[37,100496,9572],{"class":54},[37,100498,26116],{"class":50},[37,100500,32512],{"class":82},[37,100502,208],{"class":54},[37,100504,276],{"class":82},[37,100506,30856],{"class":54},[37,100508,100509,100512,100514,100517,100519],{"class":39,"line":76},[37,100510,100511],{"class":54},"        bb[i,j]",[37,100513,70],{"class":50},[37,100515,100516],{"class":54},"aa[i,j]",[37,100518,659],{"class":50},[37,100520,100521],{"class":54},"aa[i,j]\n",[37,100523,100524],{"class":39,"line":92},[37,100525,100526],{"class":54},"bb\n",[146,100528,100530],{"id":100529},"_93-求各元素的符号","9.3 求各元素的符号",[14,100532,100533],{},[119,100534],{"alt":32,"src":100535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[146,100537,100539],{"id":100538},"_94-modf函数","9.4 modf函数",[14,100541,100542],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[27,100544,100546],{"className":29,"code":100545,"language":31,"meta":32,"style":32},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[34,100547,100548,100571],{"__ignoreMap":32},[37,100549,100550,100552,100554,100556,100558,100560,100562,100564,100566,100569],{"class":39,"line":40},[37,100551,443],{"class":54},[37,100553,70],{"class":50},[37,100555,93070],{"class":54},[37,100557,112],{"class":50},[37,100559,650],{"class":82},[37,100561,583],{"class":54},[37,100563,650],{"class":82},[37,100565,583],{"class":54},[37,100567,100568],{"class":82},"0.3",[37,100570,214],{"class":54},[37,100572,100573],{"class":39,"line":47},[37,100574,100575],{"class":54},"np.modf(a)\n",[14,100577,100578],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[146,100580,100582],{"id":100581},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,100584,100585],{},"np.cell()",[14,100587,100588],{},"np.floor()",[14,100590,100591],{},"np.rint()",[14,100593,100594],{},"对各元素分别向上取整、向下取整、四舍五入",[14,100596,100597],{},[119,100598],{"alt":32,"src":100599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[146,100601,100603],{"id":100602},"_96-around函数","9.6 around()函数",[14,100605,100606],{},"around()函数也可以实现对数的小数位数进行操作",[14,100608,100609],{},"其中的参数：",[14,100611,100612],{},"1.要传的数组",[14,100614,100615],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,100617,100618],{},[119,100619],{"alt":32,"src":100620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[146,100622,100624],{"id":100623},"_97-三角函数","9.7 三角函数",[14,100626,100627],{},[119,100628],{"alt":32,"src":100629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,100631,100632],{},"引入图像模块非常重要",[27,100634,100636],{"className":29,"code":100635,"language":31,"meta":32,"style":32},"from matplotlib import pyplot as plt\n",[34,100637,100638],{"__ignoreMap":32},[37,100639,100640,100642,100645,100647,100650,100652],{"class":39,"line":40},[37,100641,30807],{"class":50},[37,100643,100644],{"class":54}," matplotlib ",[37,100646,51],{"class":50},[37,100648,100649],{"class":54}," pyplot ",[37,100651,31453],{"class":50},[37,100653,31507],{"class":54},[123,100655,100656],{},"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":32,"searchDepth":47,"depth":47,"links":100658},[100659,100660,100661,100662,100663,100664,100665],{"id":100207,"depth":47,"text":100208},{"id":100322,"depth":47,"text":100323},{"id":100529,"depth":47,"text":100530},{"id":100538,"depth":47,"text":100539},{"id":100581,"depth":47,"text":100582},{"id":100602,"depth":47,"text":100603},{"id":100623,"depth":47,"text":100624},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100171,"description":128},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100672,"title":100673,"body":100674,"description":128,"extension":129,"meta":100678,"navigation":131,"path":100679,"seo":100680,"stem":100681,"__hash__":100682},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100675,"toc":100676},[],{"title":32,"searchDepth":47,"depth":47,"links":100677},[],{"category":50488},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100673,"description":128},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100684,"title":100685,"body":100686,"description":32,"extension":129,"meta":102694,"navigation":131,"path":102695,"seo":102696,"stem":102697,"__hash__":102698},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100687,"toc":102670},[100688,100691,100695,100698,100701,100707,100710,100733,100736,100770,100773,100814,100818,100821,100914,100917,100961,100964,100981,100984,100998,101001,101004,101049,101052,101089,101093,101096,101102,101107,101127,101131,101134,101200,101203,101221,101225,101228,101257,101267,101273,101277,101280,101286,101297,101301,101304,101334,101337,101617,101620,101623,101634,101637,101640,101662,101669,101672,101690,101693,101696,101710,101718,101721,101747,101753,101756,101759,101769,101781,101801,101810,101830,101840,101864,101877,101891,101896,101937,101954,101979,101991,102011,102017,102062,102081,102098,102111,102127,102134,102146,102155,102190,102211,102236,102249,102273,102288,102313,102316,102337,102346,102349,102360,102364,102367,102373,102385,102392,102396,102399,102411,102414,102428,102431,102441,102451,102454,102494,102497,102501,102507,102510,102524,102528,102531,102564,102568,102571,102594,102602,102605,102611,102617,102620,102623,102651,102655,102658,102664,102667],[10,100689,100685],{"id":100690},"_1环境安装与第一个-mujoco-程序",[146,100692,100694],{"id":100693},"_1目标说明","1.目标说明",[14,100696,100697],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,100699,100700],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[27,100702,100705],{"className":100703,"code":100704,"language":5259,"meta":32},[5257],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[34,100706,100704],{"__ignoreMap":32},[14,100708,100709],{},"需要掌握:",[158,100711,100712,100715,100718,100723,100728],{},[161,100713,100714],{},"Fedora 44 下 MuJoCo 的系统依赖",[161,100716,100717],{},"Python 虚拟环境创建",[161,100719,100720],{},[34,100721,100722],{},"mujoco.MjModel",[161,100724,100725],{},[34,100726,100727],{},"mujoco.MjData",[161,100729,100730],{},[34,100731,100732],{},"mujoco.mj_step(model, data)",[14,100734,100735],{},"MuJoCo 中最重要的两个对象:",[342,100737,100738,100748],{},[345,100739,100740],{},[348,100741,100742,100745],{},[351,100743,100744],{"align":23808},"对象",[351,100746,100747],{"align":23808},"含义",[389,100749,100750,100760],{},[348,100751,100752,100757],{},[394,100753,100754],{"align":23808},[34,100755,100756],{},"MjModel",[394,100758,100759],{"align":23808},"模型结构，来自 XML，基本不随时间变化",[348,100761,100762,100767],{},[394,100763,100764],{"align":23808},[34,100765,100766],{},"MjData",[394,100768,100769],{"align":23808},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,100771,100772],{},"可以先用一个类比理解：",[342,100774,100775,100785],{},[345,100776,100777],{},[348,100778,100779,100782],{},[351,100780,100781],{"align":23808},"类比",[351,100783,100784],{"align":23808},"MuJoCo 对象",[389,100786,100787,100796,100805],{},[348,100788,100789,100792],{},[394,100790,100791],{"align":23808},"游戏地图和角色配置",[394,100793,100794],{"align":23808},[34,100795,100756],{},[348,100797,100798,100801],{},[394,100799,100800],{"align":23808},"游戏运行到当前帧的状态",[394,100802,100803],{"align":23808},[34,100804,100766],{},[348,100806,100807,100810],{},[394,100808,100809],{"align":23808},"前进一帧",[394,100811,100812],{"align":23808},[34,100813,100732],{},[146,100815,100817],{"id":100816},"_2环境与依赖安装","2.环境与依赖安装",[14,100819,100820],{},"Fedora 44 系统依赖:",[27,100822,100824],{"className":23894,"code":100823,"language":23896,"meta":32,"style":32},"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",[34,100825,100826,100838,100851,100864,100874,100884,100903],{"__ignoreMap":32},[37,100827,100828,100830,100832,100834,100836],{"class":39,"line":40},[37,100829,24649],{"class":2035},[37,100831,26388],{"class":309},[37,100833,23906],{"class":309},[37,100835,26473],{"class":82},[37,100837,24751],{"class":82},[37,100839,100840,100843,100846,100849],{"class":39,"line":47},[37,100841,100842],{"class":309},"  python3",[37,100844,100845],{"class":309}," python3-pip",[37,100847,100848],{"class":309}," python3-virtualenv",[37,100850,24751],{"class":82},[37,100852,100853,100856,100859,100862],{"class":39,"line":58},[37,100854,100855],{"class":309},"  mesa-libGL",[37,100857,100858],{"class":309}," mesa-libGLU",[37,100860,100861],{"class":309}," mesa-dri-drivers",[37,100863,24751],{"class":82},[37,100865,100866,100869,100872],{"class":39,"line":64},[37,100867,100868],{"class":309},"  libglvnd-glx",[37,100870,100871],{"class":309}," libglvnd-opengl",[37,100873,24751],{"class":82},[37,100875,100876,100879,100882],{"class":39,"line":76},[37,100877,100878],{"class":309},"  glfw",[37,100880,100881],{"class":309}," glfw-devel",[37,100883,24751],{"class":82},[37,100885,100886,100889,100892,100895,100898,100901],{"class":39,"line":92},[37,100887,100888],{"class":309},"  libX11",[37,100890,100891],{"class":309}," libXcursor",[37,100893,100894],{"class":309}," libXi",[37,100896,100897],{"class":309}," libXinerama",[37,100899,100900],{"class":309}," libXrandr",[37,100902,24751],{"class":82},[37,100904,100905,100908,100911],{"class":39,"line":97},[37,100906,100907],{"class":309},"  gcc",[37,100909,100910],{"class":309}," gcc-c++",[37,100912,100913],{"class":309}," make\n",[14,100915,100916],{},"创建 Python 环境:",[27,100918,100920],{"className":23894,"code":100919,"language":23896,"meta":32,"style":32},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[34,100921,100922,100936,100944],{"__ignoreMap":32},[37,100923,100924,100927,100930,100933],{"class":39,"line":40},[37,100925,100926],{"class":2035},"python3",[37,100928,100929],{"class":82}," -m",[37,100931,100932],{"class":309}," venv",[37,100934,100935],{"class":309}," .venv\n",[37,100937,100938,100941],{"class":39,"line":47},[37,100939,100940],{"class":82},"source",[37,100942,100943],{"class":309}," .venv\u002Fbin\u002Factivate\n",[37,100945,100946,100948,100950,100953,100955,100958],{"class":39,"line":58},[37,100947,31],{"class":2035},[37,100949,100929],{"class":82},[37,100951,100952],{"class":309}," pip",[37,100954,23906],{"class":309},[37,100956,100957],{"class":82}," --upgrade",[37,100959,100960],{"class":309}," pip\n",[14,100962,100963],{},"pip 安装:",[27,100965,100967],{"className":23894,"code":100966,"language":23896,"meta":32,"style":32},"pip install \"mujoco>=2.3\" numpy\n",[34,100968,100969],{"__ignoreMap":32},[37,100970,100971,100973,100975,100978],{"class":39,"line":40},[37,100972,23903],{"class":2035},[37,100974,23906],{"class":309},[37,100976,100977],{"class":309}," \"mujoco>=2.3\"",[37,100979,100980],{"class":309}," numpy\n",[14,100982,100983],{},"安装完成后，先做最小检查：",[27,100985,100987],{"className":23894,"code":100986,"language":23896,"meta":32,"style":32},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[34,100988,100989],{"__ignoreMap":32},[37,100990,100991,100993,100995],{"class":39,"line":40},[37,100992,31],{"class":2035},[37,100994,30431],{"class":82},[37,100996,100997],{"class":309}," \"import mujoco; print(mujoco.__version__)\"\n",[14,100999,101000],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,101002,101003],{},"conda 安装:",[27,101005,101007],{"className":23894,"code":101006,"language":23896,"meta":32,"style":32},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[34,101008,101009,101029,101039],{"__ignoreMap":32},[37,101010,101011,101013,101015,101017,101020,101023,101026],{"class":39,"line":40},[37,101012,30403],{"class":2035},[37,101014,29249],{"class":309},[37,101016,25188],{"class":82},[37,101018,101019],{"class":309}," mujoco-study",[37,101021,101022],{"class":309}," python=",[37,101024,101025],{"class":82},"3.10",[37,101027,101028],{"class":82}," -y\n",[37,101030,101031,101033,101036],{"class":39,"line":47},[37,101032,30403],{"class":2035},[37,101034,101035],{"class":309}," activate",[37,101037,101038],{"class":309}," mujoco-study\n",[37,101040,101041,101043,101045,101047],{"class":39,"line":58},[37,101042,23903],{"class":2035},[37,101044,23906],{"class":309},[37,101046,100977],{"class":309},[37,101048,100980],{"class":309},[14,101050,101051],{},"版本冲突说明:",[158,101053,101054,101060,101070,101079],{},[161,101055,101056,101057,28458],{},"不要安装 ",[34,101058,101059],{},"mujoco-py",[161,101061,101062,101063,101065,101066,101069],{},"如果旧项目里同时安装了 ",[34,101064,101059],{}," 和 ",[34,101067,101068],{},"mujoco","，建议新建干净虚拟环境。",[161,101071,101072,101075,101076,28458],{},[34,101073,101074],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[34,101077,101078],{},"~\u002F.mujoco\u002Fmujoco210",[161,101080,101081,101082,82607,101085,101088],{},"离屏渲染可能涉及 OpenGL 后端，",[34,101083,101084],{},"MUJOCO_GL=egl",[34,101086,101087],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[146,101090,101092],{"id":101091},"_3核心概念解释","3.核心概念解释",[14,101094,101095],{},"MuJoCo 的基本执行流程:",[27,101097,101100],{"className":101098,"code":101099,"language":5259,"meta":32},[5257],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[34,101101,101099],{"__ignoreMap":32},[14,101103,101104,101106],{},[34,101105,100756],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101108,101109,101111,101112,417,101115,417,101118,417,101121,417,101124,28458],{},[34,101110,100766],{}," 存放仿真运行时状态，例如 ",[34,101113,101114],{},"data.time",[34,101116,101117],{},"data.qpos",[34,101119,101120],{},"data.qvel",[34,101122,101123],{},"data.ctrl",[34,101125,101126],{},"data.xpos",[175,101128,101130],{"id":101129},"xml-是什么","XML 是什么",[14,101132,101133],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[27,101135,101137],{"className":53135,"code":101136,"language":53137,"meta":32,"style":32},"\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",[34,101138,101139,101161,101192],{"__ignoreMap":32},[37,101140,101141,101143,101145,101147,101149,101151,101154,101156,101159],{"class":39,"line":40},[37,101142,1113],{"class":54},[37,101144,51868],{"class":51368},[37,101146,14992],{"class":2035},[37,101148,70],{"class":54},[37,101150,53559],{"class":309},[37,101152,101153],{"class":2035}," pos",[37,101155,70],{"class":54},[37,101157,101158],{"class":309},"\"0 0 1\"",[37,101160,51375],{"class":54},[37,101162,101163,101165,101168,101170,101172,101175,101177,101179,101181,101184,101186,101189],{"class":39,"line":47},[37,101164,52212],{"class":54},[37,101166,101167],{"class":51368},"geom",[37,101169,14992],{"class":2035},[37,101171,70],{"class":54},[37,101173,101174],{"class":309},"\"box_geom\"",[37,101176,53892],{"class":2035},[37,101178,70],{"class":54},[37,101180,53559],{"class":309},[37,101182,101183],{"class":2035}," size",[37,101185,70],{"class":54},[37,101187,101188],{"class":309},"\"0.1 0.1 0.1\"",[37,101190,101191],{"class":54},"\u002F>\n",[37,101193,101194,101196,101198],{"class":39,"line":58},[37,101195,51853],{"class":54},[37,101197,51868],{"class":51368},[37,101199,51375],{"class":54},[14,101201,101202],{},"这段意思是：",[158,101204,101205,101211,101218],{},[161,101206,101207,101208,101210],{},"创建一个叫 ",[34,101209,53782],{}," 的刚体。",[161,101212,101213,101214,101217],{},"它初始放在 ",[34,101215,101216],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[161,101219,101220],{},"它里面有一个盒子形状的几何体。",[175,101222,101224],{"id":101223},"timestep-是什么","timestep 是什么",[14,101226,101227],{},"XML 里的：",[27,101229,101231],{"className":53135,"code":101230,"language":53137,"meta":32,"style":32},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[34,101232,101233],{"__ignoreMap":32},[37,101234,101235,101237,101239,101242,101244,101247,101250,101252,101255],{"class":39,"line":40},[37,101236,1113],{"class":54},[37,101238,69234],{"class":51368},[37,101240,101241],{"class":2035}," timestep",[37,101243,70],{"class":54},[37,101245,101246],{"class":309},"\"0.01\"",[37,101248,101249],{"class":2035}," gravity",[37,101251,70],{"class":54},[37,101253,101254],{"class":309},"\"0 0 -9.81\"",[37,101256,101191],{"class":54},[14,101258,101259,101260,101263,101264,101266],{},"表示每调用一次 ",[34,101261,101262],{},"mj_step","，仿真时间前进 ",[34,101265,39055],{}," 秒。循环 100 次，大约就是 1 秒：",[27,101268,101271],{"className":101269,"code":101270,"language":5259,"meta":32},[5257],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[34,101272,101270],{"__ignoreMap":32},[175,101274,101276],{"id":101275},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101278,101279],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[27,101281,101284],{"className":101282,"code":101283,"language":5259,"meta":32},[5257],"x y z qw qx qy qz\n",[34,101285,101283],{"__ignoreMap":32},[14,101287,101288,101289,101292,101293,101296],{},"表示一个自由刚体的位置和姿态。其中 ",[34,101290,101291],{},"x y z"," 是位置，",[34,101294,101295],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[146,101298,101300],{"id":101299},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101302,101303],{},"新建文件:",[27,101305,101307],{"className":23894,"code":101306,"language":23896,"meta":32,"style":32},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[34,101308,101309,101319,101326],{"__ignoreMap":32},[37,101310,101311,101314,101316],{"class":39,"line":40},[37,101312,101313],{"class":2035},"mkdir",[37,101315,29289],{"class":82},[37,101317,101318],{"class":309}," mujoco_tutorial\n",[37,101320,101321,101324],{"class":39,"line":47},[37,101322,101323],{"class":82},"cd",[37,101325,101318],{"class":309},[37,101327,101328,101331],{"class":39,"line":58},[37,101329,101330],{"class":2035},"touch",[37,101332,101333],{"class":309}," ch1_first_sim.py\n",[14,101335,101336],{},"写入:",[27,101338,101340],{"className":29,"code":101339,"language":31,"meta":32,"style":32},"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",[34,101341,101342,101349,101353,101357,101367,101372,101377,101381,101386,101391,101395,101400,101405,101410,101415,101420,101425,101429,101433,101437,101450,101464,101474,101478,101490,101502,101514,101526,101538,101542,101559,101564,101568,101579,101590,101594,101598,101612],{"__ignoreMap":32},[37,101343,101344,101346],{"class":39,"line":40},[37,101345,51],{"class":50},[37,101347,101348],{"class":54}," mujoco\n",[37,101350,101351],{"class":39,"line":47},[37,101352,2472],{"emptyLinePlaceholder":131},[37,101354,101355],{"class":39,"line":58},[37,101356,2472],{"emptyLinePlaceholder":131},[37,101358,101359,101362,101364],{"class":39,"line":64},[37,101360,101361],{"class":82},"XML",[37,101363,13636],{"class":50},[37,101365,101366],{"class":309}," \"\"\"\n",[37,101368,101369],{"class":39,"line":76},[37,101370,101371],{"class":309},"\u003Cmujoco model=\"first_sim\">\n",[37,101373,101374],{"class":39,"line":92},[37,101375,101376],{"class":309},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[37,101378,101379],{"class":39,"line":97},[37,101380,2472],{"emptyLinePlaceholder":131},[37,101382,101383],{"class":39,"line":107},[37,101384,101385],{"class":309},"  \u003Cworldbody>\n",[37,101387,101388],{"class":39,"line":1390},[37,101389,101390],{"class":309},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[37,101392,101393],{"class":39,"line":1402},[37,101394,2472],{"emptyLinePlaceholder":131},[37,101396,101397],{"class":39,"line":1684},[37,101398,101399],{"class":309},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[37,101401,101402],{"class":39,"line":1689},[37,101403,101404],{"class":309},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[37,101406,101407],{"class":39,"line":1695},[37,101408,101409],{"class":309},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[37,101411,101412],{"class":39,"line":1700},[37,101413,101414],{"class":309},"    \u003C\u002Fbody>\n",[37,101416,101417],{"class":39,"line":1714},[37,101418,101419],{"class":309},"  \u003C\u002Fworldbody>\n",[37,101421,101422],{"class":39,"line":1719},[37,101423,101424],{"class":309},"\u003C\u002Fmujoco>\n",[37,101426,101427],{"class":39,"line":1725},[37,101428,95745],{"class":309},[37,101430,101431],{"class":39,"line":1746},[37,101432,2472],{"emptyLinePlaceholder":131},[37,101434,101435],{"class":39,"line":1751},[37,101436,2472],{"emptyLinePlaceholder":131},[37,101438,101439,101441,101443,101446,101448],{"class":39,"line":1765},[37,101440,32017],{"class":50},[37,101442,2045],{"class":2035},[37,101444,101445],{"class":54},"() -> ",[37,101447,95733],{"class":82},[37,101449,3811],{"class":54},[37,101451,101452,101455,101457,101460,101462],{"class":39,"line":1770},[37,101453,101454],{"class":54},"    model ",[37,101456,70],{"class":50},[37,101458,101459],{"class":54}," mujoco.MjModel.from_xml_string(",[37,101461,101361],{"class":82},[37,101463,214],{"class":54},[37,101465,101466,101469,101471],{"class":39,"line":1799},[37,101467,101468],{"class":54},"    data ",[37,101470,70],{"class":50},[37,101472,101473],{"class":54}," mujoco.MjData(model)\n",[37,101475,101476],{"class":39,"line":1804},[37,101477,2472],{"emptyLinePlaceholder":131},[37,101479,101480,101482,101484,101487],{"class":39,"line":1821},[37,101481,31369],{"class":82},[37,101483,208],{"class":54},[37,101485,101486],{"class":309},"\"nq:\"",[37,101488,101489],{"class":54},", model.nq)\n",[37,101491,101492,101494,101496,101499],{"class":39,"line":1826},[37,101493,31369],{"class":82},[37,101495,208],{"class":54},[37,101497,101498],{"class":309},"\"nv:\"",[37,101500,101501],{"class":54},", model.nv)\n",[37,101503,101504,101506,101508,101511],{"class":39,"line":1831},[37,101505,31369],{"class":82},[37,101507,208],{"class":54},[37,101509,101510],{"class":309},"\"nu:\"",[37,101512,101513],{"class":54},", model.nu)\n",[37,101515,101516,101518,101520,101523],{"class":39,"line":1836},[37,101517,31369],{"class":82},[37,101519,208],{"class":54},[37,101521,101522],{"class":309},"\"initial time:\"",[37,101524,101525],{"class":54},", data.time)\n",[37,101527,101528,101530,101532,101535],{"class":39,"line":1850},[37,101529,31369],{"class":82},[37,101531,208],{"class":54},[37,101533,101534],{"class":309},"\"initial qpos:\"",[37,101536,101537],{"class":54},", data.qpos.copy())\n",[37,101539,101540],{"class":39,"line":1855},[37,101541,2472],{"emptyLinePlaceholder":131},[37,101543,101544,101546,101549,101551,101553,101555,101557],{"class":39,"line":2649},[37,101545,3273],{"class":50},[37,101547,101548],{"class":54}," _ ",[37,101550,26116],{"class":50},[37,101552,32512],{"class":82},[37,101554,208],{"class":54},[37,101556,516],{"class":82},[37,101558,30856],{"class":54},[37,101560,101561],{"class":39,"line":2663},[37,101562,101563],{"class":54},"        mujoco.mj_step(model, data)\n",[37,101565,101566],{"class":39,"line":2671},[37,101567,2472],{"emptyLinePlaceholder":131},[37,101569,101570,101572,101574,101577],{"class":39,"line":2676},[37,101571,31369],{"class":82},[37,101573,208],{"class":54},[37,101575,101576],{"class":309},"\"final time:\"",[37,101578,101525],{"class":54},[37,101580,101581,101583,101585,101588],{"class":39,"line":2682},[37,101582,31369],{"class":82},[37,101584,208],{"class":54},[37,101586,101587],{"class":309},"\"final qpos:\"",[37,101589,101537],{"class":54},[37,101591,101592],{"class":39,"line":2688},[37,101593,2472],{"emptyLinePlaceholder":131},[37,101595,101596],{"class":39,"line":2693},[37,101597,2472],{"emptyLinePlaceholder":131},[37,101599,101600,101602,101604,101607,101610],{"class":39,"line":8020},[37,101601,1603],{"class":50},[37,101603,31290],{"class":82},[37,101605,101606],{"class":50}," ==",[37,101608,101609],{"class":309}," \"__main__\"",[37,101611,3811],{"class":54},[37,101613,101614],{"class":39,"line":8044},[37,101615,101616],{"class":54},"    main()\n",[175,101618,101619],{"id":101619},"代码逐段解释",[14,101621,101622],{},"导入库：",[27,101624,101626],{"className":29,"code":101625,"language":31,"meta":32,"style":32},"import mujoco\n",[34,101627,101628],{"__ignoreMap":32},[37,101629,101630,101632],{"class":39,"line":40},[37,101631,51],{"class":50},[37,101633,101348],{"class":54},[14,101635,101636],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,101638,101639],{},"定义 XML：",[27,101641,101643],{"className":29,"code":101642,"language":31,"meta":32,"style":32},"XML = \"\"\"\n...\n\"\"\"\n",[34,101644,101645,101653,101658],{"__ignoreMap":32},[37,101646,101647,101649,101651],{"class":39,"line":40},[37,101648,101361],{"class":82},[37,101650,13636],{"class":50},[37,101652,101366],{"class":309},[37,101654,101655],{"class":39,"line":47},[37,101656,101657],{"class":309},"...\n",[37,101659,101660],{"class":39,"line":58},[37,101661,95745],{"class":309},[14,101663,101664,101665,101668],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[34,101666,101667],{},"freejoint"," 的方块。",[14,101670,101671],{},"编译模型：",[27,101673,101675],{"className":29,"code":101674,"language":31,"meta":32,"style":32},"model = mujoco.MjModel.from_xml_string(XML)\n",[34,101676,101677],{"__ignoreMap":32},[37,101678,101679,101682,101684,101686,101688],{"class":39,"line":40},[37,101680,101681],{"class":54},"model ",[37,101683,70],{"class":50},[37,101685,101459],{"class":54},[37,101687,101361],{"class":82},[37,101689,214],{"class":54},[14,101691,101692],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,101694,101695],{},"创建数据：",[27,101697,101699],{"className":29,"code":101698,"language":31,"meta":32,"style":32},"data = mujoco.MjData(model)\n",[34,101700,101701],{"__ignoreMap":32},[37,101702,101703,101706,101708],{"class":39,"line":40},[37,101704,101705],{"class":54},"data ",[37,101707,70],{"class":50},[37,101709,101473],{"class":54},[14,101711,101712,101714,101715,101717],{},[34,101713,33470],{}," 会保存仿真当前状态。刚创建时，时间是 ",[34,101716,396],{},"，方块还在初始位置。",[14,101719,101720],{},"推进仿真：",[27,101722,101724],{"className":29,"code":101723,"language":31,"meta":32,"style":32},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[34,101725,101726,101742],{"__ignoreMap":32},[37,101727,101728,101730,101732,101734,101736,101738,101740],{"class":39,"line":40},[37,101729,3097],{"class":50},[37,101731,101548],{"class":54},[37,101733,26116],{"class":50},[37,101735,32512],{"class":82},[37,101737,208],{"class":54},[37,101739,516],{"class":82},[37,101741,30856],{"class":54},[37,101743,101744],{"class":39,"line":47},[37,101745,101746],{"class":54},"    mujoco.mj_step(model, data)\n",[14,101748,101749,101750,101752],{},"每次 ",[34,101751,101262],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[175,101754,101755],{"id":101755},"代码逐行细讲",[14,101757,101758],{},"下面把完整代码按新手视角拆开讲。",[27,101760,101761],{"className":29,"code":101625,"language":31,"meta":32,"style":32},[34,101762,101763],{"__ignoreMap":32},[37,101764,101765,101767],{"class":39,"line":40},[37,101766,51],{"class":50},[37,101768,101348],{"class":54},[14,101770,101771,101773,101774,417,101776,417,101778,28458],{},[34,101772,51],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[34,101775,100722],{},[34,101777,100727],{},[34,101779,101780],{},"mujoco.mj_step",[27,101782,101783],{"className":29,"code":101642,"language":31,"meta":32,"style":32},[34,101784,101785,101793,101797],{"__ignoreMap":32},[37,101786,101787,101789,101791],{"class":39,"line":40},[37,101788,101361],{"class":82},[37,101790,13636],{"class":50},[37,101792,101366],{"class":309},[37,101794,101795],{"class":39,"line":47},[37,101796,101657],{"class":309},[37,101798,101799],{"class":39,"line":58},[37,101800,95745],{"class":309},[14,101802,101803,101805,101806,101809],{},[34,101804,101361],{}," 是一个变量名。右边的三引号 ",[34,101807,101808],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[27,101811,101812],{"className":53135,"code":101371,"language":53137,"meta":32,"style":32},[34,101813,101814],{"__ignoreMap":32},[37,101815,101816,101818,101820,101823,101825,101828],{"class":39,"line":40},[37,101817,1113],{"class":54},[37,101819,101068],{"class":51368},[37,101821,101822],{"class":2035}," model",[37,101824,70],{"class":54},[37,101826,101827],{"class":309},"\"first_sim\"",[37,101829,51375],{"class":54},[14,101831,101832,101833,101836,101837,28458],{},"这是 XML 的根标签。",[34,101834,101835],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[34,101838,101839],{},"first_sim",[27,101841,101842],{"className":53135,"code":101230,"language":53137,"meta":32,"style":32},[34,101843,101844],{"__ignoreMap":32},[37,101845,101846,101848,101850,101852,101854,101856,101858,101860,101862],{"class":39,"line":40},[37,101847,1113],{"class":54},[37,101849,69234],{"class":51368},[37,101851,101241],{"class":2035},[37,101853,70],{"class":54},[37,101855,101246],{"class":309},[37,101857,101249],{"class":2035},[37,101859,70],{"class":54},[37,101861,101254],{"class":309},[37,101863,101191],{"class":54},[14,101865,101866,101868,101869,101872,101873,101876],{},[34,101867,69234],{}," 用来设置仿真参数。",[34,101870,101871],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[34,101874,101875],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[27,101878,101880],{"className":53135,"code":101879,"language":53137,"meta":32,"style":32},"\u003Cworldbody>\n",[34,101881,101882],{"__ignoreMap":32},[37,101883,101884,101886,101889],{"class":39,"line":40},[37,101885,1113],{"class":54},[37,101887,101888],{"class":51368},"worldbody",[37,101890,51375],{"class":54},[14,101892,101893,101895],{},[34,101894,101888],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[27,101897,101899],{"className":53135,"code":101898,"language":53137,"meta":32,"style":32},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[34,101900,101901],{"__ignoreMap":32},[37,101902,101903,101905,101907,101909,101911,101914,101916,101918,101921,101923,101925,101928,101930,101932,101935],{"class":39,"line":40},[37,101904,1113],{"class":54},[37,101906,101167],{"class":51368},[37,101908,14992],{"class":2035},[37,101910,70],{"class":54},[37,101912,101913],{"class":309},"\"floor\"",[37,101915,53892],{"class":2035},[37,101917,70],{"class":54},[37,101919,101920],{"class":309},"\"plane\"",[37,101922,101183],{"class":2035},[37,101924,70],{"class":54},[37,101926,101927],{"class":309},"\"2 2 0.1\"",[37,101929,78835],{"class":2035},[37,101931,70],{"class":54},[37,101933,101934],{"class":309},"\"0.8 0.8 0.8 1\"",[37,101936,101191],{"class":54},[14,101938,101939,101940,101942,101943,101946,101947,101950,101951,101953],{},"这行创建地面。",[34,101941,101167],{}," 是几何体。",[34,101944,101945],{},"name=\"floor\""," 是名字。",[34,101948,101949],{},"type=\"plane\""," 表示平面。",[34,101952,55178],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[27,101955,101957],{"className":53135,"code":101956,"language":53137,"meta":32,"style":32},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[34,101958,101959],{"__ignoreMap":32},[37,101960,101961,101963,101965,101967,101969,101971,101973,101975,101977],{"class":39,"line":40},[37,101962,1113],{"class":54},[37,101964,51868],{"class":51368},[37,101966,14992],{"class":2035},[37,101968,70],{"class":54},[37,101970,53559],{"class":309},[37,101972,101153],{"class":2035},[37,101974,70],{"class":54},[37,101976,101158],{"class":309},[37,101978,51375],{"class":54},[14,101980,101981,101982,28458,101984,101987,101988,101990],{},"这行创建一个刚体，名字叫 ",[34,101983,53782],{},[34,101985,101986],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[34,101989,101216],{},"，也就是离地面 1 米高。",[27,101992,101994],{"className":53135,"code":101993,"language":53137,"meta":32,"style":32},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[34,101995,101996],{"__ignoreMap":32},[37,101997,101998,102000,102002,102004,102006,102009],{"class":39,"line":40},[37,101999,1113],{"class":54},[37,102001,101667],{"class":51368},[37,102003,14992],{"class":2035},[37,102005,70],{"class":54},[37,102007,102008],{"class":309},"\"box_free\"",[37,102010,101191],{"class":54},[14,102012,102013,102014,102016],{},"这行很重要。",[34,102015,101667],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[27,102018,102020],{"className":53135,"code":102019,"language":53137,"meta":32,"style":32},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[34,102021,102022],{"__ignoreMap":32},[37,102023,102024,102026,102028,102030,102032,102034,102036,102038,102040,102042,102044,102046,102049,102051,102053,102055,102057,102060],{"class":39,"line":40},[37,102025,1113],{"class":54},[37,102027,101167],{"class":51368},[37,102029,14992],{"class":2035},[37,102031,70],{"class":54},[37,102033,101174],{"class":309},[37,102035,53892],{"class":2035},[37,102037,70],{"class":54},[37,102039,53559],{"class":309},[37,102041,101183],{"class":2035},[37,102043,70],{"class":54},[37,102045,101188],{"class":309},[37,102047,102048],{"class":2035}," mass",[37,102050,70],{"class":54},[37,102052,3750],{"class":309},[37,102054,78835],{"class":2035},[37,102056,70],{"class":54},[37,102058,102059],{"class":309},"\"1 0 0 1\"",[37,102061,101191],{"class":54},[14,102063,102064,102065,102068,102069,102072,102073,102076,102077,102080],{},"这行给 box body 添加一个盒子形状。",[34,102066,102067],{},"type=\"box\""," 表示形状是盒子。",[34,102070,102071],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[34,102074,102075],{},"mass=\"1\""," 表示质量是 1。",[34,102078,102079],{},"rgba=\"1 0 0 1\""," 表示红色。",[27,102082,102084],{"className":29,"code":102083,"language":31,"meta":32,"style":32},"def main() -> None:\n",[34,102085,102086],{"__ignoreMap":32},[37,102087,102088,102090,102092,102094,102096],{"class":39,"line":40},[37,102089,32017],{"class":50},[37,102091,2045],{"class":2035},[37,102093,101445],{"class":54},[37,102095,95733],{"class":82},[37,102097,3811],{"class":54},[14,102099,102100,102102,102103,102106,102107,102110],{},[34,102101,32017],{}," 用来定义函数。这里定义了一个叫 ",[34,102104,102105],{},"main"," 的函数。",[34,102108,102109],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[27,102112,102113],{"className":29,"code":101674,"language":31,"meta":32,"style":32},[34,102114,102115],{"__ignoreMap":32},[37,102116,102117,102119,102121,102123,102125],{"class":39,"line":40},[37,102118,101681],{"class":54},[37,102120,70],{"class":50},[37,102122,101459],{"class":54},[37,102124,101361],{"class":82},[37,102126,214],{"class":54},[14,102128,102129,102130,102133],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[34,102131,102132],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[27,102135,102136],{"className":29,"code":101698,"language":31,"meta":32,"style":32},[34,102137,102138],{"__ignoreMap":32},[37,102139,102140,102142,102144],{"class":39,"line":40},[37,102141,101705],{"class":54},[37,102143,70],{"class":50},[37,102145,101473],{"class":54},[14,102147,102148,102149,102151,102152,102154],{},"这行创建仿真数据。",[34,102150,33470],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[34,102153,33470],{}," 都会变化。",[27,102156,102158],{"className":29,"code":102157,"language":31,"meta":32,"style":32},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[34,102159,102160,102170,102180],{"__ignoreMap":32},[37,102161,102162,102164,102166,102168],{"class":39,"line":40},[37,102163,30485],{"class":82},[37,102165,208],{"class":54},[37,102167,101486],{"class":309},[37,102169,101489],{"class":54},[37,102171,102172,102174,102176,102178],{"class":39,"line":47},[37,102173,30485],{"class":82},[37,102175,208],{"class":54},[37,102177,101498],{"class":309},[37,102179,101501],{"class":54},[37,102181,102182,102184,102186,102188],{"class":39,"line":58},[37,102183,30485],{"class":82},[37,102185,208],{"class":54},[37,102187,101510],{"class":309},[37,102189,101513],{"class":54},[14,102191,102192,102194,102195,102198,102199,102202,102203,102206,102207,102210],{},[34,102193,30485],{}," 用来输出信息。",[34,102196,102197],{},"model.nq"," 是位置变量数量，",[34,102200,102201],{},"model.nv"," 是速度变量数量，",[34,102204,102205],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[34,102208,102209],{},"nu"," 是 0。",[27,102212,102214],{"className":29,"code":102213,"language":31,"meta":32,"style":32},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[34,102215,102216,102226],{"__ignoreMap":32},[37,102217,102218,102220,102222,102224],{"class":39,"line":40},[37,102219,30485],{"class":82},[37,102221,208],{"class":54},[37,102223,101522],{"class":309},[37,102225,101525],{"class":54},[37,102227,102228,102230,102232,102234],{"class":39,"line":47},[37,102229,30485],{"class":82},[37,102231,208],{"class":54},[37,102233,101534],{"class":309},[37,102235,101537],{"class":54},[14,102237,102238,102239,102241,102242,102244,102245,102248],{},"这里打印初始时间和初始位置。",[34,102240,101114],{}," 一开始是 0。",[34,102243,101117],{}," 是位置数组。",[34,102246,102247],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[27,102250,102251],{"className":29,"code":101723,"language":31,"meta":32,"style":32},[34,102252,102253,102269],{"__ignoreMap":32},[37,102254,102255,102257,102259,102261,102263,102265,102267],{"class":39,"line":40},[37,102256,3097],{"class":50},[37,102258,101548],{"class":54},[37,102260,26116],{"class":50},[37,102262,32512],{"class":82},[37,102264,208],{"class":54},[37,102266,516],{"class":82},[37,102268,30856],{"class":54},[37,102270,102271],{"class":39,"line":47},[37,102272,101746],{"class":54},[14,102274,102275,102277,102278,102281,102282,102284,102285,102287],{},[34,102276,3097],{}," 是循环。",[34,102279,102280],{},"range(100)"," 表示循环 100 次。",[34,102283,1195],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[34,102286,101262],{},"，仿真就前进一步。",[27,102289,102291],{"className":29,"code":102290,"language":31,"meta":32,"style":32},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[34,102292,102293,102303],{"__ignoreMap":32},[37,102294,102295,102297,102299,102301],{"class":39,"line":40},[37,102296,30485],{"class":82},[37,102298,208],{"class":54},[37,102300,101576],{"class":309},[37,102302,101525],{"class":54},[37,102304,102305,102307,102309,102311],{"class":39,"line":47},[37,102306,30485],{"class":82},[37,102308,208],{"class":54},[37,102310,101587],{"class":309},[37,102312,101537],{"class":54},[14,102314,102315],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[27,102317,102319],{"className":29,"code":102318,"language":31,"meta":32,"style":32},"if __name__ == \"__main__\":\n    main()\n",[34,102320,102321,102333],{"__ignoreMap":32},[37,102322,102323,102325,102327,102329,102331],{"class":39,"line":40},[37,102324,1603],{"class":50},[37,102326,31290],{"class":82},[37,102328,101606],{"class":50},[37,102330,101609],{"class":309},[37,102332,3811],{"class":54},[37,102334,102335],{"class":39,"line":47},[37,102336,101616],{"class":54},[14,102338,102339,102340,102343,102344,28458],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[34,102341,102342],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[34,102345,102342],{},[14,102347,102348],{},"运行:",[27,102350,102352],{"className":23894,"code":102351,"language":23896,"meta":32,"style":32},"python ch1_first_sim.py\n",[34,102353,102354],{"__ignoreMap":32},[37,102355,102356,102358],{"class":39,"line":40},[37,102357,31],{"class":2035},[37,102359,101333],{"class":309},[146,102361,102363],{"id":102362},"_5运行结果说明","5.运行结果说明",[14,102365,102366],{},"你应该看到类似输出:",[27,102368,102371],{"className":102369,"code":102370,"language":5259,"meta":32},[5257],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[34,102372,102370],{"__ignoreMap":32},[14,102374,102375,102377,102378,102381,102382,28458],{},[34,102376,101667],{}," 有 7 个位置变量: ",[34,102379,102380],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[34,102383,102384],{},"vx vy vz wx wy wz",[14,102386,102387,102388,102391],{},"你还会看到 ",[34,102389,102390],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[146,102393,102395],{"id":102394},"_6验证步骤","6.验证步骤",[14,102397,102398],{},"确认版本:",[27,102400,102401],{"className":23894,"code":100986,"language":23896,"meta":32,"style":32},[34,102402,102403],{"__ignoreMap":32},[37,102404,102405,102407,102409],{"class":39,"line":40},[37,102406,31],{"class":2035},[37,102408,30431],{"class":82},[37,102410,100997],{"class":309},[14,102412,102413],{},"确认导入的是官方 bindings:",[27,102415,102417],{"className":23894,"code":102416,"language":23896,"meta":32,"style":32},"python -c \"import mujoco; print(mujoco)\"\n",[34,102418,102419],{"__ignoreMap":32},[37,102420,102421,102423,102425],{"class":39,"line":40},[37,102422,31],{"class":2035},[37,102424,30431],{"class":82},[37,102426,102427],{"class":309}," \"import mujoco; print(mujoco)\"\n",[14,102429,102430],{},"运行程序:",[27,102432,102433],{"className":23894,"code":102351,"language":23896,"meta":32,"style":32},[34,102434,102435],{"__ignoreMap":32},[37,102436,102437,102439],{"class":39,"line":40},[37,102438,31],{"class":2035},[37,102440,101333],{"class":309},[14,102442,102443,102444,102447,102448,28458],{},"检查 ",[34,102445,102446],{},"final time"," 是否约等于 ",[34,102449,102450],{},"1.0",[14,102452,102453],{},"再做几个小实验：",[158,102455,102456,102466,102474,102487],{},[161,102457,102458,102459,102461,102462,102465],{},"把 ",[34,102460,101986],{}," 改成 ",[34,102463,102464],{},"pos=\"0 0 2\"","，观察初始高度变化。",[161,102467,102458,102468,102461,102470,102473],{},[34,102469,101875],{},[34,102471,102472],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[161,102475,102458,102476,102461,102478,102481,102482,102484,102485,28458],{},[34,102477,101871],{},[34,102479,102480],{},"timestep=\"0.005\"","，观察 100 步后的 ",[34,102483,102446],{}," 是否变成约 ",[34,102486,35398],{},[161,102488,102489,102490,102493],{},"删除 ",[34,102491,102492],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,102495,102496],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[146,102498,102500],{"id":102499},"_7常见错误与解决方案","7.常见错误与解决方案",[175,102502,102504],{"id":102503},"modulenotfounderror-no-module-named-mujoco",[34,102505,102506],{},"ModuleNotFoundError: No module named 'mujoco'",[14,102508,102509],{},"解决:",[27,102511,102513],{"className":23894,"code":102512,"language":23896,"meta":32,"style":32},"pip install \"mujoco>=2.3\"\n",[34,102514,102515],{"__ignoreMap":32},[37,102516,102517,102519,102521],{"class":39,"line":40},[37,102518,23903],{"class":2035},[37,102520,23906],{"class":309},[37,102522,102523],{"class":309}," \"mujoco>=2.3\"\n",[175,102525,102527],{"id":102526},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,102529,102530],{},"先安装系统依赖:",[27,102532,102534],{"className":23894,"code":102533,"language":23896,"meta":32,"style":32},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[34,102535,102536],{"__ignoreMap":32},[37,102537,102538,102540,102542,102544,102546,102549,102551,102554,102556,102559,102561],{"class":39,"line":40},[37,102539,24649],{"class":2035},[37,102541,26388],{"class":309},[37,102543,23906],{"class":309},[37,102545,26473],{"class":82},[37,102547,102548],{"class":309}," mesa-libGL",[37,102550,100861],{"class":309},[37,102552,102553],{"class":309}," glfw",[37,102555,100881],{"class":309},[37,102557,102558],{"class":309}," libX11",[37,102560,100894],{"class":309},[37,102562,102563],{"class":309}," libXrandr\n",[175,102565,102567],{"id":102566},"xml-解析失败","XML 解析失败",[14,102569,102570],{},"检查:",[158,102572,102573,102576,102579,102585],{},[161,102574,102575],{},"标签是否闭合",[161,102577,102578],{},"属性是否带引号",[161,102580,102581,102582],{},"根节点是否是 ",[34,102583,102584],{},"\u003Cmujoco>",[161,102586,102587,102589,102590,102593],{},[34,102588,51868],{}," 是否放在 ",[34,102591,102592],{},"\u003Cworldbody>"," 内部",[175,102595,102597,102599,102600],{"id":102596},"final-time-不是严格等于-10",[34,102598,102446],{}," 不是严格等于 ",[34,102601,102450],{},[14,102603,102604],{},"这通常不是错误。浮点数计算可能得到：",[27,102606,102609],{"className":102607,"code":102608,"language":5259,"meta":32},[5257],"1.0000000000000007\n",[34,102610,102608],{"__ignoreMap":32},[14,102612,102613,102614,102616],{},"只要接近 ",[34,102615,102450],{}," 就正常。",[175,102618,102619],{"id":102619},"方块没有掉下来",[14,102621,102622],{},"检查：",[158,102624,102625,102631,102637,102642],{},[161,102626,102627,102628],{},"方块 body 里是否有 ",[34,102629,102630],{},"\u003Cfreejoint\u002F>",[161,102632,102633,102634],{},"重力是否是 ",[34,102635,102636],{},"0 0 -9.81",[161,102638,102639,102640],{},"是否真的调用了 ",[34,102641,100732],{},[161,102643,102644,102645,102647,102648],{},"你看的是否是 ",[34,102646,102390],{},"，不是 ",[34,102649,102650],{},"initial qpos",[146,102652,102654],{"id":102653},"_8本章小结","8.本章小结",[14,102656,102657],{},"本章你已经完成了 MuJoCo 的最小闭环：",[27,102659,102662],{"className":102660,"code":102661,"language":5259,"meta":32},[5257],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[34,102663,102661],{"__ignoreMap":32},[14,102665,102666],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[123,102668,102669],{},"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":32,"searchDepth":47,"depth":47,"links":102671},[102672,102673,102674,102679,102683,102684,102685,102693],{"id":100693,"depth":47,"text":100694},{"id":100816,"depth":47,"text":100817},{"id":101091,"depth":47,"text":101092,"children":102675},[102676,102677,102678],{"id":101129,"depth":58,"text":101130},{"id":101223,"depth":58,"text":101224},{"id":101275,"depth":58,"text":101276},{"id":101299,"depth":47,"text":101300,"children":102680},[102681,102682],{"id":101619,"depth":58,"text":101619},{"id":101755,"depth":58,"text":101755},{"id":102362,"depth":47,"text":102363},{"id":102394,"depth":47,"text":102395},{"id":102499,"depth":47,"text":102500,"children":102686},[102687,102688,102689,102690,102692],{"id":102503,"depth":58,"text":102506},{"id":102526,"depth":58,"text":102527},{"id":102566,"depth":58,"text":102567},{"id":102596,"depth":58,"text":102691},"final time 不是严格等于 1.0",{"id":102619,"depth":58,"text":102619},{"id":102653,"depth":47,"text":102654},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100685,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102700,"title":102701,"body":102702,"description":32,"extension":129,"meta":104358,"navigation":131,"path":104359,"seo":104360,"stem":104361,"__hash__":104362},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102703,"toc":104334},[102704,102707,102709,102712,102715,102732,102827,102830,102836,102838,102840,102864,102867,102881,102884,102925,102927,102940,102942,102945,102993,103005,103008,103011,103017,103030,103097,103100,103119,103122,103125,103131,103133,103142,103145,103149,103158,103240,103249,103253,103259,103273,103283,103285,103615,103618,103630,103632,103643,103645,103648,103666,103669,103672,103690,103701,103704,103719,103729,103731,103752,103769,103789,103795,103835,103851,103867,103873,103876,103900,103916,103921,103951,103968,103993,103996,104011,104020,104035,104044,104059,104066,104068,104078,104091,104098,104101,104140,104147,104149,104201,104203,104209,104212,104219,104226,104229,104231,104249,104252,104255,104289,104301,104303,104306,104328,104331],[10,102705,102701],{"id":102706},"_2xml-与-mjcf-物理建模基础",[146,102708,100694],{"id":100693},[14,102710,102711],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,102713,102714],{},"本章结束后，你应该能看懂一个简单模型里：",[158,102716,102717,102720,102723,102726,102729],{},[161,102718,102719],{},"地面在哪里。",[161,102721,102722],{},"物体初始位置在哪里。",[161,102724,102725],{},"几何体是什么形状。",[161,102727,102728],{},"哪些 body 可以自由运动。",[161,102730,102731],{},"如何用名字在 Python 里找到 XML 中的对象。",[342,102733,102734,102744],{},[345,102735,102736],{},[348,102737,102738,102741],{},[351,102739,102740],{"align":23808},"标签",[351,102742,102743],{"align":23808},"作用",[389,102745,102746,102755,102765,102774,102784,102794,102807,102817],{},[348,102747,102748,102752],{},[394,102749,102750],{"align":23808},[34,102751,102584],{},[394,102753,102754],{"align":23808},"根节点",[348,102756,102757,102762],{},[394,102758,102759],{"align":23808},[34,102760,102761],{},"\u003Coption>",[394,102763,102764],{"align":23808},"仿真参数",[348,102766,102767,102771],{},[394,102768,102769],{"align":23808},[34,102770,102592],{},[394,102772,102773],{"align":23808},"世界中的物体",[348,102775,102776,102781],{},[394,102777,102778],{"align":23808},[34,102779,102780],{},"\u003Cbody>",[394,102782,102783],{"align":23808},"刚体",[348,102785,102786,102791],{},[394,102787,102788],{"align":23808},[34,102789,102790],{},"\u003Cgeom>",[394,102792,102793],{"align":23808},"几何体、碰撞体、可视体",[348,102795,102796,102804],{},[394,102797,102798,25051,102801],{"align":23808},[34,102799,102800],{},"\u003Cjoint>",[34,102802,102803],{},"\u003Cfreejoint>",[394,102805,102806],{"align":23808},"关节",[348,102808,102809,102814],{},[394,102810,102811],{"align":23808},[34,102812,102813],{},"\u003Csite>",[394,102815,102816],{"align":23808},"标记点",[348,102818,102819,102824],{},[394,102820,102821],{"align":23808},[34,102822,102823],{},"\u003Cactuator>",[394,102825,102826],{"align":23808},"控制器",[14,102828,102829],{},"初学时可以先记住：",[27,102831,102834],{"className":102832,"code":102833,"language":5259,"meta":32},[5257],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[34,102835,102833],{"__ignoreMap":32},[146,102837,100817],{"id":100816},[14,102839,100820],{},[27,102841,102843],{"className":23894,"code":102842,"language":23896,"meta":32,"style":32},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[34,102844,102845],{"__ignoreMap":32},[37,102846,102847,102849,102851,102853,102855,102857,102859,102861],{"class":39,"line":40},[37,102848,24649],{"class":2035},[37,102850,26388],{"class":309},[37,102852,23906],{"class":309},[37,102854,26473],{"class":82},[37,102856,102548],{"class":309},[37,102858,100861],{"class":309},[37,102860,102553],{"class":309},[37,102862,102863],{"class":309}," glfw-devel\n",[14,102865,102866],{},"pip:",[27,102868,102869],{"className":23894,"code":100966,"language":23896,"meta":32,"style":32},[34,102870,102871],{"__ignoreMap":32},[37,102872,102873,102875,102877,102879],{"class":39,"line":40},[37,102874,23903],{"class":2035},[37,102876,23906],{"class":309},[37,102878,100977],{"class":309},[37,102880,100980],{"class":309},[14,102882,102883],{},"conda:",[27,102885,102887],{"className":23894,"code":102886,"language":23896,"meta":32,"style":32},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[34,102888,102889,102906,102915],{"__ignoreMap":32},[37,102890,102891,102893,102895,102897,102900,102902,102904],{"class":39,"line":40},[37,102892,30403],{"class":2035},[37,102894,29249],{"class":309},[37,102896,25188],{"class":82},[37,102898,102899],{"class":309}," mujoco-xml",[37,102901,101022],{"class":309},[37,102903,101025],{"class":82},[37,102905,101028],{"class":82},[37,102907,102908,102910,102912],{"class":39,"line":47},[37,102909,30403],{"class":2035},[37,102911,101035],{"class":309},[37,102913,102914],{"class":309}," mujoco-xml\n",[37,102916,102917,102919,102921,102923],{"class":39,"line":58},[37,102918,23903],{"class":2035},[37,102920,23906],{"class":309},[37,102922,100977],{"class":309},[37,102924,100980],{"class":309},[14,102926,101051],{},[158,102928,102929,102932,102937],{},[161,102930,102931],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[161,102933,102934,102935,28458],{},"本章使用基础标签，适用于 ",[34,102936,101074],{},[161,102938,102939],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[146,102941,101092],{"id":101091},[14,102943,102944],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[27,102946,102948],{"className":53135,"code":102947,"language":53137,"meta":32,"style":32},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[34,102949,102950,102964,102972,102977,102985],{"__ignoreMap":32},[37,102951,102952,102954,102956,102958,102960,102962],{"class":39,"line":40},[37,102953,1113],{"class":54},[37,102955,101068],{"class":51368},[37,102957,101822],{"class":2035},[37,102959,70],{"class":54},[37,102961,62747],{"class":309},[37,102963,51375],{"class":54},[37,102965,102966,102968,102970],{"class":39,"line":47},[37,102967,52212],{"class":54},[37,102969,101888],{"class":51368},[37,102971,51375],{"class":54},[37,102973,102974],{"class":39,"line":58},[37,102975,102976],{"class":54},"    ...\n",[37,102978,102979,102981,102983],{"class":39,"line":64},[37,102980,52485],{"class":54},[37,102982,101888],{"class":51368},[37,102984,51375],{"class":54},[37,102986,102987,102989,102991],{"class":39,"line":76},[37,102988,51853],{"class":54},[37,102990,101068],{"class":51368},[37,102992,51375],{"class":54},[14,102994,102995,102997,102998,103000,103001,103004],{},[34,102996,51868],{}," 表示刚体。",[34,102999,101167],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[34,103002,103003],{},"joint"," 表示刚体相对父刚体如何运动。",[175,103006,103007],{"id":103007},"层级结构非常重要",[14,103009,103010],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[27,103012,103015],{"className":103013,"code":103014,"language":5259,"meta":32},[5257],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[34,103016,103014],{"__ignoreMap":32},[14,103018,103019,101065,103022,103025,103026,103029],{},[34,103020,103021],{},"red_box_geom",[34,103023,103024],{},"box_center"," 都属于 ",[34,103027,103028],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[27,103031,103033],{"className":53135,"code":103032,"language":53137,"meta":32,"style":32},"\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",[34,103034,103035,103055,103069,103089],{"__ignoreMap":32},[37,103036,103037,103039,103041,103043,103045,103047,103049,103051,103053],{"class":39,"line":40},[37,103038,1113],{"class":54},[37,103040,51868],{"class":51368},[37,103042,14992],{"class":2035},[37,103044,70],{"class":54},[37,103046,53559],{"class":309},[37,103048,101153],{"class":2035},[37,103050,70],{"class":54},[37,103052,101158],{"class":309},[37,103054,51375],{"class":54},[37,103056,103057,103059,103061,103063,103065,103067],{"class":39,"line":47},[37,103058,52212],{"class":54},[37,103060,101667],{"class":51368},[37,103062,14992],{"class":2035},[37,103064,70],{"class":54},[37,103066,102008],{"class":309},[37,103068,101191],{"class":54},[37,103070,103071,103073,103075,103077,103079,103081,103083,103085,103087],{"class":39,"line":58},[37,103072,52212],{"class":54},[37,103074,101167],{"class":51368},[37,103076,53892],{"class":2035},[37,103078,70],{"class":54},[37,103080,53559],{"class":309},[37,103082,101183],{"class":2035},[37,103084,70],{"class":54},[37,103086,101188],{"class":309},[37,103088,101191],{"class":54},[37,103090,103091,103093,103095],{"class":39,"line":64},[37,103092,51853],{"class":54},[37,103094,51868],{"class":51368},[37,103096,51375],{"class":54},[14,103098,103099],{},"含义:",[158,103101,103102,103108,103113,103116],{},[161,103103,103104,103105,103107],{},"创建名为 ",[34,103106,53782],{}," 的刚体",[161,103109,103110,103111],{},"初始位置在世界坐标 ",[34,103112,101216],{},[161,103114,103115],{},"它有一个自由关节",[161,103117,103118],{},"它有一个盒子几何体",[175,103120,103121],{"id":103121},"坐标怎么理解",[14,103123,103124],{},"MuJoCo 默认使用三维坐标：",[27,103126,103129],{"className":103127,"code":103128,"language":5259,"meta":32},[5257],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[34,103130,103128],{"__ignoreMap":32},[14,103132,14705],{},[27,103134,103136],{"className":53135,"code":103135,"language":53137,"meta":32,"style":32},"pos=\"0 0 1\"\n",[34,103137,103138],{"__ignoreMap":32},[37,103139,103140],{"class":39,"line":40},[37,103141,103135],{"class":54},[14,103143,103144],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[175,103146,103148],{"id":103147},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103150,103151,103152,82598,103155,103157],{},"不同 ",[34,103153,103154],{},"type",[34,103156,31566],{}," 含义不同：",[342,103159,103160,103175],{},[345,103161,103162],{},[348,103163,103164,103168,103173],{},[351,103165,103166],{"align":23808},[34,103167,103154],{},[351,103169,103170,103172],{"align":23808},[34,103171,31566],{}," 示例",[351,103174,100747],{"align":23808},[389,103176,103177,103191,103206,103225],{},[348,103178,103179,103183,103188],{},[394,103180,103181],{"align":23808},[34,103182,53782],{},[394,103184,103185],{"align":23808},[34,103186,103187],{},"size=\"0.1 0.2 0.3\"",[394,103189,103190],{"align":23808},"x\u002Fy\u002Fz 半边长，不是完整长度",[348,103192,103193,103198,103203],{},[394,103194,103195],{"align":23808},[34,103196,103197],{},"sphere",[394,103199,103200],{"align":23808},[34,103201,103202],{},"size=\"0.1\"",[394,103204,103205],{"align":23808},"球半径",[348,103207,103208,103213,103218],{},[394,103209,103210],{"align":23808},[34,103211,103212],{},"capsule",[394,103214,103215],{"align":23808},[34,103216,103217],{},"size=\"0.03\"",[394,103219,103220,103221,103224],{"align":23808},"胶囊半径，长度常用 ",[34,103222,103223],{},"fromto"," 指定",[348,103226,103227,103232,103237],{},[394,103228,103229],{"align":23808},[34,103230,103231],{},"plane",[394,103233,103234],{"align":23808},[34,103235,103236],{},"size=\"3 3 0.1\"",[394,103238,103239],{"align":23808},"可视平面大小，通常当地面",[14,103241,103242,103243,103245,103246,103248],{},"最容易踩坑的是 box：",[34,103244,102071],{}," 表示边长大约是 ",[34,103247,32107],{},"，因为 MuJoCo 用的是半边长。",[175,103250,103252],{"id":103251},"site-是什么","site 是什么",[14,103254,103255,103258],{},[34,103256,103257],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[158,103260,103261,103264,103267,103270],{},[161,103262,103263],{},"标记机械臂末端。",[161,103265,103266],{},"标记目标位置。",[161,103268,103269],{},"放传感器或相机参考点。",[161,103271,103272],{},"在 Python 中读取某个关键点的世界坐标。",[14,103274,103275,103276,101065,103279,103282],{},"在后面的 Reacher 任务中，",[34,103277,103278],{},"tip",[34,103280,103281],{},"target"," 就会用 site 表示。",[146,103284,101300],{"id":101299},[27,103286,103288],{"className":29,"code":103287,"language":31,"meta":32,"style":32},"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",[34,103289,103290,103296,103306,103310,103314,103322,103327,103331,103335,103339,103344,103348,103353,103358,103363,103368,103372,103376,103380,103384,103388,103392,103404,103416,103424,103428,103443,103458,103462,103475,103490,103503,103516,103520,103536,103540,103544,103555,103567,103579,103591,103595,103599,103611],{"__ignoreMap":32},[37,103291,103292,103294],{"class":39,"line":40},[37,103293,51],{"class":50},[37,103295,101348],{"class":54},[37,103297,103298,103300,103302,103304],{"class":39,"line":47},[37,103299,51],{"class":50},[37,103301,31450],{"class":54},[37,103303,31453],{"class":50},[37,103305,31456],{"class":54},[37,103307,103308],{"class":39,"line":58},[37,103309,2472],{"emptyLinePlaceholder":131},[37,103311,103312],{"class":39,"line":64},[37,103313,2472],{"emptyLinePlaceholder":131},[37,103315,103316,103318,103320],{"class":39,"line":76},[37,103317,101361],{"class":82},[37,103319,13636],{"class":50},[37,103321,101366],{"class":309},[37,103323,103324],{"class":39,"line":92},[37,103325,103326],{"class":309},"\u003Cmujoco model=\"xml_basic\">\n",[37,103328,103329],{"class":39,"line":97},[37,103330,101376],{"class":309},[37,103332,103333],{"class":39,"line":107},[37,103334,2472],{"emptyLinePlaceholder":131},[37,103336,103337],{"class":39,"line":1390},[37,103338,101385],{"class":309},[37,103340,103341],{"class":39,"line":1402},[37,103342,103343],{"class":309},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[37,103345,103346],{"class":39,"line":1684},[37,103347,2472],{"emptyLinePlaceholder":131},[37,103349,103350],{"class":39,"line":1689},[37,103351,103352],{"class":309},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[37,103354,103355],{"class":39,"line":1695},[37,103356,103357],{"class":309},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[37,103359,103360],{"class":39,"line":1700},[37,103361,103362],{"class":309},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[37,103364,103365],{"class":39,"line":1714},[37,103366,103367],{"class":309},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[37,103369,103370],{"class":39,"line":1719},[37,103371,101414],{"class":309},[37,103373,103374],{"class":39,"line":1725},[37,103375,101419],{"class":309},[37,103377,103378],{"class":39,"line":1746},[37,103379,101424],{"class":309},[37,103381,103382],{"class":39,"line":1751},[37,103383,95745],{"class":309},[37,103385,103386],{"class":39,"line":1765},[37,103387,2472],{"emptyLinePlaceholder":131},[37,103389,103390],{"class":39,"line":1770},[37,103391,2472],{"emptyLinePlaceholder":131},[37,103393,103394,103396,103398,103400,103402],{"class":39,"line":1799},[37,103395,32017],{"class":50},[37,103397,2045],{"class":2035},[37,103399,101445],{"class":54},[37,103401,95733],{"class":82},[37,103403,3811],{"class":54},[37,103405,103406,103408,103410,103412,103414],{"class":39,"line":1804},[37,103407,101454],{"class":54},[37,103409,70],{"class":50},[37,103411,101459],{"class":54},[37,103413,101361],{"class":82},[37,103415,214],{"class":54},[37,103417,103418,103420,103422],{"class":39,"line":1821},[37,103419,101468],{"class":54},[37,103421,70],{"class":50},[37,103423,101473],{"class":54},[37,103425,103426],{"class":39,"line":1826},[37,103427,2472],{"emptyLinePlaceholder":131},[37,103429,103430,103433,103435,103438,103441],{"class":39,"line":1831},[37,103431,103432],{"class":54},"    box_body_id ",[37,103434,70],{"class":50},[37,103436,103437],{"class":54}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[37,103439,103440],{"class":309},"\"red_box\"",[37,103442,214],{"class":54},[37,103444,103445,103448,103450,103453,103456],{"class":39,"line":1836},[37,103446,103447],{"class":54},"    site_id ",[37,103449,70],{"class":50},[37,103451,103452],{"class":54}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[37,103454,103455],{"class":309},"\"box_center\"",[37,103457,214],{"class":54},[37,103459,103460],{"class":39,"line":1850},[37,103461,2472],{"emptyLinePlaceholder":131},[37,103463,103464,103466,103469,103471,103473],{"class":39,"line":1855},[37,103465,3173],{"class":50},[37,103467,103468],{"class":54}," box_body_id ",[37,103470,1113],{"class":50},[37,103472,4165],{"class":82},[37,103474,3811],{"class":54},[37,103476,103477,103480,103483,103485,103488],{"class":39,"line":2649},[37,103478,103479],{"class":50},"        raise",[37,103481,103482],{"class":82}," RuntimeError",[37,103484,208],{"class":54},[37,103486,103487],{"class":309},"\"body red_box not found\"",[37,103489,214],{"class":54},[37,103491,103492,103494,103497,103499,103501],{"class":39,"line":2663},[37,103493,3173],{"class":50},[37,103495,103496],{"class":54}," site_id ",[37,103498,1113],{"class":50},[37,103500,4165],{"class":82},[37,103502,3811],{"class":54},[37,103504,103505,103507,103509,103511,103514],{"class":39,"line":2671},[37,103506,103479],{"class":50},[37,103508,103482],{"class":82},[37,103510,208],{"class":54},[37,103512,103513],{"class":309},"\"site box_center not found\"",[37,103515,214],{"class":54},[37,103517,103518],{"class":39,"line":2676},[37,103519,2472],{"emptyLinePlaceholder":131},[37,103521,103522,103524,103526,103528,103530,103532,103534],{"class":39,"line":2682},[37,103523,3273],{"class":50},[37,103525,101548],{"class":54},[37,103527,26116],{"class":50},[37,103529,32512],{"class":82},[37,103531,208],{"class":54},[37,103533,1794],{"class":82},[37,103535,30856],{"class":54},[37,103537,103538],{"class":39,"line":2688},[37,103539,101563],{"class":54},[37,103541,103542],{"class":39,"line":2693},[37,103543,2472],{"emptyLinePlaceholder":131},[37,103545,103546,103548,103550,103553],{"class":39,"line":8020},[37,103547,31369],{"class":82},[37,103549,208],{"class":54},[37,103551,103552],{"class":309},"\"simulation time:\"",[37,103554,101525],{"class":54},[37,103556,103557,103559,103561,103564],{"class":39,"line":8044},[37,103558,31369],{"class":82},[37,103560,208],{"class":54},[37,103562,103563],{"class":309},"\"box body position:\"",[37,103565,103566],{"class":54},", data.xpos[box_body_id].copy())\n",[37,103568,103569,103571,103573,103576],{"class":39,"line":8049},[37,103570,31369],{"class":82},[37,103572,208],{"class":54},[37,103574,103575],{"class":309},"\"site position:\"",[37,103577,103578],{"class":54},", data.site_xpos[site_id].copy())\n",[37,103580,103581,103583,103585,103588],{"class":39,"line":8055},[37,103582,31369],{"class":82},[37,103584,208],{"class":54},[37,103586,103587],{"class":309},"\"box qpos:\"",[37,103589,103590],{"class":54},", np.array(data.qpos))\n",[37,103592,103593],{"class":39,"line":8082},[37,103594,2472],{"emptyLinePlaceholder":131},[37,103596,103597],{"class":39,"line":8087},[37,103598,2472],{"emptyLinePlaceholder":131},[37,103600,103601,103603,103605,103607,103609],{"class":39,"line":8093},[37,103602,1603],{"class":50},[37,103604,31290],{"class":82},[37,103606,101606],{"class":50},[37,103608,101609],{"class":309},[37,103610,3811],{"class":54},[37,103612,103613],{"class":39,"line":8105},[37,103614,101616],{"class":54},[14,103616,103617],{},"保存为：",[27,103619,103621],{"className":23894,"code":103620,"language":23896,"meta":32,"style":32},"touch ch2_xml_basic.py\n",[34,103622,103623],{"__ignoreMap":32},[37,103624,103625,103627],{"class":39,"line":40},[37,103626,101330],{"class":2035},[37,103628,103629],{"class":309}," ch2_xml_basic.py\n",[14,103631,102348],{},[27,103633,103635],{"className":23894,"code":103634,"language":23896,"meta":32,"style":32},"python ch2_xml_basic.py\n",[34,103636,103637],{"__ignoreMap":32},[37,103638,103639,103641],{"class":39,"line":40},[37,103640,31],{"class":2035},[37,103642,103629],{"class":309},[175,103644,101619],{"id":101619},[14,103646,103647],{},"用名字查找 body：",[27,103649,103651],{"className":29,"code":103650,"language":31,"meta":32,"style":32},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[34,103652,103653],{"__ignoreMap":32},[37,103654,103655,103658,103660,103662,103664],{"class":39,"line":40},[37,103656,103657],{"class":54},"box_body_id ",[37,103659,70],{"class":50},[37,103661,103437],{"class":54},[37,103663,103440],{"class":309},[37,103665,214],{"class":54},[14,103667,103668],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,103670,103671],{},"用名字查找 site：",[27,103673,103675],{"className":29,"code":103674,"language":31,"meta":32,"style":32},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[34,103676,103677],{"__ignoreMap":32},[37,103678,103679,103682,103684,103686,103688],{"class":39,"line":40},[37,103680,103681],{"class":54},"site_id ",[37,103683,70],{"class":50},[37,103685,103452],{"class":54},[37,103687,103455],{"class":309},[37,103689,214],{"class":54},[14,103691,103692,103693,103696,103697,103700],{},"注意第二个参数是对象类型。查 body 就用 ",[34,103694,103695],{},"mjOBJ_BODY","，查 site 就用 ",[34,103698,103699],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,103702,103703],{},"读取世界坐标：",[27,103705,103707],{"className":29,"code":103706,"language":31,"meta":32,"style":32},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[34,103708,103709,103714],{"__ignoreMap":32},[37,103710,103711],{"class":39,"line":40},[37,103712,103713],{"class":54},"data.xpos[box_body_id]\n",[37,103715,103716],{"class":39,"line":47},[37,103717,103718],{"class":54},"data.site_xpos[site_id]\n",[14,103720,103721,103724,103725,103728],{},[34,103722,103723],{},"xpos"," 是 body 的世界坐标，",[34,103726,103727],{},"site_xpos"," 是 site 的世界坐标。",[175,103730,101755],{"id":101755},[27,103732,103734],{"className":29,"code":103733,"language":31,"meta":32,"style":32},"import mujoco\nimport numpy as np\n",[34,103735,103736,103742],{"__ignoreMap":32},[37,103737,103738,103740],{"class":39,"line":40},[37,103739,51],{"class":50},[37,103741,101348],{"class":54},[37,103743,103744,103746,103748,103750],{"class":39,"line":47},[37,103745,51],{"class":50},[37,103747,31450],{"class":54},[37,103749,31453],{"class":50},[37,103751,31456],{"class":54},[14,103753,103754,103755,103758,103759,103762,103763,417,103766,28458],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[34,103756,103757],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[34,103760,103761],{},"as np"," 是习惯写法，后面就可以写 ",[34,103764,103765],{},"np.array(...)",[34,103767,103768],{},"np.round(...)",[27,103770,103771],{"className":29,"code":101642,"language":31,"meta":32,"style":32},[34,103772,103773,103781,103785],{"__ignoreMap":32},[37,103774,103775,103777,103779],{"class":39,"line":40},[37,103776,101361],{"class":82},[37,103778,13636],{"class":50},[37,103780,101366],{"class":309},[37,103782,103783],{"class":39,"line":47},[37,103784,101657],{"class":309},[37,103786,103787],{"class":39,"line":58},[37,103788,95745],{"class":309},[14,103790,103791,103792,28458],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[34,103793,103794],{},"mujoco.MjModel.from_xml_string(XML)",[27,103796,103798],{"className":53135,"code":103797,"language":53137,"meta":32,"style":32},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[34,103799,103800],{"__ignoreMap":32},[37,103801,103802,103804,103806,103808,103810,103812,103814,103816,103819,103821,103823,103826,103828,103830,103833],{"class":39,"line":40},[37,103803,1113],{"class":54},[37,103805,103257],{"class":51368},[37,103807,14992],{"class":2035},[37,103809,70],{"class":54},[37,103811,103455],{"class":309},[37,103813,101153],{"class":2035},[37,103815,70],{"class":54},[37,103817,103818],{"class":309},"\"0 0 0\"",[37,103820,101183],{"class":2035},[37,103822,70],{"class":54},[37,103824,103825],{"class":309},"\"0.03\"",[37,103827,78835],{"class":2035},[37,103829,70],{"class":54},[37,103831,103832],{"class":309},"\"0 1 0 1\"",[37,103834,101191],{"class":54},[14,103836,103837,103839,103840,103843,103844,103846,103847,103850],{},[34,103838,103257],{}," 是标记点。",[34,103841,103842],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[34,103845,103217],{}," 表示显示出来的小球大小。",[34,103848,103849],{},"rgba=\"0 1 0 1\""," 表示绿色。",[27,103852,103853],{"className":29,"code":103650,"language":31,"meta":32,"style":32},[34,103854,103855],{"__ignoreMap":32},[37,103856,103857,103859,103861,103863,103865],{"class":39,"line":40},[37,103858,103657],{"class":54},[37,103860,70],{"class":50},[37,103862,103437],{"class":54},[37,103864,103440],{"class":309},[37,103866,214],{"class":54},[14,103868,103869,103870,103872],{},"这行的作用是：根据名字 ",[34,103871,103440],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,103874,103875],{},"拆开看：",[158,103877,103878,103884,103889,103895],{},[161,103879,103880,103883],{},[34,103881,103882],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[161,103885,103886,103888],{},[34,103887,102132],{}," 是被查询的模型。",[161,103890,103891,103894],{},[34,103892,103893],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[161,103896,103897,103899],{},[34,103898,103440],{}," 是 XML 里写的名字。",[27,103901,103902],{"className":29,"code":103674,"language":31,"meta":32,"style":32},[34,103903,103904],{"__ignoreMap":32},[37,103905,103906,103908,103910,103912,103914],{"class":39,"line":40},[37,103907,103681],{"class":54},[37,103909,70],{"class":50},[37,103911,103452],{"class":54},[37,103913,103455],{"class":309},[37,103915,214],{"class":54},[14,103917,103918,103919,28458],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[34,103920,103455],{},[27,103922,103924],{"className":29,"code":103923,"language":31,"meta":32,"style":32},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[34,103925,103926,103938],{"__ignoreMap":32},[37,103927,103928,103930,103932,103934,103936],{"class":39,"line":40},[37,103929,1603],{"class":50},[37,103931,103468],{"class":54},[37,103933,1113],{"class":50},[37,103935,4165],{"class":82},[37,103937,3811],{"class":54},[37,103939,103940,103943,103945,103947,103949],{"class":39,"line":47},[37,103941,103942],{"class":50},"    raise",[37,103944,103482],{"class":82},[37,103946,208],{"class":54},[37,103948,103487],{"class":309},[37,103950,214],{"class":54},[14,103952,103953,103955,103956,103959,103960,103963,103964,103967],{},[34,103954,1603],{}," 是条件判断。",[34,103957,103958],{},"mj_name2id"," 找不到对象时会返回 ",[34,103961,103962],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[34,103965,103966],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[27,103969,103971],{"className":29,"code":103970,"language":31,"meta":32,"style":32},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[34,103972,103973,103989],{"__ignoreMap":32},[37,103974,103975,103977,103979,103981,103983,103985,103987],{"class":39,"line":40},[37,103976,3097],{"class":50},[37,103978,101548],{"class":54},[37,103980,26116],{"class":50},[37,103982,32512],{"class":82},[37,103984,208],{"class":54},[37,103986,1794],{"class":82},[37,103988,30856],{"class":54},[37,103990,103991],{"class":39,"line":47},[37,103992,101746],{"class":54},[14,103994,103995],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[27,103997,103999],{"className":29,"code":103998,"language":31,"meta":32,"style":32},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[34,104000,104001],{"__ignoreMap":32},[37,104002,104003,104005,104007,104009],{"class":39,"line":40},[37,104004,30485],{"class":82},[37,104006,208],{"class":54},[37,104008,103563],{"class":309},[37,104010,103566],{"class":54},[14,104012,104013,104015,104016,104019],{},[34,104014,101126],{}," 保存所有 body 的世界坐标。",[34,104017,104018],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[27,104021,104023],{"className":29,"code":104022,"language":31,"meta":32,"style":32},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[34,104024,104025],{"__ignoreMap":32},[37,104026,104027,104029,104031,104033],{"class":39,"line":40},[37,104028,30485],{"class":82},[37,104030,208],{"class":54},[37,104032,103575],{"class":309},[37,104034,103578],{"class":54},[14,104036,104037,104040,104041,104043],{},[34,104038,104039],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[34,104042,103024],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[27,104045,104047],{"className":29,"code":104046,"language":31,"meta":32,"style":32},"print(\"box qpos:\", np.array(data.qpos))\n",[34,104048,104049],{"__ignoreMap":32},[37,104050,104051,104053,104055,104057],{"class":39,"line":40},[37,104052,30485],{"class":82},[37,104054,208],{"class":54},[37,104056,103587],{"class":309},[37,104058,103590],{"class":54},[14,104060,104061,104062,104065],{},"这里打印广义位置数组。",[34,104063,104064],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[146,104067,102363],{"id":102362},[14,104069,104070,104071,104074,104075,28458],{},"程序会输出 ",[34,104072,104073],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[34,104076,104077],{},"qpos",[14,104079,104080,104082,104083,104086,104087,104090],{},[34,104081,104018],{}," 是 body 的世界坐标位置。",[34,104084,104085],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[34,104088,104089],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104092,82290,104093,82598,104095,104097],{},[34,104094,103024],{},[34,104096,103842],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104099,104100],{},"如果你把 site 改成：",[27,104102,104104],{"className":53135,"code":104103,"language":53137,"meta":32,"style":32},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[34,104105,104106],{"__ignoreMap":32},[37,104107,104108,104110,104112,104114,104116,104119,104121,104123,104126,104128,104130,104132,104134,104136,104138],{"class":39,"line":40},[37,104109,1113],{"class":54},[37,104111,103257],{"class":51368},[37,104113,14992],{"class":2035},[37,104115,70],{"class":54},[37,104117,104118],{"class":309},"\"box_top\"",[37,104120,101153],{"class":2035},[37,104122,70],{"class":54},[37,104124,104125],{"class":309},"\"0 0 0.15\"",[37,104127,101183],{"class":2035},[37,104129,70],{"class":54},[37,104131,103825],{"class":309},[37,104133,78835],{"class":2035},[37,104135,70],{"class":54},[37,104137,103832],{"class":309},[37,104139,101191],{"class":54},[14,104141,104142,104143,104146],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[34,104144,104145],{},"site position"," 就会比 body position 的 z 坐标更高。",[146,104148,102395],{"id":102394},[158,104150,104151,104160,104163,104170,104176,104187],{},[161,104152,102458,104153,104155,104156,102461,104158,28458],{},[34,104154,103028],{}," 的初始高度从 ",[34,104157,422],{},[34,104159,282],{},[161,104161,104162],{},"重新运行程序。",[161,104164,104165,104166,104169],{},"观察 ",[34,104167,104168],{},"box qpos"," 和最终位置是否变化。",[161,104171,104172,104173,104175],{},"故意把 ",[34,104174,103257],{}," 名称改错，确认程序能报错。",[161,104177,102458,104178,104180,104181,102461,104183,104186],{},[34,104179,101167],{}," 的颜色 ",[34,104182,102079],{},[34,104184,104185],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[161,104188,102458,104189,82598,104191,102461,104194,104197,104198,104200],{},[34,104190,103024],{},[34,104192,104193],{},"pos",[34,104195,104196],{},"0 0 0.2","，观察 ",[34,104199,104145],{}," 如何变化。",[146,104202,102500],{"id":102499},[175,104204,104206],{"id":104205},"xml-error-schema-violation",[34,104207,104208],{},"XML Error: Schema violation",[14,104210,104211],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[175,104213,104215,81358,104217],{"id":104214},"mj_name2id-返回-1",[34,104216,103958],{},[34,104218,103962],{},[14,104220,104221,104222,104225],{},"说明名字没有找到。检查 XML 中 ",[34,104223,104224],{},"name=\"...\"","，并确认对象类型正确。",[175,104227,104228],{"id":104228},"物体不下落",[14,104230,102570],{},[158,104232,104233,104238,104243],{},[161,104234,104235,104236],{},"body 是否有 ",[34,104237,101667],{},[161,104239,104240,104241],{},"gravity 是否为 ",[34,104242,102636],{},[161,104244,104245,104246,104248],{},"body 是否被固定在 ",[34,104247,101888],{}," 中",[175,104250,104251],{"id":104251},"坐标看起来不符合预期",[14,104253,104254],{},"先区分两种坐标：",[342,104256,104257,104266],{},[345,104258,104259],{},[348,104260,104261,104264],{},[351,104262,104263],{"align":23808},"坐标",[351,104265,100747],{"align":23808},[389,104267,104268,104278],{},[348,104269,104270,104275],{},[394,104271,104272,104273],{"align":23808},"XML 里的 ",[34,104274,104193],{},[394,104276,104277],{"align":23808},"相对父 body 的局部坐标",[348,104279,104280,104286],{},[394,104281,104282,25051,104284],{"align":23808},[34,104283,101126],{},[34,104285,104039],{},[394,104287,104288],{"align":23808},"仿真更新后的世界坐标",[14,104290,104291,104292,104294,104295,82607,104298,104300],{},"如果你修改了 ",[34,104293,101117],{},"，但还没调用 ",[34,104296,104297],{},"mj_forward",[34,104299,101262],{},"，世界坐标可能还没有更新。",[146,104302,102654],{"id":102653},[14,104304,104305],{},"MJCF 建模先掌握四件事：",[158,104307,104308,104313,104318,104323],{},[161,104309,104310,104312],{},[34,104311,51868],{}," 表示刚体层级。",[161,104314,104315,104317],{},[34,104316,101167],{}," 表示形状、碰撞和质量。",[161,104319,104320,104322],{},[34,104321,103003],{}," 决定 body 能不能动、怎么动。",[161,104324,104325,104327],{},[34,104326,103257],{}," 用来标记关键点，方便 Python 读取位置。",[14,104329,104330],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[123,104332,104333],{},"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":32,"searchDepth":47,"depth":47,"links":104335},[104336,104337,104338,104344,104348,104349,104350,104357],{"id":100693,"depth":47,"text":100694},{"id":100816,"depth":47,"text":100817},{"id":101091,"depth":47,"text":101092,"children":104339},[104340,104341,104342,104343],{"id":103007,"depth":58,"text":103007},{"id":103121,"depth":58,"text":103121},{"id":103147,"depth":58,"text":103148},{"id":103251,"depth":58,"text":103252},{"id":101299,"depth":47,"text":101300,"children":104345},[104346,104347],{"id":101619,"depth":58,"text":101619},{"id":101755,"depth":58,"text":101755},{"id":102362,"depth":47,"text":102363},{"id":102394,"depth":47,"text":102395},{"id":102499,"depth":47,"text":102500,"children":104351},[104352,104353,104355,104356],{"id":104205,"depth":58,"text":104208},{"id":104214,"depth":58,"text":104354},"mj_name2id 返回 -1",{"id":104228,"depth":58,"text":104228},{"id":104251,"depth":58,"text":104251},{"id":102653,"depth":47,"text":102654},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102701,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104364,"title":104365,"body":104366,"description":32,"extension":129,"meta":105861,"navigation":131,"path":105862,"seo":105863,"stem":105864,"__hash__":105865},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104367,"toc":105833},[104368,104371,104373,104376,104379,104417,104420,104426,104429,104431,104433,104460,104462,104476,104478,104519,104521,104545,104547,104550,104559,104568,104571,104580,104588,104597,104600,104610,104613,104665,104672,104678,104686,104734,104737,104756,104759,104767,104771,104780,104813,104815,105163,105165,105177,105179,105190,105192,105195,105216,105222,105225,105250,105260,105263,105271,105274,105277,105298,105309,105311,105331,105334,105355,105364,105383,105389,105414,105417,105431,105438,105462,105465,105473,105482,105498,105510,105518,105527,105529,105532,105556,105561,105564,105586,105588,105627,105629,105636,105638,105646,105649,105652,105664,105705,105712,105723,105730,105733,105782,105785,105788,105794,105796,105801,105827,105830],[10,104369,104365],{"id":104370},"_3python-控制接口读取状态与推进仿真",[146,104372,100694],{"id":100693},[14,104374,104375],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104377,104378],{},"你将学习:",[158,104380,104381,104386,104391,104395,104400,104411],{},[161,104382,104383],{},[34,104384,104385],{},"MjModel.from_xml_string",[161,104387,104388],{},[34,104389,104390],{},"MjData(model)",[161,104392,104393],{},[34,104394,101262],{},[161,104396,104397],{},[34,104398,104399],{},"mj_resetData",[161,104401,104402,104403,417,104405,417,104408],{},"读取 ",[34,104404,104077],{},[34,104406,104407],{},"qvel",[34,104409,104410],{},"ctrl",[161,104412,104413,104414],{},"使用 ",[34,104415,104416],{},"model.opt.timestep",[14,104418,104419],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[27,104421,104424],{"className":104422,"code":104423,"language":5259,"meta":32},[5257],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[34,104425,104423],{"__ignoreMap":32},[14,104427,104428],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[146,104430,100817],{"id":100816},[14,104432,100820],{},[27,104434,104436],{"className":23894,"code":104435,"language":23896,"meta":32,"style":32},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[34,104437,104438],{"__ignoreMap":32},[37,104439,104440,104442,104444,104446,104448,104451,104453,104455,104457],{"class":39,"line":40},[37,104441,24649],{"class":2035},[37,104443,26388],{"class":309},[37,104445,23906],{"class":309},[37,104447,26473],{"class":82},[37,104449,104450],{"class":309}," python3",[37,104452,100845],{"class":309},[37,104454,102548],{"class":309},[37,104456,100861],{"class":309},[37,104458,104459],{"class":309}," glfw\n",[14,104461,102866],{},[27,104463,104464],{"className":23894,"code":100966,"language":23896,"meta":32,"style":32},[34,104465,104466],{"__ignoreMap":32},[37,104467,104468,104470,104472,104474],{"class":39,"line":40},[37,104469,23903],{"class":2035},[37,104471,23906],{"class":309},[37,104473,100977],{"class":309},[37,104475,100980],{"class":309},[14,104477,102883],{},[27,104479,104481],{"className":23894,"code":104480,"language":23896,"meta":32,"style":32},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[34,104482,104483,104500,104509],{"__ignoreMap":32},[37,104484,104485,104487,104489,104491,104494,104496,104498],{"class":39,"line":40},[37,104486,30403],{"class":2035},[37,104488,29249],{"class":309},[37,104490,25188],{"class":82},[37,104492,104493],{"class":309}," mujoco-python-api",[37,104495,101022],{"class":309},[37,104497,101025],{"class":82},[37,104499,101028],{"class":82},[37,104501,104502,104504,104506],{"class":39,"line":47},[37,104503,30403],{"class":2035},[37,104505,101035],{"class":309},[37,104507,104508],{"class":309}," mujoco-python-api\n",[37,104510,104511,104513,104515,104517],{"class":39,"line":58},[37,104512,23903],{"class":2035},[37,104514,23906],{"class":309},[37,104516,100977],{"class":309},[37,104518,100980],{"class":309},[14,104520,101051],{},[158,104522,104523,104530,104539],{},[161,104524,104525,101065,104527,104529],{},[34,104526,100722],{},[34,104528,100727],{}," 是官方 Python bindings 的类名。",[161,104531,104532,104533,104536,104537,28458],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[34,104534,104535],{},"mjModel"," 在 Python 中是 ",[34,104538,100756],{},[161,104540,104541,104542,28458],{},"不要使用 ",[34,104543,104544],{},"sim = mujoco_py.MjSim(...)",[146,104546,101092],{"id":101091},[14,104548,104549],{},"仿真推进核心代码:",[27,104551,104553],{"className":29,"code":104552,"language":31,"meta":32,"style":32},"mujoco.mj_step(model, data)\n",[34,104554,104555],{"__ignoreMap":32},[37,104556,104557],{"class":39,"line":40},[37,104558,104552],{"class":54},[14,104560,104561,104562,417,104564,417,104566,28458],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[34,104563,101117],{},[34,104565,101120],{},[34,104567,101114],{},[14,104569,104570],{},"重置仿真:",[27,104572,104574],{"className":29,"code":104573,"language":31,"meta":32,"style":32},"mujoco.mj_resetData(model, data)\n",[34,104575,104576],{"__ignoreMap":32},[37,104577,104578],{"class":39,"line":40},[37,104579,104573],{"class":54},[14,104581,104582,104583,82607,104585,104587],{},"如果手动修改了 ",[34,104584,101117],{},[34,104586,101120],{},"，通常应调用:",[27,104589,104591],{"className":29,"code":104590,"language":31,"meta":32,"style":32},"mujoco.mj_forward(model, data)\n",[34,104592,104593],{"__ignoreMap":32},[37,104594,104595],{"class":39,"line":40},[37,104596,104590],{"class":54},[14,104598,104599],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[175,104601,104603,417,104605,417,104607,104609],{"id":104602},"qposqvelctrl-是什么",[34,104604,104077],{},[34,104606,104407],{},[34,104608,104410],{}," 是什么",[14,104611,104612],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[342,104614,104615,104627],{},[345,104616,104617],{},[348,104618,104619,104622,104624],{},[351,104620,104621],{"align":23808},"字段",[351,104623,100747],{"align":23808},[351,104625,104626],{"align":23808},"谁来修改",[389,104628,104629,104641,104653],{},[348,104630,104631,104635,104638],{},[394,104632,104633],{"align":23808},[34,104634,101117],{},[394,104636,104637],{"align":23808},"广义位置，例如小车位置、关节角、自由物体位置姿态",[394,104639,104640],{"align":23808},"MuJoCo 更新，也可以手动设置初始状态",[348,104642,104643,104647,104650],{},[394,104644,104645],{"align":23808},[34,104646,101120],{},[394,104648,104649],{"align":23808},"广义速度，例如小车速度、关节角速度",[394,104651,104652],{"align":23808},"MuJoCo 更新，也可以手动清零",[348,104654,104655,104659,104662],{},[394,104656,104657],{"align":23808},[34,104658,101123],{},[394,104660,104661],{"align":23808},"actuator 的控制输入",[394,104663,104664],{"align":23808},"主要由你的控制代码写入",[14,104666,9097,104667,101065,104669,104671],{},[34,104668,104077],{},[34,104670,104407],{}," 不一定同维。自由刚体就是典型例子：",[27,104673,104676],{"className":104674,"code":104675,"language":5259,"meta":32},[5257],"freejoint: qpos 7 维，qvel 6 维\n",[34,104677,104675],{"__ignoreMap":32},[175,104679,104681,101065,104683,104685],{"id":104680},"mj_step-和-mj_forward-的区别",[34,104682,101262],{},[34,104684,104297],{}," 的区别",[342,104687,104688,104701],{},[345,104689,104690],{},[348,104691,104692,104695,104698],{},[351,104693,104694],{"align":23808},"函数",[351,104696,104697],{"align":23808},"是否推进时间",[351,104699,104700],{"align":23808},"什么时候用",[389,104702,104703,104716],{},[348,104704,104705,104710,104713],{},[394,104706,104707],{"align":23808},[34,104708,104709],{},"mj_step(model, data)",[394,104711,104712],{"align":23808},"是",[394,104714,104715],{"align":23808},"正常仿真循环，每调用一次前进一步",[348,104717,104718,104723,104726],{},[394,104719,104720],{"align":23808},[34,104721,104722],{},"mj_forward(model, data)",[394,104724,104725],{"align":23808},"否",[394,104727,104728,104729,417,104731,104733],{"align":23808},"手动改了 ",[34,104730,104077],{},[34,104732,104407],{}," 后，刷新派生量",[14,104735,104736],{},"例如你写：",[27,104738,104740],{"className":29,"code":104739,"language":31,"meta":32,"style":32},"data.qpos[2] = 2.0\n",[34,104741,104742],{"__ignoreMap":32},[37,104743,104744,104747,104749,104751,104753],{"class":39,"line":40},[37,104745,104746],{"class":54},"data.qpos[",[37,104748,282],{"class":82},[37,104750,4515],{"class":54},[37,104752,70],{"class":50},[37,104754,104755],{"class":82}," 2.0\n",[14,104757,104758],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[27,104760,104761],{"className":29,"code":104590,"language":31,"meta":32,"style":32},[34,104762,104763],{"__ignoreMap":32},[37,104764,104765],{"class":39,"line":40},[37,104766,104590],{"class":54},[175,104768,104770],{"id":104769},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,104772,104773,104776,104777,104779],{},[34,104774,104775],{},"mujoco.mj_resetData(model, data)"," 会把 ",[34,104778,33470],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[27,104781,104783],{"className":29,"code":104782,"language":31,"meta":32,"style":32},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[34,104784,104785,104789,104799,104809],{"__ignoreMap":32},[37,104786,104787],{"class":39,"line":40},[37,104788,104573],{"class":54},[37,104790,104791,104794,104796],{"class":39,"line":47},[37,104792,104793],{"class":54},"data.qpos[:] ",[37,104795,70],{"class":50},[37,104797,104798],{"class":54}," random_qpos\n",[37,104800,104801,104804,104806],{"class":39,"line":58},[37,104802,104803],{"class":54},"data.qvel[:] ",[37,104805,70],{"class":50},[37,104807,104808],{"class":82}," 0.0\n",[37,104810,104811],{"class":39,"line":64},[37,104812,104590],{"class":54},[146,104814,101300],{"id":101299},[27,104816,104818],{"className":29,"code":104817,"language":31,"meta":32,"style":32},"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",[34,104819,104820,104826,104836,104840,104844,104852,104857,104861,104865,104869,104874,104878,104883,104888,104893,104897,104901,104905,104909,104913,104917,104936,104943,104955,104966,104982,104998,105002,105006,105018,105030,105038,105042,105053,105057,105073,105077,105081,105090,105094,105099,105108,105112,105125,105130,105139,105143,105147,105159],{"__ignoreMap":32},[37,104821,104822,104824],{"class":39,"line":40},[37,104823,51],{"class":50},[37,104825,101348],{"class":54},[37,104827,104828,104830,104832,104834],{"class":39,"line":47},[37,104829,51],{"class":50},[37,104831,31450],{"class":54},[37,104833,31453],{"class":50},[37,104835,31456],{"class":54},[37,104837,104838],{"class":39,"line":58},[37,104839,2472],{"emptyLinePlaceholder":131},[37,104841,104842],{"class":39,"line":64},[37,104843,2472],{"emptyLinePlaceholder":131},[37,104845,104846,104848,104850],{"class":39,"line":76},[37,104847,101361],{"class":82},[37,104849,13636],{"class":50},[37,104851,101366],{"class":309},[37,104853,104854],{"class":39,"line":92},[37,104855,104856],{"class":309},"\u003Cmujoco model=\"state_api\">\n",[37,104858,104859],{"class":39,"line":97},[37,104860,101376],{"class":309},[37,104862,104863],{"class":39,"line":107},[37,104864,2472],{"emptyLinePlaceholder":131},[37,104866,104867],{"class":39,"line":1390},[37,104868,101385],{"class":309},[37,104870,104871],{"class":39,"line":1402},[37,104872,104873],{"class":309},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[37,104875,104876],{"class":39,"line":1684},[37,104877,2472],{"emptyLinePlaceholder":131},[37,104879,104880],{"class":39,"line":1689},[37,104881,104882],{"class":309},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[37,104884,104885],{"class":39,"line":1695},[37,104886,104887],{"class":309},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[37,104889,104890],{"class":39,"line":1700},[37,104891,104892],{"class":309},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[37,104894,104895],{"class":39,"line":1714},[37,104896,101414],{"class":309},[37,104898,104899],{"class":39,"line":1719},[37,104900,101419],{"class":309},[37,104902,104903],{"class":39,"line":1725},[37,104904,101424],{"class":309},[37,104906,104907],{"class":39,"line":1746},[37,104908,95745],{"class":309},[37,104910,104911],{"class":39,"line":1751},[37,104912,2472],{"emptyLinePlaceholder":131},[37,104914,104915],{"class":39,"line":1765},[37,104916,2472],{"emptyLinePlaceholder":131},[37,104918,104919,104921,104924,104927,104929,104932,104934],{"class":39,"line":1770},[37,104920,32017],{"class":50},[37,104922,104923],{"class":2035}," print_state",[37,104925,104926],{"class":54},"(prefix: ",[37,104928,1373],{"class":82},[37,104930,104931],{"class":54},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[37,104933,95733],{"class":82},[37,104935,3811],{"class":54},[37,104937,104938,104940],{"class":39,"line":1799},[37,104939,31369],{"class":82},[37,104941,104942],{"class":54},"(prefix)\n",[37,104944,104945,104947,104949,104952],{"class":39,"line":1804},[37,104946,31369],{"class":82},[37,104948,208],{"class":54},[37,104950,104951],{"class":309},"\"  timestep:\"",[37,104953,104954],{"class":54},", model.opt.timestep)\n",[37,104956,104957,104959,104961,104964],{"class":39,"line":1821},[37,104958,31369],{"class":82},[37,104960,208],{"class":54},[37,104962,104963],{"class":309},"\"  time:\"",[37,104965,101525],{"class":54},[37,104967,104968,104970,104972,104975,104978,104980],{"class":39,"line":1826},[37,104969,31369],{"class":82},[37,104971,208],{"class":54},[37,104973,104974],{"class":309},"\"  qpos:\"",[37,104976,104977],{"class":54},", np.round(data.qpos.copy(), ",[37,104979,498],{"class":82},[37,104981,30567],{"class":54},[37,104983,104984,104986,104988,104991,104994,104996],{"class":39,"line":1831},[37,104985,31369],{"class":82},[37,104987,208],{"class":54},[37,104989,104990],{"class":309},"\"  qvel:\"",[37,104992,104993],{"class":54},", np.round(data.qvel.copy(), ",[37,104995,498],{"class":82},[37,104997,30567],{"class":54},[37,104999,105000],{"class":39,"line":1836},[37,105001,2472],{"emptyLinePlaceholder":131},[37,105003,105004],{"class":39,"line":1850},[37,105005,2472],{"emptyLinePlaceholder":131},[37,105007,105008,105010,105012,105014,105016],{"class":39,"line":1855},[37,105009,32017],{"class":50},[37,105011,2045],{"class":2035},[37,105013,101445],{"class":54},[37,105015,95733],{"class":82},[37,105017,3811],{"class":54},[37,105019,105020,105022,105024,105026,105028],{"class":39,"line":2649},[37,105021,101454],{"class":54},[37,105023,70],{"class":50},[37,105025,101459],{"class":54},[37,105027,101361],{"class":82},[37,105029,214],{"class":54},[37,105031,105032,105034,105036],{"class":39,"line":2663},[37,105033,101468],{"class":54},[37,105035,70],{"class":50},[37,105037,101473],{"class":54},[37,105039,105040],{"class":39,"line":2671},[37,105041,2472],{"emptyLinePlaceholder":131},[37,105043,105044,105047,105050],{"class":39,"line":2676},[37,105045,105046],{"class":54},"    print_state(",[37,105048,105049],{"class":309},"\"initial\"",[37,105051,105052],{"class":54},", model, data)\n",[37,105054,105055],{"class":39,"line":2682},[37,105056,2472],{"emptyLinePlaceholder":131},[37,105058,105059,105061,105063,105065,105067,105069,105071],{"class":39,"line":2688},[37,105060,3273],{"class":50},[37,105062,101548],{"class":54},[37,105064,26116],{"class":50},[37,105066,32512],{"class":82},[37,105068,208],{"class":54},[37,105070,859],{"class":82},[37,105072,30856],{"class":54},[37,105074,105075],{"class":39,"line":2693},[37,105076,101563],{"class":54},[37,105078,105079],{"class":39,"line":8020},[37,105080,2472],{"emptyLinePlaceholder":131},[37,105082,105083,105085,105088],{"class":39,"line":8044},[37,105084,105046],{"class":54},[37,105086,105087],{"class":309},"\"after 50 steps\"",[37,105089,105052],{"class":54},[37,105091,105092],{"class":39,"line":8049},[37,105093,2472],{"emptyLinePlaceholder":131},[37,105095,105096],{"class":39,"line":8055},[37,105097,105098],{"class":54},"    mujoco.mj_resetData(model, data)\n",[37,105100,105101,105103,105106],{"class":39,"line":8082},[37,105102,105046],{"class":54},[37,105104,105105],{"class":309},"\"after reset\"",[37,105107,105052],{"class":54},[37,105109,105110],{"class":39,"line":8087},[37,105111,2472],{"emptyLinePlaceholder":131},[37,105113,105114,105117,105119,105121,105123],{"class":39,"line":8093},[37,105115,105116],{"class":54},"    data.qpos[",[37,105118,282],{"class":82},[37,105120,4515],{"class":54},[37,105122,70],{"class":50},[37,105124,104755],{"class":82},[37,105126,105127],{"class":39,"line":8105},[37,105128,105129],{"class":54},"    mujoco.mj_forward(model, data)\n",[37,105131,105132,105134,105137],{"class":39,"line":8117},[37,105133,105046],{"class":54},[37,105135,105136],{"class":309},"\"after manual qpos edit\"",[37,105138,105052],{"class":54},[37,105140,105141],{"class":39,"line":8129},[37,105142,2472],{"emptyLinePlaceholder":131},[37,105144,105145],{"class":39,"line":9788},[37,105146,2472],{"emptyLinePlaceholder":131},[37,105148,105149,105151,105153,105155,105157],{"class":39,"line":9813},[37,105150,1603],{"class":50},[37,105152,31290],{"class":82},[37,105154,101606],{"class":50},[37,105156,101609],{"class":309},[37,105158,3811],{"class":54},[37,105160,105161],{"class":39,"line":9836},[37,105162,101616],{"class":54},[14,105164,103617],{},[27,105166,105168],{"className":23894,"code":105167,"language":23896,"meta":32,"style":32},"touch ch3_python_state.py\n",[34,105169,105170],{"__ignoreMap":32},[37,105171,105172,105174],{"class":39,"line":40},[37,105173,101330],{"class":2035},[37,105175,105176],{"class":309}," ch3_python_state.py\n",[14,105178,102348],{},[27,105180,105182],{"className":23894,"code":105181,"language":23896,"meta":32,"style":32},"python ch3_python_state.py\n",[34,105183,105184],{"__ignoreMap":32},[37,105185,105186,105188],{"class":39,"line":40},[37,105187,31],{"class":2035},[37,105189,105176],{"class":309},[175,105191,101619],{"id":101619},[14,105193,105194],{},"打印状态的函数：",[27,105196,105198],{"className":29,"code":105197,"language":31,"meta":32,"style":32},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[34,105199,105200],{"__ignoreMap":32},[37,105201,105202,105204,105206,105208,105210,105212,105214],{"class":39,"line":40},[37,105203,32017],{"class":50},[37,105205,104923],{"class":2035},[37,105207,104926],{"class":54},[37,105209,1373],{"class":82},[37,105211,104931],{"class":54},[37,105213,95733],{"class":82},[37,105215,3811],{"class":54},[14,105217,105218,105219,105221],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[34,105220,33470],{}," 里发生了什么。",[14,105223,105224],{},"推进 50 步：",[27,105226,105228],{"className":29,"code":105227,"language":31,"meta":32,"style":32},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[34,105229,105230,105246],{"__ignoreMap":32},[37,105231,105232,105234,105236,105238,105240,105242,105244],{"class":39,"line":40},[37,105233,3097],{"class":50},[37,105235,101548],{"class":54},[37,105237,26116],{"class":50},[37,105239,32512],{"class":82},[37,105241,208],{"class":54},[37,105243,859],{"class":82},[37,105245,30856],{"class":54},[37,105247,105248],{"class":39,"line":47},[37,105249,101746],{"class":54},[14,105251,105252,105253,105256,105257,105259],{},"由于 ",[34,105254,105255],{},"timestep=0.01","，所以 50 步后时间约为 ",[34,105258,35398],{}," 秒。",[14,105261,105262],{},"重置：",[27,105264,105265],{"className":29,"code":104573,"language":31,"meta":32,"style":32},[34,105266,105267],{"__ignoreMap":32},[37,105268,105269],{"class":39,"line":40},[37,105270,104573],{"class":54},[14,105272,105273],{},"这会把时间、位置、速度恢复到初始状态。",[14,105275,105276],{},"手动改高度：",[27,105278,105280],{"className":29,"code":105279,"language":31,"meta":32,"style":32},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[34,105281,105282,105294],{"__ignoreMap":32},[37,105283,105284,105286,105288,105290,105292],{"class":39,"line":40},[37,105285,104746],{"class":54},[37,105287,282],{"class":82},[37,105289,4515],{"class":54},[37,105291,70],{"class":50},[37,105293,104755],{"class":82},[37,105295,105296],{"class":39,"line":47},[37,105297,104590],{"class":54},[14,105299,105300,105301,105304,105305,105308],{},"这个例子里 ",[34,105302,105303],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[34,105306,105307],{},"2.0"," 表示把小球放到更高的位置。",[175,105310,101755],{"id":101755},[27,105312,105313],{"className":29,"code":105197,"language":31,"meta":32,"style":32},[34,105314,105315],{"__ignoreMap":32},[37,105316,105317,105319,105321,105323,105325,105327,105329],{"class":39,"line":40},[37,105318,32017],{"class":50},[37,105320,104923],{"class":2035},[37,105322,104926],{"class":54},[37,105324,1373],{"class":82},[37,105326,104931],{"class":54},[37,105328,95733],{"class":82},[37,105330,3811],{"class":54},[14,105332,105333],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[158,105335,105336,105345,105350],{},[161,105337,105338,105341,105342,105344],{},[34,105339,105340],{},"prefix","：一段文字，比如 ",[34,105343,105049],{},"，用来说明现在打印的是哪个阶段。",[161,105346,105347,105349],{},[34,105348,102132],{},"：MuJoCo 模型。",[161,105351,105352,105354],{},[34,105353,33470],{},"：MuJoCo 当前状态。",[14,105356,105357,417,105360,105363],{},[34,105358,105359],{},"prefix: str",[34,105361,105362],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[27,105365,105367],{"className":29,"code":105366,"language":31,"meta":32,"style":32},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[34,105368,105369],{"__ignoreMap":32},[37,105370,105371,105373,105375,105377,105379,105381],{"class":39,"line":40},[37,105372,30485],{"class":82},[37,105374,208],{"class":54},[37,105376,104974],{"class":309},[37,105378,104977],{"class":54},[37,105380,498],{"class":82},[37,105382,30567],{"class":54},[14,105384,105385,105388],{},[34,105386,105387],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[27,105390,105392],{"className":29,"code":105391,"language":31,"meta":32,"style":32},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[34,105393,105394,105406],{"__ignoreMap":32},[37,105395,105396,105398,105400,105402,105404],{"class":39,"line":40},[37,105397,101681],{"class":54},[37,105399,70],{"class":50},[37,105401,101459],{"class":54},[37,105403,101361],{"class":82},[37,105405,214],{"class":54},[37,105407,105408,105410,105412],{"class":39,"line":47},[37,105409,101705],{"class":54},[37,105411,70],{"class":50},[37,105413,101473],{"class":54},[14,105415,105416],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[27,105418,105420],{"className":29,"code":105419,"language":31,"meta":32,"style":32},"print_state(\"initial\", model, data)\n",[34,105421,105422],{"__ignoreMap":32},[37,105423,105424,105427,105429],{"class":39,"line":40},[37,105425,105426],{"class":54},"print_state(",[37,105428,105049],{"class":309},[37,105430,105052],{"class":54},[14,105432,105433,105434,105437],{},"调用刚才定义的 ",[34,105435,105436],{},"print_state"," 函数，打印初始状态。",[27,105439,105440],{"className":29,"code":105227,"language":31,"meta":32,"style":32},[34,105441,105442,105458],{"__ignoreMap":32},[37,105443,105444,105446,105448,105450,105452,105454,105456],{"class":39,"line":40},[37,105445,3097],{"class":50},[37,105447,101548],{"class":54},[37,105449,26116],{"class":50},[37,105451,32512],{"class":82},[37,105453,208],{"class":54},[37,105455,859],{"class":82},[37,105457,30856],{"class":54},[37,105459,105460],{"class":39,"line":47},[37,105461,101746],{"class":54},[14,105463,105464],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[27,105466,105467],{"className":29,"code":104573,"language":31,"meta":32,"style":32},[34,105468,105469],{"__ignoreMap":32},[37,105470,105471],{"class":39,"line":40},[37,105472,104573],{"class":54},[14,105474,105475,105476,105478,105479,105481],{},"重置 ",[34,105477,33470],{},"。注意它不会重新创建 ",[34,105480,102132],{},"，因为模型结构没有变，只是状态回到初始值。",[27,105483,105484],{"className":29,"code":104739,"language":31,"meta":32,"style":32},[34,105485,105486],{"__ignoreMap":32},[37,105487,105488,105490,105492,105494,105496],{"class":39,"line":40},[37,105489,104746],{"class":54},[37,105491,282],{"class":82},[37,105493,4515],{"class":54},[37,105495,70],{"class":50},[37,105497,104755],{"class":82},[14,105499,105500,105501,417,105504,417,105507,105509],{},"这行是“手动改状态”。在 freejoint 中，",[34,105502,105503],{},"qpos[0]",[34,105505,105506],{},"qpos[1]",[34,105508,105303],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[27,105511,105512],{"className":29,"code":104590,"language":31,"meta":32,"style":32},[34,105513,105514],{"__ignoreMap":32},[37,105515,105516],{"class":39,"line":40},[37,105517,104590],{"class":54},[14,105519,105520,105521,105523,105524,105526],{},"手动改完 ",[34,105522,104077],{}," 后，调用 ",[34,105525,104297],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[146,105528,102363],{"id":102362},[14,105530,105531],{},"你会看到:",[158,105533,105534,105539,105544,105547],{},[161,105535,105536,105537],{},"初始时间为 ",[34,105538,396],{},[161,105540,105541,105542],{},"50 步后时间约为 ",[34,105543,35398],{},[161,105545,105546],{},"reset 后状态恢复",[161,105548,105549,105550,105553,105554],{},"手动修改 ",[34,105551,105552],{},"data.qpos[2]"," 后，小球高度变为 ",[34,105555,105307],{},[14,105557,105558,105560],{},[34,105559,105303],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,105562,105563],{},"输出里可以重点看三件事：",[158,105565,105566,105574,105579],{},[161,105567,105568,105570,105571,105573],{},[34,105569,2459],{}," 是否随着 ",[34,105572,101262],{}," 增加。",[161,105575,105576,105578],{},[34,105577,104077],{}," 的 z 坐标是否因为下落而变化。",[161,105580,105581,105583,105584,28458],{},[34,105582,104399],{}," 后时间是否回到 ",[34,105585,396],{},[146,105587,102395],{"id":102394},[158,105589,105590,105596,105602,105608,105611,105620],{},[161,105591,105592,105593,28458],{},"修改 timestep 为 ",[34,105594,105595],{},"0.005",[161,105597,105598,105599,28458],{},"重新运行，检查 50 步后时间是否约为 ",[34,105600,105601],{},"0.25",[161,105603,105604,105605,28458],{},"修改重力为 ",[34,105606,105607],{},"0 0 -1.0",[161,105609,105610],{},"观察小球下降速度是否变慢。",[161,105612,102458,105613,102461,105616,105619],{},[34,105614,105615],{},"data.qpos[2] = 2.0",[34,105617,105618],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[161,105621,105622,105623,105626],{},"注释掉 ",[34,105624,105625],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[146,105628,102500],{"id":102499},[175,105630,105632,105633,105635],{"id":105631},"修改-dataqpos-后位置没有更新","修改 ",[34,105634,101117],{}," 后位置没有更新",[14,105637,102509],{},[27,105639,105640],{"className":29,"code":104590,"language":31,"meta":32,"style":32},[34,105641,105642],{"__ignoreMap":32},[37,105643,105644],{"class":39,"line":40},[37,105645,104590],{"class":54},[175,105647,105648],{"id":105648},"数组维度看不懂",[14,105650,105651],{},"打印模型维度:",[27,105653,105655],{"className":29,"code":105654,"language":31,"meta":32,"style":32},"print(model.nq, model.nv, model.nu)\n",[34,105656,105657],{"__ignoreMap":32},[37,105658,105659,105661],{"class":39,"line":40},[37,105660,30485],{"class":82},[37,105662,105663],{"class":54},"(model.nq, model.nv, model.nu)\n",[342,105665,105666,105674],{},[345,105667,105668],{},[348,105669,105670,105672],{},[351,105671,104621],{"align":23808},[351,105673,100747],{"align":23808},[389,105675,105676,105686,105696],{},[348,105677,105678,105683],{},[394,105679,105680],{"align":23808},[34,105681,105682],{},"nq",[394,105684,105685],{"align":23808},"位置变量数量",[348,105687,105688,105693],{},[394,105689,105690],{"align":23808},[34,105691,105692],{},"nv",[394,105694,105695],{"align":23808},"速度变量数量",[348,105697,105698,105702],{},[394,105699,105700],{"align":23808},[34,105701,102209],{},[394,105703,105704],{"align":23808},"控制输入数量",[175,105706,105708,105709,105711],{"id":105707},"误以为-qpos-一定等于关节数","误以为 ",[34,105710,104077],{}," 一定等于关节数",[14,105713,105714,105715,82598,105717,105719,105720,105722],{},"不是。例如 ",[34,105716,101667],{},[34,105718,104077],{}," 是 7 维，但 ",[34,105721,104407],{}," 是 6 维。",[175,105724,105726,105727,105729],{"id":105725},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[34,105728,104077],{}," 的第几位",[14,105731,105732],{},"初学时可以先打印：",[27,105734,105736],{"className":29,"code":105735,"language":31,"meta":32,"style":32},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[34,105737,105738,105748,105758,105770],{"__ignoreMap":32},[37,105739,105740,105742,105744,105746],{"class":39,"line":40},[37,105741,30485],{"class":82},[37,105743,208],{"class":54},[37,105745,101486],{"class":309},[37,105747,101489],{"class":54},[37,105749,105750,105752,105754,105756],{"class":39,"line":47},[37,105751,30485],{"class":82},[37,105753,208],{"class":54},[37,105755,101498],{"class":309},[37,105757,101501],{"class":54},[37,105759,105760,105762,105764,105767],{"class":39,"line":58},[37,105761,30485],{"class":82},[37,105763,208],{"class":54},[37,105765,105766],{"class":309},"\"qpos:\"",[37,105768,105769],{"class":54},", data.qpos)\n",[37,105771,105772,105774,105776,105779],{"class":39,"line":64},[37,105773,30485],{"class":82},[37,105775,208],{"class":54},[37,105777,105778],{"class":309},"\"qvel:\"",[37,105780,105781],{"class":54},", data.qvel)\n",[14,105783,105784],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[175,105786,105787],{"id":105787},"仿真结果每次都一样",[14,105789,105790,105791,105793],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[34,105792,104077],{},"、目标点或控制输入。",[146,105795,102654],{"id":102653},[14,105797,105798,105799,24691],{},"Python 控制 MuJoCo 的核心就是读写 ",[34,105800,33470],{},[158,105802,105803,105811,105816,105821],{},[161,105804,105805,105806,101065,105808,105810],{},"用 ",[34,105807,101117],{},[34,105809,101120],{}," 读取状态。",[161,105812,105805,105813,105815],{},[34,105814,101123],{}," 写入控制。",[161,105817,105805,105818,105820],{},[34,105819,101262],{}," 推进时间。",[161,105822,105823,105824,105826],{},"手动改状态后用 ",[34,105825,104297],{}," 刷新派生量。",[14,105828,105829],{},"理解这一章后，就可以进入关节和 actuator 控制。",[123,105831,105832],{},"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":32,"searchDepth":47,"depth":47,"links":105834},[105835,105836,105837,105844,105848,105849,105850,105860],{"id":100693,"depth":47,"text":100694},{"id":100816,"depth":47,"text":100817},{"id":101091,"depth":47,"text":101092,"children":105838},[105839,105841,105843],{"id":104602,"depth":58,"text":105840},"qpos、qvel、ctrl 是什么",{"id":104680,"depth":58,"text":105842},"mj_step 和 mj_forward 的区别",{"id":104769,"depth":58,"text":104770},{"id":101299,"depth":47,"text":101300,"children":105845},[105846,105847],{"id":101619,"depth":58,"text":101619},{"id":101755,"depth":58,"text":101755},{"id":102362,"depth":47,"text":102363},{"id":102394,"depth":47,"text":102395},{"id":102499,"depth":47,"text":102500,"children":105851},[105852,105854,105855,105857,105859],{"id":105631,"depth":58,"text":105853},"修改 data.qpos 后位置没有更新",{"id":105648,"depth":58,"text":105648},{"id":105707,"depth":58,"text":105856},"误以为 qpos 一定等于关节数",{"id":105725,"depth":58,"text":105858},"不知道某个元素在 qpos 的第几位",{"id":105787,"depth":58,"text":105787},{"id":102653,"depth":47,"text":102654},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104365,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105867,"title":105868,"body":105869,"description":32,"extension":129,"meta":107559,"navigation":131,"path":107560,"seo":107561,"stem":107562,"__hash__":107563},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105870,"toc":107535},[105871,105874,105876,105879,105881,105906,105909,105928,105931,105933,105935,105959,105961,105975,105977,106018,106020,106044,106046,106049,106083,106085,106098,106101,106169,106178,106182,106185,106219,106225,106228,106232,106271,106274,106294,106298,106341,106343,106372,106375,106381,106384,106386,106780,106782,106794,106796,106807,106809,106812,106841,106849,106852,106887,106890,106892,106900,106903,106905,106916,106926,106946,106949,106985,106997,107045,107064,107106,107119,107147,107152,107173,107183,107201,107204,107238,107241,107261,107264,107283,107289,107291,107294,107300,107306,107316,107319,107325,107334,107336,107382,107384,107390,107396,107399,107402,107422,107425,107431,107437,107439,107462,107465,107468,107477,107480,107518,107520,107523,107529,107532],[10,105872,105868],{"id":105873},"_4关节actuator-与力控制",[146,105875,100694],{"id":100693},[14,105877,105878],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,105880,104378],{},[158,105882,105883,105889,105894,105898,105903],{},[161,105884,105885,105888],{},[34,105886,105887],{},"hinge"," 关节",[161,105890,105891],{},[34,105892,105893],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[161,105895,105896],{},[34,105897,101123],{},[161,105899,105900],{},[34,105901,105902],{},"ctrlrange",[161,105904,105905],{},"读取关节角和角速度",[14,105907,105908],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[27,105910,105912],{"className":29,"code":105911,"language":31,"meta":32,"style":32},"data.ctrl[0] = ...\n",[34,105913,105914],{"__ignoreMap":32},[37,105915,105916,105919,105921,105923,105925],{"class":39,"line":40},[37,105917,105918],{"class":54},"data.ctrl[",[37,105920,396],{"class":82},[37,105922,4515],{"class":54},[37,105924,70],{"class":50},[37,105926,105927],{"class":82}," ...\n",[14,105929,105930],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[146,105932,100817],{"id":100816},[14,105934,100820],{},[27,105936,105937],{"className":23894,"code":104435,"language":23896,"meta":32,"style":32},[34,105938,105939],{"__ignoreMap":32},[37,105940,105941,105943,105945,105947,105949,105951,105953,105955,105957],{"class":39,"line":40},[37,105942,24649],{"class":2035},[37,105944,26388],{"class":309},[37,105946,23906],{"class":309},[37,105948,26473],{"class":82},[37,105950,104450],{"class":309},[37,105952,100845],{"class":309},[37,105954,102548],{"class":309},[37,105956,100861],{"class":309},[37,105958,104459],{"class":309},[14,105960,102866],{},[27,105962,105963],{"className":23894,"code":100966,"language":23896,"meta":32,"style":32},[34,105964,105965],{"__ignoreMap":32},[37,105966,105967,105969,105971,105973],{"class":39,"line":40},[37,105968,23903],{"class":2035},[37,105970,23906],{"class":309},[37,105972,100977],{"class":309},[37,105974,100980],{"class":309},[14,105976,102883],{},[27,105978,105980],{"className":23894,"code":105979,"language":23896,"meta":32,"style":32},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[34,105981,105982,105999,106008],{"__ignoreMap":32},[37,105983,105984,105986,105988,105990,105993,105995,105997],{"class":39,"line":40},[37,105985,30403],{"class":2035},[37,105987,29249],{"class":309},[37,105989,25188],{"class":82},[37,105991,105992],{"class":309}," mujoco-control",[37,105994,101022],{"class":309},[37,105996,101025],{"class":82},[37,105998,101028],{"class":82},[37,106000,106001,106003,106005],{"class":39,"line":47},[37,106002,30403],{"class":2035},[37,106004,101035],{"class":309},[37,106006,106007],{"class":309}," mujoco-control\n",[37,106009,106010,106012,106014,106016],{"class":39,"line":58},[37,106011,23903],{"class":2035},[37,106013,23906],{"class":309},[37,106015,100977],{"class":309},[37,106017,100980],{"class":309},[14,106019,101051],{},[158,106021,106022,106028,106035,106041],{},[161,106023,106024,106027],{},[34,106025,106026],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[161,106029,106030,106032,106033,28458],{},[34,106031,101123],{}," 长度等于 ",[34,106034,102205],{},[161,106036,82290,106037,106040],{},[34,106038,106039],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[161,106042,106043],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[146,106045,101092],{"id":101091},[14,106047,106048],{},"关节决定 body 如何运动:",[27,106050,106052],{"className":53135,"code":106051,"language":53137,"meta":32,"style":32},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[34,106053,106054],{"__ignoreMap":32},[37,106055,106056,106058,106060,106062,106064,106067,106069,106071,106073,106076,106078,106081],{"class":39,"line":40},[37,106057,1113],{"class":54},[37,106059,103003],{"class":51368},[37,106061,14992],{"class":2035},[37,106063,70],{"class":54},[37,106065,106066],{"class":309},"\"hinge\"",[37,106068,53892],{"class":2035},[37,106070,70],{"class":54},[37,106072,106066],{"class":309},[37,106074,106075],{"class":2035}," axis",[37,106077,70],{"class":54},[37,106079,106080],{"class":309},"\"0 1 0\"",[37,106082,101191],{"class":54},[14,106084,103099],{},[158,106086,106087,106092,106095],{},[161,106088,106089,106090],{},"名字是 ",[34,106091,105887],{},[161,106093,106094],{},"类型是旋转关节",[161,106096,106097],{},"绕 y 轴旋转",[14,106099,106100],{},"actuator 决定如何施加控制:",[27,106102,106104],{"className":53135,"code":106103,"language":53137,"meta":32,"style":32},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[34,106105,106106,106115,106161],{"__ignoreMap":32},[37,106107,106108,106110,106113],{"class":39,"line":40},[37,106109,1113],{"class":54},[37,106111,106112],{"class":51368},"actuator",[37,106114,51375],{"class":54},[37,106116,106117,106119,106122,106124,106126,106129,106132,106134,106136,106139,106141,106143,106146,106148,106151,106154,106156,106159],{"class":39,"line":47},[37,106118,52212],{"class":54},[37,106120,106121],{"class":51368},"motor",[37,106123,14992],{"class":2035},[37,106125,70],{"class":54},[37,106127,106128],{"class":309},"\"hinge_motor\"",[37,106130,106131],{"class":2035}," joint",[37,106133,70],{"class":54},[37,106135,106066],{"class":309},[37,106137,106138],{"class":2035}," gear",[37,106140,70],{"class":54},[37,106142,3750],{"class":309},[37,106144,106145],{"class":2035}," ctrlrange",[37,106147,70],{"class":54},[37,106149,106150],{"class":309},"\"-2 2\"",[37,106152,106153],{"class":2035}," ctrllimited",[37,106155,70],{"class":54},[37,106157,106158],{"class":309},"\"true\"",[37,106160,101191],{"class":54},[37,106162,106163,106165,106167],{"class":39,"line":58},[37,106164,51853],{"class":54},[37,106166,106112],{"class":51368},[37,106168,51375],{"class":54},[14,106170,106171,106174,106175,28458],{},[34,106172,106173],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[34,106176,106177],{},"[-2, 2]",[175,106179,106181],{"id":106180},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106183,106184],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[342,106186,106187,106197],{},[345,106188,106189],{},[348,106190,106191,106193,106195],{},[351,106192,25826],{"align":23808},[351,106194,102743],{"align":23808},[351,106196,100781],{"align":23808},[389,106198,106199,106209],{},[348,106200,106201,106203,106206],{},[394,106202,103003],{"align":23808},[394,106204,106205],{"align":23808},"定义能怎么动",[394,106207,106208],{"align":23808},"门轴允许门旋转",[348,106210,106211,106213,106216],{},[394,106212,106112],{"align":23808},[394,106214,106215],{"align":23808},"定义怎么施力或控制",[394,106217,106218],{"align":23808},"人推门、马达带动门",[14,106220,106221,106222,106224],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[34,106223,101123],{}," 主动控制它。",[14,106226,106227],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[175,106229,106231],{"id":106230},"hinge-joint","hinge joint",[27,106233,106235],{"className":53135,"code":106234,"language":53137,"meta":32,"style":32},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[34,106236,106237],{"__ignoreMap":32},[37,106238,106239,106241,106243,106245,106247,106249,106251,106253,106255,106257,106259,106261,106264,106266,106269],{"class":39,"line":40},[37,106240,1113],{"class":54},[37,106242,103003],{"class":51368},[37,106244,14992],{"class":2035},[37,106246,70],{"class":54},[37,106248,106066],{"class":309},[37,106250,53892],{"class":2035},[37,106252,70],{"class":54},[37,106254,106066],{"class":309},[37,106256,106075],{"class":2035},[37,106258,70],{"class":54},[37,106260,106080],{"class":309},[37,106262,106263],{"class":2035}," damping",[37,106265,70],{"class":54},[37,106267,106268],{"class":309},"\"0.1\"",[37,106270,101191],{"class":54},[14,106272,106273],{},"含义：",[158,106275,106276,106282,106288],{},[161,106277,106278,106281],{},[34,106279,106280],{},"type=\"hinge\"","：只能绕一个轴旋转。",[161,106283,106284,106287],{},[34,106285,106286],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[161,106289,106290,106293],{},[34,106291,106292],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[175,106295,106297],{"id":106296},"motor-actuator","motor actuator",[27,106299,106301],{"className":53135,"code":106300,"language":53137,"meta":32,"style":32},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[34,106302,106303],{"__ignoreMap":32},[37,106304,106305,106307,106309,106311,106313,106315,106317,106319,106321,106323,106325,106327,106329,106331,106333,106335,106337,106339],{"class":39,"line":40},[37,106306,1113],{"class":54},[37,106308,106121],{"class":51368},[37,106310,14992],{"class":2035},[37,106312,70],{"class":54},[37,106314,106128],{"class":309},[37,106316,106131],{"class":2035},[37,106318,70],{"class":54},[37,106320,106066],{"class":309},[37,106322,106138],{"class":2035},[37,106324,70],{"class":54},[37,106326,3750],{"class":309},[37,106328,106145],{"class":2035},[37,106330,70],{"class":54},[37,106332,106150],{"class":309},[37,106334,106153],{"class":2035},[37,106336,70],{"class":54},[37,106338,106158],{"class":309},[37,106340,101191],{"class":54},[14,106342,106273],{},[158,106344,106345,106354,106360,106366],{},[161,106346,106347,106350,106351,106353],{},[34,106348,106349],{},"joint=\"hinge\"","：这个电机作用在名为 ",[34,106352,105887],{}," 的关节上。",[161,106355,106356,106359],{},[34,106357,106358],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[161,106361,106362,106365],{},[34,106363,106364],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[161,106367,106368,106371],{},[34,106369,106370],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106373,106374],{},"简单理解：",[27,106376,106379],{"className":106377,"code":106378,"language":5259,"meta":32},[5257],"实际施加效果 ≈ data.ctrl[0] * gear\n",[34,106380,106378],{"__ignoreMap":32},[14,106382,106383],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[146,106385,101300],{"id":101299},[27,106387,106389],{"className":29,"code":106388,"language":31,"meta":32,"style":32},"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",[34,106390,106391,106398,106402,106408,106418,106422,106426,106434,106439,106444,106448,106452,106457,106462,106466,106471,106476,106481,106486,106490,106494,106498,106503,106508,106513,106517,106521,106525,106529,106541,106553,106561,106565,106575,106585,106595,106599,106612,106625,106629,106646,106660,106695,106699,106703,106714,106729,106744,106756,106760,106764,106776],{"__ignoreMap":32},[37,106392,106393,106395],{"class":39,"line":40},[37,106394,51],{"class":50},[37,106396,106397],{"class":54}," math\n",[37,106399,106400],{"class":39,"line":47},[37,106401,2472],{"emptyLinePlaceholder":131},[37,106403,106404,106406],{"class":39,"line":58},[37,106405,51],{"class":50},[37,106407,101348],{"class":54},[37,106409,106410,106412,106414,106416],{"class":39,"line":64},[37,106411,51],{"class":50},[37,106413,31450],{"class":54},[37,106415,31453],{"class":50},[37,106417,31456],{"class":54},[37,106419,106420],{"class":39,"line":76},[37,106421,2472],{"emptyLinePlaceholder":131},[37,106423,106424],{"class":39,"line":92},[37,106425,2472],{"emptyLinePlaceholder":131},[37,106427,106428,106430,106432],{"class":39,"line":97},[37,106429,101361],{"class":82},[37,106431,13636],{"class":50},[37,106433,101366],{"class":309},[37,106435,106436],{"class":39,"line":107},[37,106437,106438],{"class":309},"\u003Cmujoco model=\"one_link_motor\">\n",[37,106440,106441],{"class":39,"line":1390},[37,106442,106443],{"class":309},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[37,106445,106446],{"class":39,"line":1402},[37,106447,2472],{"emptyLinePlaceholder":131},[37,106449,106450],{"class":39,"line":1684},[37,106451,101385],{"class":309},[37,106453,106454],{"class":39,"line":1689},[37,106455,106456],{"class":309},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[37,106458,106459],{"class":39,"line":1695},[37,106460,106461],{"class":309},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[37,106463,106464],{"class":39,"line":1700},[37,106465,2472],{"emptyLinePlaceholder":131},[37,106467,106468],{"class":39,"line":1714},[37,106469,106470],{"class":309},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[37,106472,106473],{"class":39,"line":1719},[37,106474,106475],{"class":309},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[37,106477,106478],{"class":39,"line":1725},[37,106479,106480],{"class":309},"        \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",[37,106482,106483],{"class":39,"line":1746},[37,106484,106485],{"class":309},"      \u003C\u002Fbody>\n",[37,106487,106488],{"class":39,"line":1751},[37,106489,101414],{"class":309},[37,106491,106492],{"class":39,"line":1765},[37,106493,101419],{"class":309},[37,106495,106496],{"class":39,"line":1770},[37,106497,2472],{"emptyLinePlaceholder":131},[37,106499,106500],{"class":39,"line":1799},[37,106501,106502],{"class":309},"  \u003Cactuator>\n",[37,106504,106505],{"class":39,"line":1804},[37,106506,106507],{"class":309},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[37,106509,106510],{"class":39,"line":1821},[37,106511,106512],{"class":309},"  \u003C\u002Factuator>\n",[37,106514,106515],{"class":39,"line":1826},[37,106516,101424],{"class":309},[37,106518,106519],{"class":39,"line":1831},[37,106520,95745],{"class":309},[37,106522,106523],{"class":39,"line":1836},[37,106524,2472],{"emptyLinePlaceholder":131},[37,106526,106527],{"class":39,"line":1850},[37,106528,2472],{"emptyLinePlaceholder":131},[37,106530,106531,106533,106535,106537,106539],{"class":39,"line":1855},[37,106532,32017],{"class":50},[37,106534,2045],{"class":2035},[37,106536,101445],{"class":54},[37,106538,95733],{"class":82},[37,106540,3811],{"class":54},[37,106542,106543,106545,106547,106549,106551],{"class":39,"line":2649},[37,106544,101454],{"class":54},[37,106546,70],{"class":50},[37,106548,101459],{"class":54},[37,106550,101361],{"class":82},[37,106552,214],{"class":54},[37,106554,106555,106557,106559],{"class":39,"line":2663},[37,106556,101468],{"class":54},[37,106558,70],{"class":50},[37,106560,101473],{"class":54},[37,106562,106563],{"class":39,"line":2671},[37,106564,2472],{"emptyLinePlaceholder":131},[37,106566,106567,106569,106571,106573],{"class":39,"line":2676},[37,106568,31369],{"class":82},[37,106570,208],{"class":54},[37,106572,101486],{"class":309},[37,106574,101489],{"class":54},[37,106576,106577,106579,106581,106583],{"class":39,"line":2682},[37,106578,31369],{"class":82},[37,106580,208],{"class":54},[37,106582,101498],{"class":309},[37,106584,101501],{"class":54},[37,106586,106587,106589,106591,106593],{"class":39,"line":2688},[37,106588,31369],{"class":82},[37,106590,208],{"class":54},[37,106592,101510],{"class":309},[37,106594,101513],{"class":54},[37,106596,106597],{"class":39,"line":2693},[37,106598,2472],{"emptyLinePlaceholder":131},[37,106600,106601,106603,106606,106608,106610],{"class":39,"line":8020},[37,106602,3173],{"class":50},[37,106604,106605],{"class":54}," model.nu ",[37,106607,21020],{"class":50},[37,106609,25191],{"class":82},[37,106611,3811],{"class":54},[37,106613,106614,106616,106618,106620,106623],{"class":39,"line":8044},[37,106615,103479],{"class":50},[37,106617,103482],{"class":82},[37,106619,208],{"class":54},[37,106621,106622],{"class":309},"\"expected exactly one actuator\"",[37,106624,214],{"class":54},[37,106626,106627],{"class":39,"line":8049},[37,106628,2472],{"emptyLinePlaceholder":131},[37,106630,106631,106633,106635,106637,106639,106641,106644],{"class":39,"line":8055},[37,106632,3273],{"class":50},[37,106634,31686],{"class":54},[37,106636,26116],{"class":50},[37,106638,32512],{"class":82},[37,106640,208],{"class":54},[37,106642,106643],{"class":82},"2000",[37,106645,30856],{"class":54},[37,106647,106648,106651,106653,106655,106657],{"class":39,"line":8082},[37,106649,106650],{"class":54},"        t ",[37,106652,70],{"class":50},[37,106654,31686],{"class":54},[37,106656,659],{"class":50},[37,106658,106659],{"class":54}," model.opt.timestep\n",[37,106661,106662,106665,106667,106669,106671,106674,106676,106679,106681,106683,106686,106688,106690,106692],{"class":39,"line":8087},[37,106663,106664],{"class":54},"        data.ctrl[",[37,106666,396],{"class":82},[37,106668,4515],{"class":54},[37,106670,70],{"class":50},[37,106672,106673],{"class":82}," 1.5",[37,106675,6590],{"class":50},[37,106677,106678],{"class":54}," math.sin(",[37,106680,105307],{"class":82},[37,106682,6590],{"class":50},[37,106684,106685],{"class":54}," math.pi ",[37,106687,659],{"class":50},[37,106689,61935],{"class":82},[37,106691,6590],{"class":50},[37,106693,106694],{"class":54}," t)\n",[37,106696,106697],{"class":39,"line":8093},[37,106698,101563],{"class":54},[37,106700,106701],{"class":39,"line":8105},[37,106702,2472],{"emptyLinePlaceholder":131},[37,106704,106705,106707,106709,106712],{"class":39,"line":8117},[37,106706,31369],{"class":82},[37,106708,208],{"class":54},[37,106710,106711],{"class":309},"\"time:\"",[37,106713,101525],{"class":54},[37,106715,106716,106718,106720,106723,106725,106727],{"class":39,"line":8129},[37,106717,31369],{"class":82},[37,106719,208],{"class":54},[37,106721,106722],{"class":309},"\"joint qpos:\"",[37,106724,104977],{"class":54},[37,106726,498],{"class":82},[37,106728,30567],{"class":54},[37,106730,106731,106733,106735,106738,106740,106742],{"class":39,"line":9788},[37,106732,31369],{"class":82},[37,106734,208],{"class":54},[37,106736,106737],{"class":309},"\"joint qvel:\"",[37,106739,104993],{"class":54},[37,106741,498],{"class":82},[37,106743,30567],{"class":54},[37,106745,106746,106748,106750,106753],{"class":39,"line":9813},[37,106747,31369],{"class":82},[37,106749,208],{"class":54},[37,106751,106752],{"class":309},"\"last ctrl:\"",[37,106754,106755],{"class":54},", data.ctrl.copy())\n",[37,106757,106758],{"class":39,"line":9836},[37,106759,2472],{"emptyLinePlaceholder":131},[37,106761,106762],{"class":39,"line":9860},[37,106763,2472],{"emptyLinePlaceholder":131},[37,106765,106766,106768,106770,106772,106774],{"class":39,"line":9865},[37,106767,1603],{"class":50},[37,106769,31290],{"class":82},[37,106771,101606],{"class":50},[37,106773,101609],{"class":309},[37,106775,3811],{"class":54},[37,106777,106778],{"class":39,"line":9870},[37,106779,101616],{"class":54},[14,106781,103617],{},[27,106783,106785],{"className":23894,"code":106784,"language":23896,"meta":32,"style":32},"touch ch4_joint_motor.py\n",[34,106786,106787],{"__ignoreMap":32},[37,106788,106789,106791],{"class":39,"line":40},[37,106790,101330],{"class":2035},[37,106792,106793],{"class":309}," ch4_joint_motor.py\n",[14,106795,102348],{},[27,106797,106799],{"className":23894,"code":106798,"language":23896,"meta":32,"style":32},"python ch4_joint_motor.py\n",[34,106800,106801],{"__ignoreMap":32},[37,106802,106803,106805],{"class":39,"line":40},[37,106804,31],{"class":2035},[37,106806,106793],{"class":309},[175,106808,101619],{"id":101619},[14,106810,106811],{},"检查 actuator 数量：",[27,106813,106815],{"className":29,"code":106814,"language":31,"meta":32,"style":32},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[34,106816,106817,106829],{"__ignoreMap":32},[37,106818,106819,106821,106823,106825,106827],{"class":39,"line":40},[37,106820,1603],{"class":50},[37,106822,106605],{"class":54},[37,106824,21020],{"class":50},[37,106826,25191],{"class":82},[37,106828,3811],{"class":54},[37,106830,106831,106833,106835,106837,106839],{"class":39,"line":47},[37,106832,103942],{"class":50},[37,106834,103482],{"class":82},[37,106836,208],{"class":54},[37,106838,106622],{"class":309},[37,106840,214],{"class":54},[14,106842,106843,106845,106846,106848],{},[34,106844,102205],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[34,106847,101123],{}," 长度应该是 1。",[14,106850,106851],{},"产生正弦控制信号：",[27,106853,106855],{"className":29,"code":106854,"language":31,"meta":32,"style":32},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[34,106856,106857],{"__ignoreMap":32},[37,106858,106859,106861,106863,106865,106867,106869,106871,106873,106875,106877,106879,106881,106883,106885],{"class":39,"line":40},[37,106860,105918],{"class":54},[37,106862,396],{"class":82},[37,106864,4515],{"class":54},[37,106866,70],{"class":50},[37,106868,106673],{"class":82},[37,106870,6590],{"class":50},[37,106872,106678],{"class":54},[37,106874,105307],{"class":82},[37,106876,6590],{"class":50},[37,106878,106685],{"class":54},[37,106880,659],{"class":50},[37,106882,61935],{"class":82},[37,106884,6590],{"class":50},[37,106886,106694],{"class":54},[14,106888,106889],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,106891,101720],{},[27,106893,106894],{"className":29,"code":104552,"language":31,"meta":32,"style":32},[34,106895,106896],{"__ignoreMap":32},[37,106897,106898],{"class":39,"line":40},[37,106899,104552],{"class":54},[14,106901,106902],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[175,106904,101755],{"id":101755},[27,106906,106908],{"className":29,"code":106907,"language":31,"meta":32,"style":32},"import math\n",[34,106909,106910],{"__ignoreMap":32},[37,106911,106912,106914],{"class":39,"line":40},[37,106913,51],{"class":50},[37,106915,106397],{"class":54},[14,106917,106918,106919,101065,106922,106925],{},"导入 Python 标准库里的数学模块。后面要用 ",[34,106920,106921],{},"math.sin",[34,106923,106924],{},"math.pi"," 生成周期变化的控制信号。",[27,106927,106928],{"className":29,"code":103733,"language":31,"meta":32,"style":32},[34,106929,106930,106936],{"__ignoreMap":32},[37,106931,106932,106934],{"class":39,"line":40},[37,106933,51],{"class":50},[37,106935,101348],{"class":54},[37,106937,106938,106940,106942,106944],{"class":39,"line":47},[37,106939,51],{"class":50},[37,106941,31450],{"class":54},[37,106943,31453],{"class":50},[37,106945,31456],{"class":54},[14,106947,106948],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[27,106950,106951],{"className":53135,"code":106234,"language":53137,"meta":32,"style":32},[34,106952,106953],{"__ignoreMap":32},[37,106954,106955,106957,106959,106961,106963,106965,106967,106969,106971,106973,106975,106977,106979,106981,106983],{"class":39,"line":40},[37,106956,1113],{"class":54},[37,106958,103003],{"class":51368},[37,106960,14992],{"class":2035},[37,106962,70],{"class":54},[37,106964,106066],{"class":309},[37,106966,53892],{"class":2035},[37,106968,70],{"class":54},[37,106970,106066],{"class":309},[37,106972,106075],{"class":2035},[37,106974,70],{"class":54},[37,106976,106080],{"class":309},[37,106978,106263],{"class":2035},[37,106980,70],{"class":54},[37,106982,106268],{"class":309},[37,106984,101191],{"class":54},[14,106986,106987,106988,106990,106991,106993,106994,106996],{},"这行定义关节。",[34,106989,105887],{}," 表示旋转关节。",[34,106992,106286],{}," 表示绕 y 轴旋转。",[34,106995,106292],{}," 表示有一点阻尼，运动不会完全无损耗。",[27,106998,107000],{"className":53135,"code":106999,"language":53137,"meta":32,"style":32},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[34,107001,107002],{"__ignoreMap":32},[37,107003,107004,107006,107008,107010,107012,107015,107017,107019,107022,107025,107027,107030,107032,107034,107036,107038,107040,107043],{"class":39,"line":40},[37,107005,1113],{"class":54},[37,107007,101167],{"class":51368},[37,107009,14992],{"class":2035},[37,107011,70],{"class":54},[37,107013,107014],{"class":309},"\"link_geom\"",[37,107016,53892],{"class":2035},[37,107018,70],{"class":54},[37,107020,107021],{"class":309},"\"capsule\"",[37,107023,107024],{"class":2035}," fromto",[37,107026,70],{"class":54},[37,107028,107029],{"class":309},"\"0 0 0 0 0 0.5\"",[37,107031,101183],{"class":2035},[37,107033,70],{"class":54},[37,107035,103825],{"class":309},[37,107037,102048],{"class":2035},[37,107039,70],{"class":54},[37,107041,107042],{"class":309},"\"0.5\"",[37,107044,101191],{"class":54},[14,107046,107047,107048,107050,107051,107053,107054,107057,107058,28458,107061,107063],{},"这行定义摆杆的形状。",[34,107049,103212],{}," 是胶囊体，适合表示杆子。",[34,107052,103223],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[34,107055,107056],{},"(0,0,0)"," 延伸到 ",[34,107059,107060],{},"(0,0,0.5)",[34,107062,103217],{}," 是半径。",[27,107065,107066],{"className":53135,"code":106300,"language":53137,"meta":32,"style":32},[34,107067,107068],{"__ignoreMap":32},[37,107069,107070,107072,107074,107076,107078,107080,107082,107084,107086,107088,107090,107092,107094,107096,107098,107100,107102,107104],{"class":39,"line":40},[37,107071,1113],{"class":54},[37,107073,106121],{"class":51368},[37,107075,14992],{"class":2035},[37,107077,70],{"class":54},[37,107079,106128],{"class":309},[37,107081,106131],{"class":2035},[37,107083,70],{"class":54},[37,107085,106066],{"class":309},[37,107087,106138],{"class":2035},[37,107089,70],{"class":54},[37,107091,3750],{"class":309},[37,107093,106145],{"class":2035},[37,107095,70],{"class":54},[37,107097,106150],{"class":309},[37,107099,106153],{"class":2035},[37,107101,70],{"class":54},[37,107103,106158],{"class":309},[37,107105,101191],{"class":54},[14,107107,107108,107109,107111,107112,107115,107116,107118],{},"这行定义电机。它作用在 ",[34,107110,105887],{}," 关节上。",[34,107113,107114],{},"gear"," 可以理解成放大倍数。",[34,107117,105902],{}," 限制控制输入范围。",[27,107120,107121],{"className":29,"code":106814,"language":31,"meta":32,"style":32},[34,107122,107123,107135],{"__ignoreMap":32},[37,107124,107125,107127,107129,107131,107133],{"class":39,"line":40},[37,107126,1603],{"class":50},[37,107128,106605],{"class":54},[37,107130,21020],{"class":50},[37,107132,25191],{"class":82},[37,107134,3811],{"class":54},[37,107136,107137,107139,107141,107143,107145],{"class":39,"line":47},[37,107138,103942],{"class":50},[37,107140,103482],{"class":82},[37,107142,208],{"class":54},[37,107144,106622],{"class":309},[37,107146,214],{"class":54},[14,107148,107149,107151],{},[34,107150,102205],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[27,107153,107155],{"className":29,"code":107154,"language":31,"meta":32,"style":32},"for step in range(2000):\n",[34,107156,107157],{"__ignoreMap":32},[37,107158,107159,107161,107163,107165,107167,107169,107171],{"class":39,"line":40},[37,107160,3097],{"class":50},[37,107162,31686],{"class":54},[37,107164,26116],{"class":50},[37,107166,32512],{"class":82},[37,107168,208],{"class":54},[37,107170,106643],{"class":82},[37,107172,30856],{"class":54},[14,107174,107175,107176,107178,107179,107182],{},"循环 2000 步。这里没有用 ",[34,107177,1195],{},"，而是用 ",[34,107180,107181],{},"step","，因为后面要用当前步数计算时间。",[27,107184,107186],{"className":29,"code":107185,"language":31,"meta":32,"style":32},"t = step * model.opt.timestep\n",[34,107187,107188],{"__ignoreMap":32},[37,107189,107190,107193,107195,107197,107199],{"class":39,"line":40},[37,107191,107192],{"class":54},"t ",[37,107194,70],{"class":50},[37,107196,31686],{"class":54},[37,107198,659],{"class":50},[37,107200,106659],{"class":54},[14,107202,107203],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[27,107205,107206],{"className":29,"code":106854,"language":31,"meta":32,"style":32},[34,107207,107208],{"__ignoreMap":32},[37,107209,107210,107212,107214,107216,107218,107220,107222,107224,107226,107228,107230,107232,107234,107236],{"class":39,"line":40},[37,107211,105918],{"class":54},[37,107213,396],{"class":82},[37,107215,4515],{"class":54},[37,107217,70],{"class":50},[37,107219,106673],{"class":82},[37,107221,6590],{"class":50},[37,107223,106678],{"class":54},[37,107225,105307],{"class":82},[37,107227,6590],{"class":50},[37,107229,106685],{"class":54},[37,107231,659],{"class":50},[37,107233,61935],{"class":82},[37,107235,6590],{"class":50},[37,107237,106694],{"class":54},[14,107239,107240],{},"这行给电机输入一个正弦波。拆开看：",[158,107242,107243,107249,107255],{},[161,107244,107245,107248],{},[34,107246,107247],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[161,107250,107251,107254],{},[34,107252,107253],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[161,107256,107257,107260],{},[34,107258,107259],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107262,107263],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[27,107265,107267],{"className":29,"code":107266,"language":31,"meta":32,"style":32},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[34,107268,107269],{"__ignoreMap":32},[37,107270,107271,107273,107275,107277,107279,107281],{"class":39,"line":40},[37,107272,30485],{"class":82},[37,107274,208],{"class":54},[37,107276,106722],{"class":309},[37,107278,104977],{"class":54},[37,107280,498],{"class":82},[37,107282,30567],{"class":54},[14,107284,107285,107286,107288],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[34,107287,101117],{}," 只有一个数。",[146,107290,102363],{"id":102362},[14,107292,107293],{},"输出类似:",[27,107295,107298],{"className":107296,"code":107297,"language":5259,"meta":32},[5257],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[34,107299,107297],{"__ignoreMap":32},[14,107301,107302,107303,107305],{},"这里 ",[34,107304,106173],{}," 是电机输入。",[14,107307,107308,107311,107312,107315],{},[34,107309,107310],{},"joint qpos"," 是关节角度，单位通常是弧度。",[34,107313,107314],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107317,107318],{},"角度单位提示：",[27,107320,107323],{"className":107321,"code":107322,"language":5259,"meta":32},[5257],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[34,107324,107322],{"__ignoreMap":32},[14,107326,107327,107328,107330,107331,107333],{},"如果你看到 ",[34,107329,104077],{}," 是 ",[34,107332,35398],{},"，大约就是 28.6 度。",[146,107335,102395],{"id":102394},[158,107337,107338,107345,107348,107355,107358,107366,107374],{},[161,107339,102458,107340,102461,107342,28458],{},[34,107341,106358],{},[34,107343,107344],{},"gear=\"5\"",[161,107346,107347],{},"重新运行，观察关节运动是否更剧烈。",[161,107349,102458,107350,102461,107352,28458],{},[34,107351,105902],{},[34,107353,107354],{},"-0.2 0.2",[161,107356,107357],{},"重新运行，观察控制能力是否变弱。",[161,107359,107360,107361,107363,107364,28458],{},"去掉 actuator，确认 ",[34,107362,102205],{}," 变成 ",[34,107365,396],{},[161,107367,102458,107368,102461,107370,107373],{},[34,107369,106292],{},[34,107371,107372],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[161,107375,102458,107376,102461,107378,107381],{},[34,107377,106286],{},[34,107379,107380],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[146,107383,102500],{"id":102499},[175,107385,107387],{"id":107386},"indexerror-index-0-is-out-of-bounds",[34,107388,107389],{},"IndexError: index 0 is out of bounds",[14,107391,107392,107393,107395],{},"原因是 ",[34,107394,106039],{},"，没有 actuator。",[175,107397,107398],{"id":107398},"关节几乎不动",[14,107400,107401],{},"可能原因:",[158,107403,107404,107409,107413,107419],{},[161,107405,107406,107408],{},[34,107407,107114],{}," 太小",[161,107410,107411,107408],{},[34,107412,105902],{},[161,107414,107415,107418],{},[34,107416,107417],{},"damping"," 太大",[161,107420,107421],{},"重力方向导致运动不明显",[175,107423,107424],{"id":107424},"模型编译失败",[14,107426,107427,107428,107430],{},"检查 actuator 引用的 ",[34,107429,106349],{}," 是否存在，joint 名称是否拼写一致。",[175,107432,107434,107436],{"id":107433},"datactrl0-写了但没有效果",[34,107435,106173],{}," 写了但没有效果",[14,107438,102622],{},[158,107440,107441,107446,107449,107454,107459],{},[161,107442,107443,107445],{},[34,107444,102205],{}," 是否大于 0。",[161,107447,107448],{},"motor 是否引用了正确 joint。",[161,107450,107451,107453],{},[34,107452,107114],{}," 是否太小。",[161,107455,107456,107458],{},[34,107457,105902],{}," 是否把输入限制得太小。",[161,107460,107461],{},"body 是否真的有可动 joint。",[175,107463,107464],{"id":107464},"控制输入超过范围会怎样",[14,107466,107467],{},"如果设置了：",[27,107469,107471],{"className":53135,"code":107470,"language":53137,"meta":32,"style":32},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[34,107472,107473],{"__ignoreMap":32},[37,107474,107475],{"class":39,"line":40},[37,107476,107470],{"class":54},[14,107478,107479],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[27,107481,107483],{"className":29,"code":107482,"language":31,"meta":32,"style":32},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[34,107484,107485,107505],{"__ignoreMap":32},[37,107486,107487,107490,107492,107495,107497,107499,107501,107503],{"class":39,"line":40},[37,107488,107489],{"class":54},"action ",[37,107491,70],{"class":50},[37,107493,107494],{"class":54}," np.clip(action, ",[37,107496,112],{"class":50},[37,107498,105307],{"class":82},[37,107500,12507],{"class":54},[37,107502,105307],{"class":82},[37,107504,214],{"class":54},[37,107506,107507,107509,107511,107513,107515],{"class":39,"line":47},[37,107508,105918],{"class":54},[37,107510,396],{"class":82},[37,107512,4515],{"class":54},[37,107514,70],{"class":50},[37,107516,107517],{"class":54}," action\n",[146,107519,102654],{"id":102653},[14,107521,107522],{},"这一章建立了控制任务的基本形式：",[27,107524,107527],{"className":107525,"code":107526,"language":5259,"meta":32},[5257],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[34,107528,107526],{"__ignoreMap":32},[14,107530,107531],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[123,107533,107534],{},"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":32,"searchDepth":47,"depth":47,"links":107536},[107537,107538,107539,107544,107548,107549,107550,107558],{"id":100693,"depth":47,"text":100694},{"id":100816,"depth":47,"text":100817},{"id":101091,"depth":47,"text":101092,"children":107540},[107541,107542,107543],{"id":106180,"depth":58,"text":106181},{"id":106230,"depth":58,"text":106231},{"id":106296,"depth":58,"text":106297},{"id":101299,"depth":47,"text":101300,"children":107545},[107546,107547],{"id":101619,"depth":58,"text":101619},{"id":101755,"depth":58,"text":101755},{"id":102362,"depth":47,"text":102363},{"id":102394,"depth":47,"text":102395},{"id":102499,"depth":47,"text":102500,"children":107551},[107552,107553,107554,107555,107557],{"id":107386,"depth":58,"text":107389},{"id":107398,"depth":58,"text":107398},{"id":107424,"depth":58,"text":107424},{"id":107433,"depth":58,"text":107556},"data.ctrl[0] 写了但没有效果",{"id":107464,"depth":58,"text":107464},{"id":102653,"depth":47,"text":102654},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105868,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107565,"title":107566,"body":107567,"description":32,"extension":129,"meta":109476,"navigation":131,"path":109477,"seo":109478,"stem":109479,"__hash__":109480},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107568,"toc":109452},[107569,107572,107574,107577,107585,107588,107605,107608,107633,107636,107682,107684,107686,107741,107743,107762,107764,107807,107810,107827,107830,107846,107856,107863,107865,107868,107871,107905,107908,107956,107960,107963,107977,107986,107990,107993,108018,108021,108025,108038,108041,108047,108050,108065,108067,108070,108330,108332,108344,108347,108659,108661,108673,108675,108678,108693,108698,108701,108723,108726,108729,108763,108766,108770,108781,108784,108801,108804,108818,108825,108845,108852,108866,108869,108881,108896,108916,108919,108941,108944,108948,108963,108974,108989,108992,109022,109038,109067,109075,109099,109102,109120,109130,109142,109149,109158,109164,109173,109176,109178,109187,109190,109205,109207,109210,109221,109224,109235,109238,109256,109258,109275,109278,109306,109308,109312,109315,109345,109351,109354,109358,109366,109369,109371,109392,109395,109398,109414,109417,109433,109435,109438,109449],[10,107570,107566],{"id":107571},"_5viewer-可视化与-renderer-离屏渲染",[146,107573,100694],{"id":100693},[14,107575,107576],{},"本章掌握两类可视化方式:",[158,107578,107579,107582],{},[161,107580,107581],{},"交互式 viewer: 适合人工观察仿真",[161,107583,107584],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,107586,107587],{},"使用官方接口:",[27,107589,107591],{"className":29,"code":107590,"language":31,"meta":32,"style":32},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[34,107592,107593,107600],{"__ignoreMap":32},[37,107594,107595,107597],{"class":39,"line":40},[37,107596,51],{"class":50},[37,107598,107599],{"class":54}," mujoco.viewer\n",[37,107601,107602],{"class":39,"line":47},[37,107603,107604],{"class":54},"mujoco.viewer.launch_passive(model, data)\n",[14,107606,107607],{},"以及:",[27,107609,107611],{"className":29,"code":107610,"language":31,"meta":32,"style":32},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[34,107612,107613,107623],{"__ignoreMap":32},[37,107614,107615,107618,107620],{"class":39,"line":40},[37,107616,107617],{"class":54},"renderer ",[37,107619,70],{"class":50},[37,107621,107622],{"class":54}," mujoco.Renderer(model)\n",[37,107624,107625,107628,107630],{"class":39,"line":47},[37,107626,107627],{"class":54},"image ",[37,107629,70],{"class":50},[37,107631,107632],{"class":54}," renderer.render()\n",[14,107634,107635],{},"新手建议先理解二者区别：",[342,107637,107638,107654],{},[345,107639,107640],{},[348,107641,107642,107645,107648,107651],{},[351,107643,107644],{"align":23808},"工具",[351,107646,107647],{"align":23808},"用途",[351,107649,107650],{"align":23808},"是否打开窗口",[351,107652,107653],{"align":23808},"常见场景",[389,107655,107656,107669],{},[348,107657,107658,107661,107664,107666],{},[394,107659,107660],{"align":23808},"Viewer",[394,107662,107663],{"align":23808},"人眼实时观察仿真",[394,107665,104712],{"align":23808},[394,107667,107668],{"align":23808},"调试模型、看控制效果",[348,107670,107671,107674,107677,107679],{},[394,107672,107673],{"align":23808},"Renderer",[394,107675,107676],{"align":23808},"生成图像数组",[394,107678,104725],{"align":23808},[394,107680,107681],{"align":23808},"保存图片、训练视觉策略、服务器批量采集",[146,107683,100817],{"id":100816},[14,107685,100820],{},[27,107687,107689],{"className":23894,"code":107688,"language":23896,"meta":32,"style":32},"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",[34,107690,107691,107703,107713,107721,107729],{"__ignoreMap":32},[37,107692,107693,107695,107697,107699,107701],{"class":39,"line":40},[37,107694,24649],{"class":2035},[37,107696,26388],{"class":309},[37,107698,23906],{"class":309},[37,107700,26473],{"class":82},[37,107702,24751],{"class":82},[37,107704,107705,107707,107709,107711],{"class":39,"line":47},[37,107706,100855],{"class":309},[37,107708,100858],{"class":309},[37,107710,100861],{"class":309},[37,107712,24751],{"class":82},[37,107714,107715,107717,107719],{"class":39,"line":58},[37,107716,100868],{"class":309},[37,107718,100871],{"class":309},[37,107720,24751],{"class":82},[37,107722,107723,107725,107727],{"class":39,"line":64},[37,107724,100878],{"class":309},[37,107726,100881],{"class":309},[37,107728,24751],{"class":82},[37,107730,107731,107733,107735,107737,107739],{"class":39,"line":76},[37,107732,100888],{"class":309},[37,107734,100891],{"class":309},[37,107736,100894],{"class":309},[37,107738,100897],{"class":309},[37,107740,102563],{"class":309},[14,107742,102866],{},[27,107744,107746],{"className":23894,"code":107745,"language":23896,"meta":32,"style":32},"pip install \"mujoco>=2.3\" numpy pillow\n",[34,107747,107748],{"__ignoreMap":32},[37,107749,107750,107752,107754,107756,107759],{"class":39,"line":40},[37,107751,23903],{"class":2035},[37,107753,23906],{"class":309},[37,107755,100977],{"class":309},[37,107757,107758],{"class":309}," numpy",[37,107760,107761],{"class":309}," pillow\n",[14,107763,102883],{},[27,107765,107767],{"className":23894,"code":107766,"language":23896,"meta":32,"style":32},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[34,107768,107769,107786,107795],{"__ignoreMap":32},[37,107770,107771,107773,107775,107777,107780,107782,107784],{"class":39,"line":40},[37,107772,30403],{"class":2035},[37,107774,29249],{"class":309},[37,107776,25188],{"class":82},[37,107778,107779],{"class":309}," mujoco-render",[37,107781,101022],{"class":309},[37,107783,101025],{"class":82},[37,107785,101028],{"class":82},[37,107787,107788,107790,107792],{"class":39,"line":47},[37,107789,30403],{"class":2035},[37,107791,101035],{"class":309},[37,107793,107794],{"class":309}," mujoco-render\n",[37,107796,107797,107799,107801,107803,107805],{"class":39,"line":58},[37,107798,23903],{"class":2035},[37,107800,23906],{"class":309},[37,107802,100977],{"class":309},[37,107804,107758],{"class":309},[37,107806,107761],{"class":309},[14,107808,107809],{},"离屏渲染后端:",[27,107811,107813],{"className":23894,"code":107812,"language":23896,"meta":32,"style":32},"export MUJOCO_GL=egl\n",[34,107814,107815],{"__ignoreMap":32},[37,107816,107817,107819,107822,107824],{"class":39,"line":40},[37,107818,25115],{"class":50},[37,107820,107821],{"class":54}," MUJOCO_GL",[37,107823,70],{"class":50},[37,107825,107826],{"class":54},"egl\n",[14,107828,107829],{},"或:",[27,107831,107833],{"className":23894,"code":107832,"language":23896,"meta":32,"style":32},"export MUJOCO_GL=osmesa\n",[34,107834,107835],{"__ignoreMap":32},[37,107836,107837,107839,107841,107843],{"class":39,"line":40},[37,107838,25115],{"class":50},[37,107840,107821],{"class":54},[37,107842,70],{"class":50},[37,107844,107845],{"class":54},"osmesa\n",[14,107847,107848,107849,107852,107853,28458],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[34,107850,107851],{},"egl"," 失败，再尝试 ",[34,107854,107855],{},"osmesa",[14,107857,107858,107859,107862],{},"如果你在本机桌面环境运行，通常先不要设置 ",[34,107860,107861],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[146,107864,101092],{"id":101091},[14,107866,107867],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,107869,107870],{},"典型 viewer 流程:",[27,107872,107874],{"className":29,"code":107873,"language":31,"meta":32,"style":32},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[34,107875,107876,107889,107896,107900],{"__ignoreMap":32},[37,107877,107878,107881,107884,107886],{"class":39,"line":40},[37,107879,107880],{"class":50},"with",[37,107882,107883],{"class":54}," mujoco.viewer.launch_passive(model, data) ",[37,107885,31453],{"class":50},[37,107887,107888],{"class":54}," viewer:\n",[37,107890,107891,107893],{"class":39,"line":47},[37,107892,2323],{"class":50},[37,107894,107895],{"class":54}," viewer.is_running():\n",[37,107897,107898],{"class":39,"line":58},[37,107899,101563],{"class":54},[37,107901,107902],{"class":39,"line":64},[37,107903,107904],{"class":54},"        viewer.sync()\n",[14,107906,107907],{},"典型 renderer 流程:",[27,107909,107911],{"className":29,"code":107910,"language":31,"meta":32,"style":32},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[34,107912,107913,107939,107943,107948],{"__ignoreMap":32},[37,107914,107915,107917,107919,107922,107924,107926,107928,107930,107932,107934,107937],{"class":39,"line":40},[37,107916,107617],{"class":54},[37,107918,70],{"class":50},[37,107920,107921],{"class":54}," mujoco.Renderer(model, ",[37,107923,25054],{"class":5288},[37,107925,70],{"class":50},[37,107927,42411],{"class":82},[37,107929,12507],{"class":54},[37,107931,25050],{"class":5288},[37,107933,70],{"class":50},[37,107935,107936],{"class":82},"640",[37,107938,214],{"class":54},[37,107940,107941],{"class":39,"line":47},[37,107942,104552],{"class":54},[37,107944,107945],{"class":39,"line":58},[37,107946,107947],{"class":54},"renderer.update_scene(data)\n",[37,107949,107950,107952,107954],{"class":39,"line":64},[37,107951,107627],{"class":54},[37,107953,70],{"class":50},[37,107955,107632],{"class":54},[175,107957,107959],{"id":107958},"viewer-的同步逻辑","viewer 的同步逻辑",[14,107961,107962],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[27,107964,107966],{"className":29,"code":107965,"language":31,"meta":32,"style":32},"mujoco.mj_step(model, data)\nviewer.sync()\n",[34,107967,107968,107972],{"__ignoreMap":32},[37,107969,107970],{"class":39,"line":40},[37,107971,104552],{"class":54},[37,107973,107974],{"class":39,"line":47},[37,107975,107976],{"class":54},"viewer.sync()\n",[14,107978,107979,107981,107982,107985],{},[34,107980,101262],{}," 负责算物理，",[34,107983,107984],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[175,107987,107989],{"id":107988},"为什么要-sleep","为什么要 sleep",[14,107991,107992],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[27,107994,107996],{"className":29,"code":107995,"language":31,"meta":32,"style":32},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[34,107997,107998],{"__ignoreMap":32},[37,107999,108000,108003,108005,108008,108010,108013,108015],{"class":39,"line":40},[37,108001,108002],{"class":54},"sleep_time ",[37,108004,70],{"class":50},[37,108006,108007],{"class":54}," model.opt.timestep ",[37,108009,112],{"class":50},[37,108011,108012],{"class":54}," (time.time() ",[37,108014,112],{"class":50},[37,108016,108017],{"class":54}," step_start)\n",[14,108019,108020],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[175,108022,108024],{"id":108023},"renderer-输出是什么","renderer 输出是什么",[27,108026,108028],{"className":29,"code":108027,"language":31,"meta":32,"style":32},"image = renderer.render()\n",[34,108029,108030],{"__ignoreMap":32},[37,108031,108032,108034,108036],{"class":39,"line":40},[37,108033,107627],{"class":54},[37,108035,70],{"class":50},[37,108037,107632],{"class":54},[14,108039,108040],{},"得到的是 NumPy 数组，形状通常是：",[27,108042,108045],{"className":108043,"code":108044,"language":5259,"meta":32},[5257],"(height, width, 3)\n",[34,108046,108044],{"__ignoreMap":32},[14,108048,108049],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[27,108051,108053],{"className":29,"code":108052,"language":31,"meta":32,"style":32},"Image.fromarray(image).save(\"render_output.png\")\n",[34,108054,108055],{"__ignoreMap":32},[37,108056,108057,108060,108063],{"class":39,"line":40},[37,108058,108059],{"class":54},"Image.fromarray(image).save(",[37,108061,108062],{"class":309},"\"render_output.png\"",[37,108064,214],{"class":54},[146,108066,101300],{"id":101299},[14,108068,108069],{},"交互式 Viewer:",[27,108071,108073],{"className":29,"code":108072,"language":31,"meta":32,"style":32},"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",[34,108074,108075,108081,108085,108091,108097,108101,108105,108113,108118,108122,108126,108130,108135,108140,108144,108148,108152,108157,108161,108165,108169,108173,108177,108181,108193,108205,108213,108217,108227,108247,108257,108262,108267,108271,108288,108301,108306,108310,108314,108326],{"__ignoreMap":32},[37,108076,108077,108079],{"class":39,"line":40},[37,108078,51],{"class":50},[37,108080,31899],{"class":54},[37,108082,108083],{"class":39,"line":47},[37,108084,2472],{"emptyLinePlaceholder":131},[37,108086,108087,108089],{"class":39,"line":58},[37,108088,51],{"class":50},[37,108090,101348],{"class":54},[37,108092,108093,108095],{"class":39,"line":64},[37,108094,51],{"class":50},[37,108096,107599],{"class":54},[37,108098,108099],{"class":39,"line":76},[37,108100,2472],{"emptyLinePlaceholder":131},[37,108102,108103],{"class":39,"line":92},[37,108104,2472],{"emptyLinePlaceholder":131},[37,108106,108107,108109,108111],{"class":39,"line":97},[37,108108,101361],{"class":82},[37,108110,13636],{"class":50},[37,108112,101366],{"class":309},[37,108114,108115],{"class":39,"line":107},[37,108116,108117],{"class":309},"\u003Cmujoco model=\"viewer_demo\">\n",[37,108119,108120],{"class":39,"line":1390},[37,108121,101376],{"class":309},[37,108123,108124],{"class":39,"line":1402},[37,108125,2472],{"emptyLinePlaceholder":131},[37,108127,108128],{"class":39,"line":1684},[37,108129,101385],{"class":309},[37,108131,108132],{"class":39,"line":1689},[37,108133,108134],{"class":309},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[37,108136,108137],{"class":39,"line":1695},[37,108138,108139],{"class":309},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[37,108141,108142],{"class":39,"line":1700},[37,108143,2472],{"emptyLinePlaceholder":131},[37,108145,108146],{"class":39,"line":1714},[37,108147,101399],{"class":309},[37,108149,108150],{"class":39,"line":1719},[37,108151,101404],{"class":309},[37,108153,108154],{"class":39,"line":1725},[37,108155,108156],{"class":309},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[37,108158,108159],{"class":39,"line":1746},[37,108160,101414],{"class":309},[37,108162,108163],{"class":39,"line":1751},[37,108164,101419],{"class":309},[37,108166,108167],{"class":39,"line":1765},[37,108168,101424],{"class":309},[37,108170,108171],{"class":39,"line":1770},[37,108172,95745],{"class":309},[37,108174,108175],{"class":39,"line":1799},[37,108176,2472],{"emptyLinePlaceholder":131},[37,108178,108179],{"class":39,"line":1804},[37,108180,2472],{"emptyLinePlaceholder":131},[37,108182,108183,108185,108187,108189,108191],{"class":39,"line":1821},[37,108184,32017],{"class":50},[37,108186,2045],{"class":2035},[37,108188,101445],{"class":54},[37,108190,95733],{"class":82},[37,108192,3811],{"class":54},[37,108194,108195,108197,108199,108201,108203],{"class":39,"line":1826},[37,108196,101454],{"class":54},[37,108198,70],{"class":50},[37,108200,101459],{"class":54},[37,108202,101361],{"class":82},[37,108204,214],{"class":54},[37,108206,108207,108209,108211],{"class":39,"line":1831},[37,108208,101468],{"class":54},[37,108210,70],{"class":50},[37,108212,101473],{"class":54},[37,108214,108215],{"class":39,"line":1836},[37,108216,2472],{"emptyLinePlaceholder":131},[37,108218,108219,108221,108223,108225],{"class":39,"line":1850},[37,108220,34247],{"class":50},[37,108222,107883],{"class":54},[37,108224,31453],{"class":50},[37,108226,107888],{"class":54},[37,108228,108229,108232,108235,108237,108240,108242,108245],{"class":39,"line":1855},[37,108230,108231],{"class":50},"        while",[37,108233,108234],{"class":54}," viewer.is_running() ",[37,108236,30532],{"class":50},[37,108238,108239],{"class":54}," data.time ",[37,108241,1113],{"class":50},[37,108243,108244],{"class":82}," 5.0",[37,108246,3811],{"class":54},[37,108248,108249,108252,108254],{"class":39,"line":2649},[37,108250,108251],{"class":54},"            step_start ",[37,108253,70],{"class":50},[37,108255,108256],{"class":54}," time.time()\n",[37,108258,108259],{"class":39,"line":2663},[37,108260,108261],{"class":54},"            mujoco.mj_step(model, data)\n",[37,108263,108264],{"class":39,"line":2671},[37,108265,108266],{"class":54},"            viewer.sync()\n",[37,108268,108269],{"class":39,"line":2676},[37,108270,2472],{"emptyLinePlaceholder":131},[37,108272,108273,108276,108278,108280,108282,108284,108286],{"class":39,"line":2682},[37,108274,108275],{"class":54},"            sleep_time ",[37,108277,70],{"class":50},[37,108279,108007],{"class":54},[37,108281,112],{"class":50},[37,108283,108012],{"class":54},[37,108285,112],{"class":50},[37,108287,108017],{"class":54},[37,108289,108290,108292,108295,108297,108299],{"class":39,"line":2688},[37,108291,4714],{"class":50},[37,108293,108294],{"class":54}," sleep_time ",[37,108296,1163],{"class":50},[37,108298,4165],{"class":82},[37,108300,3811],{"class":54},[37,108302,108303],{"class":39,"line":2693},[37,108304,108305],{"class":54},"                time.sleep(sleep_time)\n",[37,108307,108308],{"class":39,"line":8020},[37,108309,2472],{"emptyLinePlaceholder":131},[37,108311,108312],{"class":39,"line":8044},[37,108313,2472],{"emptyLinePlaceholder":131},[37,108315,108316,108318,108320,108322,108324],{"class":39,"line":8049},[37,108317,1603],{"class":50},[37,108319,31290],{"class":82},[37,108321,101606],{"class":50},[37,108323,101609],{"class":309},[37,108325,3811],{"class":54},[37,108327,108328],{"class":39,"line":8055},[37,108329,101616],{"class":54},[14,108331,103617],{},[27,108333,108335],{"className":23894,"code":108334,"language":23896,"meta":32,"style":32},"touch ch5_viewer.py\n",[34,108336,108337],{"__ignoreMap":32},[37,108338,108339,108341],{"class":39,"line":40},[37,108340,101330],{"class":2035},[37,108342,108343],{"class":309}," ch5_viewer.py\n",[14,108345,108346],{},"离屏 Renderer 保存图片:",[27,108348,108350],{"className":29,"code":108349,"language":31,"meta":32,"style":32},"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",[34,108351,108352,108364,108368,108374,108384,108388,108392,108400,108405,108409,108413,108417,108421,108426,108430,108434,108438,108442,108446,108450,108454,108458,108462,108466,108470,108482,108494,108502,108527,108531,108547,108551,108555,108570,108579,108583,108597,108602,108607,108611,108623,108635,108639,108643,108655],{"__ignoreMap":32},[37,108353,108354,108356,108359,108361],{"class":39,"line":40},[37,108355,30807],{"class":50},[37,108357,108358],{"class":54}," pathlib ",[37,108360,51],{"class":50},[37,108362,108363],{"class":54}," Path\n",[37,108365,108366],{"class":39,"line":47},[37,108367,2472],{"emptyLinePlaceholder":131},[37,108369,108370,108372],{"class":39,"line":58},[37,108371,51],{"class":50},[37,108373,101348],{"class":54},[37,108375,108376,108378,108380,108382],{"class":39,"line":64},[37,108377,30807],{"class":50},[37,108379,47331],{"class":82},[37,108381,47334],{"class":50},[37,108383,47337],{"class":54},[37,108385,108386],{"class":39,"line":76},[37,108387,2472],{"emptyLinePlaceholder":131},[37,108389,108390],{"class":39,"line":92},[37,108391,2472],{"emptyLinePlaceholder":131},[37,108393,108394,108396,108398],{"class":39,"line":97},[37,108395,101361],{"class":82},[37,108397,13636],{"class":50},[37,108399,101366],{"class":309},[37,108401,108402],{"class":39,"line":107},[37,108403,108404],{"class":309},"\u003Cmujoco model=\"renderer_demo\">\n",[37,108406,108407],{"class":39,"line":1390},[37,108408,101376],{"class":309},[37,108410,108411],{"class":39,"line":1402},[37,108412,2472],{"emptyLinePlaceholder":131},[37,108414,108415],{"class":39,"line":1684},[37,108416,101385],{"class":309},[37,108418,108419],{"class":39,"line":1689},[37,108420,108134],{"class":309},[37,108422,108423],{"class":39,"line":1695},[37,108424,108425],{"class":309},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[37,108427,108428],{"class":39,"line":1700},[37,108429,108139],{"class":309},[37,108431,108432],{"class":39,"line":1714},[37,108433,2472],{"emptyLinePlaceholder":131},[37,108435,108436],{"class":39,"line":1719},[37,108437,101399],{"class":309},[37,108439,108440],{"class":39,"line":1725},[37,108441,101404],{"class":309},[37,108443,108444],{"class":39,"line":1746},[37,108445,108156],{"class":309},[37,108447,108448],{"class":39,"line":1751},[37,108449,101414],{"class":309},[37,108451,108452],{"class":39,"line":1765},[37,108453,101419],{"class":309},[37,108455,108456],{"class":39,"line":1770},[37,108457,101424],{"class":309},[37,108459,108460],{"class":39,"line":1799},[37,108461,95745],{"class":309},[37,108463,108464],{"class":39,"line":1804},[37,108465,2472],{"emptyLinePlaceholder":131},[37,108467,108468],{"class":39,"line":1821},[37,108469,2472],{"emptyLinePlaceholder":131},[37,108471,108472,108474,108476,108478,108480],{"class":39,"line":1826},[37,108473,32017],{"class":50},[37,108475,2045],{"class":2035},[37,108477,101445],{"class":54},[37,108479,95733],{"class":82},[37,108481,3811],{"class":54},[37,108483,108484,108486,108488,108490,108492],{"class":39,"line":1831},[37,108485,101454],{"class":54},[37,108487,70],{"class":50},[37,108489,101459],{"class":54},[37,108491,101361],{"class":82},[37,108493,214],{"class":54},[37,108495,108496,108498,108500],{"class":39,"line":1836},[37,108497,101468],{"class":54},[37,108499,70],{"class":50},[37,108501,101473],{"class":54},[37,108503,108504,108507,108509,108511,108513,108515,108517,108519,108521,108523,108525],{"class":39,"line":1850},[37,108505,108506],{"class":54},"    renderer ",[37,108508,70],{"class":50},[37,108510,107921],{"class":54},[37,108512,25054],{"class":5288},[37,108514,70],{"class":50},[37,108516,42411],{"class":82},[37,108518,12507],{"class":54},[37,108520,25050],{"class":5288},[37,108522,70],{"class":50},[37,108524,107936],{"class":82},[37,108526,214],{"class":54},[37,108528,108529],{"class":39,"line":1855},[37,108530,2472],{"emptyLinePlaceholder":131},[37,108532,108533,108535,108537,108539,108541,108543,108545],{"class":39,"line":2649},[37,108534,3273],{"class":50},[37,108536,101548],{"class":54},[37,108538,26116],{"class":50},[37,108540,32512],{"class":82},[37,108542,208],{"class":54},[37,108544,516],{"class":82},[37,108546,30856],{"class":54},[37,108548,108549],{"class":39,"line":2663},[37,108550,101563],{"class":54},[37,108552,108553],{"class":39,"line":2671},[37,108554,2472],{"emptyLinePlaceholder":131},[37,108556,108557,108560,108563,108565,108568],{"class":39,"line":2676},[37,108558,108559],{"class":54},"    renderer.update_scene(data, ",[37,108561,108562],{"class":5288},"camera",[37,108564,70],{"class":50},[37,108566,108567],{"class":309},"\"fixed_camera\"",[37,108569,214],{"class":54},[37,108571,108572,108575,108577],{"class":39,"line":2682},[37,108573,108574],{"class":54},"    image ",[37,108576,70],{"class":50},[37,108578,107632],{"class":54},[37,108580,108581],{"class":39,"line":2688},[37,108582,2472],{"emptyLinePlaceholder":131},[37,108584,108585,108588,108590,108593,108595],{"class":39,"line":2693},[37,108586,108587],{"class":54},"    output_path ",[37,108589,70],{"class":50},[37,108591,108592],{"class":54}," Path(",[37,108594,108062],{"class":309},[37,108596,214],{"class":54},[37,108598,108599],{"class":39,"line":8020},[37,108600,108601],{"class":54},"    Image.fromarray(image).save(output_path)\n",[37,108603,108604],{"class":39,"line":8044},[37,108605,108606],{"class":54},"    renderer.close()\n",[37,108608,108609],{"class":39,"line":8049},[37,108610,2472],{"emptyLinePlaceholder":131},[37,108612,108613,108615,108617,108620],{"class":39,"line":8055},[37,108614,31369],{"class":82},[37,108616,208],{"class":54},[37,108618,108619],{"class":309},"\"saved:\"",[37,108621,108622],{"class":54},", output_path.resolve())\n",[37,108624,108625,108627,108629,108632],{"class":39,"line":8082},[37,108626,31369],{"class":82},[37,108628,208],{"class":54},[37,108630,108631],{"class":309},"\"image shape:\"",[37,108633,108634],{"class":54},", image.shape)\n",[37,108636,108637],{"class":39,"line":8087},[37,108638,2472],{"emptyLinePlaceholder":131},[37,108640,108641],{"class":39,"line":8093},[37,108642,2472],{"emptyLinePlaceholder":131},[37,108644,108645,108647,108649,108651,108653],{"class":39,"line":8105},[37,108646,1603],{"class":50},[37,108648,31290],{"class":82},[37,108650,101606],{"class":50},[37,108652,101609],{"class":309},[37,108654,3811],{"class":54},[37,108656,108657],{"class":39,"line":8117},[37,108658,101616],{"class":54},[14,108660,103617],{},[27,108662,108664],{"className":23894,"code":108663,"language":23896,"meta":32,"style":32},"touch ch5_renderer.py\n",[34,108665,108666],{"__ignoreMap":32},[37,108667,108668,108670],{"class":39,"line":40},[37,108669,101330],{"class":2035},[37,108671,108672],{"class":309}," ch5_renderer.py\n",[175,108674,101619],{"id":101619},[14,108676,108677],{},"viewer 上下文：",[27,108679,108681],{"className":29,"code":108680,"language":31,"meta":32,"style":32},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[34,108682,108683],{"__ignoreMap":32},[37,108684,108685,108687,108689,108691],{"class":39,"line":40},[37,108686,107880],{"class":50},[37,108688,107883],{"class":54},[37,108690,31453],{"class":50},[37,108692,107888],{"class":54},[14,108694,108695,108697],{},[34,108696,107880],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,108699,108700],{},"窗口循环：",[27,108702,108704],{"className":29,"code":108703,"language":31,"meta":32,"style":32},"while viewer.is_running() and data.time \u003C 5.0:\n",[34,108705,108706],{"__ignoreMap":32},[37,108707,108708,108711,108713,108715,108717,108719,108721],{"class":39,"line":40},[37,108709,108710],{"class":50},"while",[37,108712,108234],{"class":54},[37,108714,30532],{"class":50},[37,108716,108239],{"class":54},[37,108718,1113],{"class":50},[37,108720,108244],{"class":82},[37,108722,3811],{"class":54},[14,108724,108725],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,108727,108728],{},"固定相机：",[27,108730,108732],{"className":53135,"code":108731,"language":53137,"meta":32,"style":32},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[34,108733,108734],{"__ignoreMap":32},[37,108735,108736,108738,108740,108742,108744,108746,108748,108750,108753,108756,108758,108761],{"class":39,"line":40},[37,108737,1113],{"class":54},[37,108739,108562],{"class":51368},[37,108741,14992],{"class":2035},[37,108743,70],{"class":54},[37,108745,108567],{"class":309},[37,108747,101153],{"class":2035},[37,108749,70],{"class":54},[37,108751,108752],{"class":309},"\"1.5 -2.0 1.2\"",[37,108754,108755],{"class":2035}," xyaxes",[37,108757,70],{"class":54},[37,108759,108760],{"class":309},"\"1 0.75 0 0 0 1\"",[37,108762,101191],{"class":54},[14,108764,108765],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[175,108767,108769],{"id":108768},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[27,108771,108773],{"className":29,"code":108772,"language":31,"meta":32,"style":32},"import time\n",[34,108774,108775],{"__ignoreMap":32},[37,108776,108777,108779],{"class":39,"line":40},[37,108778,51],{"class":50},[37,108780,31899],{"class":54},[14,108782,108783],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[27,108785,108787],{"className":29,"code":108786,"language":31,"meta":32,"style":32},"import mujoco\nimport mujoco.viewer\n",[34,108788,108789,108795],{"__ignoreMap":32},[37,108790,108791,108793],{"class":39,"line":40},[37,108792,51],{"class":50},[37,108794,101348],{"class":54},[37,108796,108797,108799],{"class":39,"line":47},[37,108798,51],{"class":50},[37,108800,107599],{"class":54},[14,108802,108803],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[27,108805,108806],{"className":29,"code":108680,"language":31,"meta":32,"style":32},[34,108807,108808],{"__ignoreMap":32},[37,108809,108810,108812,108814,108816],{"class":39,"line":40},[37,108811,107880],{"class":50},[37,108813,107883],{"class":54},[37,108815,31453],{"class":50},[37,108817,107888],{"class":54},[14,108819,108820,108821,108824],{},"打开一个 viewer 窗口。",[34,108822,108823],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[27,108826,108827],{"className":29,"code":108703,"language":31,"meta":32,"style":32},[34,108828,108829],{"__ignoreMap":32},[37,108830,108831,108833,108835,108837,108839,108841,108843],{"class":39,"line":40},[37,108832,108710],{"class":50},[37,108834,108234],{"class":54},[37,108836,30532],{"class":50},[37,108838,108239],{"class":54},[37,108840,1113],{"class":50},[37,108842,108244],{"class":82},[37,108844,3811],{"class":54},[14,108846,108847,108848,108851],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[34,108849,108850],{},"viewer.is_running()"," 会变成 false，循环结束。",[27,108853,108855],{"className":29,"code":108854,"language":31,"meta":32,"style":32},"step_start = time.time()\n",[34,108856,108857],{"__ignoreMap":32},[37,108858,108859,108862,108864],{"class":39,"line":40},[37,108860,108861],{"class":54},"step_start ",[37,108863,70],{"class":50},[37,108865,108256],{"class":54},[14,108867,108868],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[27,108870,108871],{"className":29,"code":107965,"language":31,"meta":32,"style":32},[34,108872,108873,108877],{"__ignoreMap":32},[37,108874,108875],{"class":39,"line":40},[37,108876,104552],{"class":54},[37,108878,108879],{"class":39,"line":47},[37,108880,107976],{"class":54},[14,108882,108883,108885,108886,108888,108889,108891,108892,108895],{},[34,108884,101262],{}," 推进物理仿真。",[34,108887,107984],{}," 把最新的 ",[34,108890,33470],{}," 同步到窗口里显示。没有 ",[34,108893,108894],{},"sync()","，窗口可能看不到最新状态。",[27,108897,108898],{"className":29,"code":107995,"language":31,"meta":32,"style":32},[34,108899,108900],{"__ignoreMap":32},[37,108901,108902,108904,108906,108908,108910,108912,108914],{"class":39,"line":40},[37,108903,108002],{"class":54},[37,108905,70],{"class":50},[37,108907,108007],{"class":54},[37,108909,112],{"class":50},[37,108911,108012],{"class":54},[37,108913,112],{"class":50},[37,108915,108017],{"class":54},[14,108917,108918],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[27,108920,108922],{"className":29,"code":108921,"language":31,"meta":32,"style":32},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[34,108923,108924,108936],{"__ignoreMap":32},[37,108925,108926,108928,108930,108932,108934],{"class":39,"line":40},[37,108927,1603],{"class":50},[37,108929,108294],{"class":54},[37,108931,1163],{"class":50},[37,108933,4165],{"class":82},[37,108935,3811],{"class":54},[37,108937,108938],{"class":39,"line":47},[37,108939,108940],{"class":54},"    time.sleep(sleep_time)\n",[14,108942,108943],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[175,108945,108947],{"id":108946},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[27,108949,108951],{"className":29,"code":108950,"language":31,"meta":32,"style":32},"from pathlib import Path\n",[34,108952,108953],{"__ignoreMap":32},[37,108954,108955,108957,108959,108961],{"class":39,"line":40},[37,108956,30807],{"class":50},[37,108958,108358],{"class":54},[37,108960,51],{"class":50},[37,108962,108363],{"class":54},[14,108964,108965,108966,108969,108970,108973],{},"导入 ",[34,108967,108968],{},"Path","，用来处理文件路径。相比直接写字符串，",[34,108971,108972],{},"Path(\"render_output.png\")"," 更清晰。",[27,108975,108977],{"className":29,"code":108976,"language":31,"meta":32,"style":32},"from PIL import Image\n",[34,108978,108979],{"__ignoreMap":32},[37,108980,108981,108983,108985,108987],{"class":39,"line":40},[37,108982,30807],{"class":50},[37,108984,47331],{"class":82},[37,108986,47334],{"class":50},[37,108988,47337],{"class":54},[14,108990,108991],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[27,108993,108994],{"className":53135,"code":108731,"language":53137,"meta":32,"style":32},[34,108995,108996],{"__ignoreMap":32},[37,108997,108998,109000,109002,109004,109006,109008,109010,109012,109014,109016,109018,109020],{"class":39,"line":40},[37,108999,1113],{"class":54},[37,109001,108562],{"class":51368},[37,109003,14992],{"class":2035},[37,109005,70],{"class":54},[37,109007,108567],{"class":309},[37,109009,101153],{"class":2035},[37,109011,70],{"class":54},[37,109013,108752],{"class":309},[37,109015,108755],{"class":2035},[37,109017,70],{"class":54},[37,109019,108760],{"class":309},[37,109021,101191],{"class":54},[14,109023,109024,109025,109027,109028,109030,109031,109034,109035,109037],{},"定义一个相机。",[34,109026,79878],{}," 是相机名字。",[34,109029,104193],{}," 是相机在世界里的位置。",[34,109032,109033],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[34,109036,104193],{}," 来调视角。",[27,109039,109041],{"className":29,"code":109040,"language":31,"meta":32,"style":32},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[34,109042,109043],{"__ignoreMap":32},[37,109044,109045,109047,109049,109051,109053,109055,109057,109059,109061,109063,109065],{"class":39,"line":40},[37,109046,107617],{"class":54},[37,109048,70],{"class":50},[37,109050,107921],{"class":54},[37,109052,25054],{"class":5288},[37,109054,70],{"class":50},[37,109056,42411],{"class":82},[37,109058,12507],{"class":54},[37,109060,25050],{"class":5288},[37,109062,70],{"class":50},[37,109064,107936],{"class":82},[37,109066,214],{"class":54},[14,109068,109069,109070,101065,109072,109074],{},"创建离屏渲染器。",[34,109071,25054],{},[34,109073,25050],{}," 决定输出图片大小。",[27,109076,109077],{"className":29,"code":101723,"language":31,"meta":32,"style":32},[34,109078,109079,109095],{"__ignoreMap":32},[37,109080,109081,109083,109085,109087,109089,109091,109093],{"class":39,"line":40},[37,109082,3097],{"class":50},[37,109084,101548],{"class":54},[37,109086,26116],{"class":50},[37,109088,32512],{"class":82},[37,109090,208],{"class":54},[37,109092,516],{"class":82},[37,109094,30856],{"class":54},[37,109096,109097],{"class":39,"line":47},[37,109098,101746],{"class":54},[14,109100,109101],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[27,109103,109105],{"className":29,"code":109104,"language":31,"meta":32,"style":32},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[34,109106,109107],{"__ignoreMap":32},[37,109108,109109,109112,109114,109116,109118],{"class":39,"line":40},[37,109110,109111],{"class":54},"renderer.update_scene(data, ",[37,109113,108562],{"class":5288},[37,109115,70],{"class":50},[37,109117,108567],{"class":309},[37,109119,214],{"class":54},[14,109121,109122,109123,109125,109126,109129],{},"告诉 renderer：用当前 ",[34,109124,33470],{}," 的状态更新画面，并使用名为 ",[34,109127,109128],{},"fixed_camera"," 的相机视角。",[27,109131,109132],{"className":29,"code":108027,"language":31,"meta":32,"style":32},[34,109133,109134],{"__ignoreMap":32},[37,109135,109136,109138,109140],{"class":39,"line":40},[37,109137,107627],{"class":54},[37,109139,70],{"class":50},[37,109141,107632],{"class":54},[14,109143,109144,109145,109148],{},"真正渲染出图像。",[34,109146,109147],{},"image"," 是一个 NumPy 数组，不是文件。",[27,109150,109152],{"className":29,"code":109151,"language":31,"meta":32,"style":32},"Image.fromarray(image).save(output_path)\n",[34,109153,109154],{"__ignoreMap":32},[37,109155,109156],{"class":39,"line":40},[37,109157,109151],{"class":54},[14,109159,109160,109161,28458],{},"把数组转换成图片，并保存到 ",[34,109162,109163],{},"render_output.png",[27,109165,109167],{"className":29,"code":109166,"language":31,"meta":32,"style":32},"renderer.close()\n",[34,109168,109169],{"__ignoreMap":32},[37,109170,109171],{"class":39,"line":40},[37,109172,109166],{"class":54},[14,109174,109175],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[146,109177,102363],{"id":102362},[14,109179,109180,109181,109183,109184,28458],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[34,109182,109163],{},"，并输出图像数组形状，例如 ",[34,109185,109186],{},"(480, 640, 3)",[14,109188,109189],{},"如果图片里看不到方块，先检查：",[158,109191,109192,109195,109198],{},[161,109193,109194],{},"方块是否掉到相机视野外。",[161,109196,109197],{},"camera 位置是否合理。",[161,109199,109200,109201,109204],{},"是否在 ",[34,109202,109203],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[146,109206,102395],{"id":102394},[14,109208,109209],{},"运行 viewer:",[27,109211,109213],{"className":23894,"code":109212,"language":23896,"meta":32,"style":32},"python ch5_viewer.py\n",[34,109214,109215],{"__ignoreMap":32},[37,109216,109217,109219],{"class":39,"line":40},[37,109218,31],{"class":2035},[37,109220,108343],{"class":309},[14,109222,109223],{},"运行 renderer:",[27,109225,109227],{"className":23894,"code":109226,"language":23896,"meta":32,"style":32},"python ch5_renderer.py\n",[34,109228,109229],{"__ignoreMap":32},[37,109230,109231,109233],{"class":39,"line":40},[37,109232,31],{"class":2035},[37,109234,108672],{"class":309},[14,109236,109237],{},"如果在服务器上运行:",[27,109239,109241],{"className":23894,"code":109240,"language":23896,"meta":32,"style":32},"MUJOCO_GL=egl python ch5_renderer.py\n",[34,109242,109243],{"__ignoreMap":32},[37,109244,109245,109247,109249,109251,109254],{"class":39,"line":40},[37,109246,107861],{"class":54},[37,109248,70],{"class":50},[37,109250,107851],{"class":309},[37,109252,109253],{"class":2035}," python",[37,109255,108672],{"class":309},[14,109257,107829],{},[27,109259,109261],{"className":23894,"code":109260,"language":23896,"meta":32,"style":32},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[34,109262,109263],{"__ignoreMap":32},[37,109264,109265,109267,109269,109271,109273],{"class":39,"line":40},[37,109266,107861],{"class":54},[37,109268,70],{"class":50},[37,109270,107855],{"class":309},[37,109272,109253],{"class":2035},[37,109274,108672],{"class":309},[14,109276,109277],{},"再做几个练习：",[158,109279,109280,109287,109290,109296],{},[161,109281,109282,109283,109286],{},"把 renderer 分辨率改成 ",[34,109284,109285],{},"height=240, width=320","，观察输出 shape。",[161,109288,109289],{},"把方块颜色改成蓝色，重新保存图片。",[161,109291,109292,109293,109295],{},"把相机 ",[34,109294,104193],{}," 改远一点，观察画面中物体是否变小。",[161,109297,109298,109299,102461,109302,109305],{},"把 viewer 示例中的 ",[34,109300,109301],{},"data.time \u003C 5.0",[34,109303,109304],{},"data.time \u003C 20.0","，观察更长时间。",[146,109307,102500],{"id":102499},[175,109309,109311],{"id":109310},"viewer-窗口打不开","viewer 窗口打不开",[14,109313,109314],{},"安装:",[27,109316,109318],{"className":23894,"code":109317,"language":23896,"meta":32,"style":32},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[34,109319,109320],{"__ignoreMap":32},[37,109321,109322,109324,109326,109328,109330,109332,109334,109336,109338,109340,109342],{"class":39,"line":40},[37,109323,24649],{"class":2035},[37,109325,26388],{"class":309},[37,109327,23906],{"class":309},[37,109329,26473],{"class":82},[37,109331,102553],{"class":309},[37,109333,100881],{"class":309},[37,109335,102558],{"class":309},[37,109337,100894],{"class":309},[37,109339,100900],{"class":309},[37,109341,100891],{"class":309},[37,109343,109344],{"class":309}," libXinerama\n",[175,109346,109348],{"id":109347},"glfwerror",[34,109349,109350],{},"GLFWError",[14,109352,109353],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[175,109355,109357],{"id":109356},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109359,109360,109361,82607,109363,109365],{},"尝试 ",[34,109362,101084],{},[34,109364,101087],{},"。可能存在版本差异。",[175,109367,109368],{"id":109368},"保存图片是黑的",[14,109370,102622],{},[158,109372,109373,109376,109379,109389],{},[161,109374,109375],{},"XML 里是否有 light。",[161,109377,109378],{},"相机是否对着模型。",[161,109380,109381,109382,109385,109386,28458],{},"是否先 ",[34,109383,109384],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[34,109387,109388],{},"renderer.render()",[161,109390,109391],{},"物体是否已经掉出视野。",[175,109393,109394],{"id":109394},"远程服务器没有显示器",[14,109396,109397],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[27,109399,109400],{"className":23894,"code":109240,"language":23896,"meta":32,"style":32},[34,109401,109402],{"__ignoreMap":32},[37,109403,109404,109406,109408,109410,109412],{"class":39,"line":40},[37,109405,107861],{"class":54},[37,109407,70],{"class":50},[37,109409,107851],{"class":309},[37,109411,109253],{"class":2035},[37,109413,108672],{"class":309},[14,109415,109416],{},"如果 EGL 不可用，再尝试：",[27,109418,109419],{"className":23894,"code":109260,"language":23896,"meta":32,"style":32},[34,109420,109421],{"__ignoreMap":32},[37,109422,109423,109425,109427,109429,109431],{"class":39,"line":40},[37,109424,107861],{"class":54},[37,109426,70],{"class":50},[37,109428,107855],{"class":309},[37,109430,109253],{"class":2035},[37,109432,108672],{"class":309},[146,109434,102654],{"id":102653},[14,109436,109437],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[158,109439,109440,109443,109446],{},[161,109441,109442],{},"先用 viewer 看模型和控制是否正常。",[161,109444,109445],{},"再用 renderer 保存图片或构造视觉观测。",[161,109447,109448],{},"最后把状态、动作、图像、奖励组织成训练数据。",[123,109450,109451],{},"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":32,"searchDepth":47,"depth":47,"links":109453},[109454,109455,109456,109461,109466,109467,109468,109475],{"id":100693,"depth":47,"text":100694},{"id":100816,"depth":47,"text":100817},{"id":101091,"depth":47,"text":101092,"children":109457},[109458,109459,109460],{"id":107958,"depth":58,"text":107959},{"id":107988,"depth":58,"text":107989},{"id":108023,"depth":58,"text":108024},{"id":101299,"depth":47,"text":101300,"children":109462},[109463,109464,109465],{"id":101619,"depth":58,"text":101619},{"id":108768,"depth":58,"text":108769},{"id":108946,"depth":58,"text":108947},{"id":102362,"depth":47,"text":102363},{"id":102394,"depth":47,"text":102395},{"id":102499,"depth":47,"text":102500,"children":109469},[109470,109471,109472,109473,109474],{"id":109310,"depth":58,"text":109311},{"id":109347,"depth":58,"text":109350},{"id":109356,"depth":58,"text":109357},{"id":109368,"depth":58,"text":109368},{"id":109394,"depth":58,"text":109394},{"id":102653,"depth":47,"text":102654},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107566,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109482,"title":109483,"body":109484,"description":32,"extension":129,"meta":111395,"navigation":131,"path":111396,"seo":111397,"stem":111398,"__hash__":111399},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109485,"toc":111371},[109486,109489,109491,109494,109496,109515,109518,109524,109527,109529,109531,109555,109557,109571,109573,109614,109616,109627,109629,109632,109638,109641,109675,109678,109710,109713,109745,109749,109752,109792,109795,109801,109804,109810,109814,109817,109823,109826,109830,109833,109873,109875,109888,109891,109893,110475,110477,110489,110492,110503,110505,110508,110527,110539,110542,110563,110566,110569,110612,110615,110618,110638,110645,110647,110665,110680,110683,110689,110692,110698,110715,110722,110753,110764,110798,110809,110826,110835,110843,110848,110862,110865,110886,110892,110906,110911,110941,110951,110976,110984,111007,111010,111026,111029,111037,111043,111065,111078,111099,111108,111147,111158,111160,111163,111169,111172,111175,111181,111184,111204,111207,111209,111248,111250,111253,111261,111264,111267,111294,111297,111307,111313,111316,111322,111324,111330,111334,111337,111339,111342,111366,111369],[10,109487,109483],{"id":109488},"_6控制任务cartpole",[146,109490,100694],{"id":100693},[14,109492,109493],{},"本章搭建一个最小 Cartpole 控制任务。",[14,109495,104378],{},[158,109497,109498,109501,109503,109506,109509,109512],{},[161,109499,109500],{},"slide joint",[161,109502,106231],{},[161,109504,109505],{},"cart force actuator",[161,109507,109508],{},"状态观测",[161,109510,109511],{},"简单控制循环",[161,109513,109514],{},"reward 设计雏形",[14,109516,109517],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[27,109519,109522],{"className":109520,"code":109521,"language":5259,"meta":32},[5257],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[34,109523,109521],{"__ignoreMap":32},[14,109525,109526],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[146,109528,100817],{"id":100816},[14,109530,100820],{},[27,109532,109533],{"className":23894,"code":104435,"language":23896,"meta":32,"style":32},[34,109534,109535],{"__ignoreMap":32},[37,109536,109537,109539,109541,109543,109545,109547,109549,109551,109553],{"class":39,"line":40},[37,109538,24649],{"class":2035},[37,109540,26388],{"class":309},[37,109542,23906],{"class":309},[37,109544,26473],{"class":82},[37,109546,104450],{"class":309},[37,109548,100845],{"class":309},[37,109550,102548],{"class":309},[37,109552,100861],{"class":309},[37,109554,104459],{"class":309},[14,109556,102866],{},[27,109558,109559],{"className":23894,"code":100966,"language":23896,"meta":32,"style":32},[34,109560,109561],{"__ignoreMap":32},[37,109562,109563,109565,109567,109569],{"class":39,"line":40},[37,109564,23903],{"class":2035},[37,109566,23906],{"class":309},[37,109568,100977],{"class":309},[37,109570,100980],{"class":309},[14,109572,102883],{},[27,109574,109576],{"className":23894,"code":109575,"language":23896,"meta":32,"style":32},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[34,109577,109578,109595,109604],{"__ignoreMap":32},[37,109579,109580,109582,109584,109586,109589,109591,109593],{"class":39,"line":40},[37,109581,30403],{"class":2035},[37,109583,29249],{"class":309},[37,109585,25188],{"class":82},[37,109587,109588],{"class":309}," mujoco-cartpole",[37,109590,101022],{"class":309},[37,109592,101025],{"class":82},[37,109594,101028],{"class":82},[37,109596,109597,109599,109601],{"class":39,"line":47},[37,109598,30403],{"class":2035},[37,109600,101035],{"class":309},[37,109602,109603],{"class":309}," mujoco-cartpole\n",[37,109605,109606,109608,109610,109612],{"class":39,"line":58},[37,109607,23903],{"class":2035},[37,109609,23906],{"class":309},[37,109611,100977],{"class":309},[37,109613,100980],{"class":309},[14,109615,101051],{},[158,109617,109618,109621,109624],{},[161,109619,109620],{},"本章不依赖 Gymnasium。",[161,109622,109623],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[161,109625,109626],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[146,109628,101092],{"id":101091},[14,109630,109631],{},"Cartpole 的模型结构:",[27,109633,109636],{"className":109634,"code":109635,"language":5259,"meta":32},[5257],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[34,109637,109635],{"__ignoreMap":32},[14,109639,109640],{},"小车通过 slide joint 左右移动:",[27,109642,109644],{"className":53135,"code":109643,"language":53137,"meta":32,"style":32},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[34,109645,109646],{"__ignoreMap":32},[37,109647,109648,109650,109652,109654,109656,109659,109661,109663,109666,109668,109670,109673],{"class":39,"line":40},[37,109649,1113],{"class":54},[37,109651,103003],{"class":51368},[37,109653,14992],{"class":2035},[37,109655,70],{"class":54},[37,109657,109658],{"class":309},"\"cart_x\"",[37,109660,53892],{"class":2035},[37,109662,70],{"class":54},[37,109664,109665],{"class":309},"\"slide\"",[37,109667,106075],{"class":2035},[37,109669,70],{"class":54},[37,109671,109672],{"class":309},"\"1 0 0\"",[37,109674,101191],{"class":54},[14,109676,109677],{},"杆子通过 hinge joint 旋转:",[27,109679,109681],{"className":53135,"code":109680,"language":53137,"meta":32,"style":32},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[34,109682,109683],{"__ignoreMap":32},[37,109684,109685,109687,109689,109691,109693,109696,109698,109700,109702,109704,109706,109708],{"class":39,"line":40},[37,109686,1113],{"class":54},[37,109688,103003],{"class":51368},[37,109690,14992],{"class":2035},[37,109692,70],{"class":54},[37,109694,109695],{"class":309},"\"pole_hinge\"",[37,109697,53892],{"class":2035},[37,109699,70],{"class":54},[37,109701,106066],{"class":309},[37,109703,106075],{"class":2035},[37,109705,70],{"class":54},[37,109707,106080],{"class":309},[37,109709,101191],{"class":54},[14,109711,109712],{},"控制力作用在小车 slide joint 上:",[27,109714,109716],{"className":53135,"code":109715,"language":53137,"meta":32,"style":32},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[34,109717,109718],{"__ignoreMap":32},[37,109719,109720,109722,109724,109726,109728,109731,109733,109735,109737,109739,109741,109743],{"class":39,"line":40},[37,109721,1113],{"class":54},[37,109723,106121],{"class":51368},[37,109725,14992],{"class":2035},[37,109727,70],{"class":54},[37,109729,109730],{"class":309},"\"cart_motor\"",[37,109732,106131],{"class":2035},[37,109734,70],{"class":54},[37,109736,109658],{"class":309},[37,109738,106138],{"class":2035},[37,109740,70],{"class":54},[37,109742,54384],{"class":309},[37,109744,101191],{"class":54},[175,109746,109748],{"id":109747},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,109750,109751],{},"这个简化模型有两个关节：",[342,109753,109754,109765],{},[345,109755,109756],{},[348,109757,109758,109760,109762],{},[351,109759,102806],{"align":23808},[351,109761,23809],{"align":23808},[351,109763,109764],{"align":23808},"对应状态",[389,109766,109767,109780],{},[348,109768,109769,109774,109777],{},[394,109770,109771],{"align":23808},[34,109772,109773],{},"cart_x",[394,109775,109776],{"align":23808},"slide",[394,109778,109779],{"align":23808},"小车 x 位置",[348,109781,109782,109787,109789],{},[394,109783,109784],{"align":23808},[34,109785,109786],{},"pole_hinge",[394,109788,105887],{"align":23808},[394,109790,109791],{"align":23808},"杆子角度",[14,109793,109794],{},"所以：",[27,109796,109799],{"className":109797,"code":109798,"language":5259,"meta":32},[5257],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[34,109800,109798],{"__ignoreMap":32},[14,109802,109803],{},"把它们拼起来就是观测：",[27,109805,109808],{"className":109806,"code":109807,"language":5259,"meta":32},[5257],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[34,109809,109807],{"__ignoreMap":32},[175,109811,109813],{"id":109812},"action-是什么","action 是什么",[14,109815,109816],{},"本章只有一个 actuator：",[27,109818,109821],{"className":109819,"code":109820,"language":5259,"meta":32},[5257],"data.ctrl[0] = action\n",[34,109822,109820],{"__ignoreMap":32},[14,109824,109825],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[175,109827,109829],{"id":109828},"reward-是什么","reward 是什么",[14,109831,109832],{},"奖励函数：",[27,109834,109836],{"className":29,"code":109835,"language":31,"meta":32,"style":32},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[34,109837,109838],{"__ignoreMap":32},[37,109839,109840,109842,109845,109847,109849,109851,109854,109856,109859,109861,109863,109865,109868,109870],{"class":39,"line":40},[37,109841,17118],{"class":50},[37,109843,109844],{"class":82}," float",[37,109846,208],{"class":54},[37,109848,102450],{"class":82},[37,109850,52339],{"class":50},[37,109852,109853],{"class":82}," 0.1",[37,109855,6590],{"class":50},[37,109857,109858],{"class":54}," cart_x ",[37,109860,659],{"class":50},[37,109862,109858],{"class":54},[37,109864,112],{"class":50},[37,109866,109867],{"class":54}," pole_angle ",[37,109869,659],{"class":50},[37,109871,109872],{"class":54}," pole_angle)\n",[14,109874,106273],{},[158,109876,109877,109882,109885],{},[161,109878,109879,109880,28458],{},"基础奖励是 ",[34,109881,102450],{},[161,109883,109884],{},"小车离中心越远，扣分越多。",[161,109886,109887],{},"杆子角度越大，扣分越多。",[14,109889,109890],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[146,109892,101300],{"id":101299},[27,109894,109896],{"className":29,"code":109895,"language":31,"meta":32,"style":32},"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",[34,109897,109898,109904,109914,109918,109922,109930,109935,109939,109943,109947,109952,109956,109961,109966,109971,109975,109980,109985,109990,109994,109998,110002,110006,110010,110015,110019,110023,110027,110031,110035,110045,110052,110056,110060,110074,110088,110101,110131,110135,110139,110151,110163,110171,110175,110188,110192,110196,110205,110209,110225,110235,110248,110261,110265,110288,110306,110310,110322,110326,110330,110340,110350,110354,110370,110411,110415,110435,110451,110455,110459,110471],{"__ignoreMap":32},[37,109899,109900,109902],{"class":39,"line":40},[37,109901,51],{"class":50},[37,109903,101348],{"class":54},[37,109905,109906,109908,109910,109912],{"class":39,"line":47},[37,109907,51],{"class":50},[37,109909,31450],{"class":54},[37,109911,31453],{"class":50},[37,109913,31456],{"class":54},[37,109915,109916],{"class":39,"line":58},[37,109917,2472],{"emptyLinePlaceholder":131},[37,109919,109920],{"class":39,"line":64},[37,109921,2472],{"emptyLinePlaceholder":131},[37,109923,109924,109926,109928],{"class":39,"line":76},[37,109925,101361],{"class":82},[37,109927,13636],{"class":50},[37,109929,101366],{"class":309},[37,109931,109932],{"class":39,"line":92},[37,109933,109934],{"class":309},"\u003Cmujoco model=\"cartpole\">\n",[37,109936,109937],{"class":39,"line":97},[37,109938,101376],{"class":309},[37,109940,109941],{"class":39,"line":107},[37,109942,2472],{"emptyLinePlaceholder":131},[37,109944,109945],{"class":39,"line":1390},[37,109946,101385],{"class":309},[37,109948,109949],{"class":39,"line":1402},[37,109950,109951],{"class":309},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[37,109953,109954],{"class":39,"line":1684},[37,109955,2472],{"emptyLinePlaceholder":131},[37,109957,109958],{"class":39,"line":1689},[37,109959,109960],{"class":309},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[37,109962,109963],{"class":39,"line":1695},[37,109964,109965],{"class":309},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[37,109967,109968],{"class":39,"line":1700},[37,109969,109970],{"class":309},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[37,109972,109973],{"class":39,"line":1714},[37,109974,2472],{"emptyLinePlaceholder":131},[37,109976,109977],{"class":39,"line":1719},[37,109978,109979],{"class":309},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[37,109981,109982],{"class":39,"line":1725},[37,109983,109984],{"class":309},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[37,109986,109987],{"class":39,"line":1746},[37,109988,109989],{"class":309},"        \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",[37,109991,109992],{"class":39,"line":1751},[37,109993,106485],{"class":309},[37,109995,109996],{"class":39,"line":1765},[37,109997,101414],{"class":309},[37,109999,110000],{"class":39,"line":1770},[37,110001,101419],{"class":309},[37,110003,110004],{"class":39,"line":1799},[37,110005,2472],{"emptyLinePlaceholder":131},[37,110007,110008],{"class":39,"line":1804},[37,110009,106502],{"class":309},[37,110011,110012],{"class":39,"line":1821},[37,110013,110014],{"class":309},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[37,110016,110017],{"class":39,"line":1826},[37,110018,106512],{"class":309},[37,110020,110021],{"class":39,"line":1831},[37,110022,101424],{"class":309},[37,110024,110025],{"class":39,"line":1836},[37,110026,95745],{"class":309},[37,110028,110029],{"class":39,"line":1850},[37,110030,2472],{"emptyLinePlaceholder":131},[37,110032,110033],{"class":39,"line":1855},[37,110034,2472],{"emptyLinePlaceholder":131},[37,110036,110037,110039,110042],{"class":39,"line":2649},[37,110038,32017],{"class":50},[37,110040,110041],{"class":2035}," get_observation",[37,110043,110044],{"class":54},"(data: mujoco.MjData) -> np.ndarray:\n",[37,110046,110047,110049],{"class":39,"line":2663},[37,110048,4162],{"class":50},[37,110050,110051],{"class":54}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[37,110053,110054],{"class":39,"line":2671},[37,110055,2472],{"emptyLinePlaceholder":131},[37,110057,110058],{"class":39,"line":2676},[37,110059,2472],{"emptyLinePlaceholder":131},[37,110061,110062,110064,110067,110070,110072],{"class":39,"line":2682},[37,110063,32017],{"class":50},[37,110065,110066],{"class":2035}," compute_reward",[37,110068,110069],{"class":54},"(obs: np.ndarray) -> ",[37,110071,247],{"class":82},[37,110073,3811],{"class":54},[37,110075,110076,110079,110081,110084,110086],{"class":39,"line":2688},[37,110077,110078],{"class":54},"    cart_x ",[37,110080,70],{"class":50},[37,110082,110083],{"class":54}," obs[",[37,110085,396],{"class":82},[37,110087,33315],{"class":54},[37,110089,110090,110093,110095,110097,110099],{"class":39,"line":2693},[37,110091,110092],{"class":54},"    pole_angle ",[37,110094,70],{"class":50},[37,110096,110083],{"class":54},[37,110098,422],{"class":82},[37,110100,33315],{"class":54},[37,110102,110103,110105,110107,110109,110111,110113,110115,110117,110119,110121,110123,110125,110127,110129],{"class":39,"line":8020},[37,110104,4162],{"class":50},[37,110106,109844],{"class":82},[37,110108,208],{"class":54},[37,110110,102450],{"class":82},[37,110112,52339],{"class":50},[37,110114,109853],{"class":82},[37,110116,6590],{"class":50},[37,110118,109858],{"class":54},[37,110120,659],{"class":50},[37,110122,109858],{"class":54},[37,110124,112],{"class":50},[37,110126,109867],{"class":54},[37,110128,659],{"class":50},[37,110130,109872],{"class":54},[37,110132,110133],{"class":39,"line":8044},[37,110134,2472],{"emptyLinePlaceholder":131},[37,110136,110137],{"class":39,"line":8049},[37,110138,2472],{"emptyLinePlaceholder":131},[37,110140,110141,110143,110145,110147,110149],{"class":39,"line":8055},[37,110142,32017],{"class":50},[37,110144,2045],{"class":2035},[37,110146,101445],{"class":54},[37,110148,95733],{"class":82},[37,110150,3811],{"class":54},[37,110152,110153,110155,110157,110159,110161],{"class":39,"line":8082},[37,110154,101454],{"class":54},[37,110156,70],{"class":50},[37,110158,101459],{"class":54},[37,110160,101361],{"class":82},[37,110162,214],{"class":54},[37,110164,110165,110167,110169],{"class":39,"line":8087},[37,110166,101468],{"class":54},[37,110168,70],{"class":50},[37,110170,101473],{"class":54},[37,110172,110173],{"class":39,"line":8093},[37,110174,2472],{"emptyLinePlaceholder":131},[37,110176,110177,110179,110181,110183,110185],{"class":39,"line":8105},[37,110178,105116],{"class":54},[37,110180,422],{"class":82},[37,110182,4515],{"class":54},[37,110184,70],{"class":50},[37,110186,110187],{"class":82}," 0.1\n",[37,110189,110190],{"class":39,"line":8117},[37,110191,105129],{"class":54},[37,110193,110194],{"class":39,"line":8129},[37,110195,2472],{"emptyLinePlaceholder":131},[37,110197,110198,110201,110203],{"class":39,"line":9788},[37,110199,110200],{"class":54},"    total_reward ",[37,110202,70],{"class":50},[37,110204,104808],{"class":82},[37,110206,110207],{"class":39,"line":9813},[37,110208,2472],{"emptyLinePlaceholder":131},[37,110210,110211,110213,110215,110217,110219,110221,110223],{"class":39,"line":9836},[37,110212,3273],{"class":50},[37,110214,31686],{"class":54},[37,110216,26116],{"class":50},[37,110218,32512],{"class":82},[37,110220,208],{"class":54},[37,110222,6482],{"class":82},[37,110224,30856],{"class":54},[37,110226,110227,110230,110232],{"class":39,"line":9860},[37,110228,110229],{"class":54},"        obs ",[37,110231,70],{"class":50},[37,110233,110234],{"class":54}," get_observation(data)\n",[37,110236,110237,110240,110242,110244,110246],{"class":39,"line":9865},[37,110238,110239],{"class":54},"        pole_angle ",[37,110241,70],{"class":50},[37,110243,110083],{"class":54},[37,110245,422],{"class":82},[37,110247,33315],{"class":54},[37,110249,110250,110253,110255,110257,110259],{"class":39,"line":9870},[37,110251,110252],{"class":54},"        pole_angular_velocity ",[37,110254,70],{"class":50},[37,110256,110083],{"class":54},[37,110258,276],{"class":82},[37,110260,33315],{"class":54},[37,110262,110263],{"class":39,"line":9875},[37,110264,2472],{"emptyLinePlaceholder":131},[37,110266,110267,110270,110272,110275,110277,110279,110281,110283,110285],{"class":39,"line":9884},[37,110268,110269],{"class":54},"        action ",[37,110271,70],{"class":50},[37,110273,110274],{"class":82}," 2.0",[37,110276,6590],{"class":50},[37,110278,109867],{"class":54},[37,110280,685],{"class":50},[37,110282,61935],{"class":82},[37,110284,6590],{"class":50},[37,110286,110287],{"class":54}," pole_angular_velocity\n",[37,110289,110290,110292,110294,110296,110298,110300,110302,110304],{"class":39,"line":9889},[37,110291,110269],{"class":54},[37,110293,70],{"class":50},[37,110295,107494],{"class":54},[37,110297,112],{"class":50},[37,110299,102450],{"class":82},[37,110301,12507],{"class":54},[37,110303,102450],{"class":82},[37,110305,214],{"class":54},[37,110307,110308],{"class":39,"line":9895},[37,110309,2472],{"emptyLinePlaceholder":131},[37,110311,110312,110314,110316,110318,110320],{"class":39,"line":9916},[37,110313,106664],{"class":54},[37,110315,396],{"class":82},[37,110317,4515],{"class":54},[37,110319,70],{"class":50},[37,110321,107517],{"class":54},[37,110323,110324],{"class":39,"line":9922},[37,110325,101563],{"class":54},[37,110327,110328],{"class":39,"line":9936},[37,110329,2472],{"emptyLinePlaceholder":131},[37,110331,110332,110335,110337],{"class":39,"line":9942},[37,110333,110334],{"class":54},"        reward ",[37,110336,70],{"class":50},[37,110338,110339],{"class":54}," compute_reward(get_observation(data))\n",[37,110341,110342,110345,110347],{"class":39,"line":9969},[37,110343,110344],{"class":54},"        total_reward ",[37,110346,9549],{"class":50},[37,110348,110349],{"class":54}," reward\n",[37,110351,110352],{"class":39,"line":9978},[37,110353,2472],{"emptyLinePlaceholder":131},[37,110355,110356,110358,110360,110362,110364,110366,110368],{"class":39,"line":9984},[37,110357,2569],{"class":50},[37,110359,31686],{"class":54},[37,110361,533],{"class":50},[37,110363,5826],{"class":82},[37,110365,101606],{"class":50},[37,110367,4165],{"class":82},[37,110369,3811],{"class":54},[37,110371,110372,110374,110376,110379,110382,110385,110388,110390,110393,110396,110398,110400,110402,110404,110407,110409],{"class":39,"line":9992},[37,110373,34719],{"class":82},[37,110375,208],{"class":54},[37,110377,110378],{"class":309},"\"step:\"",[37,110380,110381],{"class":54},", step, ",[37,110383,110384],{"class":309},"\"obs:\"",[37,110386,110387],{"class":54},", np.round(obs, ",[37,110389,276],{"class":82},[37,110391,110392],{"class":54},"), ",[37,110394,110395],{"class":309},"\"action:\"",[37,110397,12507],{"class":54},[37,110399,32088],{"class":82},[37,110401,208],{"class":54},[37,110403,247],{"class":82},[37,110405,110406],{"class":54},"(action), ",[37,110408,276],{"class":82},[37,110410,30567],{"class":54},[37,110412,110413],{"class":39,"line":9997},[37,110414,2472],{"emptyLinePlaceholder":131},[37,110416,110417,110419,110421,110424,110426,110428,110431,110433],{"class":39,"line":16676},[37,110418,31369],{"class":82},[37,110420,208],{"class":54},[37,110422,110423],{"class":309},"\"total_reward:\"",[37,110425,12507],{"class":54},[37,110427,32088],{"class":82},[37,110429,110430],{"class":54},"(total_reward, ",[37,110432,276],{"class":82},[37,110434,30567],{"class":54},[37,110436,110437,110439,110441,110444,110447,110449],{"class":39,"line":16682},[37,110438,31369],{"class":82},[37,110440,208],{"class":54},[37,110442,110443],{"class":309},"\"final obs:\"",[37,110445,110446],{"class":54},", np.round(get_observation(data), ",[37,110448,276],{"class":82},[37,110450,30567],{"class":54},[37,110452,110453],{"class":39,"line":16705},[37,110454,2472],{"emptyLinePlaceholder":131},[37,110456,110457],{"class":39,"line":16711},[37,110458,2472],{"emptyLinePlaceholder":131},[37,110460,110461,110463,110465,110467,110469],{"class":39,"line":16734},[37,110462,1603],{"class":50},[37,110464,31290],{"class":82},[37,110466,101606],{"class":50},[37,110468,101609],{"class":309},[37,110470,3811],{"class":54},[37,110472,110473],{"class":39,"line":16748},[37,110474,101616],{"class":54},[14,110476,103617],{},[27,110478,110480],{"className":23894,"code":110479,"language":23896,"meta":32,"style":32},"touch ch6_cartpole.py\n",[34,110481,110482],{"__ignoreMap":32},[37,110483,110484,110486],{"class":39,"line":40},[37,110485,101330],{"class":2035},[37,110487,110488],{"class":309}," ch6_cartpole.py\n",[14,110490,110491],{},"运行：",[27,110493,110495],{"className":23894,"code":110494,"language":23896,"meta":32,"style":32},"python ch6_cartpole.py\n",[34,110496,110497],{"__ignoreMap":32},[37,110498,110499,110501],{"class":39,"line":40},[37,110500,31],{"class":2035},[37,110502,110488],{"class":309},[175,110504,101619],{"id":101619},[14,110506,110507],{},"构造观测：",[27,110509,110511],{"className":29,"code":110510,"language":31,"meta":32,"style":32},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[34,110512,110513,110521],{"__ignoreMap":32},[37,110514,110515,110517,110519],{"class":39,"line":40},[37,110516,32017],{"class":50},[37,110518,110041],{"class":2035},[37,110520,110044],{"class":54},[37,110522,110523,110525],{"class":39,"line":47},[37,110524,4162],{"class":50},[37,110526,110051],{"class":54},[14,110528,110529,110532,110533,110535,110536,110538],{},[34,110530,110531],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[34,110534,104077],{}," 2 维，",[34,110537,104407],{}," 2 维，所以 obs 是 4 维。",[14,110540,110541],{},"设置初始角度：",[27,110543,110545],{"className":29,"code":110544,"language":31,"meta":32,"style":32},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[34,110546,110547,110559],{"__ignoreMap":32},[37,110548,110549,110551,110553,110555,110557],{"class":39,"line":40},[37,110550,104746],{"class":54},[37,110552,422],{"class":82},[37,110554,4515],{"class":54},[37,110556,70],{"class":50},[37,110558,110187],{"class":82},[37,110560,110561],{"class":39,"line":47},[37,110562,104590],{"class":54},[14,110564,110565],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,110567,110568],{},"简单反馈控制：",[27,110570,110572],{"className":29,"code":110571,"language":31,"meta":32,"style":32},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[34,110573,110574,110594],{"__ignoreMap":32},[37,110575,110576,110578,110580,110582,110584,110586,110588,110590,110592],{"class":39,"line":40},[37,110577,107489],{"class":54},[37,110579,70],{"class":50},[37,110581,110274],{"class":82},[37,110583,6590],{"class":50},[37,110585,109867],{"class":54},[37,110587,685],{"class":50},[37,110589,61935],{"class":82},[37,110591,6590],{"class":50},[37,110593,110287],{"class":54},[37,110595,110596,110598,110600,110602,110604,110606,110608,110610],{"class":39,"line":47},[37,110597,107489],{"class":54},[37,110599,70],{"class":50},[37,110601,107494],{"class":54},[37,110603,112],{"class":50},[37,110605,102450],{"class":82},[37,110607,12507],{"class":54},[37,110609,102450],{"class":82},[37,110611,214],{"class":54},[14,110613,110614],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,110616,110617],{},"限制动作：",[27,110619,110621],{"className":29,"code":110620,"language":31,"meta":32,"style":32},"np.clip(action, -1.0, 1.0)\n",[34,110622,110623],{"__ignoreMap":32},[37,110624,110625,110628,110630,110632,110634,110636],{"class":39,"line":40},[37,110626,110627],{"class":54},"np.clip(action, ",[37,110629,112],{"class":50},[37,110631,102450],{"class":82},[37,110633,12507],{"class":54},[37,110635,102450],{"class":82},[37,110637,214],{"class":54},[14,110639,110640,110641,110644],{},"因为 XML 里 ",[34,110642,110643],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[175,110646,101755],{"id":101755},[27,110648,110649],{"className":29,"code":110510,"language":31,"meta":32,"style":32},[34,110650,110651,110659],{"__ignoreMap":32},[37,110652,110653,110655,110657],{"class":39,"line":40},[37,110654,32017],{"class":50},[37,110656,110041],{"class":2035},[37,110658,110044],{"class":54},[37,110660,110661,110663],{"class":39,"line":47},[37,110662,4162],{"class":50},[37,110664,110051],{"class":54},[14,110666,110667,110668,110671,110672,110675,110676,110679],{},"这段定义了一个函数，用来获取当前观测。",[34,110669,110670],{},"data.qpos.copy()"," 是位置数组副本，",[34,110673,110674],{},"data.qvel.copy()"," 是速度数组副本。",[34,110677,110678],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,110681,110682],{},"在本章模型里：",[27,110684,110687],{"className":110685,"code":110686,"language":5259,"meta":32},[5257],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[34,110688,110686],{"__ignoreMap":32},[14,110690,110691],{},"所以返回的 obs 是：",[27,110693,110696],{"className":110694,"code":110695,"language":5259,"meta":32},[5257],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[34,110697,110695],{"__ignoreMap":32},[27,110699,110701],{"className":29,"code":110700,"language":31,"meta":32,"style":32},"def compute_reward(obs: np.ndarray) -> float:\n",[34,110702,110703],{"__ignoreMap":32},[37,110704,110705,110707,110709,110711,110713],{"class":39,"line":40},[37,110706,32017],{"class":50},[37,110708,110066],{"class":2035},[37,110710,110069],{"class":54},[37,110712,247],{"class":82},[37,110714,3811],{"class":54},[14,110716,110717,110718,110721],{},"这行定义奖励函数。输入是观测 ",[34,110719,110720],{},"obs","，输出是一个浮点数奖励。",[27,110723,110725],{"className":29,"code":110724,"language":31,"meta":32,"style":32},"cart_x = obs[0]\npole_angle = obs[1]\n",[34,110726,110727,110740],{"__ignoreMap":32},[37,110728,110729,110732,110734,110736,110738],{"class":39,"line":40},[37,110730,110731],{"class":54},"cart_x ",[37,110733,70],{"class":50},[37,110735,110083],{"class":54},[37,110737,396],{"class":82},[37,110739,33315],{"class":54},[37,110741,110742,110745,110747,110749,110751],{"class":39,"line":47},[37,110743,110744],{"class":54},"pole_angle ",[37,110746,70],{"class":50},[37,110748,110083],{"class":54},[37,110750,422],{"class":82},[37,110752,33315],{"class":54},[14,110754,110755,110756,110759,110760,110763],{},"数组索引从 0 开始。",[34,110757,110758],{},"obs[0]"," 是第一个元素，也就是小车位置。",[34,110761,110762],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[27,110765,110766],{"className":29,"code":109835,"language":31,"meta":32,"style":32},[34,110767,110768],{"__ignoreMap":32},[37,110769,110770,110772,110774,110776,110778,110780,110782,110784,110786,110788,110790,110792,110794,110796],{"class":39,"line":40},[37,110771,17118],{"class":50},[37,110773,109844],{"class":82},[37,110775,208],{"class":54},[37,110777,102450],{"class":82},[37,110779,52339],{"class":50},[37,110781,109853],{"class":82},[37,110783,6590],{"class":50},[37,110785,109858],{"class":54},[37,110787,659],{"class":50},[37,110789,109858],{"class":54},[37,110791,112],{"class":50},[37,110793,109867],{"class":54},[37,110795,659],{"class":50},[37,110797,109872],{"class":54},[14,110799,110800,110801,110804,110805,110808],{},"这行计算奖励。",[34,110802,110803],{},"cart_x * cart_x"," 是小车位置的平方，",[34,110806,110807],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[27,110810,110812],{"className":29,"code":110811,"language":31,"meta":32,"style":32},"data.qpos[1] = 0.1\n",[34,110813,110814],{"__ignoreMap":32},[37,110815,110816,110818,110820,110822,110824],{"class":39,"line":40},[37,110817,104746],{"class":54},[37,110819,422],{"class":82},[37,110821,4515],{"class":54},[37,110823,70],{"class":50},[37,110825,110187],{"class":82},[14,110827,110828,110829,110831,110832,110834],{},"手动设置杆子的初始角度。因为 ",[34,110830,105503],{}," 是小车位置，",[34,110833,105506],{}," 是杆子角度，所以这里改的是杆子。",[27,110836,110837],{"className":29,"code":104590,"language":31,"meta":32,"style":32},[34,110838,110839],{"__ignoreMap":32},[37,110840,110841],{"class":39,"line":40},[37,110842,104590],{"class":54},[14,110844,105549,110845,110847],{},[34,110846,104077],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[27,110849,110851],{"className":29,"code":110850,"language":31,"meta":32,"style":32},"total_reward = 0.0\n",[34,110852,110853],{"__ignoreMap":32},[37,110854,110855,110858,110860],{"class":39,"line":40},[37,110856,110857],{"class":54},"total_reward ",[37,110859,70],{"class":50},[37,110861,104808],{"class":82},[14,110863,110864],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[27,110866,110868],{"className":29,"code":110867,"language":31,"meta":32,"style":32},"for step in range(1000):\n",[34,110869,110870],{"__ignoreMap":32},[37,110871,110872,110874,110876,110878,110880,110882,110884],{"class":39,"line":40},[37,110873,3097],{"class":50},[37,110875,31686],{"class":54},[37,110877,26116],{"class":50},[37,110879,32512],{"class":82},[37,110881,208],{"class":54},[37,110883,6482],{"class":82},[37,110885,30856],{"class":54},[14,110887,110888,110889,110891],{},"循环 1000 步。",[34,110890,107181],{}," 是当前步数，从 0 到 999。",[27,110893,110895],{"className":29,"code":110894,"language":31,"meta":32,"style":32},"obs = get_observation(data)\n",[34,110896,110897],{"__ignoreMap":32},[37,110898,110899,110902,110904],{"class":39,"line":40},[37,110900,110901],{"class":54},"obs ",[37,110903,70],{"class":50},[37,110905,110234],{"class":54},[14,110907,110908,110909,28458],{},"读取当前状态，保存到 ",[34,110910,110720],{},[27,110912,110914],{"className":29,"code":110913,"language":31,"meta":32,"style":32},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[34,110915,110916,110928],{"__ignoreMap":32},[37,110917,110918,110920,110922,110924,110926],{"class":39,"line":40},[37,110919,110744],{"class":54},[37,110921,70],{"class":50},[37,110923,110083],{"class":54},[37,110925,422],{"class":82},[37,110927,33315],{"class":54},[37,110929,110930,110933,110935,110937,110939],{"class":39,"line":47},[37,110931,110932],{"class":54},"pole_angular_velocity ",[37,110934,70],{"class":50},[37,110936,110083],{"class":54},[37,110938,276],{"class":82},[37,110940,33315],{"class":54},[14,110942,110943,110944,110947,110948,28458],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[34,110945,110946],{},"obs[3]","？因为 obs 的顺序是 ",[34,110949,110950],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[27,110952,110954],{"className":29,"code":110953,"language":31,"meta":32,"style":32},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[34,110955,110956],{"__ignoreMap":32},[37,110957,110958,110960,110962,110964,110966,110968,110970,110972,110974],{"class":39,"line":40},[37,110959,107489],{"class":54},[37,110961,70],{"class":50},[37,110963,110274],{"class":82},[37,110965,6590],{"class":50},[37,110967,109867],{"class":54},[37,110969,685],{"class":50},[37,110971,61935],{"class":82},[37,110973,6590],{"class":50},[37,110975,110287],{"class":54},[14,110977,110978,110979,101065,110981,110983],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[34,110980,105307],{},[34,110982,35398],{}," 是人为设置的系数，不是固定公式。",[27,110985,110987],{"className":29,"code":110986,"language":31,"meta":32,"style":32},"action = np.clip(action, -1.0, 1.0)\n",[34,110988,110989],{"__ignoreMap":32},[37,110990,110991,110993,110995,110997,110999,111001,111003,111005],{"class":39,"line":40},[37,110992,107489],{"class":54},[37,110994,70],{"class":50},[37,110996,107494],{"class":54},[37,110998,112],{"class":50},[37,111000,102450],{"class":82},[37,111002,12507],{"class":54},[37,111004,102450],{"class":82},[37,111006,214],{"class":54},[14,111008,111009],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[27,111011,111012],{"className":29,"code":109820,"language":31,"meta":32,"style":32},[34,111013,111014],{"__ignoreMap":32},[37,111015,111016,111018,111020,111022,111024],{"class":39,"line":40},[37,111017,105918],{"class":54},[37,111019,396],{"class":82},[37,111021,4515],{"class":54},[37,111023,70],{"class":50},[37,111025,107517],{"class":54},[14,111027,111028],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[27,111030,111031],{"className":29,"code":104552,"language":31,"meta":32,"style":32},[34,111032,111033],{"__ignoreMap":32},[37,111034,111035],{"class":39,"line":40},[37,111036,104552],{"class":54},[14,111038,111039,111040,111042],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[34,111041,106173],{}," 计算小车和杆子的下一刻状态。",[27,111044,111046],{"className":29,"code":111045,"language":31,"meta":32,"style":32},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[34,111047,111048,111057],{"__ignoreMap":32},[37,111049,111050,111053,111055],{"class":39,"line":40},[37,111051,111052],{"class":54},"reward ",[37,111054,70],{"class":50},[37,111056,110339],{"class":54},[37,111058,111059,111061,111063],{"class":39,"line":47},[37,111060,110857],{"class":54},[37,111062,9549],{"class":50},[37,111064,110349],{"class":54},[14,111066,111067,111068,111070,111071,111074,111075,28458],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[34,111069,9549],{}," 是简写，",[34,111072,111073],{},"total_reward += reward"," 等价于 ",[34,111076,111077],{},"total_reward = total_reward + reward",[27,111079,111081],{"className":29,"code":111080,"language":31,"meta":32,"style":32},"if step % 100 == 0:\n",[34,111082,111083],{"__ignoreMap":32},[37,111084,111085,111087,111089,111091,111093,111095,111097],{"class":39,"line":40},[37,111086,1603],{"class":50},[37,111088,31686],{"class":54},[37,111090,533],{"class":50},[37,111092,5826],{"class":82},[37,111094,101606],{"class":50},[37,111096,4165],{"class":82},[37,111098,3811],{"class":54},[14,111100,111101,111103,111104,111107],{},[34,111102,533],{}," 是取余数。",[34,111105,111106],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[27,111109,111111],{"className":29,"code":111110,"language":31,"meta":32,"style":32},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[34,111112,111113],{"__ignoreMap":32},[37,111114,111115,111117,111119,111121,111123,111125,111127,111129,111131,111133,111135,111137,111139,111141,111143,111145],{"class":39,"line":40},[37,111116,30485],{"class":82},[37,111118,208],{"class":54},[37,111120,110378],{"class":309},[37,111122,110381],{"class":54},[37,111124,110384],{"class":309},[37,111126,110387],{"class":54},[37,111128,276],{"class":82},[37,111130,110392],{"class":54},[37,111132,110395],{"class":309},[37,111134,12507],{"class":54},[37,111136,32088],{"class":82},[37,111138,208],{"class":54},[37,111140,247],{"class":82},[37,111142,110406],{"class":54},[37,111144,276],{"class":82},[37,111146,30567],{"class":54},[14,111148,111149,111150,111153,111154,111157],{},"打印当前步数、观测和动作。",[34,111151,111152],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[34,111155,111156],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[146,111159,102363],{"id":102362},[14,111161,111162],{},"观测向量:",[27,111164,111167],{"className":111165,"code":111166,"language":5259,"meta":32},[5257],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[34,111168,111166],{"__ignoreMap":32},[14,111170,111171],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111173,111174],{},"每隔 100 步会打印一次：",[27,111176,111179],{"className":111177,"code":111178,"language":5259,"meta":32},[5257],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[34,111180,111178],{"__ignoreMap":32},[14,111182,111183],{},"重点观察：",[158,111185,111186,111192,111197],{},[161,111187,111188,111191],{},[34,111189,111190],{},"pole_angle"," 是否越来越大。",[161,111193,111194,111196],{},[34,111195,109773],{}," 是否跑得太远。",[161,111198,111199,111200,82607,111202,28458],{},"action 是否经常被 clip 到 ",[34,111201,103962],{},[34,111203,422],{},[14,111205,111206],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[146,111208,102395],{"id":102394},[158,111210,111211,111217,111220,111226,111236,111242,111245],{},[161,111212,111213,111214,28458],{},"把初始角度改为 ",[34,111215,111216],{},"data.qpos[1] = 0.3",[161,111218,111219],{},"重新运行，观察控制是否变差。",[161,111221,111222,111223,111225],{},"把 actuator ",[34,111224,107114],{}," 改小。",[161,111227,111228,111229,111232,111233,28458],{},"打印 ",[34,111230,111231],{},"model.nq, model.nv, model.nu","，应为 ",[34,111234,111235],{},"2 2 1",[161,111237,111238,111239,111241],{},"把 reward 里的 ",[34,111240,110807],{}," 系数改大，观察总奖励变化。",[161,111243,111244],{},"把控制器改成反号，观察杆子是否更容易倒。",[161,111246,111247],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[146,111249,102500],{"id":102499},[175,111251,111252],{"id":111252},"杆子方向和预期不一致",[14,111254,102443,111255,111257,111258,111260],{},[34,111256,106286],{}," 和 capsule 的 ",[34,111259,103223],{},"，必要时用 viewer 可视化确认。",[175,111262,111263],{"id":111263},"控制器越控越倒",[14,111265,111266],{},"说明反馈符号可能反了，尝试:",[27,111268,111270],{"className":29,"code":111269,"language":31,"meta":32,"style":32},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[34,111271,111272],{"__ignoreMap":32},[37,111273,111274,111276,111278,111280,111282,111284,111286,111288,111290,111292],{"class":39,"line":40},[37,111275,107489],{"class":54},[37,111277,70],{"class":50},[37,111279,52339],{"class":50},[37,111281,105307],{"class":82},[37,111283,6590],{"class":50},[37,111285,109867],{"class":54},[37,111287,112],{"class":50},[37,111289,61935],{"class":82},[37,111291,6590],{"class":50},[37,111293,110287],{"class":54},[175,111295,111296],{"id":111296},"小车飞走",[14,111298,111299,111300,111302,111303,111306],{},"降低 ",[34,111301,107114],{}," 或缩小 ",[34,111304,111305],{},"action"," 的 clip 范围。",[175,111308,111310,111312],{"id":111309},"obs3-为什么是杆子角速度",[34,111311,110946],{}," 为什么是杆子角速度",[14,111314,111315],{},"因为这个模型里：",[27,111317,111320],{"className":111318,"code":111319,"language":5259,"meta":32},[5257],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[34,111321,111319],{"__ignoreMap":32},[14,111323,109794],{},[27,111325,111328],{"className":111326,"code":111327,"language":5259,"meta":32},[5257],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[34,111329,111327],{"__ignoreMap":32},[175,111331,111333],{"id":111332},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111335,111336],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[146,111338,102654],{"id":102653},[14,111340,111341],{},"一个控制任务通常包含：",[158,111343,111344,111347,111355,111360,111363],{},[161,111345,111346],{},"模型：Cartpole 的 body、joint、actuator。",[161,111348,111349,111350,417,111352,111354],{},"观测：从 ",[34,111351,104077],{},[34,111353,104407],{}," 里取状态。",[161,111356,111357,111358,28458],{},"动作：写入 ",[34,111359,101123],{},[161,111361,111362],{},"奖励：根据任务目标打分。",[161,111364,111365],{},"循环：obs -> action -> step -> reward。",[14,111367,111368],{},"这就是后面 Gymnasium 环境的基本骨架。",[123,111370,104333],{},{"title":32,"searchDepth":47,"depth":47,"links":111372},[111373,111374,111375,111380,111384,111385,111386,111394],{"id":100693,"depth":47,"text":100694},{"id":100816,"depth":47,"text":100817},{"id":101091,"depth":47,"text":101092,"children":111376},[111377,111378,111379],{"id":109747,"depth":58,"text":109748},{"id":109812,"depth":58,"text":109813},{"id":109828,"depth":58,"text":109829},{"id":101299,"depth":47,"text":101300,"children":111381},[111382,111383],{"id":101619,"depth":58,"text":101619},{"id":101755,"depth":58,"text":101755},{"id":102362,"depth":47,"text":102363},{"id":102394,"depth":47,"text":102395},{"id":102499,"depth":47,"text":102500,"children":111387},[111388,111389,111390,111391,111393],{"id":111252,"depth":58,"text":111252},{"id":111263,"depth":58,"text":111263},{"id":111296,"depth":58,"text":111296},{"id":111309,"depth":58,"text":111392},"obs[3] 为什么是杆子角速度",{"id":111332,"depth":58,"text":111333},{"id":102653,"depth":47,"text":102654},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109483,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111401,"title":111402,"body":111403,"description":32,"extension":129,"meta":113417,"navigation":131,"path":113418,"seo":113419,"stem":113420,"__hash__":113421},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111404,"toc":113393},[111405,111408,111410,111413,111415,111432,111435,111438,111444,111447,111449,111451,111475,111477,111491,111493,111534,111536,111554,111556,111559,111565,111568,111596,111600,111606,111631,111634,111665,111672,111675,111678,111684,111687,111693,111696,111702,111706,111709,111734,111737,111739,112499,112501,112513,112515,112526,112528,112531,112548,112551,112553,112564,112567,112569,112615,112618,112631,112634,112716,112719,112721,112737,112747,112760,112763,112802,112812,112823,112833,112846,112849,112878,112881,112891,112894,112900,112917,112928,112930,112936,112953,112964,112985,112988,113000,113003,113024,113027,113035,113043,113060,113063,113132,113139,113147,113150,113163,113170,113172,113175,113181,113184,113187,113193,113199,113201,113241,113243,113249,113258,113261,113263,113283,113286,113289,113295,113299,113301,113328,113331,113334,113361,113367,113370,113373,113375,113378,113381,113387,113390],[10,111406,111402],{"id":111407},"_7控制任务reacher-机械臂到达目标",[146,111409,100694],{"id":100693},[14,111411,111412],{},"本章搭建一个二维两关节 reacher 任务。",[14,111414,104378],{},[158,111416,111417,111420,111423,111426,111429],{},[161,111418,111419],{},"两个 hinge joint",[161,111421,111422],{},"两个 motor actuator",[161,111424,111425],{},"site 作为末端点和目标点",[161,111427,111428],{},"根据末端和目标距离设计 reward",[161,111430,111431],{},"构造机械臂任务的基本形式",[14,111433,111434],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,111436,111437],{},"Reacher 任务可以理解为：",[27,111439,111442],{"className":111440,"code":111441,"language":5259,"meta":32},[5257],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[34,111443,111441],{"__ignoreMap":32},[14,111445,111446],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[146,111448,100817],{"id":100816},[14,111450,100820],{},[27,111452,111453],{"className":23894,"code":104435,"language":23896,"meta":32,"style":32},[34,111454,111455],{"__ignoreMap":32},[37,111456,111457,111459,111461,111463,111465,111467,111469,111471,111473],{"class":39,"line":40},[37,111458,24649],{"class":2035},[37,111460,26388],{"class":309},[37,111462,23906],{"class":309},[37,111464,26473],{"class":82},[37,111466,104450],{"class":309},[37,111468,100845],{"class":309},[37,111470,102548],{"class":309},[37,111472,100861],{"class":309},[37,111474,104459],{"class":309},[14,111476,102866],{},[27,111478,111479],{"className":23894,"code":100966,"language":23896,"meta":32,"style":32},[34,111480,111481],{"__ignoreMap":32},[37,111482,111483,111485,111487,111489],{"class":39,"line":40},[37,111484,23903],{"class":2035},[37,111486,23906],{"class":309},[37,111488,100977],{"class":309},[37,111490,100980],{"class":309},[14,111492,102883],{},[27,111494,111496],{"className":23894,"code":111495,"language":23896,"meta":32,"style":32},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[34,111497,111498,111515,111524],{"__ignoreMap":32},[37,111499,111500,111502,111504,111506,111509,111511,111513],{"class":39,"line":40},[37,111501,30403],{"class":2035},[37,111503,29249],{"class":309},[37,111505,25188],{"class":82},[37,111507,111508],{"class":309}," mujoco-reacher",[37,111510,101022],{"class":309},[37,111512,101025],{"class":82},[37,111514,101028],{"class":82},[37,111516,111517,111519,111521],{"class":39,"line":47},[37,111518,30403],{"class":2035},[37,111520,101035],{"class":309},[37,111522,111523],{"class":309}," mujoco-reacher\n",[37,111525,111526,111528,111530,111532],{"class":39,"line":58},[37,111527,23903],{"class":2035},[37,111529,23906],{"class":309},[37,111531,100977],{"class":309},[37,111533,100980],{"class":309},[14,111535,101051],{},[158,111537,111538,111541,111544],{},[161,111539,111540],{},"本章使用低维状态，不使用图像输入。",[161,111542,111543],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[161,111545,111546,111547,417,111549,417,111551,111553],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[34,111548,104077],{},[34,111550,104407],{},[34,111552,103727],{}," 的方法一致。",[146,111555,101092],{"id":101091},[14,111557,111558],{},"Reacher 任务核心:",[27,111560,111563],{"className":111561,"code":111562,"language":5259,"meta":32},[5257],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[34,111564,111562],{"__ignoreMap":32},[14,111566,111567],{},"读取 site 世界坐标:",[27,111569,111571],{"className":29,"code":111570,"language":31,"meta":32,"style":32},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[34,111572,111573,111586],{"__ignoreMap":32},[37,111574,111575,111577,111579,111581,111584],{"class":39,"line":40},[37,111576,103681],{"class":54},[37,111578,70],{"class":50},[37,111580,103452],{"class":54},[37,111582,111583],{"class":309},"\"tip\"",[37,111585,214],{"class":54},[37,111587,111588,111591,111593],{"class":39,"line":47},[37,111589,111590],{"class":54},"tip_pos ",[37,111592,70],{"class":50},[37,111594,111595],{"class":54}," data.site_xpos[site_id]\n",[175,111597,111599],{"id":111598},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,111601,111602,111603,111605],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[34,111604,104077],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[27,111607,111609],{"className":29,"code":111608,"language":31,"meta":32,"style":32},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[34,111610,111611,111621],{"__ignoreMap":32},[37,111612,111613,111616,111618],{"class":39,"line":40},[37,111614,111615],{"class":54},"tip ",[37,111617,70],{"class":50},[37,111619,111620],{"class":54}," data.site_xpos[tip_site_id]\n",[37,111622,111623,111626,111628],{"class":39,"line":47},[37,111624,111625],{"class":54},"target ",[37,111627,70],{"class":50},[37,111629,111630],{"class":54}," data.site_xpos[target_site_id]\n",[14,111632,111633],{},"这样 reward 就很容易写：",[27,111635,111637],{"className":29,"code":111636,"language":31,"meta":32,"style":32},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[34,111638,111639,111654],{"__ignoreMap":32},[37,111640,111641,111644,111646,111649,111651],{"class":39,"line":40},[37,111642,111643],{"class":54},"dist ",[37,111645,70],{"class":50},[37,111647,111648],{"class":54}," np.linalg.norm(tip ",[37,111650,112],{"class":50},[37,111652,111653],{"class":54}," target)\n",[37,111655,111656,111658,111660,111662],{"class":39,"line":47},[37,111657,111052],{"class":54},[37,111659,70],{"class":50},[37,111661,52339],{"class":50},[37,111663,111664],{"class":54},"dist\n",[14,111666,111667,111668,111671],{},"距离越小，",[34,111669,111670],{},"-dist"," 越接近 0，奖励越高。",[175,111673,111674],{"id":111674},"两关节机械臂的状态",[14,111676,111677],{},"这个模型有两个 hinge joint：",[27,111679,111682],{"className":111680,"code":111681,"language":5259,"meta":32},[5257],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[34,111683,111681],{"__ignoreMap":32},[14,111685,111686],{},"再加上末端和目标位置：",[27,111688,111691],{"className":111689,"code":111690,"language":5259,"meta":32},[5257],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[34,111692,111690],{"__ignoreMap":32},[14,111694,111695],{},"总维度：",[27,111697,111700],{"className":111698,"code":111699,"language":5259,"meta":32},[5257],"2 + 2 + 3 + 3 = 10\n",[34,111701,111699],{"__ignoreMap":32},[175,111703,111705],{"id":111704},"为什么-gravity-是-0","为什么 gravity 是 0",[14,111707,111708],{},"本章把重力设为：",[27,111710,111712],{"className":53135,"code":111711,"language":53137,"meta":32,"style":32},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[34,111713,111714],{"__ignoreMap":32},[37,111715,111716,111718,111720,111722,111724,111726,111728,111730,111732],{"class":39,"line":40},[37,111717,1113],{"class":54},[37,111719,69234],{"class":51368},[37,111721,101241],{"class":2035},[37,111723,70],{"class":54},[37,111725,101246],{"class":309},[37,111727,101249],{"class":2035},[37,111729,70],{"class":54},[37,111731,103818],{"class":309},[37,111733,101191],{"class":54},[14,111735,111736],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[146,111738,101300],{"id":101299},[27,111740,111742],{"className":29,"code":111741,"language":31,"meta":32,"style":32},"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",[34,111743,111744,111750,111760,111764,111768,111776,111781,111786,111790,111794,111799,111804,111808,111813,111818,111823,111827,111832,111837,111842,111847,111851,111855,111859,111863,111867,111872,111877,111881,111885,111889,111893,111897,111912,111921,111933,111956,111963,111967,111971,111981,111995,112009,112016,112020,112024,112038,112050,112062,112075,112090,112107,112111,112115,112127,112139,112147,112155,112159,112175,112180,112193,112206,112221,112225,112260,112292,112296,112300,112309,112313,112329,112339,112350,112366,112382,112398,112414,112418,112436,112456,112475,112479,112483,112495],{"__ignoreMap":32},[37,111745,111746,111748],{"class":39,"line":40},[37,111747,51],{"class":50},[37,111749,101348],{"class":54},[37,111751,111752,111754,111756,111758],{"class":39,"line":47},[37,111753,51],{"class":50},[37,111755,31450],{"class":54},[37,111757,31453],{"class":50},[37,111759,31456],{"class":54},[37,111761,111762],{"class":39,"line":58},[37,111763,2472],{"emptyLinePlaceholder":131},[37,111765,111766],{"class":39,"line":64},[37,111767,2472],{"emptyLinePlaceholder":131},[37,111769,111770,111772,111774],{"class":39,"line":76},[37,111771,101361],{"class":82},[37,111773,13636],{"class":50},[37,111775,101366],{"class":309},[37,111777,111778],{"class":39,"line":92},[37,111779,111780],{"class":309},"\u003Cmujoco model=\"two_link_reacher\">\n",[37,111782,111783],{"class":39,"line":97},[37,111784,111785],{"class":309},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[37,111787,111788],{"class":39,"line":107},[37,111789,2472],{"emptyLinePlaceholder":131},[37,111791,111792],{"class":39,"line":1390},[37,111793,101385],{"class":309},[37,111795,111796],{"class":39,"line":1402},[37,111797,111798],{"class":309},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[37,111800,111801],{"class":39,"line":1684},[37,111802,111803],{"class":309},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[37,111805,111806],{"class":39,"line":1689},[37,111807,2472],{"emptyLinePlaceholder":131},[37,111809,111810],{"class":39,"line":1695},[37,111811,111812],{"class":309},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[37,111814,111815],{"class":39,"line":1700},[37,111816,111817],{"class":309},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[37,111819,111820],{"class":39,"line":1714},[37,111821,111822],{"class":309},"      \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",[37,111824,111825],{"class":39,"line":1719},[37,111826,2472],{"emptyLinePlaceholder":131},[37,111828,111829],{"class":39,"line":1725},[37,111830,111831],{"class":309},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[37,111833,111834],{"class":39,"line":1746},[37,111835,111836],{"class":309},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[37,111838,111839],{"class":39,"line":1751},[37,111840,111841],{"class":309},"        \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",[37,111843,111844],{"class":39,"line":1765},[37,111845,111846],{"class":309},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[37,111848,111849],{"class":39,"line":1770},[37,111850,106485],{"class":309},[37,111852,111853],{"class":39,"line":1799},[37,111854,101414],{"class":309},[37,111856,111857],{"class":39,"line":1804},[37,111858,101419],{"class":309},[37,111860,111861],{"class":39,"line":1821},[37,111862,2472],{"emptyLinePlaceholder":131},[37,111864,111865],{"class":39,"line":1826},[37,111866,106502],{"class":309},[37,111868,111869],{"class":39,"line":1831},[37,111870,111871],{"class":309},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[37,111873,111874],{"class":39,"line":1836},[37,111875,111876],{"class":309},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[37,111878,111879],{"class":39,"line":1850},[37,111880,106512],{"class":309},[37,111882,111883],{"class":39,"line":1855},[37,111884,101424],{"class":309},[37,111886,111887],{"class":39,"line":2649},[37,111888,95745],{"class":309},[37,111890,111891],{"class":39,"line":2663},[37,111892,2472],{"emptyLinePlaceholder":131},[37,111894,111895],{"class":39,"line":2671},[37,111896,2472],{"emptyLinePlaceholder":131},[37,111898,111899,111901,111904,111907,111909],{"class":39,"line":2676},[37,111900,32017],{"class":50},[37,111902,111903],{"class":2035}," site_position",[37,111905,111906],{"class":54},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[37,111908,1373],{"class":82},[37,111910,111911],{"class":54},") -> np.ndarray:\n",[37,111913,111914,111916,111918],{"class":39,"line":2682},[37,111915,103447],{"class":54},[37,111917,70],{"class":50},[37,111919,111920],{"class":54}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[37,111922,111923,111925,111927,111929,111931],{"class":39,"line":2688},[37,111924,3173],{"class":50},[37,111926,103496],{"class":54},[37,111928,1113],{"class":50},[37,111930,4165],{"class":82},[37,111932,3811],{"class":54},[37,111934,111935,111937,111939,111941,111943,111946,111948,111950,111952,111954],{"class":39,"line":2693},[37,111936,103479],{"class":50},[37,111938,103482],{"class":82},[37,111940,208],{"class":54},[37,111942,258],{"class":50},[37,111944,111945],{"class":309},"\"site not found: ",[37,111947,1099],{"class":82},[37,111949,79878],{"class":54},[37,111951,1149],{"class":82},[37,111953,456],{"class":309},[37,111955,214],{"class":54},[37,111957,111958,111960],{"class":39,"line":8020},[37,111959,4162],{"class":50},[37,111961,111962],{"class":54}," data.site_xpos[site_id].copy()\n",[37,111964,111965],{"class":39,"line":8044},[37,111966,2472],{"emptyLinePlaceholder":131},[37,111968,111969],{"class":39,"line":8049},[37,111970,2472],{"emptyLinePlaceholder":131},[37,111972,111973,111975,111978],{"class":39,"line":8055},[37,111974,32017],{"class":50},[37,111976,111977],{"class":2035}," get_obs",[37,111979,111980],{"class":54},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[37,111982,111983,111986,111988,111991,111993],{"class":39,"line":8082},[37,111984,111985],{"class":54},"    tip ",[37,111987,70],{"class":50},[37,111989,111990],{"class":54}," site_position(model, data, ",[37,111992,111583],{"class":309},[37,111994,214],{"class":54},[37,111996,111997,112000,112002,112004,112007],{"class":39,"line":8087},[37,111998,111999],{"class":54},"    target ",[37,112001,70],{"class":50},[37,112003,111990],{"class":54},[37,112005,112006],{"class":309},"\"target\"",[37,112008,214],{"class":54},[37,112010,112011,112013],{"class":39,"line":8093},[37,112012,4162],{"class":50},[37,112014,112015],{"class":54}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[37,112017,112018],{"class":39,"line":8105},[37,112019,2472],{"emptyLinePlaceholder":131},[37,112021,112022],{"class":39,"line":8117},[37,112023,2472],{"emptyLinePlaceholder":131},[37,112025,112026,112028,112031,112034,112036],{"class":39,"line":8129},[37,112027,32017],{"class":50},[37,112029,112030],{"class":2035}," reward",[37,112032,112033],{"class":54},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[37,112035,247],{"class":82},[37,112037,3811],{"class":54},[37,112039,112040,112042,112044,112046,112048],{"class":39,"line":9788},[37,112041,111985],{"class":54},[37,112043,70],{"class":50},[37,112045,111990],{"class":54},[37,112047,111583],{"class":309},[37,112049,214],{"class":54},[37,112051,112052,112054,112056,112058,112060],{"class":39,"line":9813},[37,112053,111999],{"class":54},[37,112055,70],{"class":50},[37,112057,111990],{"class":54},[37,112059,112006],{"class":309},[37,112061,214],{"class":54},[37,112063,112064,112067,112069,112071,112073],{"class":39,"line":9836},[37,112065,112066],{"class":54},"    dist ",[37,112068,70],{"class":50},[37,112070,111648],{"class":54},[37,112072,112],{"class":50},[37,112074,111653],{"class":54},[37,112076,112077,112080,112082,112085,112087],{"class":39,"line":9860},[37,112078,112079],{"class":54},"    control_cost ",[37,112081,70],{"class":50},[37,112083,112084],{"class":82}," 0.01",[37,112086,6590],{"class":50},[37,112088,112089],{"class":54}," np.sum(np.square(data.ctrl))\n",[37,112091,112092,112094,112096,112098,112100,112102,112104],{"class":39,"line":9865},[37,112093,4162],{"class":50},[37,112095,109844],{"class":82},[37,112097,208],{"class":54},[37,112099,112],{"class":50},[37,112101,111643],{"class":54},[37,112103,112],{"class":50},[37,112105,112106],{"class":54}," control_cost)\n",[37,112108,112109],{"class":39,"line":9870},[37,112110,2472],{"emptyLinePlaceholder":131},[37,112112,112113],{"class":39,"line":9875},[37,112114,2472],{"emptyLinePlaceholder":131},[37,112116,112117,112119,112121,112123,112125],{"class":39,"line":9884},[37,112118,32017],{"class":50},[37,112120,2045],{"class":2035},[37,112122,101445],{"class":54},[37,112124,95733],{"class":82},[37,112126,3811],{"class":54},[37,112128,112129,112131,112133,112135,112137],{"class":39,"line":9889},[37,112130,101454],{"class":54},[37,112132,70],{"class":50},[37,112134,101459],{"class":54},[37,112136,101361],{"class":82},[37,112138,214],{"class":54},[37,112140,112141,112143,112145],{"class":39,"line":9895},[37,112142,101468],{"class":54},[37,112144,70],{"class":50},[37,112146,101473],{"class":54},[37,112148,112149,112151,112153],{"class":39,"line":9916},[37,112150,110200],{"class":54},[37,112152,70],{"class":50},[37,112154,104808],{"class":82},[37,112156,112157],{"class":39,"line":9922},[37,112158,2472],{"emptyLinePlaceholder":131},[37,112160,112161,112163,112165,112167,112169,112171,112173],{"class":39,"line":9936},[37,112162,3273],{"class":50},[37,112164,31686],{"class":54},[37,112166,26116],{"class":50},[37,112168,32512],{"class":82},[37,112170,208],{"class":54},[37,112172,65142],{"class":82},[37,112174,30856],{"class":54},[37,112176,112177],{"class":39,"line":9942},[37,112178,112179],{"class":54},"        mujoco.mj_forward(model, data)\n",[37,112181,112182,112185,112187,112189,112191],{"class":39,"line":9969},[37,112183,112184],{"class":54},"        tip ",[37,112186,70],{"class":50},[37,112188,111990],{"class":54},[37,112190,111583],{"class":309},[37,112192,214],{"class":54},[37,112194,112195,112198,112200,112202,112204],{"class":39,"line":9978},[37,112196,112197],{"class":54},"        target ",[37,112199,70],{"class":50},[37,112201,111990],{"class":54},[37,112203,112006],{"class":309},[37,112205,214],{"class":54},[37,112207,112208,112211,112213,112216,112218],{"class":39,"line":9984},[37,112209,112210],{"class":54},"        error ",[37,112212,70],{"class":50},[37,112214,112215],{"class":54}," target ",[37,112217,112],{"class":50},[37,112219,112220],{"class":54}," tip\n",[37,112222,112223],{"class":39,"line":9992},[37,112224,2472],{"emptyLinePlaceholder":131},[37,112226,112227,112229,112231,112233,112235,112238,112240,112242,112245,112247,112250,112252,112254,112256,112258],{"class":39,"line":9997},[37,112228,106664],{"class":54},[37,112230,396],{"class":82},[37,112232,4515],{"class":54},[37,112234,70],{"class":50},[37,112236,112237],{"class":54}," np.clip(",[37,112239,105307],{"class":82},[37,112241,6590],{"class":50},[37,112243,112244],{"class":54}," error[",[37,112246,282],{"class":82},[37,112248,112249],{"class":54},"], ",[37,112251,112],{"class":50},[37,112253,102450],{"class":82},[37,112255,12507],{"class":54},[37,112257,102450],{"class":82},[37,112259,214],{"class":54},[37,112261,112262,112264,112266,112268,112270,112272,112274,112276,112278,112280,112282,112284,112286,112288,112290],{"class":39,"line":16676},[37,112263,106664],{"class":54},[37,112265,422],{"class":82},[37,112267,4515],{"class":54},[37,112269,70],{"class":50},[37,112271,112237],{"class":54},[37,112273,105307],{"class":82},[37,112275,6590],{"class":50},[37,112277,112244],{"class":54},[37,112279,396],{"class":82},[37,112281,112249],{"class":54},[37,112283,112],{"class":50},[37,112285,102450],{"class":82},[37,112287,12507],{"class":54},[37,112289,102450],{"class":82},[37,112291,214],{"class":54},[37,112293,112294],{"class":39,"line":16682},[37,112295,2472],{"emptyLinePlaceholder":131},[37,112297,112298],{"class":39,"line":16705},[37,112299,101563],{"class":54},[37,112301,112302,112304,112306],{"class":39,"line":16711},[37,112303,110344],{"class":54},[37,112305,9549],{"class":50},[37,112307,112308],{"class":54}," reward(model, data)\n",[37,112310,112311],{"class":39,"line":16734},[37,112312,2472],{"emptyLinePlaceholder":131},[37,112314,112315,112317,112319,112321,112323,112325,112327],{"class":39,"line":16748},[37,112316,2569],{"class":50},[37,112318,31686],{"class":54},[37,112320,533],{"class":50},[37,112322,5826],{"class":82},[37,112324,101606],{"class":50},[37,112326,4165],{"class":82},[37,112328,3811],{"class":54},[37,112330,112331,112334,112336],{"class":39,"line":16768},[37,112332,112333],{"class":54},"            obs ",[37,112335,70],{"class":50},[37,112337,112338],{"class":54}," get_obs(model, data)\n",[37,112340,112341,112343,112345,112347],{"class":39,"line":16774},[37,112342,34719],{"class":82},[37,112344,208],{"class":54},[37,112346,110378],{"class":309},[37,112348,112349],{"class":54},", step)\n",[37,112351,112352,112354,112356,112359,112362,112364],{"class":39,"line":16785},[37,112353,34719],{"class":82},[37,112355,208],{"class":54},[37,112357,112358],{"class":309},"\"  tip:\"",[37,112360,112361],{"class":54},", np.round(tip, ",[37,112363,276],{"class":82},[37,112365,30567],{"class":54},[37,112367,112368,112370,112372,112375,112378,112380],{"class":39,"line":16808},[37,112369,34719],{"class":82},[37,112371,208],{"class":54},[37,112373,112374],{"class":309},"\"  target:\"",[37,112376,112377],{"class":54},", np.round(target, ",[37,112379,276],{"class":82},[37,112381,30567],{"class":54},[37,112383,112384,112386,112388,112391,112394,112396],{"class":39,"line":16830},[37,112385,34719],{"class":82},[37,112387,208],{"class":54},[37,112389,112390],{"class":309},"\"  ctrl:\"",[37,112392,112393],{"class":54},", np.round(data.ctrl.copy(), ",[37,112395,276],{"class":82},[37,112397,30567],{"class":54},[37,112399,112400,112402,112404,112407,112410,112412],{"class":39,"line":16835},[37,112401,34719],{"class":82},[37,112403,208],{"class":54},[37,112405,112406],{"class":309},"\"  obs_dim:\"",[37,112408,112409],{"class":54},", obs.shape[",[37,112411,396],{"class":82},[37,112413,4729],{"class":54},[37,112415,112416],{"class":39,"line":16841},[37,112417,2472],{"emptyLinePlaceholder":131},[37,112419,112420,112422,112424,112426,112428,112430,112432,112434],{"class":39,"line":16855},[37,112421,31369],{"class":82},[37,112423,208],{"class":54},[37,112425,110423],{"class":309},[37,112427,12507],{"class":54},[37,112429,32088],{"class":82},[37,112431,110430],{"class":54},[37,112433,276],{"class":82},[37,112435,30567],{"class":54},[37,112437,112438,112440,112442,112445,112448,112450,112452,112454],{"class":39,"line":16868},[37,112439,31369],{"class":82},[37,112441,208],{"class":54},[37,112443,112444],{"class":309},"\"final tip:\"",[37,112446,112447],{"class":54},", np.round(site_position(model, data, ",[37,112449,111583],{"class":309},[37,112451,110392],{"class":54},[37,112453,276],{"class":82},[37,112455,30567],{"class":54},[37,112457,112458,112460,112462,112465,112467,112469,112471,112473],{"class":39,"line":16873},[37,112459,31369],{"class":82},[37,112461,208],{"class":54},[37,112463,112464],{"class":309},"\"target:\"",[37,112466,112447],{"class":54},[37,112468,112006],{"class":309},[37,112470,110392],{"class":54},[37,112472,276],{"class":82},[37,112474,30567],{"class":54},[37,112476,112477],{"class":39,"line":16887},[37,112478,2472],{"emptyLinePlaceholder":131},[37,112480,112481],{"class":39,"line":16892},[37,112482,2472],{"emptyLinePlaceholder":131},[37,112484,112485,112487,112489,112491,112493],{"class":39,"line":16898},[37,112486,1603],{"class":50},[37,112488,31290],{"class":82},[37,112490,101606],{"class":50},[37,112492,101609],{"class":309},[37,112494,3811],{"class":54},[37,112496,112497],{"class":39,"line":16903},[37,112498,101616],{"class":54},[14,112500,103617],{},[27,112502,112504],{"className":23894,"code":112503,"language":23896,"meta":32,"style":32},"touch ch7_reacher.py\n",[34,112505,112506],{"__ignoreMap":32},[37,112507,112508,112510],{"class":39,"line":40},[37,112509,101330],{"class":2035},[37,112511,112512],{"class":309}," ch7_reacher.py\n",[14,112514,110491],{},[27,112516,112518],{"className":23894,"code":112517,"language":23896,"meta":32,"style":32},"python ch7_reacher.py\n",[34,112519,112520],{"__ignoreMap":32},[37,112521,112522,112524],{"class":39,"line":40},[37,112523,31],{"class":2035},[37,112525,112512],{"class":309},[175,112527,101619],{"id":101619},[14,112529,112530],{},"读取 site 坐标：",[27,112532,112534],{"className":29,"code":112533,"language":31,"meta":32,"style":32},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[34,112535,112536],{"__ignoreMap":32},[37,112537,112538,112540,112542,112544,112546],{"class":39,"line":40},[37,112539,32017],{"class":50},[37,112541,111903],{"class":2035},[37,112543,111906],{"class":54},[37,112545,1373],{"class":82},[37,112547,111911],{"class":54},[14,112549,112550],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,112552,110507],{},[27,112554,112556],{"className":29,"code":112555,"language":31,"meta":32,"style":32},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[34,112557,112558],{"__ignoreMap":32},[37,112559,112560,112562],{"class":39,"line":40},[37,112561,17118],{"class":50},[37,112563,112015],{"class":54},[14,112565,112566],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,112568,109832],{},[27,112570,112572],{"className":29,"code":112571,"language":31,"meta":32,"style":32},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[34,112573,112574,112586,112599],{"__ignoreMap":32},[37,112575,112576,112578,112580,112582,112584],{"class":39,"line":40},[37,112577,111643],{"class":54},[37,112579,70],{"class":50},[37,112581,111648],{"class":54},[37,112583,112],{"class":50},[37,112585,111653],{"class":54},[37,112587,112588,112591,112593,112595,112597],{"class":39,"line":47},[37,112589,112590],{"class":54},"control_cost ",[37,112592,70],{"class":50},[37,112594,112084],{"class":82},[37,112596,6590],{"class":50},[37,112598,112089],{"class":54},[37,112600,112601,112603,112605,112607,112609,112611,112613],{"class":39,"line":58},[37,112602,17118],{"class":50},[37,112604,109844],{"class":82},[37,112606,208],{"class":54},[37,112608,112],{"class":50},[37,112610,111643],{"class":54},[37,112612,112],{"class":50},[37,112614,112106],{"class":54},[14,112616,112617],{},"奖励由两部分组成：",[158,112619,112620,112625],{},[161,112621,112622,112624],{},[34,112623,111670],{},"：末端离目标越远，奖励越低。",[161,112626,112627,112630],{},[34,112628,112629],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,112632,112633],{},"简单控制器：",[27,112635,112637],{"className":29,"code":112636,"language":31,"meta":32,"style":32},"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",[34,112638,112639,112652,112684],{"__ignoreMap":32},[37,112640,112641,112644,112646,112648,112650],{"class":39,"line":40},[37,112642,112643],{"class":54},"error ",[37,112645,70],{"class":50},[37,112647,112215],{"class":54},[37,112649,112],{"class":50},[37,112651,112220],{"class":54},[37,112653,112654,112656,112658,112660,112662,112664,112666,112668,112670,112672,112674,112676,112678,112680,112682],{"class":39,"line":47},[37,112655,105918],{"class":54},[37,112657,396],{"class":82},[37,112659,4515],{"class":54},[37,112661,70],{"class":50},[37,112663,112237],{"class":54},[37,112665,105307],{"class":82},[37,112667,6590],{"class":50},[37,112669,112244],{"class":54},[37,112671,282],{"class":82},[37,112673,112249],{"class":54},[37,112675,112],{"class":50},[37,112677,102450],{"class":82},[37,112679,12507],{"class":54},[37,112681,102450],{"class":82},[37,112683,214],{"class":54},[37,112685,112686,112688,112690,112692,112694,112696,112698,112700,112702,112704,112706,112708,112710,112712,112714],{"class":39,"line":58},[37,112687,105918],{"class":54},[37,112689,422],{"class":82},[37,112691,4515],{"class":54},[37,112693,70],{"class":50},[37,112695,112237],{"class":54},[37,112697,105307],{"class":82},[37,112699,6590],{"class":50},[37,112701,112244],{"class":54},[37,112703,396],{"class":82},[37,112705,112249],{"class":54},[37,112707,112],{"class":50},[37,112709,102450],{"class":82},[37,112711,12507],{"class":54},[37,112713,102450],{"class":82},[37,112715,214],{"class":54},[14,112717,112718],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[175,112720,101755],{"id":101755},[27,112722,112723],{"className":29,"code":112533,"language":31,"meta":32,"style":32},[34,112724,112725],{"__ignoreMap":32},[37,112726,112727,112729,112731,112733,112735],{"class":39,"line":40},[37,112728,32017],{"class":50},[37,112730,111903],{"class":2035},[37,112732,111906],{"class":54},[37,112734,1373],{"class":82},[37,112736,111911],{"class":54},[14,112738,112739,112740,112742,112743,82607,112745,28458],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[34,112741,79878],{}," 是 site 的名字，比如 ",[34,112744,111583],{},[34,112746,112006],{},[27,112748,112750],{"className":29,"code":112749,"language":31,"meta":32,"style":32},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[34,112751,112752],{"__ignoreMap":32},[37,112753,112754,112756,112758],{"class":39,"line":40},[37,112755,103681],{"class":54},[37,112757,70],{"class":50},[37,112759,111920],{"class":54},[14,112761,112762],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[27,112764,112766],{"className":29,"code":112765,"language":31,"meta":32,"style":32},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[34,112767,112768,112780],{"__ignoreMap":32},[37,112769,112770,112772,112774,112776,112778],{"class":39,"line":40},[37,112771,1603],{"class":50},[37,112773,103496],{"class":54},[37,112775,1113],{"class":50},[37,112777,4165],{"class":82},[37,112779,3811],{"class":54},[37,112781,112782,112784,112786,112788,112790,112792,112794,112796,112798,112800],{"class":39,"line":47},[37,112783,103942],{"class":50},[37,112785,103482],{"class":82},[37,112787,208],{"class":54},[37,112789,258],{"class":50},[37,112791,111945],{"class":309},[37,112793,1099],{"class":82},[37,112795,79878],{"class":54},[37,112797,1149],{"class":82},[37,112799,456],{"class":309},[37,112801,214],{"class":54},[14,112803,112804,112805,112808,112809,112811],{},"如果 site 没找到，就主动报错。",[34,112806,112807],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[34,112810,79878],{}," 的值放进字符串里。",[27,112813,112815],{"className":29,"code":112814,"language":31,"meta":32,"style":32},"return data.site_xpos[site_id].copy()\n",[34,112816,112817],{"__ignoreMap":32},[37,112818,112819,112821],{"class":39,"line":40},[37,112820,17118],{"class":50},[37,112822,111962],{"class":54},[14,112824,112825,112826,112828,112829,112832],{},"返回这个 site 的世界坐标。",[34,112827,103727],{}," 里的每一行都是一个 site 的 ",[34,112830,112831],{},"(x, y, z)"," 坐标。",[27,112834,112836],{"className":29,"code":112835,"language":31,"meta":32,"style":32},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[34,112837,112838],{"__ignoreMap":32},[37,112839,112840,112842,112844],{"class":39,"line":40},[37,112841,32017],{"class":50},[37,112843,111977],{"class":2035},[37,112845,111980],{"class":54},[14,112847,112848],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[27,112850,112852],{"className":29,"code":112851,"language":31,"meta":32,"style":32},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[34,112853,112854,112866],{"__ignoreMap":32},[37,112855,112856,112858,112860,112862,112864],{"class":39,"line":40},[37,112857,111615],{"class":54},[37,112859,70],{"class":50},[37,112861,111990],{"class":54},[37,112863,111583],{"class":309},[37,112865,214],{"class":54},[37,112867,112868,112870,112872,112874,112876],{"class":39,"line":47},[37,112869,111625],{"class":54},[37,112871,70],{"class":50},[37,112873,111990],{"class":54},[37,112875,112006],{"class":309},[37,112877,214],{"class":54},[14,112879,112880],{},"分别读取末端点和目标点的世界坐标。",[27,112882,112883],{"className":29,"code":112555,"language":31,"meta":32,"style":32},[34,112884,112885],{"__ignoreMap":32},[37,112886,112887,112889],{"class":39,"line":40},[37,112888,17118],{"class":50},[37,112890,112015],{"class":54},[14,112892,112893],{},"把四部分拼成一个观测数组：",[27,112895,112898],{"className":112896,"code":112897,"language":5259,"meta":32},[5257],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[34,112899,112897],{"__ignoreMap":32},[27,112901,112903],{"className":29,"code":112902,"language":31,"meta":32,"style":32},"dist = np.linalg.norm(tip - target)\n",[34,112904,112905],{"__ignoreMap":32},[37,112906,112907,112909,112911,112913,112915],{"class":39,"line":40},[37,112908,111643],{"class":54},[37,112910,70],{"class":50},[37,112912,111648],{"class":54},[37,112914,112],{"class":50},[37,112916,111653],{"class":54},[14,112918,112919,112920,112923,112924,112927],{},"计算 tip 到 target 的距离。",[34,112921,112922],{},"tip - target"," 得到一个三维向量，",[34,112925,112926],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,112929,14705],{},[27,112931,112934],{"className":112932,"code":112933,"language":5259,"meta":32},[5257],"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",[34,112935,112933],{"__ignoreMap":32},[27,112937,112939],{"className":29,"code":112938,"language":31,"meta":32,"style":32},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[34,112940,112941],{"__ignoreMap":32},[37,112942,112943,112945,112947,112949,112951],{"class":39,"line":40},[37,112944,112590],{"class":54},[37,112946,70],{"class":50},[37,112948,112084],{"class":82},[37,112950,6590],{"class":50},[37,112952,112089],{"class":54},[14,112954,112955,112956,112959,112960,112963],{},"计算动作惩罚。",[34,112957,112958],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[34,112961,112962],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[27,112965,112967],{"className":29,"code":112966,"language":31,"meta":32,"style":32},"return float(-dist - control_cost)\n",[34,112968,112969],{"__ignoreMap":32},[37,112970,112971,112973,112975,112977,112979,112981,112983],{"class":39,"line":40},[37,112972,17118],{"class":50},[37,112974,109844],{"class":82},[37,112976,208],{"class":54},[37,112978,112],{"class":50},[37,112980,111643],{"class":54},[37,112982,112],{"class":50},[37,112984,112106],{"class":54},[14,112986,112987],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[27,112989,112990],{"className":29,"code":110850,"language":31,"meta":32,"style":32},[34,112991,112992],{"__ignoreMap":32},[37,112993,112994,112996,112998],{"class":39,"line":40},[37,112995,110857],{"class":54},[37,112997,70],{"class":50},[37,112999,104808],{"class":82},[14,113001,113002],{},"累计奖励变量，记录整个运行过程的总分。",[27,113004,113006],{"className":29,"code":113005,"language":31,"meta":32,"style":32},"for step in range(500):\n",[34,113007,113008],{"__ignoreMap":32},[37,113009,113010,113012,113014,113016,113018,113020,113022],{"class":39,"line":40},[37,113011,3097],{"class":50},[37,113013,31686],{"class":54},[37,113015,26116],{"class":50},[37,113017,32512],{"class":82},[37,113019,208],{"class":54},[37,113021,65142],{"class":82},[37,113023,30856],{"class":54},[14,113025,113026],{},"运行 500 个控制步。",[27,113028,113029],{"className":29,"code":104590,"language":31,"meta":32,"style":32},[34,113030,113031],{"__ignoreMap":32},[37,113032,113033],{"class":39,"line":40},[37,113034,104590],{"class":54},[14,113036,113037,113038,101065,113040,113042],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[34,113039,103278],{},[34,113041,103281],{}," 是当前状态下的坐标。",[27,113044,113046],{"className":29,"code":113045,"language":31,"meta":32,"style":32},"error = target - tip\n",[34,113047,113048],{"__ignoreMap":32},[37,113049,113050,113052,113054,113056,113058],{"class":39,"line":40},[37,113051,112643],{"class":54},[37,113053,70],{"class":50},[37,113055,112215],{"class":54},[37,113057,112],{"class":50},[37,113059,112220],{"class":54},[14,113061,113062],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[27,113064,113066],{"className":29,"code":113065,"language":31,"meta":32,"style":32},"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",[34,113067,113068,113100],{"__ignoreMap":32},[37,113069,113070,113072,113074,113076,113078,113080,113082,113084,113086,113088,113090,113092,113094,113096,113098],{"class":39,"line":40},[37,113071,105918],{"class":54},[37,113073,396],{"class":82},[37,113075,4515],{"class":54},[37,113077,70],{"class":50},[37,113079,112237],{"class":54},[37,113081,105307],{"class":82},[37,113083,6590],{"class":50},[37,113085,112244],{"class":54},[37,113087,282],{"class":82},[37,113089,112249],{"class":54},[37,113091,112],{"class":50},[37,113093,102450],{"class":82},[37,113095,12507],{"class":54},[37,113097,102450],{"class":82},[37,113099,214],{"class":54},[37,113101,113102,113104,113106,113108,113110,113112,113114,113116,113118,113120,113122,113124,113126,113128,113130],{"class":39,"line":47},[37,113103,105918],{"class":54},[37,113105,422],{"class":82},[37,113107,4515],{"class":54},[37,113109,70],{"class":50},[37,113111,112237],{"class":54},[37,113113,105307],{"class":82},[37,113115,6590],{"class":50},[37,113117,112244],{"class":54},[37,113119,396],{"class":82},[37,113121,112249],{"class":54},[37,113123,112],{"class":50},[37,113125,102450],{"class":82},[37,113127,12507],{"class":54},[37,113129,102450],{"class":82},[37,113131,214],{"class":54},[14,113133,113134,113135,113138],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[34,113136,113137],{},"error -> ctrl -> step"," 的流程。",[27,113140,113141],{"className":29,"code":104552,"language":31,"meta":32,"style":32},[34,113142,113143],{"__ignoreMap":32},[37,113144,113145],{"class":39,"line":40},[37,113146,104552],{"class":54},[14,113148,113149],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[27,113151,113153],{"className":29,"code":113152,"language":31,"meta":32,"style":32},"obs = get_obs(model, data)\n",[34,113154,113155],{"__ignoreMap":32},[37,113156,113157,113159,113161],{"class":39,"line":40},[37,113158,110901],{"class":54},[37,113160,70],{"class":50},[37,113162,112338],{"class":54},[14,113164,113165,113166,113169],{},"读取最新观测。后面打印 ",[34,113167,113168],{},"obs.shape[0]","，用来确认观测维度是 10。",[146,113171,102363],{"id":102362},[14,113173,113174],{},"观测维度为:",[27,113176,113179],{"className":113177,"code":113178,"language":5259,"meta":32},[5257],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[34,113180,113178],{"__ignoreMap":32},[14,113182,113183],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113185,113186],{},"程序每 100 步打印：",[27,113188,113191],{"className":113189,"code":113190,"language":5259,"meta":32},[5257],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[34,113192,113190],{"__ignoreMap":32},[14,113194,113195,113196,113198],{},"如果控制有效，你应该看到最终 ",[34,113197,103278],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[146,113200,102395],{"id":102394},[158,113202,113203,113206,113209,113215,113221,113228,113238],{},[161,113204,113205],{},"修改目标点位置。",[161,113207,113208],{},"重新运行，观察最终 tip 是否变化。",[161,113210,113211,113212,113214],{},"把 gravity 改成 ",[34,113213,102636],{},"，观察控制是否变差。",[161,113216,111228,113217,111232,113219,28458],{},[34,113218,102205],{},[34,113220,282],{},[161,113222,102458,113223,102461,113225,113227],{},[34,113224,110643],{},[34,113226,107354],{},"，观察机械臂是否更难移动。",[161,113229,102458,113230,82598,113232,102461,113234,113237],{},[34,113231,103281],{},[34,113233,104193],{},[34,113235,113236],{},"0.2 0 0.6","，观察 reward 和 final tip。",[161,113239,113240],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[146,113242,102500],{"id":102499},[175,113244,113246],{"id":113245},"site-not-found",[34,113247,113248],{},"site not found",[14,113250,113251,113252,101065,113255,28458],{},"检查 XML 中是否有 ",[34,113253,113254],{},"site name=\"tip\"",[34,113256,113257],{},"site name=\"target\"",[175,113259,113260],{"id":113260},"机械臂完全不动",[14,113262,102570],{},[158,113264,113265,113270,113273,113278],{},[161,113266,113267,113269],{},[34,113268,102205],{}," 是否为 2",[161,113271,113272],{},"actuator 是否引用正确 joint",[161,113274,113275,113277],{},[34,113276,101123],{}," 是否被赋值",[161,113279,113280,113281],{},"是否执行了 ",[34,113282,100732],{},[175,113284,113285],{"id":113285},"控制效果不好",[14,113287,113288],{},"正常。本章重点不是控制器最优，而是任务结构:",[27,113290,113293],{"className":113291,"code":113292,"language":5259,"meta":32},[5257],"obs → action → mj_step → reward → next_obs\n",[34,113294,113292],{"__ignoreMap":32},[175,113296,113298],{"id":113297},"tip-坐标不变化","tip 坐标不变化",[14,113300,102622],{},[158,113302,113303,113308,113316,113325],{},[161,113304,113305,113306,28458],{},"是否每步调用了 ",[34,113307,100732],{},[161,113309,113310,113311,101065,113313,28458],{},"是否写入了 ",[34,113312,106173],{},[34,113314,113315],{},"data.ctrl[1]",[161,113317,113318,113319,417,113322,28458],{},"actuator 是否正确引用 ",[34,113320,113321],{},"joint1",[34,113323,113324],{},"joint2",[161,113326,113327],{},"控制输入是否太小。",[175,113329,113330],{"id":113330},"目标点不会动",[14,113332,113333],{},"本章的 target 是固定 site：",[27,113335,113337],{"className":53135,"code":113336,"language":53137,"meta":32,"style":32},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[34,113338,113339],{"__ignoreMap":32},[37,113340,113341,113343,113345,113347,113349,113351,113353,113355,113358],{"class":39,"line":40},[37,113342,1113],{"class":54},[37,113344,103257],{"class":51368},[37,113346,14992],{"class":2035},[37,113348,70],{"class":54},[37,113350,112006],{"class":309},[37,113352,101153],{"class":2035},[37,113354,70],{"class":54},[37,113356,113357],{"class":309},"\"0.5 0 0.4\"",[37,113359,113360],{"class":54}," ...\u002F>\n",[14,113362,113363,113364,113366],{},"它直接挂在 ",[34,113365,101888],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[175,113368,113369],{"id":113369},"机械臂不像真实机械臂",[14,113371,113372],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[146,113374,102654],{"id":102653},[14,113376,113377],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113379,113380],{},"核心公式：",[27,113382,113385],{"className":113383,"code":113384,"language":5259,"meta":32},[5257],"distance = ||tip - target||\nreward = -distance - action_cost\n",[34,113386,113384],{"__ignoreMap":32},[14,113388,113389],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[123,113391,113392],{},"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":32,"searchDepth":47,"depth":47,"links":113394},[113395,113396,113397,113402,113406,113407,113408,113416],{"id":100693,"depth":47,"text":100694},{"id":100816,"depth":47,"text":100817},{"id":101091,"depth":47,"text":101092,"children":113398},[113399,113400,113401],{"id":111598,"depth":58,"text":111599},{"id":111674,"depth":58,"text":111674},{"id":111704,"depth":58,"text":111705},{"id":101299,"depth":47,"text":101300,"children":113403},[113404,113405],{"id":101619,"depth":58,"text":101619},{"id":101755,"depth":58,"text":101755},{"id":102362,"depth":47,"text":102363},{"id":102394,"depth":47,"text":102395},{"id":102499,"depth":47,"text":102500,"children":113409},[113410,113411,113412,113413,113414,113415],{"id":113245,"depth":58,"text":113248},{"id":113260,"depth":58,"text":113260},{"id":113285,"depth":58,"text":113285},{"id":113297,"depth":58,"text":113298},{"id":113330,"depth":58,"text":113330},{"id":113369,"depth":58,"text":113369},{"id":102653,"depth":47,"text":102654},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111402,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113423,"title":113424,"body":113425,"description":32,"extension":129,"meta":116887,"navigation":131,"path":116888,"seo":116889,"stem":116890,"__hash__":116891},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113426,"toc":116858},[113427,113430,113432,113435,113438,113463,113466,113472,113475,113481,113483,113485,113509,113511,113529,113531,113574,113576,113603,113605,113608,113660,113663,113669,113678,113681,113719,113722,113761,113764,113772,113779,113782,113788,113790,113844,113851,113896,113899,113903,113919,113929,113931,115192,115194,115206,115208,115219,115221,115224,115245,115248,115251,115284,115290,115293,115326,115329,115332,115373,115378,115392,115395,115408,115413,115436,115438,115453,115463,115478,115485,115505,115520,115538,115541,115558,115566,115582,115588,115620,115633,115665,115675,115710,115724,115770,115784,115826,115837,115850,115856,115889,115892,115919,115929,115969,115979,115996,116003,116021,116024,116065,116078,116093,116096,116119,116122,116134,116137,116156,116161,116182,116185,116200,116203,116237,116249,116264,116267,116292,116295,116314,116317,116349,116352,116376,116382,116412,116419,116432,116435,116437,116439,116445,116448,116451,116463,116466,116468,116522,116524,116528,116534,116543,116546,116553,116555,116578,116581,116585,116587,116605,116611,116613,116646,116649,116655,116659,116662,116682,116687,116691,116698,116718,116723,116727,116730,116750,116753,116839,116843,116846,116852,116855],[10,113428,113424],{"id":113429},"_8gymnasium-风格强化学习接口基础",[146,113431,100694],{"id":100693},[14,113433,113434],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,113436,113437],{},"你将实现:",[27,113439,113441],{"className":29,"code":113440,"language":31,"meta":32,"style":32},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[34,113442,113443,113453],{"__ignoreMap":32},[37,113444,113445,113448,113450],{"class":39,"line":40},[37,113446,113447],{"class":54},"obs, info ",[37,113449,70],{"class":50},[37,113451,113452],{"class":54}," env.reset()\n",[37,113454,113455,113458,113460],{"class":39,"line":47},[37,113456,113457],{"class":54},"obs, reward, terminated, truncated, info ",[37,113459,70],{"class":50},[37,113461,113462],{"class":54}," env.step(action)\n",[14,113464,113465],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,113467,113468,113469,113471],{},"前面章节的代码都是“脚本式”的：在 ",[34,113470,102342],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,113473,113474],{},"可以先记住 Gymnasium 环境的核心交互：",[27,113476,113479],{"className":113477,"code":113478,"language":5259,"meta":32},[5257],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[34,113480,113478],{"__ignoreMap":32},[146,113482,100817],{"id":100816},[14,113484,100820],{},[27,113486,113487],{"className":23894,"code":104435,"language":23896,"meta":32,"style":32},[34,113488,113489],{"__ignoreMap":32},[37,113490,113491,113493,113495,113497,113499,113501,113503,113505,113507],{"class":39,"line":40},[37,113492,24649],{"class":2035},[37,113494,26388],{"class":309},[37,113496,23906],{"class":309},[37,113498,26473],{"class":82},[37,113500,104450],{"class":309},[37,113502,100845],{"class":309},[37,113504,102548],{"class":309},[37,113506,100861],{"class":309},[37,113508,104459],{"class":309},[14,113510,102866],{},[27,113512,113514],{"className":23894,"code":113513,"language":23896,"meta":32,"style":32},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[34,113515,113516],{"__ignoreMap":32},[37,113517,113518,113520,113522,113524,113526],{"class":39,"line":40},[37,113519,23903],{"class":2035},[37,113521,23906],{"class":309},[37,113523,100977],{"class":309},[37,113525,107758],{"class":309},[37,113527,113528],{"class":309}," gymnasium\n",[14,113530,102883],{},[27,113532,113534],{"className":23894,"code":113533,"language":23896,"meta":32,"style":32},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[34,113535,113536,113553,113562],{"__ignoreMap":32},[37,113537,113538,113540,113542,113544,113547,113549,113551],{"class":39,"line":40},[37,113539,30403],{"class":2035},[37,113541,29249],{"class":309},[37,113543,25188],{"class":82},[37,113545,113546],{"class":309}," mujoco-gym-api",[37,113548,101022],{"class":309},[37,113550,101025],{"class":82},[37,113552,101028],{"class":82},[37,113554,113555,113557,113559],{"class":39,"line":47},[37,113556,30403],{"class":2035},[37,113558,101035],{"class":309},[37,113560,113561],{"class":309}," mujoco-gym-api\n",[37,113563,113564,113566,113568,113570,113572],{"class":39,"line":58},[37,113565,23903],{"class":2035},[37,113567,23906],{"class":309},[37,113569,100977],{"class":309},[37,113571,107758],{"class":309},[37,113573,113528],{"class":309},[14,113575,101051],{},[158,113577,113578,113588,113591,113597],{},[161,113579,113580,113581,113584,113585,28458],{},"本章使用 ",[34,113582,113583],{},"gymnasium","，不是旧版 ",[34,113586,113587],{},"gym",[161,113589,113590],{},"Gymnasium API 与旧 Gym API 有差异。",[161,113592,113593,113594,28458],{},"旧 Gym 常见返回值是 4 个: ",[34,113595,113596],{},"obs, reward, done, info",[161,113598,113599,113600,28458],{},"Gymnasium 返回值是 5 个: ",[34,113601,113602],{},"obs, reward, terminated, truncated, info",[146,113604,101092],{"id":101091},[14,113606,113607],{},"强化学习环境接口包含:",[342,113609,113610,113619],{},[345,113611,113612],{},[348,113613,113614,113617],{},[351,113615,113616],{"align":23808},"方法",[351,113618,102743],{"align":23808},[389,113620,113621,113631,113641,113651],{},[348,113622,113623,113628],{},[394,113624,113625],{"align":23808},[34,113626,113627],{},"reset()",[394,113629,113630],{"align":23808},"重置环境",[348,113632,113633,113638],{},[394,113634,113635],{"align":23808},[34,113636,113637],{},"step(action)",[394,113639,113640],{"align":23808},"执行动作",[348,113642,113643,113648],{},[394,113644,113645],{"align":23808},[34,113646,113647],{},"observation_space",[394,113649,113650],{"align":23808},"观测空间",[348,113652,113653,113658],{},[394,113654,113655],{"align":23808},[34,113656,113657],{},"action_space",[394,113659,23726],{"align":23808},[14,113661,113662],{},"一个最小环境需要完成:",[27,113664,113667],{"className":113665,"code":113666,"language":5259,"meta":32},[5257],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[34,113668,113666],{"__ignoreMap":32},[175,113670,113672,101065,113675,104685],{"id":113671},"terminated-和-truncated-的区别",[34,113673,113674],{},"terminated",[34,113676,113677],{},"truncated",[14,113679,113680],{},"Gymnasium 把“结束”拆成两个概念：",[342,113682,113683,113693],{},[345,113684,113685],{},[348,113686,113687,113689,113691],{},[351,113688,104621],{"align":23808},[351,113690,100747],{"align":23808},[351,113692,21259],{"align":23808},[389,113694,113695,113707],{},[348,113696,113697,113701,113704],{},[394,113698,113699],{"align":23808},[34,113700,113674],{},[394,113702,113703],{"align":23808},"任务自然结束",[394,113705,113706],{"align":23808},"机械臂到达目标、机器人摔倒",[348,113708,113709,113713,113716],{},[394,113710,113711],{"align":23808},[34,113712,113677],{},[394,113714,113715],{"align":23808},"因外部限制截断",[394,113717,113718],{"align":23808},"达到最大步数、时间限制",[14,113720,113721],{},"本章中：",[27,113723,113725],{"className":29,"code":113724,"language":31,"meta":32,"style":32},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[34,113726,113727,113742],{"__ignoreMap":32},[37,113728,113729,113732,113734,113737,113739],{"class":39,"line":40},[37,113730,113731],{"class":54},"terminated ",[37,113733,70],{"class":50},[37,113735,113736],{"class":54}," dist ",[37,113738,1113],{"class":50},[37,113740,113741],{"class":82}," 0.05\n",[37,113743,113744,113747,113749,113751,113754,113756,113758],{"class":39,"line":47},[37,113745,113746],{"class":54},"truncated ",[37,113748,70],{"class":50},[37,113750,38942],{"class":82},[37,113752,113753],{"class":54},".steps ",[37,113755,1782],{"class":50},[37,113757,38942],{"class":82},[37,113759,113760],{"class":54},".max_steps\n",[14,113762,113763],{},"也就是：",[158,113765,113766,113769],{},[161,113767,113768],{},"末端距离目标小于 0.05，任务成功结束。",[161,113770,113771],{},"步数超过上限，episode 被截断。",[175,113773,113775,101065,113777],{"id":113774},"observation_space-和-action_space",[34,113776,113647],{},[34,113778,113657],{},[14,113780,113781],{},"这两个对象告诉算法：",[27,113783,113786],{"className":113784,"code":113785,"language":5259,"meta":32},[5257],"观测长什么样\n动作允许多大\n",[34,113787,113785],{"__ignoreMap":32},[14,113789,14705],{},[27,113791,113793],{"className":29,"code":113792,"language":31,"meta":32,"style":32},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[34,113794,113795],{"__ignoreMap":32},[37,113796,113797,113799,113802,113804,113807,113810,113813,113815,113817,113820,113822,113824,113826,113828,113830,113832,113834,113837,113839,113841],{"class":39,"line":40},[37,113798,30893],{"class":82},[37,113800,113801],{"class":54},".action_space ",[37,113803,70],{"class":50},[37,113805,113806],{"class":54}," spaces.Box(",[37,113808,113809],{"class":5288},"low",[37,113811,113812],{"class":50},"=-",[37,113814,102450],{"class":82},[37,113816,12507],{"class":54},[37,113818,113819],{"class":5288},"high",[37,113821,70],{"class":50},[37,113823,102450],{"class":82},[37,113825,12507],{"class":54},[37,113827,96010],{"class":5288},[37,113829,70],{"class":50},[37,113831,208],{"class":54},[37,113833,282],{"class":82},[37,113835,113836],{"class":54},",), ",[37,113838,93568],{"class":5288},[37,113840,70],{"class":50},[37,113842,113843],{"class":54},"np.float32)\n",[14,113845,113846,113847,113850],{},"表示动作是 2 维数组，每个值都在 ",[34,113848,113849],{},"[-1, 1]"," 范围内。",[27,113852,113854],{"className":29,"code":113853,"language":31,"meta":32,"style":32},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[34,113855,113856],{"__ignoreMap":32},[37,113857,113858,113860,113863,113865,113867,113869,113871,113874,113876,113878,113880,113882,113884,113886,113888,113890,113892,113894],{"class":39,"line":40},[37,113859,30893],{"class":82},[37,113861,113862],{"class":54},".observation_space ",[37,113864,70],{"class":50},[37,113866,113806],{"class":54},[37,113868,113809],{"class":5288},[37,113870,113812],{"class":50},[37,113872,113873],{"class":54},"np.inf, ",[37,113875,113819],{"class":5288},[37,113877,70],{"class":50},[37,113879,113873],{"class":54},[37,113881,96010],{"class":5288},[37,113883,70],{"class":50},[37,113885,208],{"class":54},[37,113887,650],{"class":82},[37,113889,113836],{"class":54},[37,113891,93568],{"class":5288},[37,113893,70],{"class":50},[37,113895,113843],{"class":54},[14,113897,113898],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[175,113900,113902],{"id":113901},"frame_skip-是什么","frame_skip 是什么",[27,113904,113906],{"className":29,"code":113905,"language":31,"meta":32,"style":32},"self.frame_skip = 5\n",[34,113907,113908],{"__ignoreMap":32},[37,113909,113910,113912,113915,113917],{"class":39,"line":40},[37,113911,30893],{"class":82},[37,113913,113914],{"class":54},".frame_skip ",[37,113916,70],{"class":50},[37,113918,54495],{"class":82},[14,113920,113921,113922,113925,113926,113928],{},"表示外部调用一次 ",[34,113923,113924],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[34,113927,101262],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[146,113930,101300],{"id":101299},[27,113932,113934],{"className":29,"code":113933,"language":31,"meta":32,"style":32},"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",[34,113935,113936,113948,113954,113964,113975,113979,113983,113991,113996,114000,114004,114008,114012,114016,114020,114024,114029,114033,114037,114041,114046,114050,114054,114058,114062,114066,114070,114074,114078,114082,114086,114090,114094,114098,114116,114131,114135,114148,114158,114173,114190,114194,114215,114234,114259,114273,114277,114287,114299,114309,114313,114355,114393,114397,114407,114423,114438,114457,114464,114468,114481,114496,114511,114524,114543,114559,114563,114604,114619,114634,114638,114677,114688,114701,114705,114715,114724,114728,114738,114753,114771,114775,114786,114803,114816,114820,114830,114834,114845,114856,114860,114874,114888,114904,114908,114921,114938,114953,114960,114964,114968,114980,114990,115008,115020,115032,115036,115044,115060,115069,115078,115086,115128,115141,115146,115150,115168,115172,115176,115188],{"__ignoreMap":32},[37,113937,113938,113940,113943,113945],{"class":39,"line":40},[37,113939,51],{"class":50},[37,113941,113942],{"class":54}," gymnasium ",[37,113944,31453],{"class":50},[37,113946,113947],{"class":54}," gym\n",[37,113949,113950,113952],{"class":39,"line":47},[37,113951,51],{"class":50},[37,113953,101348],{"class":54},[37,113955,113956,113958,113960,113962],{"class":39,"line":58},[37,113957,51],{"class":50},[37,113959,31450],{"class":54},[37,113961,31453],{"class":50},[37,113963,31456],{"class":54},[37,113965,113966,113968,113970,113972],{"class":39,"line":64},[37,113967,30807],{"class":50},[37,113969,113942],{"class":54},[37,113971,51],{"class":50},[37,113973,113974],{"class":54}," spaces\n",[37,113976,113977],{"class":39,"line":76},[37,113978,2472],{"emptyLinePlaceholder":131},[37,113980,113981],{"class":39,"line":92},[37,113982,2472],{"emptyLinePlaceholder":131},[37,113984,113985,113987,113989],{"class":39,"line":97},[37,113986,101361],{"class":82},[37,113988,13636],{"class":50},[37,113990,101366],{"class":309},[37,113992,113993],{"class":39,"line":107},[37,113994,113995],{"class":309},"\u003Cmujoco model=\"gym_reacher\">\n",[37,113997,113998],{"class":39,"line":1390},[37,113999,111785],{"class":309},[37,114001,114002],{"class":39,"line":1402},[37,114003,2472],{"emptyLinePlaceholder":131},[37,114005,114006],{"class":39,"line":1684},[37,114007,101385],{"class":309},[37,114009,114010],{"class":39,"line":1689},[37,114011,111803],{"class":309},[37,114013,114014],{"class":39,"line":1695},[37,114015,2472],{"emptyLinePlaceholder":131},[37,114017,114018],{"class":39,"line":1700},[37,114019,111812],{"class":309},[37,114021,114022],{"class":39,"line":1714},[37,114023,111817],{"class":309},[37,114025,114026],{"class":39,"line":1719},[37,114027,114028],{"class":309},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[37,114030,114031],{"class":39,"line":1725},[37,114032,2472],{"emptyLinePlaceholder":131},[37,114034,114035],{"class":39,"line":1746},[37,114036,111831],{"class":309},[37,114038,114039],{"class":39,"line":1751},[37,114040,111836],{"class":309},[37,114042,114043],{"class":39,"line":1765},[37,114044,114045],{"class":309},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[37,114047,114048],{"class":39,"line":1770},[37,114049,111846],{"class":309},[37,114051,114052],{"class":39,"line":1799},[37,114053,106485],{"class":309},[37,114055,114056],{"class":39,"line":1804},[37,114057,101414],{"class":309},[37,114059,114060],{"class":39,"line":1821},[37,114061,101419],{"class":309},[37,114063,114064],{"class":39,"line":1826},[37,114065,2472],{"emptyLinePlaceholder":131},[37,114067,114068],{"class":39,"line":1831},[37,114069,106502],{"class":309},[37,114071,114072],{"class":39,"line":1836},[37,114073,111871],{"class":309},[37,114075,114076],{"class":39,"line":1850},[37,114077,111876],{"class":309},[37,114079,114080],{"class":39,"line":1855},[37,114081,106512],{"class":309},[37,114083,114084],{"class":39,"line":2649},[37,114085,101424],{"class":309},[37,114087,114088],{"class":39,"line":2663},[37,114089,95745],{"class":309},[37,114091,114092],{"class":39,"line":2671},[37,114093,2472],{"emptyLinePlaceholder":131},[37,114095,114096],{"class":39,"line":2676},[37,114097,2472],{"emptyLinePlaceholder":131},[37,114099,114100,114102,114105,114107,114109,114111,114114],{"class":39,"line":2682},[37,114101,14766],{"class":50},[37,114103,114104],{"class":2035}," ReacherEnv",[37,114106,208],{"class":54},[37,114108,113587],{"class":2035},[37,114110,761],{"class":54},[37,114112,114113],{"class":2035},"Env",[37,114115,30856],{"class":54},[37,114117,114118,114121,114123,114125,114128],{"class":39,"line":2688},[37,114119,114120],{"class":54},"    metadata ",[37,114122,70],{"class":50},[37,114124,4520],{"class":54},[37,114126,114127],{"class":309},"\"render_modes\"",[37,114129,114130],{"class":54},": []}\n",[37,114132,114133],{"class":39,"line":2693},[37,114134,2472],{"emptyLinePlaceholder":131},[37,114136,114137,114139,114141,114144,114146],{"class":39,"line":8020},[37,114138,30871],{"class":50},[37,114140,30874],{"class":82},[37,114142,114143],{"class":54},"(self) -> ",[37,114145,95733],{"class":82},[37,114147,3811],{"class":54},[37,114149,114150,114152,114154,114156],{"class":39,"line":8044},[37,114151,30887],{"class":82},[37,114153,17333],{"class":54},[37,114155,30899],{"class":82},[37,114157,2048],{"class":54},[37,114159,114160,114162,114165,114167,114169,114171],{"class":39,"line":8049},[37,114161,30915],{"class":82},[37,114163,114164],{"class":54},".model ",[37,114166,70],{"class":50},[37,114168,101459],{"class":54},[37,114170,101361],{"class":82},[37,114172,214],{"class":54},[37,114174,114175,114177,114180,114182,114185,114187],{"class":39,"line":8055},[37,114176,30915],{"class":82},[37,114178,114179],{"class":54},".data ",[37,114181,70],{"class":50},[37,114183,114184],{"class":54}," mujoco.MjData(",[37,114186,30893],{"class":82},[37,114188,114189],{"class":54},".model)\n",[37,114191,114192],{"class":39,"line":8082},[37,114193,2472],{"emptyLinePlaceholder":131},[37,114195,114196,114198,114201,114203,114206,114208,114211,114213],{"class":39,"line":8087},[37,114197,30915],{"class":82},[37,114199,114200],{"class":54},".tip_site_id ",[37,114202,70],{"class":50},[37,114204,114205],{"class":54}," mujoco.mj_name2id(",[37,114207,30893],{"class":82},[37,114209,114210],{"class":54},".model, mujoco.mjtObj.mjOBJ_SITE, ",[37,114212,111583],{"class":309},[37,114214,214],{"class":54},[37,114216,114217,114219,114222,114224,114226,114228,114230,114232],{"class":39,"line":8093},[37,114218,30915],{"class":82},[37,114220,114221],{"class":54},".target_site_id ",[37,114223,70],{"class":50},[37,114225,114205],{"class":54},[37,114227,30893],{"class":82},[37,114229,114210],{"class":54},[37,114231,112006],{"class":309},[37,114233,214],{"class":54},[37,114235,114236,114238,114240,114242,114244,114246,114249,114251,114253,114255,114257],{"class":39,"line":8105},[37,114237,2569],{"class":50},[37,114239,38942],{"class":82},[37,114241,114200],{"class":54},[37,114243,1113],{"class":50},[37,114245,4165],{"class":82},[37,114247,114248],{"class":50}," or",[37,114250,38942],{"class":82},[37,114252,114221],{"class":54},[37,114254,1113],{"class":50},[37,114256,4165],{"class":82},[37,114258,3811],{"class":54},[37,114260,114261,114264,114266,114268,114271],{"class":39,"line":8117},[37,114262,114263],{"class":50},"            raise",[37,114265,103482],{"class":82},[37,114267,208],{"class":54},[37,114269,114270],{"class":309},"\"required sites not found\"",[37,114272,214],{"class":54},[37,114274,114275],{"class":39,"line":8129},[37,114276,2472],{"emptyLinePlaceholder":131},[37,114278,114279,114281,114283,114285],{"class":39,"line":9788},[37,114280,30915],{"class":82},[37,114282,113914],{"class":54},[37,114284,70],{"class":50},[37,114286,54495],{"class":82},[37,114288,114289,114291,114294,114296],{"class":39,"line":9813},[37,114290,30915],{"class":82},[37,114292,114293],{"class":54},".max_steps ",[37,114295,70],{"class":50},[37,114297,114298],{"class":82}," 200\n",[37,114300,114301,114303,114305,114307],{"class":39,"line":9836},[37,114302,30915],{"class":82},[37,114304,113753],{"class":54},[37,114306,70],{"class":50},[37,114308,47401],{"class":82},[37,114310,114311],{"class":39,"line":9860},[37,114312,2472],{"emptyLinePlaceholder":131},[37,114314,114315,114317,114319,114321,114323,114325,114327,114329,114331,114333,114335,114337,114339,114341,114343,114345,114347,114349,114351,114353],{"class":39,"line":9865},[37,114316,30915],{"class":82},[37,114318,113801],{"class":54},[37,114320,70],{"class":50},[37,114322,113806],{"class":54},[37,114324,113809],{"class":5288},[37,114326,113812],{"class":50},[37,114328,102450],{"class":82},[37,114330,12507],{"class":54},[37,114332,113819],{"class":5288},[37,114334,70],{"class":50},[37,114336,102450],{"class":82},[37,114338,12507],{"class":54},[37,114340,96010],{"class":5288},[37,114342,70],{"class":50},[37,114344,208],{"class":54},[37,114346,282],{"class":82},[37,114348,113836],{"class":54},[37,114350,93568],{"class":5288},[37,114352,70],{"class":50},[37,114354,113843],{"class":54},[37,114356,114357,114359,114361,114363,114365,114367,114369,114371,114373,114375,114377,114379,114381,114383,114385,114387,114389,114391],{"class":39,"line":9870},[37,114358,30915],{"class":82},[37,114360,113862],{"class":54},[37,114362,70],{"class":50},[37,114364,113806],{"class":54},[37,114366,113809],{"class":5288},[37,114368,113812],{"class":50},[37,114370,113873],{"class":54},[37,114372,113819],{"class":5288},[37,114374,70],{"class":50},[37,114376,113873],{"class":54},[37,114378,96010],{"class":5288},[37,114380,70],{"class":50},[37,114382,208],{"class":54},[37,114384,650],{"class":82},[37,114386,113836],{"class":54},[37,114388,93568],{"class":5288},[37,114390,70],{"class":50},[37,114392,113843],{"class":54},[37,114394,114395],{"class":39,"line":9875},[37,114396,2472],{"emptyLinePlaceholder":131},[37,114398,114399,114401,114404],{"class":39,"line":9884},[37,114400,30871],{"class":50},[37,114402,114403],{"class":2035}," _get_obs",[37,114405,114406],{"class":54},"(self) -> np.ndarray:\n",[37,114408,114409,114411,114413,114415,114418,114420],{"class":39,"line":9889},[37,114410,112184],{"class":54},[37,114412,70],{"class":50},[37,114414,38942],{"class":82},[37,114416,114417],{"class":54},".data.site_xpos[",[37,114419,30893],{"class":82},[37,114421,114422],{"class":54},".tip_site_id].copy()\n",[37,114424,114425,114427,114429,114431,114433,114435],{"class":39,"line":9895},[37,114426,112197],{"class":54},[37,114428,70],{"class":50},[37,114430,38942],{"class":82},[37,114432,114417],{"class":54},[37,114434,30893],{"class":82},[37,114436,114437],{"class":54},".target_site_id].copy()\n",[37,114439,114440,114442,114444,114447,114449,114452,114454],{"class":39,"line":9916},[37,114441,110229],{"class":54},[37,114443,70],{"class":50},[37,114445,114446],{"class":54}," np.concatenate([",[37,114448,30893],{"class":82},[37,114450,114451],{"class":54},".data.qpos.copy(), ",[37,114453,30893],{"class":82},[37,114455,114456],{"class":54},".data.qvel.copy(), tip, target])\n",[37,114458,114459,114461],{"class":39,"line":9922},[37,114460,14824],{"class":50},[37,114462,114463],{"class":54}," obs.astype(np.float32)\n",[37,114465,114466],{"class":39,"line":9936},[37,114467,2472],{"emptyLinePlaceholder":131},[37,114469,114470,114472,114475,114477,114479],{"class":39,"line":9942},[37,114471,30871],{"class":50},[37,114473,114474],{"class":2035}," _get_reward",[37,114476,114143],{"class":54},[37,114478,247],{"class":82},[37,114480,3811],{"class":54},[37,114482,114483,114485,114487,114489,114491,114493],{"class":39,"line":9969},[37,114484,112184],{"class":54},[37,114486,70],{"class":50},[37,114488,38942],{"class":82},[37,114490,114417],{"class":54},[37,114492,30893],{"class":82},[37,114494,114495],{"class":54},".tip_site_id]\n",[37,114497,114498,114500,114502,114504,114506,114508],{"class":39,"line":9978},[37,114499,112197],{"class":54},[37,114501,70],{"class":50},[37,114503,38942],{"class":82},[37,114505,114417],{"class":54},[37,114507,30893],{"class":82},[37,114509,114510],{"class":54},".target_site_id]\n",[37,114512,114513,114516,114518,114520,114522],{"class":39,"line":9984},[37,114514,114515],{"class":54},"        dist ",[37,114517,70],{"class":50},[37,114519,111648],{"class":54},[37,114521,112],{"class":50},[37,114523,111653],{"class":54},[37,114525,114526,114529,114531,114533,114535,114538,114540],{"class":39,"line":9992},[37,114527,114528],{"class":54},"        control_cost ",[37,114530,70],{"class":50},[37,114532,112084],{"class":82},[37,114534,6590],{"class":50},[37,114536,114537],{"class":54}," np.sum(np.square(",[37,114539,30893],{"class":82},[37,114541,114542],{"class":54},".data.ctrl))\n",[37,114544,114545,114547,114549,114551,114553,114555,114557],{"class":39,"line":9997},[37,114546,14824],{"class":50},[37,114548,109844],{"class":82},[37,114550,208],{"class":54},[37,114552,112],{"class":50},[37,114554,111643],{"class":54},[37,114556,112],{"class":50},[37,114558,112106],{"class":54},[37,114560,114561],{"class":39,"line":16676},[37,114562,2472],{"emptyLinePlaceholder":131},[37,114564,114565,114567,114570,114573,114575,114578,114580,114582,114584,114586,114588,114591,114594,114596,114598,114600,114602],{"class":39,"line":16682},[37,114566,30871],{"class":50},[37,114568,114569],{"class":2035}," reset",[37,114571,114572],{"class":54},"(self, ",[37,114574,659],{"class":50},[37,114576,114577],{"class":54},", seed: ",[37,114579,211],{"class":82},[37,114581,25182],{"class":50},[37,114583,39002],{"class":82},[37,114585,13636],{"class":50},[37,114587,39002],{"class":82},[37,114589,114590],{"class":54},", options: ",[37,114592,114593],{"class":82},"dict",[37,114595,25182],{"class":50},[37,114597,39002],{"class":82},[37,114599,13636],{"class":50},[37,114601,39002],{"class":82},[37,114603,30856],{"class":54},[37,114605,114606,114608,114611,114614,114616],{"class":39,"line":16705},[37,114607,30887],{"class":82},[37,114609,114610],{"class":54},"().reset(",[37,114612,114613],{"class":5288},"seed",[37,114615,70],{"class":50},[37,114617,114618],{"class":54},"seed)\n",[37,114620,114621,114624,114626,114629,114631],{"class":39,"line":16711},[37,114622,114623],{"class":54},"        mujoco.mj_resetData(",[37,114625,30893],{"class":82},[37,114627,114628],{"class":54},".model, ",[37,114630,30893],{"class":82},[37,114632,114633],{"class":54},".data)\n",[37,114635,114636],{"class":39,"line":16734},[37,114637,2472],{"emptyLinePlaceholder":131},[37,114639,114640,114642,114645,114647,114649,114652,114654,114656,114658,114660,114662,114664,114666,114668,114670,114672,114674],{"class":39,"line":16748},[37,114641,30915],{"class":82},[37,114643,114644],{"class":54},".data.qpos[:] ",[37,114646,70],{"class":50},[37,114648,38942],{"class":82},[37,114650,114651],{"class":54},".np_random.uniform(",[37,114653,113809],{"class":5288},[37,114655,113812],{"class":50},[37,114657,86278],{"class":82},[37,114659,12507],{"class":54},[37,114661,113819],{"class":5288},[37,114663,70],{"class":50},[37,114665,86278],{"class":82},[37,114667,12507],{"class":54},[37,114669,31566],{"class":5288},[37,114671,70],{"class":50},[37,114673,30893],{"class":82},[37,114675,114676],{"class":54},".model.nq)\n",[37,114678,114679,114681,114684,114686],{"class":39,"line":16768},[37,114680,30915],{"class":82},[37,114682,114683],{"class":54},".data.qvel[:] ",[37,114685,70],{"class":50},[37,114687,104808],{"class":82},[37,114689,114690,114693,114695,114697,114699],{"class":39,"line":16774},[37,114691,114692],{"class":54},"        mujoco.mj_forward(",[37,114694,30893],{"class":82},[37,114696,114628],{"class":54},[37,114698,30893],{"class":82},[37,114700,114633],{"class":54},[37,114702,114703],{"class":39,"line":16785},[37,114704,2472],{"emptyLinePlaceholder":131},[37,114706,114707,114709,114711,114713],{"class":39,"line":16808},[37,114708,30915],{"class":82},[37,114710,113753],{"class":54},[37,114712,70],{"class":50},[37,114714,47401],{"class":82},[37,114716,114717,114719,114721],{"class":39,"line":16830},[37,114718,14824],{"class":50},[37,114720,38942],{"class":82},[37,114722,114723],{"class":54},"._get_obs(), {}\n",[37,114725,114726],{"class":39,"line":16835},[37,114727,2472],{"emptyLinePlaceholder":131},[37,114729,114730,114732,114735],{"class":39,"line":16841},[37,114731,30871],{"class":50},[37,114733,114734],{"class":2035}," step",[37,114736,114737],{"class":54},"(self, action):\n",[37,114739,114740,114742,114744,114747,114749,114751],{"class":39,"line":16855},[37,114741,110269],{"class":54},[37,114743,70],{"class":50},[37,114745,114746],{"class":54}," np.asarray(action, ",[37,114748,93568],{"class":5288},[37,114750,70],{"class":50},[37,114752,113843],{"class":54},[37,114754,114755,114757,114759,114761,114763,114766,114768],{"class":39,"line":16868},[37,114756,110269],{"class":54},[37,114758,70],{"class":50},[37,114760,107494],{"class":54},[37,114762,30893],{"class":82},[37,114764,114765],{"class":54},".action_space.low, ",[37,114767,30893],{"class":82},[37,114769,114770],{"class":54},".action_space.high)\n",[37,114772,114773],{"class":39,"line":16873},[37,114774,2472],{"emptyLinePlaceholder":131},[37,114776,114777,114779,114782,114784],{"class":39,"line":16887},[37,114778,30915],{"class":82},[37,114780,114781],{"class":54},".data.ctrl[:] ",[37,114783,70],{"class":50},[37,114785,107517],{"class":54},[37,114787,114788,114790,114792,114794,114796,114798,114800],{"class":39,"line":16892},[37,114789,3475],{"class":50},[37,114791,101548],{"class":54},[37,114793,26116],{"class":50},[37,114795,32512],{"class":82},[37,114797,208],{"class":54},[37,114799,30893],{"class":82},[37,114801,114802],{"class":54},".frame_skip):\n",[37,114804,114805,114808,114810,114812,114814],{"class":39,"line":16898},[37,114806,114807],{"class":54},"            mujoco.mj_step(",[37,114809,30893],{"class":82},[37,114811,114628],{"class":54},[37,114813,30893],{"class":82},[37,114815,114633],{"class":54},[37,114817,114818],{"class":39,"line":16903},[37,114819,2472],{"emptyLinePlaceholder":131},[37,114821,114822,114824,114826,114828],{"class":39,"line":16917},[37,114823,30915],{"class":82},[37,114825,113753],{"class":54},[37,114827,9549],{"class":50},[37,114829,55767],{"class":82},[37,114831,114832],{"class":39,"line":16922},[37,114833,2472],{"emptyLinePlaceholder":131},[37,114835,114836,114838,114840,114842],{"class":39,"line":16927},[37,114837,110229],{"class":54},[37,114839,70],{"class":50},[37,114841,38942],{"class":82},[37,114843,114844],{"class":54},"._get_obs()\n",[37,114846,114847,114849,114851,114853],{"class":39,"line":16941},[37,114848,110334],{"class":54},[37,114850,70],{"class":50},[37,114852,38942],{"class":82},[37,114854,114855],{"class":54},"._get_reward()\n",[37,114857,114858],{"class":39,"line":16953},[37,114859,2472],{"emptyLinePlaceholder":131},[37,114861,114862,114864,114866,114868,114870,114872],{"class":39,"line":16958},[37,114863,112184],{"class":54},[37,114865,70],{"class":50},[37,114867,38942],{"class":82},[37,114869,114417],{"class":54},[37,114871,30893],{"class":82},[37,114873,114495],{"class":54},[37,114875,114876,114878,114880,114882,114884,114886],{"class":39,"line":16971},[37,114877,112197],{"class":54},[37,114879,70],{"class":50},[37,114881,38942],{"class":82},[37,114883,114417],{"class":54},[37,114885,30893],{"class":82},[37,114887,114510],{"class":54},[37,114889,114890,114892,114894,114896,114899,114901],{"class":39,"line":16976},[37,114891,114515],{"class":54},[37,114893,70],{"class":50},[37,114895,109844],{"class":82},[37,114897,114898],{"class":54},"(np.linalg.norm(tip ",[37,114900,112],{"class":50},[37,114902,114903],{"class":54}," target))\n",[37,114905,114906],{"class":39,"line":16981},[37,114907,2472],{"emptyLinePlaceholder":131},[37,114909,114910,114913,114915,114917,114919],{"class":39,"line":16986},[37,114911,114912],{"class":54},"        terminated ",[37,114914,70],{"class":50},[37,114916,113736],{"class":54},[37,114918,1113],{"class":50},[37,114920,113741],{"class":82},[37,114922,114923,114926,114928,114930,114932,114934,114936],{"class":39,"line":16999},[37,114924,114925],{"class":54},"        truncated ",[37,114927,70],{"class":50},[37,114929,38942],{"class":82},[37,114931,113753],{"class":54},[37,114933,1782],{"class":50},[37,114935,38942],{"class":82},[37,114937,113760],{"class":54},[37,114939,114940,114943,114945,114947,114950],{"class":39,"line":17004},[37,114941,114942],{"class":54},"        info ",[37,114944,70],{"class":50},[37,114946,4520],{"class":54},[37,114948,114949],{"class":309},"\"distance\"",[37,114951,114952],{"class":54},": dist}\n",[37,114954,114955,114957],{"class":39,"line":32702},[37,114956,14824],{"class":50},[37,114958,114959],{"class":54}," obs, reward, terminated, truncated, info\n",[37,114961,114962],{"class":39,"line":32708},[37,114963,2472],{"emptyLinePlaceholder":131},[37,114965,114966],{"class":39,"line":32714},[37,114967,2472],{"emptyLinePlaceholder":131},[37,114969,114970,114972,114974,114976,114978],{"class":39,"line":32720},[37,114971,32017],{"class":50},[37,114973,2045],{"class":2035},[37,114975,101445],{"class":54},[37,114977,95733],{"class":82},[37,114979,3811],{"class":54},[37,114981,114982,114985,114987],{"class":39,"line":32726},[37,114983,114984],{"class":54},"    env ",[37,114986,70],{"class":50},[37,114988,114989],{"class":54}," ReacherEnv()\n",[37,114991,114992,114995,114997,115000,115002,115004,115006],{"class":39,"line":32737},[37,114993,114994],{"class":54},"    obs, info ",[37,114996,70],{"class":50},[37,114998,114999],{"class":54}," env.reset(",[37,115001,114613],{"class":5288},[37,115003,70],{"class":50},[37,115005,396],{"class":82},[37,115007,214],{"class":54},[37,115009,115010,115012,115014,115017],{"class":39,"line":32743},[37,115011,31369],{"class":82},[37,115013,208],{"class":54},[37,115015,115016],{"class":309},"\"initial obs shape:\"",[37,115018,115019],{"class":54},", obs.shape)\n",[37,115021,115022,115024,115026,115029],{"class":39,"line":32763},[37,115023,31369],{"class":82},[37,115025,208],{"class":54},[37,115027,115028],{"class":309},"\"initial info:\"",[37,115030,115031],{"class":54},", info)\n",[37,115033,115034],{"class":39,"line":32769},[37,115035,2472],{"emptyLinePlaceholder":131},[37,115037,115038,115040,115042],{"class":39,"line":32780},[37,115039,110200],{"class":54},[37,115041,70],{"class":50},[37,115043,104808],{"class":82},[37,115045,115046,115048,115050,115052,115054,115056,115058],{"class":39,"line":32786},[37,115047,3273],{"class":50},[37,115049,31686],{"class":54},[37,115051,26116],{"class":50},[37,115053,32512],{"class":82},[37,115055,208],{"class":54},[37,115057,903],{"class":82},[37,115059,30856],{"class":54},[37,115061,115062,115064,115066],{"class":39,"line":32792},[37,115063,110269],{"class":54},[37,115065,70],{"class":50},[37,115067,115068],{"class":54}," env.action_space.sample()\n",[37,115070,115071,115074,115076],{"class":39,"line":32798},[37,115072,115073],{"class":54},"        obs, reward, terminated, truncated, info ",[37,115075,70],{"class":50},[37,115077,113462],{"class":54},[37,115079,115080,115082,115084],{"class":39,"line":32804},[37,115081,110344],{"class":54},[37,115083,9549],{"class":50},[37,115085,110349],{"class":54},[37,115087,115088,115090,115092,115094,115096,115099,115101,115103,115106,115108,115110,115113,115115,115117,115120,115122,115124,115126],{"class":39,"line":32810},[37,115089,32520],{"class":82},[37,115091,208],{"class":54},[37,115093,110378],{"class":309},[37,115095,110381],{"class":54},[37,115097,115098],{"class":309},"\"reward:\"",[37,115100,12507],{"class":54},[37,115102,32088],{"class":82},[37,115104,115105],{"class":54},"(reward, ",[37,115107,276],{"class":82},[37,115109,110392],{"class":54},[37,115111,115112],{"class":309},"\"distance:\"",[37,115114,12507],{"class":54},[37,115116,32088],{"class":82},[37,115118,115119],{"class":54},"(info[",[37,115121,114949],{"class":309},[37,115123,112249],{"class":54},[37,115125,276],{"class":82},[37,115127,30567],{"class":54},[37,115129,115130,115132,115135,115138],{"class":39,"line":32816},[37,115131,2569],{"class":50},[37,115133,115134],{"class":54}," terminated ",[37,115136,115137],{"class":50},"or",[37,115139,115140],{"class":54}," truncated:\n",[37,115142,115143],{"class":39,"line":32822},[37,115144,115145],{"class":50},"            break\n",[37,115147,115148],{"class":39,"line":32842},[37,115149,2472],{"emptyLinePlaceholder":131},[37,115151,115152,115154,115156,115158,115160,115162,115164,115166],{"class":39,"line":32848},[37,115153,31369],{"class":82},[37,115155,208],{"class":54},[37,115157,110423],{"class":309},[37,115159,12507],{"class":54},[37,115161,32088],{"class":82},[37,115163,110430],{"class":54},[37,115165,276],{"class":82},[37,115167,30567],{"class":54},[37,115169,115170],{"class":39,"line":32864},[37,115171,2472],{"emptyLinePlaceholder":131},[37,115173,115174],{"class":39,"line":32870},[37,115175,2472],{"emptyLinePlaceholder":131},[37,115177,115178,115180,115182,115184,115186],{"class":39,"line":32884},[37,115179,1603],{"class":50},[37,115181,31290],{"class":82},[37,115183,101606],{"class":50},[37,115185,101609],{"class":309},[37,115187,3811],{"class":54},[37,115189,115190],{"class":39,"line":32890},[37,115191,101616],{"class":54},[14,115193,103617],{},[27,115195,115197],{"className":23894,"code":115196,"language":23896,"meta":32,"style":32},"touch ch8_gym_env.py\n",[34,115198,115199],{"__ignoreMap":32},[37,115200,115201,115203],{"class":39,"line":40},[37,115202,101330],{"class":2035},[37,115204,115205],{"class":309}," ch8_gym_env.py\n",[14,115207,110491],{},[27,115209,115211],{"className":23894,"code":115210,"language":23896,"meta":32,"style":32},"python ch8_gym_env.py\n",[34,115212,115213],{"__ignoreMap":32},[37,115214,115215,115217],{"class":39,"line":40},[37,115216,31],{"class":2035},[37,115218,115205],{"class":309},[175,115220,101619],{"id":101619},[14,115222,115223],{},"继承 Gymnasium 环境：",[27,115225,115227],{"className":29,"code":115226,"language":31,"meta":32,"style":32},"class ReacherEnv(gym.Env):\n",[34,115228,115229],{"__ignoreMap":32},[37,115230,115231,115233,115235,115237,115239,115241,115243],{"class":39,"line":40},[37,115232,14766],{"class":50},[37,115234,114104],{"class":2035},[37,115236,208],{"class":54},[37,115238,113587],{"class":2035},[37,115240,761],{"class":54},[37,115242,114113],{"class":2035},[37,115244,30856],{"class":54},[14,115246,115247],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115249,115250],{},"初始化模型：",[27,115252,115254],{"className":29,"code":115253,"language":31,"meta":32,"style":32},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[34,115255,115256,115270],{"__ignoreMap":32},[37,115257,115258,115260,115262,115264,115266,115268],{"class":39,"line":40},[37,115259,30893],{"class":82},[37,115261,114164],{"class":54},[37,115263,70],{"class":50},[37,115265,101459],{"class":54},[37,115267,101361],{"class":82},[37,115269,214],{"class":54},[37,115271,115272,115274,115276,115278,115280,115282],{"class":39,"line":47},[37,115273,30893],{"class":82},[37,115275,114179],{"class":54},[37,115277,70],{"class":50},[37,115279,114184],{"class":54},[37,115281,30893],{"class":82},[37,115283,114189],{"class":54},[14,115285,115286,115287,115289],{},"这和前面章节一样，只是现在放到了类的 ",[34,115288,30899],{}," 里。",[14,115291,115292],{},"缓存 site ID：",[27,115294,115296],{"className":29,"code":115295,"language":31,"meta":32,"style":32},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[34,115297,115298,115312],{"__ignoreMap":32},[37,115299,115300,115302,115304,115306,115308,115310],{"class":39,"line":40},[37,115301,30893],{"class":82},[37,115303,114200],{"class":54},[37,115305,70],{"class":50},[37,115307,114205],{"class":54},[37,115309,89622],{"class":82},[37,115311,214],{"class":54},[37,115313,115314,115316,115318,115320,115322,115324],{"class":39,"line":47},[37,115315,30893],{"class":82},[37,115317,114221],{"class":54},[37,115319,70],{"class":50},[37,115321,114205],{"class":54},[37,115323,89622],{"class":82},[37,115325,214],{"class":54},[14,115327,115328],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115330,115331],{},"reset：",[27,115333,115335],{"className":29,"code":115334,"language":31,"meta":32,"style":32},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[34,115336,115337],{"__ignoreMap":32},[37,115338,115339,115341,115343,115345,115347,115349,115351,115353,115355,115357,115359,115361,115363,115365,115367,115369,115371],{"class":39,"line":40},[37,115340,32017],{"class":50},[37,115342,114569],{"class":2035},[37,115344,114572],{"class":54},[37,115346,659],{"class":50},[37,115348,114577],{"class":54},[37,115350,211],{"class":82},[37,115352,25182],{"class":50},[37,115354,39002],{"class":82},[37,115356,13636],{"class":50},[37,115358,39002],{"class":82},[37,115360,114590],{"class":54},[37,115362,114593],{"class":82},[37,115364,25182],{"class":50},[37,115366,39002],{"class":82},[37,115368,13636],{"class":50},[37,115370,39002],{"class":82},[37,115372,30856],{"class":54},[14,115374,115375,115377],{},[34,115376,70124],{}," 做四件事：",[158,115379,115380,115383,115386,115389],{},[161,115381,115382],{},"设置随机种子。",[161,115384,115385],{},"重置 MuJoCo data。",[161,115387,115388],{},"随机初始化关节角。",[161,115390,115391],{},"返回初始观测和 info。",[14,115393,115394],{},"step：",[27,115396,115398],{"className":29,"code":115397,"language":31,"meta":32,"style":32},"def step(self, action):\n",[34,115399,115400],{"__ignoreMap":32},[37,115401,115402,115404,115406],{"class":39,"line":40},[37,115403,32017],{"class":50},[37,115405,114734],{"class":2035},[37,115407,114737],{"class":54},[14,115409,115410,115412],{},[34,115411,107181],{}," 做六件事：",[158,115414,115415,115418,115424,115427,115430,115433],{},[161,115416,115417],{},"检查并裁剪 action。",[161,115419,115420,115421,28458],{},"写入 ",[34,115422,115423],{},"self.data.ctrl",[161,115425,115426],{},"连续推进若干个 MuJoCo 物理步。",[161,115428,115429],{},"计算新观测。",[161,115431,115432],{},"计算奖励和结束条件。",[161,115434,115435],{},"返回 Gymnasium 标准五元组。",[175,115437,101755],{"id":101755},[27,115439,115441],{"className":29,"code":115440,"language":31,"meta":32,"style":32},"import gymnasium as gym\n",[34,115442,115443],{"__ignoreMap":32},[37,115444,115445,115447,115449,115451],{"class":39,"line":40},[37,115446,51],{"class":50},[37,115448,113942],{"class":54},[37,115450,31453],{"class":50},[37,115452,113947],{"class":54},[14,115454,115455,115456,115458,115459,115462],{},"导入 Gymnasium，并起别名 ",[34,115457,113587],{},"。后面写 ",[34,115460,115461],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[27,115464,115466],{"className":29,"code":115465,"language":31,"meta":32,"style":32},"from gymnasium import spaces\n",[34,115467,115468],{"__ignoreMap":32},[37,115469,115470,115472,115474,115476],{"class":39,"line":40},[37,115471,30807],{"class":50},[37,115473,113942],{"class":54},[37,115475,51],{"class":50},[37,115477,113974],{"class":54},[14,115479,115480,115481,115484],{},"导入空间定义工具。",[34,115482,115483],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[27,115486,115487],{"className":29,"code":115226,"language":31,"meta":32,"style":32},[34,115488,115489],{"__ignoreMap":32},[37,115490,115491,115493,115495,115497,115499,115501,115503],{"class":39,"line":40},[37,115492,14766],{"class":50},[37,115494,114104],{"class":2035},[37,115496,208],{"class":54},[37,115498,113587],{"class":2035},[37,115500,761],{"class":54},[37,115502,114113],{"class":2035},[37,115504,30856],{"class":54},[14,115506,115507,115508,115511,115512,115514,115515,101065,115517,115519],{},"定义一个类，名字叫 ",[34,115509,115510],{},"ReacherEnv","。括号里的 ",[34,115513,115461],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[34,115516,70124],{},[34,115518,107181],{}," 这两个核心方法。",[27,115521,115523],{"className":29,"code":115522,"language":31,"meta":32,"style":32},"metadata = {\"render_modes\": []}\n",[34,115524,115525],{"__ignoreMap":32},[37,115526,115527,115530,115532,115534,115536],{"class":39,"line":40},[37,115528,115529],{"class":54},"metadata ",[37,115531,70],{"class":50},[37,115533,4520],{"class":54},[37,115535,114127],{"class":309},[37,115537,114130],{"class":54},[14,115539,115540],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[27,115542,115544],{"className":29,"code":115543,"language":31,"meta":32,"style":32},"def __init__(self) -> None:\n",[34,115545,115546],{"__ignoreMap":32},[37,115547,115548,115550,115552,115554,115556],{"class":39,"line":40},[37,115549,32017],{"class":50},[37,115551,30874],{"class":82},[37,115553,114143],{"class":54},[37,115555,95733],{"class":82},[37,115557,3811],{"class":54},[14,115559,115560,115562,115563,28458],{},[34,115561,30899],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[34,115564,115565],{},"env = ReacherEnv()",[27,115567,115569],{"className":29,"code":115568,"language":31,"meta":32,"style":32},"super().__init__()\n",[34,115570,115571],{"__ignoreMap":32},[37,115572,115573,115576,115578,115580],{"class":39,"line":40},[37,115574,115575],{"class":82},"super",[37,115577,17333],{"class":54},[37,115579,30899],{"class":82},[37,115581,2048],{"class":54},[14,115583,115584,115585,115587],{},"调用父类 ",[34,115586,115461],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[27,115589,115590],{"className":29,"code":115253,"language":31,"meta":32,"style":32},[34,115591,115592,115606],{"__ignoreMap":32},[37,115593,115594,115596,115598,115600,115602,115604],{"class":39,"line":40},[37,115595,30893],{"class":82},[37,115597,114164],{"class":54},[37,115599,70],{"class":50},[37,115601,101459],{"class":54},[37,115603,101361],{"class":82},[37,115605,214],{"class":54},[37,115607,115608,115610,115612,115614,115616,115618],{"class":39,"line":47},[37,115609,30893],{"class":82},[37,115611,114179],{"class":54},[37,115613,70],{"class":50},[37,115615,114184],{"class":54},[37,115617,30893],{"class":82},[37,115619,114189],{"class":54},[14,115621,115622,115623,115625,115626,101065,115629,115632],{},"把 MuJoCo 模型和状态保存到 ",[34,115624,30893],{}," 上。",[34,115627,115628],{},"self.model",[34,115630,115631],{},"self.data"," 表示这个环境对象自己的模型和状态。",[27,115634,115635],{"className":29,"code":115295,"language":31,"meta":32,"style":32},[34,115636,115637,115651],{"__ignoreMap":32},[37,115638,115639,115641,115643,115645,115647,115649],{"class":39,"line":40},[37,115640,30893],{"class":82},[37,115642,114200],{"class":54},[37,115644,70],{"class":50},[37,115646,114205],{"class":54},[37,115648,89622],{"class":82},[37,115650,214],{"class":54},[37,115652,115653,115655,115657,115659,115661,115663],{"class":39,"line":47},[37,115654,30893],{"class":82},[37,115656,114221],{"class":54},[37,115658,70],{"class":50},[37,115660,114205],{"class":54},[37,115662,89622],{"class":82},[37,115664,214],{"class":54},[14,115666,115667,115668,101065,115671,115674],{},"提前查好 tip 和 target 的 site ID。这样 ",[34,115669,115670],{},"_get_obs",[34,115672,115673],{},"_get_reward"," 里就不用每次按名字查找。",[27,115676,115678],{"className":29,"code":115677,"language":31,"meta":32,"style":32},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[34,115679,115680,115690,115700],{"__ignoreMap":32},[37,115681,115682,115684,115686,115688],{"class":39,"line":40},[37,115683,30893],{"class":82},[37,115685,113914],{"class":54},[37,115687,70],{"class":50},[37,115689,54495],{"class":82},[37,115691,115692,115694,115696,115698],{"class":39,"line":47},[37,115693,30893],{"class":82},[37,115695,114293],{"class":54},[37,115697,70],{"class":50},[37,115699,114298],{"class":82},[37,115701,115702,115704,115706,115708],{"class":39,"line":58},[37,115703,30893],{"class":82},[37,115705,113753],{"class":54},[37,115707,70],{"class":50},[37,115709,47401],{"class":82},[14,115711,115712,115715,115716,115719,115720,115723],{},[34,115713,115714],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[34,115717,115718],{},"max_steps"," 是一个 episode 最多运行多少步。",[34,115721,115722],{},"steps"," 记录当前 episode 已经走了多少步。",[27,115725,115726],{"className":29,"code":113792,"language":31,"meta":32,"style":32},[34,115727,115728],{"__ignoreMap":32},[37,115729,115730,115732,115734,115736,115738,115740,115742,115744,115746,115748,115750,115752,115754,115756,115758,115760,115762,115764,115766,115768],{"class":39,"line":40},[37,115731,30893],{"class":82},[37,115733,113801],{"class":54},[37,115735,70],{"class":50},[37,115737,113806],{"class":54},[37,115739,113809],{"class":5288},[37,115741,113812],{"class":50},[37,115743,102450],{"class":82},[37,115745,12507],{"class":54},[37,115747,113819],{"class":5288},[37,115749,70],{"class":50},[37,115751,102450],{"class":82},[37,115753,12507],{"class":54},[37,115755,96010],{"class":5288},[37,115757,70],{"class":50},[37,115759,208],{"class":54},[37,115761,282],{"class":82},[37,115763,113836],{"class":54},[37,115765,93568],{"class":5288},[37,115767,70],{"class":50},[37,115769,113843],{"class":54},[14,115771,115772,115773,115776,115777,101065,115780,115783],{},"定义动作空间。",[34,115774,115775],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[34,115778,115779],{},"low=-1.0",[34,115781,115782],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[27,115785,115786],{"className":29,"code":113853,"language":31,"meta":32,"style":32},[34,115787,115788],{"__ignoreMap":32},[37,115789,115790,115792,115794,115796,115798,115800,115802,115804,115806,115808,115810,115812,115814,115816,115818,115820,115822,115824],{"class":39,"line":40},[37,115791,30893],{"class":82},[37,115793,113862],{"class":54},[37,115795,70],{"class":50},[37,115797,113806],{"class":54},[37,115799,113809],{"class":5288},[37,115801,113812],{"class":50},[37,115803,113873],{"class":54},[37,115805,113819],{"class":5288},[37,115807,70],{"class":50},[37,115809,113873],{"class":54},[37,115811,96010],{"class":5288},[37,115813,70],{"class":50},[37,115815,208],{"class":54},[37,115817,650],{"class":82},[37,115819,113836],{"class":54},[37,115821,93568],{"class":5288},[37,115823,70],{"class":50},[37,115825,113843],{"class":54},[14,115827,115828,115829,115832,115833,115836],{},"定义观测空间。",[34,115830,115831],{},"shape=(10,)"," 表示观测是 10 个数。",[34,115834,115835],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[27,115838,115840],{"className":29,"code":115839,"language":31,"meta":32,"style":32},"def _get_obs(self) -> np.ndarray:\n",[34,115841,115842],{"__ignoreMap":32},[37,115843,115844,115846,115848],{"class":39,"line":40},[37,115845,32017],{"class":50},[37,115847,114403],{"class":2035},[37,115849,114406],{"class":54},[14,115851,115852,115853,115855],{},"定义内部函数，用来生成观测。函数名前面的 ",[34,115854,1195],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[27,115857,115859],{"className":29,"code":115858,"language":31,"meta":32,"style":32},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[34,115860,115861,115875],{"__ignoreMap":32},[37,115862,115863,115865,115867,115869,115871,115873],{"class":39,"line":40},[37,115864,111615],{"class":54},[37,115866,70],{"class":50},[37,115868,38942],{"class":82},[37,115870,114417],{"class":54},[37,115872,30893],{"class":82},[37,115874,114422],{"class":54},[37,115876,115877,115879,115881,115883,115885,115887],{"class":39,"line":47},[37,115878,111625],{"class":54},[37,115880,70],{"class":50},[37,115882,38942],{"class":82},[37,115884,114417],{"class":54},[37,115886,30893],{"class":82},[37,115888,114437],{"class":54},[14,115890,115891],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[27,115893,115895],{"className":29,"code":115894,"language":31,"meta":32,"style":32},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[34,115896,115897,115913],{"__ignoreMap":32},[37,115898,115899,115901,115903,115905,115907,115909,115911],{"class":39,"line":40},[37,115900,110901],{"class":54},[37,115902,70],{"class":50},[37,115904,114446],{"class":54},[37,115906,30893],{"class":82},[37,115908,114451],{"class":54},[37,115910,30893],{"class":82},[37,115912,114456],{"class":54},[37,115914,115915,115917],{"class":39,"line":47},[37,115916,17118],{"class":50},[37,115918,114463],{"class":54},[14,115920,115921,115922,115925,115926,115928],{},"拼接观测，并转换成 ",[34,115923,115924],{},"float32","。很多强化学习库默认使用 ",[34,115927,115924],{},"，所以这里主动转换。",[27,115930,115931],{"className":29,"code":115334,"language":31,"meta":32,"style":32},[34,115932,115933],{"__ignoreMap":32},[37,115934,115935,115937,115939,115941,115943,115945,115947,115949,115951,115953,115955,115957,115959,115961,115963,115965,115967],{"class":39,"line":40},[37,115936,32017],{"class":50},[37,115938,114569],{"class":2035},[37,115940,114572],{"class":54},[37,115942,659],{"class":50},[37,115944,114577],{"class":54},[37,115946,211],{"class":82},[37,115948,25182],{"class":50},[37,115950,39002],{"class":82},[37,115952,13636],{"class":50},[37,115954,39002],{"class":82},[37,115956,114590],{"class":54},[37,115958,114593],{"class":82},[37,115960,25182],{"class":50},[37,115962,39002],{"class":82},[37,115964,13636],{"class":50},[37,115966,39002],{"class":82},[37,115968,30856],{"class":54},[14,115970,115971,115972,115974,115975,115978],{},"定义 reset。",[34,115973,114613],{}," 用来控制随机数，保证实验可以复现。",[34,115976,115977],{},"options"," 用来接收额外配置，本章暂时不用。",[27,115980,115982],{"className":29,"code":115981,"language":31,"meta":32,"style":32},"super().reset(seed=seed)\n",[34,115983,115984],{"__ignoreMap":32},[37,115985,115986,115988,115990,115992,115994],{"class":39,"line":40},[37,115987,115575],{"class":82},[37,115989,114610],{"class":54},[37,115991,114613],{"class":5288},[37,115993,70],{"class":50},[37,115995,114618],{"class":54},[14,115997,115998,115999,116002],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[34,116000,116001],{},"self.np_random"," 生成可复现的随机数。",[27,116004,116006],{"className":29,"code":116005,"language":31,"meta":32,"style":32},"mujoco.mj_resetData(self.model, self.data)\n",[34,116007,116008],{"__ignoreMap":32},[37,116009,116010,116013,116015,116017,116019],{"class":39,"line":40},[37,116011,116012],{"class":54},"mujoco.mj_resetData(",[37,116014,30893],{"class":82},[37,116016,114628],{"class":54},[37,116018,30893],{"class":82},[37,116020,114633],{"class":54},[14,116022,116023],{},"把 MuJoCo 状态重置到默认状态。",[27,116025,116027],{"className":29,"code":116026,"language":31,"meta":32,"style":32},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[34,116028,116029],{"__ignoreMap":32},[37,116030,116031,116033,116035,116037,116039,116041,116043,116045,116047,116049,116051,116053,116055,116057,116059,116061,116063],{"class":39,"line":40},[37,116032,30893],{"class":82},[37,116034,114644],{"class":54},[37,116036,70],{"class":50},[37,116038,38942],{"class":82},[37,116040,114651],{"class":54},[37,116042,113809],{"class":5288},[37,116044,113812],{"class":50},[37,116046,86278],{"class":82},[37,116048,12507],{"class":54},[37,116050,113819],{"class":5288},[37,116052,70],{"class":50},[37,116054,86278],{"class":82},[37,116056,12507],{"class":54},[37,116058,31566],{"class":5288},[37,116060,70],{"class":50},[37,116062,30893],{"class":82},[37,116064,114676],{"class":54},[14,116066,115388,116067,116070,116071,116074,116075,116077],{},[34,116068,116069],{},"[:]"," 表示修改整个数组。",[34,116072,116073],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[34,116076,102197],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[27,116079,116081],{"className":29,"code":116080,"language":31,"meta":32,"style":32},"self.data.qvel[:] = 0.0\n",[34,116082,116083],{"__ignoreMap":32},[37,116084,116085,116087,116089,116091],{"class":39,"line":40},[37,116086,30893],{"class":82},[37,116088,114683],{"class":54},[37,116090,70],{"class":50},[37,116092,104808],{"class":82},[14,116094,116095],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[27,116097,116099],{"className":29,"code":116098,"language":31,"meta":32,"style":32},"self.steps = 0\nreturn self._get_obs(), {}\n",[34,116100,116101,116111],{"__ignoreMap":32},[37,116102,116103,116105,116107,116109],{"class":39,"line":40},[37,116104,30893],{"class":82},[37,116106,113753],{"class":54},[37,116108,70],{"class":50},[37,116110,47401],{"class":82},[37,116112,116113,116115,116117],{"class":39,"line":47},[37,116114,17118],{"class":50},[37,116116,38942],{"class":82},[37,116118,114723],{"class":54},[14,116120,116121],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[27,116123,116124],{"className":29,"code":115397,"language":31,"meta":32,"style":32},[34,116125,116126],{"__ignoreMap":32},[37,116127,116128,116130,116132],{"class":39,"line":40},[37,116129,32017],{"class":50},[37,116131,114734],{"class":2035},[37,116133,114737],{"class":54},[14,116135,116136],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[27,116138,116140],{"className":29,"code":116139,"language":31,"meta":32,"style":32},"action = np.asarray(action, dtype=np.float32)\n",[34,116141,116142],{"__ignoreMap":32},[37,116143,116144,116146,116148,116150,116152,116154],{"class":39,"line":40},[37,116145,107489],{"class":54},[37,116147,70],{"class":50},[37,116149,114746],{"class":54},[37,116151,93568],{"class":5288},[37,116153,70],{"class":50},[37,116155,113843],{"class":54},[14,116157,116158,116159,28458],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[34,116160,115924],{},[27,116162,116164],{"className":29,"code":116163,"language":31,"meta":32,"style":32},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[34,116165,116166],{"__ignoreMap":32},[37,116167,116168,116170,116172,116174,116176,116178,116180],{"class":39,"line":40},[37,116169,107489],{"class":54},[37,116171,70],{"class":50},[37,116173,107494],{"class":54},[37,116175,30893],{"class":82},[37,116177,114765],{"class":54},[37,116179,30893],{"class":82},[37,116181,114770],{"class":54},[14,116183,116184],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[27,116186,116188],{"className":29,"code":116187,"language":31,"meta":32,"style":32},"self.data.ctrl[:] = action\n",[34,116189,116190],{"__ignoreMap":32},[37,116191,116192,116194,116196,116198],{"class":39,"line":40},[37,116193,30893],{"class":82},[37,116195,114781],{"class":54},[37,116197,70],{"class":50},[37,116199,107517],{"class":54},[14,116201,116202],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[27,116204,116206],{"className":29,"code":116205,"language":31,"meta":32,"style":32},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[34,116207,116208,116224],{"__ignoreMap":32},[37,116209,116210,116212,116214,116216,116218,116220,116222],{"class":39,"line":40},[37,116211,3097],{"class":50},[37,116213,101548],{"class":54},[37,116215,26116],{"class":50},[37,116217,32512],{"class":82},[37,116219,208],{"class":54},[37,116221,30893],{"class":82},[37,116223,114802],{"class":54},[37,116225,116226,116229,116231,116233,116235],{"class":39,"line":47},[37,116227,116228],{"class":54},"    mujoco.mj_step(",[37,116230,30893],{"class":82},[37,116232,114628],{"class":54},[37,116234,30893],{"class":82},[37,116236,114633],{"class":54},[14,116238,116239,116240,116243,116244,116246,116247,28458],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[34,116241,116242],{},"frame_skip=5","，所以外部调用一次 ",[34,116245,113924],{},"，内部实际执行 5 次 ",[34,116248,101262],{},[27,116250,116252],{"className":29,"code":116251,"language":31,"meta":32,"style":32},"self.steps += 1\n",[34,116253,116254],{"__ignoreMap":32},[37,116255,116256,116258,116260,116262],{"class":39,"line":40},[37,116257,30893],{"class":82},[37,116259,113753],{"class":54},[37,116261,9549],{"class":50},[37,116263,55767],{"class":82},[14,116265,116266],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[27,116268,116270],{"className":29,"code":116269,"language":31,"meta":32,"style":32},"obs = self._get_obs()\nreward = self._get_reward()\n",[34,116271,116272,116282],{"__ignoreMap":32},[37,116273,116274,116276,116278,116280],{"class":39,"line":40},[37,116275,110901],{"class":54},[37,116277,70],{"class":50},[37,116279,38942],{"class":82},[37,116281,114844],{"class":54},[37,116283,116284,116286,116288,116290],{"class":39,"line":47},[37,116285,111052],{"class":54},[37,116287,70],{"class":50},[37,116289,38942],{"class":82},[37,116291,114855],{"class":54},[14,116293,116294],{},"计算新的观测和奖励。",[27,116296,116298],{"className":29,"code":116297,"language":31,"meta":32,"style":32},"dist = float(np.linalg.norm(tip - target))\n",[34,116299,116300],{"__ignoreMap":32},[37,116301,116302,116304,116306,116308,116310,116312],{"class":39,"line":40},[37,116303,111643],{"class":54},[37,116305,70],{"class":50},[37,116307,109844],{"class":82},[37,116309,114898],{"class":54},[37,116311,112],{"class":50},[37,116313,114903],{"class":54},[14,116315,116316],{},"计算末端到目标的距离，并转换成 Python float。",[27,116318,116319],{"className":29,"code":113724,"language":31,"meta":32,"style":32},[34,116320,116321,116333],{"__ignoreMap":32},[37,116322,116323,116325,116327,116329,116331],{"class":39,"line":40},[37,116324,113731],{"class":54},[37,116326,70],{"class":50},[37,116328,113736],{"class":54},[37,116330,1113],{"class":50},[37,116332,113741],{"class":82},[37,116334,116335,116337,116339,116341,116343,116345,116347],{"class":39,"line":47},[37,116336,113746],{"class":54},[37,116338,70],{"class":50},[37,116340,38942],{"class":82},[37,116342,113753],{"class":54},[37,116344,1782],{"class":50},[37,116346,38942],{"class":82},[37,116348,113760],{"class":54},[14,116350,116351],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[27,116353,116355],{"className":29,"code":116354,"language":31,"meta":32,"style":32},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[34,116356,116357,116370],{"__ignoreMap":32},[37,116358,116359,116362,116364,116366,116368],{"class":39,"line":40},[37,116360,116361],{"class":54},"info ",[37,116363,70],{"class":50},[37,116365,4520],{"class":54},[37,116367,114949],{"class":309},[37,116369,114952],{"class":54},[37,116371,116372,116374],{"class":39,"line":47},[37,116373,17118],{"class":50},[37,116375,114959],{"class":54},[14,116377,116378,116381],{},[34,116379,116380],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[27,116383,116385],{"className":29,"code":116384,"language":31,"meta":32,"style":32},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[34,116386,116387,116396],{"__ignoreMap":32},[37,116388,116389,116392,116394],{"class":39,"line":40},[37,116390,116391],{"class":54},"env ",[37,116393,70],{"class":50},[37,116395,114989],{"class":54},[37,116397,116398,116400,116402,116404,116406,116408,116410],{"class":39,"line":47},[37,116399,113447],{"class":54},[37,116401,70],{"class":50},[37,116403,114999],{"class":54},[37,116405,114613],{"class":5288},[37,116407,70],{"class":50},[37,116409,396],{"class":82},[37,116411,214],{"class":54},[14,116413,116414,116415,116418],{},"创建环境并重置。",[34,116416,116417],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[27,116420,116422],{"className":29,"code":116421,"language":31,"meta":32,"style":32},"action = env.action_space.sample()\n",[34,116423,116424],{"__ignoreMap":32},[37,116425,116426,116428,116430],{"class":39,"line":40},[37,116427,107489],{"class":54},[37,116429,70],{"class":50},[37,116431,115068],{"class":54},[14,116433,116434],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[146,116436,102363],{"id":102362},[14,116438,105531],{},[27,116440,116443],{"className":116441,"code":116442,"language":5259,"meta":32},[5257],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[34,116444,116442],{"__ignoreMap":32},[14,116446,116447],{},"这个环境已经具备强化学习环境的基本结构。",[14,116449,116450],{},"主函数里使用随机动作：",[27,116452,116453],{"className":29,"code":116421,"language":31,"meta":32,"style":32},[34,116454,116455],{"__ignoreMap":32},[37,116456,116457,116459,116461],{"class":39,"line":40},[37,116458,107489],{"class":54},[37,116460,70],{"class":50},[37,116462,115068],{"class":54},[14,116464,116465],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[146,116467,102395],{"id":102394},[158,116469,116470,116473,116479,116488,116497,116506,116512],{},[161,116471,116472],{},"运行程序。",[161,116474,116475,116476,28458],{},"确认 ",[34,116477,116478],{},"obs.shape == (10,)",[161,116480,111228,116481,116484,116485,28458],{},[34,116482,116483],{},"env.action_space","，应类似 ",[34,116486,116487],{},"Box(-1.0, 1.0, (2,), float32)",[161,116489,105632,116490,116493,116494,28458],{},[34,116491,116492],{},"self.max_steps = 10","，确认环境会更快 ",[34,116495,116496],{},"truncated=True",[161,116498,102458,116499,102461,116502,116505],{},[34,116500,116501],{},"terminated = dist \u003C 0.05",[34,116503,116504],{},"dist \u003C 0.2","，观察是否更容易结束。",[161,116507,102458,116508,116511],{},[34,116509,116510],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[161,116513,116514,116515,116517,116518,116521],{},"在 ",[34,116516,116380],{}," 里加入 ",[34,116519,116520],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[146,116523,102500],{"id":102499},[175,116525,116527],{"id":116526},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,116529,116530,116531,116533],{},"Gymnasium 的 ",[34,116532,107181],{}," 返回 5 个值:",[27,116535,116537],{"className":29,"code":116536,"language":31,"meta":32,"style":32},"obs, reward, terminated, truncated, info\n",[34,116538,116539],{"__ignoreMap":32},[37,116540,116541],{"class":39,"line":40},[37,116542,116536],{"class":54},[14,116544,116545],{},"不是旧 Gym 的 4 个值。",[175,116547,116549,116552],{"id":116548},"datactrl-action-维度错误",[34,116550,116551],{},"data.ctrl[:] = action"," 维度错误",[14,116554,102570],{},[27,116556,116558],{"className":29,"code":116557,"language":31,"meta":32,"style":32},"print(self.model.nu)\nprint(action.shape)\n",[34,116559,116560,116571],{"__ignoreMap":32},[37,116561,116562,116564,116566,116568],{"class":39,"line":40},[37,116563,30485],{"class":82},[37,116565,208],{"class":54},[37,116567,30893],{"class":82},[37,116569,116570],{"class":54},".model.nu)\n",[37,116572,116573,116575],{"class":39,"line":47},[37,116574,30485],{"class":82},[37,116576,116577],{"class":54},"(action.shape)\n",[14,116579,116580],{},"两者必须匹配。",[175,116582,116584],{"id":116583},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,116586,102509],{},[27,116588,116590],{"className":29,"code":116589,"language":31,"meta":32,"style":32},"mujoco.mj_forward(self.model, self.data)\n",[34,116591,116592],{"__ignoreMap":32},[37,116593,116594,116597,116599,116601,116603],{"class":39,"line":40},[37,116595,116596],{"class":54},"mujoco.mj_forward(",[37,116598,30893],{"class":82},[37,116600,114628],{"class":54},[37,116602,30893],{"class":82},[37,116604,114633],{"class":54},[175,116606,116608,116610],{"id":116607},"observation_space-维度和-obs-不一致",[34,116609,113647],{}," 维度和 obs 不一致",[14,116612,102622],{},[27,116614,116616],{"className":29,"code":116615,"language":31,"meta":32,"style":32},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[34,116617,116618,116628,116635],{"__ignoreMap":32},[37,116619,116620,116622,116624,116626],{"class":39,"line":40},[37,116621,110901],{"class":54},[37,116623,70],{"class":50},[37,116625,38942],{"class":82},[37,116627,114844],{"class":54},[37,116629,116630,116632],{"class":39,"line":47},[37,116631,30485],{"class":82},[37,116633,116634],{"class":54},"(obs.shape)\n",[37,116636,116637,116639,116641,116643],{"class":39,"line":58},[37,116638,30485],{"class":82},[37,116640,208],{"class":54},[37,116642,30893],{"class":82},[37,116644,116645],{"class":54},".observation_space.shape)\n",[14,116647,116648],{},"两者必须一致。本章观测是：",[27,116650,116653],{"className":116651,"code":116652,"language":5259,"meta":32},[5257],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[34,116654,116652],{"__ignoreMap":32},[175,116656,116658],{"id":116657},"action-超过范围","action 超过范围",[14,116660,116661],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[27,116663,116664],{"className":29,"code":116163,"language":31,"meta":32,"style":32},[34,116665,116666],{"__ignoreMap":32},[37,116667,116668,116670,116672,116674,116676,116678,116680],{"class":39,"line":40},[37,116669,107489],{"class":54},[37,116671,70],{"class":50},[37,116673,107494],{"class":54},[37,116675,30893],{"class":82},[37,116677,114765],{"class":54},[37,116679,30893],{"class":82},[37,116681,114770],{"class":54},[14,116683,116684,116685,28458],{},"这能避免无效动作直接写入 ",[34,116686,101123],{},[175,116688,116690],{"id":116689},"忘记返回-info","忘记返回 info",[14,116692,116530,116693,101065,116695,116697],{},[34,116694,70124],{},[34,116696,107181],{}," 都会返回 info：",[27,116699,116700],{"className":29,"code":113440,"language":31,"meta":32,"style":32},[34,116701,116702,116710],{"__ignoreMap":32},[37,116703,116704,116706,116708],{"class":39,"line":40},[37,116705,113447],{"class":54},[37,116707,70],{"class":50},[37,116709,113452],{"class":54},[37,116711,116712,116714,116716],{"class":39,"line":47},[37,116713,113457],{"class":54},[37,116715,70],{"class":50},[37,116717,113462],{"class":54},[14,116719,116720,116721,28458],{},"即使暂时没有额外信息，也返回 ",[34,116722,32528],{},[146,116724,116726],{"id":116725},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,116728,116729],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[158,116731,116732,116735,116738,116741,116744,116747],{},[161,116733,116734],{},"更稳定的 reward。",[161,116736,116737],{},"合理的 episode 长度。",[161,116739,116740],{},"可重复的随机目标采样。",[161,116742,116743],{},"render 接口。",[161,116745,116746],{},"环境注册代码。",[161,116748,116749],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,116751,116752],{},"如果只是自己写训练循环，最小形式是：",[27,116754,116756],{"className":29,"code":116755,"language":31,"meta":32,"style":32},"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",[34,116757,116758,116766,116782,116786,116802,116811,116820,116830],{"__ignoreMap":32},[37,116759,116760,116762,116764],{"class":39,"line":40},[37,116761,116391],{"class":54},[37,116763,70],{"class":50},[37,116765,114989],{"class":54},[37,116767,116768,116770,116772,116774,116776,116778,116780],{"class":39,"line":47},[37,116769,113447],{"class":54},[37,116771,70],{"class":50},[37,116773,114999],{"class":54},[37,116775,114613],{"class":5288},[37,116777,70],{"class":50},[37,116779,396],{"class":82},[37,116781,214],{"class":54},[37,116783,116784],{"class":39,"line":58},[37,116785,2472],{"emptyLinePlaceholder":131},[37,116787,116788,116790,116792,116794,116796,116798,116800],{"class":39,"line":64},[37,116789,3097],{"class":50},[37,116791,101548],{"class":54},[37,116793,26116],{"class":50},[37,116795,32512],{"class":82},[37,116797,208],{"class":54},[37,116799,6482],{"class":82},[37,116801,30856],{"class":54},[37,116803,116804,116807,116809],{"class":39,"line":76},[37,116805,116806],{"class":54},"    action ",[37,116808,70],{"class":50},[37,116810,115068],{"class":54},[37,116812,116813,116816,116818],{"class":39,"line":92},[37,116814,116815],{"class":54},"    obs, reward, terminated, truncated, info ",[37,116817,70],{"class":50},[37,116819,113462],{"class":54},[37,116821,116822,116824,116826,116828],{"class":39,"line":97},[37,116823,3173],{"class":50},[37,116825,115134],{"class":54},[37,116827,115137],{"class":50},[37,116829,115140],{"class":54},[37,116831,116832,116835,116837],{"class":39,"line":107},[37,116833,116834],{"class":54},"        obs, info ",[37,116836,70],{"class":50},[37,116838,113452],{"class":54},[146,116840,116842],{"id":116841},"_9本章小结","9.本章小结",[14,116844,116845],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[27,116847,116850],{"className":116848,"code":116849,"language":5259,"meta":32},[5257],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[34,116851,116849],{"__ignoreMap":32},[14,116853,116854],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[123,116856,116857],{},"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":32,"searchDepth":47,"depth":47,"links":116859},[116860,116861,116862,116869,116873,116874,116875,116885,116886],{"id":100693,"depth":47,"text":100694},{"id":100816,"depth":47,"text":100817},{"id":101091,"depth":47,"text":101092,"children":116863},[116864,116866,116868],{"id":113671,"depth":58,"text":116865},"terminated 和 truncated 的区别",{"id":113774,"depth":58,"text":116867},"observation_space 和 action_space",{"id":113901,"depth":58,"text":113902},{"id":101299,"depth":47,"text":101300,"children":116870},[116871,116872],{"id":101619,"depth":58,"text":101619},{"id":101755,"depth":58,"text":101755},{"id":102362,"depth":47,"text":102363},{"id":102394,"depth":47,"text":102395},{"id":102499,"depth":47,"text":102500,"children":116876},[116877,116878,116880,116881,116883,116884],{"id":116526,"depth":58,"text":116527},{"id":116548,"depth":58,"text":116879},"data.ctrl[:] = action 维度错误",{"id":116583,"depth":58,"text":116584},{"id":116607,"depth":58,"text":116882},"observation_space 维度和 obs 不一致",{"id":116657,"depth":58,"text":116658},{"id":116689,"depth":58,"text":116690},{"id":116725,"depth":47,"text":116726},{"id":116841,"depth":47,"text":116842},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113424,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116893,"title":116894,"body":116895,"description":117318,"extension":129,"meta":117319,"navigation":131,"path":117320,"seo":117321,"stem":117322,"__hash__":117323},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116896,"toc":117308},[116897,116901,116904,116907,116927,116933,116939,116949,116952,116955,116975,116978,116982,116985,116991,116994,117008,117011,117014,117088,117091,117097,117100,117123,117126,117176,117179,117185,117188,117191,117194,117213,117216,117222,117225,117228,117231,117251,117254,117257,117260,117305],[10,116898,116900],{"id":116899},"mujoco-学习","MuJoCo 学习",[14,116902,116903],{},"初版",[14,116905,116906],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[158,116908,116909,116912,116915,116924],{},[161,116910,116911],{},"MuJoCo 模型文件在描述什么。",[161,116913,116914],{},"Python 代码怎样读取和推进仿真。",[161,116916,116917,417,116919,417,116921,116923],{},[34,116918,104077],{},[34,116920,104407],{},[34,116922,104410],{}," 这些数组为什么重要。",[161,116925,116926],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,116928,116929,116930,116932],{},"默认环境为 Fedora 44、Python >= 3.10、",[34,116931,101074],{}," 官方 Python bindings。",[14,116934,116935,116936,116938],{},"注意：本文禁止使用 ",[34,116937,101059],{},"。所有示例均使用：",[27,116940,116941],{"className":29,"code":101625,"language":31,"meta":32,"style":32},[34,116942,116943],{"__ignoreMap":32},[37,116944,116945,116947],{"class":39,"line":40},[37,116946,51],{"class":50},[37,116948,101348],{"class":54},[146,116950,116951],{"id":116951},"适合谁阅读",[14,116953,116954],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[158,116956,116957,116960,116963,116966],{},[161,116958,116959],{},"没学过 MuJoCo，只会一点 Python。",[161,116961,116962],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[161,116964,116965],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[161,116967,116968,116969,116971,116972,116974],{},"以前接触过 ",[34,116970,101059],{},"，现在想迁移到官方 ",[34,116973,101068],{}," Python bindings。",[14,116976,116977],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[146,116979,116981],{"id":116980},"mujoco-到底是什么","MuJoCo 到底是什么",[14,116983,116984],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[27,116986,116989],{"className":116987,"code":116988,"language":5259,"meta":32},[5257],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[34,116990,116988],{"__ignoreMap":32},[14,116992,116993],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[158,116995,116996,116999,117002,117005],{},[161,116997,116998],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[161,117000,117001],{},"快速测试控制算法，不必一开始就上真实机器人。",[161,117003,117004],{},"生成强化学习环境。",[161,117006,117007],{},"采集状态、动作、图像、奖励等训练数据。",[146,117009,117010],{"id":117010},"学习前的心智模型",[14,117012,117013],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[342,117015,117016,117028],{},[345,117017,117018],{},[348,117019,117020,117023,117026],{},[351,117021,117022],{"align":23808},"部分",[351,117024,117025],{"align":23808},"负责什么",[351,117027,21259],{"align":23808},[389,117029,117030,117041,117053,117065,117077],{},[348,117031,117032,117035,117038],{},[394,117033,117034],{"align":23808},"MJCF XML",[394,117036,117037],{"align":23808},"定义世界和机器人结构",[394,117039,117040],{"align":23808},"地面、盒子、关节、电机、摄像头",[348,117042,117043,117047,117050],{},[394,117044,117045],{"align":23808},[34,117046,100756],{},[394,117048,117049],{"align":23808},"编译后的静态模型",[394,117051,117052],{"align":23808},"有几个关节、有几个电机、时间步长是多少",[348,117054,117055,117059,117062],{},[394,117056,117057],{"align":23808},[34,117058,100766],{},[394,117060,117061],{"align":23808},"运行中的动态状态",[394,117063,117064],{"align":23808},"当前时间、位置、速度、电机输入",[348,117066,117067,117071,117074],{},[394,117068,117069],{"align":23808},[34,117070,101262],{},[394,117072,117073],{"align":23808},"推进一步物理仿真",[394,117075,117076],{"align":23808},"根据重力、力、碰撞更新状态",[348,117078,117079,117082,117085],{},[394,117080,117081],{"align":23808},"Viewer \u002F Renderer",[394,117083,117084],{"align":23808},"把仿真显示出来",[394,117086,117087],{"align":23808},"打开窗口或保存图片",[14,117089,117090],{},"一句话总结：",[27,117092,117095],{"className":117093,"code":117094,"language":5259,"meta":32},[5257],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[34,117096,117094],{"__ignoreMap":32},[14,117098,117099],{},"参考来源：",[1210,117101,117102,117109,117116],{},[161,117103,117104,117105],{},"MuJoCo Python 官方文档：",[443,117106,117107],{"href":117107,"rel":117108},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23937],[161,117110,117111,117112],{},"MuJoCo XML Reference：",[443,117113,117114],{"href":117114,"rel":117115},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23937],[161,117117,117118,117119],{},"MuJoCo Overview：",[443,117120,117121],{"href":117121,"rel":117122},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23937],[146,117124,117125],{"id":117125},"章节目录",[158,117127,117128,117134,117140,117146,117152,117158,117164,117170],{},[161,117129,117130],{},[443,117131,117133],{"href":117132},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[161,117135,117136],{},[443,117137,117139],{"href":117138},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[161,117141,117142],{},[443,117143,117145],{"href":117144},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[161,117147,117148],{},[443,117149,117151],{"href":117150},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[161,117153,117154],{},[443,117155,117157],{"href":117156},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[161,117159,117160],{},[443,117161,117163],{"href":117162},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[161,117165,117166],{},[443,117167,117169],{"href":117168},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[161,117171,117172],{},[443,117173,117175],{"href":117174},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[146,117177,117178],{"id":117178},"推荐学习路线",[27,117180,117183],{"className":117181,"code":117182,"language":5259,"meta":32},[5257],"环境安装\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",[34,117184,117182],{"__ignoreMap":32},[14,117186,117187],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[146,117189,117190],{"id":117190},"建议的目录结构",[14,117192,117193],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[27,117195,117197],{"className":23894,"code":117196,"language":23896,"meta":32,"style":32},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[34,117198,117199,117207],{"__ignoreMap":32},[37,117200,117201,117203,117205],{"class":39,"line":40},[37,117202,101313],{"class":2035},[37,117204,29289],{"class":82},[37,117206,101318],{"class":309},[37,117208,117209,117211],{"class":39,"line":47},[37,117210,101323],{"class":82},[37,117212,101318],{"class":309},[14,117214,117215],{},"每一章的代码都单独保存：",[27,117217,117220],{"className":117218,"code":117219,"language":5259,"meta":32},[5257],"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",[34,117221,117219],{"__ignoreMap":32},[14,117223,117224],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[146,117226,117227],{"id":117227},"学习方法",[14,117229,117230],{},"每章建议按这个顺序操作：",[158,117232,117233,117236,117239,117242,117245,117248],{},[161,117234,117235],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[161,117237,117238],{},"复制最小可运行代码，保存成指定文件。",[161,117240,117241],{},"运行代码，确认没有报错。",[161,117243,117244],{},"对照“运行结果说明”理解输出。",[161,117246,117247],{},"做“验证步骤”，主动改一两个参数。",[161,117249,117250],{},"遇到报错先看“常见错误与解决方案”。",[14,117252,117253],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[146,117255,117256],{"id":117256},"全局排错顺序",[14,117258,117259],{},"遇到问题时，按下面顺序查：",[158,117261,117262,117268,117274,117279,117282,117285,117292,117302],{},[161,117263,117264,117265],{},"Python 环境是否激活：",[34,117266,117267],{},"which python",[161,117269,117270,117271],{},"MuJoCo 是否能导入：",[34,117272,117273],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[161,117275,117276,117277],{},"是否误装了 ",[34,117278,101059],{},[161,117280,117281],{},"XML 标签是否闭合、属性是否拼写正确",[161,117283,117284],{},"actuator 引用的 joint 名字是否存在",[161,117286,117287,117289,117290],{},[34,117288,101123],{}," 的长度是否等于 ",[34,117291,102205],{},[161,117293,105632,117294,82607,117296,117298,117299],{},[34,117295,104077],{},[34,117297,104407],{}," 后是否调用了 ",[34,117300,117301],{},"mujoco.mj_forward",[161,117303,117304],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[123,117306,117307],{},"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":32,"searchDepth":47,"depth":47,"links":117309},[117310,117311,117312,117313,117314,117315,117316,117317],{"id":116951,"depth":47,"text":116951},{"id":116980,"depth":47,"text":116981},{"id":117010,"depth":47,"text":117010},{"id":117125,"depth":47,"text":117125},{"id":117178,"depth":47,"text":117178},{"id":117190,"depth":47,"text":117190},{"id":117227,"depth":47,"text":117227},{"id":117256,"depth":47,"text":117256},"仿真搭建。",{"category":23450},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116894,"description":117318},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117325,"title":117326,"body":117327,"description":128,"extension":129,"meta":117782,"navigation":131,"path":117783,"seo":117784,"stem":117785,"__hash__":117786},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117328,"toc":117780},[117329,117332,117335,117341,117777],[10,117330,117326],{"id":117331},"_1-最常用的基本操作更新",[14,117333,117334],{},"装linux系统教程：",[14,117336,117337],{},[443,117338,117339],{"href":117339,"rel":117340},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23937],[27,117342,117346],{"className":117343,"code":117344,"language":117345,"meta":32,"style":32},"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",[34,117347,117348,117353,117358,117367,117372,117381,117386,117406,117411,117422,117427,117436,117441,117469,117474,117493,117498,117517,117521,117526,117542,117546,117551,117581,117585,117590,117606,117610,117615,117630,117634,117639,117655,117659,117664,117676,117688,117692,117697,117714,117718,117723,117741,117745,117750,117759,117763,117768],{"__ignoreMap":32},[37,117349,117350],{"class":39,"line":40},[37,117351,117352],{"class":43},"#更新相关的知识\n",[37,117354,117355],{"class":39,"line":47},[37,117356,117357],{"class":43},"# 更新软件包列表（从服务器获取最新软件信息）\n",[37,117359,117360,117362,117365],{"class":39,"line":58},[37,117361,24649],{"class":2035},[37,117363,117364],{"class":309}," apt",[37,117366,26315],{"class":309},[37,117368,117369],{"class":39,"line":64},[37,117370,117371],{"class":43},"# 升级所有可更新的软件包（不删除旧包）\n",[37,117373,117374,117376,117378],{"class":39,"line":76},[37,117375,24649],{"class":2035},[37,117377,117364],{"class":309},[37,117379,117380],{"class":309}," upgrade\n",[37,117382,117383],{"class":39,"line":92},[37,117384,117385],{"class":43},"#更新和升级软件包\n",[37,117387,117388,117390,117392,117395,117397,117399,117401,117404],{"class":39,"line":97},[37,117389,24649],{"class":2035},[37,117391,117364],{"class":309},[37,117393,117394],{"class":309}," update",[37,117396,26263],{"class":54},[37,117398,24649],{"class":2035},[37,117400,117364],{"class":309},[37,117402,117403],{"class":309}," upgrade",[37,117405,101028],{"class":82},[37,117407,117408],{"class":39,"line":107},[37,117409,117410],{"class":43},"#列出可更新的软件包及版本信息\n",[37,117412,117413,117416,117419],{"class":39,"line":1390},[37,117414,117415],{"class":2035},"apt",[37,117417,117418],{"class":309}," list",[37,117420,117421],{"class":82}," --upgradable\n",[37,117423,117424],{"class":39,"line":1402},[37,117425,117426],{"class":43},"#彻底升级（处理依赖关系，可能删除旧包）\n",[37,117428,117429,117431,117433],{"class":39,"line":1684},[37,117430,24649],{"class":2035},[37,117432,117364],{"class":309},[37,117434,117435],{"class":309}," full-upgrade\n",[37,117437,117438],{"class":39,"line":1689},[37,117439,117440],{"class":43},"#设置指定版本\n",[37,117442,117443,117445,117447,117449,117451,117454,117456,117458,117460,117462,117465,117467],{"class":39,"line":1695},[37,117444,24649],{"class":2035},[37,117446,117364],{"class":309},[37,117448,23906],{"class":309},[37,117450,28975],{"class":50},[37,117452,117453],{"class":309},"package_nam",[37,117455,279],{"class":54},[37,117457,1163],{"class":50},[37,117459,70],{"class":309},[37,117461,1113],{"class":50},[37,117463,117464],{"class":309},"version_numbe",[37,117466,873],{"class":54},[37,117468,51375],{"class":50},[37,117470,117471],{"class":39,"line":1700},[37,117472,117473],{"class":43},"#只安装软件包不升级\n",[37,117475,117476,117478,117480,117482,117484,117486,117488,117490],{"class":39,"line":1714},[37,117477,24649],{"class":2035},[37,117479,117364],{"class":309},[37,117481,23906],{"class":309},[37,117483,28975],{"class":50},[37,117485,117453],{"class":309},[37,117487,279],{"class":54},[37,117489,1163],{"class":50},[37,117491,117492],{"class":82}," --no-upgrade\n",[37,117494,117495],{"class":39,"line":1719},[37,117496,117497],{"class":43},"#只升级，不存在就不安装\n",[37,117499,117500,117502,117504,117506,117508,117510,117512,117514],{"class":39,"line":1725},[37,117501,24649],{"class":2035},[37,117503,117364],{"class":309},[37,117505,23906],{"class":309},[37,117507,28975],{"class":50},[37,117509,117453],{"class":309},[37,117511,279],{"class":54},[37,117513,1163],{"class":50},[37,117515,117516],{"class":82}," --only-upgrade\n",[37,117518,117519],{"class":39,"line":1746},[37,117520,2472],{"emptyLinePlaceholder":131},[37,117522,117523],{"class":39,"line":1751},[37,117524,117525],{"class":43},"#安装指定的软件命令\n",[37,117527,117528,117530,117532,117534,117536,117538,117540],{"class":39,"line":1765},[37,117529,24649],{"class":2035},[37,117531,117364],{"class":309},[37,117533,23906],{"class":309},[37,117535,28975],{"class":50},[37,117537,117453],{"class":309},[37,117539,279],{"class":54},[37,117541,51375],{"class":50},[37,117543,117544],{"class":39,"line":1770},[37,117545,2472],{"emptyLinePlaceholder":131},[37,117547,117548],{"class":39,"line":1799},[37,117549,117550],{"class":43},"#安装多个软件包\n",[37,117552,117553,117555,117557,117559,117561,117564,117567,117569,117571,117574,117576,117578],{"class":39,"line":1804},[37,117554,24649],{"class":2035},[37,117556,117364],{"class":309},[37,117558,23906],{"class":309},[37,117560,28975],{"class":50},[37,117562,117563],{"class":309},"package_",[37,117565,117566],{"class":50},"1>",[37,117568,28975],{"class":50},[37,117570,117563],{"class":309},[37,117572,117573],{"class":50},"2>",[37,117575,28975],{"class":50},[37,117577,117563],{"class":309},[37,117579,117580],{"class":50},"3>\n",[37,117582,117583],{"class":39,"line":1821},[37,117584,2472],{"emptyLinePlaceholder":131},[37,117586,117587],{"class":39,"line":1826},[37,117588,117589],{"class":43},"#更新指定的软件命令\n",[37,117591,117592,117594,117596,117598,117600,117602,117604],{"class":39,"line":1831},[37,117593,24649],{"class":2035},[37,117595,117364],{"class":309},[37,117597,117394],{"class":309},[37,117599,28975],{"class":50},[37,117601,117453],{"class":309},[37,117603,279],{"class":54},[37,117605,51375],{"class":50},[37,117607,117608],{"class":39,"line":1836},[37,117609,2472],{"emptyLinePlaceholder":131},[37,117611,117612],{"class":39,"line":1850},[37,117613,117614],{"class":43},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[37,117616,117617,117619,117622,117624,117626,117628],{"class":39,"line":1855},[37,117618,117415],{"class":2035},[37,117620,117621],{"class":309}," show",[37,117623,28975],{"class":50},[37,117625,117453],{"class":309},[37,117627,279],{"class":54},[37,117629,51375],{"class":50},[37,117631,117632],{"class":39,"line":2649},[37,117633,2472],{"emptyLinePlaceholder":131},[37,117635,117636],{"class":39,"line":2663},[37,117637,117638],{"class":43},"#删除软件包命令\n",[37,117640,117641,117643,117645,117647,117649,117651,117653],{"class":39,"line":2671},[37,117642,24649],{"class":2035},[37,117644,117364],{"class":309},[37,117646,26152],{"class":309},[37,117648,28975],{"class":50},[37,117650,117453],{"class":309},[37,117652,279],{"class":54},[37,117654,51375],{"class":50},[37,117656,117657],{"class":39,"line":2676},[37,117658,2472],{"emptyLinePlaceholder":131},[37,117660,117661],{"class":39,"line":2682},[37,117662,117663],{"class":43},"# 清理旧版本和缓存（释放磁盘空间）\n",[37,117665,117666,117668,117670,117673],{"class":39,"line":2688},[37,117667,24649],{"class":2035},[37,117669,117364],{"class":309},[37,117671,117672],{"class":309}," autoremove",[37,117674,117675],{"class":43},"  # 删除不再需要的依赖和库文件\n",[37,117677,117678,117680,117682,117685],{"class":39,"line":2693},[37,117679,24649],{"class":2035},[37,117681,117364],{"class":309},[37,117683,117684],{"class":309}," clean",[37,117686,117687],{"class":43},"       # 清理下载的缓存包\n",[37,117689,117690],{"class":39,"line":8020},[37,117691,2472],{"emptyLinePlaceholder":131},[37,117693,117694],{"class":39,"line":8044},[37,117695,117696],{"class":43},"#移除软件包及配置文件\n",[37,117698,117699,117701,117703,117706,117708,117710,117712],{"class":39,"line":8049},[37,117700,24649],{"class":2035},[37,117702,117364],{"class":309},[37,117704,117705],{"class":309}," purge",[37,117707,28975],{"class":50},[37,117709,117453],{"class":309},[37,117711,279],{"class":54},[37,117713,51375],{"class":50},[37,117715,117716],{"class":39,"line":8055},[37,117717,2472],{"emptyLinePlaceholder":131},[37,117719,117720],{"class":39,"line":8082},[37,117721,117722],{"class":43},"#查找软件包命令\n",[37,117724,117725,117727,117729,117732,117734,117737,117739],{"class":39,"line":8087},[37,117726,24649],{"class":2035},[37,117728,117364],{"class":309},[37,117730,117731],{"class":309}," search",[37,117733,28975],{"class":50},[37,117735,117736],{"class":309},"keywor",[37,117738,519],{"class":54},[37,117740,51375],{"class":50},[37,117742,117743],{"class":39,"line":8093},[37,117744,2472],{"emptyLinePlaceholder":131},[37,117746,117747],{"class":39,"line":8105},[37,117748,117749],{"class":43},"#列出所有已安装的包\n",[37,117751,117752,117754,117756],{"class":39,"line":8117},[37,117753,117415],{"class":2035},[37,117755,117418],{"class":309},[37,117757,117758],{"class":82}," --installed\n",[37,117760,117761],{"class":39,"line":8129},[37,117762,2472],{"emptyLinePlaceholder":131},[37,117764,117765],{"class":39,"line":9788},[37,117766,117767],{"class":43},"#列出所有已安装的包的版本信息\n",[37,117769,117770,117772,117774],{"class":39,"line":9813},[37,117771,117415],{"class":2035},[37,117773,117418],{"class":309},[37,117775,117776],{"class":82}," --all-versions\n",[123,117778,117779],{},"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":32,"searchDepth":47,"depth":47,"links":117781},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117326,"description":128},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117788,"title":117789,"body":117790,"description":128,"extension":129,"meta":118531,"navigation":131,"path":118532,"seo":118533,"stem":118534,"__hash__":118535},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117791,"toc":118518},[117792,117795,117799,117802,117808,117812,117816,117822,117827,117832,117837,117842,117847,117850,117853,117856,117859,117863,117866,117871,117874,117879,117882,117887,117894,117897,117900,117903,117906,117909,117920,117924,117928,117933,117938,117942,117947,117951,117956,117960,117964,117969,117972,118017,118022,118026,118030,118035,118041,118046,118056,118061,118071,118076,118081,118108,118112,118115,118120,118123,118148,118152,118157,118160,118165,118170,118190,118195,118198,118213,118217,118270,118273,118278,118282,118285,118300,118303,118306,118311,118315,118319,118322,118326,118330,118333,118338,118343,118347,118354,118362,118365,118372,118377,118382,118385,118390,118397,118402,118409,118413,118415,118420,118424,118427,118430,118435,118438,118443,118446,118451,118456,118461,118465,118470,118474,118515],[10,117793,117789],{"id":117794},"_2-linux装机教程",[146,117796,117798],{"id":117797},"_21-实体机","2.1 实体机",[14,117800,117801],{},"使用清华源：（Ubuntu24.04）",[14,117803,117804],{},[443,117805,117806],{"href":117806,"rel":117807},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23937],[146,117809,117811],{"id":117810},"_22-普通虚拟机","2.2 普通虚拟机",[175,117813,117815],{"id":117814},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,117817,117818],{},[443,117819,117820],{"href":117820,"rel":117821},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23937],[14,117823,117824],{},[119,117825],{"alt":32,"src":117826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,117828,117829],{},[119,117830],{"alt":32,"src":117831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,117833,117834],{},[119,117835],{"alt":32,"src":117836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,117838,117839],{},[119,117840],{"alt":32,"src":117841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,117843,117844],{},[119,117845],{"alt":32,"src":117846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,117848,117849],{},"内存4G（4096MB）；",[14,117851,117852],{},"CPU给4个核；",[14,117854,117855],{},"硬盘动态分配60G；",[14,117857,117858],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[175,117860,117862],{"id":117861},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,117864,117865],{},"按照1.1的步骤下载Ubuntu",[14,117867,117868],{},[119,117869],{"alt":32,"src":117870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,117872,117873],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,117875,117876],{},[119,117877],{"alt":32,"src":117878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,117880,117881],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,117883,117884],{},[119,117885],{"alt":32,"src":117886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,117888,117889,117890,117893],{},"选择“正常安装”(找不到都用Alt+F7)， ",[354,117891,117892],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,117895,117896],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,117898,117899],{},"将改动写入磁盘吗 继续",[14,117901,117902],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,117904,117905],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,117907,117908],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,117910,117911,117912,117915,117916,117919],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[354,117913,117914],{},"除了"," 选不发送系统信息与不升级之外， ",[354,117917,117918],{},"其它"," 都跳过或前进）",[175,117921,117923],{"id":117922},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22070,117925,117927],{"id":117926},"_2231-全屏","2.2.3.1 全屏",[14,117929,117930],{},[119,117931],{"alt":32,"src":117932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,117934,117935],{},[119,117936],{"alt":32,"src":117937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22070,117939,117941],{"id":117940},"_2232-文件交换","2.2.3.2 文件交换",[14,117943,117944],{},[119,117945],{"alt":32,"src":117946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22070,117948,117950],{"id":117949},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,117952,117953],{},[119,117954],{"alt":32,"src":117955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[146,117957,117959],{"id":117958},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[175,117961,117963],{"id":117962},"_231-简介与优缺点","2.3.1 简介与优缺点",[158,117965,117966],{},[161,117967,117968],{},"什么情况下推荐？",[14,117970,117971],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[158,117973,117974],{"start":47},[161,117975,117976,117977],{},"优缺点：",[158,117978,117979,118009],{},[161,117980,117981,117982],{},"优点：",[158,117983,117984,117987,117994,117997,118000,118003,118006],{},[161,117985,117986],{},"WSL2是最好的Linux发行版;(bushi)",[161,117988,117989,117990,117993],{},"性能损耗极低。且比在Windows上跑深度性能 ",[354,117991,117992],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[161,117995,117996],{},"非常方便调用USB设备，可以USB直通;",[161,117998,117999],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[161,118001,118002],{},"非常方便Win与WSL2互相传文件等协同操作;",[161,118004,118005],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[161,118007,118008],{},"非常方便使用Windows的VScode远程开发;",[161,118010,118011,118012],{},"缺点：",[158,118013,118014],{},[161,118015,118016],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,118018,118019],{},[119,118020],{"alt":32,"src":118021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[175,118023,118025],{"id":118024},"_232-安装教程","2.3.2 安装教程",[22070,118027,118029],{"id":118028},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[158,118031,118032],{},[161,118033,118034],{},"方法一(图形界面)",[14,118036,118037,118038,24691],{},"用Win+R输入",[34,118039,118040],{},"appwiz.cpl",[14,118042,118043],{},[119,118044],{"alt":32,"src":118045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,118047,118048,118049,118052,118053,26546],{},"点击OK进入 ",[354,118050,118051],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[354,118054,118055],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,118057,118058],{},[119,118059],{"alt":32,"src":118060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,118062,118063,118064,101065,118067,118070],{},"选择 ",[354,118065,118066],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[354,118068,118069],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118072,118073],{},[119,118074],{"alt":32,"src":118075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[158,118077,118078],{"start":47},[161,118079,118080],{},"方法二(命令行)",[27,118082,118086],{"className":118083,"code":118084,"language":118085,"meta":32,"style":32},"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",[34,118087,118088,118093,118098,118103],{"__ignoreMap":32},[37,118089,118090],{"class":39,"line":40},[37,118091,118092],{},"# 开启 Linux 子系统\n",[37,118094,118095],{"class":39,"line":47},[37,118096,118097],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[37,118099,118100],{"class":39,"line":58},[37,118101,118102],{},"# 开启虚拟机平台\n",[37,118104,118105],{"class":39,"line":64},[37,118106,118107],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22070,118109,118111],{"id":118110},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118113,118114],{},"用管理员权限打开powershell",[14,118116,118117],{},[119,118118],{"alt":32,"src":118119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118121,118122],{},"升级WSL并设置默认版本为WSL2",[27,118124,118126],{"className":118083,"code":118125,"language":118085,"meta":32,"style":32},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[34,118127,118128,118133,118138,118143],{"__ignoreMap":32},[37,118129,118130],{"class":39,"line":40},[37,118131,118132],{},"# 更新 wsl\n",[37,118134,118135],{"class":39,"line":47},[37,118136,118137],{},"wsl --update\n",[37,118139,118140],{"class":39,"line":58},[37,118141,118142],{},"# 将 wsl 版本设置为 wsl2\n",[37,118144,118145],{"class":39,"line":64},[37,118146,118147],{},"wsl --set-default-version 2\n",[22070,118149,118151],{"id":118150},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[158,118153,118154],{},[161,118155,118156],{},"方式一(商店下载)",[14,118158,118159],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118161,118162],{},[119,118163],{"alt":32,"src":118164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[158,118166,118167],{"start":47},[161,118168,118169],{},"方式二(命令行安装)",[27,118171,118173],{"className":118083,"code":118172,"language":118085,"meta":32,"style":32},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[34,118174,118175,118180,118185],{"__ignoreMap":32},[37,118176,118177],{"class":39,"line":40},[37,118178,118179],{},"# 列出可安装的 Linux 版本\n",[37,118181,118182],{"class":39,"line":47},[37,118183,118184],{},"#（需要科学手段）\n",[37,118186,118187],{"class":39,"line":58},[37,118188,118189],{},"wsl --list --online\n",[14,118191,118192],{},[119,118193],{"alt":32,"src":118194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118196,118197],{},"选择对应发行版并安装",[27,118199,118201],{"className":118083,"code":118200,"language":118085,"meta":32,"style":32},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[34,118202,118203,118208],{"__ignoreMap":32},[37,118204,118205],{"class":39,"line":40},[37,118206,118207],{},"# Ubuntu安装完毕后需要重启系统\n",[37,118209,118210],{"class":39,"line":47},[37,118211,118212],{},"wsl --install -d Ubuntu-24.04\n",[22070,118214,118216],{"id":118215},"_2324-查看系统状态","2.3.2.4 查看系统状态",[27,118218,118220],{"className":118083,"code":118219,"language":118085,"meta":32,"style":32},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[34,118221,118222,118227,118232,118237,118242,118246,118250,118255,118260,118265],{"__ignoreMap":32},[37,118223,118224],{"class":39,"line":40},[37,118225,118226],{},"# 查看 wsl\n",[37,118228,118229],{"class":39,"line":47},[37,118230,118231],{},"wsl -l\n",[37,118233,118234],{"class":39,"line":58},[37,118235,118236],{},"# 查看 wsl 运行版本或模式\n",[37,118238,118239],{"class":39,"line":64},[37,118240,118241],{},"wsl -l -v\n",[37,118243,118244],{"class":39,"line":76},[37,118245,2472],{"emptyLinePlaceholder":131},[37,118247,118248],{"class":39,"line":92},[37,118249,2472],{"emptyLinePlaceholder":131},[37,118251,118252],{"class":39,"line":97},[37,118253,118254],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[37,118256,118257],{"class":39,"line":107},[37,118258,118259],{},"wsl --set-version \u003Cdistro> 2\n",[37,118261,118262],{"class":39,"line":1390},[37,118263,118264],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[37,118266,118267],{"class":39,"line":1402},[37,118268,118269],{},"wsl --unregister \u003Cdistro>\n",[14,118271,118272],{},"输出Version为2即正常",[14,118274,118275],{},[119,118276],{"alt":32,"src":118277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22070,118279,118281],{"id":118280},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118283,118284],{},"直接在Powershell里输入wsl命令进入子系统",[27,118286,118288],{"className":118083,"code":118287,"language":118085,"meta":32,"style":32},"# 进入子系统\nwsl\n",[34,118289,118290,118295],{"__ignoreMap":32},[37,118291,118292],{"class":39,"line":40},[37,118293,118294],{},"# 进入子系统\n",[37,118296,118297],{"class":39,"line":47},[37,118298,118299],{},"wsl\n",[14,118301,118302],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118304,118305],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118307,118308],{},[119,118309],{"alt":32,"src":118310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[175,118312,118314],{"id":118313},"_233-配置各种环境","2.3.3 配置各种环境",[22070,118316,118318],{"id":118317},"_2331-换源","2.3.3.1 换源",[14,118320,118321],{},"(同实体机LINUX，往下找教程)",[22070,118323,118325],{"id":118324},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22982,118327,118329],{"id":118328},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118331,118332],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118334,118335],{},[119,118336],{"alt":32,"src":118337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118339,118340],{},[119,118341],{"alt":32,"src":118342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[22982,118344,118346],{"id":118345},"_23322-cuda","2.3.3.2.2 CUDA",[14,118348,118349,118350],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[443,118351,118352],{"href":118352,"rel":118353},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23937],[14,118355,118356,118359],{},[119,118357],{"alt":32,"src":118358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[119,118360],{"alt":32,"src":118361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118363,118364],{},"在下方的网站，选择合适的版本。",[14,118366,118367,118368],{},"WSL2 专属 CUDA 指南：",[443,118369,118370],{"href":118370,"rel":118371},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23937],[14,118373,118374],{},[354,118375,118376],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118378,118379],{},[119,118380],{"alt":32,"src":118381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118383,118384],{},"挨行敲一遍",[14,118386,118387],{},[119,118388],{"alt":32,"src":118389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118391,118392,118393,118396],{},"敲完后，输入",[34,118394,118395],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118398,118399],{},[119,118400],{"alt":32,"src":118401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118403,118404,118405,118408],{},"（请详看下方教程的",[354,118406,118407],{},"安装CUDA的配置环境来看","如何配置环境）",[22982,118410,118412],{"id":118411},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118414,118321],{},[14,118416,118417],{},[119,118418],{"alt":32,"src":118419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22070,118421,118423],{"id":118422},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,118425,118426],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,118428,118429],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,118431,118432],{},[119,118433],{"alt":32,"src":118434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,118436,118437],{},"连接WSL2",[14,118439,118440],{},[119,118441],{"alt":32,"src":118442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,118444,118445],{},"远程开发成功。",[14,118447,118448],{},[119,118449],{"alt":32,"src":118450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,118452,118453],{},[119,118454],{"alt":32,"src":118455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,118457,118458],{},[119,118459],{"alt":32,"src":118460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22070,118462,118464],{"id":118463},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,118466,118467],{},[119,118468],{"alt":32,"src":118469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22070,118471,118473],{"id":118472},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[27,118475,118477],{"className":117343,"code":118476,"language":117345,"meta":32,"style":32},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[34,118478,118479,118487,118495,118506,118510],{"__ignoreMap":32},[37,118480,118481,118483,118485],{"class":39,"line":40},[37,118482,24649],{"class":2035},[37,118484,117364],{"class":309},[37,118486,26315],{"class":309},[37,118488,118489,118491,118493],{"class":39,"line":47},[37,118490,24649],{"class":2035},[37,118492,117364],{"class":309},[37,118494,117380],{"class":309},[37,118496,118497,118499,118501,118503],{"class":39,"line":58},[37,118498,24649],{"class":2035},[37,118500,117364],{"class":309},[37,118502,23906],{"class":309},[37,118504,118505],{"class":309}," mesa-utils\n",[37,118507,118508],{"class":39,"line":64},[37,118509,2472],{"emptyLinePlaceholder":131},[37,118511,118512],{"class":39,"line":76},[37,118513,118514],{"class":43},"#然后重启wsl2即可\n",[123,118516,118517],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":32,"searchDepth":47,"depth":47,"links":118519},[118520,118521,118526],{"id":117797,"depth":47,"text":117798},{"id":117810,"depth":47,"text":117811,"children":118522},[118523,118524,118525],{"id":117814,"depth":58,"text":117815},{"id":117861,"depth":58,"text":117862},{"id":117922,"depth":58,"text":117923},{"id":117958,"depth":47,"text":117959,"children":118527},[118528,118529,118530],{"id":117962,"depth":58,"text":117963},{"id":118024,"depth":58,"text":118025},{"id":118313,"depth":58,"text":118314},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117789,"description":128},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118537,"title":118538,"body":118539,"description":128,"extension":129,"meta":121475,"navigation":131,"path":121476,"seo":121477,"stem":121478,"__hash__":121479},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118540,"toc":121447},[118541,118544,118548,118554,118558,118564,118568,118756,118759,118764,118768,118772,118775,118778,118784,118789,118792,118795,118800,118833,118838,118842,118919,118922,118927,118931,118934,118973,118976,118985,119003,119008,119015,119132,119137,119140,119167,119172,119176,119185,119235,119242,119246,119249,119263,119270,119304,119309,119313,119336,119339,119344,119348,119351,119354,119357,119399,119403,119406,119409,119450,119454,119458,119461,119466,119471,119474,119497,119500,119508,119513,119516,119521,119526,119529,119534,119538,119543,119566,119571,119633,119641,119646,119651,119654,119659,119662,119667,119672,119690,119695,119701,119706,119720,119724,119727,119730,119733,119776,119779,119784,119885,119888,119893,119897,119901,119938,119942,119946,119950,119996,120000,120045,120049,120056,120064,120119,120122,120199,120202,120225,120229,120232,120237,120242,120250,120253,120258,120263,120268,120271,120276,120285,120288,120293,120296,120367,120372,120375,120380,120383,120388,120391,120396,120399,120404,120409,120412,120487,120490,120503,120508,120511,120525,120528,120557,120562,120591,120594,120599,120603,120608,120617,120620,120625,120628,120633,120636,120639,120644,120647,120652,120657,120660,120665,120668,120793,120798,120828,120831,120836,120841,120858,120861,120904,120907,120934,120939,120952,121095,121099,121104,121118,121121,121172,121175,121205,121208,121224,121229,121243,121246,121313,121318,121327,121332,121335,121347,121352,121359,121383,121386,121391,121394,121413,121418,121425,121437,121444],[10,118542,118538],{"id":118543},"_3-安装必备配置",[146,118545,118547],{"id":118546},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[27,118549,118552],{"className":118550,"code":118551,"language":5259},[5257],"  打开下方网站（注意，该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",[34,118553,118551],{"__ignoreMap":32},[175,118555,118557],{"id":118556},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[27,118559,118562],{"className":118560,"code":118561,"language":5259},[5257],"  输入以下命令\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",[34,118563,118561],{"__ignoreMap":32},[175,118565,118567],{"id":118566},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[27,118569,118573],{"className":118570,"code":118571,"language":118572,"meta":32,"style":32},"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",[34,118574,118575,118583,118594,118606,118620,118624,118634,118639,118643,118647,118652,118656,118668,118672,118677,118681,118692,118696,118712,118716,118727,118731,118736,118740,118748],{"__ignoreMap":32},[37,118576,118577,118579,118581],{"class":39,"line":40},[37,118578,24649],{"class":2035},[37,118580,117364],{"class":309},[37,118582,26315],{"class":309},[37,118584,118585,118587,118589,118591],{"class":39,"line":47},[37,118586,24649],{"class":2035},[37,118588,117364],{"class":309},[37,118590,23906],{"class":309},[37,118592,118593],{"class":309}," vim\n",[37,118595,118596,118598,118601,118603],{"class":39,"line":58},[37,118597,24649],{"class":2035},[37,118599,118600],{"class":309}," rm",[37,118602,25398],{"class":82},[37,118604,118605],{"class":309}," \u002Fetc\u002Fapt\u002Fsources.list\n",[37,118607,118608,118610,118612,118614,118617],{"class":39,"line":64},[37,118609,24649],{"class":2035},[37,118611,118600],{"class":309},[37,118613,25398],{"class":82},[37,118615,118616],{"class":309}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[37,118618,118619],{"class":82},"**\n",[37,118621,118622],{"class":39,"line":76},[37,118623,2472],{"emptyLinePlaceholder":131},[37,118625,118626,118628,118631],{"class":39,"line":92},[37,118627,24649],{"class":2035},[37,118629,118630],{"class":309}," vim",[37,118632,118633],{"class":309}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[37,118635,118636],{"class":39,"line":97},[37,118637,118638],{"class":309},"```\n",[37,118640,118641],{"class":39,"line":107},[37,118642,2472],{"emptyLinePlaceholder":131},[37,118644,118645],{"class":39,"line":1390},[37,118646,2472],{"emptyLinePlaceholder":131},[37,118648,118649],{"class":39,"line":1402},[37,118650,118651],{"class":2035},"选择好Ubuntu版本后，复制下方的内容。\n",[37,118653,118654],{"class":39,"line":1684},[37,118655,2472],{"emptyLinePlaceholder":131},[37,118657,118658,118660,118663,118666],{"class":39,"line":1689},[37,118659,431],{"class":50},[37,118661,118662],{"class":309},"[](",[37,118664,118665],{"class":2035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[37,118667,214],{"class":309},[37,118669,118670],{"class":39,"line":1695},[37,118671,2472],{"emptyLinePlaceholder":131},[37,118673,118674],{"class":39,"line":1700},[37,118675,118676],{"class":2035},"粘贴进去\n",[37,118678,118679],{"class":39,"line":1714},[37,118680,2472],{"emptyLinePlaceholder":131},[37,118682,118683,118685,118687,118690],{"class":39,"line":1719},[37,118684,431],{"class":50},[37,118686,118662],{"class":309},[37,118688,118689],{"class":2035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[37,118691,214],{"class":309},[37,118693,118694],{"class":39,"line":1725},[37,118695,2472],{"emptyLinePlaceholder":131},[37,118697,118698,118701,118704,118707,118709],{"class":39,"line":1746},[37,118699,118700],{"class":2035},"按一下ESC，然后英文冒号，输入",[37,118702,118703],{"class":309}," `",[37,118705,118706],{"class":2035},":wq!",[37,118708,1175],{"class":309},[37,118710,118711],{"class":2035},"然后回车\n",[37,118713,118714],{"class":39,"line":1751},[37,118715,2472],{"emptyLinePlaceholder":131},[37,118717,118718,118720,118722,118725],{"class":39,"line":1765},[37,118719,431],{"class":50},[37,118721,118662],{"class":309},[37,118723,118724],{"class":2035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[37,118726,214],{"class":309},[37,118728,118729],{"class":39,"line":1770},[37,118730,2472],{"emptyLinePlaceholder":131},[37,118732,118733],{"class":39,"line":1799},[37,118734,118735],{"class":2035},"输入以下命令\n",[37,118737,118738],{"class":39,"line":1804},[37,118739,2472],{"emptyLinePlaceholder":131},[37,118741,118742,118745],{"class":39,"line":1821},[37,118743,118744],{"class":309},"```",[37,118746,118747],{"class":2035},"Bash\n",[37,118749,118750,118752,118754],{"class":39,"line":1826},[37,118751,24649],{"class":2035},[37,118753,117364],{"class":309},[37,118755,26315],{"class":309},[14,118757,118758],{},"这里被替换成对应学校则成功",[14,118760,118761],{},[119,118762],{"alt":32,"src":118763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[146,118765,118767],{"id":118766},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[175,118769,118771],{"id":118770},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,118773,118774],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,118776,118777],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,118779,118780],{},[443,118781,118782],{"href":118782,"rel":118783},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23937],[14,118785,118786],{},[119,118787],{"alt":32,"src":118788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,118790,118791],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,118793,118794],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,118796,118797],{},[119,118798],{"alt":32,"src":118799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[27,118801,118803],{"className":117343,"code":118802,"language":117345,"meta":32,"style":32},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[34,118804,118805,118810,118817,118822],{"__ignoreMap":32},[37,118806,118807],{"class":39,"line":40},[37,118808,118809],{"class":43},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[37,118811,118812,118814],{"class":39,"line":47},[37,118813,101323],{"class":82},[37,118815,118816],{"class":309}," ~\u002FDownloads\n",[37,118818,118819],{"class":39,"line":58},[37,118820,118821],{"class":43},"#下方chrome安装包名不一定是这个，根据名字来看\n",[37,118823,118824,118826,118828,118830],{"class":39,"line":64},[37,118825,24649],{"class":2035},[37,118827,117364],{"class":309},[37,118829,23906],{"class":309},[37,118831,118832],{"class":309}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,118834,118835],{},[119,118836],{"alt":32,"src":118837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[175,118839,118841],{"id":118840},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[27,118843,118845],{"className":117343,"code":118844,"language":117345,"meta":32,"style":32},"# 老版\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",[34,118846,118847,118852,118860,118871,118876,118880,118885,118895,118903,118914],{"__ignoreMap":32},[37,118848,118849],{"class":39,"line":40},[37,118850,118851],{"class":43},"# 老版\n",[37,118853,118854,118856,118858],{"class":39,"line":47},[37,118855,24649],{"class":2035},[37,118857,117364],{"class":309},[37,118859,26315],{"class":309},[37,118861,118862,118864,118866,118868],{"class":39,"line":58},[37,118863,24649],{"class":2035},[37,118865,117364],{"class":309},[37,118867,23906],{"class":309},[37,118869,118870],{"class":309}," neofetch\n",[37,118872,118873],{"class":39,"line":64},[37,118874,118875],{"class":2035},"neofetch\n",[37,118877,118878],{"class":39,"line":76},[37,118879,2472],{"emptyLinePlaceholder":131},[37,118881,118882],{"class":39,"line":92},[37,118883,118884],{"class":43},"# 新版\n",[37,118886,118887,118889,118892],{"class":39,"line":97},[37,118888,24649],{"class":2035},[37,118890,118891],{"class":309}," add-apt-repository",[37,118893,118894],{"class":309}," ppa:zhangsongcui3371\u002Ffastfetch\n",[37,118896,118897,118899,118901],{"class":39,"line":107},[37,118898,24649],{"class":2035},[37,118900,117364],{"class":309},[37,118902,26315],{"class":309},[37,118904,118905,118907,118909,118911],{"class":39,"line":1390},[37,118906,24649],{"class":2035},[37,118908,117364],{"class":309},[37,118910,23906],{"class":309},[37,118912,118913],{"class":309}," fastfetch\n",[37,118915,118916],{"class":39,"line":1402},[37,118917,118918],{"class":2035},"fastfetch\n",[14,118920,118921],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,118923,118924],{},[119,118925],{"alt":32,"src":118926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[175,118928,118930],{"id":118929},"_323-移除snap应用","3.2.3 移除snap应用",[14,118932,118933],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[27,118935,118937],{"className":117343,"code":118936,"language":117345,"meta":32,"style":32},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[34,118938,118939,118951,118962],{"__ignoreMap":32},[37,118940,118941,118943,118945,118948],{"class":39,"line":40},[37,118942,24649],{"class":2035},[37,118944,26586],{"class":309},[37,118946,118947],{"class":309}," disable",[37,118949,118950],{"class":309}," snapd.service\n",[37,118952,118953,118955,118957,118959],{"class":39,"line":47},[37,118954,24649],{"class":2035},[37,118956,26586],{"class":309},[37,118958,118947],{"class":309},[37,118960,118961],{"class":309}," snapd.socket\n",[37,118963,118964,118966,118968,118970],{"class":39,"line":58},[37,118965,24649],{"class":2035},[37,118967,26586],{"class":309},[37,118969,118947],{"class":309},[37,118971,118972],{"class":309}," snapd.seeded.service\n",[14,118974,118975],{},"然后查看snap应用列表",[14,118977,118978,118979,118984],{},"根据你安装的选择不同（最小安装或普通安装），有",[443,118980,118983],{"href":118981,"rel":118982},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[23937],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[27,118986,118988],{"className":117343,"code":118987,"language":117345,"meta":32,"style":32},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[34,118989,118990,118995],{"__ignoreMap":32},[37,118991,118992],{"class":39,"line":40},[37,118993,118994],{"class":43},"# 查询当前系统上snap安装了哪些app\n",[37,118996,118997,119000],{"class":39,"line":47},[37,118998,118999],{"class":2035},"snap",[37,119001,119002],{"class":309}," list\n",[14,119004,119005],{},[119,119006],{"alt":32,"src":119007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,119009,119010,119011,119014],{},"卸载掉图中所有应用，按照 ",[354,119012,119013],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[27,119016,119018],{"className":117343,"code":119017,"language":117345,"meta":32,"style":32},"#移除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",[34,119019,119020,119025,119037,119042,119053,119058,119069,119074,119085,119090,119094,119099,119110,119121],{"__ignoreMap":32},[37,119021,119022],{"class":39,"line":40},[37,119023,119024],{"class":43},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[37,119026,119027,119029,119032,119034],{"class":39,"line":47},[37,119028,24649],{"class":2035},[37,119030,119031],{"class":309}," snap",[37,119033,26152],{"class":309},[37,119035,119036],{"class":309}," snap-store\n",[37,119038,119039],{"class":39,"line":58},[37,119040,119041],{"class":43},"#移除firefox浏览器\n",[37,119043,119044,119046,119048,119050],{"class":39,"line":64},[37,119045,24649],{"class":2035},[37,119047,119031],{"class":309},[37,119049,26152],{"class":309},[37,119051,119052],{"class":309}," firefox\n",[37,119054,119055],{"class":39,"line":76},[37,119056,119057],{"class":43},"#移除gnome-42-2204\n",[37,119059,119060,119062,119064,119066],{"class":39,"line":92},[37,119061,24649],{"class":2035},[37,119063,119031],{"class":309},[37,119065,26152],{"class":309},[37,119067,119068],{"class":309}," gnome-42-2204\n",[37,119070,119071],{"class":39,"line":97},[37,119072,119073],{"class":43},"#移除gtk-common-themes\n",[37,119075,119076,119078,119080,119082],{"class":39,"line":107},[37,119077,24649],{"class":2035},[37,119079,119031],{"class":309},[37,119081,26152],{"class":309},[37,119083,119084],{"class":309}," gtk-common-themes\n",[37,119086,119087],{"class":39,"line":1390},[37,119088,119089],{"class":43},"#移除其它...\n",[37,119091,119092],{"class":39,"line":1402},[37,119093,2746],{"class":54},[37,119095,119096],{"class":39,"line":1684},[37,119097,119098],{"class":43},"#移除core22,bare以及snapd\n",[37,119100,119101,119103,119105,119107],{"class":39,"line":1689},[37,119102,24649],{"class":2035},[37,119104,119031],{"class":309},[37,119106,26152],{"class":309},[37,119108,119109],{"class":309}," core22\n",[37,119111,119112,119114,119116,119118],{"class":39,"line":1695},[37,119113,24649],{"class":2035},[37,119115,119031],{"class":309},[37,119117,26152],{"class":309},[37,119119,119120],{"class":309}," bare\n",[37,119122,119123,119125,119127,119129],{"class":39,"line":1700},[37,119124,24649],{"class":2035},[37,119126,119031],{"class":309},[37,119128,26152],{"class":309},[37,119130,119131],{"class":309}," snapd\n",[14,119133,119134],{},[119,119135],{"alt":32,"src":119136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119138,119139],{},"输入以下命令查看是否还有snap包",[27,119141,119143],{"className":117343,"code":119142,"language":117345,"meta":32,"style":32},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[34,119144,119145,119151,119155,119159,119163],{"__ignoreMap":32},[37,119146,119147,119149],{"class":39,"line":40},[37,119148,118999],{"class":2035},[37,119150,119002],{"class":309},[37,119152,119153],{"class":39,"line":47},[37,119154,118851],{"class":43},[37,119156,119157],{"class":39,"line":58},[37,119158,118875],{"class":2035},[37,119160,119161],{"class":39,"line":64},[37,119162,118884],{"class":43},[37,119164,119165],{"class":39,"line":76},[37,119166,118918],{"class":2035},[14,119168,119169],{},[119,119170],{"alt":32,"src":119171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[175,119173,119175],{"id":119174},"_324-移除snap","3.2.4 移除snap",[14,119177,119178,119179,119184],{},"在删除掉",[443,119180,119183],{"href":119181,"rel":119182},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[23937],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[27,119186,119188],{"className":117343,"code":119187,"language":117345,"meta":32,"style":32}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[34,119189,119190,119195,119208,119213,119224],{"__ignoreMap":32},[37,119191,119192],{"class":39,"line":40},[37,119193,119194],{"class":43}," #使用apt移除掉snap\n",[37,119196,119197,119199,119201,119203,119206],{"class":39,"line":47},[37,119198,24649],{"class":2035},[37,119200,117364],{"class":309},[37,119202,117672],{"class":309},[37,119204,119205],{"class":82}," --purge",[37,119207,119131],{"class":309},[37,119209,119210],{"class":39,"line":58},[37,119211,119212],{"class":43},"#移除snapd的一些目录\n",[37,119214,119215,119217,119219,119221],{"class":39,"line":64},[37,119216,24649],{"class":2035},[37,119218,118600],{"class":309},[37,119220,25398],{"class":82},[37,119222,119223],{"class":309}," \u002Fvar\u002Fcache\u002Fsnapd\n",[37,119225,119226,119228,119230,119232],{"class":39,"line":76},[37,119227,24649],{"class":2035},[37,119229,118600],{"class":309},[37,119231,25398],{"class":82},[37,119233,119234],{"class":309}," ~\u002Fsnap\n",[14,119236,119237,119238,119241],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[34,119239,119240],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[175,119243,119245],{"id":119244},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119247,119248],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[27,119250,119252],{"className":117343,"code":119251,"language":117345,"meta":32,"style":32},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[34,119253,119254],{"__ignoreMap":32},[37,119255,119256,119258,119260],{"class":39,"line":40},[37,119257,24649],{"class":2035},[37,119259,118630],{"class":309},[37,119261,119262],{"class":309}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119264,119265,119266,119269],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[34,119267,119268],{},":wq"," 回车",[27,119271,119273],{"className":117343,"code":119272,"language":117345,"meta":32,"style":32},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[34,119274,119275,119282,119296],{"__ignoreMap":32},[37,119276,119277,119280],{"class":39,"line":40},[37,119278,119279],{"class":2035},"Package:",[37,119281,119131],{"class":309},[37,119283,119284,119287,119290,119293],{"class":39,"line":47},[37,119285,119286],{"class":2035},"Pin:",[37,119288,119289],{"class":309}," release",[37,119291,119292],{"class":309}," a=",[37,119294,119295],{"class":82},"*\n",[37,119297,119298,119301],{"class":39,"line":58},[37,119299,119300],{"class":2035},"Pin-Priority:",[37,119302,119303],{"class":82}," -10\n",[14,119305,119306],{},[119,119307],{"alt":32,"src":119308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[175,119310,119312],{"id":119311},"_326-测试是否成功","3.2.6 测试是否成功",[27,119314,119316],{"className":117343,"code":119315,"language":117345,"meta":32,"style":32},"sudo apt update\nsudo apt install firefox\n",[34,119317,119318,119326],{"__ignoreMap":32},[37,119319,119320,119322,119324],{"class":39,"line":40},[37,119321,24649],{"class":2035},[37,119323,117364],{"class":309},[37,119325,26315],{"class":309},[37,119327,119328,119330,119332,119334],{"class":39,"line":47},[37,119329,24649],{"class":2035},[37,119331,117364],{"class":309},[37,119333,23906],{"class":309},[37,119335,119052],{"class":309},[14,119337,119338],{},"这里提示snapd无法被安装，就证明成功了",[14,119340,119341],{},[119,119342],{"alt":32,"src":119343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[175,119345,119347],{"id":119346},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119349,119350],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119352,119353],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119355,119356],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[27,119358,119360],{"className":117343,"code":119359,"language":117345,"meta":32,"style":32},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[34,119361,119362,119367,119376,119381,119389],{"__ignoreMap":32},[37,119363,119364],{"class":39,"line":40},[37,119365,119366],{"class":43},"# 添加Mozilla提供的源\n",[37,119368,119369,119371,119373],{"class":39,"line":47},[37,119370,24649],{"class":2035},[37,119372,118891],{"class":309},[37,119374,119375],{"class":309}," ppa:mozillateam\u002Fppa\n",[37,119377,119378],{"class":39,"line":58},[37,119379,119380],{"class":43},"# 安装Firefox\n",[37,119382,119383,119385,119387],{"class":39,"line":64},[37,119384,24649],{"class":2035},[37,119386,117364],{"class":309},[37,119388,26315],{"class":309},[37,119390,119391,119393,119395,119397],{"class":39,"line":76},[37,119392,24649],{"class":2035},[37,119394,117364],{"class":309},[37,119396,23906],{"class":309},[37,119398,119052],{"class":309},[175,119400,119402],{"id":119401},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119404,119405],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119407,119408],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[27,119410,119412],{"className":117343,"code":119411,"language":117345,"meta":32,"style":32},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[34,119413,119414,119419,119429,119437,119441],{"__ignoreMap":32},[37,119415,119416],{"class":39,"line":40},[37,119417,119418],{"class":43},"#删掉禁止安装snap的配置文件\n",[37,119420,119421,119423,119425,119427],{"class":39,"line":47},[37,119422,24649],{"class":2035},[37,119424,118600],{"class":309},[37,119426,25398],{"class":82},[37,119428,119262],{"class":309},[37,119430,119431,119433,119435],{"class":39,"line":58},[37,119432,24649],{"class":2035},[37,119434,117364],{"class":309},[37,119436,26315],{"class":309},[37,119438,119439],{"class":39,"line":64},[37,119440,2472],{"emptyLinePlaceholder":131},[37,119442,119443,119445,119447],{"class":39,"line":76},[37,119444,24649],{"class":2035},[37,119446,117364],{"class":309},[37,119448,119449],{"class":309}," dist-update\n",[146,119451,119453],{"id":119452},"_33-中文输入法","3.3 中文输入法",[175,119455,119457],{"id":119456},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,119459,119460],{},"官网下载搜狗输入法",[14,119462,119463],{},[119,119464],{"alt":32,"src":119465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,119467,119468],{},[119,119469],{"alt":32,"src":119470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,119472,119473],{},"打开终端输入如下",[27,119475,119477],{"className":117343,"code":119476,"language":117345,"meta":32,"style":32},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[34,119478,119479,119486],{"__ignoreMap":32},[37,119480,119481,119483],{"class":39,"line":40},[37,119482,101323],{"class":82},[37,119484,119485],{"class":309}," ~\u002FDownloads\u002F\n",[37,119487,119488,119490,119492,119494],{"class":39,"line":47},[37,119489,24649],{"class":2035},[37,119491,117364],{"class":309},[37,119493,23906],{"class":309},[37,119495,119496],{"class":309}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,119498,119499],{},"打开Fcitx",[14,119501,119502,119505],{},[119,119503],{"alt":32,"src":119504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[119,119506],{"alt":32,"src":119507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,119509,119510],{},[119,119511],{"alt":32,"src":119512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,119514,119515],{},"添加搜狗输入法",[14,119517,119518],{},[119,119519],{"alt":32,"src":119520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,119522,119523],{},[119,119524],{"alt":32,"src":119525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,119527,119528],{},"将搜狗输入法设置为唯一输入法",[14,119530,119531],{},[119,119532],{"alt":32,"src":119533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[175,119535,119537],{"id":119536},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[158,119539,119540],{},[161,119541,119542],{},"卸载旧输入法",[27,119544,119546],{"className":118570,"code":119545,"language":118572,"meta":32,"style":32},"sudo apt purge fcitx* ibus*\n",[34,119547,119548],{"__ignoreMap":32},[37,119549,119550,119552,119554,119556,119559,119561,119564],{"class":39,"line":40},[37,119551,24649],{"class":2035},[37,119553,117364],{"class":309},[37,119555,117705],{"class":309},[37,119557,119558],{"class":309}," fcitx",[37,119560,659],{"class":82},[37,119562,119563],{"class":309}," ibus",[37,119565,119295],{"class":82},[158,119567,119568],{"start":47},[161,119569,119570],{},"安装Fcitx5",[27,119572,119574],{"className":117343,"code":119573,"language":117345,"meta":32,"style":32},"# 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",[34,119575,119576,119581,119595,119599,119604,119613,119621],{"__ignoreMap":32},[37,119577,119578],{"class":39,"line":40},[37,119579,119580],{"class":43},"# Ubuntu22.04及以上、Debian12及以上\n",[37,119582,119583,119585,119587,119589,119592],{"class":39,"line":47},[37,119584,24649],{"class":2035},[37,119586,117364],{"class":309},[37,119588,23906],{"class":309},[37,119590,119591],{"class":309}," fcitx5",[37,119593,119594],{"class":309}," fcitx5-chinese-addons\n",[37,119596,119597],{"class":39,"line":58},[37,119598,2472],{"emptyLinePlaceholder":131},[37,119600,119601],{"class":39,"line":64},[37,119602,119603],{"class":43},"# Ubuntu20.04\n",[37,119605,119606,119608,119610],{"class":39,"line":76},[37,119607,24649],{"class":2035},[37,119609,118891],{"class":309},[37,119611,119612],{"class":309}," ppa:zhsj\u002Ffcitx5\n",[37,119614,119615,119617,119619],{"class":39,"line":92},[37,119616,24649],{"class":2035},[37,119618,117364],{"class":309},[37,119620,26315],{"class":309},[37,119622,119623,119625,119627,119629,119631],{"class":39,"line":97},[37,119624,24649],{"class":2035},[37,119626,117364],{"class":309},[37,119628,23906],{"class":309},[37,119630,119591],{"class":309},[37,119632,119594],{"class":309},[158,119634,119635,119638],{"start":58},[161,119636,119637],{},"Reboot System",[161,119639,119640],{},"启动Fcitx5",[14,119642,119643],{},[119,119644],{"alt":32,"src":119645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[158,119647,119648],{"start":76},[161,119649,119650],{},"修改一些设置",[14,119652,119653],{},"将Pinyin和Keyboard - English US加入到左边。",[14,119655,119656],{},[119,119657],{"alt":32,"src":119658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,119660,119661],{},"添加快捷键以便于更好切换中英文",[14,119663,119664],{},[119,119665],{"alt":32,"src":119666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[158,119668,119669],{"start":92},[161,119670,119671],{},"重启",[27,119673,119675],{"className":118570,"code":119674,"language":118572,"meta":32,"style":32},"sudo shutdown -r now\n",[34,119676,119677],{"__ignoreMap":32},[37,119678,119679,119681,119684,119687],{"class":39,"line":40},[37,119680,24649],{"class":2035},[37,119682,119683],{"class":309}," shutdown",[37,119685,119686],{"class":82}," -r",[37,119688,119689],{"class":309}," now\n",[158,119691,119692],{"start":97},[161,119693,119694],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,119696,119697],{},[443,119698,119699],{"href":119699,"rel":119700},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23937],[158,119702,119703],{"start":107},[161,119704,119705],{},"再重启",[27,119707,119708],{"className":118570,"code":119674,"language":118572,"meta":32,"style":32},[34,119709,119710],{"__ignoreMap":32},[37,119711,119712,119714,119716,119718],{"class":39,"line":40},[37,119713,24649],{"class":2035},[37,119715,119683],{"class":309},[37,119717,119686],{"class":82},[37,119719,119689],{"class":309},[146,119721,119723],{"id":119722},"_34-pip3源替换","3.4 pip3源替换",[14,119725,119726],{},"非Debian系发行版需要做。",[14,119728,119729],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,119731,119732],{},"使用dnf的系统也可能不用做。",[27,119734,119736],{"className":117343,"code":119735,"language":117345,"meta":32,"style":32},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[34,119737,119738,119743,119750,119755,119760],{"__ignoreMap":32},[37,119739,119740],{"class":39,"line":40},[37,119741,119742],{"class":43},"# 检查是否已安装 pip\n",[37,119744,119745,119748],{"class":39,"line":47},[37,119746,119747],{"class":2035},"pip3",[37,119749,26366],{"class":82},[37,119751,119752],{"class":39,"line":58},[37,119753,119754],{"class":43},"# 如果未安装，先安装 pip3（见下方）\n",[37,119756,119757],{"class":39,"line":64},[37,119758,119759],{"class":43},"# 配置 pip 使用清华源\n",[37,119761,119762,119764,119767,119770,119773],{"class":39,"line":76},[37,119763,119747],{"class":2035},[37,119765,119766],{"class":309}," config",[37,119768,119769],{"class":309}," set",[37,119771,119772],{"class":309}," global.index-url",[37,119774,119775],{"class":309}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,119777,119778],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,119780,119781],{},[119,119782],{"alt":32,"src":119783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[27,119785,119787],{"className":117343,"code":119786,"language":117345,"meta":32,"style":32},"#安装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",[34,119788,119789,119794,119802,119813,119817,119822,119841,119845,119850,119862,119866,119871],{"__ignoreMap":32},[37,119790,119791],{"class":39,"line":40},[37,119792,119793],{"class":43},"#安装pip3\n",[37,119795,119796,119798,119800],{"class":39,"line":47},[37,119797,24649],{"class":2035},[37,119799,117364],{"class":309},[37,119801,26315],{"class":309},[37,119803,119804,119806,119808,119810],{"class":39,"line":58},[37,119805,24649],{"class":2035},[37,119807,26149],{"class":309},[37,119809,23906],{"class":309},[37,119811,119812],{"class":309}," python3-pip\n",[37,119814,119815],{"class":39,"line":64},[37,119816,2472],{"emptyLinePlaceholder":131},[37,119818,119819],{"class":39,"line":76},[37,119820,119821],{"class":43},"#更新pip3\n",[37,119823,119824,119826,119828,119830,119832,119834,119837,119839],{"class":39,"line":92},[37,119825,100926],{"class":2035},[37,119827,100929],{"class":82},[37,119829,100952],{"class":309},[37,119831,23906],{"class":309},[37,119833,26503],{"class":82},[37,119835,119836],{"class":309}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[37,119838,100957],{"class":82},[37,119840,100960],{"class":309},[37,119842,119843],{"class":39,"line":97},[37,119844,2472],{"emptyLinePlaceholder":131},[37,119846,119847],{"class":39,"line":107},[37,119848,119849],{"class":43},"#设置pip源为清华源\n",[37,119851,119852,119854,119856,119858,119860],{"class":39,"line":1390},[37,119853,119747],{"class":2035},[37,119855,119766],{"class":309},[37,119857,119769],{"class":309},[37,119859,119772],{"class":309},[37,119861,119775],{"class":309},[37,119863,119864],{"class":39,"line":1402},[37,119865,2472],{"emptyLinePlaceholder":131},[37,119867,119868],{"class":39,"line":1684},[37,119869,119870],{"class":43},"#测试\n",[37,119872,119873,119875,119877,119879,119881,119883],{"class":39,"line":1689},[37,119874,100926],{"class":2035},[37,119876,100929],{"class":82},[37,119878,100952],{"class":309},[37,119880,23906],{"class":309},[37,119882,100957],{"class":82},[37,119884,100960],{"class":309},[14,119886,119887],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,119889,119890],{},[119,119891],{"alt":32,"src":119892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[146,119894,119896],{"id":119895},"_35-显卡驱动安装","3.5 显卡驱动安装",[175,119898,119900],{"id":119899},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[27,119902,119904],{"className":118570,"code":119903,"language":118572,"meta":32,"style":32},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[34,119905,119906,119911,119926,119931],{"__ignoreMap":32},[37,119907,119908],{"class":39,"line":40},[37,119909,119910],{"class":43},"# 如果是使用apt安装的驱动\n",[37,119912,119913,119915,119917,119919,119921,119924],{"class":39,"line":47},[37,119914,24649],{"class":2035},[37,119916,26149],{"class":309},[37,119918,26152],{"class":309},[37,119920,119205],{"class":82},[37,119922,119923],{"class":309}," nvidia",[37,119925,119295],{"class":82},[37,119927,119928],{"class":39,"line":58},[37,119929,119930],{"class":43},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[37,119932,119933,119935],{"class":39,"line":64},[37,119934,24649],{"class":2035},[37,119936,119937],{"class":309}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[175,119939,119941],{"id":119940},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22070,119943,119945],{"id":119944},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22982,119947,119949],{"id":119948},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[27,119951,119953],{"className":118570,"code":119952,"language":118572,"meta":32,"style":32},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[34,119954,119955,119960,119971,119976,119986,119991],{"__ignoreMap":32},[37,119956,119957],{"class":39,"line":40},[37,119958,119959],{"class":43},"# 安装英伟达驱动\n",[37,119961,119962,119964,119966,119968],{"class":39,"line":47},[37,119963,24649],{"class":2035},[37,119965,117364],{"class":309},[37,119967,23906],{"class":309},[37,119969,119970],{"class":309}," nvidia-driver-版本号\n",[37,119972,119973],{"class":39,"line":58},[37,119974,119975],{"class":43},"# 重启 \n",[37,119977,119978,119980,119982,119984],{"class":39,"line":64},[37,119979,24649],{"class":2035},[37,119981,119683],{"class":309},[37,119983,119686],{"class":82},[37,119985,119689],{"class":309},[37,119987,119988],{"class":39,"line":76},[37,119989,119990],{"class":43},"# 检查驱动是否安装成功\n",[37,119992,119993],{"class":39,"line":92},[37,119994,119995],{"class":2035},"nvidia-smi\n",[22982,119997,119999],{"id":119998},"_35212-debian","3.5.2.1.2 Debian",[27,120001,120003],{"className":118570,"code":120002,"language":118572,"meta":32,"style":32},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[34,120004,120005,120009,120023,120027,120037,120041],{"__ignoreMap":32},[37,120006,120007],{"class":39,"line":40},[37,120008,119959],{"class":43},[37,120010,120011,120013,120015,120017,120020],{"class":39,"line":47},[37,120012,24649],{"class":2035},[37,120014,117364],{"class":309},[37,120016,23906],{"class":309},[37,120018,120019],{"class":309}," nvidia-driver",[37,120021,120022],{"class":309}," nvidia-settings\n",[37,120024,120025],{"class":39,"line":58},[37,120026,119975],{"class":43},[37,120028,120029,120031,120033,120035],{"class":39,"line":64},[37,120030,24649],{"class":2035},[37,120032,119683],{"class":309},[37,120034,119686],{"class":82},[37,120036,119689],{"class":309},[37,120038,120039],{"class":39,"line":76},[37,120040,119990],{"class":43},[37,120042,120043],{"class":39,"line":92},[37,120044,119995],{"class":2035},[22070,120046,120048],{"id":120047},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,120050,120051,120052,120055],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[354,120053,120054],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,120057,120058,120059],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23625,120060,120061],{},[354,120062,120063],{},"（也可以不禁用桌面环境，直接进行下一步。）",[27,120065,120067],{"className":118570,"code":120066,"language":118572,"meta":32,"style":32},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[34,120068,120069,120074,120084,120089,120102,120107],{"__ignoreMap":32},[37,120070,120071],{"class":39,"line":40},[37,120072,120073],{"class":43},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[37,120075,120076,120078,120081],{"class":39,"line":47},[37,120077,24649],{"class":2035},[37,120079,120080],{"class":309}," telinit",[37,120082,120083],{"class":82}," 3\n",[37,120085,120086],{"class":39,"line":58},[37,120087,120088],{"class":43},"# ubuntu 使用下方命令\n",[37,120090,120091,120093,120096,120099],{"class":39,"line":64},[37,120092,24649],{"class":2035},[37,120094,120095],{"class":309}," service",[37,120097,120098],{"class":309}," lightdm",[37,120100,120101],{"class":309}," stop\n",[37,120103,120104],{"class":39,"line":76},[37,120105,120106],{"class":43},"# Fedora 使用下方命令\n",[37,120108,120109,120111,120113,120116],{"class":39,"line":92},[37,120110,24649],{"class":2035},[37,120112,26586],{"class":309},[37,120114,120115],{"class":309}," isolate",[37,120117,120118],{"class":309}," multi-user.target\n",[14,120120,120121],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[27,120123,120125],{"className":118570,"code":120124,"language":118572,"meta":32,"style":32},"# 编译环境+准备工作\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",[34,120126,120127,120132,120143,120148,120155,120160,120172,120177,120184,120189],{"__ignoreMap":32},[37,120128,120129],{"class":39,"line":40},[37,120130,120131],{"class":43},"# 编译环境+准备工作\n",[37,120133,120134,120136,120138,120140],{"class":39,"line":47},[37,120135,24649],{"class":2035},[37,120137,117364],{"class":309},[37,120139,23906],{"class":309},[37,120141,120142],{"class":309}," build-essential\n",[37,120144,120145],{"class":39,"line":58},[37,120146,120147],{"class":43},"# 进入到.run目录中\n",[37,120149,120150,120152],{"class":39,"line":64},[37,120151,101323],{"class":82},[37,120153,120154],{"class":309}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[37,120156,120157],{"class":39,"line":76},[37,120158,120159],{"class":43},"# 给驱动文件增加可执行权限：\n",[37,120161,120162,120164,120166,120169],{"class":39,"line":92},[37,120163,24649],{"class":2035},[37,120165,24652],{"class":309},[37,120167,120168],{"class":309}," a+x",[37,120170,120171],{"class":309}," NVIDIA-Linux-x86_64-550.107.02.run\n",[37,120173,120174],{"class":39,"line":97},[37,120175,120176],{"class":43},"# 然后执行安装：\n",[37,120178,120179,120181],{"class":39,"line":107},[37,120180,24649],{"class":2035},[37,120182,120183],{"class":309}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[37,120185,120186],{"class":39,"line":1390},[37,120187,120188],{"class":43},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[37,120190,120191,120193,120196],{"class":39,"line":1402},[37,120192,24649],{"class":2035},[37,120194,120195],{"class":309}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[37,120197,120198],{"class":82},"  --no-opengl-files\n",[14,120200,120201],{},"安装完毕重启即可",[27,120203,120205],{"className":118570,"code":120204,"language":118572,"meta":32,"style":32},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[34,120206,120207,120211,120217,120221],{"__ignoreMap":32},[37,120208,120209],{"class":39,"line":40},[37,120210,119975],{"class":43},[37,120212,120213,120215],{"class":39,"line":47},[37,120214,24649],{"class":2035},[37,120216,26720],{"class":309},[37,120218,120219],{"class":39,"line":58},[37,120220,119990],{"class":43},[37,120222,120223],{"class":39,"line":64},[37,120224,119995],{"class":2035},[175,120226,120228],{"id":120227},"_353-安装cuda","3.5.3 安装CUDA",[14,120230,120231],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120233,120234],{},[119,120235],{"alt":32,"src":120236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[158,120238,120239],{},[161,120240,120241],{},"先查看显卡驱动所支持的最高CUDA版本",[27,120243,120244],{"className":118570,"code":119995,"language":118572,"meta":32,"style":32},[34,120245,120246],{"__ignoreMap":32},[37,120247,120248],{"class":39,"line":40},[37,120249,119995],{"class":2035},[14,120251,120252],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120254,120255],{},[119,120256],{"alt":32,"src":120257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[158,120259,120260],{"start":47},[161,120261,120262],{},"下载CUDA并安装CUDA",[14,120264,118349,120265],{},[443,120266,118352],{"href":118352,"rel":120267},[23937],[14,120269,120270],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120272,120273],{},[119,120274],{"alt":32,"src":120275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120277,120278,120279,120284],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[443,120280,120283],{"href":120281,"rel":120282},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23937],"Vinci机器人队单片机教程","）",[14,120286,120287],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120289,120290],{},[119,120291],{"alt":32,"src":120292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120294,120295],{},"将最下方框框里的命令敲入终端",[27,120297,120299],{"className":118570,"code":120298,"language":118572,"meta":32,"style":32},"# 在当前文件夹下创建一个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",[34,120300,120301,120306,120315,120320,120327,120332,120340,120345,120356,120361],{"__ignoreMap":32},[37,120302,120303],{"class":39,"line":40},[37,120304,120305],{"class":43},"# 在当前文件夹下创建一个ttt的子文件夹\n",[37,120307,120308,120310,120312],{"class":39,"line":47},[37,120309,101313],{"class":2035},[37,120311,29289],{"class":82},[37,120313,120314],{"class":309}," .\u002Fttt\n",[37,120316,120317],{"class":39,"line":58},[37,120318,120319],{"class":43},"# 进入ttt文件夹\n",[37,120321,120322,120324],{"class":39,"line":64},[37,120323,101323],{"class":82},[37,120325,120326],{"class":309}," ttt\n",[37,120328,120329],{"class":39,"line":76},[37,120330,120331],{"class":43},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[37,120333,120334,120337],{"class":39,"line":92},[37,120335,120336],{"class":2035},"wget",[37,120338,120339],{"class":309}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[37,120341,120342],{"class":39,"line":97},[37,120343,120344],{"class":43},"# 给予权限\n",[37,120346,120347,120349,120351,120353],{"class":39,"line":107},[37,120348,24649],{"class":2035},[37,120350,24652],{"class":309},[37,120352,120168],{"class":309},[37,120354,120355],{"class":309}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[37,120357,120358],{"class":39,"line":1390},[37,120359,120360],{"class":43},"# 运行脚本\n",[37,120362,120363,120365],{"class":39,"line":1402},[37,120364,24649],{"class":2035},[37,120366,120355],{"class":309},[14,120368,120369],{},[119,120370],{"alt":32,"src":120371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120373,120374],{},"正在安装中：",[14,120376,120377],{},[119,120378],{"alt":32,"src":120379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120381,120382],{},"输入accept接受即可",[14,120384,120385],{},[119,120386],{"alt":32,"src":120387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120389,120390],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120392,120393],{},[119,120394],{"alt":32,"src":120395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120397,120398],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120400,120401],{},[119,120402],{"alt":32,"src":120403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[158,120405,120406],{"start":58},[161,120407,120408],{},"配置环境",[14,120410,120411],{},"根据上方确认一下路径，比如我上面红色框起来的为",[27,120413,120415],{"className":118570,"code":120414,"language":118572,"meta":32,"style":32},"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",[34,120416,120417,120433,120448],{"__ignoreMap":32},[37,120418,120419,120422,120425,120428,120431],{"class":39,"line":40},[37,120420,120421],{"class":2035},"Please",[37,120423,120424],{"class":309}," make",[37,120426,120427],{"class":309}," sure",[37,120429,120430],{"class":309}," that",[37,120432,2746],{"class":54},[37,120434,120435,120437,120440,120443,120446],{"class":39,"line":47},[37,120436,52339],{"class":2035},[37,120438,120439],{"class":309},"   PATH",[37,120441,120442],{"class":309}," includes",[37,120444,120445],{"class":309}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[37,120447,2746],{"class":54},[37,120449,120450,120452,120455,120457,120460,120463,120465,120468,120471,120474,120477,120479,120482,120484],{"class":39,"line":58},[37,120451,52339],{"class":2035},[37,120453,120454],{"class":309},"   LD_LIBRARY_PATH",[37,120456,120442],{"class":309},[37,120458,120459],{"class":309}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[37,120461,120462],{"class":309}," or,",[37,120464,5281],{"class":309},[37,120466,120467],{"class":309}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[37,120469,120470],{"class":309}," to",[37,120472,120473],{"class":309}," \u002Fetc\u002Fld.so.conf",[37,120475,120476],{"class":309}," and",[37,120478,27303],{"class":309},[37,120480,120481],{"class":309}," ldconfig",[37,120483,64672],{"class":309},[37,120485,120486],{"class":309}," root\n",[14,120488,120489],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[27,120491,120493],{"className":118570,"code":120492,"language":118572,"meta":32,"style":32},"which nvcc\n",[34,120494,120495],{"__ignoreMap":32},[37,120496,120497,120500],{"class":39,"line":40},[37,120498,120499],{"class":82},"which",[37,120501,120502],{"class":309}," nvcc\n",[14,120504,120505],{},[119,120506],{"alt":32,"src":120507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,120509,120510],{},"所以我进行以下操作：",[27,120512,120514],{"className":118570,"code":120513,"language":118572,"meta":32,"style":32},"sudo vim ~\u002F.bashrc\n",[34,120515,120516],{"__ignoreMap":32},[37,120517,120518,120520,120522],{"class":39,"line":40},[37,120519,24649],{"class":2035},[37,120521,118630],{"class":309},[37,120523,120524],{"class":309}," ~\u002F.bashrc\n",[14,120526,120527],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[27,120529,120531],{"className":118570,"code":120530,"language":118572,"meta":32,"style":32},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[34,120532,120533,120545],{"__ignoreMap":32},[37,120534,120535,120537,120540,120542],{"class":39,"line":40},[37,120536,25115],{"class":50},[37,120538,120539],{"class":54}," PATH",[37,120541,70],{"class":50},[37,120543,120544],{"class":54},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[37,120546,120547,120549,120552,120554],{"class":39,"line":47},[37,120548,25115],{"class":50},[37,120550,120551],{"class":54}," LD_LIBRARY_PATH",[37,120553,70],{"class":50},[37,120555,120556],{"class":54},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,120558,120559],{},[119,120560],{"alt":32,"src":120561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[27,120563,120565],{"className":118570,"code":120564,"language":118572,"meta":32,"style":32},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[34,120566,120567,120572,120578,120583],{"__ignoreMap":32},[37,120568,120569],{"class":39,"line":40},[37,120570,120571],{"class":43},"# 刷新当前终端的环境变量\n",[37,120573,120574,120576],{"class":39,"line":47},[37,120575,100940],{"class":82},[37,120577,120524],{"class":309},[37,120579,120580],{"class":39,"line":58},[37,120581,120582],{"class":43},"# 验证CUDA是否安装成功\n",[37,120584,120585,120588],{"class":39,"line":64},[37,120586,120587],{"class":2035},"nvcc",[37,120589,120590],{"class":82}," -V\n",[14,120592,120593],{},"出现下图这种则安装成功。",[14,120595,120596],{},[119,120597],{"alt":32,"src":120598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[175,120600,120602],{"id":120601},"_354-安装cudnn","3.5.4 安装cuDNN",[158,120604,120605],{},[161,120606,120607],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,120609,120610,120611,120616],{},"前往 NVIDIA cuDNN 下载页面：",[443,120612,120615],{"href":120613,"rel":120614},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[23937],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,120618,120619],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,120621,120622],{},[119,120623],{"alt":32,"src":120624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,120626,120627],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,120629,120630],{},[119,120631],{"alt":32,"src":120632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,120634,120635],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,120637,120638],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,120640,120641],{},[354,120642,120643],{},"我这里选择所有Linux X86_64最通用的办法：",[14,120645,120646],{},"下载好的：",[14,120648,120649],{},[119,120650],{"alt":32,"src":120651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[158,120653,120654],{"start":47},[161,120655,120656],{},"安装cuDNN",[14,120658,120659],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,120661,120662],{},[119,120663],{"alt":32,"src":120664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,120666,120667],{},"解压文件，并复制到对应位置完成安装",[27,120669,120671],{"className":118570,"code":120670,"language":118572,"meta":32,"style":32},"# 解压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",[34,120672,120673,120678,120689,120694,120701,120706,120722,120736,120741,120752,120761,120765,120781],{"__ignoreMap":32},[37,120674,120675],{"class":39,"line":40},[37,120676,120677],{"class":43},"# 解压cuDNN文件\n",[37,120679,120680,120683,120686],{"class":39,"line":47},[37,120681,120682],{"class":2035},"tar",[37,120684,120685],{"class":82}," -xvf",[37,120687,120688],{"class":309}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[37,120690,120691],{"class":39,"line":58},[37,120692,120693],{"class":43},"# cd进文件夹\n",[37,120695,120696,120698],{"class":39,"line":64},[37,120697,101323],{"class":82},[37,120699,120700],{"class":309}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[37,120702,120703],{"class":39,"line":76},[37,120704,120705],{"class":43},"# 复制cuDNN文件到CUDA目录\n",[37,120707,120708,120710,120712,120715,120717,120720],{"class":39,"line":92},[37,120709,24649],{"class":2035},[37,120711,27934],{"class":309},[37,120713,120714],{"class":309}," include\u002Fcudnn",[37,120716,659],{"class":82},[37,120718,120719],{"class":309},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[37,120721,2746],{"class":54},[37,120723,120724,120726,120728,120731,120733],{"class":39,"line":97},[37,120725,24649],{"class":2035},[37,120727,27934],{"class":309},[37,120729,120730],{"class":309}," lib\u002Flibcudnn",[37,120732,659],{"class":82},[37,120734,120735],{"class":309},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[37,120737,120738],{"class":39,"line":107},[37,120739,120740],{"class":43},"# 对比一下有没有缺文件\n",[37,120742,120743,120745,120748,120750],{"class":39,"line":1390},[37,120744,26834],{"class":2035},[37,120746,120747],{"class":309}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[37,120749,659],{"class":82},[37,120751,2746],{"class":54},[37,120753,120754,120756,120759],{"class":39,"line":1402},[37,120755,26834],{"class":2035},[37,120757,120758],{"class":309}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[37,120760,119295],{"class":82},[37,120762,120763],{"class":39,"line":1684},[37,120764,120344],{"class":43},[37,120766,120767,120769,120771,120774,120776,120778],{"class":39,"line":1689},[37,120768,24649],{"class":2035},[37,120770,24652],{"class":309},[37,120772,120773],{"class":309}," a+r",[37,120775,120747],{"class":309},[37,120777,659],{"class":82},[37,120779,120780],{"class":54},"   \n",[37,120782,120783,120785,120787,120789,120791],{"class":39,"line":1695},[37,120784,24649],{"class":2035},[37,120786,24652],{"class":309},[37,120788,120773],{"class":309},[37,120790,120758],{"class":309},[37,120792,119295],{"class":82},[158,120794,120795],{"start":58},[161,120796,120797],{},"检查是否安装成功",[27,120799,120801],{"className":118570,"code":120800,"language":118572,"meta":32,"style":32},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[34,120802,120803,120808],{"__ignoreMap":32},[37,120804,120805],{"class":39,"line":40},[37,120806,120807],{"class":43},"# 检查cuDNN版本命令\n",[37,120809,120810,120813,120816,120818,120820,120823,120826],{"class":39,"line":47},[37,120811,120812],{"class":2035},"cat",[37,120814,120815],{"class":309}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[37,120817,25182],{"class":50},[37,120819,30309],{"class":2035},[37,120821,120822],{"class":309}," CUDNN_MAJOR",[37,120824,120825],{"class":82}," -A",[37,120827,47791],{"class":82},[14,120829,120830],{},"出现下图这样的就是安装成功了",[14,120832,120833],{},[119,120834],{"alt":32,"src":120835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[158,120837,120838],{"start":64},[161,120839,120840],{},"软链接(一般不需要)",[27,120842,120844],{"className":118570,"code":120843,"language":118572,"meta":32,"style":32},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[34,120845,120846,120851],{"__ignoreMap":32},[37,120847,120848],{"class":39,"line":40},[37,120849,120850],{"class":43},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[37,120852,120853,120855],{"class":39,"line":47},[37,120854,24649],{"class":2035},[37,120856,120857],{"class":309}," ldconfig\n",[14,120859,120860],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[27,120862,120867],{"className":120863,"code":120864,"language":120865,"meta":120866,"style":32},"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",[34,120868,120869,120874,120879,120884,120889,120894,120899],{"__ignoreMap":32},[37,120870,120871],{"class":39,"line":40},[37,120872,120873],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[37,120875,120876],{"class":39,"line":47},[37,120877,120878],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[37,120880,120881],{"class":39,"line":58},[37,120882,120883],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[37,120885,120886],{"class":39,"line":64},[37,120887,120888],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[37,120890,120891],{"class":39,"line":76},[37,120892,120893],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[37,120895,120896],{"class":39,"line":92},[37,120897,120898],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[37,120900,120901],{"class":39,"line":97},[37,120902,120903],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,120905,120906],{},"运行下方的命令",[27,120908,120910],{"className":118570,"code":120909,"language":118572,"meta":32,"style":32},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[34,120911,120912,120917,120924,120929],{"__ignoreMap":32},[37,120913,120914],{"class":39,"line":40},[37,120915,120916],{"class":43},"# cd进入CUDA路径\n",[37,120918,120919,120921],{"class":39,"line":47},[37,120920,101323],{"class":82},[37,120922,120923],{"class":309}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[37,120925,120926],{"class":39,"line":58},[37,120927,120928],{"class":43}," # 查看本路径下的需要软链接的文件名\n",[37,120930,120931],{"class":39,"line":64},[37,120932,120933],{"class":2035}," ls\n",[14,120935,120936],{},[119,120937],{"alt":32,"src":120938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,120940,120941,120942,18482,120945,18482,120948,120951],{},"如上图，我需要将",[34,120943,120944],{},"libcudnn_xxx_xxxxx.so.8.9.7",[34,120946,120947],{},"libcudnn_xxx_xxxxx.so.8",[34,120949,120950],{},"libcudnn_xxx_xxxxx.so","软链接",[27,120953,120955],{"className":118570,"code":120954,"language":118572,"meta":32,"style":32},"# 创建符号链接。对于每个 .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",[34,120956,120957,120962,120978,120992,121006,121020,121034,121048,121062,121067,121073,121078],{"__ignoreMap":32},[37,120958,120959],{"class":39,"line":40},[37,120960,120961],{"class":43},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[37,120963,120964,120966,120969,120972,120975],{"class":39,"line":47},[37,120965,24649],{"class":2035},[37,120967,120968],{"class":309}," ln",[37,120970,120971],{"class":82}," -sf",[37,120973,120974],{"class":309}," libcudnn_cnn_train.so.8.9.7",[37,120976,120977],{"class":309}," libcudnn_cnn_train.so.8\n",[37,120979,120980,120982,120984,120986,120989],{"class":39,"line":58},[37,120981,24649],{"class":2035},[37,120983,120968],{"class":309},[37,120985,120971],{"class":82},[37,120987,120988],{"class":309}," libcudnn_adv_infer.so.8.9.7",[37,120990,120991],{"class":309}," libcudnn_adv_infer.so.8\n",[37,120993,120994,120996,120998,121000,121003],{"class":39,"line":64},[37,120995,24649],{"class":2035},[37,120997,120968],{"class":309},[37,120999,120971],{"class":82},[37,121001,121002],{"class":309}," libcudnn_adv_train.so.8.9.7",[37,121004,121005],{"class":309}," libcudnn_adv_train.so.8\n",[37,121007,121008,121010,121012,121014,121017],{"class":39,"line":76},[37,121009,24649],{"class":2035},[37,121011,120968],{"class":309},[37,121013,120971],{"class":82},[37,121015,121016],{"class":309}," libcudnn_cnn_infer.so.8.9.7",[37,121018,121019],{"class":309}," libcudnn_cnn_infer.so.8\n",[37,121021,121022,121024,121026,121028,121031],{"class":39,"line":92},[37,121023,24649],{"class":2035},[37,121025,120968],{"class":309},[37,121027,120971],{"class":82},[37,121029,121030],{"class":309}," libcudnn.so.8.9.7",[37,121032,121033],{"class":309}," libcudnn.so.8\n",[37,121035,121036,121038,121040,121042,121045],{"class":39,"line":97},[37,121037,24649],{"class":2035},[37,121039,120968],{"class":309},[37,121041,120971],{"class":82},[37,121043,121044],{"class":309}," libcudnn_ops_infer.so.8.9.7",[37,121046,121047],{"class":309}," libcudnn_ops_infer.so.8\n",[37,121049,121050,121052,121054,121056,121059],{"class":39,"line":107},[37,121051,24649],{"class":2035},[37,121053,120968],{"class":309},[37,121055,120971],{"class":82},[37,121057,121058],{"class":309}," libcudnn_ops_train.so.8.9.7",[37,121060,121061],{"class":309}," libcudnn_ops_train.so.8\n",[37,121063,121064],{"class":39,"line":1390},[37,121065,121066],{"class":43},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[37,121068,121069,121071],{"class":39,"line":1402},[37,121070,24649],{"class":2035},[37,121072,120857],{"class":309},[37,121074,121075],{"class":39,"line":1684},[37,121076,121077],{"class":43},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[37,121079,121080,121082,121085,121088,121090,121093],{"class":39,"line":1689},[37,121081,26834],{"class":2035},[37,121083,121084],{"class":82}," -l",[37,121086,121087],{"class":309}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[37,121089,659],{"class":82},[37,121091,121092],{"class":309},".so",[37,121094,119295],{"class":82},[175,121096,121098],{"id":121097},"_355-常见问题","3.5.5 常见问题",[158,121100,121101],{},[161,121102,121103],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[27,121105,121107],{"className":118570,"code":121106,"language":118572,"meta":32,"style":32},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[34,121108,121109],{"__ignoreMap":32},[37,121110,121111,121113,121115],{"class":39,"line":40},[37,121112,24649],{"class":2035},[37,121114,118630],{"class":309},[37,121116,121117],{"class":309}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121119,121120],{},"blacklist-nouveau.conf文件内容如下：",[27,121122,121124],{"className":118570,"code":121123,"language":118572,"meta":32,"style":32},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[34,121125,121126,121134,121141,121153,121163],{"__ignoreMap":32},[37,121127,121128,121131],{"class":39,"line":40},[37,121129,121130],{"class":2035},"blacklist",[37,121132,121133],{"class":309}," nouveau\n",[37,121135,121136,121138],{"class":39,"line":47},[37,121137,121130],{"class":2035},[37,121139,121140],{"class":309}," lbm-nouveau\n",[37,121142,121143,121145,121148,121151],{"class":39,"line":58},[37,121144,115977],{"class":2035},[37,121146,121147],{"class":309}," nouveau",[37,121149,121150],{"class":309}," modeset=",[37,121152,3157],{"class":82},[37,121154,121155,121158,121160],{"class":39,"line":64},[37,121156,121157],{"class":82},"alias",[37,121159,121147],{"class":309},[37,121161,121162],{"class":309}," off\n",[37,121164,121165,121167,121170],{"class":39,"line":76},[37,121166,121157],{"class":82},[37,121168,121169],{"class":309}," lbm-nouveau",[37,121171,121162],{"class":309},[14,121173,121174],{},"接着运行下方命令",[27,121176,121178],{"className":118570,"code":121177,"language":118572,"meta":32,"style":32},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[34,121179,121180,121190,121195],{"__ignoreMap":32},[37,121181,121182,121184,121187],{"class":39,"line":40},[37,121183,24649],{"class":2035},[37,121185,121186],{"class":309}," update-initramfs",[37,121188,121189],{"class":82}," -u\n",[37,121191,121192],{"class":39,"line":47},[37,121193,121194],{"class":2035},"或者\n",[37,121196,121197,121199,121202],{"class":39,"line":58},[37,121198,24649],{"class":2035},[37,121200,121201],{"class":309}," dracut",[37,121203,121204],{"class":82}," --force\n",[14,121206,121207],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[27,121209,121211],{"className":118570,"code":121210,"language":118572,"meta":32,"style":32},"lsmod | grep nouveau\n",[34,121212,121213],{"__ignoreMap":32},[37,121214,121215,121218,121220,121222],{"class":39,"line":40},[37,121216,121217],{"class":2035},"lsmod",[37,121219,25182],{"class":50},[37,121221,30309],{"class":2035},[37,121223,121133],{"class":309},[158,121225,121226],{"start":47},[161,121227,121228],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[27,121230,121232],{"className":118570,"code":121231,"language":118572,"meta":32,"style":32},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[34,121233,121234],{"__ignoreMap":32},[37,121235,121236,121238,121240],{"class":39,"line":40},[37,121237,24649],{"class":2035},[37,121239,118630],{"class":309},[37,121241,121242],{"class":309}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121244,121245],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[27,121247,121249],{"className":118570,"code":121248,"language":118572,"meta":32,"style":32},"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",[34,121250,121251,121259,121267,121275,121282,121290,121300,121308],{"__ignoreMap":32},[37,121252,121253,121256],{"class":39,"line":40},[37,121254,121255],{"class":2035},"Section",[37,121257,121258],{"class":309}," \"OutputClass\"\n",[37,121260,121261,121264],{"class":39,"line":47},[37,121262,121263],{"class":2035},"   Identifier",[37,121265,121266],{"class":309}," \"nvidia\"\n",[37,121268,121269,121272],{"class":39,"line":58},[37,121270,121271],{"class":2035},"   MatchDriver",[37,121273,121274],{"class":309}," \"nvidia-drm\"\n",[37,121276,121277,121280],{"class":39,"line":64},[37,121278,121279],{"class":2035},"   Driver",[37,121281,121266],{"class":309},[37,121283,121284,121287],{"class":39,"line":76},[37,121285,121286],{"class":2035},"   Option",[37,121288,121289],{"class":309}," \"AllowEmptyInitialConfiguration\"\n",[37,121291,121292,121294,121297],{"class":39,"line":92},[37,121293,121286],{"class":2035},[37,121295,121296],{"class":309}," \"PrimaryGPU\"",[37,121298,121299],{"class":309}," \"yes\"\n",[37,121301,121302,121305],{"class":39,"line":97},[37,121303,121304],{"class":2035},"   ModulePath",[37,121306,121307],{"class":309}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[37,121309,121310],{"class":39,"line":107},[37,121311,121312],{"class":2035},"EndSection\n",[158,121314,121315],{"start":58},[161,121316,121317],{},"安装N卡驱动提示错误",[27,121319,121321],{"className":120863,"code":121320,"language":120865,"meta":120866,"style":32},"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",[34,121322,121323],{"__ignoreMap":32},[37,121324,121325],{"class":39,"line":40},[37,121326,121320],{},[158,121328,121329],{},[161,121330,121331],{},"检查当前运行的内核版本：",[14,121333,121334],{},"运行以下命令以查看你当前正在使用的内核版本：",[27,121336,121338],{"className":117343,"code":121337,"language":117345,"meta":32,"style":32},"uname -r\n",[34,121339,121340],{"__ignoreMap":32},[37,121341,121342,121344],{"class":39,"line":40},[37,121343,70272],{"class":2035},[37,121345,121346],{"class":82}," -r\n",[158,121348,121349],{"start":47},[161,121350,121351],{},"安装内核开发文件：",[14,121353,121354,121355,121358],{},"确保你已经安装了与当前内核版本相匹配的 ",[34,121356,121357],{},"kernel-devel"," 包。运行以下命令来安装：",[27,121360,121362],{"className":117343,"code":121361,"language":117345,"meta":32,"style":32},"sudo dnf install kernel-devel-$(uname -r)\n",[34,121363,121364],{"__ignoreMap":32},[37,121365,121366,121368,121370,121372,121375,121377,121379,121381],{"class":39,"line":40},[37,121367,24649],{"class":2035},[37,121369,26388],{"class":309},[37,121371,23906],{"class":309},[37,121373,121374],{"class":309}," kernel-devel-",[37,121376,25172],{"class":54},[37,121378,70272],{"class":2035},[37,121380,119686],{"class":82},[37,121382,214],{"class":54},[14,121384,121385],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[158,121387,121388],{"start":58},[161,121389,121390],{},"安装内核源代码（如果需要）：",[14,121392,121393],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[27,121395,121397],{"className":117343,"code":121396,"language":117345,"meta":32,"style":32},"sudo dnf install kernel-headers kernel-source\n",[34,121398,121399],{"__ignoreMap":32},[37,121400,121401,121403,121405,121407,121410],{"class":39,"line":40},[37,121402,24649],{"class":2035},[37,121404,26388],{"class":309},[37,121406,23906],{"class":309},[37,121408,121409],{"class":309}," kernel-headers",[37,121411,121412],{"class":309}," kernel-source\n",[158,121414,121415],{"start":64},[161,121416,121417],{},"检查安装：",[14,121419,121420,121421,121424],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[34,121422,121423],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[27,121426,121428],{"className":117343,"code":121427,"language":117345,"meta":32,"style":32},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[34,121429,121430],{"__ignoreMap":32},[37,121431,121432,121434],{"class":39,"line":40},[37,121433,26834],{"class":2035},[37,121435,121436],{"class":309}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,121438,121439,121440,121443],{},"如果仍然遇到问题，可以通过 ",[34,121441,121442],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[123,121445,121446],{},"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":32,"searchDepth":47,"depth":47,"links":121448},[121449,121453,121463,121467,121468],{"id":118546,"depth":47,"text":118547,"children":121450},[121451,121452],{"id":118556,"depth":58,"text":118557},{"id":118566,"depth":58,"text":118567},{"id":118766,"depth":47,"text":118767,"children":121454},[121455,121456,121457,121458,121459,121460,121461,121462],{"id":118770,"depth":58,"text":118771},{"id":118840,"depth":58,"text":118841},{"id":118929,"depth":58,"text":118930},{"id":119174,"depth":58,"text":119175},{"id":119244,"depth":58,"text":119245},{"id":119311,"depth":58,"text":119312},{"id":119346,"depth":58,"text":119347},{"id":119401,"depth":58,"text":119402},{"id":119452,"depth":47,"text":119453,"children":121464},[121465,121466],{"id":119456,"depth":58,"text":119457},{"id":119536,"depth":58,"text":119537},{"id":119722,"depth":47,"text":119723},{"id":119895,"depth":47,"text":119896,"children":121469},[121470,121471,121472,121473,121474],{"id":119899,"depth":58,"text":119900},{"id":119940,"depth":58,"text":119941},{"id":120227,"depth":58,"text":120228},{"id":120601,"depth":58,"text":120602},{"id":121097,"depth":58,"text":121098},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118538,"description":128},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121481,"title":121482,"body":121483,"description":128,"extension":129,"meta":121823,"navigation":131,"path":121824,"seo":121825,"stem":121826,"__hash__":121827},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121484,"toc":121821},[121485,121488,121493,121496,121742,121747,121750,121786,121789,121818],[10,121486,121482],{"id":121487},"_4-命令教程长期积累",[158,121489,121490],{},[161,121491,121492],{},"大多数命令",[14,121494,121495],{},"常用 Linux 命令速查：",[27,121497,121499],{"className":117343,"code":121498,"language":117345,"meta":32,"style":32},"# 文件与目录\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",[34,121500,121501,121506,121513,121520,121528,121535,121542,121550,121558,121565,121572,121580,121584,121589,121596,121604,121611,121615,121620,121627,121635,121643,121651,121659,121663,121668,121676,121683,121690,121698,121706,121710,121715,121724,121733],{"__ignoreMap":32},[37,121502,121503],{"class":39,"line":40},[37,121504,121505],{"class":43},"# 文件与目录\n",[37,121507,121508,121510],{"class":39,"line":47},[37,121509,26834],{"class":2035},[37,121511,121512],{"class":43},"        # 列出目录内容\n",[37,121514,121515,121517],{"class":39,"line":58},[37,121516,101323],{"class":82},[37,121518,121519],{"class":43},"        # 切换目录\n",[37,121521,121522,121525],{"class":39,"line":64},[37,121523,121524],{"class":82},"pwd",[37,121526,121527],{"class":43},"       # 显示当前路径\n",[37,121529,121530,121532],{"class":39,"line":76},[37,121531,101313],{"class":2035},[37,121533,121534],{"class":43},"     # 创建目录\n",[37,121536,121537,121539],{"class":39,"line":92},[37,121538,25395],{"class":2035},[37,121540,121541],{"class":43},"        # 删除文件或目录\n",[37,121543,121544,121547],{"class":39,"line":97},[37,121545,121546],{"class":2035},"cp",[37,121548,121549],{"class":43},"        # 复制文件或目录\n",[37,121551,121552,121555],{"class":39,"line":107},[37,121553,121554],{"class":2035},"mv",[37,121556,121557],{"class":43},"        # 移动\u002F重命名文件或目录\n",[37,121559,121560,121562],{"class":39,"line":1390},[37,121561,101330],{"class":2035},[37,121563,121564],{"class":43},"     # 创建空文件\n",[37,121566,121567,121569],{"class":39,"line":1402},[37,121568,120812],{"class":2035},[37,121570,121571],{"class":43},"       # 查看文件内容\n",[37,121573,121574,121577],{"class":39,"line":1684},[37,121575,121576],{"class":2035},"head\u002Ftail",[37,121578,121579],{"class":43}," # 查看文件头部\u002F尾部\n",[37,121581,121582],{"class":39,"line":1689},[37,121583,2472],{"emptyLinePlaceholder":131},[37,121585,121586],{"class":39,"line":1695},[37,121587,121588],{"class":43},"# 权限管理\n",[37,121590,121591,121593],{"class":39,"line":1700},[37,121592,24684],{"class":2035},[37,121594,121595],{"class":43},"     # 修改文件权限\n",[37,121597,121598,121601],{"class":39,"line":1714},[37,121599,121600],{"class":2035},"chown",[37,121602,121603],{"class":43},"     # 修改文件所有者\n",[37,121605,121606,121608],{"class":39,"line":1719},[37,121607,24649],{"class":2035},[37,121609,121610],{"class":43},"      # 以管理员身份执行\n",[37,121612,121613],{"class":39,"line":1725},[37,121614,2472],{"emptyLinePlaceholder":131},[37,121616,121617],{"class":39,"line":1746},[37,121618,121619],{"class":43},"# 系统信息\n",[37,121621,121622,121624],{"class":39,"line":1751},[37,121623,70272],{"class":2035},[37,121625,121626],{"class":43},"     # 系统信息\n",[37,121628,121629,121632],{"class":39,"line":1765},[37,121630,121631],{"class":2035},"df",[37,121633,121634],{"class":43},"        # 磁盘使用情况\n",[37,121636,121637,121640],{"class":39,"line":1770},[37,121638,121639],{"class":2035},"free",[37,121641,121642],{"class":43},"      # 内存使用情况\n",[37,121644,121645,121648],{"class":39,"line":1799},[37,121646,121647],{"class":2035},"top\u002Fhtop",[37,121649,121650],{"class":43},"  # 进程监控\n",[37,121652,121653,121656],{"class":39,"line":1804},[37,121654,121655],{"class":2035},"ps",[37,121657,121658],{"class":43},"        # 查看进程\n",[37,121660,121661],{"class":39,"line":1821},[37,121662,2472],{"emptyLinePlaceholder":131},[37,121664,121665],{"class":39,"line":1826},[37,121666,121667],{"class":43},"# 网络\n",[37,121669,121670,121673],{"class":39,"line":1831},[37,121671,121672],{"class":2035},"ping",[37,121674,121675],{"class":43},"      # 测试网络连通性\n",[37,121677,121678,121680],{"class":39,"line":1836},[37,121679,26922],{"class":2035},[37,121681,121682],{"class":43},"      # 发送 HTTP 请求\n",[37,121684,121685,121687],{"class":39,"line":1850},[37,121686,120336],{"class":2035},[37,121688,121689],{"class":43},"      # 下载文件\n",[37,121691,121692,121695],{"class":39,"line":1855},[37,121693,121694],{"class":2035},"ssh",[37,121696,121697],{"class":43},"       # 远程登录\n",[37,121699,121700,121703],{"class":39,"line":2649},[37,121701,121702],{"class":2035},"scp",[37,121704,121705],{"class":43},"       # 远程文件传输\n",[37,121707,121708],{"class":39,"line":2663},[37,121709,2472],{"emptyLinePlaceholder":131},[37,121711,121712],{"class":39,"line":2671},[37,121713,121714],{"class":43},"# 包管理（Debian\u002FUbuntu）\n",[37,121716,121717,121719,121721],{"class":39,"line":2676},[37,121718,117415],{"class":2035},[37,121720,117394],{"class":309},[37,121722,121723],{"class":43},"   # 更新软件源\n",[37,121725,121726,121728,121730],{"class":39,"line":2682},[37,121727,117415],{"class":2035},[37,121729,23906],{"class":309},[37,121731,121732],{"class":43},"  # 安装软件包\n",[37,121734,121735,121737,121739],{"class":39,"line":2688},[37,121736,117415],{"class":2035},[37,121738,26152],{"class":309},[37,121740,121741],{"class":43},"   # 卸载软件包\n",[158,121743,121744],{"start":47},[161,121745,121746],{},"KDE Dolphin 以root打开",[14,121748,121749],{},"kde5",[27,121751,121753],{"className":117343,"code":121752,"language":117345,"meta":32,"style":32},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[34,121754,121755],{"__ignoreMap":32},[37,121756,121757,121760,121763,121766,121768,121770,121773,121776,121778,121781,121783],{"class":39,"line":40},[37,121758,121759],{"class":2035},"pkexec",[37,121761,121762],{"class":309}," env",[37,121764,121765],{"class":309}," DISPLAY=",[37,121767,28216],{"class":54},[37,121769,28274],{"class":309},[37,121771,121772],{"class":54},"$XAUTHORITY ",[37,121774,121775],{"class":309},"KDE_SESSION_VERSION=",[37,121777,524],{"class":82},[37,121779,121780],{"class":309}," KDE_FULL_SESSION=",[37,121782,1435],{"class":82},[37,121784,121785],{"class":309}," dolphin\n",[14,121787,121788],{},"kde6",[27,121790,121792],{"className":117343,"code":121791,"language":117345,"meta":32,"style":32},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[34,121793,121794],{"__ignoreMap":32},[37,121795,121796,121798,121800,121802,121804,121806,121808,121810,121812,121814,121816],{"class":39,"line":40},[37,121797,121759],{"class":2035},[37,121799,121762],{"class":309},[37,121801,121765],{"class":309},[37,121803,28216],{"class":54},[37,121805,28274],{"class":309},[37,121807,121772],{"class":54},[37,121809,121775],{"class":309},[37,121811,549],{"class":82},[37,121813,121780],{"class":309},[37,121815,1435],{"class":82},[37,121817,121785],{"class":309},[123,121819,121820],{},"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":32,"searchDepth":47,"depth":47,"links":121822},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121482,"description":128},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121829,"title":121830,"body":121831,"description":128,"extension":129,"meta":121845,"navigation":131,"path":121846,"seo":121847,"stem":121848,"__hash__":121849},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121832,"toc":121843},[121833,121836],[10,121834,121830],{"id":121835},"_5-各种环境配置",[14,121837,121838],{},[443,121839,121842],{"href":121840,"rel":121841},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23937],"电控组环境搭建大全",{"title":32,"searchDepth":47,"depth":47,"links":121844},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121830,"description":128},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121851,"title":121852,"body":121853,"description":128,"extension":129,"meta":122201,"navigation":131,"path":122202,"seo":122203,"stem":122204,"__hash__":122205},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121854,"toc":122193},[121855,121858,121862,121866,121870,121875,121882,121886,122179,122183,122190],[10,121856,121852],{"id":121857},"_6-拓展功能",[146,121859,121861],{"id":121860},"_61-wine","6.1 Wine",[146,121863,121865],{"id":121864},"_62-android","6.2 Android",[175,121867,121869],{"id":121868},"_621-i卡a卡","6.2.1 I卡、A卡",[158,121871,121872],{},[161,121873,121874],{},"Wayland-Waydroid(体验超级好)",[14,121876,121877,121878],{},"Waydroid 官网与安装指南：",[443,121879,121880],{"href":121880,"rel":121881},"https:\u002F\u002Fwaydro.id\u002F",[23937],[175,121883,121885],{"id":121884},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[158,121887,121888],{},[161,121889,121890,121891,121893,121894,121898,121900,121903,121908,122105],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53784,121892],{},"BlissOS 官网下载：",[443,121895,121896],{"href":121896,"rel":121897},"https:\u002F\u002Fblissos.org\u002F",[23937],[53784,121899],{},[119,121901],{"alt":32,"src":121902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[158,121904,121905],{"start":58},[161,121906,121907],{},"比较推荐的配置",[27,121909,121911],{"className":117343,"code":121910,"language":117345,"meta":32,"style":32},"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",[34,121912,121913,121920,121930,121940,121950,121962,121972,121979,121989,121998,122007,122017,122027,122036,122046,122056,122068,122078,122087,122097],{"__ignoreMap":32},[37,121914,121915,121918],{"class":39,"line":40},[37,121916,121917],{"class":2035},"qemu-system-x86_64",[37,121919,24751],{"class":82},[37,121921,121922,121925,121928],{"class":39,"line":47},[37,121923,121924],{"class":82},"        -M",[37,121926,121927],{"class":309}," q35,vmport=off",[37,121929,24751],{"class":82},[37,121931,121932,121935,121938],{"class":39,"line":58},[37,121933,121934],{"class":82},"        -accel",[37,121936,121937],{"class":309}," kvm",[37,121939,24751],{"class":82},[37,121941,121942,121945,121948],{"class":39,"line":64},[37,121943,121944],{"class":82},"        -cpu",[37,121946,121947],{"class":309}," qemu64,+sse3,+sse4.2",[37,121949,24751],{"class":82},[37,121951,121952,121955,121958,121960],{"class":39,"line":76},[37,121953,121954],{"class":82},"        -smp",[37,121956,121957],{"class":309}," 8,cores=",[37,121959,498],{"class":82},[37,121961,24751],{"class":82},[37,121963,121964,121967,121970],{"class":39,"line":92},[37,121965,121966],{"class":82},"        -m",[37,121968,121969],{"class":309}," 6G",[37,121971,24751],{"class":82},[37,121973,121974,121977],{"class":39,"line":97},[37,121975,121976],{"class":82},"        -usb",[37,121978,24751],{"class":82},[37,121980,121981,121984,121987],{"class":39,"line":107},[37,121982,121983],{"class":82},"        -device",[37,121985,121986],{"class":309}," virtio-tablet",[37,121988,24751],{"class":82},[37,121990,121991,121993,121996],{"class":39,"line":1390},[37,121992,121983],{"class":82},[37,121994,121995],{"class":309}," virtio-keyboard",[37,121997,24751],{"class":82},[37,121999,122000,122002,122005],{"class":39,"line":1402},[37,122001,121983],{"class":82},[37,122003,122004],{"class":309}," usb-tablet",[37,122006,24751],{"class":82},[37,122008,122009,122012,122015],{"class":39,"line":1684},[37,122010,122011],{"class":82},"        -bios",[37,122013,122014],{"class":309}," OVMF-pure-efi64.fd",[37,122016,24751],{"class":82},[37,122018,122019,122022,122025],{"class":39,"line":1689},[37,122020,122021],{"class":82},"        -net",[37,122023,122024],{"class":309}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[37,122026,24751],{"class":82},[37,122028,122029,122031,122034],{"class":39,"line":1695},[37,122030,122021],{"class":82},[37,122032,122033],{"class":309}," nic,model=virtio",[37,122035,24751],{"class":82},[37,122037,122038,122041,122044],{"class":39,"line":1700},[37,122039,122040],{"class":82},"        -audio",[37,122042,122043],{"class":309}," sdl,model=hda",[37,122045,24751],{"class":82},[37,122047,122048,122051,122054],{"class":39,"line":1714},[37,122049,122050],{"class":82},"        -display",[37,122052,122053],{"class":309}," sdl,gl=on,show-cursor=on",[37,122055,24751],{"class":82},[37,122057,122058,122060,122063,122066],{"class":39,"line":1719},[37,122059,121983],{"class":82},[37,122061,122062],{"class":309}," virtio-vga-gl,xres=1920,yres=",[37,122064,122065],{"class":82},"1080",[37,122067,24751],{"class":82},[37,122069,122070,122073,122076],{"class":39,"line":1725},[37,122071,122072],{"class":82},"        -drive",[37,122074,122075],{"class":309}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[37,122077,24751],{"class":82},[37,122079,122080,122082,122085],{"class":39,"line":1746},[37,122081,122072],{"class":82},[37,122083,122084],{"class":309}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[37,122086,24751],{"class":82},[37,122088,122089,122092,122095],{"class":39,"line":1751},[37,122090,122091],{"class":82},"        -monitor",[37,122093,122094],{"class":309}," stdio",[37,122096,24751],{"class":82},[37,122098,122099,122102],{"class":39,"line":1765},[37,122100,122101],{"class":82},"        -serial",[37,122103,122104],{"class":309}," none\n",[158,122106,122107],{"start":76},[161,122108,122109,122110],{},"常用操作：",[158,122111,122112,122115,122171],{},[161,122113,122114],{},"全屏：Ctrl+Alt+F",[161,122116,122117,122118,122123],{},"adb调试",[158,122119,122120],{},[161,122121,122122],{},"使Linux与Android用ADB连接。",[27,122124,122126],{"className":117343,"code":122125,"language":117345,"meta":32,"style":32},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[34,122127,122128,122133,122144,122149,122161,122166],{"__ignoreMap":32},[37,122129,122130],{"class":39,"line":40},[37,122131,122132],{"class":43},"# 连接安卓\n",[37,122134,122135,122138,122141],{"class":39,"line":47},[37,122136,122137],{"class":2035},"adb",[37,122139,122140],{"class":309}," connect",[37,122142,122143],{"class":82}," 127.0.0.1\n",[37,122145,122146],{"class":39,"line":58},[37,122147,122148],{"class":43},"# 打开shell\n",[37,122150,122151,122153,122155,122158],{"class":39,"line":64},[37,122152,122137],{"class":2035},[37,122154,26956],{"class":82},[37,122156,122157],{"class":309}," 127.0.0.1:5555",[37,122159,122160],{"class":309}," shell\n",[37,122162,122163],{"class":39,"line":76},[37,122164,122165],{"class":43},"# 使用root权限\n",[37,122167,122168],{"class":39,"line":92},[37,122169,122170],{"class":2035},"su\n",[161,122172,122173,122174],{},"中文输入法",[158,122175,122176],{},[161,122177,122178],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[146,122180,122182],{"id":122181},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122184,122185,122186],{},"rEFInd 官网与文档：",[443,122187,122188],{"href":122188,"rel":122189},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23937],[123,122191,122192],{},"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":32,"searchDepth":47,"depth":47,"links":122194},[122195,122196,122200],{"id":121860,"depth":47,"text":121861},{"id":121864,"depth":47,"text":121865,"children":122197},[122198,122199],{"id":121868,"depth":58,"text":121869},{"id":121884,"depth":58,"text":121885},{"id":122181,"depth":47,"text":122182},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121852,"description":128},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122207,"title":122208,"body":122209,"description":128,"extension":129,"meta":125508,"navigation":131,"path":125509,"seo":125510,"stem":125511,"__hash__":125512},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122210,"toc":125482},[122211,122214,122218,122221,122228,122478,122481,122553,122556,122560,122564,122569,122572,122575,122578,122583,122586,122589,122592,122597,122600,122605,122608,122611,122616,122619,122624,122627,122631,122635,122638,122643,122646,122660,122663,122666,122675,122678,122687,122690,122693,122702,122705,122714,122717,122720,122729,122732,122735,122750,122753,122756,122765,122770,122773,122776,122785,122788,122797,122800,122809,122812,122821,122826,122829,122837,122842,122845,122854,122857,122865,122870,122873,122882,122885,122888,122892,122895,122900,122903,122908,122922,122927,122932,122943,122948,122954,122959,122974,122979,122982,122987,122992,122997,123005,123010,123017,123022,123033,123038,123041,123045,123048,123051,123056,123059,123078,123083,123086,123095,123100,123103,123125,123128,123158,123161,123166,123169,123183,123188,123207,123210,123213,123218,123230,123235,123240,123243,123248,123251,123266,123269,123274,123279,123283,123288,123328,123331,123335,123341,123347,123352,123355,123362,123367,123374,123377,123380,123387,123401,123404,123464,123467,123481,123493,123496,123499,123502,123566,123569,123572,123575,123595,123598,123603,123610,123614,123617,123621,123626,123631,123635,123638,123641,123683,123688,123691,123713,123728,123730,123735,123747,123807,123809,123811,123865,123867,123869,123875,123880,123883,123888,123892,123895,123957,123962,123965,123967,123971,123983,124065,124067,124069,124123,124129,124131,124135,124140,124142,124147,124151,124171,124206,124210,124213,124216,124219,124226,124229,124241,124244,124259,124262,124281,124329,124332,124349,124352,124366,124371,124374,124383,124398,124410,124448,124453,124462,124467,124472,124498,124507,124511,124515,124520,124523,124527,124531,124536,124539,124544,124547,124552,124555,124560,124563,124567,124572,124575,124580,124583,124587,124592,124595,124600,124603,124608,124611,124615,124620,124623,124628,124631,124636,124639,124643,124648,124651,124656,124659,124664,124667,124672,124675,124680,124683,124688,124691,124695,124700,124703,124708,124715,124719,124724,124727,124732,124735,124739,124744,124747,124750,124753,124756,124759,124763,124766,124776,124781,124786,124808,124813,124818,124825,124829,124834,124837,124840,124845,124848,124851,124854,124857,124860,124863,124866,124869,124872,124875,124878,124881,124886,124891,124896,124901,124906,124911,124916,124919,124923,124926,124930,124935,124940,124945,124950,124954,124960,124968,124973,124976,124981,124996,124999,125004,125038,125053,125056,125111,125137,125149,125152,125161,125164,125179,125184,125187,125193,125198,125201,125206,125209,125214,125219,125226,125229,125244,125247,125282,125287,125295,125333,125336,125339,125344,125347,125352,125363,125397,125402,125405,125414,125419,125425,125428,125433,125442,125447,125450,125453,125458,125466,125469,125474,125479],[10,122212,122208],{"id":122213},"_7-其他操作",[146,122215,122217],{"id":122216},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122219,122220],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122222,122223,122224,122227],{},"进入工控机的硬盘目录，进入",[34,122225,122226],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[27,122229,122233],{"className":122230,"code":122231,"language":122232,"meta":32,"style":32},"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",[34,122234,122235,122243,122254,122261,122268,122280,122287,122299,122310,122321,122328,122335,122342,122354,122366,122373,122385,122397,122404,122416,122428,122440,122451,122458,122469],{"__ignoreMap":32},[37,122236,122237,122240],{"class":39,"line":40},[37,122238,122239],{"class":51368},"network",[37,122241,122242],{"class":54},": \n",[37,122244,122245,122248,122250,122252],{"class":39,"line":47},[37,122246,122247],{"class":51368},"  version",[37,122249,51505],{"class":54},[37,122251,282],{"class":82},[37,122253,2746],{"class":54},[37,122255,122256,122259],{"class":39,"line":58},[37,122257,122258],{"class":51368},"  wifis",[37,122260,122242],{"class":54},[37,122262,122263,122266],{"class":39,"line":64},[37,122264,122265],{"class":51368},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[37,122267,122242],{"class":54},[37,122269,122270,122273,122275,122278],{"class":39,"line":76},[37,122271,122272],{"class":51368},"      renderer",[37,122274,51505],{"class":54},[37,122276,122277],{"class":309},"NetworkManager",[37,122279,2746],{"class":54},[37,122281,122282,122285],{"class":39,"line":92},[37,122283,122284],{"class":51368},"      match",[37,122286,122242],{"class":54},[37,122288,122289,122292,122294,122297],{"class":39,"line":97},[37,122290,122291],{"class":51368},"        name",[37,122293,51505],{"class":54},[37,122295,122296],{"class":309},"\"wlan0\"",[37,122298,2746],{"class":54},[37,122300,122301,122304,122306,122308],{"class":39,"line":107},[37,122302,122303],{"class":51368},"      dhcp4",[37,122305,51505],{"class":54},[37,122307,1435],{"class":82},[37,122309,2746],{"class":54},[37,122311,122312,122315,122317,122319],{"class":39,"line":1390},[37,122313,122314],{"class":51368},"      dhcp6",[37,122316,51505],{"class":54},[37,122318,1435],{"class":82},[37,122320,2746],{"class":54},[37,122322,122323,122326],{"class":39,"line":1402},[37,122324,122325],{"class":51368},"      access-points",[37,122327,122242],{"class":54},[37,122329,122330,122333],{"class":39,"line":1684},[37,122331,122332],{"class":309},"        \"EMIS_Vinci_Robocon_5G\"",[37,122334,122242],{"class":54},[37,122336,122337,122340],{"class":39,"line":1689},[37,122338,122339],{"class":51368},"          auth",[37,122341,122242],{"class":54},[37,122343,122344,122347,122349,122352],{"class":39,"line":1695},[37,122345,122346],{"class":51368},"            key-management",[37,122348,51505],{"class":54},[37,122350,122351],{"class":309},"\"psk\"",[37,122353,2746],{"class":54},[37,122355,122356,122359,122361,122364],{"class":39,"line":1700},[37,122357,122358],{"class":51368},"            password",[37,122360,51505],{"class":54},[37,122362,122363],{"class":309},"\"vinci666\"",[37,122365,2746],{"class":54},[37,122367,122368,122371],{"class":39,"line":1714},[37,122369,122370],{"class":51368},"          networkmanager",[37,122372,122242],{"class":54},[37,122374,122375,122378,122380,122383],{"class":39,"line":1719},[37,122376,122377],{"class":51368},"            uuid",[37,122379,51505],{"class":54},[37,122381,122382],{"class":309},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[37,122384,2746],{"class":54},[37,122386,122387,122390,122392,122395],{"class":39,"line":1725},[37,122388,122389],{"class":51368},"            name",[37,122391,51505],{"class":54},[37,122393,122394],{"class":309},"\"EMIS_Vinci_Robocon_5G\"",[37,122396,2746],{"class":54},[37,122398,122399,122402],{"class":39,"line":1746},[37,122400,122401],{"class":51368},"            passthrough",[37,122403,122242],{"class":54},[37,122405,122406,122409,122411,122414],{"class":39,"line":1751},[37,122407,122408],{"class":51368},"              wifi-security.auth-alg",[37,122410,51505],{"class":54},[37,122412,122413],{"class":309},"\"open\"",[37,122415,2746],{"class":54},[37,122417,122418,122421,122423,122426],{"class":39,"line":1765},[37,122419,122420],{"class":51368},"              ipv6.addr-gen-mode",[37,122422,51505],{"class":54},[37,122424,122425],{"class":309},"\"default\"",[37,122427,2746],{"class":54},[37,122429,122430,122433,122435,122438],{"class":39,"line":1770},[37,122431,122432],{"class":51368},"              ipv6.ip6-privacy",[37,122434,51505],{"class":54},[37,122436,122437],{"class":309},"\"-1\"",[37,122439,2746],{"class":54},[37,122441,122442,122445,122447,122449],{"class":39,"line":1799},[37,122443,122444],{"class":51368},"              proxy._",[37,122446,51505],{"class":54},[37,122448,7724],{"class":309},[37,122450,2746],{"class":54},[37,122452,122453,122456],{"class":39,"line":1804},[37,122454,122455],{"class":51368},"      networkmanager",[37,122457,122242],{"class":54},[37,122459,122460,122463,122465,122467],{"class":39,"line":1821},[37,122461,122462],{"class":51368},"        uuid",[37,122464,51505],{"class":54},[37,122466,122382],{"class":309},[37,122468,2746],{"class":54},[37,122470,122471,122473,122475],{"class":39,"line":1826},[37,122472,122291],{"class":51368},[37,122474,51505],{"class":54},[37,122476,122477],{"class":309},"\"EMIS_Vinci_Robocon_5G\"\n",[14,122479,122480],{},"将其改为新wifi的名和密码：",[27,122482,122484],{"className":122230,"code":122483,"language":122232,"meta":32,"style":32},"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",[34,122485,122486,122492,122501,122507,122514,122523,122531,122537,122543],{"__ignoreMap":32},[37,122487,122488,122490],{"class":39,"line":40},[37,122489,122239],{"class":51368},[37,122491,3811],{"class":54},[37,122493,122494,122496,122498],{"class":39,"line":47},[37,122495,122247],{"class":51368},[37,122497,51505],{"class":54},[37,122499,122500],{"class":82},"2\n",[37,122502,122503,122505],{"class":39,"line":58},[37,122504,122258],{"class":51368},[37,122506,3811],{"class":54},[37,122508,122509,122512],{"class":39,"line":64},[37,122510,122511],{"class":51368},"    wlan0",[37,122513,3811],{"class":54},[37,122515,122516,122518,122520],{"class":39,"line":76},[37,122517,122303],{"class":51368},[37,122519,51505],{"class":54},[37,122521,122522],{"class":82},"true\n",[37,122524,122525,122527,122529],{"class":39,"line":92},[37,122526,122314],{"class":51368},[37,122528,51505],{"class":54},[37,122530,122522],{"class":82},[37,122532,122533,122535],{"class":39,"line":97},[37,122534,122325],{"class":51368},[37,122536,3811],{"class":54},[37,122538,122539,122541],{"class":39,"line":107},[37,122540,122332],{"class":309},[37,122542,3811],{"class":54},[37,122544,122545,122548,122550],{"class":39,"line":1390},[37,122546,122547],{"class":51368},"          password",[37,122549,51505],{"class":54},[37,122551,122552],{"class":309},"\"vinci666\"\n",[14,122554,122555],{},"工控机开机即可连上网。",[146,122557,122559],{"id":122558},"_72-ssh远程开发","7.2 SSH远程开发",[175,122561,122563],{"id":122562},"_721-环境准备","7.2.1 环境准备",[14,122565,122566],{},[354,122567,122568],{},"1.硬件准备",[14,122570,122571],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,122573,122574],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,122576,122577],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,122579,122580],{},[354,122581,122582],{},"2.设置固定IP",[14,122584,122585],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,122587,122588],{},"1.进入设置界面",[14,122590,122591],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,122593,122594],{},[119,122595],{"alt":32,"src":122596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,122598,122599],{},"2.配置所连接的网络",[14,122601,122602],{},[119,122603],{"alt":32,"src":122604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,122606,122607],{},"3.设置固定IP",[14,122609,122610],{},"查看当前IP地址。",[14,122612,122613],{},[119,122614],{"alt":32,"src":122615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,122617,122618],{},"设置固定IP。",[14,122620,122621],{},[119,122622],{"alt":32,"src":122623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,122625,122626],{},"至此，IP配置完毕。",[175,122628,122630],{"id":122629},"_722-环境搭建","7.2.2 环境搭建",[14,122632,122633],{},[354,122634,25826],{},[14,122636,122637],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,122639,122640],{},[354,122641,122642],{},"实现",[14,122644,122645],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[158,122647,122648,122651,122654,122657],{},[161,122649,122650],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[161,122652,122653],{},"远程主机启动SSH服务；",[161,122655,122656],{},"本地主机登陆远程主机；",[161,122658,122659],{},"实现数据传输。",[14,122661,122662],{},"1.安装SSH客户端与服务端",[14,122664,122665],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[27,122667,122669],{"className":120863,"code":122668,"language":120865,"meta":120866,"style":32}," sudo apt install openssh-server\n",[34,122670,122671],{"__ignoreMap":32},[37,122672,122673],{"class":39,"line":40},[37,122674,122668],{},[14,122676,122677],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[27,122679,122681],{"className":120863,"code":122680,"language":120865,"meta":120866,"style":32},"sudo apt install openssh-client\n",[34,122682,122683],{"__ignoreMap":32},[37,122684,122685],{"class":39,"line":40},[37,122686,122680],{},[14,122688,122689],{},"2.远程主机启动SSH服务",[14,122691,122692],{},"远程主机启动 ssh 服务命令如下：",[27,122694,122696],{"className":120863,"code":122695,"language":120865,"meta":120866,"style":32},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[34,122697,122698],{"__ignoreMap":32},[37,122699,122700],{"class":39,"line":40},[37,122701,122695],{},[14,122703,122704],{},"启动后可使用如下命令查看服务是否正常运行：",[27,122706,122708],{"className":120863,"code":122707,"language":120865,"meta":120866,"style":32},"ps -e | grep ssh\n",[34,122709,122710],{"__ignoreMap":32},[37,122711,122712],{"class":39,"line":40},[37,122713,122707],{},[14,122715,122716],{},"如果启动成功，会包含 sshd 程序。",[14,122718,122719],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[27,122721,122723],{"className":120863,"code":122722,"language":120865,"meta":120866,"style":32},"sudo systemctl enable ssh\n",[34,122724,122725],{"__ignoreMap":32},[37,122726,122727],{"class":39,"line":40},[37,122728,122722],{},[14,122730,122731],{},"3.本地远程登录",[14,122733,122734],{},"登录远程主机可以调用如下命令:",[27,122736,122738],{"className":117343,"code":122737,"language":117345,"meta":32,"style":32},"ssh -X 用户名@ip地址\n",[34,122739,122740],{"__ignoreMap":32},[37,122741,122742,122744,122747],{"class":39,"line":40},[37,122743,121694],{"class":2035},[37,122745,122746],{"class":82}," -X",[37,122748,122749],{"class":309}," 用户名@ip地址\n",[14,122751,122752],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,122754,122755],{},"如果退出，可以调用exit命令：",[27,122757,122759],{"className":120863,"code":122758,"language":120865,"meta":120866,"style":32},"exit\n",[34,122760,122761],{"__ignoreMap":32},[37,122762,122763],{"class":39,"line":40},[37,122764,122758],{},[14,122766,122767],{},[354,122768,122769],{},"4.实现数据传输",[14,122771,122772],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,122774,122775],{},"上传文件指令格式如下：",[27,122777,122779],{"className":120863,"code":122778,"language":120865,"meta":120866,"style":32},"scp 本地文件路径 账号@ip:路径\n",[34,122780,122781],{"__ignoreMap":32},[37,122782,122783],{"class":39,"line":40},[37,122784,122778],{},[14,122786,122787],{},"上传文件夹指令格式如下：",[27,122789,122791],{"className":120863,"code":122790,"language":120865,"meta":120866,"style":32},"scp -r 本地文件夹路径 账号@ip:路径\n",[34,122792,122793],{"__ignoreMap":32},[37,122794,122795],{"class":39,"line":40},[37,122796,122790],{},[14,122798,122799],{},"下载文件指令格式如下：",[27,122801,122803],{"className":120863,"code":122802,"language":120865,"meta":120866,"style":32},"scp 账号@ip:路径 本地文件夹路径\n",[34,122804,122805],{"__ignoreMap":32},[37,122806,122807],{"class":39,"line":40},[37,122808,122802],{},[14,122810,122811],{},"下载文件夹指令格式如下：",[27,122813,122815],{"className":120863,"code":122814,"language":120865,"meta":120866,"style":32},"scp -r 账号@ip:路径 本地文件夹路径\n",[34,122816,122817],{"__ignoreMap":32},[37,122818,122819],{"class":39,"line":40},[37,122820,122814],{},[14,122822,122823],{},[354,122824,122825],{},"优化",[14,122827,122828],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[158,122830,122831,122834],{},[161,122832,122833],{},"本地生成密钥对；",[161,122835,122836],{},"将公钥上传至远程主机。",[14,122838,122839],{},[354,122840,122841],{},"1.生成密钥对",[14,122843,122844],{},"本地客户端生成公私钥：（一路回车默认即可）",[27,122846,122848],{"className":120863,"code":122847,"language":120865,"meta":120866,"style":32},"ssh-keygen\n",[34,122849,122850],{"__ignoreMap":32},[37,122851,122852],{"class":39,"line":40},[37,122853,122847],{},[14,122855,122856],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[158,122858,122859,122862],{},[161,122860,122861],{},"id_rsa （私钥）；",[161,122863,122864],{},"id_rsa.pub (公钥)。",[14,122866,122867],{},[354,122868,122869],{},"2.公钥上传",[14,122871,122872],{},"上传指令如下：",[27,122874,122876],{"className":120863,"code":122875,"language":120865,"meta":120866,"style":32},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[34,122877,122878],{"__ignoreMap":32},[37,122879,122880],{"class":39,"line":40},[37,122881,122875],{},[14,122883,122884],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,122886,122887],{},"以后再远程登录就无需录入密码了。",[175,122889,122891],{"id":122890},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,122893,122894],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,122896,122897],{},[354,122898,122899],{},"1.准备工作",[14,122901,122902],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,122904,122905],{},[354,122906,122907],{},"2.为VScode安装远程开发插件",[14,122909,122910,122911,122914,122915,122918,122919,28458],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[34,122912,122913],{},"扩展：商店","的搜索栏输入",[34,122916,122917],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[34,122920,122921],{},"安装",[14,122923,122924],{},[119,122925],{"alt":32,"src":122926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,122928,122929],{},[354,122930,122931],{},"3.配置远程连接",[14,122933,122934,122935,122938,122939,122942],{},"步骤1：使用快捷键",[34,122936,122937],{},"ctrl + shift + p","打开命令输入窗口，并输入",[34,122940,122941],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,122944,122945],{},[119,122946],{"alt":32,"src":122947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,122949,122950,122951,28458],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[34,122952,122953],{},"Add New SSH Host",[14,122955,122956],{},[119,122957],{"alt":32,"src":122958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,122960,122961,122962,122965,122966,122969,122970,122973],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[34,122963,122964],{},"ssh +X ubuntu@192.168.43.164","，其中，",[34,122967,122968],{},"ubuntu","需要替换为你的登录用户名，",[34,122971,122972],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,122975,122976],{},[119,122977],{"alt":32,"src":122978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,122980,122981],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,122983,122984],{},[119,122985],{"alt":32,"src":122986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,122988,122989],{},[119,122990],{"alt":32,"src":122991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,122993,122994],{},[354,122995,122996],{},"4.使用",[14,122998,122999,123000,122938,123002,123004],{},"步骤1：继续使用快捷键",[34,123001,122937],{},[34,123003,122941],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,123006,123007],{},[119,123008],{"alt":32,"src":123009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,123011,123012,123013,123016],{},"或者，也可以点击侧边栏的",[34,123014,123015],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,123018,123019],{},[119,123020],{"alt":32,"src":123021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,123023,123024,123025,123028,123029,123032],{},"步骤2：选择菜单栏的",[34,123026,123027],{},"文件","下的",[34,123030,123031],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,123034,123035],{},[119,123036],{"alt":32,"src":123037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,123039,123040],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[146,123042,123044],{"id":123043},"_73-远程桌面","7.3 远程桌面",[14,123046,123047],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,123049,123050],{},"我们选择使用VNC来看。",[158,123052,123053],{},[161,123054,123055],{},"安装VNC服务器：",[14,123057,123058],{},"这里以TigerVNC为例进行安装：",[27,123060,123062],{"className":117343,"code":123061,"language":117345,"meta":32,"style":32},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[34,123063,123064],{"__ignoreMap":32},[37,123065,123066,123068,123070,123072,123075],{"class":39,"line":40},[37,123067,24649],{"class":2035},[37,123069,117364],{"class":309},[37,123071,23906],{"class":309},[37,123073,123074],{"class":309}," tigervnc-standalone-server",[37,123076,123077],{"class":309}," tigervnc-common\n",[158,123079,123080],{"start":47},[161,123081,123082],{},"设置VNC密码：",[14,123084,123085],{},"为VNC用户设置密码，运行以下命令：",[27,123087,123089],{"className":117343,"code":123088,"language":117345,"meta":32,"style":32},"vncpasswd\n",[34,123090,123091],{"__ignoreMap":32},[37,123092,123093],{"class":39,"line":40},[37,123094,123088],{"class":2035},[158,123096,123097],{"start":58},[161,123098,123099],{},"配置VNC启动脚本:",[14,123101,123102],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[27,123104,123106],{"className":117343,"code":123105,"language":117345,"meta":32,"style":32},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[34,123107,123108,123117],{"__ignoreMap":32},[37,123109,123110,123112,123114],{"class":39,"line":40},[37,123111,101313],{"class":2035},[37,123113,29289],{"class":82},[37,123115,123116],{"class":309}," ~\u002F.vnc\n",[37,123118,123119,123122],{"class":39,"line":47},[37,123120,123121],{"class":2035},"nano",[37,123123,123124],{"class":309}," ~\u002F.vnc\u002Fxstartup\n",[14,123126,123127],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[27,123129,123131],{"className":117343,"code":123130,"language":117345,"meta":32,"style":32},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[34,123132,123133,123138,123146,123153],{"__ignoreMap":32},[37,123134,123135],{"class":39,"line":40},[37,123136,123137],{"class":43},"#!\u002Fbin\u002Fsh\n",[37,123139,123140,123143],{"class":39,"line":47},[37,123141,123142],{"class":82},"unset",[37,123144,123145],{"class":309}," SESSION_MANAGER\n",[37,123147,123148,123150],{"class":39,"line":58},[37,123149,123142],{"class":82},[37,123151,123152],{"class":309}," DBUS_SESSION_BUS_ADDRESS\n",[37,123154,123155],{"class":39,"line":64},[37,123156,123157],{"class":2035},"gnome-session\n",[14,123159,123160],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[158,123162,123163],{"start":64},[161,123164,123165],{},"给予执行权限：",[14,123167,123168],{},"为xstartup文件设置执行权限：",[27,123170,123172],{"className":117343,"code":123171,"language":117345,"meta":32,"style":32},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[34,123173,123174],{"__ignoreMap":32},[37,123175,123176,123178,123181],{"class":39,"line":40},[37,123177,24684],{"class":2035},[37,123179,123180],{"class":309}," +x",[37,123182,123124],{"class":309},[158,123184,123185],{"start":76},[161,123186,123187],{},"启动VNC服务器：",[27,123189,123191],{"className":117343,"code":123190,"language":117345,"meta":32,"style":32},"vncserver -geometry 1920x1080 -localhost=0\n",[34,123192,123193],{"__ignoreMap":32},[37,123194,123195,123198,123201,123204],{"class":39,"line":40},[37,123196,123197],{"class":2035},"vncserver",[37,123199,123200],{"class":82}," -geometry",[37,123202,123203],{"class":309}," 1920x1080",[37,123205,123206],{"class":82}," -localhost=0\n",[14,123208,123209],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123211,123212],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[158,123214,123215],{"start":92},[161,123216,123217],{},"查看已开启的VNC服务器：",[27,123219,123221],{"className":117343,"code":123220,"language":117345,"meta":32,"style":32},"vncserver -list\n",[34,123222,123223],{"__ignoreMap":32},[37,123224,123225,123227],{"class":39,"line":40},[37,123226,123197],{"class":2035},[37,123228,123229],{"class":82}," -list\n",[14,123231,123232],{},[119,123233],{"alt":32,"src":123234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[158,123236,123237],{"start":97},[161,123238,123239],{},"连接到VNC服务器：",[14,123241,123242],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[158,123244,123245],{"start":107},[161,123246,123247],{},"停止VNC服务器：",[14,123249,123250],{},"如果需要停止VNC服务器，可以使用以下命令：",[27,123252,123254],{"className":117343,"code":123253,"language":117345,"meta":32,"style":32},"vncserver -kill :1\n",[34,123255,123256],{"__ignoreMap":32},[37,123257,123258,123260,123263],{"class":39,"line":40},[37,123259,123197],{"class":2035},[37,123261,123262],{"class":82}," -kill",[37,123264,123265],{"class":309}," :1\n",[14,123267,123268],{},"将:1替换为你实际使用的显示编号。",[14,123270,123271],{},[119,123272],{"alt":32,"src":123273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123275,123276],{},[119,123277],{"alt":32,"src":123278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[146,123280,123282],{"id":123281},"_74-usb端口设置","7.4 USB端口设置",[14,123284,123285],{},[354,123286,123287],{},"首先先配置好权限",[27,123289,123291],{"className":117343,"code":123290,"language":117345,"meta":32,"style":32},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[34,123292,123293,123298,123311,123318,123323],{"__ignoreMap":32},[37,123294,123295],{"class":39,"line":40},[37,123296,123297],{"class":43},"# 将用户权限提高\n",[37,123299,123300,123302,123304,123306,123309],{"class":39,"line":47},[37,123301,24649],{"class":2035},[37,123303,26647],{"class":309},[37,123305,26650],{"class":82},[37,123307,123308],{"class":309}," dialout",[37,123310,26655],{"class":54},[37,123312,123313,123315],{"class":39,"line":58},[37,123314,26674],{"class":2035},[37,123316,123317],{"class":309}," dialout\n",[37,123319,123320],{"class":39,"line":64},[37,123321,123322],{"class":43},"# 查看下面命令是否输出dialout（若输出才正常）\n",[37,123324,123325],{"class":39,"line":76},[37,123326,123327],{"class":2035},"groups\n",[14,123329,123330],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[175,123332,123334],{"id":123333},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123336,123337,123340],{},[354,123338,123339],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123342,123343,123346],{},[354,123344,123345],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123348,123349],{},[354,123350,123351],{},"流程如下：",[14,123353,123354],{},"（1）.查找设备idVendor和idProduct",[14,123356,123357,123358,123361],{},"接入两个USB设备，在终端调用指令",[34,123359,123360],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123363,123364],{},[119,123365],{"alt":32,"src":123366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123368,123369,123370,123373],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[34,123371,123372],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123375,123376],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123378,123379],{},"（2）.编写映射规则",[14,123381,123382,123383,123386],{},"在",[34,123384,123385],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[27,123388,123390],{"className":117343,"code":123389,"language":117345,"meta":32,"style":32},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[34,123391,123392],{"__ignoreMap":32},[37,123393,123394,123396,123398],{"class":39,"line":40},[37,123395,24649],{"class":2035},[37,123397,118630],{"class":309},[37,123399,123400],{"class":309}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123402,123403],{},"输入如下内容：",[27,123405,123407],{"className":117343,"code":123406,"language":117345,"meta":32,"style":32},"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",[34,123408,123409,123439],{"__ignoreMap":32},[37,123410,123411,123414,123416,123419,123422,123425,123428,123430,123433,123436],{"class":39,"line":40},[37,123412,123413],{"class":54},"KERNEL",[37,123415,70],{"class":50},[37,123417,123418],{"class":309},"=\"ttyUSB*\",",[37,123420,123421],{"class":2035}," ATTRS",[37,123423,123424],{"class":309},"{idVendor}==",[37,123426,123427],{"class":2035},"\"10c4\"",[37,123429,583],{"class":2035},[37,123431,123432],{"class":309}," ATTRS{idProduct}==\"ea60\",",[37,123434,123435],{"class":309}," MODE:=\"0777\",",[37,123437,123438],{"class":309}," SYMLINK+=\"mylidar\"\n",[37,123440,123441,123443,123445,123447,123449,123451,123454,123456,123459,123461],{"class":39,"line":47},[37,123442,123413],{"class":54},[37,123444,70],{"class":50},[37,123446,123418],{"class":309},[37,123448,123421],{"class":2035},[37,123450,123424],{"class":309},[37,123452,123453],{"class":2035},"\"1a86\"",[37,123455,583],{"class":2035},[37,123457,123458],{"class":309}," ATTRS{idProduct}==\"7523\",",[37,123460,123435],{"class":309},[37,123462,123463],{"class":309}," SYMLINK+=\"mycar\"\n",[14,123465,123466],{},"代码解释：",[1210,123468,123469,123472,123475,123478],{},[161,123470,123471],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[161,123473,123474],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[161,123476,123477],{},"SYMLINK是符号连接，即绑定的别名；",[161,123479,123480],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,123482,123483,123484,123487,123490],{},"***小提示：***",[23625,123485,123486],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[34,123488,123489],{},"\u002Fetc\u002Fudev\u002Frule.d",[23625,123491,123492],{},"目录即可。",[14,123494,123495],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,123497,123498],{},"（3）.使规则生效",[14,123500,123501],{},"在终端下输入如下指令：",[27,123503,123505],{"className":117343,"code":123504,"language":117345,"meta":32,"style":32},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[34,123506,123507,123512,123524,123535,123539,123544,123557],{"__ignoreMap":32},[37,123508,123509],{"class":39,"line":40},[37,123510,123511],{"class":43},"# Ubuntu用下方命令\n",[37,123513,123514,123516,123518,123521],{"class":39,"line":47},[37,123515,24649],{"class":2035},[37,123517,120095],{"class":309},[37,123519,123520],{"class":309}," udev",[37,123522,123523],{"class":309}," reload\n",[37,123525,123526,123528,123530,123532],{"class":39,"line":58},[37,123527,24649],{"class":2035},[37,123529,120095],{"class":309},[37,123531,123520],{"class":309},[37,123533,123534],{"class":309}," restart\n",[37,123536,123537],{"class":39,"line":64},[37,123538,2472],{"emptyLinePlaceholder":131},[37,123540,123541],{"class":39,"line":76},[37,123542,123543],{"class":43},"#Fedora用下方命令\n",[37,123545,123546,123548,123551,123554],{"class":39,"line":92},[37,123547,24649],{"class":2035},[37,123549,123550],{"class":309}," udevadm",[37,123552,123553],{"class":309}," control",[37,123555,123556],{"class":82}," --reload\n",[37,123558,123559,123561,123563],{"class":39,"line":97},[37,123560,24649],{"class":2035},[37,123562,123550],{"class":309},[37,123564,123565],{"class":309}," trigger\n",[14,123567,123568],{},"再重新插拔设备即可。",[14,123570,123571],{},"（4）.测试",[14,123573,123574],{},"终端下输入如下指令",[27,123576,123578],{"className":117343,"code":123577,"language":117345,"meta":32,"style":32},"ll \u002Fdev | grep ttyUSB\n",[34,123579,123580],{"__ignoreMap":32},[37,123581,123582,123585,123588,123590,123592],{"class":39,"line":40},[37,123583,123584],{"class":2035},"ll",[37,123586,123587],{"class":309}," \u002Fdev",[37,123589,25182],{"class":50},[37,123591,30309],{"class":2035},[37,123593,123594],{"class":309}," ttyUSB\n",[14,123596,123597],{},"运行结果如下：",[14,123599,123600],{},[119,123601],{"alt":32,"src":123602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,123604,123605,123606,123609],{},"也可以多次插拔USB设备，会发现设备端口",[34,123607,123608],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,123611,123612],{},[354,123613,118011],{},[14,123615,123616],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[175,123618,123620],{"id":123619},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,123622,123623,123625],{},[354,123624,123339],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,123627,123628,123630],{},[354,123629,123345],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,123632,123633],{},[354,123634,123351],{},[14,123636,123637],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,123639,123640],{},"调用如下指令查看第一台雷达的USB信息：",[27,123642,123644],{"className":117343,"code":123643,"language":117345,"meta":32,"style":32},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[34,123645,123646,123666],{"__ignoreMap":32},[37,123647,123648,123651,123653,123656,123659,123661,123663],{"class":39,"line":40},[37,123649,123650],{"class":2035},"udevadm",[37,123652,69889],{"class":309},[37,123654,123655],{"class":82}," --attribute-walk",[37,123657,123658],{"class":82}," --name=\u002Fdev\u002FttyUSB0",[37,123660,25182],{"class":50},[37,123662,30309],{"class":2035},[37,123664,123665],{"class":309}," KERNELS\n",[37,123667,123668,123670,123672,123674,123677,123679,123681],{"class":39,"line":47},[37,123669,123650],{"class":2035},[37,123671,69889],{"class":309},[37,123673,123655],{"class":82},[37,123675,123676],{"class":82}," --name=\u002Fdev\u002FttyACM0",[37,123678,25182],{"class":50},[37,123680,30309],{"class":2035},[37,123682,123665],{"class":309},[14,123684,123685],{},[119,123686],{"alt":32,"src":123687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,123689,123690],{},"调用如下指令查看第二台雷达的USB信息：",[27,123692,123694],{"className":117343,"code":123693,"language":117345,"meta":32,"style":32},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[34,123695,123696],{"__ignoreMap":32},[37,123697,123698,123700,123702,123704,123707,123709,123711],{"class":39,"line":40},[37,123699,123650],{"class":2035},[37,123701,69889],{"class":309},[37,123703,123655],{"class":82},[37,123705,123706],{"class":82}," --name=\u002Fdev\u002FttyUSB1",[37,123708,25182],{"class":50},[37,123710,30309],{"class":2035},[37,123712,123665],{"class":309},[14,123714,123715,123716,123719,123720,123723,123724,123727],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[34,123717,123718],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[34,123721,123722],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[354,123725,123726],{},"唯一性标识","”。",[14,123729,123379],{},[14,123731,123382,123732,123734],{},[34,123733,123385],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[27,123736,123737],{"className":117343,"code":123389,"language":117345,"meta":32,"style":32},[34,123738,123739],{"__ignoreMap":32},[37,123740,123741,123743,123745],{"class":39,"line":40},[37,123742,24649],{"class":2035},[37,123744,118630],{"class":309},[37,123746,123400],{"class":309},[27,123748,123750],{"className":117343,"code":123749,"language":117345,"meta":32,"style":32},"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",[34,123751,123752,123781],{"__ignoreMap":32},[37,123753,123754,123756,123758,123760,123763,123765,123768,123771,123773,123776,123778],{"class":39,"line":40},[37,123755,123413],{"class":54},[37,123757,70],{"class":50},[37,123759,123418],{"class":309},[37,123761,123762],{"class":54}," KERNELS",[37,123764,70],{"class":50},[37,123766,123767],{"class":309},"=\"1-1.3:1.0\",",[37,123769,123770],{"class":2035}," MODE:",[37,123772,70],{"class":309},[37,123774,123775],{"class":2035},"\"0777\"",[37,123777,583],{"class":2035},[37,123779,123780],{"class":309}," SYMLINK+=\"rplidar_front\"\n",[37,123782,123783,123785,123787,123789,123791,123793,123796,123798,123800,123802,123804],{"class":39,"line":47},[37,123784,123413],{"class":54},[37,123786,70],{"class":50},[37,123788,123418],{"class":309},[37,123790,123762],{"class":54},[37,123792,70],{"class":50},[37,123794,123795],{"class":309},"=\"1-1.4:1.0\",",[37,123797,123770],{"class":2035},[37,123799,70],{"class":309},[37,123801,123775],{"class":2035},[37,123803,583],{"class":2035},[37,123805,123806],{"class":309}," SYMLINK+=\"rplidar_back\"\n",[14,123808,123498],{},[14,123810,123501],{},[27,123812,123813],{"className":117343,"code":123504,"language":117345,"meta":32,"style":32},[34,123814,123815,123819,123829,123839,123843,123847,123857],{"__ignoreMap":32},[37,123816,123817],{"class":39,"line":40},[37,123818,123511],{"class":43},[37,123820,123821,123823,123825,123827],{"class":39,"line":47},[37,123822,24649],{"class":2035},[37,123824,120095],{"class":309},[37,123826,123520],{"class":309},[37,123828,123523],{"class":309},[37,123830,123831,123833,123835,123837],{"class":39,"line":58},[37,123832,24649],{"class":2035},[37,123834,120095],{"class":309},[37,123836,123520],{"class":309},[37,123838,123534],{"class":309},[37,123840,123841],{"class":39,"line":64},[37,123842,2472],{"emptyLinePlaceholder":131},[37,123844,123845],{"class":39,"line":76},[37,123846,123543],{"class":43},[37,123848,123849,123851,123853,123855],{"class":39,"line":92},[37,123850,24649],{"class":2035},[37,123852,123550],{"class":309},[37,123854,123553],{"class":309},[37,123856,123556],{"class":82},[37,123858,123859,123861,123863],{"class":39,"line":97},[37,123860,24649],{"class":2035},[37,123862,123550],{"class":309},[37,123864,123565],{"class":309},[14,123866,123568],{},[14,123868,123571],{},[14,123870,123574,123871,123874],{},[34,123872,123873],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,123876,123877],{},[119,123878],{"alt":32,"src":123879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,123881,123882],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,123884,123885,123887],{},[354,123886,118011],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[175,123889,123891],{"id":123890},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,123893,123894],{},"（1）.查看所连接的主机USB接口的信息",[27,123896,123898],{"className":117343,"code":123897,"language":117345,"meta":32,"style":32},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[34,123899,123900,123930],{"__ignoreMap":32},[37,123901,123902,123904,123906,123909,123911,123913,123915,123917,123920,123923,123925,123928],{"class":39,"line":40},[37,123903,123650],{"class":2035},[37,123905,69889],{"class":309},[37,123907,123908],{"class":82}," -a",[37,123910,29289],{"class":82},[37,123912,28495],{"class":54},[37,123914,123650],{"class":2035},[37,123916,69889],{"class":309},[37,123918,123919],{"class":82}," -q",[37,123921,123922],{"class":309}," path",[37,123924,25188],{"class":82},[37,123926,123927],{"class":309}," \u002Fdev\u002FttyACM0",[37,123929,214],{"class":54},[37,123931,123932,123934,123936,123938,123940,123942,123944,123946,123948,123950,123952,123955],{"class":39,"line":47},[37,123933,123650],{"class":2035},[37,123935,69889],{"class":309},[37,123937,123908],{"class":82},[37,123939,29289],{"class":82},[37,123941,28495],{"class":54},[37,123943,123650],{"class":2035},[37,123945,69889],{"class":309},[37,123947,123919],{"class":82},[37,123949,123922],{"class":309},[37,123951,25188],{"class":82},[37,123953,123954],{"class":309}," \u002Fdev\u002FttyUSB0",[37,123956,214],{"class":54},[14,123958,123959],{},[119,123960],{"alt":32,"src":123961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,123963,123964],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,123966,123379],{},[14,123968,123382,123969,123734],{},[34,123970,123385],{},[27,123972,123973],{"className":117343,"code":123389,"language":117345,"meta":32,"style":32},[34,123974,123975],{"__ignoreMap":32},[37,123976,123977,123979,123981],{"class":39,"line":40},[37,123978,24649],{"class":2035},[37,123980,118630],{"class":309},[37,123982,123400],{"class":309},[27,123984,123986],{"className":117343,"code":123985,"language":117345,"meta":32,"style":32},"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",[34,123987,123988,124016,124042],{"__ignoreMap":32},[37,123989,123990,123992,123994,123997,123999,124001,124003,124005,124008,124011,124013],{"class":39,"line":40},[37,123991,123413],{"class":54},[37,123993,70],{"class":50},[37,123995,123996],{"class":309},"=\"ttyACM*\",",[37,123998,123421],{"class":2035},[37,124000,123424],{"class":309},[37,124002,123453],{"class":2035},[37,124004,583],{"class":2035},[37,124006,124007],{"class":309}," ATTRS{idProduct}==\"55d4\",",[37,124009,124010],{"class":309}," ATTRS{serial}==\"0001\",",[37,124012,123435],{"class":309},[37,124014,124015],{"class":309}," SYMLINK+=\"ttyACM_MCU\"\n",[37,124017,124018,124020,124022,124024,124026,124028,124030,124032,124034,124037,124039],{"class":39,"line":47},[37,124019,123413],{"class":54},[37,124021,70],{"class":50},[37,124023,123996],{"class":309},[37,124025,123421],{"class":2035},[37,124027,123424],{"class":309},[37,124029,123453],{"class":2035},[37,124031,583],{"class":2035},[37,124033,124007],{"class":309},[37,124035,124036],{"class":309}," ATTRS{serial}==\"0002\",",[37,124038,123435],{"class":309},[37,124040,124041],{"class":309}," SYMLINK+=\"ttyACM_Lidar\"\n",[37,124043,124044,124046,124048,124050,124052,124054,124056,124058,124060,124062],{"class":39,"line":58},[37,124045,123413],{"class":54},[37,124047,70],{"class":50},[37,124049,123418],{"class":309},[37,124051,123421],{"class":2035},[37,124053,123424],{"class":309},[37,124055,123453],{"class":2035},[37,124057,583],{"class":2035},[37,124059,123458],{"class":309},[37,124061,123435],{"class":309},[37,124063,124064],{"class":309}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124066,123498],{},[14,124068,123501],{},[27,124070,124071],{"className":117343,"code":123504,"language":117345,"meta":32,"style":32},[34,124072,124073,124077,124087,124097,124101,124105,124115],{"__ignoreMap":32},[37,124074,124075],{"class":39,"line":40},[37,124076,123511],{"class":43},[37,124078,124079,124081,124083,124085],{"class":39,"line":47},[37,124080,24649],{"class":2035},[37,124082,120095],{"class":309},[37,124084,123520],{"class":309},[37,124086,123523],{"class":309},[37,124088,124089,124091,124093,124095],{"class":39,"line":58},[37,124090,24649],{"class":2035},[37,124092,120095],{"class":309},[37,124094,123520],{"class":309},[37,124096,123534],{"class":309},[37,124098,124099],{"class":39,"line":64},[37,124100,2472],{"emptyLinePlaceholder":131},[37,124102,124103],{"class":39,"line":76},[37,124104,123543],{"class":43},[37,124106,124107,124109,124111,124113],{"class":39,"line":92},[37,124108,24649],{"class":2035},[37,124110,123550],{"class":309},[37,124112,123553],{"class":309},[37,124114,123556],{"class":82},[37,124116,124117,124119,124121],{"class":39,"line":97},[37,124118,24649],{"class":2035},[37,124120,123550],{"class":309},[37,124122,123565],{"class":309},[14,124124,124125,124126],{},"再重新插拔设备即可，或者 ",[354,124127,124128],{},"直接重启系统。",[14,124130,123571],{},[14,124132,123574,124133,123874],{},[34,124134,123873],{},[14,124136,124137],{},[119,124138],{"alt":32,"src":124139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124141,123882],{},[14,124143,124144,124146],{},[354,124145,118011],{}," 一些设备可能没有串口号等。",[175,124148,124150],{"id":124149},"_744-其他注意事项","7.4.4 其他注意事项",[14,124152,124153,124154,124156,124157,124160,124161,18482,124164,124167,124168,124170],{},"并非所有的USB设备端口号都是",[34,124155,123608],{},"的格式，比如Arduino的端口号可能是",[34,124158,124159],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[34,124162,124163],{},"videon",[34,124165,124166],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[34,124169,124163],{},"端口，绑定时需要关联的也是该接口。",[14,124172,124173,124174,124177,124178,124181,124182,124184,124185,124188,124189,124192,124193,124196,124197,124196,124200,124196,124203,28458],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[34,124175,124176],{},"KERNEL==\"ttyUSB*\"","修改为",[34,124179,124180],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[34,124183,124176],{},"修改为类似于",[34,124186,124187],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[34,124190,124191],{},"video[0,2,4,6]","表示可以绑定的端口为",[34,124194,124195],{},"video0","或",[34,124198,124199],{},"video2",[34,124201,124202],{},"video4",[34,124204,124205],{},"video6",[146,124207,124209],{"id":124208},"_75-挂载内网网页","7.5 挂载内网网页",[14,124211,124212],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124214,124215],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124217,124218],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124220,124221,124222],{},"Termux 下载地址（F-Droid）：",[443,124223,124224],{"href":124224,"rel":124225},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23937],[14,124227,124228],{},"首先打开app后，先更新软件缓存：",[27,124230,124232],{"className":117343,"code":124231,"language":117345,"meta":32,"style":32},"pkg update\n",[34,124233,124234],{"__ignoreMap":32},[37,124235,124236,124239],{"class":39,"line":40},[37,124237,124238],{"class":2035},"pkg",[37,124240,26315],{"class":309},[14,124242,124243],{},"然后换源",[27,124245,124247],{"className":117343,"code":124246,"language":117345,"meta":32,"style":32},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[34,124248,124249],{"__ignoreMap":32},[37,124250,124251,124253,124256],{"class":39,"line":40},[37,124252,123121],{"class":2035},[37,124254,124255],{"class":54}," $PREFIX",[37,124257,124258],{"class":309},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124260,124261],{},"将该文件内容替换为下面：",[27,124263,124265],{"className":117343,"code":124264,"language":117345,"meta":32,"style":32},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[34,124266,124267],{"__ignoreMap":32},[37,124268,124269,124272,124275,124278],{"class":39,"line":40},[37,124270,124271],{"class":2035},"deb",[37,124273,124274],{"class":309}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[37,124276,124277],{"class":309}," stable",[37,124279,124280],{"class":309}," main\n",[1210,124282,124283,124310],{},[161,124284,124285,124286,124288,124289],{},"如果你使用的是",[34,124287,123121],{},"编辑器：",[1210,124290,124291,124298,124304],{},[161,124292,124293,124294,124297],{},"按 ",[34,124295,124296],{},"Ctrl+O"," 保存文件。",[161,124299,124293,124300,124303],{},[34,124301,124302],{},"Enter"," 确认文件名。",[161,124305,124293,124306,124309],{},[34,124307,124308],{},"Ctrl+X"," 退出编辑器。",[161,124311,124285,124312,124288,124315],{},[34,124313,124314],{},"vim",[1210,124316,124317,124323],{},[161,124318,124293,124319,124322],{},[34,124320,124321],{},"Esc"," 退出编辑模式。",[161,124324,124325,124326,124328],{},"输入 ",[34,124327,119268],{}," 保存并退出。",[14,124330,124331],{},"接下来重新更新软件源：",[27,124333,124335],{"className":117343,"code":124334,"language":117345,"meta":32,"style":32},"pkg update && pkg upgrade\n",[34,124336,124337],{"__ignoreMap":32},[37,124338,124339,124341,124343,124345,124347],{"class":39,"line":40},[37,124340,124238],{"class":2035},[37,124342,117394],{"class":309},[37,124344,26263],{"class":54},[37,124346,124238],{"class":2035},[37,124348,117380],{"class":309},[14,124350,124351],{},"安装python：",[27,124353,124355],{"className":117343,"code":124354,"language":117345,"meta":32,"style":32},"pkg install python\n",[34,124356,124357],{"__ignoreMap":32},[37,124358,124359,124361,124363],{"class":39,"line":40},[37,124360,124238],{"class":2035},[37,124362,23906],{"class":309},[37,124364,124365],{"class":309}," python\n",[14,124367,124368,26546],{},[354,124369,124370],{},"通过Termux访问设备存储",[14,124372,124373],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[27,124375,124377],{"className":117343,"code":124376,"language":117345,"meta":32,"style":32},"termux-setup-storage\n",[34,124378,124379],{"__ignoreMap":32},[37,124380,124381],{"class":39,"line":40},[37,124382,124376],{"class":2035},[158,124384,124385],{},[161,124386,124387,26546,124390],{},[354,124388,124389],{},"进入HTML文件所在的目录",[158,124391,124392],{},[161,124393,124394,124395,124397],{},"使用",[34,124396,101323],{},"命令进入HTML文件所在的目录：",[27,124399,124401],{"className":117343,"code":124400,"language":117345,"meta":32,"style":32},"cd ~\u002Fyour_html_folder\n",[34,124402,124403],{"__ignoreMap":32},[37,124404,124405,124407],{"class":39,"line":40},[37,124406,101323],{"class":82},[37,124408,124409],{"class":309}," ~\u002Fyour_html_folder\n",[158,124411,124412],{"start":47},[161,124413,124414,26546,124417,124422,124439],{},[354,124415,124416],{},"启动Python HTTP服务器",[158,124418,124419],{},[161,124420,124421],{},"运行以下命令启动一个简单的HTTP服务器：",[27,124423,124425],{"className":117343,"code":124424,"language":117345,"meta":32,"style":32},"python -m http.server 8000\n",[34,124426,124427],{"__ignoreMap":32},[37,124428,124429,124431,124433,124436],{"class":39,"line":40},[37,124430,31],{"class":2035},[37,124432,100929],{"class":82},[37,124434,124435],{"class":309}," http.server",[37,124437,124438],{"class":82}," 8000\n",[158,124440,124441],{"start":58},[161,124442,124443,124444,124447],{},"这会在端口",[34,124445,124446],{},"8000","上启动一个Web服务器。",[1210,124449,124450],{},[161,124451,124452],{},"启动服务器后，Termux会显示日志信息，例如：",[27,124454,124456],{"className":120863,"code":124455,"language":120865,"meta":120866,"style":32},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[34,124457,124458],{"__ignoreMap":32},[37,124459,124460],{"class":39,"line":40},[37,124461,124455],{},[1210,124463,124464],{},[161,124465,124466],{},"这表示服务器已成功启动。",[14,124468,124469],{},[354,124470,124471],{},"在浏览器中访问HTML文件",[158,124473,124474],{},[161,124475,124476,26546,124479,124484],{},[354,124477,124478],{},"在同一设备上访问",[158,124480,124481],{},[161,124482,124483],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[27,124485,124488],{"className":124486,"code":124487,"language":71732,"meta":32,"style":32},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[34,124489,124490],{"__ignoreMap":32},[37,124491,124492,124495],{"class":39,"line":40},[37,124493,124494],{"class":54},"http:",[37,124496,124497],{"class":43},"\u002F\u002Flocalhost:8000\n",[1210,124499,124500],{},[161,124501,124502,124503,124506],{},"如果HTML文件中有",[34,124504,124505],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[146,124508,124510],{"id":124509},"_76-linux重点知识","7.6 Linux重点知识",[175,124512,124514],{"id":124513},"_761-关于点的说明","7.6.1 关于点的说明",[14,124516,124517],{},[119,124518],{"alt":32,"src":124519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,124521,124522],{},"一点本目录，两点上目录",[175,124524,124526],{"id":124525},"_762-目录","7.6.2 目录",[22070,124528,124530],{"id":124529},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,124532,124533],{},[354,124534,124535],{},"\u002Fboot:",[14,124537,124538],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,124540,124541],{},[354,124542,124543],{},"\u002Fetc:",[14,124545,124546],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,124548,124549],{},[354,124550,124551],{},"\u002Flib：",[14,124553,124554],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,124556,124557],{},[354,124558,124559],{},"\u002Fsys:",[14,124561,124562],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22070,124564,124566],{"id":124565},"_7622-指令集合","7.6.2.2 指令集合",[14,124568,124569],{},[354,124570,124571],{},"\u002Fbin:",[14,124573,124574],{},"为二进制文件的缩写，存放最经常使用的命令",[14,124576,124577],{},[354,124578,124579],{},"\u002Fsbin:",[14,124581,124582],{},"只有系统管理员才能使用的程序和指令",[22070,124584,124586],{"id":124585},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,124588,124589],{},[354,124590,124591],{},"\u002Fdev:",[14,124593,124594],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,124596,124597],{},[354,124598,124599],{},"\u002Fmedia:",[14,124601,124602],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,124604,124605],{},[354,124606,124607],{},"\u002Fmnt:",[14,124609,124610],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22070,124612,124614],{"id":124613},"_7624-临时文件","7.6.2.4 临时文件",[14,124616,124617],{},[354,124618,124619],{},"\u002Frun:",[14,124621,124622],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,124624,124625],{},[354,124626,124627],{},"\u002Flost+found:",[14,124629,124630],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,124632,124633],{},[354,124634,124635],{},"\u002Ftmp:",[14,124637,124638],{},"这个目录是用来存放一些临时文件的",[22070,124640,124642],{"id":124641},"_7625-账户","7.6.2.5 账户",[14,124644,124645],{},[354,124646,124647],{},"\u002Froot：",[14,124649,124650],{},"系统管理员的用户主目录",[14,124652,124653,26546],{},[354,124654,124655],{},"\u002Fhome",[14,124657,124658],{},"用户的主目录，以用户的账号命名的",[14,124660,124661,26546],{},[354,124662,124663],{},"\u002Fusr",[14,124665,124666],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,124668,124669],{},[354,124670,124671],{},"\u002Fusr\u002Fbin：",[14,124673,124674],{},"系统用户使用的应用程序与指令",[14,124676,124677],{},[354,124678,124679],{},"\u002Fusr\u002Fsbin：",[14,124681,124682],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,124684,124685],{},[354,124686,124687],{},"\u002Fusr\u002Fsrc：",[14,124689,124690],{},"内核源代码默认的放置目录",[22070,124692,124694],{"id":124693},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,124696,124697],{},[354,124698,124699],{},"\u002Fvar：",[14,124701,124702],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,124704,124705],{},[354,124706,124707],{},"\u002Fproc:",[14,124709,124710,124711,124714],{},"管理 ",[354,124712,124713],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22070,124716,124718],{"id":124717},"_7627-扩展用的","7.6.2.7 扩展用的",[14,124720,124721],{},[354,124722,124723],{},"\u002Fopt:",[14,124725,124726],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,124728,124729],{},[354,124730,124731],{},"\u002Fsrv:",[14,124733,124734],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[175,124736,124738],{"id":124737},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,124740,124741],{},[119,124742],{"alt":32,"src":124743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,124745,124746],{},"windows-->linux:",[14,124748,124749],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,124751,124752],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,124754,124755],{},"linux传输文件到windows",[14,124757,124758],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[175,124760,124762],{"id":124761},"_764-易忘知识","7.6.4 易忘知识",[14,124764,124765],{},"操作系统内核查看",[27,124767,124768],{"className":117343,"code":121337,"language":117345,"meta":32,"style":32},[34,124769,124770],{"__ignoreMap":32},[37,124771,124772,124774],{"class":39,"line":40},[37,124773,70272],{"class":2035},[37,124775,121346],{"class":82},[14,124777,124778],{},[119,124779],{"alt":32,"src":124780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,124782,124783],{},[119,124784],{"alt":32,"src":124785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[27,124787,124789],{"className":117343,"code":124788,"language":117345,"meta":32,"style":32},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[34,124790,124791,124803],{"__ignoreMap":32},[37,124792,124793,124795,124798,124801],{"class":39,"line":40},[37,124794,121554],{"class":2035},[37,124796,124797],{"class":309}," mvtest",[37,124799,124800],{"class":309}," mvtest2",[37,124802,2746],{"class":54},[37,124804,124805],{"class":39,"line":47},[37,124806,124807],{"class":2035},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,124809,124810],{},[119,124811],{"alt":32,"src":124812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,124814,124815],{},[119,124816],{"alt":32,"src":124817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,124819,124820,124821,124824],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[34,124822,124823],{},"du -a"," 可以快速查看磁盘使用细节。",[175,124826,124828],{"id":124827},"_765-vim","7.6.5 Vim",[14,124830,124831],{},[119,124832],{"alt":32,"src":124833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,124835,124836],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,124838,124839],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,124841,124842],{},[354,124843,124844],{},"1.命令模式：",[14,124846,124847],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,124849,124850],{},"x 删除当前光标所在处的字符",[14,124852,124853],{},"：切换到底线命令模式，以在最底一行输入命令",[14,124855,124856],{},"a 进行插入模式，在光标下一个位置输入文本",[14,124858,124859],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,124861,124862],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,124864,124865],{},"dd 剪切当前行",[14,124867,124868],{},"yy 复制当前行",[14,124870,124871],{},"p 粘贴剪贴板内容到光标下方",[14,124873,124874],{},"P 粘贴剪贴板内容到光标上方",[14,124876,124877],{},"u 撤销上一次操作",[14,124879,124880],{},"ctrl+r 重做上一次操作",[14,124882,124883,124885],{},[998,124884],{}," 保存文件",[14,124887,124888,124890],{},[848,124889],{}," 退出Vim编辑器",[14,124892,124893,124895],{},[848,124894],{},"! 强制退出Vim编辑器，不保存修改",[14,124897,124898],{},[354,124899,124900],{},"2.输入模式：",[14,124902,124903],{},[119,124904],{"alt":32,"src":124905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,124907,124908],{},[354,124909,124910],{},"3.底线命令模式：",[14,124912,124913],{},[119,124914],{"alt":32,"src":124915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,124917,124918],{},"按下esc可以退出底线命令模式",[175,124920,124922],{"id":124921},"_766-apt","7.6.6 apt",[14,124924,124925],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[175,124927,124929],{"id":124928},"_767-home与root的区别","7.6.7 home与root的区别",[14,124931,124932],{},[119,124933],{"alt":32,"src":124934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,124936,124937],{},[119,124938],{"alt":32,"src":124939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,124941,124942],{},[119,124943],{"alt":32,"src":124944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,124946,124947],{},[119,124948],{"alt":32,"src":124949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[175,124951,124953],{"id":124952},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,124955,124956],{},[443,124957,124958],{"href":124958,"rel":124959},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[23937],[158,124961,124962,124965],{},[161,124963,124964],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[161,124966,124967],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,124969,124970],{},[119,124971],{"alt":32,"src":124972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,124974,124975],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,124977,124978],{},[119,124979],{"alt":32,"src":124980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[27,124982,124984],{"className":120863,"code":124983,"language":120865,"meta":120866,"style":32},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[34,124985,124986,124991],{"__ignoreMap":32},[37,124987,124988],{"class":39,"line":40},[37,124989,124990],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[37,124992,124993],{"class":39,"line":47},[37,124994,124995],{},".\u002Fpycharm.sh\n",[14,124997,124998],{},"3️⃣创建.desktop文件",[14,125000,125001],{},[354,125002,125003],{},"原理：",[1210,125005,125006,125016],{},[161,125007,125008,125009,125015],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[354,125010,125011,125014],{},[34,125012,125013],{},".desktop"," 文件"," 来识别应用。",[161,125017,125018,125020,125021],{},[34,125019,125013],{}," 文件相当于一个“应用注册表”，告诉系统：",[1210,125022,125023,125026,125029,125032,125035],{},[161,125024,125025],{},"应用名字（Name）",[161,125027,125028],{},"图标（Icon）",[161,125030,125031],{},"执行命令（Exec）",[161,125033,125034],{},"分类（Categories）",[161,125036,125037],{},"是否需要终端（Terminal）",[27,125039,125041],{"className":120863,"code":125040,"language":120865,"meta":120866,"style":32},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[34,125042,125043,125048],{"__ignoreMap":32},[37,125044,125045],{"class":39,"line":40},[37,125046,125047],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[37,125049,125050],{"class":39,"line":47},[37,125051,125052],{},"nano pycharm.desktop\n",[14,125054,125055],{},"nano是一个命令行下的编辑器，也可以使用vim",[27,125057,125059],{"className":120863,"code":125058,"language":120865,"meta":120866,"style":32},"[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",[34,125060,125061,125066,125071,125076,125081,125086,125091,125096,125101,125106],{"__ignoreMap":32},[37,125062,125063],{"class":39,"line":40},[37,125064,125065],{},"[Desktop Entry]\n",[37,125067,125068],{"class":39,"line":47},[37,125069,125070],{},"Version=1.0\n",[37,125072,125073],{"class":39,"line":58},[37,125074,125075],{},"Type=Application\n",[37,125077,125078],{"class":39,"line":64},[37,125079,125080],{},"Name=PyCharm\n",[37,125082,125083],{"class":39,"line":76},[37,125084,125085],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[37,125087,125088],{"class":39,"line":92},[37,125089,125090],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[37,125092,125093],{"class":39,"line":97},[37,125094,125095],{},"Comment=JetBrains PyCharm IDE\n",[37,125097,125098],{"class":39,"line":107},[37,125099,125100],{},"Categories=Development;IDE;\n",[37,125102,125103],{"class":39,"line":1390},[37,125104,125105],{},"Terminal=false\n",[37,125107,125108],{"class":39,"line":1402},[37,125109,125110],{},"StartupWMClass=jetbrains-pycharm\n",[1210,125112,125113,125119,125125,125131],{},[161,125114,125115,125118],{},[34,125116,125117],{},"Exec"," → 点击图标时执行的命令",[161,125120,125121,125124],{},[34,125122,125123],{},"Icon"," → 显示在菜单和桌面上的图标",[161,125126,125127,125130],{},[34,125128,125129],{},"Terminal=false"," → 不打开终端",[161,125132,125133,125136],{},[34,125134,125135],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125138,125139,125140],"blockquote",{},[14,125141,125142,125143,125145,125146],{},"可以理解成 ",[34,125144,125013],{}," 文件是 Linux 的 ",[354,125147,125148],{},"快捷方式配置文件",[14,125150,125151],{},"4️⃣设置可执行权限",[27,125153,125155],{"className":120863,"code":125154,"language":120865,"meta":120866,"style":32},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[34,125156,125157],{"__ignoreMap":32},[37,125158,125159],{"class":39,"line":40},[37,125160,125154],{},[14,125162,125163],{},"5️⃣桌面图标启动的话如下：",[27,125165,125167],{"className":120863,"code":125166,"language":120865,"meta":120866,"style":32},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[34,125168,125169,125174],{"__ignoreMap":32},[37,125170,125171],{"class":39,"line":40},[37,125172,125173],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[37,125175,125176],{"class":39,"line":47},[37,125177,125178],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[158,125180,125181],{"start":58},[161,125182,125183],{},"下载Appimage文件实现软件的安装",[14,125185,125186],{},"1️⃣先下载appimage",[14,125188,125189],{},[443,125190,125191],{"href":125191,"rel":125192},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23937],[14,125194,125195],{},[119,125196],{"alt":32,"src":125197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125199,125200],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125202,125203],{},[119,125204],{"alt":32,"src":125205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125207,125208],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125210,125211],{},[119,125212],{"alt":32,"src":125213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125215,125216],{},[119,125217],{"alt":32,"src":125218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125220,125221,125222,125225],{},"3️⃣给他们放在",[34,125223,125224],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125227,125228],{},"4️⃣给软件执行权限",[27,125230,125232],{"className":120863,"code":125231,"language":120865,"meta":120866,"style":32},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[34,125233,125234,125239],{"__ignoreMap":32},[37,125235,125236],{"class":39,"line":40},[37,125237,125238],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[37,125240,125241],{"class":39,"line":47},[37,125242,125243],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125245,125246],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[27,125248,125250],{"className":117343,"code":125249,"language":117345,"meta":32,"style":32},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[34,125251,125252,125259,125266,125272],{"__ignoreMap":32},[37,125253,125254,125256],{"class":39,"line":40},[37,125255,101323],{"class":82},[37,125257,125258],{"class":309}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[37,125260,125261,125263],{"class":39,"line":47},[37,125262,101330],{"class":2035},[37,125264,125265],{"class":309}," .\u002Fqqmusic.desktop\n",[37,125267,125268,125270],{"class":39,"line":58},[37,125269,124314],{"class":2035},[37,125271,125265],{"class":309},[37,125273,125274,125276,125278,125280],{"class":39,"line":64},[37,125275,24649],{"class":2035},[37,125277,24652],{"class":309},[37,125279,123180],{"class":309},[37,125281,125265],{"class":309},[14,125283,125284,125286],{},[34,125285,101330],{},"：一个 Linux 命令，主要功能是：",[1210,125288,125289,125292],{},[161,125290,125291],{},"如果文件不存在，就创建一个新的空文件",[161,125293,125294],{},"如果文件已存在，就更新该文件的最后修改时间",[27,125296,125298],{"className":120863,"code":125297,"language":120865,"meta":120866,"style":32},"[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",[34,125299,125300,125304,125309,125314,125319,125323,125328],{"__ignoreMap":32},[37,125301,125302],{"class":39,"line":40},[37,125303,125065],{},[37,125305,125306],{"class":39,"line":47},[37,125307,125308],{},"Name=QQ音乐\n",[37,125310,125311],{"class":39,"line":58},[37,125312,125313],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[37,125315,125316],{"class":39,"line":64},[37,125317,125318],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[37,125320,125321],{"class":39,"line":76},[37,125322,125075],{},[37,125324,125325],{"class":39,"line":92},[37,125326,125327],{},"Categories=Audio;Music;Player;\n",[37,125329,125330],{"class":39,"line":97},[37,125331,125332],{},"Comment=QQ Music Client for Linux\n",[14,125334,125335],{},"将文件复制进去",[14,125337,125338],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125340,125341],{},[119,125342],{"alt":32,"src":125343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125345,125346],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125348,125349],{},[119,125350],{"alt":32,"src":125351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125353,125354,125355,125358,125359,125362],{},"如果你用的不是KDE，那么也可以直接修改",[34,125356,125357],{},"qqmuic.desktop","：在exec的末尾加上",[34,125360,125361],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[27,125364,125366],{"className":120863,"code":125365,"language":120865,"meta":120866,"style":32},"[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",[34,125367,125368,125372,125376,125381,125385,125389,125393],{"__ignoreMap":32},[37,125369,125370],{"class":39,"line":40},[37,125371,125065],{},[37,125373,125374],{"class":39,"line":47},[37,125375,125308],{},[37,125377,125378],{"class":39,"line":58},[37,125379,125380],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[37,125382,125383],{"class":39,"line":64},[37,125384,125318],{},[37,125386,125387],{"class":39,"line":76},[37,125388,125075],{},[37,125390,125391],{"class":39,"line":92},[37,125392,125327],{},[37,125394,125395],{"class":39,"line":97},[37,125396,125332],{},[14,125398,125399],{},[119,125400],{"alt":32,"src":125401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125403,125404],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[27,125406,125408],{"className":120863,"code":125407,"language":120865,"meta":120866,"style":32},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[34,125409,125410],{"__ignoreMap":32},[37,125411,125412],{"class":39,"line":40},[37,125413,125407],{},[158,125415,125416],{"start":64},[161,125417,125418],{},"去Flathub上安装软件",[14,125420,125421],{},[443,125422,125423],{"href":125423,"rel":125424},"https:\u002F\u002Fflathub.org\u002F",[23937],[14,125426,125427],{},"1️⃣去上面的官网搜索软件+下载软件",[14,125429,125430],{},[119,125431],{"alt":32,"src":125432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[27,125434,125436],{"className":120863,"code":125435,"language":120865,"meta":120866,"style":32},"flatpak install flathub com.obsproject.Studio\n",[34,125437,125438],{"__ignoreMap":32},[37,125439,125440],{"class":39,"line":40},[37,125441,125435],{},[14,125443,125444],{},[119,125445],{"alt":32,"src":125446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,125448,125449],{},"2️⃣运行软件",[14,125451,125452],{},"a.官方方式：",[14,125454,125455],{},[119,125456],{"alt":32,"src":125457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[27,125459,125460],{"className":120863,"code":125435,"language":120865,"meta":120866,"style":32},[34,125461,125462],{"__ignoreMap":32},[37,125463,125464],{"class":39,"line":40},[37,125465,125435],{},[14,125467,125468],{},"b.当普通软件运行：",[14,125470,125471],{},[119,125472],{"alt":32,"src":125473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,125475,125476],{},[119,125477],{"alt":32,"src":125478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[123,125480,125481],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":32,"searchDepth":47,"depth":47,"links":125483},[125484,125485,125490,125491,125497,125498],{"id":122216,"depth":47,"text":122217},{"id":122558,"depth":47,"text":122559,"children":125486},[125487,125488,125489],{"id":122562,"depth":58,"text":122563},{"id":122629,"depth":58,"text":122630},{"id":122890,"depth":58,"text":122891},{"id":123043,"depth":47,"text":123044},{"id":123281,"depth":47,"text":123282,"children":125492},[125493,125494,125495,125496],{"id":123333,"depth":58,"text":123334},{"id":123619,"depth":58,"text":123620},{"id":123890,"depth":58,"text":123891},{"id":124149,"depth":58,"text":124150},{"id":124208,"depth":47,"text":124209},{"id":124509,"depth":47,"text":124510,"children":125499},[125500,125501,125502,125503,125504,125505,125506,125507],{"id":124513,"depth":58,"text":124514},{"id":124525,"depth":58,"text":124526},{"id":124737,"depth":58,"text":124738},{"id":124761,"depth":58,"text":124762},{"id":124827,"depth":58,"text":124828},{"id":124921,"depth":58,"text":124922},{"id":124928,"depth":58,"text":124929},{"id":124952,"depth":58,"text":124953},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122208,"description":128},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125514,"title":125515,"body":125516,"description":128,"extension":129,"meta":125520,"navigation":131,"path":125521,"seo":125522,"stem":125523,"__hash__":125524},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125517,"toc":125518},[],{"title":32,"searchDepth":47,"depth":47,"links":125519},[],{"category":30336},"\u002Fwiki\u002F2025-01-27-linux",{"title":125515,"description":128},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125526,"title":125527,"body":125528,"description":125532,"extension":129,"meta":125923,"navigation":131,"path":125924,"seo":125925,"stem":125926,"__hash__":125927},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125529,"toc":125921},[125530,125533,125537,125554,125557,125610,125614,125616,125656,125665,125669,125672,125913,125918],[14,125531,125532],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125534,125536],{"id":125535},"_1ubuntu环境配置","1.Ubuntu环境配置",[158,125538,125539,125542,125545,125548,125551],{},[161,125540,125541],{},"ubuntu环境换源",[161,125543,125544],{},"安装cuda",[161,125546,125547],{},"安装miniconda",[161,125549,125550],{},"安装pytorch",[161,125552,125553],{},"安装genesis",[14,125555,125556],{},"参考链接：",[27,125558,125560],{"className":23894,"code":125559,"language":23896,"meta":32,"style":32},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[34,125561,125562],{"__ignoreMap":32},[37,125563,125564,125567,125570,125573,125575,125578,125581,125583,125586,125589,125591,125594,125597,125599,125602,125605,125607],{"class":39,"line":40},[37,125565,125566],{"class":2035},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[37,125568,125569],{"class":309},"=blogdetail",[37,125571,125572],{"class":54},"&sharetype",[37,125574,70],{"class":50},[37,125576,125577],{"class":309},"blogdetail",[37,125579,125580],{"class":54},"&sharerId",[37,125582,70],{"class":50},[37,125584,125585],{"class":309},"144728092",[37,125587,125588],{"class":54},"&sharerefer",[37,125590,70],{"class":50},[37,125592,125593],{"class":309},"PC",[37,125595,125596],{"class":54},"&sharesource",[37,125598,70],{"class":50},[37,125600,125601],{"class":309},"qq_69379513",[37,125603,125604],{"class":54},"&sharefrom",[37,125606,70],{"class":50},[37,125608,125609],{"class":309},"from_link\n",[10,125611,125613],{"id":125612},"_2genesis-报错issue","2.Genesis 报错issue",[14,125615,125556],{},[27,125617,125618],{"className":23894,"code":125559,"language":23896,"meta":32,"style":32},[34,125619,125620],{"__ignoreMap":32},[37,125621,125622,125624,125626,125628,125630,125632,125634,125636,125638,125640,125642,125644,125646,125648,125650,125652,125654],{"class":39,"line":40},[37,125623,125566],{"class":2035},[37,125625,125569],{"class":309},[37,125627,125572],{"class":54},[37,125629,70],{"class":50},[37,125631,125577],{"class":309},[37,125633,125580],{"class":54},[37,125635,70],{"class":50},[37,125637,125585],{"class":309},[37,125639,125588],{"class":54},[37,125641,70],{"class":50},[37,125643,125593],{"class":309},[37,125645,125596],{"class":54},[37,125647,70],{"class":50},[37,125649,125601],{"class":309},[37,125651,125604],{"class":54},[37,125653,70],{"class":50},[37,125655,125609],{"class":309},[27,125657,125659],{"className":23894,"code":125658,"language":23896,"meta":32,"style":32},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[34,125660,125661],{"__ignoreMap":32},[37,125662,125663],{"class":39,"line":40},[37,125664,125658],{"class":2035},[10,125666,125668],{"id":125667},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,125670,125671],{},"hello_robot.py",[27,125673,125675],{"className":29,"code":125674,"language":31,"meta":32,"style":32},"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",[34,125676,125677,125683,125698,125702,125714,125726,125730,125743,125747,125766,125776,125786,125800,125804,125808,125813,125817,125827,125834,125848,125855,125865,125870,125874,125892,125897,125901,125908],{"__ignoreMap":32},[37,125678,125679,125681],{"class":39,"line":40},[37,125680,51],{"class":50},[37,125682,45374],{"class":54},[37,125684,125685,125688,125691,125693,125695],{"class":39,"line":47},[37,125686,125687],{"class":54},"os.environ[",[37,125689,125690],{"class":309},"'PYOPENGL_PLATFORM'",[37,125692,4515],{"class":54},[37,125694,70],{"class":50},[37,125696,125697],{"class":309}," 'glx'\n",[37,125699,125700],{"class":39,"line":58},[37,125701,2472],{"emptyLinePlaceholder":131},[37,125703,125704,125706,125709,125711],{"class":39,"line":64},[37,125705,51],{"class":50},[37,125707,125708],{"class":54}," genesis ",[37,125710,31453],{"class":50},[37,125712,125713],{"class":54}," gs\n",[37,125715,125716,125718,125721,125723],{"class":39,"line":76},[37,125717,30807],{"class":50},[37,125719,125720],{"class":54}," pynput ",[37,125722,51],{"class":50},[37,125724,125725],{"class":54}," keyboard\n",[37,125727,125728],{"class":39,"line":92},[37,125729,2472],{"emptyLinePlaceholder":131},[37,125731,125732,125735,125738,125740],{"class":39,"line":97},[37,125733,125734],{"class":54},"gs.init(",[37,125736,125737],{"class":5288},"backend",[37,125739,70],{"class":50},[37,125741,125742],{"class":54},"gs.gpu)\n",[37,125744,125745],{"class":39,"line":107},[37,125746,2472],{"emptyLinePlaceholder":131},[37,125748,125749,125752,125754,125757,125760,125762,125764],{"class":39,"line":1390},[37,125750,125751],{"class":54},"scene ",[37,125753,70],{"class":50},[37,125755,125756],{"class":54}," gs.Scene(",[37,125758,125759],{"class":5288},"show_viewer",[37,125761,70],{"class":50},[37,125763,31546],{"class":82},[37,125765,214],{"class":54},[37,125767,125768,125771,125773],{"class":39,"line":1402},[37,125769,125770],{"class":54},"plane ",[37,125772,70],{"class":50},[37,125774,125775],{"class":54}," scene.add_entity(gs.morphs.Plane())\n",[37,125777,125778,125781,125783],{"class":39,"line":1684},[37,125779,125780],{"class":54},"franka ",[37,125782,70],{"class":50},[37,125784,125785],{"class":54}," scene.add_entity(\n",[37,125787,125788,125791,125793,125795,125798],{"class":39,"line":1689},[37,125789,125790],{"class":54},"    gs.morphs.MJCF(",[37,125792,45423],{"class":5288},[37,125794,70],{"class":50},[37,125796,125797],{"class":309},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[37,125799,38116],{"class":54},[37,125801,125802],{"class":39,"line":1695},[37,125803,214],{"class":54},[37,125805,125806],{"class":39,"line":1700},[37,125807,2472],{"emptyLinePlaceholder":131},[37,125809,125810],{"class":39,"line":1714},[37,125811,125812],{"class":54},"scene.build()\n",[37,125814,125815],{"class":39,"line":1719},[37,125816,2472],{"emptyLinePlaceholder":131},[37,125818,125819,125821,125824],{"class":39,"line":1725},[37,125820,32017],{"class":50},[37,125822,125823],{"class":2035}," on_press",[37,125825,125826],{"class":54},"(key):\n",[37,125828,125829,125832],{"class":39,"line":1746},[37,125830,125831],{"class":50},"    try",[37,125833,3811],{"class":54},[37,125835,125836,125838,125841,125843,125846],{"class":39,"line":1751},[37,125837,2569],{"class":50},[37,125839,125840],{"class":54}," key.char ",[37,125842,3021],{"class":50},[37,125844,125845],{"class":309}," 'q'",[37,125847,3811],{"class":54},[37,125849,125850,125852],{"class":39,"line":1765},[37,125851,15804],{"class":50},[37,125853,125854],{"class":82}," False\n",[37,125856,125857,125860,125863],{"class":39,"line":1770},[37,125858,125859],{"class":50},"    except",[37,125861,125862],{"class":82}," AttributeError",[37,125864,3811],{"class":54},[37,125866,125867],{"class":39,"line":1799},[37,125868,125869],{"class":50},"        pass\n",[37,125871,125872],{"class":39,"line":1804},[37,125873,2472],{"emptyLinePlaceholder":131},[37,125875,125876,125879,125881,125884,125887,125889],{"class":39,"line":1821},[37,125877,125878],{"class":54},"listener ",[37,125880,70],{"class":50},[37,125882,125883],{"class":54}," keyboard.Listener(",[37,125885,125886],{"class":5288},"on_press",[37,125888,70],{"class":50},[37,125890,125891],{"class":54},"on_press)\n",[37,125893,125894],{"class":39,"line":1826},[37,125895,125896],{"class":54},"listener.start()\n",[37,125898,125899],{"class":39,"line":1831},[37,125900,2472],{"emptyLinePlaceholder":131},[37,125902,125903,125905],{"class":39,"line":1836},[37,125904,108710],{"class":50},[37,125906,125907],{"class":54}," listener.running:\n",[37,125909,125910],{"class":39,"line":1850},[37,125911,125912],{"class":54},"    scene.step()\n",[14,125914,125915],{},[119,125916],{"alt":32,"src":125917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[123,125919,125920],{},"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":32,"searchDepth":47,"depth":47,"links":125922},[],{"category":23450},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125527,"description":125532},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125929,"title":125930,"body":125931,"description":128,"extension":129,"meta":125946,"navigation":131,"path":125947,"seo":125948,"stem":125949,"__hash__":125950},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125932,"toc":125943},[125933,125936,125940],[10,125934,125930],{"id":125935},"_1-基础知识",[146,125937,125939],{"id":125938},"_11-js的组成","1.1 js的组成",[14,125941,125942],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":32,"searchDepth":47,"depth":47,"links":125944},[125945],{"id":125938,"depth":47,"text":125939},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125930,"description":128},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125952,"title":125953,"body":125954,"description":128,"extension":129,"meta":126093,"navigation":131,"path":126094,"seo":126095,"stem":126096,"__hash__":126097},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125955,"toc":126081},[125956,125959,125963,125966,125970,125980,125984,125987,125990,125993,125997,126004,126010,126014,126020,126031,126035,126038,126042,126045,126049,126052,126056,126059,126063,126066,126069,126072,126075,126078],[10,125957,125953],{"id":125958},"_2-vscode必备内容",[146,125960,125962],{"id":125961},"_21-标签分类","2.1 标签分类",[14,125964,125965],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[146,125967,125969],{"id":125968},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,125971,125972,125973,125975,125976,125979],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[34,125974,431],{}," 然后按 ",[34,125977,125978],{},"Tab","，快速自动生成基本结构。",[146,125981,125983],{"id":125982},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,125985,125986],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,125988,125989],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,125991,125992],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[146,125994,125996],{"id":125995},"_24-视图缩放","2.4 视图缩放",[14,125998,125999,126000,126003],{},"缩放视图 ",[34,126001,126002],{},"ctrl+"," 可实现代码增大。",[14,126005,126006,126009],{},[34,126007,126008],{},"ctrl-"," 可实现代码减小。",[146,126011,126013],{"id":126012},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,126015,126016,126017,28458],{},"VSCode 新建文件快捷键为 ",[34,126018,126019],{},"ctrl+N",[14,126021,126022,126023,126026,126027,126030],{},"保存快捷键为 ",[34,126024,126025],{},"ctrl+S","，将文本保存为 ",[34,126028,126029],{},".html"," 文件。",[146,126032,126034],{"id":126033},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,126036,126037],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[146,126039,126041],{"id":126040},"_27-vscode-icons","2.7 vscode-icons",[14,126043,126044],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[146,126046,126048],{"id":126047},"_28-easy-less","2.8 Easy LESS",[14,126050,126051],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[146,126053,126055],{"id":126054},"_29-会了吧插件","2.9 会了吧插件",[14,126057,126058],{},"会了吧插件可以展示代码中英语单词的意思。",[146,126060,126062],{"id":126061},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,126064,126065],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126067,126068],{},"②选定多个相同的单词:ctrl+D",[14,126070,126071],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126073,126074],{},"④全局替换某些单词:ctrl+h",[14,126076,126077],{},"⑤快速定位到某一行:ctrl+g",[14,126079,126080],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":32,"searchDepth":47,"depth":47,"links":126082},[126083,126084,126085,126086,126087,126088,126089,126090,126091,126092],{"id":125961,"depth":47,"text":125962},{"id":125968,"depth":47,"text":125969},{"id":125982,"depth":47,"text":125983},{"id":125995,"depth":47,"text":125996},{"id":126012,"depth":47,"text":126013},{"id":126033,"depth":47,"text":126034},{"id":126040,"depth":47,"text":126041},{"id":126047,"depth":47,"text":126048},{"id":126054,"depth":47,"text":126055},{"id":126061,"depth":47,"text":126062},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125953,"description":128},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126099,"title":126100,"body":126101,"description":128,"extension":129,"meta":126260,"navigation":131,"path":126261,"seo":126262,"stem":126263,"__hash__":126264},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126102,"toc":126252},[126103,126106,126110,126120,126126,126132,126136,126145,126149,126154,126157,126160,126164,126167,126177,126186,126195,126204,126214,126221,126226,126231,126244],[10,126104,126100],{"id":126105},"_3-html文本与容器标签",[146,126107,126109],{"id":126108},"_31-标题标签","3.1 标题标签",[14,126111,126112,126115,126116,126119],{},[34,126113,126114],{},"\u003Ch1>","我是一级标签",[34,126117,126118],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126121,126122,126115,126124],{},[34,126123,126114],{},[34,126125,126118],{},[14,126127,123382,126128,126131],{},[34,126129,126130],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[146,126133,126135],{"id":126134},"_32-段落标签","3.2 段落标签",[14,126137,126138,126141,126142],{},[34,126139,126140],{},"\u003Cp>","....",[34,126143,126144],{},"\u003C\u002Fp>",[146,126146,126148],{"id":126147},"_33-换行标签","3.3 换行标签",[14,126150,126151],{},[34,126152,126153],{},"\u003Cbr \u002F>",[14,126155,126156],{},"具有强制换行的作用",[14,126158,126159],{},"单标签",[146,126161,126163],{"id":126162},"_34-文本格式化标签","3.4 文本格式化标签",[14,126165,126166],{},"提供粗体、斜体和下划线等效果",[14,126168,126169,126170,82607,126173,126176],{},"加粗：",[34,126171,126172],{},"\u003Cstrong>...\u003C\u002Fstrong>",[34,126174,126175],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126178,126179,126180,82607,126183,126176],{},"斜体：",[34,126181,126182],{},"\u003Cem>...\u003C\u002Fem>",[34,126184,126185],{},"\u003Ci>...\u003C\u002Fi>",[14,126187,126188,126189,82607,126192,126176],{},"删除线：",[34,126190,126191],{},"\u003Cdel>...\u003C\u002Fdel>",[34,126193,126194],{},"\u003Cs>...\u003C\u002Fs>",[14,126196,126197,126198,82607,126201,126176],{},"下划线：",[34,126199,126200],{},"\u003Cins>...\u003C\u002Fins>",[34,126202,126203],{},"\u003Cu>...\u003C\u002Fu>",[146,126205,126207,126208,18482,126211,102740],{"id":126206},"_35-div和span标签","3.5 ",[34,126209,126210],{},"\u003Cdiv>",[34,126212,126213],{},"\u003Cspan>",[14,126215,126216,101065,126218,126220],{},[34,126217,126210],{},[34,126219,126213],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126222,126223],{},[34,126224,126225],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126227,126228],{},[34,126229,126230],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126232,126233,126234,126236,126237,126239,126240,126243],{},"两者特点：①",[34,126235,126210],{}," 标签用来布局，但一行通常只放一个 ",[34,126238,126210],{},"。可以理解为一个大盒子，独占一行，在 ",[34,126241,126242],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126245,77317,126246,126248,126249,126251],{},[34,126247,126213],{}," 标签也可用于布局，一行可以放多个 ",[34,126250,126213],{},"，可理解为小盒子。",{"title":32,"searchDepth":47,"depth":47,"links":126253},[126254,126255,126256,126257,126258],{"id":126108,"depth":47,"text":126109},{"id":126134,"depth":47,"text":126135},{"id":126147,"depth":47,"text":126148},{"id":126162,"depth":47,"text":126163},{"id":126206,"depth":47,"text":126259},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126100,"description":128},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126266,"title":126267,"body":126268,"description":128,"extension":129,"meta":126465,"navigation":131,"path":126466,"seo":126467,"stem":126468,"__hash__":126469},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126269,"toc":126457},[126270,126273,126277,126280,126286,126293,126299,126305,126308,126311,126314,126317,126320,126323,126326,126330,126333,126336,126339,126345,126351,126357,126364,126368,126374,126380,126383,126386,126392,126398,126404,126407,126410,126414,126417,126427,126433,126437,126446,126450,126453],[10,126271,126267],{"id":126272},"_4-html图像与链接",[146,126274,126276],{"id":126275},"_41-图像标签","4.1 图像标签",[14,126278,126279],{},"（1）标签",[14,126281,126282,126285],{},[34,126283,126284],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126287,126288,126289,126292],{},"src是",[34,126290,126291],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126294,126295,126296],{},"alt:文本，替换文本。图像不能显示的文字 ",[34,126297,126298],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126300,126301,126302],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[34,126303,126304],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126306,126307],{},"width:像素，设置图像的宽度",[14,126309,126310],{},"height:像素，设置图像的高度",[14,126312,126313],{},"border：像素，设置图像的边框粗细",[14,126315,126316],{},"（2）图像标签属性的注意点：",[14,126318,126319],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126321,126322],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126324,126325],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[146,126327,126329],{"id":126328},"_42-路径注意要点","4.2 路径注意要点：",[14,126331,126332],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126334,126335],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126337,126338],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126340,126341,126342],{},"①同一级路径：图像文件位于HTML文件同一级，如",[34,126343,126344],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126346,126347,126348],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[34,126349,126350],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126352,126353,126354],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[34,126355,126356],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126358,126359,126360,456],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[443,126361,126362],{"href":126362,"rel":126363},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23937],[146,126365,126367],{"id":126366},"_43-超链接标签","4.3 超链接标签",[14,126369,126370,126373],{},[34,126371,126372],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126375,126376,126377],{},"①语法格式：",[34,126378,126379],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126381,126382],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126384,126385],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126387,126388,126389],{},"③链接分类：外部链接：",[34,126390,126391],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126393,126394,126395],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[34,126396,126397],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126399,126400,126401],{},"空链接：如果当时没有确定链接目标时，",[34,126402,126403],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126405,126406],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126408,126409],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[146,126411,126413],{"id":126412},"_44-锚点链接","4.4 锚点链接",[14,126415,126416],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,126418,126419,126420,126423,126424],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[34,126421,126422],{},"\u003Ca href=\"#two\">","第二级",[34,126425,126426],{},"\u003C\u002Fa>",[14,126428,126429,126430],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[34,126431,126432],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[146,126434,126436],{"id":126435},"_45-注释标签","4.5 注释标签",[14,126438,126439,126442,126443],{},[34,126440,126441],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[34,126444,126445],{},"ctrl+\u002F",[146,126447,126449],{"id":126448},"_46-特殊字符","4.6 特殊字符",[14,126451,126452],{},"可以实现添加多个空格",[119,126454],{"style":126455,"src":126456},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":32,"searchDepth":47,"depth":47,"links":126458},[126459,126460,126461,126462,126463,126464],{"id":126275,"depth":47,"text":126276},{"id":126328,"depth":47,"text":126329},{"id":126366,"depth":47,"text":126367},{"id":126412,"depth":47,"text":126413},{"id":126435,"depth":47,"text":126436},{"id":126448,"depth":47,"text":126449},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126267,"description":128},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126471,"title":126472,"body":126473,"description":128,"extension":129,"meta":126766,"navigation":131,"path":126767,"seo":126768,"stem":126769,"__hash__":126770},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126474,"toc":126757},[126475,126478,126482,126485,126488,126491,126494,126497,126500,126503,126506,126509,126529,126535,126539,126542,126545,126548,126551,126554,126557,126561,126564,126567,126570,126573,126586,126591,126594,126597,126612,126615,126618,126621,126624,126627,126631,126634,126641,126644,126647,126650,126653,126656,126662,126665,126668,126674,126677,126680,126683,126689,126692,126695,126709,126716,126719,126722,126729,126738,126741,126744,126747,126751,126754],[10,126476,126472],{"id":126477},"_5-html表格列表与表单",[146,126479,126481],{"id":126480},"_51-表格标签","5.1 表格标签",[14,126483,126484],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,126486,126487],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,126489,126490],{},"②表格基本语法：",[119,126492],{"style":126455,"src":126493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,126495,126496],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[119,126498],{"style":126455,"src":126499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,126501,126502],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[119,126504],{"style":126455,"src":126505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,126507,126508],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,126510,126511,126514,126515,126517,126518,126521,126522,126524,126525,126528],{},[34,126512,126513],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[34,126516,126513],{},"内部必须拥有",[34,126519,126520],{},"\u003Ctr>","标签，一般位于第一行，",[34,126523,126513],{},"比",[34,126526,126527],{},"\u003Cth>","范围广",[14,126530,126531,126534],{},[34,126532,126533],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[146,126536,126538],{"id":126537},"_52-合并单元格","5.2 合并单元格",[14,126540,126541],{},"（1）合并单元格方式：",[14,126543,126544],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,126546,126547],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,126549,126550],{},"（2）目标单元格：",[14,126552,126553],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,126555,126556],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[146,126558,126560],{"id":126559},"_53-列表标签","5.3 列表标签",[14,126562,126563],{},"（1）分类：无序列表、有序列表、自定义列表",[14,126565,126566],{},"①无序列表：",[119,126568],{"style":126455,"src":126569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,126571,126572],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,126574,126575,126578,126579,126582,126583,126585],{},[34,126576,126577],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[34,126580,126581],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[34,126584,126577],{},"中输入其他标签或文字是不对的",[14,126587,126588,126590],{},[34,126589,126581],{},"之间相当于一个容器，可以容纳所有元素",[14,126592,126593],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,126595,126596],{},"在css中去除前边的小圆点采用如下代码:",[27,126598,126602],{"className":126599,"code":126600,"language":126601,"meta":32,"style":32},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[34,126603,126604],{"__ignoreMap":32},[37,126605,126606,126609],{"class":39,"line":40},[37,126607,126608],{"class":51368},"list-style",[37,126610,126611],{"class":54},": none;\n",[14,126613,126614],{},"②有序列表：",[119,126616],{"style":126455,"src":126617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,126619,126620],{},"③自定义列表：",[119,126622],{"style":126455,"src":126623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[119,126625],{"style":126455,"src":126626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[146,126628,126630],{"id":126629},"_54-表单标签","5.4 表单标签",[14,126632,126633],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,126635,126636,126637,126640],{},"（1）表单域：包含单元素的区域，",[34,126638,126639],{},"\u003Cform>","标签可以实现信息的收集和传递。",[119,126642],{"style":126455,"src":126643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,126645,126646],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,126648,126649],{},"表单元素提交必须有name属性",[14,126651,126652],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,126654,126655],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,126657,77294,126658,126661],{},[34,126659,126660],{},"\u003Cinput>","输入表单元素",[119,126663],{"style":126455,"src":126664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[119,126666],{"style":126455,"src":126667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,126669,126670,126671],{},"单选按钮：",[34,126672,126673],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[119,126675],{"style":126455,"src":126676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,126678,126679],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[119,126681],{"style":126455,"src":126682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,126684,126685,126688],{},[354,126686,126687],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,126690,126691],{},"②select下拉表单元素：可以节约页面控件",[119,126693],{"style":126455,"src":126694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,126696,126697,13867,126699,126702,126703,126705,126706,126708],{},[354,126698,237],{},[34,126700,126701],{},"\u003Cselect>","中至少包含一对",[34,126704,102761],{},"；在",[34,126707,102761],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,126710,126711,126712,126715],{},"③",[34,126713,126714],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[119,126717],{"style":126455,"src":126718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,126720,126721],{},"3行20列",[146,126723,126725,126726,102740],{"id":126724},"_55-lable标签","5.5 ",[34,126727,126728],{},"\u003Clable>",[14,126730,126731,126732,126734,126735,126737],{},"它不是表单标签，但常常与表单标签搭配使用，",[34,126733,126728],{},"标签用于绑定一个表单标签，当点击",[34,126736,126728],{},"标签内的文本",[14,126739,126740],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[119,126742],{"style":126455,"src":126743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[119,126745],{"style":126455,"src":126746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[146,126748,126750],{"id":126749},"_56-实例","5.6 实例",[119,126752],{"style":126455,"src":126753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[123,126755,126756],{},"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":32,"searchDepth":47,"depth":47,"links":126758},[126759,126760,126761,126762,126763,126765],{"id":126480,"depth":47,"text":126481},{"id":126537,"depth":47,"text":126538},{"id":126559,"depth":47,"text":126560},{"id":126629,"depth":47,"text":126630},{"id":126724,"depth":47,"text":126764},"5.5 \u003Clable>标签",{"id":126749,"depth":47,"text":126750},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126472,"description":128},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126772,"title":126773,"body":126774,"description":128,"extension":129,"meta":127323,"navigation":131,"path":127324,"seo":127325,"stem":127326,"__hash__":127327},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126775,"toc":127298},[126776,126779,126783,126786,126789,126793,126796,126799,126802,126805,126808,126811,126814,126818,126821,126825,126828,126831,126834,126838,126841,126844,126847,126853,126856,126859,126862,126865,126868,126871,126874,126907,126911,126914,126917,126920,126924,126927,126930,126933,126936,126939,126943,126946,126949,126952,126956,126959,126963,126966,126970,126973,126978,126982,126985,126989,126992,126995,126998,127001,127028,127031,127035,127038,127041,127046,127049,127052,127056,127059,127064,127067,127070,127073,127077,127080,127083,127086,127090,127093,127096,127099,127103,127107,127110,127150,127153,127157,127164,127167,127171,127174,127220,127224,127227,127230,127233,127261,127265,127268,127295],[10,126777,126773],{"id":126778},"_6-css语法与文本样式",[146,126780,126782],{"id":126781},"_61-css语法规范","6.1 css语法规范",[14,126784,126785],{},"由两部分组成，选择器及一条或多条声明",[119,126787],{"style":126455,"src":126788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,126790,126791],{},[354,126792,237],{},[14,126794,126795],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,126797,126798],{},"②属性与属性值以“键值对”的形式出现",[14,126800,126801],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,126803,126804],{},"④属性和属性值之间用英文“;”分开",[119,126806],{"style":126455,"src":126807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[119,126809],{"style":126455,"src":126810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[119,126812],{"style":126455,"src":126813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[146,126815,126817],{"id":126816},"_62-css选择器","6.2 css选择器",[14,126819,126820],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[175,126822,126824],{"id":126823},"_621-标签选择器","6.2.1 标签选择器",[14,126826,126827],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,126829,126830],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[119,126832],{"style":126455,"src":126833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[175,126835,126837],{"id":126836},"_622-类选择器","6.2.2 类选择器",[14,126839,126840],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,126842,126843],{},"②样例",[119,126845],{"style":126455,"src":126846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,126848,126849,126850,126852],{},"③ ",[354,126851,126687],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,126854,126855],{},"可以理解为给这个标签起了个名字，来表示；",[14,126857,126858],{},"长名称或词组可以使用横线来为选择器命名；",[14,126860,126861],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,126863,126864],{},"命名要有意义；",[119,126866],{"style":126455,"src":126867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,126869,126870],{},"类选择器也可以指定特殊的元素p.center{}",[14,126872,126873],{},"p.center和.center都对",[27,126875,126877],{"className":126599,"code":126876,"language":126601,"meta":32,"style":32},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[34,126878,126879,126884,126893,126903],{"__ignoreMap":32},[37,126880,126881],{"class":39,"line":40},[37,126882,126883],{"class":43},"\u002F* 类选择器指定特殊元素 *\u002F\n",[37,126885,126886,126888,126891],{"class":39,"line":47},[37,126887,14],{"class":51368},[37,126889,126890],{"class":2035},".center",[37,126892,15644],{"class":54},[37,126894,126895,126897,126899,126901],{"class":39,"line":58},[37,126896,70594],{"class":82},[37,126898,51505],{"class":54},[37,126900,51660],{"class":82},[37,126902,1364],{"class":54},[37,126904,126905],{"class":39,"line":64},[37,126906,1637],{"class":54},[175,126908,126910],{"id":126909},"_623-多类名使用","6.2.3 多类名使用",[14,126912,126913],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[119,126915],{"style":126455,"src":126916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,126918,126919],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[175,126921,126923],{"id":126922},"_624-id选择器","6.2.4 id选择器",[14,126925,126926],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,126928,126929],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[119,126931],{"style":126455,"src":126932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,126934,126935],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,126937,126938],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[175,126940,126942],{"id":126941},"_625-通配符选择器","6.2.5 通配符选择器",[14,126944,126945],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,126947,126948],{},"* {",[14,126950,126951],{},"color=\"red\"}",[175,126953,126955],{"id":126954},"_626-总结","6.2.6 总结",[119,126957],{"style":126455,"src":126958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[146,126960,126962],{"id":126961},"_63-css字体属性","6.3 css字体属性",[14,126964,126965],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[175,126967,126969],{"id":126968},"_631-字体系列","6.3.1 字体系列",[14,126971,126972],{},"font-family: '宋体';",[14,126974,126975,126977],{},[354,126976,237],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[175,126979,126981],{"id":126980},"_632-字体大小","6.3.2 字体大小",[14,126983,126984],{},"font-size: 20px",[14,126986,126987,26546],{},[354,126988,126687],{},[14,126990,126991],{},"①px（像素）大小是网页的最常用单位",[14,126993,126994],{},"②谷歌浏览器默认为16px",[14,126996,126997],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,126999,127000],{},"④可以给body指定整个页面的大小：会自动引用",[27,127002,127004],{"className":126599,"code":127003,"language":126601,"meta":32,"style":32},"body {\n  font-size: 16px;\n}\n",[34,127005,127006,127012,127024],{"__ignoreMap":32},[37,127007,127008,127010],{"class":39,"line":40},[37,127009,51868],{"class":51368},[37,127011,15644],{"class":54},[37,127013,127014,127016,127018,127020,127022],{"class":39,"line":47},[37,127015,70694],{"class":82},[37,127017,51505],{"class":54},[37,127019,804],{"class":82},[37,127021,51560],{"class":50},[37,127023,1364],{"class":54},[37,127025,127026],{"class":39,"line":58},[37,127027,1637],{"class":54},[14,127029,127030],{},"⑤标题标签比较特殊，需要单独指定大小",[175,127032,127034],{"id":127033},"_633-字体粗细","6.3.3 字体粗细",[14,127036,127037],{},"font-weight: bold;",[14,127039,127040],{},"font-weight: 100；",[14,127042,127043,127045],{},[354,127044,237],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,127047,127048],{},"font-weight= 400;",[14,127050,127051],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[175,127053,127055],{"id":127054},"_634-文字样式","6.3.4 文字样式",[14,127057,127058],{},"font-style: normal；",[14,127060,127061,26546],{},[354,127062,127063],{},"属性值",[14,127065,127066],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127068,127069],{},"②italic：浏览器会显示斜体的字体样式",[119,127071],{"style":126455,"src":127072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[175,127074,127076],{"id":127075},"_635-字体符合属性","6.3.5 字体符合属性",[119,127078],{"style":126455,"src":127079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[119,127081],{"style":126455,"src":127082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127084,127085],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127087,127088,26546],{},[354,127089,126687],{},[14,127091,127092],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127094,127095],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127097,127098],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[146,127100,127102],{"id":127101},"_64-css-test文本属性","6.4 css test文本属性",[175,127104,127106],{"id":127105},"_641-文本颜色","6.4.1 文本颜色",[14,127108,127109],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[27,127111,127113],{"className":126599,"code":127112,"language":126601,"meta":32,"style":32},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[34,127114,127115,127120,127126,127136,127141,127146],{"__ignoreMap":32},[37,127116,127117],{"class":39,"line":40},[37,127118,127119],{"class":43},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[37,127121,127122,127124],{"class":39,"line":47},[37,127123,14],{"class":51368},[37,127125,15644],{"class":54},[37,127127,127128,127130,127132,127134],{"class":39,"line":58},[37,127129,70973],{"class":82},[37,127131,51505],{"class":54},[37,127133,57489],{"class":82},[37,127135,1364],{"class":54},[37,127137,127138],{"class":39,"line":64},[37,127139,127140],{"class":43},"  \u002F* color: #ff0000; *\u002F\n",[37,127142,127143],{"class":39,"line":76},[37,127144,127145],{"class":43},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[37,127147,127148],{"class":39,"line":92},[37,127149,1637],{"class":54},[119,127151],{"style":126455,"src":127152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[175,127154,127156],{"id":127155},"_642-对齐文本","6.4.2 对齐文本",[14,127158,127159,127160,127163],{},"text-align属于用于设置元素内文本内容的 ",[354,127161,127162],{},"水平对齐"," 方式",[14,127165,127166],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[175,127168,127170],{"id":127169},"_643-装饰文本","6.4.3 装饰文本",[14,127172,127173],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[27,127175,127177],{"className":126599,"code":127176,"language":126601,"meta":32,"style":32},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[34,127178,127179,127185,127195,127199,127205,127216],{"__ignoreMap":32},[37,127180,127181,127183],{"class":39,"line":40},[37,127182,443],{"class":51368},[37,127184,15644],{"class":54},[37,127186,127187,127189,127191,127193],{"class":39,"line":47},[37,127188,70570],{"class":82},[37,127190,51505],{"class":54},[37,127192,54805],{"class":82},[37,127194,1364],{"class":54},[37,127196,127197],{"class":39,"line":58},[37,127198,1637],{"class":54},[37,127200,127201,127203],{"class":39,"line":64},[37,127202,14],{"class":51368},[37,127204,15644],{"class":54},[37,127206,127207,127209,127211,127214],{"class":39,"line":76},[37,127208,70570],{"class":82},[37,127210,51505],{"class":54},[37,127212,127213],{"class":82},"underline",[37,127215,1364],{"class":54},[37,127217,127218],{"class":39,"line":92},[37,127219,1637],{"class":54},[175,127221,127223],{"id":127222},"_644-文本缩进","6.4.4 文本缩进",[14,127225,127226],{},"实现文本的第一行首行缩进自己指定的距离",[14,127228,127229],{},"20px往右边走；-20px往左边走",[14,127231,127232],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[27,127234,127236],{"className":126599,"code":127235,"language":126601,"meta":32,"style":32},"p {\n  text-indent: 2em;\n}\n",[34,127237,127238,127244,127257],{"__ignoreMap":32},[37,127239,127240,127242],{"class":39,"line":40},[37,127241,14],{"class":51368},[37,127243,15644],{"class":54},[37,127245,127246,127249,127251,127253,127255],{"class":39,"line":47},[37,127247,127248],{"class":82},"  text-indent",[37,127250,51505],{"class":54},[37,127252,282],{"class":82},[37,127254,23625],{"class":50},[37,127256,1364],{"class":54},[37,127258,127259],{"class":39,"line":58},[37,127260,1637],{"class":54},[175,127262,127264],{"id":127263},"_645-行间距","6.4.5 行间距",[14,127266,127267],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[27,127269,127271],{"className":126599,"code":127270,"language":126601,"meta":32,"style":32},"p {\n  line-height: 1.6;\n}\n",[34,127272,127273,127279,127291],{"__ignoreMap":32},[37,127274,127275,127277],{"class":39,"line":40},[37,127276,14],{"class":51368},[37,127278,15644],{"class":54},[37,127280,127281,127284,127286,127289],{"class":39,"line":47},[37,127282,127283],{"class":82},"  line-height",[37,127285,51505],{"class":54},[37,127287,127288],{"class":82},"1.6",[37,127290,1364],{"class":54},[37,127292,127293],{"class":39,"line":58},[37,127294,1637],{"class":54},[123,127296,127297],{},"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":32,"searchDepth":47,"depth":47,"links":127299},[127300,127301,127309,127316],{"id":126781,"depth":47,"text":126782},{"id":126816,"depth":47,"text":126817,"children":127302},[127303,127304,127305,127306,127307,127308],{"id":126823,"depth":58,"text":126824},{"id":126836,"depth":58,"text":126837},{"id":126909,"depth":58,"text":126910},{"id":126922,"depth":58,"text":126923},{"id":126941,"depth":58,"text":126942},{"id":126954,"depth":58,"text":126955},{"id":126961,"depth":47,"text":126962,"children":127310},[127311,127312,127313,127314,127315],{"id":126968,"depth":58,"text":126969},{"id":126980,"depth":58,"text":126981},{"id":127033,"depth":58,"text":127034},{"id":127054,"depth":58,"text":127055},{"id":127075,"depth":58,"text":127076},{"id":127101,"depth":47,"text":127102,"children":127317},[127318,127319,127320,127321,127322],{"id":127105,"depth":58,"text":127106},{"id":127155,"depth":58,"text":127156},{"id":127169,"depth":58,"text":127170},{"id":127222,"depth":58,"text":127223},{"id":127263,"depth":58,"text":127264},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126773,"description":128},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127329,"title":127330,"body":127331,"description":128,"extension":129,"meta":127980,"navigation":131,"path":127981,"seo":127982,"stem":127983,"__hash__":127984},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127332,"toc":127961},[127333,127336,127340,127344,127404,127408,127418,127421,127424,127428,127453,127457,127460,127463,127466,127469,127472,127476,127479,127482,127524,127527,127553,127559,127562,127566,127570,127576,127579,127582,127585,127588,127591,127594,127639,127643,127646,127649,127653,127657,127686,127689,127694,127697,127700,127703,127706,127710,127714,127717,127719,127722,127726,127729,127733,127736,127739,127742,127746,127750,127756,127766,127769,127772,127775,127778,127781,127904,127912,127920,127958],[10,127334,127330],{"id":127335},"_7-css引入方式与选择器进阶",[146,127337,127339],{"id":127338},"_71-css引入方式","7.1 css引入方式",[175,127341,127343],{"id":127342},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[27,127345,127349],{"className":127346,"code":127347,"language":127348,"meta":32,"style":32},"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",[34,127350,127351,127359,127366,127378,127391,127396],{"__ignoreMap":32},[37,127352,127353,127355,127357],{"class":39,"line":40},[37,127354,1113],{"class":54},[37,127356,123],{"class":51368},[37,127358,51375],{"class":54},[37,127360,127361,127364],{"class":39,"line":47},[37,127362,127363],{"class":51368},"  h1",[37,127365,15644],{"class":54},[37,127367,127368,127371,127373,127376],{"class":39,"line":58},[37,127369,127370],{"class":82},"    color",[37,127372,51505],{"class":54},[37,127374,127375],{"class":82},"blue",[37,127377,1364],{"class":54},[37,127379,127380,127383,127385,127387,127389],{"class":39,"line":64},[37,127381,127382],{"class":82},"    font-size",[37,127384,51505],{"class":54},[37,127386,1003],{"class":82},[37,127388,51560],{"class":50},[37,127390,1364],{"class":54},[37,127392,127393],{"class":39,"line":76},[37,127394,127395],{"class":54},"  }\n",[37,127397,127398,127400,127402],{"class":39,"line":92},[37,127399,51853],{"class":54},[37,127401,123],{"class":51368},[37,127403,51375],{"class":54},[14,127405,127406,26546],{},[354,127407,126687],{},[14,127409,77294,127410,127413,127414,127417],{},[34,127411,127412],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[34,127415,127416],{},"\u003Chead>","标签中",[14,127419,127420],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,127422,127423],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[175,127425,127427],{"id":127426},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[27,127429,127431],{"className":127346,"code":127430,"language":127348,"meta":32,"style":32},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[34,127432,127433],{"__ignoreMap":32},[37,127434,127435,127437,127439,127441,127443,127446,127449,127451],{"class":39,"line":40},[37,127436,1113],{"class":54},[37,127438,14],{"class":51368},[37,127440,62694],{"class":2035},[37,127442,70],{"class":54},[37,127444,127445],{"class":309},"\"color: red; font-size: 16px;\"",[37,127447,127448],{"class":54},">这是一个段落\u003C\u002F",[37,127450,14],{"class":51368},[37,127452,51375],{"class":54},[14,127454,127455,26546],{},[354,127456,126687],{},[14,127458,127459],{},"①style其实就是标签的属性",[14,127461,127462],{},"②在双引号中间，写法要符合css规范",[14,127464,127465],{},"③可以控制当前的标签设置样式",[14,127467,127468],{},"④书写繁琐，简单时才用",[14,127470,127471],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[175,127473,127475],{"id":127474},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,127477,127478],{},"使用最多，单独建一个css文件，然后html引用",[14,127480,127481],{},"①css文件部分： style.css",[27,127483,127485],{"className":126599,"code":127484,"language":126601,"meta":32,"style":32},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[34,127486,127487,127492,127498,127508,127520],{"__ignoreMap":32},[37,127488,127489],{"class":39,"line":40},[37,127490,127491],{"class":43},"\u002F* style.css *\u002F\n",[37,127493,127494,127496],{"class":39,"line":47},[37,127495,10],{"class":51368},[37,127497,15644],{"class":54},[37,127499,127500,127502,127504,127506],{"class":39,"line":58},[37,127501,70973],{"class":82},[37,127503,51505],{"class":54},[37,127505,127375],{"class":82},[37,127507,1364],{"class":54},[37,127509,127510,127512,127514,127516,127518],{"class":39,"line":64},[37,127511,70694],{"class":82},[37,127513,51505],{"class":54},[37,127515,1003],{"class":82},[37,127517,51560],{"class":50},[37,127519,1364],{"class":54},[37,127521,127522],{"class":39,"line":76},[37,127523,1637],{"class":54},[14,127525,127526],{},"②html部分",[27,127528,127530],{"className":127346,"code":127529,"language":127348,"meta":32,"style":32},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[34,127531,127532],{"__ignoreMap":32},[37,127533,127534,127536,127538,127540,127542,127544,127546,127548,127551],{"class":39,"line":40},[37,127535,1113],{"class":54},[37,127537,69073],{"class":51368},[37,127539,69076],{"class":2035},[37,127541,70],{"class":54},[37,127543,69081],{"class":309},[37,127545,61125],{"class":2035},[37,127547,70],{"class":54},[37,127549,127550],{"class":309},"\"style.css\"",[37,127552,51375],{"class":54},[14,127554,127555,127558],{},[34,127556,127557],{},"\u003Chr>","水平线标签（但是不常用！）",[14,127560,127561],{},"ctrl+0回到页面原来大小",[146,127563,127565],{"id":127564},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[175,127567,127569],{"id":127568},"_721-快速生成html","7.2.1 快速生成html",[14,127571,127572,127573],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[34,127574,127575],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,127577,127578],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,127580,127581],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,127583,127584],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,127586,127587],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,127589,127590],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,127592,127593],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[27,127595,127597],{"className":127346,"code":127596,"language":127348,"meta":32,"style":32},"\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",[34,127598,127599,127604,127609,127614,127619,127624,127629,127634],{"__ignoreMap":32},[37,127600,127601],{"class":39,"line":40},[37,127602,127603],{"class":43},"\u003C!-- Emmet 语法示例 -->\n",[37,127605,127606],{"class":39,"line":47},[37,127607,127608],{"class":43},"\u003C!-- div*3        → 生成3个div -->\n",[37,127610,127611],{"class":39,"line":58},[37,127612,127613],{"class":43},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[37,127615,127616],{"class":39,"line":64},[37,127617,127618],{"class":43},"\u003C!-- div+p        → 兄弟div和p -->\n",[37,127620,127621],{"class":39,"line":76},[37,127622,127623],{"class":43},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[37,127625,127626],{"class":39,"line":92},[37,127627,127628],{"class":43},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[37,127630,127631],{"class":39,"line":97},[37,127632,127633],{"class":43},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[37,127635,127636],{"class":39,"line":107},[37,127637,127638],{"class":43},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[175,127640,127642],{"id":127641},"_722-快速生成css","7.2.2 快速生成css",[14,127644,127645],{},"简写开头",[14,127647,127648],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[146,127650,127652],{"id":127651},"_73-css复合选择器","7.3 css复合选择器",[175,127654,127656],{"id":127655},"_731-后代选择器","7.3.1 后代选择器",[27,127658,127660],{"className":126599,"code":127659,"language":126601,"meta":32,"style":32},".parent .child {\n  color: blue;\n}\n",[34,127661,127662,127672,127682],{"__ignoreMap":32},[37,127663,127664,127667,127670],{"class":39,"line":40},[37,127665,127666],{"class":2035},".parent",[37,127668,127669],{"class":2035}," .child",[37,127671,15644],{"class":54},[37,127673,127674,127676,127678,127680],{"class":39,"line":47},[37,127675,70973],{"class":82},[37,127677,51505],{"class":54},[37,127679,127375],{"class":82},[37,127681,1364],{"class":54},[37,127683,127684],{"class":39,"line":58},[37,127685,1637],{"class":54},[14,127687,127688],{},"元素1 元素2 {样式声明}",[14,127690,127691],{},[354,127692,127693],{},"注意点:",[14,127695,127696],{},"①元素1和元素2中间用空格隔开",[14,127698,127699],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,127701,127702],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,127704,127705],{},"④元素1和元素2可以是任意基础选择器",[175,127707,127709],{"id":127708},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,127711,127712],{},[354,127713,127693],{},[14,127715,127716],{},"①元素1和元素2中间用大于号隔开",[14,127718,127699],{},[14,127720,127721],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[175,127723,127725],{"id":127724},"_733-并集选择器","7.3.3 并集选择器",[14,127727,127728],{},"元素1，元素2 {样式声明}",[14,127730,127731],{},[354,127732,127693],{},[14,127734,127735],{},"①元素1和元素2中间用逗号隔开",[14,127737,127738],{},"②逗号可以理解为和的意思",[14,127740,127741],{},"③并集选择器通常用于集体声明",[175,127743,127745],{"id":127744},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,127747,127748],{},[354,127749,127693],{},[14,127751,127752,127753,127755],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69073,127754],{},"－:visited－:hover－:active。",[14,127757,127758,127759,127762,127763,25813],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127760,127761],"hover",{}," 、 ",[127764,127765],"first-child",{},[14,127767,127768],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,127770,127771],{},"link对没访问的进行设置",[14,127773,127774],{},"vistied对已访问的进行改变",[14,127776,127777],{},"hover鼠标经过就会变",[14,127779,127780],{},"active常按(点)就会变",[27,127782,127784],{"className":126599,"code":127783,"language":126601,"meta":32,"style":32},"\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",[34,127785,127786,127791,127800,127810,127820,127824,127833,127844,127848,127856,127866,127876,127880,127889,127900],{"__ignoreMap":32},[37,127787,127788],{"class":39,"line":40},[37,127789,127790],{"class":43},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[37,127792,127793,127795,127798],{"class":39,"line":47},[37,127794,443],{"class":51368},[37,127796,127797],{"class":2035},":link",[37,127799,15644],{"class":54},[37,127801,127802,127804,127806,127808],{"class":39,"line":58},[37,127803,70973],{"class":82},[37,127805,51505],{"class":54},[37,127807,62437],{"class":82},[37,127809,1364],{"class":54},[37,127811,127812,127814,127816,127818],{"class":39,"line":64},[37,127813,70570],{"class":82},[37,127815,51505],{"class":54},[37,127817,54805],{"class":82},[37,127819,1364],{"class":54},[37,127821,127822],{"class":39,"line":76},[37,127823,1637],{"class":54},[37,127825,127826,127828,127831],{"class":39,"line":92},[37,127827,443],{"class":51368},[37,127829,127830],{"class":2035},":visited",[37,127832,15644],{"class":54},[37,127834,127835,127837,127839,127842],{"class":39,"line":97},[37,127836,70973],{"class":82},[37,127838,51505],{"class":54},[37,127840,127841],{"class":82},"purple",[37,127843,1364],{"class":54},[37,127845,127846],{"class":39,"line":107},[37,127847,1637],{"class":54},[37,127849,127850,127852,127854],{"class":39,"line":1390},[37,127851,443],{"class":51368},[37,127853,61008],{"class":2035},[37,127855,15644],{"class":54},[37,127857,127858,127860,127862,127864],{"class":39,"line":1402},[37,127859,70973],{"class":82},[37,127861,51505],{"class":54},[37,127863,54957],{"class":82},[37,127865,1364],{"class":54},[37,127867,127868,127870,127872,127874],{"class":39,"line":1684},[37,127869,70570],{"class":82},[37,127871,51505],{"class":54},[37,127873,127213],{"class":82},[37,127875,1364],{"class":54},[37,127877,127878],{"class":39,"line":1689},[37,127879,1637],{"class":54},[37,127881,127882,127884,127887],{"class":39,"line":1695},[37,127883,443],{"class":51368},[37,127885,127886],{"class":2035},":active",[37,127888,15644],{"class":54},[37,127890,127891,127893,127895,127898],{"class":39,"line":1700},[37,127892,70973],{"class":82},[37,127894,51505],{"class":54},[37,127896,127897],{"class":82},"green",[37,127899,1364],{"class":54},[37,127901,127902],{"class":39,"line":1714},[37,127903,1637],{"class":54},[175,127905,127907,127908,127911],{"id":127906},"_735-伪类选择器","7.3.5 ",[127909,127910],"focus",{},"伪类选择器",[14,127913,127914,127916,127917,127919],{},[127909,127915],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[34,127918,126660],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[27,127921,127923],{"className":126599,"code":127922,"language":126601,"meta":32,"style":32},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[34,127924,127925,127933,127944,127954],{"__ignoreMap":32},[37,127926,127927,127929,127931],{"class":39,"line":40},[37,127928,53889],{"class":51368},[37,127930,61968],{"class":2035},[37,127932,15644],{"class":54},[37,127934,127935,127938,127940,127942],{"class":39,"line":47},[37,127936,127937],{"class":82},"  border-color",[37,127939,51505],{"class":54},[37,127941,54957],{"class":82},[37,127943,1364],{"class":54},[37,127945,127946,127948,127950,127952],{"class":39,"line":58},[37,127947,70866],{"class":82},[37,127949,51505],{"class":54},[37,127951,54805],{"class":82},[37,127953,1364],{"class":54},[37,127955,127956],{"class":39,"line":64},[37,127957,1637],{"class":54},[123,127959,127960],{},"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":32,"searchDepth":47,"depth":47,"links":127962},[127963,127968,127972],{"id":127338,"depth":47,"text":127339,"children":127964},[127965,127966,127967],{"id":127342,"depth":58,"text":127343},{"id":127426,"depth":58,"text":127427},{"id":127474,"depth":58,"text":127475},{"id":127564,"depth":47,"text":127565,"children":127969},[127970,127971],{"id":127568,"depth":58,"text":127569},{"id":127641,"depth":58,"text":127642},{"id":127651,"depth":47,"text":127652,"children":127973},[127974,127975,127976,127977,127978],{"id":127655,"depth":58,"text":127656},{"id":127708,"depth":58,"text":127709},{"id":127724,"depth":58,"text":127725},{"id":127744,"depth":58,"text":127745},{"id":127906,"depth":58,"text":127979},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127330,"description":128},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127986,"title":127987,"body":127988,"description":128,"extension":129,"meta":129911,"navigation":131,"path":129912,"seo":129913,"stem":129914,"__hash__":129915},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":127989,"toc":129885},[127990,127993,127997,128006,128010,128036,128041,128044,128047,128050,128053,128057,128060,128070,128078,128082,128117,128122,128125,128128,128131,128134,128138,128141,128150,128154,128167,128172,128175,128178,128181,128185,128188,128192,128195,128250,128253,128284,128287,128341,128345,128348,128514,128637,128640,128643,128646,128649,128653,128656,128660,128663,128666,128670,128673,128704,128731,128759,128762,128766,128792,128835,128839,128933,128936,128963,128966,128969,128972,128975,128978,128981,128984,128987,128990,128994,129051,129078,129082,129130,129134,129175,129177,129180,129183,129186,129189,129193,129285,129288,129291,129294,129298,129421,129622,129626,129630,129633,129636,129639,129643,129646,129649,129674,129677,129680,129683,129686,129689,129693,129701,129763,129766,129824,129827,129830,129833,129836,129839,129842,129845,129882],[10,127991,127987],{"id":127992},"_8-css显示模式与背景特性",[146,127994,127996],{"id":127995},"_81-css元素显示模式","8.1 css元素显示模式",[14,127998,127999,128000,128002,128003,128005],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[34,128001,126210],{},"自己占一行，比如一行可以放多个",[34,128004,126213],{},"，HTML 元素一般分为块元素和行内元素两种类型",[175,128007,128009],{"id":128008},"_811-块元素","8.1.1 块元素",[14,128011,128012,128013,128015,128016,417,128019,417,128021,417,128023,417,128026,417,128029,128032,128033,128035],{},"常见的块元素有",[34,128014,126114],{},"~",[34,128017,128018],{},"\u003Ch6>",[34,128020,126140],{},[34,128022,126210],{},[34,128024,128025],{},"\u003Cul>",[34,128027,128028],{},"\u003Col>",[34,128030,128031],{},"\u003Cli>","等，其中 ",[34,128034,126210],{}," 标签是最典型的块元素",[14,128037,128038],{},[354,128039,128040],{},"块级元素的特点：",[14,128042,128043],{},"① 比较霸道，自己独占一行。",[14,128045,128046],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,128048,128049],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,128051,128052],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,128054,128055],{},[354,128056,237],{},[14,128058,128059],{},"①文字类的元素内不能使用块级元素",[14,128061,77317,128062,128064,128065,128067,128068],{},[34,128063,126140],{}," 标签主要用于存放文字，因此 ",[34,128066,126140],{}," 里面不能放块级元素，特别是不能放",[34,128069,126210],{},[14,128071,128072,128073,128015,128075,128077],{},"⑥同理， ",[34,128074,126114],{},[34,128076,128018],{},"等都是文字类块级标签，里面也不能放其他块级元素",[175,128079,128081],{"id":128080},"_812-行内元素","8.1.2 行内元素",[14,128083,128084,128085,417,128087,417,128090,417,128093,417,128096,417,128099,417,128102,417,128105,417,128108,417,128111,128113,128114,128116],{},"常见的行内元素有 ",[34,128086,126372],{},[34,128088,128089],{},"\u003Cstrong>",[34,128091,128092],{},"\u003Cb>",[34,128094,128095],{},"\u003Cem>",[34,128097,128098],{},"\u003Ci>",[34,128100,128101],{},"\u003Cdel>",[34,128103,128104],{},"\u003Cs>",[34,128106,128107],{},"\u003Cins>",[34,128109,128110],{},"\u003Cu>",[34,128112,126213],{}," 等，其中 ",[34,128115,126213],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128118,128119],{},[354,128120,128121],{},"特点：",[14,128123,128124],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128126,128127],{},"② 高、宽直接设置是无效的。",[14,128129,128130],{},"③ 默认宽度就是它本身内容的宽度。",[14,128132,128133],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128135,128136],{},[354,128137,237],{},[14,128139,128140],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128142,128143,128144,128146,128147,128149],{},"②特殊情况链接 ",[34,128145,126372],{}," 里面可以放块级元素，但是给 ",[34,128148,126372],{}," 转换一下块级模式最安全",[175,128151,128153],{"id":128152},"_813-行内块元素","8.1.3 行内块元素",[14,128155,128156,128157,417,128160,417,128163,128166],{},"在行内元素中有几个特殊的标签 —— ",[34,128158,128159],{},"\u003Cimg \u002F>",[34,128161,128162],{},"\u003Cinput \u002F>",[34,128164,128165],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128168,128169],{},[354,128170,128171],{},"行内块元素的特点：",[14,128173,128174],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128176,128177],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128179,128180],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[175,128182,128184],{"id":128183},"_814-总结","8.1.4 总结",[119,128186],{"style":126455,"src":128187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[175,128189,128191],{"id":128190},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128193,128194],{},"①转换为块元素：display:block;",[27,128196,128198],{"className":126599,"code":128197,"language":126601,"meta":32,"style":32},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[34,128199,128200,128205,128211,128222,128234,128246],{"__ignoreMap":32},[37,128201,128202],{"class":39,"line":40},[37,128203,128204],{"class":43},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[37,128206,128207,128209],{"class":39,"line":47},[37,128208,443],{"class":51368},[37,128210,15644],{"class":54},[37,128212,128213,128216,128218,128220],{"class":39,"line":58},[37,128214,128215],{"class":82},"  display",[37,128217,51505],{"class":54},[37,128219,60937],{"class":82},[37,128221,1364],{"class":54},[37,128223,128224,128226,128228,128230,128232],{"class":39,"line":64},[37,128225,70636],{"class":82},[37,128227,51505],{"class":54},[37,128229,516],{"class":82},[37,128231,51560],{"class":50},[37,128233,1364],{"class":54},[37,128235,128236,128238,128240,128242,128244],{"class":39,"line":76},[37,128237,70856],{"class":82},[37,128239,51505],{"class":54},[37,128241,606],{"class":82},[37,128243,51560],{"class":50},[37,128245,1364],{"class":54},[37,128247,128248],{"class":39,"line":92},[37,128249,1637],{"class":54},[14,128251,128252],{},"②转换为行内元素：display:inline;",[27,128254,128256],{"className":126599,"code":128255,"language":126601,"meta":32,"style":32},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[34,128257,128258,128263,128269,128280],{"__ignoreMap":32},[37,128259,128260],{"class":39,"line":40},[37,128261,128262],{"class":43},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[37,128264,128265,128267],{"class":39,"line":47},[37,128266,51679],{"class":51368},[37,128268,15644],{"class":54},[37,128270,128271,128273,128275,128278],{"class":39,"line":58},[37,128272,128215],{"class":82},[37,128274,51505],{"class":54},[37,128276,128277],{"class":82},"inline",[37,128279,1364],{"class":54},[37,128281,128282],{"class":39,"line":64},[37,128283,1637],{"class":54},[14,128285,128286],{},"③转换为行内块：display:inline-block;",[27,128288,128290],{"className":126599,"code":128289,"language":126601,"meta":32,"style":32},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[34,128291,128292,128297,128303,128313,128325,128337],{"__ignoreMap":32},[37,128293,128294],{"class":39,"line":40},[37,128295,128296],{"class":43},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[37,128298,128299,128301],{"class":39,"line":47},[37,128300,37],{"class":51368},[37,128302,15644],{"class":54},[37,128304,128305,128307,128309,128311],{"class":39,"line":58},[37,128306,128215],{"class":82},[37,128308,51505],{"class":54},[37,128310,72451],{"class":82},[37,128312,1364],{"class":54},[37,128314,128315,128317,128319,128321,128323],{"class":39,"line":64},[37,128316,70636],{"class":82},[37,128318,51505],{"class":54},[37,128320,815],{"class":82},[37,128322,51560],{"class":50},[37,128324,1364],{"class":54},[37,128326,128327,128329,128331,128333,128335],{"class":39,"line":76},[37,128328,70856],{"class":82},[37,128330,51505],{"class":54},[37,128332,1154],{"class":82},[37,128334,51560],{"class":50},[37,128336,1364],{"class":54},[37,128338,128339],{"class":39,"line":92},[37,128340,1637],{"class":54},[175,128342,128344],{"id":128343},"_816-小米侧边栏","8.1.6 小米侧边栏",[119,128346],{"style":126455,"src":128347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[27,128349,128351],{"className":127346,"code":128350,"language":127348,"meta":32,"style":32},"\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",[34,128352,128353,128358,128373,128392,128411,128430,128449,128468,128487,128506],{"__ignoreMap":32},[37,128354,128355],{"class":39,"line":40},[37,128356,128357],{"class":43},"\u003C!-- 小米侧边栏案例 -->\n",[37,128359,128360,128362,128364,128366,128368,128371],{"class":39,"line":47},[37,128361,1113],{"class":54},[37,128363,51679],{"class":51368},[37,128365,53554],{"class":2035},[37,128367,70],{"class":54},[37,128369,128370],{"class":309},"\"sidebar\"",[37,128372,51375],{"class":54},[37,128374,128375,128377,128379,128381,128383,128385,128388,128390],{"class":39,"line":58},[37,128376,52212],{"class":54},[37,128378,443],{"class":51368},[37,128380,61125],{"class":2035},[37,128382,70],{"class":54},[37,128384,61130],{"class":309},[37,128386,128387],{"class":54},">手机 电话卡\u003C\u002F",[37,128389,443],{"class":51368},[37,128391,51375],{"class":54},[37,128393,128394,128396,128398,128400,128402,128404,128407,128409],{"class":39,"line":64},[37,128395,52212],{"class":54},[37,128397,443],{"class":51368},[37,128399,61125],{"class":2035},[37,128401,70],{"class":54},[37,128403,61130],{"class":309},[37,128405,128406],{"class":54},">电视 盒子\u003C\u002F",[37,128408,443],{"class":51368},[37,128410,51375],{"class":54},[37,128412,128413,128415,128417,128419,128421,128423,128426,128428],{"class":39,"line":76},[37,128414,52212],{"class":54},[37,128416,443],{"class":51368},[37,128418,61125],{"class":2035},[37,128420,70],{"class":54},[37,128422,61130],{"class":309},[37,128424,128425],{"class":54},">笔记本 平板\u003C\u002F",[37,128427,443],{"class":51368},[37,128429,51375],{"class":54},[37,128431,128432,128434,128436,128438,128440,128442,128445,128447],{"class":39,"line":92},[37,128433,52212],{"class":54},[37,128435,443],{"class":51368},[37,128437,61125],{"class":2035},[37,128439,70],{"class":54},[37,128441,61130],{"class":309},[37,128443,128444],{"class":54},">出行 穿戴\u003C\u002F",[37,128446,443],{"class":51368},[37,128448,51375],{"class":54},[37,128450,128451,128453,128455,128457,128459,128461,128464,128466],{"class":39,"line":97},[37,128452,52212],{"class":54},[37,128454,443],{"class":51368},[37,128456,61125],{"class":2035},[37,128458,70],{"class":54},[37,128460,61130],{"class":309},[37,128462,128463],{"class":54},">智能 路由器\u003C\u002F",[37,128465,443],{"class":51368},[37,128467,51375],{"class":54},[37,128469,128470,128472,128474,128476,128478,128480,128483,128485],{"class":39,"line":107},[37,128471,52212],{"class":54},[37,128473,443],{"class":51368},[37,128475,61125],{"class":2035},[37,128477,70],{"class":54},[37,128479,61130],{"class":309},[37,128481,128482],{"class":54},">健康 儿童\u003C\u002F",[37,128484,443],{"class":51368},[37,128486,51375],{"class":54},[37,128488,128489,128491,128493,128495,128497,128499,128502,128504],{"class":39,"line":1390},[37,128490,52212],{"class":54},[37,128492,443],{"class":51368},[37,128494,61125],{"class":2035},[37,128496,70],{"class":54},[37,128498,61130],{"class":309},[37,128500,128501],{"class":54},">耳机 音响\u003C\u002F",[37,128503,443],{"class":51368},[37,128505,51375],{"class":54},[37,128507,128508,128510,128512],{"class":39,"line":1402},[37,128509,51853],{"class":54},[37,128511,51679],{"class":51368},[37,128513,51375],{"class":54},[27,128515,128517],{"className":126599,"code":128516,"language":126601,"meta":32,"style":32},".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",[34,128518,128519,128528,128538,128551,128563,128575,128587,128597,128608,128612,128622,128633],{"__ignoreMap":32},[37,128520,128521,128524,128526],{"class":39,"line":40},[37,128522,128523],{"class":2035},".sidebar",[37,128525,1471],{"class":51368},[37,128527,15644],{"class":54},[37,128529,128530,128532,128534,128536],{"class":39,"line":47},[37,128531,128215],{"class":82},[37,128533,51505],{"class":54},[37,128535,60937],{"class":82},[37,128537,1364],{"class":54},[37,128539,128540,128542,128544,128547,128549],{"class":39,"line":58},[37,128541,70636],{"class":82},[37,128543,51505],{"class":54},[37,128545,128546],{"class":82},"234",[37,128548,51560],{"class":50},[37,128550,1364],{"class":54},[37,128552,128553,128555,128557,128559,128561],{"class":39,"line":64},[37,128554,70856],{"class":82},[37,128556,51505],{"class":54},[37,128558,656],{"class":82},[37,128560,51560],{"class":50},[37,128562,1364],{"class":54},[37,128564,128565,128567,128569,128571,128573],{"class":39,"line":76},[37,128566,127283],{"class":82},[37,128568,51505],{"class":54},[37,128570,656],{"class":82},[37,128572,51560],{"class":50},[37,128574,1364],{"class":54},[37,128576,128577,128579,128581,128583,128585],{"class":39,"line":92},[37,128578,70891],{"class":82},[37,128580,51505],{"class":54},[37,128582,1154],{"class":82},[37,128584,51560],{"class":50},[37,128586,1364],{"class":54},[37,128588,128589,128591,128593,128595],{"class":39,"line":97},[37,128590,70973],{"class":82},[37,128592,51505],{"class":54},[37,128594,60910],{"class":82},[37,128596,1364],{"class":54},[37,128598,128599,128601,128603,128606],{"class":39,"line":107},[37,128600,70946],{"class":82},[37,128602,51505],{"class":54},[37,128604,128605],{"class":82},"#55585a",[37,128607,1364],{"class":54},[37,128609,128610],{"class":39,"line":1390},[37,128611,1637],{"class":54},[37,128613,128614,128616,128618,128620],{"class":39,"line":1402},[37,128615,128523],{"class":2035},[37,128617,1471],{"class":51368},[37,128619,61008],{"class":2035},[37,128621,15644],{"class":54},[37,128623,128624,128626,128628,128631],{"class":39,"line":1684},[37,128625,70946],{"class":82},[37,128627,51505],{"class":54},[37,128629,128630],{"class":82},"#ff6700",[37,128632,1364],{"class":54},[37,128634,128635],{"class":39,"line":1689},[37,128636,1637],{"class":54},[119,128638],{"style":126455,"src":128639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,128641,128642],{},"行高=盒子高度：实现文字的垂直居中",[14,128644,128645],{},"原理讲解：",[119,128647],{"style":126455,"src":128648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[146,128650,128652],{"id":128651},"_82-css背景","8.2 css背景",[14,128654,128655],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[175,128657,128659],{"id":128658},"_821-背景颜色","8.2.1 背景颜色",[14,128661,128662],{},"background-color:颜色值;",[14,128664,128665],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[175,128667,128669],{"id":128668},"_822-背景图片","8.2.2 背景图片",[14,128671,128672],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[27,128674,128676],{"className":126599,"code":128675,"language":126601,"meta":32,"style":32},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[34,128677,128678,128684,128700],{"__ignoreMap":32},[37,128679,128680,128682],{"class":39,"line":40},[37,128681,51679],{"class":51368},[37,128683,15644],{"class":54},[37,128685,128686,128689,128691,128693,128695,128698],{"class":39,"line":47},[37,128687,128688],{"class":82},"  background-image",[37,128690,51505],{"class":54},[37,128692,61794],{"class":82},[37,128694,208],{"class":54},[37,128696,128697],{"class":5288},"images\u002Fbg.png",[37,128699,2791],{"class":54},[37,128701,128702],{"class":39,"line":58},[37,128703,1637],{"class":54},[342,128705,128706,128715],{},[345,128707,128708],{},[348,128709,128710,128713],{},[351,128711,128712],{"align":23808},"参数值",[351,128714,102743],{"align":23808},[389,128716,128717,128724],{},[348,128718,128719,128721],{},[394,128720,54805],{"align":23808},[394,128722,128723],{"align":23808},"无背景图（默认的）",[348,128725,128726,128728],{},[394,128727,61794],{"align":23808},[394,128729,128730],{"align":23808},"使用绝对或相对地址指定背景图像",[27,128732,128733],{"className":126599,"code":128675,"language":126601,"meta":32,"style":32},[34,128734,128735,128741,128755],{"__ignoreMap":32},[37,128736,128737,128739],{"class":39,"line":40},[37,128738,51679],{"class":51368},[37,128740,15644],{"class":54},[37,128742,128743,128745,128747,128749,128751,128753],{"class":39,"line":47},[37,128744,128688],{"class":82},[37,128746,51505],{"class":54},[37,128748,61794],{"class":82},[37,128750,208],{"class":54},[37,128752,128697],{"class":5288},[37,128754,2791],{"class":54},[37,128756,128757],{"class":39,"line":58},[37,128758,1637],{"class":54},[14,128760,128761],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[175,128763,128765],{"id":128764},"_823-背景平铺","8.2.3 背景平铺",[27,128767,128769],{"className":126599,"code":128768,"language":126601,"meta":32,"style":32},"div {\n  background-repeat: no-repeat;\n}\n",[34,128770,128771,128777,128788],{"__ignoreMap":32},[37,128772,128773,128775],{"class":39,"line":40},[37,128774,51679],{"class":51368},[37,128776,15644],{"class":54},[37,128778,128779,128782,128784,128786],{"class":39,"line":47},[37,128780,128781],{"class":82},"  background-repeat",[37,128783,51505],{"class":54},[37,128785,61804],{"class":82},[37,128787,1364],{"class":54},[37,128789,128790],{"class":39,"line":58},[37,128791,1637],{"class":54},[342,128793,128794,128802],{},[345,128795,128796],{},[348,128797,128798,128800],{},[351,128799,128712],{"align":23808},[351,128801,102743],{"align":23808},[389,128803,128804,128812,128819,128827],{},[348,128805,128806,128809],{},[394,128807,128808],{"align":23808},"repeat",[394,128810,128811],{"align":23808},"背景图像在纵向和横向上平铺（默认的）",[348,128813,128814,128816],{},[394,128815,61804],{"align":23808},[394,128817,128818],{"align":23808},"背景图像不平铺",[348,128820,128821,128824],{},[394,128822,128823],{"align":23808},"repeat-x",[394,128825,128826],{"align":23808},"背景图像在横向上平铺",[348,128828,128829,128832],{},[394,128830,128831],{"align":23808},"repeat-y",[394,128833,128834],{"align":23808},"背景图像在纵向平铺",[175,128836,128838],{"id":128837},"_824-背景图片位置","8.2.4 背景图片位置",[27,128840,128842],{"className":126599,"code":128841,"language":126601,"meta":32,"style":32},"\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",[34,128843,128844,128849,128855,128869,128873,128878,128884,128900,128904,128909,128915,128929],{"__ignoreMap":32},[37,128845,128846],{"class":39,"line":40},[37,128847,128848],{"class":43},"\u002F* 方位名词 *\u002F\n",[37,128850,128851,128853],{"class":39,"line":47},[37,128852,51679],{"class":51368},[37,128854,15644],{"class":54},[37,128856,128857,128860,128862,128864,128867],{"class":39,"line":58},[37,128858,128859],{"class":82},"  background-position",[37,128861,51505],{"class":54},[37,128863,51660],{"class":82},[37,128865,128866],{"class":82}," top",[37,128868,1364],{"class":54},[37,128870,128871],{"class":39,"line":64},[37,128872,1637],{"class":54},[37,128874,128875],{"class":39,"line":76},[37,128876,128877],{"class":43},"\u002F* 精确单位 *\u002F\n",[37,128879,128880,128882],{"class":39,"line":92},[37,128881,51679],{"class":51368},[37,128883,15644],{"class":54},[37,128885,128886,128888,128890,128892,128894,128896,128898],{"class":39,"line":97},[37,128887,128859],{"class":82},[37,128889,51505],{"class":54},[37,128891,903],{"class":82},[37,128893,51560],{"class":50},[37,128895,57572],{"class":82},[37,128897,51560],{"class":50},[37,128899,1364],{"class":54},[37,128901,128902],{"class":39,"line":107},[37,128903,1637],{"class":54},[37,128905,128906],{"class":39,"line":1390},[37,128907,128908],{"class":43},"\u002F* 混合单位 *\u002F\n",[37,128910,128911,128913],{"class":39,"line":1402},[37,128912,51679],{"class":51368},[37,128914,15644],{"class":54},[37,128916,128917,128919,128921,128923,128925,128927],{"class":39,"line":1684},[37,128918,128859],{"class":82},[37,128920,51505],{"class":54},[37,128922,903],{"class":82},[37,128924,51560],{"class":50},[37,128926,17216],{"class":82},[37,128928,1364],{"class":54},[37,128930,128931],{"class":39,"line":1689},[37,128932,1637],{"class":54},[14,128934,128935],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[342,128937,128938,128946],{},[345,128939,128940],{},[348,128941,128942,128944],{},[351,128943,128712],{"align":23808},[351,128945,25942],{"align":23808},[389,128947,128948,128955],{},[348,128949,128950,128952],{},[394,128951,52036],{"align":23808},[394,128953,128954],{"align":23808},"百分数|由浮点数和单位标识符组成的长度值",[348,128956,128957,128960],{},[394,128958,128959],{"align":23808},"position",[394,128961,128962],{"align":23808},"top|center|bottom|left|center|right 方位名词",[14,128964,128965],{},"其他说明：",[14,128967,128968],{},"①参数是方位名词",[14,128970,128971],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,128973,128974],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,128976,128977],{},"②参数是精确单位",[14,128979,128980],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,128982,128983],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,128985,128986],{},"③参数是混合单位",[14,128988,128989],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[175,128991,128993],{"id":128992},"_825-背景图片固定","8.2.5 背景图片固定",[27,128995,128997],{"className":126599,"code":128996,"language":126601,"meta":32,"style":32},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[34,128998,128999,129004,129010,129022,129026,129031,129037,129047],{"__ignoreMap":32},[37,129000,129001],{"class":39,"line":40},[37,129002,129003],{"class":43},"\u002F* 背景滚动（默认） *\u002F\n",[37,129005,129006,129008],{"class":39,"line":47},[37,129007,51679],{"class":51368},[37,129009,15644],{"class":54},[37,129011,129012,129015,129017,129020],{"class":39,"line":58},[37,129013,129014],{"class":82},"  background-attachment",[37,129016,51505],{"class":54},[37,129018,129019],{"class":82},"scroll",[37,129021,1364],{"class":54},[37,129023,129024],{"class":39,"line":64},[37,129025,1637],{"class":54},[37,129027,129028],{"class":39,"line":76},[37,129029,129030],{"class":43},"\u002F* 背景固定 *\u002F\n",[37,129032,129033,129035],{"class":39,"line":92},[37,129034,51679],{"class":51368},[37,129036,15644],{"class":54},[37,129038,129039,129041,129043,129045],{"class":39,"line":97},[37,129040,129014],{"class":82},[37,129042,51505],{"class":54},[37,129044,86301],{"class":82},[37,129046,1364],{"class":54},[37,129048,129049],{"class":39,"line":107},[37,129050,1637],{"class":54},[342,129052,129053,129062],{},[345,129054,129055],{},[348,129056,129057,129060],{},[351,129058,129059],{"align":23808},"参数",[351,129061,102743],{"align":23808},[389,129063,129064,129071],{},[348,129065,129066,129068],{},[394,129067,129019],{"align":23808},[394,129069,129070],{"align":23808},"背景图像是随对象内容滚动",[348,129072,129073,129075],{},[394,129074,86301],{"align":23808},[394,129076,129077],{"align":23808},"背景图像固定",[175,129079,129081],{"id":129080},"_826-背景样式合写","8.2.6 背景样式合写",[27,129083,129085],{"className":126599,"code":129084,"language":126601,"meta":32,"style":32},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[34,129086,129087,129092,129098,129126],{"__ignoreMap":32},[37,129088,129089],{"class":39,"line":40},[37,129090,129091],{"class":43},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[37,129093,129094,129096],{"class":39,"line":47},[37,129095,51679],{"class":51368},[37,129097,15644],{"class":54},[37,129099,129100,129102,129104,129106,129109,129111,129113,129115,129117,129120,129122,129124],{"class":39,"line":58},[37,129101,70679],{"class":82},[37,129103,51505],{"class":54},[37,129105,60910],{"class":82},[37,129107,129108],{"class":82}," url",[37,129110,208],{"class":54},[37,129112,128697],{"class":5288},[37,129114,13786],{"class":54},[37,129116,61804],{"class":82},[37,129118,129119],{"class":82}," fixed",[37,129121,17216],{"class":82},[37,129123,128866],{"class":82},[37,129125,1364],{"class":54},[37,129127,129128],{"class":39,"line":64},[37,129129,1637],{"class":54},[175,129131,129133],{"id":129132},"_827-背景色半透明","8.2.7 背景色半透明",[27,129135,129137],{"className":126599,"code":129136,"language":126601,"meta":32,"style":32},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[34,129138,129139,129145,129171],{"__ignoreMap":32},[37,129140,129141,129143],{"class":39,"line":40},[37,129142,51679],{"class":51368},[37,129144,15644],{"class":54},[37,129146,129147,129149,129151,129153,129155,129157,129159,129161,129163,129165,129167,129169],{"class":39,"line":47},[37,129148,70679],{"class":82},[37,129150,51505],{"class":54},[37,129152,55178],{"class":82},[37,129154,208],{"class":54},[37,129156,396],{"class":82},[37,129158,12507],{"class":54},[37,129160,396],{"class":82},[37,129162,12507],{"class":54},[37,129164,396],{"class":82},[37,129166,12507],{"class":54},[37,129168,100568],{"class":82},[37,129170,2791],{"class":54},[37,129172,129173],{"class":39,"line":58},[37,129174,1637],{"class":54},[14,129176,99443],{},[14,129178,129179],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129181,129182],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129184,129185],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129187,129188],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[175,129190,129192],{"id":129191},"_828-总结","8.2.8 总结",[342,129194,129195,129206],{},[345,129196,129197],{},[348,129198,129199,129202,129204],{},[351,129200,129201],{"align":23808},"属性",[351,129203,102743],{"align":23808},[351,129205,357],{"align":23808},[389,129207,129208,129219,129230,129241,129252,129263,129274],{},[348,129209,129210,129213,129216],{},[394,129211,129212],{"align":23808},"background-color",[394,129214,129215],{"align":23808},"背景颜色",[394,129217,129218],{"align":23808},"预定义的颜色值\u002F十六进制\u002FRGB代码",[348,129220,129221,129224,129227],{},[394,129222,129223],{"align":23808},"background-image",[394,129225,129226],{"align":23808},"背景图片",[394,129228,129229],{"align":23808},"url(图片路径)",[348,129231,129232,129235,129238],{},[394,129233,129234],{"align":23808},"background-repeat",[394,129236,129237],{"align":23808},"是否平铺",[394,129239,129240],{"align":23808},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[348,129242,129243,129246,129249],{},[394,129244,129245],{"align":23808},"background-position",[394,129247,129248],{"align":23808},"背景位置",[394,129250,129251],{"align":23808},"length\u002Fposition 分别是x和y坐标",[348,129253,129254,129257,129260],{},[394,129255,129256],{"align":23808},"background-attachment",[394,129258,129259],{"align":23808},"背景附着",[394,129261,129262],{"align":23808},"scroll(背景滚动) \u002Ffixed (背景固定)",[348,129264,129265,129268,129271],{},[394,129266,129267],{"align":23808},"背景简写",[394,129269,129270],{"align":23808},"书写更简单",[394,129272,129273],{"align":23808},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[348,129275,129276,129279,129282],{},[394,129277,129278],{"align":23808},"背景半透明",[394,129280,129281],{"align":23808},"背景颜色半透明",[394,129283,129284],{"align":23808},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129286,129287],{},"颜色渐变：",[119,129289],{"style":126455,"src":129290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[119,129292],{"style":126455,"src":129293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[175,129295,129297],{"id":129296},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[27,129299,129301],{"className":127346,"code":129300,"language":127348,"meta":32,"style":32},"\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",[34,129302,129303,129318,129337,129356,129375,129394,129413],{"__ignoreMap":32},[37,129304,129305,129307,129309,129311,129313,129316],{"class":39,"line":40},[37,129306,1113],{"class":54},[37,129308,51679],{"class":51368},[37,129310,53554],{"class":2035},[37,129312,70],{"class":54},[37,129314,129315],{"class":309},"\"nav\"",[37,129317,51375],{"class":54},[37,129319,129320,129322,129324,129326,129328,129330,129333,129335],{"class":39,"line":47},[37,129321,52212],{"class":54},[37,129323,443],{"class":51368},[37,129325,61125],{"class":2035},[37,129327,70],{"class":54},[37,129329,61130],{"class":309},[37,129331,129332],{"class":54},">五彩导航1\u003C\u002F",[37,129334,443],{"class":51368},[37,129336,51375],{"class":54},[37,129338,129339,129341,129343,129345,129347,129349,129352,129354],{"class":39,"line":58},[37,129340,52212],{"class":54},[37,129342,443],{"class":51368},[37,129344,61125],{"class":2035},[37,129346,70],{"class":54},[37,129348,61130],{"class":309},[37,129350,129351],{"class":54},">五彩导航2\u003C\u002F",[37,129353,443],{"class":51368},[37,129355,51375],{"class":54},[37,129357,129358,129360,129362,129364,129366,129368,129371,129373],{"class":39,"line":64},[37,129359,52212],{"class":54},[37,129361,443],{"class":51368},[37,129363,61125],{"class":2035},[37,129365,70],{"class":54},[37,129367,61130],{"class":309},[37,129369,129370],{"class":54},">五彩导航3\u003C\u002F",[37,129372,443],{"class":51368},[37,129374,51375],{"class":54},[37,129376,129377,129379,129381,129383,129385,129387,129390,129392],{"class":39,"line":76},[37,129378,52212],{"class":54},[37,129380,443],{"class":51368},[37,129382,61125],{"class":2035},[37,129384,70],{"class":54},[37,129386,61130],{"class":309},[37,129388,129389],{"class":54},">五彩导航4\u003C\u002F",[37,129391,443],{"class":51368},[37,129393,51375],{"class":54},[37,129395,129396,129398,129400,129402,129404,129406,129409,129411],{"class":39,"line":92},[37,129397,52212],{"class":54},[37,129399,443],{"class":51368},[37,129401,61125],{"class":2035},[37,129403,70],{"class":54},[37,129405,61130],{"class":309},[37,129407,129408],{"class":54},">五彩导航5\u003C\u002F",[37,129410,443],{"class":51368},[37,129412,51375],{"class":54},[37,129414,129415,129417,129419],{"class":39,"line":97},[37,129416,51853],{"class":54},[37,129418,51679],{"class":51368},[37,129420,51375],{"class":54},[27,129422,129424],{"className":126599,"code":129423,"language":126601,"meta":32,"style":32},".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",[34,129425,129426,129435,129445,129457,129469,129479,129491,129501,129505,129530,129553,129576,129599],{"__ignoreMap":32},[37,129427,129428,129431,129433],{"class":39,"line":40},[37,129429,129430],{"class":2035},".nav",[37,129432,1471],{"class":51368},[37,129434,15644],{"class":54},[37,129436,129437,129439,129441,129443],{"class":39,"line":47},[37,129438,128215],{"class":82},[37,129440,51505],{"class":54},[37,129442,72451],{"class":82},[37,129444,1364],{"class":54},[37,129446,129447,129449,129451,129453,129455],{"class":39,"line":58},[37,129448,70636],{"class":82},[37,129450,51505],{"class":54},[37,129452,1020],{"class":82},[37,129454,51560],{"class":50},[37,129456,1364],{"class":54},[37,129458,129459,129461,129463,129465,129467],{"class":39,"line":64},[37,129460,70856],{"class":82},[37,129462,51505],{"class":54},[37,129464,1059],{"class":82},[37,129466,51560],{"class":50},[37,129468,1364],{"class":54},[37,129470,129471,129473,129475,129477],{"class":39,"line":76},[37,129472,70594],{"class":82},[37,129474,51505],{"class":54},[37,129476,51660],{"class":82},[37,129478,1364],{"class":54},[37,129480,129481,129483,129485,129487,129489],{"class":39,"line":92},[37,129482,127283],{"class":82},[37,129484,51505],{"class":54},[37,129486,1059],{"class":82},[37,129488,51560],{"class":50},[37,129490,1364],{"class":54},[37,129492,129493,129495,129497,129499],{"class":39,"line":97},[37,129494,70973],{"class":82},[37,129496,51505],{"class":54},[37,129498,60910],{"class":82},[37,129500,1364],{"class":54},[37,129502,129503],{"class":39,"line":107},[37,129504,1637],{"class":54},[37,129506,129507,129509,129511,129514,129516,129518,129521,129523,129525,129527],{"class":39,"line":1390},[37,129508,129430],{"class":2035},[37,129510,1471],{"class":51368},[37,129512,129513],{"class":2035},":nth-child",[37,129515,208],{"class":54},[37,129517,422],{"class":82},[37,129519,129520],{"class":54},") { ",[37,129522,129212],{"class":82},[37,129524,51505],{"class":54},[37,129526,128630],{"class":82},[37,129528,129529],{"class":54},"; }\n",[37,129531,129532,129534,129536,129538,129540,129542,129544,129546,129548,129551],{"class":39,"line":1402},[37,129533,129430],{"class":2035},[37,129535,1471],{"class":51368},[37,129537,129513],{"class":2035},[37,129539,208],{"class":54},[37,129541,282],{"class":82},[37,129543,129520],{"class":54},[37,129545,129212],{"class":82},[37,129547,51505],{"class":54},[37,129549,129550],{"class":82},"#ff0000",[37,129552,129529],{"class":54},[37,129554,129555,129557,129559,129561,129563,129565,129567,129569,129571,129574],{"class":39,"line":1684},[37,129556,129430],{"class":2035},[37,129558,1471],{"class":51368},[37,129560,129513],{"class":2035},[37,129562,208],{"class":54},[37,129564,276],{"class":82},[37,129566,129520],{"class":54},[37,129568,129212],{"class":82},[37,129570,51505],{"class":54},[37,129572,129573],{"class":82},"#00a4ff",[37,129575,129529],{"class":54},[37,129577,129578,129580,129582,129584,129586,129588,129590,129592,129594,129597],{"class":39,"line":1689},[37,129579,129430],{"class":2035},[37,129581,1471],{"class":51368},[37,129583,129513],{"class":2035},[37,129585,208],{"class":54},[37,129587,498],{"class":82},[37,129589,129520],{"class":54},[37,129591,129212],{"class":82},[37,129593,51505],{"class":54},[37,129595,129596],{"class":82},"#ff00ff",[37,129598,129529],{"class":54},[37,129600,129601,129603,129605,129607,129609,129611,129613,129615,129617,129620],{"class":39,"line":1695},[37,129602,129430],{"class":2035},[37,129604,1471],{"class":51368},[37,129606,129513],{"class":2035},[37,129608,208],{"class":54},[37,129610,524],{"class":82},[37,129612,129520],{"class":54},[37,129614,129212],{"class":82},[37,129616,51505],{"class":54},[37,129618,129619],{"class":82},"#00ff00",[37,129621,129529],{"class":54},[146,129623,129625],{"id":129624},"_83-css三大特性","8.3 css三大特性",[175,129627,129629],{"id":129628},"_831-层叠性","8.3.1 层叠性",[14,129631,129632],{},"为了解决样式冲突问题",[14,129634,129635],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,129637,129638],{},"   ②样式不冲突，不会层叠",[175,129640,129642],{"id":129641},"_832-继承性","8.3.2 继承性",[14,129644,129645],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,129647,129648],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[27,129650,129652],{"className":126599,"code":129651,"language":126601,"meta":32,"style":32},"p {\n  color: #333;\n}\n",[34,129653,129654,129660,129670],{"__ignoreMap":32},[37,129655,129656,129658],{"class":39,"line":40},[37,129657,14],{"class":51368},[37,129659,15644],{"class":54},[37,129661,129662,129664,129666,129668],{"class":39,"line":47},[37,129663,70973],{"class":82},[37,129665,51505],{"class":54},[37,129667,62437],{"class":82},[37,129669,1364],{"class":54},[37,129671,129672],{"class":39,"line":58},[37,129673,1637],{"class":54},[119,129675],{"style":126455,"src":129676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,129678,129679],{},"解释：①行高可以跟单位也可以不跟单位",[14,129681,129682],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,129684,129685],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,129687,129688],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[175,129690,129692],{"id":129691},"_833-优先级","8.3.3 优先级",[158,129694,129695,129698],{},[161,129696,129697],{},"选择器相同，则执行层叠性",[161,129699,129700],{},"选择器不同，则根据选择器权重执行",[342,129702,129703,129713],{},[345,129704,129705],{},[348,129706,129707,129710],{},[351,129708,129709],{"align":23808},"选择器",[351,129711,129712],{"align":23808},"选择器权重",[389,129714,129715,129723,129731,129739,129747,129755],{},[348,129716,129717,129720],{},[394,129718,129719],{"align":23808},"继承 或者*",[394,129721,129722],{"align":23808},"0，0，0，0",[348,129724,129725,129728],{},[394,129726,129727],{"align":23808},"标签选择器",[394,129729,129730],{"align":23808},"0，0，0，1",[348,129732,129733,129736],{},[394,129734,129735],{"align":23808},"类选择器，伪类选择器",[394,129737,129738],{"align":23808},"0，0，1，0",[348,129740,129741,129744],{},[394,129742,129743],{"align":23808},"ID选择器",[394,129745,129746],{"align":23808},"0，1，0，0",[348,129748,129749,129752],{},[394,129750,129751],{"align":23808},"行内样式",[394,129753,129754],{"align":23808},"1，0，0，0",[348,129756,129757,129760],{},[394,129758,129759],{"align":23808},"！important",[394,129761,129762],{"align":23808},"无穷大",[14,129764,129765],{},"! important用法：",[27,129767,129769],{"className":126599,"code":129768,"language":126601,"meta":32,"style":32},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[34,129770,129771,129776,129782,129795,129799,129804,129810,129820],{"__ignoreMap":32},[37,129772,129773],{"class":39,"line":40},[37,129774,129775],{"class":43},"\u002F* !important 拥有最高优先级 *\u002F\n",[37,129777,129778,129780],{"class":39,"line":47},[37,129779,51679],{"class":51368},[37,129781,15644],{"class":54},[37,129783,129784,129786,129788,129790,129793],{"class":39,"line":58},[37,129785,70973],{"class":82},[37,129787,51505],{"class":54},[37,129789,51713],{"class":82},[37,129791,129792],{"class":50}," !important",[37,129794,1364],{"class":54},[37,129796,129797],{"class":39,"line":64},[37,129798,1637],{"class":54},[37,129800,129801],{"class":39,"line":76},[37,129802,129803],{"class":43},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[37,129805,129806,129808],{"class":39,"line":92},[37,129807,51679],{"class":51368},[37,129809,15644],{"class":54},[37,129811,129812,129814,129816,129818],{"class":39,"line":97},[37,129813,70973],{"class":82},[37,129815,51505],{"class":54},[37,129817,57489],{"class":82},[37,129819,1364],{"class":54},[37,129821,129822],{"class":39,"line":107},[37,129823,1637],{"class":54},[14,129825,129826],{},"优先级注意点：",[14,129828,129829],{},"①权重是有4组数字组成,但是不会有进位",[14,129831,129832],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,129834,129835],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,129837,129838],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,129840,129841],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,129843,129844],{},"⑥复合选择器",[342,129846,129847,129857],{},[345,129848,129849],{},[348,129850,129851,129854],{},[351,129852,129853],{"align":23808},"div ul li",[351,129855,129856],{"align":23808},"0,0,0,3",[389,129858,129859,129867,129875],{},[348,129860,129861,129864],{},[394,129862,129863],{"align":23808},".nav ul li",[394,129865,129866],{"align":23808},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[348,129868,129869,129872],{},[394,129870,129871],{"align":23808},"a:hover",[394,129873,129874],{"align":23808},"0,0,1,1",[348,129876,129877,129880],{},[394,129878,129879],{"align":23808},".nav a",[394,129881,129874],{"align":23808},[123,129883,129884],{},"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":32,"searchDepth":47,"depth":47,"links":129886},[129887,129895,129906],{"id":127995,"depth":47,"text":127996,"children":129888},[129889,129890,129891,129892,129893,129894],{"id":128008,"depth":58,"text":128009},{"id":128080,"depth":58,"text":128081},{"id":128152,"depth":58,"text":128153},{"id":128183,"depth":58,"text":128184},{"id":128190,"depth":58,"text":128191},{"id":128343,"depth":58,"text":128344},{"id":128651,"depth":47,"text":128652,"children":129896},[129897,129898,129899,129900,129901,129902,129903,129904,129905],{"id":128658,"depth":58,"text":128659},{"id":128668,"depth":58,"text":128669},{"id":128764,"depth":58,"text":128765},{"id":128837,"depth":58,"text":128838},{"id":128992,"depth":58,"text":128993},{"id":129080,"depth":58,"text":129081},{"id":129132,"depth":58,"text":129133},{"id":129191,"depth":58,"text":129192},{"id":129296,"depth":58,"text":129297},{"id":129624,"depth":47,"text":129625,"children":129907},[129908,129909,129910],{"id":129628,"depth":58,"text":129629},{"id":129641,"depth":58,"text":129642},{"id":129691,"depth":58,"text":129692},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127987,"description":128},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129917,"title":129918,"body":129919,"description":128,"extension":129,"meta":131509,"navigation":131,"path":131510,"seo":131511,"stem":131512,"__hash__":131513},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129920,"toc":131488},[129921,129924,129928,129931,129934,129937,129940,129943,129946,129949,129953,129961,129998,130034,130037,130051,130056,130090,130093,130186,130191,130194,130224,130227,130232,130240,130244,130251,130297,130341,130346,130349,130352,130355,130358,130361,130364,130366,130369,130373,130378,130422,130427,130430,130433,130470,130475,130478,130481,130484,130487,130519,130522,130525,130528,130560,130563,130566,130569,130573,130576,130608,130611,130615,130635,130638,130646,130649,130653,130658,130661,130693,130698,130701,130739,130743,130748,130751,130754,130785,130788,130805,130810,130862,130922,130927,130981,131019,131023,131027,131030,131034,131042,131045,131047,131058,131063,131111,131145,131148,131151,131154,131157,131201,131204,131207,131210,131213,131216,131219,131263,131266,131269,131272,131275,131278,131281,131287,131290,131334,131337,131340,131343,131346,131349,131393,131396,131398,131401,131405,131409,131447,131451,131454,131457,131461,131469,131473,131476,131479,131482,131485],[10,129922,129918],{"id":129923},"_9-css盒模型浮动与切图",[146,129925,129927],{"id":129926},"_91-盒子模型","9.1 盒子模型",[14,129929,129930],{},"利用盒子来设计网页",[14,129932,129933],{},"盒子包含：边框、外边距、内边距、实际内容",[14,129935,129936],{},"网页布局设置：",[14,129938,129939],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,129941,129942],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,129944,129945],{},"③往盒子里装内容",[119,129947],{"style":126455,"src":129948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[175,129950,129952],{"id":129951},"_911-边框border","9.1.1 边框（border）",[158,129954,129955,129958],{},[161,129956,129957],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[161,129959,129960],{},"语法",[27,129962,129964],{"className":126599,"code":129963,"language":126601,"meta":32,"style":32},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[34,129965,129966,129971,129977,129994],{"__ignoreMap":32},[37,129967,129968],{"class":39,"line":40},[37,129969,129970],{"class":43},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[37,129972,129973,129975],{"class":39,"line":47},[37,129974,51679],{"class":51368},[37,129976,15644],{"class":54},[37,129978,129979,129981,129983,129985,129987,129989,129992],{"class":39,"line":58},[37,129980,70964],{"class":82},[37,129982,51505],{"class":54},[37,129984,422],{"class":82},[37,129986,51560],{"class":50},[37,129988,51589],{"class":82},[37,129990,129991],{"class":82}," #ccc",[37,129993,1364],{"class":54},[37,129995,129996],{"class":39,"line":64},[37,129997,1637],{"class":54},[342,129999,130000,130008],{},[345,130001,130002],{},[348,130003,130004,130006],{},[351,130005,129201],{"align":23808},[351,130007,102743],{"align":23808},[389,130009,130010,130018,130026],{},[348,130011,130012,130015],{},[394,130013,130014],{"align":23808},"border-width",[394,130016,130017],{"align":23808},"定义边框粗细，单位是px",[348,130019,130020,130023],{},[394,130021,130022],{"align":23808},"border-style",[394,130024,130025],{"align":23808},"边框的样式",[348,130027,130028,130031],{},[394,130029,130030],{"align":23808},"border-color",[394,130032,130033],{"align":23808},"边框的颜色",[14,130035,130036],{},"边框样式 border-style 可以设置如下值：",[1210,130038,130039,130042,130045,130048],{},[161,130040,130041],{},"none：没有边框即忽略所有边框的宽度（默认值）",[161,130043,130044],{},"solid：边框为单实线(最为常用的)",[161,130046,130047],{},"dashed：边框为虚线",[161,130049,130050],{},"dotted：边框为点线",[158,130052,130053],{"start":58},[161,130054,130055],{},"边框的合写分写",[27,130057,130058],{"className":126599,"code":129963,"language":126601,"meta":32,"style":32},[34,130059,130060,130064,130070,130086],{"__ignoreMap":32},[37,130061,130062],{"class":39,"line":40},[37,130063,129970],{"class":43},[37,130065,130066,130068],{"class":39,"line":47},[37,130067,51679],{"class":51368},[37,130069,15644],{"class":54},[37,130071,130072,130074,130076,130078,130080,130082,130084],{"class":39,"line":58},[37,130073,70964],{"class":82},[37,130075,51505],{"class":54},[37,130077,422],{"class":82},[37,130079,51560],{"class":50},[37,130081,51589],{"class":82},[37,130083,129991],{"class":82},[37,130085,1364],{"class":54},[37,130087,130088],{"class":39,"line":64},[37,130089,1637],{"class":54},[14,130091,130092],{},"边框分开写法：",[27,130094,130096],{"className":126599,"code":130095,"language":126601,"meta":32,"style":32},"\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",[34,130097,130098,130103,130109,130127,130145,130164,130182],{"__ignoreMap":32},[37,130099,130100],{"class":39,"line":40},[37,130101,130102],{"class":43},"\u002F* 边框分开写法 *\u002F\n",[37,130104,130105,130107],{"class":39,"line":47},[37,130106,51679],{"class":51368},[37,130108,15644],{"class":54},[37,130110,130111,130114,130116,130118,130120,130122,130125],{"class":39,"line":58},[37,130112,130113],{"class":82},"  border-top",[37,130115,51505],{"class":54},[37,130117,422],{"class":82},[37,130119,51560],{"class":50},[37,130121,51589],{"class":82},[37,130123,130124],{"class":82}," #000",[37,130126,1364],{"class":54},[37,130128,130129,130132,130134,130136,130138,130140,130143],{"class":39,"line":64},[37,130130,130131],{"class":82},"  border-right",[37,130133,51505],{"class":54},[37,130135,282],{"class":82},[37,130137,51560],{"class":50},[37,130139,62309],{"class":82},[37,130141,130142],{"class":82}," #333",[37,130144,1364],{"class":54},[37,130146,130147,130150,130152,130154,130156,130159,130162],{"class":39,"line":76},[37,130148,130149],{"class":82},"  border-bottom",[37,130151,51505],{"class":54},[37,130153,276],{"class":82},[37,130155,51560],{"class":50},[37,130157,130158],{"class":82}," dotted",[37,130160,130161],{"class":82}," #666",[37,130163,1364],{"class":54},[37,130165,130166,130169,130171,130173,130175,130177,130180],{"class":39,"line":92},[37,130167,130168],{"class":82},"  border-left",[37,130170,51505],{"class":54},[37,130172,422],{"class":82},[37,130174,51560],{"class":50},[37,130176,51589],{"class":82},[37,130178,130179],{"class":82}," #999",[37,130181,1364],{"class":54},[37,130183,130184],{"class":39,"line":97},[37,130185,1637],{"class":54},[158,130187,130188],{"start":64},[161,130189,130190],{},"表格的细线边框",[14,130192,130193],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[27,130195,130197],{"className":126599,"code":130196,"language":126601,"meta":32,"style":32},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[34,130198,130199,130204,130210,130220],{"__ignoreMap":32},[37,130200,130201],{"class":39,"line":40},[37,130202,130203],{"class":43},"\u002F* 表格细线边框合并 *\u002F\n",[37,130205,130206,130208],{"class":39,"line":47},[37,130207,342],{"class":51368},[37,130209,15644],{"class":54},[37,130211,130212,130214,130216,130218],{"class":39,"line":58},[37,130213,70646],{"class":82},[37,130215,51505],{"class":54},[37,130217,65103],{"class":82},[37,130219,1364],{"class":54},[37,130221,130222],{"class":39,"line":64},[37,130223,1637],{"class":54},[14,130225,130226],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[158,130228,130229],{"start":76},[161,130230,130231],{},"解决边框额外增加盒子的实际大小的方法：",[1210,130233,130234,130237],{},[161,130235,130236],{},"测量盒子大小的时候,不量边框",[161,130238,130239],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[175,130241,130243],{"id":130242},"_912-内边距","9.1.2 内边距",[158,130245,130246,130249],{},[161,130247,130248],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[161,130250,129960],{},[342,130252,130253,130263],{},[345,130254,130255],{},[348,130256,130257,130260],{},[351,130258,130259],{"align":23808},"值的个数",[351,130261,130262],{"align":23808},"表达意思",[389,130264,130265,130273,130281,130289],{},[348,130266,130267,130270],{},[394,130268,130269],{"align":23808},"padding: 5px;",[394,130271,130272],{"align":23808},"1个值，代表上下左右都有5个元素",[348,130274,130275,130278],{},[394,130276,130277],{"align":23808},"padding: 5px 10px;",[394,130279,130280],{"align":23808},"2个值，代表上下内边距为5像素，左右内边距为10像素",[348,130282,130283,130286],{},[394,130284,130285],{"align":23808},"padding: 5px 10px 20px;",[394,130287,130288],{"align":23808},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[348,130290,130291,130294],{},[394,130292,130293],{"align":23808},"padding: 5px 10px 20px 30px;",[394,130295,130296],{"align":23808},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[342,130298,130299,130307],{},[345,130300,130301],{},[348,130302,130303,130305],{},[351,130304,129201],{"align":23808},[351,130306,102743],{"align":23808},[389,130308,130309,130317,130325,130333],{},[348,130310,130311,130314],{},[394,130312,130313],{"align":23808},"padding-left",[394,130315,130316],{"align":23808},"左内边距",[348,130318,130319,130322],{},[394,130320,130321],{"align":23808},"padding-right",[394,130323,130324],{"align":23808},"右内边距",[348,130326,130327,130330],{},[394,130328,130329],{"align":23808},"padding-top",[394,130331,130332],{"align":23808},"上内边距",[348,130334,130335,130338],{},[394,130336,130337],{"align":23808},"padding-bottom",[394,130339,130340],{"align":23808},"下内边距",[158,130342,130343],{"start":58},[161,130344,130345],{},"内边距会影响盒子的实际大小",[14,130347,130348],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130350,130351],{},"①内容和边框有了距离，添加了内边距",[14,130353,130354],{},"②padding影响了盒子实际大小",[14,130356,130357],{},"内边距对盒子大小的影响：",[14,130359,130360],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130362,130363],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130365,95267],{},[14,130367,130368],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[175,130370,130372],{"id":130371},"_913-外边距","9.1.3 外边距",[158,130374,130375],{},[161,130376,130377],{},"控制盒子与盒子之间的距离",[342,130379,130380,130388],{},[345,130381,130382],{},[348,130383,130384,130386],{},[351,130385,129201],{"align":23808},[351,130387,102743],{"align":23808},[389,130389,130390,130398,130406,130414],{},[348,130391,130392,130395],{},[394,130393,130394],{"align":23808},"margin-left",[394,130396,130397],{"align":23808},"左外边距",[348,130399,130400,130403],{},[394,130401,130402],{"align":23808},"margin-right",[394,130404,130405],{"align":23808},"右外边距",[348,130407,130408,130411],{},[394,130409,130410],{"align":23808},"margin-top",[394,130412,130413],{"align":23808},"上外边距",[348,130415,130416,130419],{},[394,130417,130418],{"align":23808},"margin-bottom",[394,130420,130421],{"align":23808},"下外边距",[158,130423,130424],{"start":47},[161,130425,130426],{},"外边距可以让块级盒子水平居中的两个条件：",[14,130428,130429],{},"①盒子必须指定了宽度（width）",[14,130431,130432],{},"②盒子左右的外边距都设置为 auto",[27,130434,130436],{"className":126599,"code":130435,"language":126601,"meta":32,"style":32},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[34,130437,130438,130443,130450,130466],{"__ignoreMap":32},[37,130439,130440],{"class":39,"line":40},[37,130441,130442],{"class":43},"\u002F* margin 复合写法（同上） *\u002F\n",[37,130444,130445,130448],{"class":39,"line":47},[37,130446,130447],{"class":2035},".box",[37,130449,15644],{"class":54},[37,130451,130452,130454,130456,130458,130460,130463],{"class":39,"line":58},[37,130453,70538],{"class":82},[37,130455,51505],{"class":54},[37,130457,396],{"class":82},[37,130459,51624],{"class":82},[37,130461,130462],{"class":54},";  ",[37,130464,130465],{"class":43},"\u002F* 块级盒子水平居中 *\u002F\n",[37,130467,130468],{"class":39,"line":64},[37,130469,1637],{"class":54},[158,130471,130472],{"start":58},[161,130473,130474],{},"外边距塌陷问题",[14,130476,130477],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[119,130479],{"style":126455,"src":130480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,130482,130483],{},"解决方案：",[14,130485,130486],{},"①可以为父亲元素定义上边距",[27,130488,130489],{"className":126599,"code":130435,"language":126601,"meta":32,"style":32},[34,130490,130491,130495,130501,130515],{"__ignoreMap":32},[37,130492,130493],{"class":39,"line":40},[37,130494,130442],{"class":43},[37,130496,130497,130499],{"class":39,"line":47},[37,130498,130447],{"class":2035},[37,130500,15644],{"class":54},[37,130502,130503,130505,130507,130509,130511,130513],{"class":39,"line":58},[37,130504,70538],{"class":82},[37,130506,51505],{"class":54},[37,130508,396],{"class":82},[37,130510,51624],{"class":82},[37,130512,130462],{"class":54},[37,130514,130465],{"class":43},[37,130516,130517],{"class":39,"line":64},[37,130518,1637],{"class":54},[14,130520,130521],{},"②可以为父亲元素定义上内边距",[14,130523,130524],{},"③可以为父亲元素添加overflow:hidden",[119,130526],{"style":126455,"src":130527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[27,130529,130530],{"className":126599,"code":130435,"language":126601,"meta":32,"style":32},[34,130531,130532,130536,130542,130556],{"__ignoreMap":32},[37,130533,130534],{"class":39,"line":40},[37,130535,130442],{"class":43},[37,130537,130538,130540],{"class":39,"line":47},[37,130539,130447],{"class":2035},[37,130541,15644],{"class":54},[37,130543,130544,130546,130548,130550,130552,130554],{"class":39,"line":58},[37,130545,70538],{"class":82},[37,130547,51505],{"class":54},[37,130549,396],{"class":82},[37,130551,51624],{"class":82},[37,130553,130462],{"class":54},[37,130555,130465],{"class":43},[37,130557,130558],{"class":39,"line":64},[37,130559,1637],{"class":54},[119,130561],{"style":126455,"src":130562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,130564,130565],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,130567,130568],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[175,130570,130572],{"id":130571},"_914-清除内外边距","9.1.4 清除内外边距",[14,130574,130575],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[27,130577,130578],{"className":126599,"code":130435,"language":126601,"meta":32,"style":32},[34,130579,130580,130584,130590,130604],{"__ignoreMap":32},[37,130581,130582],{"class":39,"line":40},[37,130583,130442],{"class":43},[37,130585,130586,130588],{"class":39,"line":47},[37,130587,130447],{"class":2035},[37,130589,15644],{"class":54},[37,130591,130592,130594,130596,130598,130600,130602],{"class":39,"line":58},[37,130593,70538],{"class":82},[37,130595,51505],{"class":54},[37,130597,396],{"class":82},[37,130599,51624],{"class":82},[37,130601,130462],{"class":54},[37,130603,130465],{"class":43},[37,130605,130606],{"class":39,"line":64},[37,130607,1637],{"class":54},[14,130609,130610],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[175,130612,130614],{"id":130613},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1210,130616,130617,130620,130623,130626,130629,130632],{},[161,130618,130619],{},"文件→打开 ：可以打开我们要测量的图片",[161,130621,130622],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[161,130624,130625],{},"右击标尺，把里面的单位改为像素",[161,130627,130628],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[161,130630,130631],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[161,130633,130634],{},"用选区拖动 可以测量大小",[119,130636],{"style":126455,"src":130637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1210,130639,130640,130643],{},[161,130641,130642],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[161,130644,130645],{},"吸管取色工具",[119,130647],{"style":126455,"src":130648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[175,130650,130652],{"id":130651},"_916-案例","9.1.6 案例",[158,130654,130655],{},[161,130656,130657],{},"小米商品",[119,130659],{"style":126455,"src":130660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[27,130662,130663],{"className":126599,"code":130435,"language":126601,"meta":32,"style":32},[34,130664,130665,130669,130675,130689],{"__ignoreMap":32},[37,130666,130667],{"class":39,"line":40},[37,130668,130442],{"class":43},[37,130670,130671,130673],{"class":39,"line":47},[37,130672,130447],{"class":2035},[37,130674,15644],{"class":54},[37,130676,130677,130679,130681,130683,130685,130687],{"class":39,"line":58},[37,130678,70538],{"class":82},[37,130680,51505],{"class":54},[37,130682,396],{"class":82},[37,130684,51624],{"class":82},[37,130686,130462],{"class":54},[37,130688,130465],{"class":43},[37,130690,130691],{"class":39,"line":64},[37,130692,1637],{"class":54},[158,130694,130695],{"start":47},[161,130696,130697],{},"快报模块",[119,130699],{"style":126455,"src":130700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[27,130702,130704],{"className":127346,"code":130703,"language":127348,"meta":32,"style":32},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[34,130705,130706,130711,130726,130731],{"__ignoreMap":32},[37,130707,130708],{"class":39,"line":40},[37,130709,130710],{"class":43},"\u003C!-- HTML 代码示例 -->\n",[37,130712,130713,130715,130717,130719,130721,130724],{"class":39,"line":47},[37,130714,1113],{"class":54},[37,130716,51679],{"class":51368},[37,130718,53554],{"class":2035},[37,130720,70],{"class":54},[37,130722,130723],{"class":309},"\"example\"",[37,130725,51375],{"class":54},[37,130727,130728],{"class":39,"line":58},[37,130729,130730],{"class":54},"  示例内容\n",[37,130732,130733,130735,130737],{"class":39,"line":64},[37,130734,51853],{"class":54},[37,130736,51679],{"class":51368},[37,130738,51375],{"class":54},[175,130740,130742],{"id":130741},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[158,130744,130745],{},[161,130746,130747],{},"圆角边框",[14,130749,130750],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[119,130752],{"style":126455,"src":130753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[27,130755,130757],{"className":126599,"code":130756,"language":126601,"meta":32,"style":32},"div {\n  border: 1px solid #ccc;\n}\n",[34,130758,130759,130765,130781],{"__ignoreMap":32},[37,130760,130761,130763],{"class":39,"line":40},[37,130762,51679],{"class":51368},[37,130764,15644],{"class":54},[37,130766,130767,130769,130771,130773,130775,130777,130779],{"class":39,"line":47},[37,130768,70964],{"class":82},[37,130770,51505],{"class":54},[37,130772,422],{"class":82},[37,130774,51560],{"class":50},[37,130776,51589],{"class":82},[37,130778,129991],{"class":82},[37,130780,1364],{"class":54},[37,130782,130783],{"class":39,"line":58},[37,130784,1637],{"class":54},[14,130786,130787],{},"解释:",[1210,130789,130790,130793,130796,130799,130802],{},[161,130791,130792],{},"参数值可以为数值或百分比的形式",[161,130794,130795],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[161,130797,130798],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[161,130800,130801],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[161,130803,130804],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[158,130806,130807],{"start":47},[161,130808,130809],{},"盒子阴影",[27,130811,130813],{"className":126599,"code":130812,"language":126601,"meta":32,"style":32},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[34,130814,130815,130821,130858],{"__ignoreMap":32},[37,130816,130817,130819],{"class":39,"line":40},[37,130818,51679],{"class":51368},[37,130820,15644],{"class":54},[37,130822,130823,130826,130828,130830,130832,130834,130836,130838,130840,130842,130844,130846,130848,130850,130852,130854,130856],{"class":39,"line":47},[37,130824,130825],{"class":82},"  box-shadow",[37,130827,51505],{"class":54},[37,130829,396],{"class":82},[37,130831,14827],{"class":82},[37,130833,51560],{"class":50},[37,130835,2110],{"class":82},[37,130837,51560],{"class":50},[37,130839,78835],{"class":82},[37,130841,208],{"class":54},[37,130843,396],{"class":82},[37,130845,12507],{"class":54},[37,130847,396],{"class":82},[37,130849,12507],{"class":54},[37,130851,396],{"class":82},[37,130853,12507],{"class":54},[37,130855,86278],{"class":82},[37,130857,2791],{"class":54},[37,130859,130860],{"class":39,"line":58},[37,130861,1637],{"class":54},[342,130863,130864,130872],{},[345,130865,130866],{},[348,130867,130868,130870],{},[351,130869,357],{"align":23808},[351,130871,27562],{"align":23808},[389,130873,130874,130882,130890,130898,130906,130914],{},[348,130875,130876,130879],{},[394,130877,130878],{"align":23808},"h-shadow",[394,130880,130881],{"align":23808},"必需,水平阴影的位置,允许负值",[348,130883,130884,130887],{},[394,130885,130886],{"align":23808},"v-shadow",[394,130888,130889],{"align":23808},"必需,垂直阴影的位置,允许负值",[348,130891,130892,130895],{},[394,130893,130894],{"align":23808},"blur",[394,130896,130897],{"align":23808},"可选,模糊距离,就是影子的虚实",[348,130899,130900,130903],{},[394,130901,130902],{"align":23808},"spread",[394,130904,130905],{"align":23808},"可选,阴影尺寸",[348,130907,130908,130911],{},[394,130909,130910],{"align":23808},"color",[394,130912,130913],{"align":23808},"可选,阴影的颜色",[348,130915,130916,130919],{},[394,130917,130918],{"align":23808},"inset",[394,130920,130921],{"align":23808},"可选,将外部阴影(outset)改为内部阴影",[158,130923,130924],{"start":58},[161,130925,130926],{},"文字阴影",[27,130928,130930],{"className":126599,"code":130929,"language":126601,"meta":32,"style":32},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[34,130931,130932,130938,130977],{"__ignoreMap":32},[37,130933,130934,130936],{"class":39,"line":40},[37,130935,14],{"class":51368},[37,130937,15644],{"class":54},[37,130939,130940,130943,130945,130947,130949,130951,130953,130955,130957,130959,130961,130963,130965,130967,130969,130971,130973,130975],{"class":39,"line":47},[37,130941,130942],{"class":82},"  text-shadow",[37,130944,51505],{"class":54},[37,130946,422],{"class":82},[37,130948,51560],{"class":50},[37,130950,25191],{"class":82},[37,130952,51560],{"class":50},[37,130954,14827],{"class":82},[37,130956,51560],{"class":50},[37,130958,78835],{"class":82},[37,130960,208],{"class":54},[37,130962,396],{"class":82},[37,130964,12507],{"class":54},[37,130966,396],{"class":82},[37,130968,12507],{"class":54},[37,130970,396],{"class":82},[37,130972,12507],{"class":54},[37,130974,100568],{"class":82},[37,130976,2791],{"class":54},[37,130978,130979],{"class":39,"line":58},[37,130980,1637],{"class":54},[342,130982,130983,130991],{},[345,130984,130985],{},[348,130986,130987,130989],{},[351,130988,357],{"align":23808},[351,130990,27562],{"align":23808},[389,130992,130993,130999,131006,131013],{},[348,130994,130995,130997],{},[394,130996,130878],{"align":23808},[394,130998,130881],{"align":23808},[348,131000,131001,131003],{},[394,131002,130886],{"align":23808},[394,131004,131005],{"align":23808},"必需,垂直阴影位置,允许负值",[348,131007,131008,131010],{},[394,131009,130894],{"align":23808},[394,131011,131012],{"align":23808},"可选,模糊的距离",[348,131014,131015,131017],{},[394,131016,130910],{"align":23808},[394,131018,130913],{"align":23808},[146,131020,131022],{"id":131021},"_92-浮动","9.2 浮动",[175,131024,131026],{"id":131025},"_921-浮动介绍","9.2.1 浮动介绍",[14,131028,131029],{},"在16.2中详细介绍",[175,131031,131033],{"id":131032},"_922-清除浮动","9.2.2 清除浮动",[158,131035,131036,131039],{},[161,131037,131038],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[161,131040,131041],{},"清除浮动的本质",[14,131043,131044],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,131046,9097],{},[1210,131048,131049,131052,131055],{},[161,131050,131051],{},"如果父盒子本身有高度，则不需要清除浮动",[161,131053,131054],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[161,131056,131057],{},"父级有了高度，就不会影响下面的标准流了",[158,131059,131060],{"start":58},[161,131061,131062],{},"清除浮动样式",[27,131064,131066],{"className":126599,"code":131065,"language":126601,"meta":32,"style":32},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[34,131067,131068,131075,131086,131090,131097,131107],{"__ignoreMap":32},[37,131069,131070,131073],{"class":39,"line":40},[37,131071,131072],{"class":2035},".left",[37,131074,15644],{"class":54},[37,131076,131077,131080,131082,131084],{"class":39,"line":47},[37,131078,131079],{"class":82},"  float",[37,131081,51505],{"class":54},[37,131083,23808],{"class":82},[37,131085,1364],{"class":54},[37,131087,131088],{"class":39,"line":58},[37,131089,1637],{"class":54},[37,131091,131092,131095],{"class":39,"line":64},[37,131093,131094],{"class":2035},".right",[37,131096,15644],{"class":54},[37,131098,131099,131101,131103,131105],{"class":39,"line":76},[37,131100,131079],{"class":82},[37,131102,51505],{"class":54},[37,131104,72590],{"class":82},[37,131106,1364],{"class":54},[37,131108,131109],{"class":39,"line":92},[37,131110,1637],{"class":54},[342,131112,131113,131121],{},[345,131114,131115],{},[348,131116,131117,131119],{},[351,131118,127063],{"align":23808},[351,131120,27562],{"align":23808},[389,131122,131123,131130,131137],{},[348,131124,131125,131127],{},[394,131126,23808],{"align":23808},[394,131128,131129],{"align":23808},"不允许左侧有浮动元素（清除左侧浮动的影响）",[348,131131,131132,131134],{},[394,131133,72590],{"align":23808},[394,131135,131136],{"align":23808},"不允许右侧有浮动元素（清除右侧浮动的影响）",[348,131138,131139,131142],{},[394,131140,131141],{"align":23808},"both",[394,131143,131144],{"align":23808},"同时清除左右侧浮动的影响",[14,131146,131147],{},"法一",[14,131149,131150],{},"额外标签法也称为隔墙法",[14,131152,131153],{},"使用方式：",[14,131155,131156],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[27,131158,131159],{"className":126599,"code":131065,"language":126601,"meta":32,"style":32},[34,131160,131161,131167,131177,131181,131187,131197],{"__ignoreMap":32},[37,131162,131163,131165],{"class":39,"line":40},[37,131164,131072],{"class":2035},[37,131166,15644],{"class":54},[37,131168,131169,131171,131173,131175],{"class":39,"line":47},[37,131170,131079],{"class":82},[37,131172,51505],{"class":54},[37,131174,23808],{"class":82},[37,131176,1364],{"class":54},[37,131178,131179],{"class":39,"line":58},[37,131180,1637],{"class":54},[37,131182,131183,131185],{"class":39,"line":64},[37,131184,131094],{"class":2035},[37,131186,15644],{"class":54},[37,131188,131189,131191,131193,131195],{"class":39,"line":76},[37,131190,131079],{"class":82},[37,131192,51505],{"class":54},[37,131194,72590],{"class":82},[37,131196,1364],{"class":54},[37,131198,131199],{"class":39,"line":92},[37,131200,1637],{"class":54},[14,131202,131203],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131205,131206],{},"优点： 通俗易懂，书写方便",[14,131208,131209],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131211,131212],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131214,131215],{},"法二",[14,131217,131218],{},"父级添加overflow属性",[27,131220,131221],{"className":126599,"code":131065,"language":126601,"meta":32,"style":32},[34,131222,131223,131229,131239,131243,131249,131259],{"__ignoreMap":32},[37,131224,131225,131227],{"class":39,"line":40},[37,131226,131072],{"class":2035},[37,131228,15644],{"class":54},[37,131230,131231,131233,131235,131237],{"class":39,"line":47},[37,131232,131079],{"class":82},[37,131234,51505],{"class":54},[37,131236,23808],{"class":82},[37,131238,1364],{"class":54},[37,131240,131241],{"class":39,"line":58},[37,131242,1637],{"class":54},[37,131244,131245,131247],{"class":39,"line":64},[37,131246,131094],{"class":2035},[37,131248,15644],{"class":54},[37,131250,131251,131253,131255,131257],{"class":39,"line":76},[37,131252,131079],{"class":82},[37,131254,51505],{"class":54},[37,131256,72590],{"class":82},[37,131258,1364],{"class":54},[37,131260,131261],{"class":39,"line":92},[37,131262,1637],{"class":54},[14,131264,131265],{},"overflow: hidden;",[14,131267,131268],{},"优点：代码简洁",[14,131270,131271],{},"缺点：无法显示溢出的部分",[14,131273,131274],{},"注意：是给父元素添加代码",[14,131276,131277],{},"法三",[14,131279,131280],{},"父级添加after伪元素",[14,131282,131283,131286],{},[131284,131285],"after",{}," 方式是额外标签法的升级版",[14,131288,131289],{},"使用的时候复制就可以",[27,131291,131292],{"className":126599,"code":131065,"language":126601,"meta":32,"style":32},[34,131293,131294,131300,131310,131314,131320,131330],{"__ignoreMap":32},[37,131295,131296,131298],{"class":39,"line":40},[37,131297,131072],{"class":2035},[37,131299,15644],{"class":54},[37,131301,131302,131304,131306,131308],{"class":39,"line":47},[37,131303,131079],{"class":82},[37,131305,51505],{"class":54},[37,131307,23808],{"class":82},[37,131309,1364],{"class":54},[37,131311,131312],{"class":39,"line":58},[37,131313,1637],{"class":54},[37,131315,131316,131318],{"class":39,"line":64},[37,131317,131094],{"class":2035},[37,131319,15644],{"class":54},[37,131321,131322,131324,131326,131328],{"class":39,"line":76},[37,131323,131079],{"class":82},[37,131325,51505],{"class":54},[37,131327,72590],{"class":82},[37,131329,1364],{"class":54},[37,131331,131332],{"class":39,"line":92},[37,131333,1637],{"class":54},[14,131335,131336],{},"优点：没有增加标签，结构更简单",[14,131338,131339],{},"缺点：照顾低版本浏览器",[14,131341,131342],{},"代表网站： 百度、淘宝网、网易等",[14,131344,131345],{},"法四",[14,131347,131348],{},"父级添加双伪元素",[27,131350,131351],{"className":126599,"code":131065,"language":126601,"meta":32,"style":32},[34,131352,131353,131359,131369,131373,131379,131389],{"__ignoreMap":32},[37,131354,131355,131357],{"class":39,"line":40},[37,131356,131072],{"class":2035},[37,131358,15644],{"class":54},[37,131360,131361,131363,131365,131367],{"class":39,"line":47},[37,131362,131079],{"class":82},[37,131364,51505],{"class":54},[37,131366,23808],{"class":82},[37,131368,1364],{"class":54},[37,131370,131371],{"class":39,"line":58},[37,131372,1637],{"class":54},[37,131374,131375,131377],{"class":39,"line":64},[37,131376,131094],{"class":2035},[37,131378,15644],{"class":54},[37,131380,131381,131383,131385,131387],{"class":39,"line":76},[37,131382,131079],{"class":82},[37,131384,51505],{"class":54},[37,131386,72590],{"class":82},[37,131388,1364],{"class":54},[37,131390,131391],{"class":39,"line":92},[37,131392,1637],{"class":54},[14,131394,131395],{},"优点：代码更简洁",[14,131397,131339],{},[14,131399,131400],{},"代表网站：小米、腾讯等",[146,131402,131404],{"id":131403},"_93-ps切图","9.3 PS切图",[175,131406,131408],{"id":131407},"_931-常见图片格式","9.3.1 常见图片格式",[342,131410,131411,131421],{},[345,131412,131413],{},[348,131414,131415,131418],{},[351,131416,131417],{"align":23808},"jpg图像格式",[351,131419,131420],{"align":23808},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[389,131422,131423,131431,131439],{},[348,131424,131425,131428],{},[394,131426,131427],{"align":23808},"gif图像格式",[394,131429,131430],{"align":23808},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[348,131432,131433,131436],{},[394,131434,131435],{"align":23808},"png图像格式",[394,131437,131438],{"align":23808},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[348,131440,131441,131444],{},[394,131442,131443],{"align":23808},"PSD图像格式",[394,131445,131446],{"align":23808},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[175,131448,131450],{"id":131449},"_932-图层切图","9.3.2 图层切图",[14,131452,131453],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,131455,131456],{},"按住shift选中两个图层->图层菜单->合并图层",[175,131458,131460],{"id":131459},"_933-切片切图","9.3.3 切片切图",[1210,131462,131463,131466],{},[161,131464,131465],{},"利用切片工具手动划出",[161,131467,131468],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[175,131470,131472],{"id":131471},"_934-切图步骤","9.3.4 切图步骤",[14,131474,131475],{},"用切片工具选中：",[119,131477],{"style":126455,"src":131478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,131480,131481],{},"文件 -> 导出",[119,131483],{"style":126455,"src":131484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[123,131486,131487],{},"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":32,"searchDepth":47,"depth":47,"links":131489},[131490,131499,131503],{"id":129926,"depth":47,"text":129927,"children":131491},[131492,131493,131494,131495,131496,131497,131498],{"id":129951,"depth":58,"text":129952},{"id":130242,"depth":58,"text":130243},{"id":130371,"depth":58,"text":130372},{"id":130571,"depth":58,"text":130572},{"id":130613,"depth":58,"text":130614},{"id":130651,"depth":58,"text":130652},{"id":130741,"depth":58,"text":130742},{"id":131021,"depth":47,"text":131022,"children":131500},[131501,131502],{"id":131025,"depth":58,"text":131026},{"id":131032,"depth":58,"text":131033},{"id":131403,"depth":47,"text":131404,"children":131504},[131505,131506,131507,131508],{"id":131407,"depth":58,"text":131408},{"id":131449,"depth":58,"text":131450},{"id":131459,"depth":58,"text":131460},{"id":131471,"depth":58,"text":131472},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129918,"description":128},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131515,"title":131516,"body":131517,"description":128,"extension":129,"meta":132158,"navigation":131,"path":132159,"seo":132160,"stem":132161,"__hash__":132162},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131518,"toc":132146},[131519,131522,131526,131552,131586,131590,131594,131597,131639,131646,131656,131664,131666,131669,131672,131675,131682,131696,131700,131703,131732,131736,131739,131753,131757,131760,131788,131792,131795,131821,131825,131830,131863,131868,131896,131900,131917,131963,131968,132012,132029,132136,132144],[10,131520,131516],{"id":131521},"_10-css规范与学成在线案例",[146,131523,131525],{"id":131524},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[158,131527,131528,131534,131540,131546],{},[161,131529,131530,131533],{},[354,131531,131532],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[161,131535,131536,131539],{},[354,131537,131538],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[161,131541,131542,131545],{},[354,131543,131544],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[161,131547,131548,131551],{},[354,131549,131550],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[27,131553,131554],{"className":126599,"code":129963,"language":126601,"meta":32,"style":32},[34,131555,131556,131560,131566,131582],{"__ignoreMap":32},[37,131557,131558],{"class":39,"line":40},[37,131559,129970],{"class":43},[37,131561,131562,131564],{"class":39,"line":47},[37,131563,51679],{"class":51368},[37,131565,15644],{"class":54},[37,131567,131568,131570,131572,131574,131576,131578,131580],{"class":39,"line":58},[37,131569,70964],{"class":82},[37,131571,51505],{"class":54},[37,131573,422],{"class":82},[37,131575,51560],{"class":50},[37,131577,51589],{"class":82},[37,131579,129991],{"class":82},[37,131581,1364],{"class":54},[37,131583,131584],{"class":39,"line":64},[37,131585,1637],{"class":54},[146,131587,131589],{"id":131588},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[175,131591,131593],{"id":131592},"_1021-header头部制作","10.2.1 header头部制作",[119,131595],{"style":126455,"src":131596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1210,131598,131599,131606,131613,131619,131626,131633],{},[161,131600,131601,131602,131605],{},"1号是版心盒子 ",[354,131603,131604],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[161,131607,131608,131609,131612],{},"版心盒子 里面包含 2号盒子 ",[354,131610,131611],{},"logo"," 图标",[161,131614,131615,131616,131618],{},"版心盒子 里面包含 3号盒子 ",[354,131617,53781],{}," 导航栏",[161,131620,131621,131622,131625],{},"版心盒子 里面包含 4号盒子 ",[354,131623,131624],{},"search"," 搜索框",[161,131627,131628,131629,131632],{},"版心盒子 里面包含 5号盒子 ",[354,131630,131631],{},"user"," 个人信息",[161,131634,131635,131636],{},"注意，要求里面的 ",[354,131637,131638],{},"4个子盒子 必须都浮动",[158,131640,131641],{},[161,131642,131643],{},[354,131644,131645],{},"导航栏注意点:",[14,131647,131648,131649,131652,131653],{},"实际开发中， ",[354,131650,131651],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[354,131654,131655],{},"用 li 包含链接(li+a)的做法",[1210,131657,131658,131661],{},[161,131659,131660],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[161,131662,131663],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,131665,9097],{},[14,131667,131668],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,131670,131671],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,131673,131674],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[158,131676,131677],{"start":47},[161,131678,131679],{},[354,131680,131681],{},"4号盒子search的细节：",[1210,131683,131684,131687,131690],{},[161,131685,131686],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[161,131688,131689],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[161,131691,131692,131695],{},[34,131693,131694],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[175,131697,131699],{"id":131698},"_1022-banner制作","10.2.2 banner制作",[119,131701],{"style":126455,"src":131702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1210,131704,131705,131712,131718,131725],{},[161,131706,131707,131708,131711],{},"1号盒子是通栏的大盒子 ",[354,131709,131710],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[161,131713,131714,131715,131717],{},"2号盒子是版心 ",[354,131716,998],{}," ， 要水平居中对齐",[161,131719,131720,131721,131724],{},"3号盒子版心内，左对齐 ",[354,131722,131723],{},"subnav"," 侧导航栏",[161,131726,131727,131728,131731],{},"4号盒子版心内，右对齐 ",[354,131729,131730],{},"course"," 课程",[175,131733,131735],{"id":131734},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[119,131737],{"style":126455,"src":131738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1210,131740,131741,131744,131747,131750],{},[161,131742,131743],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[161,131745,131746],{},"1号盒子是标题 H3 左侧浮动",[161,131748,131749],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[161,131751,131752],{},"3号盒子 右浮动 mod 修改",[175,131754,131756],{"id":131755},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[119,131758],{"style":126455,"src":131759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1210,131761,131762,131768,131775,131782,131785],{},[161,131763,131764,131765,131767],{},"1号盒子为最大的盒子 ",[354,131766,53782],{}," 版心水平居中对齐",[161,131769,131770,131771,131774],{},"2号盒子为上面部分 ",[354,131772,131773],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[161,131776,131777,131778,131781],{},"3号盒子为底下部分 ",[354,131779,131780],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[161,131783,131784],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[161,131786,131787],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[175,131789,131791],{"id":131790},"_1025-底部模块制作","10.2.5 底部模块制作",[119,131793],{"style":126455,"src":131794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1210,131796,131797,131804,131807,131814],{},[161,131798,131799,131800,131803],{},"1号盒子通栏大盒子 底部 ",[354,131801,131802],{},"footer"," 给高度 底色是白色",[161,131805,131806],{},"2号盒子版心水平居中",[161,131808,131809,131810,131813],{},"3号盒子版权 ",[354,131811,131812],{},"copyright"," 左对齐",[161,131815,131816,131817,131820],{},"4号盒子 链接组 ",[354,131818,131819],{},"links"," 右对齐",[175,131822,131824],{"id":131823},"_1026-代码模块","10.2.6 代码模块",[158,131826,131827],{},[161,131828,131829],{},"html部分",[27,131831,131833],{"className":127346,"code":131832,"language":127348,"meta":32,"style":32},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[34,131834,131835],{"__ignoreMap":32},[37,131836,131837,131839,131841,131843,131845,131848,131851,131853,131856,131859,131861],{"class":39,"line":40},[37,131838,1113],{"class":54},[37,131840,443],{"class":51368},[37,131842,61125],{"class":2035},[37,131844,70],{"class":54},[37,131846,131847],{"class":309},"\"https:\u002F\u002Fexample.com\"",[37,131849,131850],{"class":2035}," target",[37,131852,70],{"class":54},[37,131854,131855],{"class":309},"\"_blank\"",[37,131857,131858],{"class":54},">链接文字\u003C\u002F",[37,131860,443],{"class":51368},[37,131862,51375],{"class":54},[158,131864,131865],{"start":47},[161,131866,131867],{},"css部分",[27,131869,131870],{"className":127346,"code":131832,"language":127348,"meta":32,"style":32},[34,131871,131872],{"__ignoreMap":32},[37,131873,131874,131876,131878,131880,131882,131884,131886,131888,131890,131892,131894],{"class":39,"line":40},[37,131875,1113],{"class":54},[37,131877,443],{"class":51368},[37,131879,61125],{"class":2035},[37,131881,70],{"class":54},[37,131883,131847],{"class":309},[37,131885,131850],{"class":2035},[37,131887,70],{"class":54},[37,131889,131855],{"class":309},[37,131891,131858],{"class":54},[37,131893,443],{"class":51368},[37,131895,51375],{"class":54},[175,131897,131899],{"id":131898},"_1027-收获","10.2.7 收获",[158,131901,131902,131905,131908,131911,131914],{},[161,131903,131904],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[161,131906,131907],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[161,131909,131910],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[161,131912,131913],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[161,131915,131916],{},"遗忘代码",[27,131918,131920],{"className":126599,"code":131919,"language":126601,"meta":32,"style":32},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[34,131921,131922,131944,131949,131959],{"__ignoreMap":32},[37,131923,131924,131926,131928,131930,131932,131934,131936,131938,131940,131942],{"class":39,"line":40},[37,131925,51679],{"class":51368},[37,131927,12507],{"class":54},[37,131929,14],{"class":51368},[37,131931,12507],{"class":54},[37,131933,10],{"class":51368},[37,131935,12507],{"class":54},[37,131937,1210],{"class":51368},[37,131939,12507],{"class":54},[37,131941,161],{"class":51368},[37,131943,15644],{"class":54},[37,131945,131946],{"class":39,"line":47},[37,131947,131948],{"class":43},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[37,131950,131951,131953,131955,131957],{"class":39,"line":58},[37,131952,128215],{"class":82},[37,131954,51505],{"class":54},[37,131956,60937],{"class":82},[37,131958,1364],{"class":54},[37,131960,131961],{"class":39,"line":64},[37,131962,1637],{"class":54},[158,131964,131965],{"start":92},[161,131966,131967],{},"html引css的程序",[27,131969,131970],{"className":126599,"code":131919,"language":126601,"meta":32,"style":32},[34,131971,131972,131994,131998,132008],{"__ignoreMap":32},[37,131973,131974,131976,131978,131980,131982,131984,131986,131988,131990,131992],{"class":39,"line":40},[37,131975,51679],{"class":51368},[37,131977,12507],{"class":54},[37,131979,14],{"class":51368},[37,131981,12507],{"class":54},[37,131983,10],{"class":51368},[37,131985,12507],{"class":54},[37,131987,1210],{"class":51368},[37,131989,12507],{"class":54},[37,131991,161],{"class":51368},[37,131993,15644],{"class":54},[37,131995,131996],{"class":39,"line":47},[37,131997,131948],{"class":43},[37,131999,132000,132002,132004,132006],{"class":39,"line":58},[37,132001,128215],{"class":82},[37,132003,51505],{"class":54},[37,132005,60937],{"class":82},[37,132007,1364],{"class":54},[37,132009,132010],{"class":39,"line":64},[37,132011,1637],{"class":54},[158,132013,132014,132017,132020,132023,132026],{"start":97},[161,132015,132016],{},"浮动的盒子不会有外边距合并问题",[161,132018,132019],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[161,132021,132022],{},"ctrl+g快速定位行；shift+alt多个光标",[161,132024,132025],{},"学习上方各个模块的选择器起名方法，以后就这样用",[161,132027,132028],{},"在写选择器时尽量写全一些，例如",[27,132030,132032],{"className":126599,"code":132031,"language":126601,"meta":32,"style":32},"\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",[34,132033,132034,132039,132055,132060,132075,132080,132095,132100,132115,132120],{"__ignoreMap":32},[37,132035,132036],{"class":39,"line":40},[37,132037,132038],{"class":43},"\u002F* 静态定位（默认） *\u002F\n",[37,132040,132041,132044,132046,132048,132050,132053],{"class":39,"line":47},[37,132042,132043],{"class":2035},".static",[37,132045,79875],{"class":54},[37,132047,128959],{"class":82},[37,132049,51505],{"class":54},[37,132051,132052],{"class":82},"static",[37,132054,129529],{"class":54},[37,132056,132057],{"class":39,"line":58},[37,132058,132059],{"class":43},"\u002F* 相对定位 *\u002F\n",[37,132061,132062,132065,132067,132069,132071,132073],{"class":39,"line":64},[37,132063,132064],{"class":2035},".relative",[37,132066,79875],{"class":54},[37,132068,128959],{"class":82},[37,132070,51505],{"class":54},[37,132072,54832],{"class":82},[37,132074,129529],{"class":54},[37,132076,132077],{"class":39,"line":76},[37,132078,132079],{"class":43},"\u002F* 绝对定位 *\u002F\n",[37,132081,132082,132085,132087,132089,132091,132093],{"class":39,"line":92},[37,132083,132084],{"class":2035},".absolute",[37,132086,79875],{"class":54},[37,132088,128959],{"class":82},[37,132090,51505],{"class":54},[37,132092,54899],{"class":82},[37,132094,129529],{"class":54},[37,132096,132097],{"class":39,"line":97},[37,132098,132099],{"class":43},"\u002F* 固定定位 *\u002F\n",[37,132101,132102,132105,132107,132109,132111,132113],{"class":39,"line":107},[37,132103,132104],{"class":2035},".fixed",[37,132106,79875],{"class":54},[37,132108,128959],{"class":82},[37,132110,51505],{"class":54},[37,132112,86301],{"class":82},[37,132114,129529],{"class":54},[37,132116,132117],{"class":39,"line":1390},[37,132118,132119],{"class":43},"\u002F* 粘性定位 *\u002F\n",[37,132121,132122,132125,132127,132129,132131,132134],{"class":39,"line":1402},[37,132123,132124],{"class":2035},".sticky",[37,132126,79875],{"class":54},[37,132128,128959],{"class":82},[37,132130,51505],{"class":54},[37,132132,132133],{"class":82},"sticky",[37,132135,129529],{"class":54},[158,132137,132138,132141],{"start":1689},[161,132139,132140],{},"一定要用好注释",[161,132142,132143],{},"浮动的盒子不会有外边距合并的问题",[123,132145,131487],{},{"title":32,"searchDepth":47,"depth":47,"links":132147},[132148,132149],{"id":131524,"depth":47,"text":131525},{"id":131588,"depth":47,"text":131589,"children":132150},[132151,132152,132153,132154,132155,132156,132157],{"id":131592,"depth":58,"text":131593},{"id":131698,"depth":58,"text":131699},{"id":131734,"depth":58,"text":131735},{"id":131755,"depth":58,"text":131756},{"id":131790,"depth":58,"text":131791},{"id":131823,"depth":58,"text":131824},{"id":131898,"depth":58,"text":131899},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131516,"description":128},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132164,"title":132165,"body":132166,"description":128,"extension":129,"meta":133652,"navigation":131,"path":133653,"seo":133654,"stem":133655,"__hash__":133656},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132167,"toc":133644},[132168,132171,132175,132179,132190,132194,132211,132255,132288,132291,132308,132311,132314,132358,132362,132366,132369,132372,132376,132379,132390,132453,132494,132497,132512,132566,132574,132577,132588,132642,132668,132671,132684,132738,132770,132824,132847,132901,132904,132907,132914,132968,132989,133043,133046,133049,133134,133142,133199,133222,133226,133229,133247,133251,133270,133324,133362,133366,133369,133372,133394,133398,133406,133409,133414,133425,133428,133432,133446,133490,133493,133497,133500,133505,133531,133536,133613,133616,133620,133623,133626,133629,133632,133635,133638,133641],[10,132169,132165],{"id":132170},"_11-传统布局与定位体系",[146,132172,132174],{"id":132173},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[175,132176,132178],{"id":132177},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1210,132180,132181,132184,132187],{},[161,132182,132183],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[161,132185,132186],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[161,132188,132189],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[175,132191,132193],{"id":132192},"_1112-浮动","11.1.2 浮动",[1210,132195,132196,132199,132202,132205,132208],{},[161,132197,132198],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[161,132200,132201],{},"浮动可以改变元素标签默认的排列方式",[161,132203,132204],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[161,132206,132207],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[161,132209,132210],{},"在使用行内块转换时盒子之间是有空隙的",[27,132212,132213],{"className":126599,"code":131065,"language":126601,"meta":32,"style":32},[34,132214,132215,132221,132231,132235,132241,132251],{"__ignoreMap":32},[37,132216,132217,132219],{"class":39,"line":40},[37,132218,131072],{"class":2035},[37,132220,15644],{"class":54},[37,132222,132223,132225,132227,132229],{"class":39,"line":47},[37,132224,131079],{"class":82},[37,132226,51505],{"class":54},[37,132228,23808],{"class":82},[37,132230,1364],{"class":54},[37,132232,132233],{"class":39,"line":58},[37,132234,1637],{"class":54},[37,132236,132237,132239],{"class":39,"line":64},[37,132238,131094],{"class":2035},[37,132240,15644],{"class":54},[37,132242,132243,132245,132247,132249],{"class":39,"line":76},[37,132244,131079],{"class":82},[37,132246,51505],{"class":54},[37,132248,72590],{"class":82},[37,132250,1364],{"class":54},[37,132252,132253],{"class":39,"line":92},[37,132254,1637],{"class":54},[342,132256,132257,132265],{},[345,132258,132259],{},[348,132260,132261,132263],{},[351,132262,127063],{"align":23808},[351,132264,27562],{"align":23808},[389,132266,132267,132274,132281],{},[348,132268,132269,132271],{},[394,132270,54805],{"align":23808},[394,132272,132273],{"align":23808},"元素不浮动（默认值）",[348,132275,132276,132278],{},[394,132277,23808],{"align":23808},[394,132279,132280],{"align":23808},"元素向左浮动",[348,132282,132283,132285],{},[394,132284,72590],{"align":23808},[394,132286,132287],{"align":23808},"元素向右浮动",[14,132289,132290],{},"浮动重点：",[1210,132292,132293,132296,132299,132302,132305],{},[161,132294,132295],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[161,132297,132298],{},"浮动的元素会一行内显示并且元素顶部对齐",[161,132300,132301],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[161,132303,132304],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[161,132306,132307],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132309,132310],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132312,132313],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[27,132315,132316],{"className":126599,"code":131065,"language":126601,"meta":32,"style":32},[34,132317,132318,132324,132334,132338,132344,132354],{"__ignoreMap":32},[37,132319,132320,132322],{"class":39,"line":40},[37,132321,131072],{"class":2035},[37,132323,15644],{"class":54},[37,132325,132326,132328,132330,132332],{"class":39,"line":47},[37,132327,131079],{"class":82},[37,132329,51505],{"class":54},[37,132331,23808],{"class":82},[37,132333,1364],{"class":54},[37,132335,132336],{"class":39,"line":58},[37,132337,1637],{"class":54},[37,132339,132340,132342],{"class":39,"line":64},[37,132341,131094],{"class":2035},[37,132343,15644],{"class":54},[37,132345,132346,132348,132350,132352],{"class":39,"line":76},[37,132347,131079],{"class":82},[37,132349,51505],{"class":54},[37,132351,72590],{"class":82},[37,132353,1364],{"class":54},[37,132355,132356],{"class":39,"line":92},[37,132357,1637],{"class":54},[175,132359,132361],{"id":132360},"_1113-定位","11.1.3 定位",[22070,132363,132365],{"id":132364},"_11131-使用场景","11.1.3.1 使用场景",[14,132367,132368],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132370,132371],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22070,132373,132375],{"id":132374},"_11132-定位组成","11.1.3.2 定位组成",[14,132377,132378],{},"定位 = 定位模式 + 边偏移",[158,132380,132381],{},[161,132382,132383,132386,132387],{},[354,132384,132385],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[354,132388,132389],{},"定位模式",[27,132391,132393],{"className":126599,"code":132392,"language":126601,"meta":32,"style":32},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[34,132394,132395,132401,132415,132432,132449],{"__ignoreMap":32},[37,132396,132397,132399],{"class":39,"line":40},[37,132398,130447],{"class":2035},[37,132400,15644],{"class":54},[37,132402,132403,132406,132408,132410,132412],{"class":39,"line":47},[37,132404,132405],{"class":82},"  position",[37,132407,51505],{"class":54},[37,132409,54832],{"class":82},[37,132411,130462],{"class":54},[37,132413,132414],{"class":43},"\u002F* 定位模式 *\u002F\n",[37,132416,132417,132420,132422,132424,132426,132429],{"class":39,"line":58},[37,132418,132419],{"class":82},"  top",[37,132421,51505],{"class":54},[37,132423,650],{"class":82},[37,132425,51560],{"class":50},[37,132427,132428],{"class":54},";           ",[37,132430,132431],{"class":43},"\u002F* 边偏移：上 *\u002F\n",[37,132433,132434,132437,132439,132441,132443,132446],{"class":39,"line":64},[37,132435,132436],{"class":82},"  left",[37,132438,51505],{"class":54},[37,132440,903],{"class":82},[37,132442,51560],{"class":50},[37,132444,132445],{"class":54},";          ",[37,132447,132448],{"class":43},"\u002F* 边偏移：左 *\u002F\n",[37,132450,132451],{"class":39,"line":76},[37,132452,1637],{"class":54},[342,132454,132455,132464],{},[345,132456,132457],{},[348,132458,132459,132461],{},[351,132460,357],{"align":23808},[351,132462,132463],{"align":23808},"语义",[389,132465,132466,132473,132480,132487],{},[348,132467,132468,132470],{},[394,132469,132052],{"align":23808},[394,132471,132472],{"align":23808},"静态定位",[348,132474,132475,132477],{},[394,132476,54832],{"align":23808},[394,132478,132479],{"align":23808},"相对定位",[348,132481,132482,132484],{},[394,132483,54899],{"align":23808},[394,132485,132486],{"align":23808},"绝对定位",[348,132488,132489,132491],{},[394,132490,86301],{"align":23808},[394,132492,132493],{"align":23808},"固定定位",[14,132495,132496],{},"（1）静态定位：",[1210,132498,132499,132510],{},[161,132500,132501,132502,132505,132506,132509],{},"静态定位是元素的 ",[354,132503,132504],{},"默认定位方式"," ， ",[354,132507,132508],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[161,132511,5253],{},[27,132513,132514],{"className":126599,"code":132392,"language":126601,"meta":32,"style":32},[34,132515,132516,132522,132534,132548,132562],{"__ignoreMap":32},[37,132517,132518,132520],{"class":39,"line":40},[37,132519,130447],{"class":2035},[37,132521,15644],{"class":54},[37,132523,132524,132526,132528,132530,132532],{"class":39,"line":47},[37,132525,132405],{"class":82},[37,132527,51505],{"class":54},[37,132529,54832],{"class":82},[37,132531,130462],{"class":54},[37,132533,132414],{"class":43},[37,132535,132536,132538,132540,132542,132544,132546],{"class":39,"line":58},[37,132537,132419],{"class":82},[37,132539,51505],{"class":54},[37,132541,650],{"class":82},[37,132543,51560],{"class":50},[37,132545,132428],{"class":54},[37,132547,132431],{"class":43},[37,132549,132550,132552,132554,132556,132558,132560],{"class":39,"line":64},[37,132551,132436],{"class":82},[37,132553,51505],{"class":54},[37,132555,903],{"class":82},[37,132557,51560],{"class":50},[37,132559,132445],{"class":54},[37,132561,132448],{"class":43},[37,132563,132564],{"class":39,"line":76},[37,132565,1637],{"class":54},[1210,132567,132568,132571],{},[161,132569,132570],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[161,132572,132573],{},"静态定位在布局时我们几乎不用的",[14,132575,132576],{},"（2）相对定位",[1210,132578,132579,132586],{},[161,132580,132581,132582,132585],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[354,132583,132584],{},"原来的位置"," 来说的（自恋型）",[161,132587,5253],{},[27,132589,132590],{"className":126599,"code":132392,"language":126601,"meta":32,"style":32},[34,132591,132592,132598,132610,132624,132638],{"__ignoreMap":32},[37,132593,132594,132596],{"class":39,"line":40},[37,132595,130447],{"class":2035},[37,132597,15644],{"class":54},[37,132599,132600,132602,132604,132606,132608],{"class":39,"line":47},[37,132601,132405],{"class":82},[37,132603,51505],{"class":54},[37,132605,54832],{"class":82},[37,132607,130462],{"class":54},[37,132609,132414],{"class":43},[37,132611,132612,132614,132616,132618,132620,132622],{"class":39,"line":58},[37,132613,132419],{"class":82},[37,132615,51505],{"class":54},[37,132617,650],{"class":82},[37,132619,51560],{"class":50},[37,132621,132428],{"class":54},[37,132623,132431],{"class":43},[37,132625,132626,132628,132630,132632,132634,132636],{"class":39,"line":64},[37,132627,132436],{"class":82},[37,132629,51505],{"class":54},[37,132631,903],{"class":82},[37,132633,51560],{"class":50},[37,132635,132445],{"class":54},[37,132637,132448],{"class":43},[37,132639,132640],{"class":39,"line":76},[37,132641,1637],{"class":54},[1210,132643,132644],{},[161,132645,132646,132647,132649,132650,132652,132653,132656,132657,132660,132661,132663,132664,132667],{},"相对定位的特点：",[53784,132648],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53784,132651],{},"  ② ",[354,132654,132655],{},"原来"," 在标准流的 ",[354,132658,132659],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53784,132662],{},"  ③因此， ",[354,132665,132666],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,132669,132670],{},"（3）绝对定位",[1210,132672,132673,132682],{},[161,132674,132675,132677,132678,132681],{},[354,132676,132486],{}," 是元素在移动位置的时候，是相对于它 ",[354,132679,132680],{},"祖先元素"," 来说的（拼爹型）",[161,132683,5253],{},[27,132685,132686],{"className":126599,"code":132392,"language":126601,"meta":32,"style":32},[34,132687,132688,132694,132706,132720,132734],{"__ignoreMap":32},[37,132689,132690,132692],{"class":39,"line":40},[37,132691,130447],{"class":2035},[37,132693,15644],{"class":54},[37,132695,132696,132698,132700,132702,132704],{"class":39,"line":47},[37,132697,132405],{"class":82},[37,132699,51505],{"class":54},[37,132701,54832],{"class":82},[37,132703,130462],{"class":54},[37,132705,132414],{"class":43},[37,132707,132708,132710,132712,132714,132716,132718],{"class":39,"line":58},[37,132709,132419],{"class":82},[37,132711,51505],{"class":54},[37,132713,650],{"class":82},[37,132715,51560],{"class":50},[37,132717,132428],{"class":54},[37,132719,132431],{"class":43},[37,132721,132722,132724,132726,132728,132730,132732],{"class":39,"line":64},[37,132723,132436],{"class":82},[37,132725,51505],{"class":54},[37,132727,903],{"class":82},[37,132729,51560],{"class":50},[37,132731,132445],{"class":54},[37,132733,132448],{"class":43},[37,132735,132736],{"class":39,"line":76},[37,132737,1637],{"class":54},[1210,132739,132740,132755,132764,132767],{},[161,132741,132742,132743,132745,132746,132748,132749,132751,132752,132754],{},"绝对定位的特点：",[53784,132744],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53784,132747],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53784,132750],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53784,132753],{},"  (4)固定定位",[161,132756,132757,132759,132760,132763],{},[354,132758,132493],{}," 是元素 ",[354,132761,132762],{},"固定于浏览器可视区的位置"," 。（认死理型）",[161,132765,132766],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[161,132768,132769],{},"语法:",[27,132771,132772],{"className":126599,"code":132392,"language":126601,"meta":32,"style":32},[34,132773,132774,132780,132792,132806,132820],{"__ignoreMap":32},[37,132775,132776,132778],{"class":39,"line":40},[37,132777,130447],{"class":2035},[37,132779,15644],{"class":54},[37,132781,132782,132784,132786,132788,132790],{"class":39,"line":47},[37,132783,132405],{"class":82},[37,132785,51505],{"class":54},[37,132787,54832],{"class":82},[37,132789,130462],{"class":54},[37,132791,132414],{"class":43},[37,132793,132794,132796,132798,132800,132802,132804],{"class":39,"line":58},[37,132795,132419],{"class":82},[37,132797,51505],{"class":54},[37,132799,650],{"class":82},[37,132801,51560],{"class":50},[37,132803,132428],{"class":54},[37,132805,132431],{"class":43},[37,132807,132808,132810,132812,132814,132816,132818],{"class":39,"line":64},[37,132809,132436],{"class":82},[37,132811,51505],{"class":54},[37,132813,903],{"class":82},[37,132815,51560],{"class":50},[37,132817,132445],{"class":54},[37,132819,132448],{"class":43},[37,132821,132822],{"class":39,"line":76},[37,132823,1637],{"class":54},[1210,132825,132826,132835],{},[161,132827,132828,132829,132831,132832,132834],{},"特点:",[53784,132830],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53784,132833],{},"  ②固定定位不再占有原先的位置,完全脱标",[161,132836,132837,132838,132840,132841,132843,132844,132846],{},"固定在版心位置的方法:",[53784,132839],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53784,132842],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53784,132845],{},"  实例：",[27,132848,132849],{"className":126599,"code":132392,"language":126601,"meta":32,"style":32},[34,132850,132851,132857,132869,132883,132897],{"__ignoreMap":32},[37,132852,132853,132855],{"class":39,"line":40},[37,132854,130447],{"class":2035},[37,132856,15644],{"class":54},[37,132858,132859,132861,132863,132865,132867],{"class":39,"line":47},[37,132860,132405],{"class":82},[37,132862,51505],{"class":54},[37,132864,54832],{"class":82},[37,132866,130462],{"class":54},[37,132868,132414],{"class":43},[37,132870,132871,132873,132875,132877,132879,132881],{"class":39,"line":58},[37,132872,132419],{"class":82},[37,132874,51505],{"class":54},[37,132876,650],{"class":82},[37,132878,51560],{"class":50},[37,132880,132428],{"class":54},[37,132882,132431],{"class":43},[37,132884,132885,132887,132889,132891,132893,132895],{"class":39,"line":64},[37,132886,132436],{"class":82},[37,132888,51505],{"class":54},[37,132890,903],{"class":82},[37,132892,51560],{"class":50},[37,132894,132445],{"class":54},[37,132896,132448],{"class":43},[37,132898,132899],{"class":39,"line":76},[37,132900,1637],{"class":54},[119,132902],{"style":126455,"src":132903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,132905,132906],{},"(5)粘性定位",[1210,132908,132909,132912],{},[161,132910,132911],{},"粘性定位可以被认为是相对定位和固定定位的混合",[161,132913,5253],{},[27,132915,132916],{"className":126599,"code":132392,"language":126601,"meta":32,"style":32},[34,132917,132918,132924,132936,132950,132964],{"__ignoreMap":32},[37,132919,132920,132922],{"class":39,"line":40},[37,132921,130447],{"class":2035},[37,132923,15644],{"class":54},[37,132925,132926,132928,132930,132932,132934],{"class":39,"line":47},[37,132927,132405],{"class":82},[37,132929,51505],{"class":54},[37,132931,54832],{"class":82},[37,132933,130462],{"class":54},[37,132935,132414],{"class":43},[37,132937,132938,132940,132942,132944,132946,132948],{"class":39,"line":58},[37,132939,132419],{"class":82},[37,132941,51505],{"class":54},[37,132943,650],{"class":82},[37,132945,51560],{"class":50},[37,132947,132428],{"class":54},[37,132949,132431],{"class":43},[37,132951,132952,132954,132956,132958,132960,132962],{"class":39,"line":64},[37,132953,132436],{"class":82},[37,132955,51505],{"class":54},[37,132957,903],{"class":82},[37,132959,51560],{"class":50},[37,132961,132445],{"class":54},[37,132963,132448],{"class":43},[37,132965,132966],{"class":39,"line":76},[37,132967,1637],{"class":54},[1210,132969,132970],{},[161,132971,132972,132973,132975,132976,132978,132979,132981,132982,132985,132986,132988],{},"粘性定位的特点：",[53784,132974],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53784,132977],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53784,132980],{},"  ③必须添加 top 、left、right、bottom ",[354,132983,132984],{},"其中一个"," 才有效",[53784,132987],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[27,132990,132991],{"className":126599,"code":132392,"language":126601,"meta":32,"style":32},[34,132992,132993,132999,133011,133025,133039],{"__ignoreMap":32},[37,132994,132995,132997],{"class":39,"line":40},[37,132996,130447],{"class":2035},[37,132998,15644],{"class":54},[37,133000,133001,133003,133005,133007,133009],{"class":39,"line":47},[37,133002,132405],{"class":82},[37,133004,51505],{"class":54},[37,133006,54832],{"class":82},[37,133008,130462],{"class":54},[37,133010,132414],{"class":43},[37,133012,133013,133015,133017,133019,133021,133023],{"class":39,"line":58},[37,133014,132419],{"class":82},[37,133016,51505],{"class":54},[37,133018,650],{"class":82},[37,133020,51560],{"class":50},[37,133022,132428],{"class":54},[37,133024,132431],{"class":43},[37,133026,133027,133029,133031,133033,133035,133037],{"class":39,"line":64},[37,133028,132436],{"class":82},[37,133030,51505],{"class":54},[37,133032,903],{"class":82},[37,133034,51560],{"class":50},[37,133036,132445],{"class":54},[37,133038,132448],{"class":43},[37,133040,133041],{"class":39,"line":76},[37,133042,1637],{"class":54},[119,133044],{"style":126455,"src":133045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,133047,133048],{},"(6)总结",[342,133050,133051,133066],{},[345,133052,133053],{},[348,133054,133055,133057,133060,133063],{},[351,133056,132389],{"align":23808},[351,133058,133059],{"align":23808},"是否脱标",[351,133061,133062],{"align":23808},"移动位置",[351,133064,133065],{"align":23808},"是否常用",[389,133067,133068,133081,133095,133109,133122],{},[348,133069,133070,133073,133075,133078],{},[394,133071,133072],{"align":23808},"Static 静态定位",[394,133074,104725],{"align":23808},[394,133076,133077],{"align":23808},"不能使用边偏移",[394,133079,133080],{"align":23808},"很少",[348,133082,133083,133086,133089,133092],{},[394,133084,133085],{"align":23808},"Relative 相对定位",[394,133087,133088],{"align":23808},"否(占有位置)",[394,133090,133091],{"align":23808},"相对于自身位置移动",[394,133093,133094],{"align":23808},"基本单独使用",[348,133096,133097,133100,133103,133106],{},[394,133098,133099],{"align":23808},"Absolute 绝对定位",[394,133101,133102],{"align":23808},"是(不占有位置)",[394,133104,133105],{"align":23808},"带有定位的父级",[394,133107,133108],{"align":23808},"要和定位父级元素搭配使用",[348,133110,133111,133114,133116,133119],{},[394,133112,133113],{"align":23808},"Fixed 固定定位",[394,133115,133102],{"align":23808},[394,133117,133118],{"align":23808},"浏览器可视区",[394,133120,133121],{"align":23808},"单独使用,不需要父级",[348,133123,133124,133127,133129,133131],{},[394,133125,133126],{"align":23808},"Sticky 粘性定位",[394,133128,133088],{"align":23808},[394,133130,133118],{"align":23808},[394,133132,133133],{"align":23808},"当前阶段少",[158,133135,133136],{"start":47},[161,133137,133138,133141],{},[354,133139,133140],{},"边偏移"," 则决定了该元素的最终位置",[342,133143,133144,133155],{},[345,133145,133146],{},[348,133147,133148,133151,133153],{},[351,133149,133150],{"align":23808},"边偏移属性",[351,133152,27565],{"align":23808},[351,133154,27562],{"align":23808},[389,133156,133157,133168,133179,133189],{},[348,133158,133159,133162,133165],{},[394,133160,133161],{"align":23808},"top",[394,133163,133164],{"align":23808},"top: 80px;",[394,133166,133167],{"align":23808},"顶端偏移量，定义元素相对于父元素上边线的距离",[348,133169,133170,133173,133176],{},[394,133171,133172],{"align":23808},"bottom",[394,133174,133175],{"align":23808},"bottom: 80px ;",[394,133177,133178],{"align":23808},"底部偏移量，定义元素相对于其父元素下边线的距离",[348,133180,133181,133183,133186],{},[394,133182,23808],{"align":23808},[394,133184,133185],{"align":23808},"left: 80px ;",[394,133187,133188],{"align":23808},"左侧偏移量，定义元素相对于其父元素左边线的距离",[348,133190,133191,133193,133196],{},[394,133192,72590],{"align":23808},[394,133194,133195],{"align":23808},"right: 80px ;",[394,133197,133198],{"align":23808},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1210,133200,133201],{},[161,133202,9097,133203,133205,133206,133208,133209,133211,133212,133215,133216,133218,133219,133221],{},[53784,133204],{},"  ① ",[354,133207,133140],{}," 需要和 ",[354,133210,132389],{}," 联合使用， ",[354,133213,133214],{},"单独使用无效"," ；",[53784,133217],{},"  ②top和bottom不要同时使用",[53784,133220],{},"  ③left和right不要同时使用",[22070,133223,133225],{"id":133224},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133227,133228],{},"子级是绝对定位的话，父级要用相对定位",[1210,133230,133231,133234,133237,133240],{},[161,133232,133233],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[161,133235,133236],{},"父盒子需要加定位限制子盒子在父盒子内显示",[161,133238,133239],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[161,133241,133242,133243,133246],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[354,133244,133245],{},"子绝父绝"," 也会遇到",[22070,133248,133250],{"id":133249},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1210,133252,133253,133268],{},[161,133254,133255,133256,133259,133260,133263,133264,133267],{},"在使用 ",[354,133257,133258],{},"定位"," 布局时，可能会 ",[354,133261,133262],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[354,133265,133266],{},"z-index"," 来控制盒子的前后次序 (z轴)",[161,133269,5253],{},[27,133271,133272],{"className":126599,"code":132392,"language":126601,"meta":32,"style":32},[34,133273,133274,133280,133292,133306,133320],{"__ignoreMap":32},[37,133275,133276,133278],{"class":39,"line":40},[37,133277,130447],{"class":2035},[37,133279,15644],{"class":54},[37,133281,133282,133284,133286,133288,133290],{"class":39,"line":47},[37,133283,132405],{"class":82},[37,133285,51505],{"class":54},[37,133287,54832],{"class":82},[37,133289,130462],{"class":54},[37,133291,132414],{"class":43},[37,133293,133294,133296,133298,133300,133302,133304],{"class":39,"line":58},[37,133295,132419],{"class":82},[37,133297,51505],{"class":54},[37,133299,650],{"class":82},[37,133301,51560],{"class":50},[37,133303,132428],{"class":54},[37,133305,132431],{"class":43},[37,133307,133308,133310,133312,133314,133316,133318],{"class":39,"line":64},[37,133309,132436],{"class":82},[37,133311,51505],{"class":54},[37,133313,903],{"class":82},[37,133315,51560],{"class":50},[37,133317,132445],{"class":54},[37,133319,132448],{"class":43},[37,133321,133322],{"class":39,"line":76},[37,133323,1637],{"class":54},[1210,133325,133326],{},[161,133327,133328,133329,133205,133331,133333,133334,127762,133337,82607,133340,133342,133343,133345,133346,133349,133350,133215,133353,133355,133356,133359,133361],{},"z-index的特性",[53784,133330],{},[354,133332,127063],{}," ： ",[354,133335,133336],{},"正整数",[354,133338,133339],{},"负整数",[354,133341,396],{}," ，默认值是 0，数值越大，盒子越靠上；",[53784,133344],{},"  ②如果 ",[354,133347,133348],{},"属性值相同"," ，则按照书写顺序， ",[354,133351,133352],{},"后来居上",[53784,133354],{},"  ③数字后面 ",[354,133357,133358],{},"不能加单位",[53784,133360],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22070,133363,133365],{"id":133364},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133367,133368],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133370,133371],{},"方法:",[1210,133373,133374,133384],{},[161,133375,133376,133377,133380,133381],{},"left: 50%; 让 ",[354,133378,133379],{},"盒子的左侧"," 移动到 ",[354,133382,133383],{},"父级元素的水平中心位置",[161,133385,133386,133387,133390,133391],{},"margin-left: -100px; 让盒子 ",[354,133388,133389],{},"向左"," 移动 ",[354,133392,133393],{},"自身宽度的一半",[22070,133395,133397],{"id":133396},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[158,133399,133400,133403],{},[161,133401,133402],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[161,133404,133405],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133407,133408],{},"也就是说绝对定位和固定定位和浮动类似",[158,133410,133411],{"start":58},[161,133412,133413],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1210,133415,133416,133419,133422],{},[161,133417,133418],{},"可以用inline-block 转换为行内块",[161,133420,133421],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[161,133423,133424],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,133426,133427],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22070,133429,133431],{"id":133430},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[158,133433,133434,133437,133440,133443],{},[161,133435,133436],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[161,133438,133439],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[161,133441,133442],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[161,133444,133445],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[27,133447,133448],{"className":126599,"code":131065,"language":126601,"meta":32,"style":32},[34,133449,133450,133456,133466,133470,133476,133486],{"__ignoreMap":32},[37,133451,133452,133454],{"class":39,"line":40},[37,133453,131072],{"class":2035},[37,133455,15644],{"class":54},[37,133457,133458,133460,133462,133464],{"class":39,"line":47},[37,133459,131079],{"class":82},[37,133461,51505],{"class":54},[37,133463,23808],{"class":82},[37,133465,1364],{"class":54},[37,133467,133468],{"class":39,"line":58},[37,133469,1637],{"class":54},[37,133471,133472,133474],{"class":39,"line":64},[37,133473,131094],{"class":2035},[37,133475,15644],{"class":54},[37,133477,133478,133480,133482,133484],{"class":39,"line":76},[37,133479,131079],{"class":82},[37,133481,51505],{"class":54},[37,133483,72590],{"class":82},[37,133485,1364],{"class":54},[37,133487,133488],{"class":39,"line":92},[37,133489,1637],{"class":54},[119,133491],{"style":126455,"src":133492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22070,133494,133496],{"id":133495},"_11138-轮播图","11.1.3.8 轮播图",[119,133498],{"style":126455,"src":133499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[158,133501,133502],{},[161,133503,133504],{},"制作顺序:",[1210,133506,133507,133510,133513,133522],{},[161,133508,133509],{},"大盒子我们类名为： tb-promo 淘宝广告",[161,133511,133512],{},"里面先放一张图片",[161,133514,133515,133516,133518,133519,133521],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53784,133517],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53784,133520],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[161,133523,133524,133525,133527,133528,133530],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53784,133526],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53784,133529],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[158,133532,133533],{"start":47},[161,133534,133535],{},"代码模块",[27,133537,133539],{"className":126599,"code":133538,"language":126601,"meta":32,"style":32},"\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",[34,133540,133541,133546,133553,133563,133573,133583,133587,133592,133599,133609],{"__ignoreMap":32},[37,133542,133543],{"class":39,"line":40},[37,133544,133545],{"class":43},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[37,133547,133548,133551],{"class":39,"line":47},[37,133549,133550],{"class":2035},".son",[37,133552,15644],{"class":54},[37,133554,133555,133557,133559,133561],{"class":39,"line":58},[37,133556,132405],{"class":82},[37,133558,51505],{"class":54},[37,133560,54899],{"class":82},[37,133562,1364],{"class":54},[37,133564,133565,133567,133569,133571],{"class":39,"line":64},[37,133566,132419],{"class":82},[37,133568,51505],{"class":54},[37,133570,396],{"class":82},[37,133572,1364],{"class":54},[37,133574,133575,133577,133579,133581],{"class":39,"line":76},[37,133576,132436],{"class":82},[37,133578,51505],{"class":54},[37,133580,396],{"class":82},[37,133582,1364],{"class":54},[37,133584,133585],{"class":39,"line":92},[37,133586,1637],{"class":54},[37,133588,133589],{"class":39,"line":97},[37,133590,133591],{"class":43},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[37,133593,133594,133597],{"class":39,"line":107},[37,133595,133596],{"class":2035},".father",[37,133598,15644],{"class":54},[37,133600,133601,133603,133605,133607],{"class":39,"line":1390},[37,133602,132405],{"class":82},[37,133604,51505],{"class":54},[37,133606,54832],{"class":82},[37,133608,1364],{"class":54},[37,133610,133611],{"class":39,"line":1402},[37,133612,1637],{"class":54},[14,133614,133615],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[175,133617,133619],{"id":133618},"_1114-定位数值的移动","11.1.4 定位数值的移动",[119,133621],{"style":126455,"src":133622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,133624,133625],{},"✨ 黄金口诀：",[14,133627,133628],{},"\"TOP正下负上，LEFT正右负左\"",[14,133630,133631],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,133633,133634],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,133636,133637],{},"✨ 简单记：",[14,133639,133640],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[123,133642,133643],{},"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":32,"searchDepth":47,"depth":47,"links":133645},[133646],{"id":132173,"depth":47,"text":132174,"children":133647},[133648,133649,133650,133651],{"id":132177,"depth":58,"text":132178},{"id":132192,"depth":58,"text":132193},{"id":132360,"depth":58,"text":132361},{"id":133618,"depth":58,"text":133619},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132165,"description":128},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133658,"title":133659,"body":133660,"description":128,"extension":129,"meta":135083,"navigation":131,"path":135084,"seo":135085,"stem":135086,"__hash__":135087},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133661,"toc":135062},[133662,133665,133669,133677,133681,133686,133694,133706,133710,133715,133723,133734,133738,133743,133784,133792,133796,133799,133802,133805,133899,133902,133996,133999,134093,134096,134099,134134,134137,134140,134170,134173,134176,134179,134182,134185,134188,134191,134261,134264,134268,134272,134313,134317,134323,134326,134329,134333,134336,134339,134342,134423,134426,134429,134433,134437,134440,134443,134446,134449,134452,134458,134467,134471,134490,134494,134504,134507,134510,134513,134516,134519,134522,134525,134528,134537,134541,134550,134553,134558,134611,134616,134782,134785,134788,134793,134796,134799,134802,134805,134810,134958,134961,134964,134969,134972,134977,135011,135014,135017,135021,135024,135031,135034,135037,135040,135043,135046,135049,135052,135056,135059],[10,133663,133659],{"id":133664},"_12-显示隐藏与图形资源",[146,133666,133668],{"id":133667},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1210,133670,133671,133674],{},[161,133672,133673],{},"目的:让一个元素在页面中消失或者显示出来",[161,133675,133676],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[175,133678,133680],{"id":133679},"_1211-display-显示","12.1.1 display 显示",[158,133682,133683],{},[161,133684,133685],{},"display 设置或检索对象是否及如何显示",[1210,133687,133688,133691],{},[161,133689,133690],{},"display: none;隐藏对象",[161,133692,133693],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[158,133695,133696,133703],{"start":47},[161,133697,133698,133699,133702],{},"特点： display 隐藏元素后， ",[354,133700,133701],{},"不再占"," 有原来的位置",[161,133704,133705],{},"在js中使用非常的广泛",[175,133707,133709],{"id":133708},"_1212-visibility可见性","12.1.2 visibility可见性",[158,133711,133712],{},[161,133713,133714],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1210,133716,133717,133720],{},[161,133718,133719],{},"visibility： visible；元素可见",[161,133721,133722],{},"visibility：hidden；元素隐藏",[158,133724,133725,133728,133731],{"start":47},[161,133726,133727],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[161,133729,133730],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[161,133732,133733],{},"隐藏后继续占有原有位置",[175,133735,133737],{"id":133736},"_1213-overflow溢出","12.1.3 overflow溢出",[1210,133739,133740],{},[161,133741,133742],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[342,133744,133745,133753],{},[345,133746,133747],{},[348,133748,133749,133751],{},[351,133750,127063],{"align":23808},[351,133752,27562],{"align":23808},[389,133754,133755,133763,133770,133777],{},[348,133756,133757,133760],{},[394,133758,133759],{"align":23808},"visible",[394,133761,133762],{"align":23808},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[348,133764,133765,133767],{},[394,133766,61782],{"align":23808},[394,133768,133769],{"align":23808},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[348,133771,133772,133774],{},[394,133773,129019],{"align":23808},[394,133775,133776],{"align":23808},"不管超出内容否，总是显示滚动条",[348,133778,133779,133781],{},[394,133780,72731],{"align":23808},[394,133782,133783],{"align":23808},"超出自动显示滚动条，不超出不显示滚动条",[1210,133785,133786,133789],{},[161,133787,133788],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[161,133790,133791],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[175,133793,133795],{"id":133794},"_1214-案例收获","12.1.4 案例收获",[119,133797],{"style":126455,"src":133798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,133800,133801],{},"问题：没做出来动态效果，使用hover没实现",[14,133803,133804],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[27,133806,133807],{"className":126599,"code":132031,"language":126601,"meta":32,"style":32},[34,133808,133809,133813,133827,133831,133845,133849,133863,133867,133881,133885],{"__ignoreMap":32},[37,133810,133811],{"class":39,"line":40},[37,133812,132038],{"class":43},[37,133814,133815,133817,133819,133821,133823,133825],{"class":39,"line":47},[37,133816,132043],{"class":2035},[37,133818,79875],{"class":54},[37,133820,128959],{"class":82},[37,133822,51505],{"class":54},[37,133824,132052],{"class":82},[37,133826,129529],{"class":54},[37,133828,133829],{"class":39,"line":58},[37,133830,132059],{"class":43},[37,133832,133833,133835,133837,133839,133841,133843],{"class":39,"line":64},[37,133834,132064],{"class":2035},[37,133836,79875],{"class":54},[37,133838,128959],{"class":82},[37,133840,51505],{"class":54},[37,133842,54832],{"class":82},[37,133844,129529],{"class":54},[37,133846,133847],{"class":39,"line":76},[37,133848,132079],{"class":43},[37,133850,133851,133853,133855,133857,133859,133861],{"class":39,"line":92},[37,133852,132084],{"class":2035},[37,133854,79875],{"class":54},[37,133856,128959],{"class":82},[37,133858,51505],{"class":54},[37,133860,54899],{"class":82},[37,133862,129529],{"class":54},[37,133864,133865],{"class":39,"line":97},[37,133866,132099],{"class":43},[37,133868,133869,133871,133873,133875,133877,133879],{"class":39,"line":107},[37,133870,132104],{"class":2035},[37,133872,79875],{"class":54},[37,133874,128959],{"class":82},[37,133876,51505],{"class":54},[37,133878,86301],{"class":82},[37,133880,129529],{"class":54},[37,133882,133883],{"class":39,"line":1390},[37,133884,132119],{"class":43},[37,133886,133887,133889,133891,133893,133895,133897],{"class":39,"line":1402},[37,133888,132124],{"class":2035},[37,133890,79875],{"class":54},[37,133892,128959],{"class":82},[37,133894,51505],{"class":54},[37,133896,132133],{"class":82},[37,133898,129529],{"class":54},[14,133900,133901],{},"完整代码：",[27,133903,133904],{"className":126599,"code":132031,"language":126601,"meta":32,"style":32},[34,133905,133906,133910,133924,133928,133942,133946,133960,133964,133978,133982],{"__ignoreMap":32},[37,133907,133908],{"class":39,"line":40},[37,133909,132038],{"class":43},[37,133911,133912,133914,133916,133918,133920,133922],{"class":39,"line":47},[37,133913,132043],{"class":2035},[37,133915,79875],{"class":54},[37,133917,128959],{"class":82},[37,133919,51505],{"class":54},[37,133921,132052],{"class":82},[37,133923,129529],{"class":54},[37,133925,133926],{"class":39,"line":58},[37,133927,132059],{"class":43},[37,133929,133930,133932,133934,133936,133938,133940],{"class":39,"line":64},[37,133931,132064],{"class":2035},[37,133933,79875],{"class":54},[37,133935,128959],{"class":82},[37,133937,51505],{"class":54},[37,133939,54832],{"class":82},[37,133941,129529],{"class":54},[37,133943,133944],{"class":39,"line":76},[37,133945,132079],{"class":43},[37,133947,133948,133950,133952,133954,133956,133958],{"class":39,"line":92},[37,133949,132084],{"class":2035},[37,133951,79875],{"class":54},[37,133953,128959],{"class":82},[37,133955,51505],{"class":54},[37,133957,54899],{"class":82},[37,133959,129529],{"class":54},[37,133961,133962],{"class":39,"line":97},[37,133963,132099],{"class":43},[37,133965,133966,133968,133970,133972,133974,133976],{"class":39,"line":107},[37,133967,132104],{"class":2035},[37,133969,79875],{"class":54},[37,133971,128959],{"class":82},[37,133973,51505],{"class":54},[37,133975,86301],{"class":82},[37,133977,129529],{"class":54},[37,133979,133980],{"class":39,"line":1390},[37,133981,132119],{"class":43},[37,133983,133984,133986,133988,133990,133992,133994],{"class":39,"line":1402},[37,133985,132124],{"class":2035},[37,133987,79875],{"class":54},[37,133989,128959],{"class":82},[37,133991,51505],{"class":54},[37,133993,132133],{"class":82},[37,133995,129529],{"class":54},[14,133997,133998],{},"分布思路重点详解：",[27,134000,134001],{"className":126599,"code":132031,"language":126601,"meta":32,"style":32},[34,134002,134003,134007,134021,134025,134039,134043,134057,134061,134075,134079],{"__ignoreMap":32},[37,134004,134005],{"class":39,"line":40},[37,134006,132038],{"class":43},[37,134008,134009,134011,134013,134015,134017,134019],{"class":39,"line":47},[37,134010,132043],{"class":2035},[37,134012,79875],{"class":54},[37,134014,128959],{"class":82},[37,134016,51505],{"class":54},[37,134018,132052],{"class":82},[37,134020,129529],{"class":54},[37,134022,134023],{"class":39,"line":58},[37,134024,132059],{"class":43},[37,134026,134027,134029,134031,134033,134035,134037],{"class":39,"line":64},[37,134028,132064],{"class":2035},[37,134030,79875],{"class":54},[37,134032,128959],{"class":82},[37,134034,51505],{"class":54},[37,134036,54832],{"class":82},[37,134038,129529],{"class":54},[37,134040,134041],{"class":39,"line":76},[37,134042,132079],{"class":43},[37,134044,134045,134047,134049,134051,134053,134055],{"class":39,"line":92},[37,134046,132084],{"class":2035},[37,134048,79875],{"class":54},[37,134050,128959],{"class":82},[37,134052,51505],{"class":54},[37,134054,54899],{"class":82},[37,134056,129529],{"class":54},[37,134058,134059],{"class":39,"line":97},[37,134060,132099],{"class":43},[37,134062,134063,134065,134067,134069,134071,134073],{"class":39,"line":107},[37,134064,132104],{"class":2035},[37,134066,79875],{"class":54},[37,134068,128959],{"class":82},[37,134070,51505],{"class":54},[37,134072,86301],{"class":82},[37,134074,129529],{"class":54},[37,134076,134077],{"class":39,"line":1390},[37,134078,132119],{"class":43},[37,134080,134081,134083,134085,134087,134089,134091],{"class":39,"line":1402},[37,134082,132124],{"class":2035},[37,134084,79875],{"class":54},[37,134086,128959],{"class":82},[37,134088,51505],{"class":54},[37,134090,132133],{"class":82},[37,134092,129529],{"class":54},[119,134094],{"style":126455,"src":134095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134097,134098],{},"图片太大，盒子太小，此时需要修改图片的大小",[27,134100,134102],{"className":127346,"code":134101,"language":127348,"meta":32,"style":32},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[34,134103,134104],{"__ignoreMap":32},[37,134105,134106,134108,134110,134112,134114,134117,134119,134121,134124,134127,134129,134132],{"class":39,"line":40},[37,134107,1113],{"class":54},[37,134109,119],{"class":51368},[37,134111,55307],{"class":2035},[37,134113,70],{"class":54},[37,134115,134116],{"class":309},"\"images\u002Fpic.jpg\"",[37,134118,55315],{"class":2035},[37,134120,70],{"class":54},[37,134122,134123],{"class":309},"\"描述文字\"",[37,134125,134126],{"class":2035}," title",[37,134128,70],{"class":54},[37,134130,134131],{"class":309},"\"悬停提示\"",[37,134133,51375],{"class":54},[119,134135],{"style":126455,"src":134136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134138,134139],{},"制造遮罩层",[27,134141,134142],{"className":127346,"code":134101,"language":127348,"meta":32,"style":32},[34,134143,134144],{"__ignoreMap":32},[37,134145,134146,134148,134150,134152,134154,134156,134158,134160,134162,134164,134166,134168],{"class":39,"line":40},[37,134147,1113],{"class":54},[37,134149,119],{"class":51368},[37,134151,55307],{"class":2035},[37,134153,70],{"class":54},[37,134155,134116],{"class":309},[37,134157,55315],{"class":2035},[37,134159,70],{"class":54},[37,134161,134123],{"class":309},[37,134163,134126],{"class":2035},[37,134165,70],{"class":54},[37,134167,134131],{"class":309},[37,134169,51375],{"class":54},[14,134171,134172],{},"此时是这样的为标准流",[119,134174],{"style":126455,"src":134175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134177,134178],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134180,134181],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134183,134184],{},"让他在中间，用center(background-position)",[14,134186,134187],{},"将需要变的尽可能放到一个盒子中",[14,134189,134190],{},"放大盒子上内部盒子发生变化",[27,134192,134194],{"className":126599,"code":134193,"language":126601,"meta":32,"style":32},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[34,134195,134196,134202,134212,134216,134223,134233,134245,134257],{"__ignoreMap":32},[37,134197,134198,134200],{"class":39,"line":40},[37,134199,127666],{"class":2035},[37,134201,15644],{"class":54},[37,134203,134204,134206,134208,134210],{"class":39,"line":47},[37,134205,132405],{"class":82},[37,134207,51505],{"class":54},[37,134209,54832],{"class":82},[37,134211,1364],{"class":54},[37,134213,134214],{"class":39,"line":58},[37,134215,1637],{"class":54},[37,134217,134218,134221],{"class":39,"line":64},[37,134219,134220],{"class":2035},".child",[37,134222,15644],{"class":54},[37,134224,134225,134227,134229,134231],{"class":39,"line":76},[37,134226,132405],{"class":82},[37,134228,51505],{"class":54},[37,134230,54899],{"class":82},[37,134232,1364],{"class":54},[37,134234,134235,134237,134239,134241,134243],{"class":39,"line":92},[37,134236,132419],{"class":82},[37,134238,51505],{"class":54},[37,134240,859],{"class":82},[37,134242,533],{"class":50},[37,134244,1364],{"class":54},[37,134246,134247,134249,134251,134253,134255],{"class":39,"line":97},[37,134248,132436],{"class":82},[37,134250,51505],{"class":54},[37,134252,859],{"class":82},[37,134254,533],{"class":50},[37,134256,1364],{"class":54},[37,134258,134259],{"class":39,"line":107},[37,134260,1637],{"class":54},[14,134262,134263],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[146,134265,134267],{"id":134266},"_122-精灵图","12.2 精灵图",[175,134269,134271],{"id":134270},"_1221-理解","12.2.1 理解",[158,134273,134274,134292],{},[161,134275,134276,134277,132505,134280,134283,134284,134287,134288,134291],{},"目的： ",[354,134278,134279],{},"为了有效地减少服务器接收和发送请求的次数",[354,134281,134282],{},"提高"," 页面的 ",[354,134285,134286],{},"加载速度"," ，出现了 ",[354,134289,134290],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[161,134293,134294,134295,134297,134298,134300,134301,134303,134304,134306,134307,134309,134310,134312],{},"使用精灵图核心：",[53784,134296],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53784,134299],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53784,134302],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53784,134305],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53784,134308],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53784,134311],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[175,134314,134316],{"id":134315},"_1222-扒图","12.2.2 扒图",[27,134318,134321],{"className":134319,"code":134320,"language":5259},[5257],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[34,134322,134320],{"__ignoreMap":32},[119,134324],{"style":126455,"src":134325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[119,134327],{"style":126455,"src":134328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[175,134330,134332],{"id":134331},"_1223-精灵图的实现","12.2.3 精灵图的实现",[119,134334],{"style":126455,"src":134335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134337,134338],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[119,134340],{"style":126455,"src":134341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[27,134343,134345],{"className":126599,"code":134344,"language":126601,"meta":32,"style":32},"\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",[34,134346,134347,134352,134359,134371,134383,134402,134419],{"__ignoreMap":32},[37,134348,134349],{"class":39,"line":40},[37,134350,134351],{"class":43},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[37,134353,134354,134357],{"class":39,"line":47},[37,134355,134356],{"class":2035},".icon",[37,134358,15644],{"class":54},[37,134360,134361,134363,134365,134367,134369],{"class":39,"line":58},[37,134362,70636],{"class":82},[37,134364,51505],{"class":54},[37,134366,903],{"class":82},[37,134368,51560],{"class":50},[37,134370,1364],{"class":54},[37,134372,134373,134375,134377,134379,134381],{"class":39,"line":64},[37,134374,70856],{"class":82},[37,134376,51505],{"class":54},[37,134378,903],{"class":82},[37,134380,51560],{"class":50},[37,134382,1364],{"class":54},[37,134384,134385,134387,134389,134391,134393,134396,134398,134400],{"class":39,"line":76},[37,134386,70679],{"class":82},[37,134388,51505],{"class":54},[37,134390,61794],{"class":82},[37,134392,208],{"class":54},[37,134394,134395],{"class":5288},"sprites.png",[37,134397,13786],{"class":54},[37,134399,61804],{"class":82},[37,134401,1364],{"class":54},[37,134403,134404,134406,134408,134410,134412,134415,134417],{"class":39,"line":92},[37,134405,128859],{"class":82},[37,134407,51505],{"class":54},[37,134409,51831],{"class":82},[37,134411,51560],{"class":50},[37,134413,134414],{"class":82}," -20",[37,134416,51560],{"class":50},[37,134418,1364],{"class":54},[37,134420,134421],{"class":39,"line":97},[37,134422,1637],{"class":54},[119,134424],{"style":126455,"src":134425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,134427,134428],{},"在前端中坐标轴的正方向是右和下",[146,134430,134432],{"id":134431},"_123-字体图标","12.3 字体图标",[175,134434,134436],{"id":134435},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,134438,134439],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,134441,134442],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,134444,134445],{},"1.图片文件还是比较大的。",[14,134447,134448],{},"2.图片本身放大和缩小会失真。",[14,134450,134451],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,134453,134454,134455,25813],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[354,134456,134457],{},"字体图标 iconfont",[14,134459,134460,134463,134464,28458],{},[354,134461,134462],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[354,134465,134466],{},"展示的是图标，本质属于字体",[175,134468,134470],{"id":134469},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1210,134472,134473,134478,134481,134484,134487],{},[161,134474,134475,134477],{},[354,134476,25949],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[161,134479,134480],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[161,134482,134483],{},"兼容性：几乎支持所有的浏览器，请放心使用",[161,134485,134486],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[161,134488,134489],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[175,134491,134493],{"id":134492},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1210,134495,134496],{},[161,134497,134498,134499],{},"icomoon字体库：",[443,134500,134503],{"href":134501,"rel":134502},"http:\u002F\u002Ficomoon.io\u002F",[23937],"http:\u002F\u002Ficomoon.io",[14,134505,134506],{},"进去之后点icomoon app",[119,134508],{"style":126455,"src":134509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,134511,134512],{},"可以对其编辑：",[119,134514],{"style":126455,"src":134515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,134517,134518],{},"生成字体：",[119,134520],{"style":126455,"src":134521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,134523,134524],{},"下载：",[119,134526],{"style":126455,"src":134527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1210,134529,134530],{},[161,134531,134532,134533],{},"阿里iconfont字体库： ",[443,134534,134535],{"href":134535,"rel":134536},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23937],[175,134538,134540],{"id":134539},"_1234-字体图标的引入","12.3.4 字体图标的引入",[158,134542,134543],{},[161,134544,134545,134546,134549],{},"把下载包里面的 ",[354,134547,134548],{},"fonts"," 文件夹放入页面根目录下",[119,134551],{"style":126455,"src":134552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[158,134554,134555],{"start":47},[161,134556,134557],{},"字体文件格式",[342,134559,134560,134569],{},[345,134561,134562],{},[348,134563,134564,134567],{},[351,134565,134566],{"align":23808},"格式",[351,134568,23812],{"align":23808},[389,134570,134571,134581,134591,134601],{},[348,134572,134573,134578],{},[394,134574,134575],{"align":23808},[354,134576,134577],{},".ttf",[394,134579,134580],{"align":23808},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[348,134582,134583,134588],{},[394,134584,134585],{"align":23808},[354,134586,134587],{},".woff",[394,134589,134590],{"align":23808},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[348,134592,134593,134598],{},[394,134594,134595],{"align":23808},[354,134596,134597],{},".eot",[394,134599,134600],{"align":23808},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[348,134602,134603,134608],{},[394,134604,134605],{"align":23808},[354,134606,134607],{},"svg",[394,134609,134610],{"align":23808},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[158,134612,134613],{"start":58},[161,134614,134615],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[27,134617,134619],{"className":126599,"code":134618,"language":126601,"meta":32,"style":32},"\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",[34,134620,134621,134626,134633,134645,134661,134686,134707,134727,134747,134751,134757,134767,134778],{"__ignoreMap":32},[37,134622,134623],{"class":39,"line":40},[37,134624,134625],{"class":43},"\u002F* 引入字体图标 *\u002F\n",[37,134627,134628,134631],{"class":39,"line":47},[37,134629,134630],{"class":50},"@font-face",[37,134632,15644],{"class":54},[37,134634,134635,134638,134640,134643],{"class":39,"line":58},[37,134636,134637],{"class":82},"  font-family",[37,134639,51505],{"class":54},[37,134641,134642],{"class":309},"'icomoon'",[37,134644,1364],{"class":54},[37,134646,134647,134650,134652,134654,134656,134659],{"class":39,"line":64},[37,134648,134649],{"class":82},"  src",[37,134651,51505],{"class":54},[37,134653,61794],{"class":82},[37,134655,208],{"class":54},[37,134657,134658],{"class":309},"'fonts\u002Ficomoon.eot'",[37,134660,2791],{"class":54},[37,134662,134663,134665,134667,134669,134671,134674,134676,134679,134681,134684],{"class":39,"line":76},[37,134664,134649],{"class":82},[37,134666,51505],{"class":54},[37,134668,61794],{"class":82},[37,134670,208],{"class":54},[37,134672,134673],{"class":309},"'fonts\u002Ficomoon.eot?#iefix'",[37,134675,13786],{"class":54},[37,134677,134678],{"class":82},"format",[37,134680,208],{"class":54},[37,134682,134683],{"class":309},"'embedded-opentype'",[37,134685,38116],{"class":54},[37,134687,134688,134691,134693,134696,134698,134700,134702,134705],{"class":39,"line":92},[37,134689,134690],{"class":82},"       url",[37,134692,208],{"class":54},[37,134694,134695],{"class":309},"'fonts\u002Ficomoon.woff'",[37,134697,13786],{"class":54},[37,134699,134678],{"class":82},[37,134701,208],{"class":54},[37,134703,134704],{"class":309},"'woff'",[37,134706,38116],{"class":54},[37,134708,134709,134711,134713,134716,134718,134720,134722,134725],{"class":39,"line":97},[37,134710,134690],{"class":82},[37,134712,208],{"class":54},[37,134714,134715],{"class":309},"'fonts\u002Ficomoon.ttf'",[37,134717,13786],{"class":54},[37,134719,134678],{"class":82},[37,134721,208],{"class":54},[37,134723,134724],{"class":309},"'truetype'",[37,134726,38116],{"class":54},[37,134728,134729,134731,134733,134736,134738,134740,134742,134745],{"class":39,"line":107},[37,134730,134690],{"class":82},[37,134732,208],{"class":54},[37,134734,134735],{"class":309},"'fonts\u002Ficomoon.svg#icomoon'",[37,134737,13786],{"class":54},[37,134739,134678],{"class":82},[37,134741,208],{"class":54},[37,134743,134744],{"class":309},"'svg'",[37,134746,2791],{"class":54},[37,134748,134749],{"class":39,"line":1390},[37,134750,1637],{"class":54},[37,134752,134753,134755],{"class":39,"line":1402},[37,134754,134356],{"class":2035},[37,134756,15644],{"class":54},[37,134758,134759,134761,134763,134765],{"class":39,"line":1684},[37,134760,134637],{"class":82},[37,134762,51505],{"class":54},[37,134764,134642],{"class":309},[37,134766,1364],{"class":54},[37,134768,134769,134772,134774,134776],{"class":39,"line":1689},[37,134770,134771],{"class":82},"  font-style",[37,134773,51505],{"class":54},[37,134775,63909],{"class":82},[37,134777,1364],{"class":54},[37,134779,134780],{"class":39,"line":1695},[37,134781,1637],{"class":54},[14,134783,134784],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[119,134786],{"style":126455,"src":134787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[158,134789,134790],{"start":64},[161,134791,134792],{},"添加字体",[119,134794],{"style":126455,"src":134795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,134797,134798],{},"复制：",[119,134800],{"style":126455,"src":134801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,134803,134804],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[158,134806,134807],{"start":76},[161,134808,134809],{},"代码展示：",[27,134811,134812],{"className":126599,"code":134618,"language":126601,"meta":32,"style":32},[34,134813,134814,134818,134824,134834,134848,134870,134888,134906,134924,134928,134934,134944,134954],{"__ignoreMap":32},[37,134815,134816],{"class":39,"line":40},[37,134817,134625],{"class":43},[37,134819,134820,134822],{"class":39,"line":47},[37,134821,134630],{"class":50},[37,134823,15644],{"class":54},[37,134825,134826,134828,134830,134832],{"class":39,"line":58},[37,134827,134637],{"class":82},[37,134829,51505],{"class":54},[37,134831,134642],{"class":309},[37,134833,1364],{"class":54},[37,134835,134836,134838,134840,134842,134844,134846],{"class":39,"line":64},[37,134837,134649],{"class":82},[37,134839,51505],{"class":54},[37,134841,61794],{"class":82},[37,134843,208],{"class":54},[37,134845,134658],{"class":309},[37,134847,2791],{"class":54},[37,134849,134850,134852,134854,134856,134858,134860,134862,134864,134866,134868],{"class":39,"line":76},[37,134851,134649],{"class":82},[37,134853,51505],{"class":54},[37,134855,61794],{"class":82},[37,134857,208],{"class":54},[37,134859,134673],{"class":309},[37,134861,13786],{"class":54},[37,134863,134678],{"class":82},[37,134865,208],{"class":54},[37,134867,134683],{"class":309},[37,134869,38116],{"class":54},[37,134871,134872,134874,134876,134878,134880,134882,134884,134886],{"class":39,"line":92},[37,134873,134690],{"class":82},[37,134875,208],{"class":54},[37,134877,134695],{"class":309},[37,134879,13786],{"class":54},[37,134881,134678],{"class":82},[37,134883,208],{"class":54},[37,134885,134704],{"class":309},[37,134887,38116],{"class":54},[37,134889,134890,134892,134894,134896,134898,134900,134902,134904],{"class":39,"line":97},[37,134891,134690],{"class":82},[37,134893,208],{"class":54},[37,134895,134715],{"class":309},[37,134897,13786],{"class":54},[37,134899,134678],{"class":82},[37,134901,208],{"class":54},[37,134903,134724],{"class":309},[37,134905,38116],{"class":54},[37,134907,134908,134910,134912,134914,134916,134918,134920,134922],{"class":39,"line":107},[37,134909,134690],{"class":82},[37,134911,208],{"class":54},[37,134913,134735],{"class":309},[37,134915,13786],{"class":54},[37,134917,134678],{"class":82},[37,134919,208],{"class":54},[37,134921,134744],{"class":309},[37,134923,2791],{"class":54},[37,134925,134926],{"class":39,"line":1390},[37,134927,1637],{"class":54},[37,134929,134930,134932],{"class":39,"line":1402},[37,134931,134356],{"class":2035},[37,134933,15644],{"class":54},[37,134935,134936,134938,134940,134942],{"class":39,"line":1684},[37,134937,134637],{"class":82},[37,134939,51505],{"class":54},[37,134941,134642],{"class":309},[37,134943,1364],{"class":54},[37,134945,134946,134948,134950,134952],{"class":39,"line":1689},[37,134947,134771],{"class":82},[37,134949,51505],{"class":54},[37,134951,63909],{"class":82},[37,134953,1364],{"class":54},[37,134955,134956],{"class":39,"line":1695},[37,134957,1637],{"class":54},[119,134959],{"style":126455,"src":134960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,134962,134963],{},"更加细节展示：",[158,134965,134966],{},[161,134967,134968],{},"html 标签内添加小图标",[119,134970],{"style":126455,"src":134971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[158,134973,134974],{"start":47},[161,134975,134976],{},"给标签定义字体",[27,134978,134979],{"className":127346,"code":130703,"language":127348,"meta":32,"style":32},[34,134980,134981,134985,134999,135003],{"__ignoreMap":32},[37,134982,134983],{"class":39,"line":40},[37,134984,130710],{"class":43},[37,134986,134987,134989,134991,134993,134995,134997],{"class":39,"line":47},[37,134988,1113],{"class":54},[37,134990,51679],{"class":51368},[37,134992,53554],{"class":2035},[37,134994,70],{"class":54},[37,134996,130723],{"class":309},[37,134998,51375],{"class":54},[37,135000,135001],{"class":39,"line":58},[37,135002,130730],{"class":54},[37,135004,135005,135007,135009],{"class":39,"line":64},[37,135006,51853],{"class":54},[37,135008,51679],{"class":51368},[37,135010,51375],{"class":54},[14,135012,135013],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[119,135015],{"style":126455,"src":135016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[175,135018,135020],{"id":135019},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,135022,135023],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,135025,135026,135027,135030],{},"把压缩包里面的 ",[354,135028,135029],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,135032,135033],{},"打开网站，点下方：",[119,135035],{"style":126455,"src":135036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[119,135038],{"style":126455,"src":135039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[119,135041],{"style":126455,"src":135042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,135044,135045],{},"点yes重新加载",[14,135047,135048],{},"然后重复之前的操作就可以实现了",[14,135050,135051],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[175,135053,135055],{"id":135054},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[119,135057],{"style":126455,"src":135058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[123,135060,135061],{},"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":32,"searchDepth":47,"depth":47,"links":135063},[135064,135070,135075],{"id":133667,"depth":47,"text":133668,"children":135065},[135066,135067,135068,135069],{"id":133679,"depth":58,"text":133680},{"id":133708,"depth":58,"text":133709},{"id":133736,"depth":58,"text":133737},{"id":133794,"depth":58,"text":133795},{"id":134266,"depth":47,"text":134267,"children":135071},[135072,135073,135074],{"id":134270,"depth":58,"text":134271},{"id":134315,"depth":58,"text":134316},{"id":134331,"depth":58,"text":134332},{"id":134431,"depth":47,"text":134432,"children":135076},[135077,135078,135079,135080,135081,135082],{"id":134435,"depth":58,"text":134436},{"id":134469,"depth":58,"text":134470},{"id":134492,"depth":58,"text":134493},{"id":134539,"depth":58,"text":134540},{"id":135019,"depth":58,"text":135020},{"id":135054,"depth":58,"text":135055},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133659,"description":128},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135089,"title":135090,"body":135091,"description":128,"extension":129,"meta":136318,"navigation":131,"path":136319,"seo":136320,"stem":136321,"__hash__":136322},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135092,"toc":136299},[135093,135096,135100,135103,135117,135185,135215,135218,135222,135226,135328,135375,135379,135382,135385,135419,135422,135425,135428,135431,135434,135437,135440,135442,135445,135448,135451,135454,135457,135460,135463,135491,135494,135498,135501,135508,135511,135514,135540,135543,135547,135550,135553,135560,135564,135567,135569,135601,135604,135607,135619,135625,135628,135631,135634,135636,135640,135643,135646,135649,135694,135698,135700,135703,135710,135752,135755,135759,135764,135778,135782,135785,135788,135791,135794,135797,135831,135834,135837,135891,135894,135897,135900,135903,135955,135958,135961,136010,136014,136016,136019,136022,136025,136028,136031,136089,136092,136098,136101,136104,136136,136139,136143,136147,136150,136182,136186,136189,136233,136237,136240,136243,136246,136249,136252,136255,136258,136260,136263,136265,136268,136271,136274,136277,136282,136285,136287,136290,136293,136296],[10,135094,135090],{"id":135095},"_13-界面样式与布局技巧",[146,135097,135099],{"id":135098},"_131-css三角","13.1 css三角",[14,135101,135102],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1210,135104,135105,135108,135111,135114],{},[161,135106,135107],{},"用css 边框可以模拟三角效果",[161,135109,135110],{},"宽度高度为0",[161,135112,135113],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[161,135115,135116],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[27,135118,135120],{"className":126599,"code":135119,"language":126601,"meta":32,"style":32},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[34,135121,135122,135127,135134,135144,135154,135170,135181],{"__ignoreMap":32},[37,135123,135124],{"class":39,"line":40},[37,135125,135126],{"class":43},"\u002F* CSS 实现三角形 *\u002F\n",[37,135128,135129,135132],{"class":39,"line":47},[37,135130,135131],{"class":2035},".triangle",[37,135133,15644],{"class":54},[37,135135,135136,135138,135140,135142],{"class":39,"line":58},[37,135137,70636],{"class":82},[37,135139,51505],{"class":54},[37,135141,396],{"class":82},[37,135143,1364],{"class":54},[37,135145,135146,135148,135150,135152],{"class":39,"line":64},[37,135147,70856],{"class":82},[37,135149,51505],{"class":54},[37,135151,396],{"class":82},[37,135153,1364],{"class":54},[37,135155,135156,135158,135160,135162,135164,135166,135168],{"class":39,"line":76},[37,135157,70964],{"class":82},[37,135159,51505],{"class":54},[37,135161,650],{"class":82},[37,135163,51560],{"class":50},[37,135165,51589],{"class":82},[37,135167,64059],{"class":82},[37,135169,1364],{"class":54},[37,135171,135172,135175,135177,135179],{"class":39,"line":92},[37,135173,135174],{"class":82},"  border-bottom-color",[37,135176,51505],{"class":54},[37,135178,62437],{"class":82},[37,135180,1364],{"class":54},[37,135182,135183],{"class":39,"line":97},[37,135184,1637],{"class":54},[27,135186,135187],{"className":126599,"code":130756,"language":126601,"meta":32,"style":32},[34,135188,135189,135195,135211],{"__ignoreMap":32},[37,135190,135191,135193],{"class":39,"line":40},[37,135192,51679],{"class":51368},[37,135194,15644],{"class":54},[37,135196,135197,135199,135201,135203,135205,135207,135209],{"class":39,"line":47},[37,135198,70964],{"class":82},[37,135200,51505],{"class":54},[37,135202,422],{"class":82},[37,135204,51560],{"class":50},[37,135206,51589],{"class":82},[37,135208,129991],{"class":82},[37,135210,1364],{"class":54},[37,135212,135213],{"class":39,"line":58},[37,135214,1637],{"class":54},[119,135216],{"style":126455,"src":135217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[146,135219,135221],{"id":135220},"_132-css用户界面样式","13.2 css用户界面样式",[175,135223,135225],{"id":135224},"_1321-鼠标样式","13.2.1 鼠标样式",[27,135227,135229],{"className":126599,"code":135228,"language":126601,"meta":32,"style":32},"\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",[34,135230,135231,135236,135255,135273,135292,135309],{"__ignoreMap":32},[37,135232,135233],{"class":39,"line":40},[37,135234,135235],{"class":43},"\u002F* 鼠标样式 *\u002F\n",[37,135237,135238,135240,135242,135245,135247,135249,135252],{"class":39,"line":47},[37,135239,51679],{"class":51368},[37,135241,79875],{"class":54},[37,135243,135244],{"class":82},"cursor",[37,135246,51505],{"class":54},[37,135248,62098],{"class":82},[37,135250,135251],{"class":54},"; }   ",[37,135253,135254],{"class":43},"\u002F* 手型 *\u002F\n",[37,135256,135257,135259,135261,135263,135265,135268,135270],{"class":39,"line":58},[37,135258,51679],{"class":51368},[37,135260,79875],{"class":54},[37,135262,135244],{"class":82},[37,135264,51505],{"class":54},[37,135266,135267],{"class":82},"default",[37,135269,135251],{"class":54},[37,135271,135272],{"class":43},"\u002F* 默认 *\u002F\n",[37,135274,135275,135277,135279,135281,135283,135286,135289],{"class":39,"line":64},[37,135276,51679],{"class":51368},[37,135278,79875],{"class":54},[37,135280,135244],{"class":82},[37,135282,51505],{"class":54},[37,135284,135285],{"class":82},"move",[37,135287,135288],{"class":54},"; }      ",[37,135290,135291],{"class":43},"\u002F* 移动 *\u002F\n",[37,135293,135294,135296,135298,135300,135302,135304,135306],{"class":39,"line":76},[37,135295,51679],{"class":51368},[37,135297,79875],{"class":54},[37,135299,135244],{"class":82},[37,135301,51505],{"class":54},[37,135303,5259],{"class":82},[37,135305,135288],{"class":54},[37,135307,135308],{"class":43},"\u002F* 文本 *\u002F\n",[37,135310,135311,135313,135315,135317,135319,135322,135325],{"class":39,"line":92},[37,135312,51679],{"class":51368},[37,135314,79875],{"class":54},[37,135316,135244],{"class":82},[37,135318,51505],{"class":54},[37,135320,135321],{"class":82},"not-allowed",[37,135323,135324],{"class":54},"; } ",[37,135326,135327],{"class":43},"\u002F* 禁止 *\u002F\n",[342,135329,135330,135338],{},[345,135331,135332],{},[348,135333,135334,135336],{},[351,135335,127063],{"align":23808},[351,135337,27562],{"align":23808},[389,135339,135340,135347,135354,135361,135368],{},[348,135341,135342,135344],{},[394,135343,135267],{"align":23808},[394,135345,135346],{"align":23808},"小白 默认",[348,135348,135349,135351],{},[394,135350,62098],{"align":23808},[394,135352,135353],{"align":23808},"小手",[348,135355,135356,135358],{},[394,135357,135285],{"align":23808},[394,135359,135360],{"align":23808},"移动",[348,135362,135363,135365],{},[394,135364,5259],{"align":23808},[394,135366,135367],{"align":23808},"文本",[348,135369,135370,135372],{},[394,135371,135321],{"align":23808},[394,135373,135374],{"align":23808},"禁止",[175,135376,135378],{"id":135377},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135380,135381],{},"去除表单轮廓线",[14,135383,135384],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[27,135386,135387],{"className":126599,"code":129963,"language":126601,"meta":32,"style":32},[34,135388,135389,135393,135399,135415],{"__ignoreMap":32},[37,135390,135391],{"class":39,"line":40},[37,135392,129970],{"class":43},[37,135394,135395,135397],{"class":39,"line":47},[37,135396,51679],{"class":51368},[37,135398,15644],{"class":54},[37,135400,135401,135403,135405,135407,135409,135411,135413],{"class":39,"line":58},[37,135402,70964],{"class":82},[37,135404,51505],{"class":54},[37,135406,422],{"class":82},[37,135408,51560],{"class":50},[37,135410,51589],{"class":82},[37,135412,129991],{"class":82},[37,135414,1364],{"class":54},[37,135416,135417],{"class":39,"line":64},[37,135418,1637],{"class":54},[14,135420,135421],{},"文本域：",[119,135423],{"style":126455,"src":135424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,135426,135427],{},"此时会有一个空白区域",[119,135429],{"style":126455,"src":135430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,135432,135433],{},"写在同一行就不会出现这个问题",[119,135435],{"style":126455,"src":135436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,135438,135439],{},"文本域是行内块元素，一定记住！！！",[14,135441,98280],{},[119,135443],{"style":126455,"src":135444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,135446,135447],{},"文本域尽量放在一行",[14,135449,135450],{},"知识回顾：cols是列，rols是行",[119,135452],{"style":126455,"src":135453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,135455,135456],{},"它可以进行拖动，显然这是我们不愿意看到的",[119,135458],{"style":126455,"src":135459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,135461,135462],{},"使用resize进行解决",[27,135464,135466],{"className":126599,"code":135465,"language":126601,"meta":32,"style":32},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[34,135467,135468,135474,135487],{"__ignoreMap":32},[37,135469,135470,135472],{"class":39,"line":40},[37,135471,53889],{"class":51368},[37,135473,15644],{"class":54},[37,135475,135476,135478,135480,135482,135484],{"class":39,"line":47},[37,135477,70866],{"class":82},[37,135479,51505],{"class":54},[37,135481,54805],{"class":82},[37,135483,130462],{"class":54},[37,135485,135486],{"class":43},"\u002F* 取消表单轮廓线 *\u002F\n",[37,135488,135489],{"class":39,"line":58},[37,135490,1637],{"class":54},[14,135492,135493],{},"此时就无法通过右下方实现拖动了",[175,135495,135497],{"id":135496},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,135499,135500],{},"实现一个盒子中的文字和图片对齐",[14,135502,135503,135504,135507],{},"用于设置一个元素的 ",[354,135505,135506],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,135509,135510],{},"图片和文字默认是基线对齐",[119,135512],{"style":126455,"src":135513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[27,135515,135516],{"className":126599,"code":135465,"language":126601,"meta":32,"style":32},[34,135517,135518,135524,135536],{"__ignoreMap":32},[37,135519,135520,135522],{"class":39,"line":40},[37,135521,53889],{"class":51368},[37,135523,15644],{"class":54},[37,135525,135526,135528,135530,135532,135534],{"class":39,"line":47},[37,135527,70866],{"class":82},[37,135529,51505],{"class":54},[37,135531,54805],{"class":82},[37,135533,130462],{"class":54},[37,135535,135486],{"class":43},[37,135537,135538],{"class":39,"line":58},[37,135539,1637],{"class":54},[119,135541],{"style":126455,"src":135542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22070,135544,135546],{"id":135545},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,135548,135549],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[119,135551],{"style":126455,"src":135552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,135554,135555,135556,135559],{},"此时可以给图片、表单这些行内块元素的 ",[354,135557,135558],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22070,135561,135563],{"id":135562},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,135565,135566],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,135568,14705],{},[27,135570,135572],{"className":126599,"code":135571,"language":126601,"meta":32,"style":32},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[34,135573,135574,135579,135585,135597],{"__ignoreMap":32},[37,135575,135576],{"class":39,"line":40},[37,135577,135578],{"class":43},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[37,135580,135581,135583],{"class":39,"line":47},[37,135582,119],{"class":51368},[37,135584,15644],{"class":54},[37,135586,135587,135590,135592,135595],{"class":39,"line":58},[37,135588,135589],{"class":82},"  vertical-align",[37,135591,51505],{"class":54},[37,135593,135594],{"class":82},"middle",[37,135596,1364],{"class":54},[37,135598,135599],{"class":39,"line":64},[37,135600,1637],{"class":54},[119,135602],{"style":126455,"src":135603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,135605,135606],{},"主要解决方法有两种：",[158,135608,135609],{},[161,135610,135611,135614,135615,135618],{},[354,135612,135613],{},"给图片"," 添加 ",[354,135616,135617],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,135620,135621,135622],{},"2.把图片转换为块级元素 ",[354,135623,135624],{},"display: block",[14,135626,135627],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,135629,135630],{},"img {",[14,135632,135633],{},"vertical-align:middle;",[14,135635,1149],{},[175,135637,135639],{"id":135638},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,135641,135642],{},"效果：",[119,135644],{"style":126455,"src":135645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,135647,135648],{},"单行文本溢出显示省略号--必须满足三个条件：",[27,135650,135652],{"className":126599,"code":135651,"language":126601,"meta":32,"style":32},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[34,135653,135654,135659,135665,135675,135680,135690],{"__ignoreMap":32},[37,135655,135656],{"class":39,"line":40},[37,135657,135658],{"class":43},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[37,135660,135661,135663],{"class":39,"line":47},[37,135662,119],{"class":51368},[37,135664,15644],{"class":54},[37,135666,135667,135669,135671,135673],{"class":39,"line":58},[37,135668,135589],{"class":82},[37,135670,51505],{"class":54},[37,135672,135594],{"class":82},[37,135674,1364],{"class":54},[37,135676,135677],{"class":39,"line":64},[37,135678,135679],{"class":43},"  \u002F* 或 *\u002F\n",[37,135681,135682,135684,135686,135688],{"class":39,"line":76},[37,135683,128215],{"class":82},[37,135685,51505],{"class":54},[37,135687,60937],{"class":82},[37,135689,1364],{"class":54},[37,135691,135692],{"class":39,"line":92},[37,135693,1637],{"class":54},[175,135695,135697],{"id":135696},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,135699,135642],{},[119,135701],{"style":126455,"src":135702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,135704,135705,135706,135709],{},"多行文本溢出显示省略号， ",[354,135707,135708],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[27,135711,135712],{"className":126599,"code":135651,"language":126601,"meta":32,"style":32},[34,135713,135714,135718,135724,135734,135738,135748],{"__ignoreMap":32},[37,135715,135716],{"class":39,"line":40},[37,135717,135658],{"class":43},[37,135719,135720,135722],{"class":39,"line":47},[37,135721,119],{"class":51368},[37,135723,15644],{"class":54},[37,135725,135726,135728,135730,135732],{"class":39,"line":58},[37,135727,135589],{"class":82},[37,135729,51505],{"class":54},[37,135731,135594],{"class":82},[37,135733,1364],{"class":54},[37,135735,135736],{"class":39,"line":64},[37,135737,135679],{"class":43},[37,135739,135740,135742,135744,135746],{"class":39,"line":76},[37,135741,128215],{"class":82},[37,135743,51505],{"class":54},[37,135745,60937],{"class":82},[37,135747,1364],{"class":54},[37,135749,135750],{"class":39,"line":92},[37,135751,1637],{"class":54},[14,135753,135754],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[146,135756,135758],{"id":135757},"_133-常见布局技巧","13.3 常见布局技巧",[14,135760,135761],{},[354,135762,135763],{},"巧妙利用一个技术更快更好的布局：",[158,135765,135766,135769,135772,135775],{},[161,135767,135768],{},"margin负值的运用",[161,135770,135771],{},"文字围绕浮动元素",[161,135773,135774],{},"行内块的巧妙运用",[161,135776,135777],{},"CSS三角强化",[175,135779,135781],{"id":135780},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,135783,135784],{},"应用场景：",[119,135786],{"style":126455,"src":135787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[119,135789],{"style":126455,"src":135790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,135792,135793],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,135795,135796],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[27,135798,135799],{"className":126599,"code":129963,"language":126601,"meta":32,"style":32},[34,135800,135801,135805,135811,135827],{"__ignoreMap":32},[37,135802,135803],{"class":39,"line":40},[37,135804,129970],{"class":43},[37,135806,135807,135809],{"class":39,"line":47},[37,135808,51679],{"class":51368},[37,135810,15644],{"class":54},[37,135812,135813,135815,135817,135819,135821,135823,135825],{"class":39,"line":58},[37,135814,70964],{"class":82},[37,135816,51505],{"class":54},[37,135818,422],{"class":82},[37,135820,51560],{"class":50},[37,135822,51589],{"class":82},[37,135824,129991],{"class":82},[37,135826,1364],{"class":54},[37,135828,135829],{"class":39,"line":64},[37,135830,1637],{"class":54},[119,135832],{"style":126455,"src":135833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,135835,135836],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[27,135838,135840],{"className":126599,"code":135839,"language":126601,"meta":32,"style":32},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[34,135841,135842,135847,135853,135863,135875,135887],{"__ignoreMap":32},[37,135843,135844],{"class":39,"line":40},[37,135845,135846],{"class":43},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[37,135848,135849,135851],{"class":39,"line":47},[37,135850,130447],{"class":2035},[37,135852,15644],{"class":54},[37,135854,135855,135857,135859,135861],{"class":39,"line":58},[37,135856,132405],{"class":82},[37,135858,51505],{"class":54},[37,135860,54832],{"class":82},[37,135862,1364],{"class":54},[37,135864,135865,135867,135869,135871,135873],{"class":39,"line":64},[37,135866,132419],{"class":82},[37,135868,51505],{"class":54},[37,135870,650],{"class":82},[37,135872,51560],{"class":50},[37,135874,1364],{"class":54},[37,135876,135877,135879,135881,135883,135885],{"class":39,"line":76},[37,135878,132436],{"class":82},[37,135880,51505],{"class":54},[37,135882,903],{"class":82},[37,135884,51560],{"class":50},[37,135886,1364],{"class":54},[37,135888,135889],{"class":39,"line":92},[37,135890,1637],{"class":54},[14,135892,135893],{},"加上上述代码会发现：",[119,135895],{"style":126455,"src":135896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,135898,135899],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,135901,135902],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[27,135904,135905],{"className":126599,"code":135839,"language":126601,"meta":32,"style":32},[34,135906,135907,135911,135917,135927,135939,135951],{"__ignoreMap":32},[37,135908,135909],{"class":39,"line":40},[37,135910,135846],{"class":43},[37,135912,135913,135915],{"class":39,"line":47},[37,135914,130447],{"class":2035},[37,135916,15644],{"class":54},[37,135918,135919,135921,135923,135925],{"class":39,"line":58},[37,135920,132405],{"class":82},[37,135922,51505],{"class":54},[37,135924,54832],{"class":82},[37,135926,1364],{"class":54},[37,135928,135929,135931,135933,135935,135937],{"class":39,"line":64},[37,135930,132419],{"class":82},[37,135932,51505],{"class":54},[37,135934,650],{"class":82},[37,135936,51560],{"class":50},[37,135938,1364],{"class":54},[37,135940,135941,135943,135945,135947,135949],{"class":39,"line":76},[37,135942,132436],{"class":82},[37,135944,51505],{"class":54},[37,135946,903],{"class":82},[37,135948,51560],{"class":50},[37,135950,1364],{"class":54},[37,135952,135953],{"class":39,"line":92},[37,135954,1637],{"class":54},[14,135956,135957],{},"解决方式2：",[14,135959,135960],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[27,135962,135964],{"className":126599,"code":135963,"language":126601,"meta":32,"style":32},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[34,135965,135966,135972,135982,135994,136006],{"__ignoreMap":32},[37,135967,135968,135970],{"class":39,"line":40},[37,135969,51679],{"class":51368},[37,135971,15644],{"class":54},[37,135973,135974,135976,135978,135980],{"class":39,"line":47},[37,135975,132405],{"class":82},[37,135977,51505],{"class":54},[37,135979,54832],{"class":82},[37,135981,1364],{"class":54},[37,135983,135984,135986,135988,135990,135992],{"class":39,"line":58},[37,135985,132419],{"class":82},[37,135987,51505],{"class":54},[37,135989,650],{"class":82},[37,135991,51560],{"class":50},[37,135993,1364],{"class":54},[37,135995,135996,135998,136000,136002,136004],{"class":39,"line":64},[37,135997,132436],{"class":82},[37,135999,51505],{"class":54},[37,136001,903],{"class":82},[37,136003,51560],{"class":50},[37,136005,1364],{"class":54},[37,136007,136008],{"class":39,"line":76},[37,136009,1637],{"class":54},[175,136011,136013],{"id":136012},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,136015,135784],{},[119,136017],{"style":126455,"src":136018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,136020,136021],{},"实现结构图：",[119,136023],{"style":126455,"src":136024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,136026,136027],{},"巧妙运用浮动元素不会压住文字的特性",[14,136029,136030],{},"代码显示：",[27,136032,136034],{"className":126599,"code":136033,"language":126601,"meta":32,"style":32},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[34,136035,136036,136042,136052,136056,136061,136065,136071,136085],{"__ignoreMap":32},[37,136037,136038,136040],{"class":39,"line":40},[37,136039,130447],{"class":2035},[37,136041,15644],{"class":54},[37,136043,136044,136046,136048,136050],{"class":39,"line":47},[37,136045,131079],{"class":82},[37,136047,51505],{"class":54},[37,136049,23808],{"class":82},[37,136051,1364],{"class":54},[37,136053,136054],{"class":39,"line":58},[37,136055,1637],{"class":54},[37,136057,136058],{"class":39,"line":64},[37,136059,136060],{"class":54},"```Css\n",[37,136062,136063],{"class":39,"line":76},[37,136064,130442],{"class":43},[37,136066,136067,136069],{"class":39,"line":92},[37,136068,130447],{"class":2035},[37,136070,15644],{"class":54},[37,136072,136073,136075,136077,136079,136081,136083],{"class":39,"line":97},[37,136074,70538],{"class":82},[37,136076,51505],{"class":54},[37,136078,396],{"class":82},[37,136080,51624],{"class":82},[37,136082,130462],{"class":54},[37,136084,130465],{"class":43},[37,136086,136087],{"class":39,"line":107},[37,136088,1637],{"class":54},[14,136090,136091],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[27,136093,136096],{"className":136094,"code":136095,"language":5259},[5257],"\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",[34,136097,136095],{"__ignoreMap":32},[119,136099],{"style":126455,"src":136100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136102,136103],{},"最终展示结果：",[27,136105,136106],{"className":126599,"code":130435,"language":126601,"meta":32,"style":32},[34,136107,136108,136112,136118,136132],{"__ignoreMap":32},[37,136109,136110],{"class":39,"line":40},[37,136111,130442],{"class":43},[37,136113,136114,136116],{"class":39,"line":47},[37,136115,130447],{"class":2035},[37,136117,15644],{"class":54},[37,136119,136120,136122,136124,136126,136128,136130],{"class":39,"line":58},[37,136121,70538],{"class":82},[37,136123,51505],{"class":54},[37,136125,396],{"class":82},[37,136127,51624],{"class":82},[37,136129,130462],{"class":54},[37,136131,130465],{"class":43},[37,136133,136134],{"class":39,"line":64},[37,136135,1637],{"class":54},[119,136137],{"style":126455,"src":136138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[146,136140,136142],{"id":136141},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[175,136144,136146],{"id":136145},"_1341-原理","13.4.1 原理",[119,136148],{"style":126455,"src":136149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[27,136151,136152],{"className":126599,"code":130435,"language":126601,"meta":32,"style":32},[34,136153,136154,136158,136164,136178],{"__ignoreMap":32},[37,136155,136156],{"class":39,"line":40},[37,136157,130442],{"class":43},[37,136159,136160,136162],{"class":39,"line":47},[37,136161,130447],{"class":2035},[37,136163,15644],{"class":54},[37,136165,136166,136168,136170,136172,136174,136176],{"class":39,"line":58},[37,136167,70538],{"class":82},[37,136169,51505],{"class":54},[37,136171,396],{"class":82},[37,136173,51624],{"class":82},[37,136175,130462],{"class":54},[37,136177,130465],{"class":43},[37,136179,136180],{"class":39,"line":64},[37,136181,1637],{"class":54},[175,136183,136185],{"id":136184},"_1342-实例","13.4.2 实例",[119,136187],{"style":126455,"src":136188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[27,136190,136191],{"className":126599,"code":131065,"language":126601,"meta":32,"style":32},[34,136192,136193,136199,136209,136213,136219,136229],{"__ignoreMap":32},[37,136194,136195,136197],{"class":39,"line":40},[37,136196,131072],{"class":2035},[37,136198,15644],{"class":54},[37,136200,136201,136203,136205,136207],{"class":39,"line":47},[37,136202,131079],{"class":82},[37,136204,51505],{"class":54},[37,136206,23808],{"class":82},[37,136208,1364],{"class":54},[37,136210,136211],{"class":39,"line":58},[37,136212,1637],{"class":54},[37,136214,136215,136217],{"class":39,"line":64},[37,136216,131094],{"class":2035},[37,136218,15644],{"class":54},[37,136220,136221,136223,136225,136227],{"class":39,"line":76},[37,136222,131079],{"class":82},[37,136224,51505],{"class":54},[37,136226,72590],{"class":82},[37,136228,1364],{"class":54},[37,136230,136231],{"class":39,"line":92},[37,136232,1637],{"class":54},[146,136234,136236],{"id":136235},"_135-css的初始化","13.5 css的初始化",[14,136238,136239],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136241,136242],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136244,136245],{},"每个网页都必须首先进行 CSS初始化。",[14,136247,136248],{},"这里我们以 京东CSS初始化代码为例。",[14,136250,136251],{},"在网页右键查看网页源代码",[14,136253,136254],{},"找到css的link引入语句",[14,136256,136257],{},"然后ctrl+f 输入body",[14,136259,77294],{},[119,136261],{"style":126455,"src":136262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136264,77317],{},[119,136266],{"style":126455,"src":136267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136269,136270],{},"③打开了网页上传压缩的代码",[119,136272],{"style":126455,"src":136273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136275,136276],{},"④从body前可以查看这个网页的初始化代码",[14,136278,136279],{},[354,136280,136281],{},"Unicode编码字体：",[14,136283,136284],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136286,83275],{},[14,136288,136289],{},"黑体 \\9ED1\\4F53",[14,136291,136292],{},"宋体 \\5B8B\\4F53",[14,136294,136295],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[123,136297,136298],{},"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":32,"searchDepth":47,"depth":47,"links":136300},[136301,136302,136309,136313,136317],{"id":135098,"depth":47,"text":135099},{"id":135220,"depth":47,"text":135221,"children":136303},[136304,136305,136306,136307,136308],{"id":135224,"depth":58,"text":135225},{"id":135377,"depth":58,"text":135378},{"id":135496,"depth":58,"text":135497},{"id":135638,"depth":58,"text":135639},{"id":135696,"depth":58,"text":135697},{"id":135757,"depth":47,"text":135758,"children":136310},[136311,136312],{"id":135780,"depth":58,"text":135781},{"id":136012,"depth":58,"text":136013},{"id":136141,"depth":47,"text":136142,"children":136314},[136315,136316],{"id":136145,"depth":58,"text":136146},{"id":136184,"depth":58,"text":136185},{"id":136235,"depth":47,"text":136236},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135090,"description":128},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136324,"title":136325,"body":136326,"description":128,"extension":129,"meta":138012,"navigation":131,"path":138013,"seo":138014,"stem":138015,"__hash__":138016},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136327,"toc":138001},[136328,136331,136335,136339,136342,136349,136352,136355,136393,136396,136398,136412,136416,136425,136429,136434,136437,136440,136443,136478,136483,136486,136516,136519,136524,136527,136530,136560,136563,136617,136620,136624,136629,136641,136644,136648,136678,136681,136686,136689,136719,136722,136726,136743,136747,136751,136754,136787,136790,136794,136797,136800,136803,136806,136809,136920,136923,136926,136929,137031,137034,137038,137042,137046,137049,137089,137092,137094,137110,137114,137117,137122,137203,137206,137209,137335,137340,137343,137351,137354,137359,137444,137447,137451,137454,137457,137461,137481,137486,137570,137573,137578,137581,137584,137662,137665,137668,137671,137674,137677,137682,137685,137688,137760,137763,137768,137771,137868,137871,137877,137880,137883,137886,137889,137892,137895,137898,137901,137905,137910,137913,137946,137951,137954,137995,137998],[10,136329,136325],{"id":136330},"_14-html5与css3新特性",[146,136332,136334],{"id":136333},"_141-html5的新特性","14.1 HTML5的新特性",[175,136336,136338],{"id":136337},"_1411-基本标签","14.1.1 基本标签",[14,136340,136341],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136343,136344,136345,136348],{},"这些新特性都有兼容性问题，基本是 ",[354,136346,136347],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136350,136351],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136353,136354],{},"现在使用的是新特性：",[1210,136356,136357,136363,136369,136375,136381,136387],{},[161,136358,136359,136362],{},[34,136360,136361],{},"\u003Cheader>"," 头部标签",[161,136364,136365,136368],{},[34,136366,136367],{},"\u003Cnav>"," 导航标签",[161,136370,136371,136374],{},[34,136372,136373],{},"\u003Carticle>"," 内容标签",[161,136376,136377,136380],{},[34,136378,136379],{},"\u003Csection>"," 定义文档某个区域",[161,136382,136383,136386],{},[34,136384,136385],{},"\u003Caside>"," 侧边栏标签",[161,136388,136389,136392],{},[34,136390,136391],{},"\u003Cfooter>"," 尾部标签",[119,136394],{"style":126455,"src":136395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136397,237],{},[1210,136399,136400,136403,136406,136409],{},[161,136401,136402],{},"这种语义化标准主要是针对搜索引擎的",[161,136404,136405],{},"这些标签页面中可以经常使用",[161,136407,136408],{},"在IE9中，需要把这些元素转换为块级元素",[161,136410,136411],{},"移动端更喜欢使用这些标签",[175,136413,136415],{"id":136414},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136417,136418,136419,136421,136422,136424],{},"音频 ",[354,136420,28247],{}," 和视频 ",[354,136423,28256],{}," 两个标签",[22070,136426,136428],{"id":136427},"_14121-视频标签-video","14.1.2.1 视频标签- video",[158,136430,136431],{},[161,136432,136433],{},"支持格式：",[119,136435],{"style":126455,"src":136436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,136438,136439],{},"尽量使用MP4，兼容性好",[14,136441,136442],{},"用MP4就可以",[27,136444,136446],{"className":127346,"code":136445,"language":127348,"meta":32,"style":32},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[34,136447,136448],{"__ignoreMap":32},[37,136449,136450,136452,136454,136456,136458,136461,136463,136466,136469,136472,136474,136476],{"class":39,"line":40},[37,136451,1113],{"class":54},[37,136453,28256],{"class":51368},[37,136455,55307],{"class":2035},[37,136457,70],{"class":54},[37,136459,136460],{"class":309},"\"movie.mp4\"",[37,136462,92491],{"class":2035},[37,136464,136465],{"class":2035}," autoplay",[37,136467,136468],{"class":2035}," muted",[37,136470,136471],{"class":2035}," loop",[37,136473,55382],{"class":54},[37,136475,28256],{"class":51368},[37,136477,51375],{"class":54},[158,136479,136480],{"start":47},[161,136481,136482],{},"兼容写法",[14,136484,136485],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[27,136487,136488],{"className":127346,"code":136445,"language":127348,"meta":32,"style":32},[34,136489,136490],{"__ignoreMap":32},[37,136491,136492,136494,136496,136498,136500,136502,136504,136506,136508,136510,136512,136514],{"class":39,"line":40},[37,136493,1113],{"class":54},[37,136495,28256],{"class":51368},[37,136497,55307],{"class":2035},[37,136499,70],{"class":54},[37,136501,136460],{"class":309},[37,136503,92491],{"class":2035},[37,136505,136465],{"class":2035},[37,136507,136468],{"class":2035},[37,136509,136471],{"class":2035},[37,136511,55382],{"class":54},[37,136513,28256],{"class":51368},[37,136515,51375],{"class":54},[14,136517,136518],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[158,136520,136521],{"start":58},[161,136522,136523],{},"video常用属性",[119,136525],{"style":126455,"src":136526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,136528,136529],{},"poster属性后面是跟的等待加载图片的地址",[27,136531,136532],{"className":127346,"code":134101,"language":127348,"meta":32,"style":32},[34,136533,136534],{"__ignoreMap":32},[37,136535,136536,136538,136540,136542,136544,136546,136548,136550,136552,136554,136556,136558],{"class":39,"line":40},[37,136537,1113],{"class":54},[37,136539,119],{"class":51368},[37,136541,55307],{"class":2035},[37,136543,70],{"class":54},[37,136545,134116],{"class":309},[37,136547,55315],{"class":2035},[37,136549,70],{"class":54},[37,136551,134123],{"class":309},[37,136553,134126],{"class":2035},[37,136555,70],{"class":54},[37,136557,134131],{"class":309},[37,136559,51375],{"class":54},[14,136561,136562],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[27,136564,136566],{"className":126599,"code":136565,"language":126601,"meta":32,"style":32},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[34,136567,136568,136573,136579,136603,136608,136613],{"__ignoreMap":32},[37,136569,136570],{"class":39,"line":40},[37,136571,136572],{"class":43},"\u002F* 2D 位移 *\u002F\n",[37,136574,136575,136577],{"class":39,"line":47},[37,136576,51679],{"class":51368},[37,136578,15644],{"class":54},[37,136580,136581,136584,136586,136589,136591,136593,136595,136597,136599,136601],{"class":39,"line":58},[37,136582,136583],{"class":82},"  transform",[37,136585,51505],{"class":54},[37,136587,136588],{"class":82},"translate",[37,136590,208],{"class":54},[37,136592,516],{"class":82},[37,136594,51560],{"class":50},[37,136596,12507],{"class":54},[37,136598,859],{"class":82},[37,136600,51560],{"class":50},[37,136602,2791],{"class":54},[37,136604,136605],{"class":39,"line":64},[37,136606,136607],{"class":43},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[37,136609,136610],{"class":39,"line":76},[37,136611,136612],{"class":43},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[37,136614,136615],{"class":39,"line":92},[37,136616,1637],{"class":54},[14,136618,136619],{},"muted:自动静音属性",[22070,136621,136623],{"id":136622},"_14122-音频标签audio","14.1.2.2 音频标签audio",[158,136625,136626],{},[161,136627,136628],{},"基本使用",[14,136630,136631,136632,136637,136638],{},"当前 ",[354,136633,136634],{},[34,136635,136636],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[354,136639,136640],{},"mp3格式",[119,136642],{"style":126455,"src":136643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[158,136645,136646],{"start":47},[161,136647,136482],{},[27,136649,136650],{"className":127346,"code":136445,"language":127348,"meta":32,"style":32},[34,136651,136652],{"__ignoreMap":32},[37,136653,136654,136656,136658,136660,136662,136664,136666,136668,136670,136672,136674,136676],{"class":39,"line":40},[37,136655,1113],{"class":54},[37,136657,28256],{"class":51368},[37,136659,55307],{"class":2035},[37,136661,70],{"class":54},[37,136663,136460],{"class":309},[37,136665,92491],{"class":2035},[37,136667,136465],{"class":2035},[37,136669,136468],{"class":2035},[37,136671,136471],{"class":2035},[37,136673,55382],{"class":54},[37,136675,28256],{"class":51368},[37,136677,51375],{"class":54},[14,136679,136680],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[158,136682,136683],{"start":58},[161,136684,136685],{},"常用属性",[119,136687],{"style":126455,"src":136688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[27,136690,136691],{"className":127346,"code":136445,"language":127348,"meta":32,"style":32},[34,136692,136693],{"__ignoreMap":32},[37,136694,136695,136697,136699,136701,136703,136705,136707,136709,136711,136713,136715,136717],{"class":39,"line":40},[37,136696,1113],{"class":54},[37,136698,28256],{"class":51368},[37,136700,55307],{"class":2035},[37,136702,70],{"class":54},[37,136704,136460],{"class":309},[37,136706,92491],{"class":2035},[37,136708,136465],{"class":2035},[37,136710,136468],{"class":2035},[37,136712,136471],{"class":2035},[37,136714,55382],{"class":54},[37,136716,28256],{"class":51368},[37,136718,51375],{"class":54},[14,136720,136721],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22070,136723,136725],{"id":136724},"_14123-总结","14.1.2.3 总结",[1210,136727,136728,136731,136734,136737,136740],{},[161,136729,136730],{},"音频标签和视频标签使用方式基本一致",[161,136732,136733],{},"浏览器支持情况不同",[161,136735,136736],{},"谷歌浏览器把音频和视频自动播放禁止了",[161,136738,136739],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[161,136741,136742],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[175,136744,136746],{"id":136745},"_1413-表单元素","14.1.3 表单元素",[22070,136748,136750],{"id":136749},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[119,136752],{"style":126455,"src":136753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[27,136755,136757],{"className":127346,"code":136756,"language":127348,"meta":32,"style":32},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[34,136758,136759],{"__ignoreMap":32},[37,136760,136761,136763,136765,136767,136769,136771,136773,136775,136778,136780,136782,136785],{"class":39,"line":40},[37,136762,1113],{"class":54},[37,136764,53889],{"class":51368},[37,136766,53892],{"class":2035},[37,136768,70],{"class":54},[37,136770,62767],{"class":309},[37,136772,14992],{"class":2035},[37,136774,70],{"class":54},[37,136776,136777],{"class":309},"\"username\"",[37,136779,61088],{"class":2035},[37,136781,70],{"class":54},[37,136783,136784],{"class":309},"\"请输入用户名\"",[37,136786,51375],{"class":54},[119,136788],{"style":126455,"src":136789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22070,136791,136793],{"id":136792},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[119,136795],{"style":126455,"src":136796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,136798,136799],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,136801,136802],{},"快捷操作：",[119,136804],{"style":126455,"src":136805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,136807,136808],{},"例子1：",[27,136810,136812],{"className":127346,"code":136811,"language":127348,"meta":32,"style":32},"\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",[34,136813,136814,136837,136864,136893,136912],{"__ignoreMap":32},[37,136815,136816,136818,136820,136822,136824,136827,136830,136832,136835],{"class":39,"line":40},[37,136817,1113],{"class":54},[37,136819,66693],{"class":51368},[37,136821,66696],{"class":2035},[37,136823,70],{"class":54},[37,136825,136826],{"class":309},"\"\u002Fsubmit\"",[37,136828,136829],{"class":2035}," method",[37,136831,70],{"class":54},[37,136833,136834],{"class":309},"\"post\"",[37,136836,51375],{"class":54},[37,136838,136839,136841,136843,136845,136847,136849,136851,136853,136855,136857,136859,136862],{"class":39,"line":47},[37,136840,52212],{"class":54},[37,136842,53889],{"class":51368},[37,136844,53892],{"class":2035},[37,136846,70],{"class":54},[37,136848,62767],{"class":309},[37,136850,14992],{"class":2035},[37,136852,70],{"class":54},[37,136854,136777],{"class":309},[37,136856,61088],{"class":2035},[37,136858,70],{"class":54},[37,136860,136861],{"class":309},"\"用户名\"",[37,136863,51375],{"class":54},[37,136865,136866,136868,136870,136872,136874,136877,136879,136881,136884,136886,136888,136891],{"class":39,"line":58},[37,136867,52212],{"class":54},[37,136869,53889],{"class":51368},[37,136871,53892],{"class":2035},[37,136873,70],{"class":54},[37,136875,136876],{"class":309},"\"password\"",[37,136878,14992],{"class":2035},[37,136880,70],{"class":54},[37,136882,136883],{"class":309},"\"pwd\"",[37,136885,61088],{"class":2035},[37,136887,70],{"class":54},[37,136889,136890],{"class":309},"\"密码\"",[37,136892,51375],{"class":54},[37,136894,136895,136897,136899,136901,136903,136905,136908,136910],{"class":39,"line":64},[37,136896,52212],{"class":54},[37,136898,53955],{"class":51368},[37,136900,53892],{"class":2035},[37,136902,70],{"class":54},[37,136904,66716],{"class":309},[37,136906,136907],{"class":54},">提交\u003C\u002F",[37,136909,53955],{"class":51368},[37,136911,51375],{"class":54},[37,136913,136914,136916,136918],{"class":39,"line":76},[37,136915,51853],{"class":54},[37,136917,66693],{"class":51368},[37,136919,51375],{"class":54},[119,136921],{"style":126455,"src":136922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,136924,136925],{},"value是表单域的内容",[14,136927,136928],{},"例子2：",[27,136930,136931],{"className":127346,"code":136811,"language":127348,"meta":32,"style":32},[34,136932,136933,136953,136979,137005,137023],{"__ignoreMap":32},[37,136934,136935,136937,136939,136941,136943,136945,136947,136949,136951],{"class":39,"line":40},[37,136936,1113],{"class":54},[37,136938,66693],{"class":51368},[37,136940,66696],{"class":2035},[37,136942,70],{"class":54},[37,136944,136826],{"class":309},[37,136946,136829],{"class":2035},[37,136948,70],{"class":54},[37,136950,136834],{"class":309},[37,136952,51375],{"class":54},[37,136954,136955,136957,136959,136961,136963,136965,136967,136969,136971,136973,136975,136977],{"class":39,"line":47},[37,136956,52212],{"class":54},[37,136958,53889],{"class":51368},[37,136960,53892],{"class":2035},[37,136962,70],{"class":54},[37,136964,62767],{"class":309},[37,136966,14992],{"class":2035},[37,136968,70],{"class":54},[37,136970,136777],{"class":309},[37,136972,61088],{"class":2035},[37,136974,70],{"class":54},[37,136976,136861],{"class":309},[37,136978,51375],{"class":54},[37,136980,136981,136983,136985,136987,136989,136991,136993,136995,136997,136999,137001,137003],{"class":39,"line":58},[37,136982,52212],{"class":54},[37,136984,53889],{"class":51368},[37,136986,53892],{"class":2035},[37,136988,70],{"class":54},[37,136990,136876],{"class":309},[37,136992,14992],{"class":2035},[37,136994,70],{"class":54},[37,136996,136883],{"class":309},[37,136998,61088],{"class":2035},[37,137000,70],{"class":54},[37,137002,136890],{"class":309},[37,137004,51375],{"class":54},[37,137006,137007,137009,137011,137013,137015,137017,137019,137021],{"class":39,"line":64},[37,137008,52212],{"class":54},[37,137010,53955],{"class":51368},[37,137012,53892],{"class":2035},[37,137014,70],{"class":54},[37,137016,66716],{"class":309},[37,137018,136907],{"class":54},[37,137020,53955],{"class":51368},[37,137022,51375],{"class":54},[37,137024,137025,137027,137029],{"class":39,"line":76},[37,137026,51853],{"class":54},[37,137028,66693],{"class":51368},[37,137030,51375],{"class":54},[119,137032],{"style":126455,"src":137033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[146,137035,137037],{"id":137036},"_142-css新特性","14.2 CSS新特性",[175,137039,137041],{"id":137040},"_1421-新增选择器","14.2.1 新增选择器",[22070,137043,137045],{"id":137044},"_14211-属性选择器","14.2.1.1 属性选择器",[119,137047],{"style":126455,"src":137048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[27,137050,137052],{"className":126599,"code":137051,"language":126601,"meta":32,"style":32},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[34,137053,137054,137069,137085],{"__ignoreMap":32},[37,137055,137056,137058,137060,137062,137064,137066],{"class":39,"line":40},[37,137057,53889],{"class":51368},[37,137059,1093],{"class":54},[37,137061,103154],{"class":2035},[37,137063,70],{"class":50},[37,137065,62767],{"class":309},[37,137067,137068],{"class":54},"] {\n",[37,137070,137071,137073,137075,137077,137079,137081,137083],{"class":39,"line":47},[37,137072,70964],{"class":82},[37,137074,51505],{"class":54},[37,137076,422],{"class":82},[37,137078,51560],{"class":50},[37,137080,51589],{"class":82},[37,137082,130179],{"class":82},[37,137084,1364],{"class":54},[37,137086,137087],{"class":39,"line":58},[37,137088,1637],{"class":54},[119,137090],{"style":126455,"src":137091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137093,237],{},[1210,137095,137096,137099,137102,137105],{},[161,137097,137098],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[161,137100,137101],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[161,137103,137104],{},"属性选择器也可以选择出来自定义的属性",[161,137106,137107,137109],{},[354,137108,9097],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22070,137111,137113],{"id":137112},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[119,137115],{"style":126455,"src":137116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[158,137118,137119],{},[161,137120,137121],{},"fist-child",[27,137123,137125],{"className":126599,"code":137124,"language":126601,"meta":32,"style":32},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[34,137126,137127,137132,137147,137167,137185],{"__ignoreMap":32},[37,137128,137129],{"class":39,"line":40},[37,137130,137131],{"class":43},"\u002F* 属性选择器 *\u002F\n",[37,137133,137134,137136,137138,137140,137142,137144],{"class":39,"line":47},[37,137135,53889],{"class":51368},[37,137137,1093],{"class":54},[37,137139,103154],{"class":2035},[37,137141,70],{"class":50},[37,137143,62767],{"class":309},[37,137145,137146],{"class":54},"] { }\n",[37,137148,137149,137151,137153,137155,137158,137161,137164],{"class":39,"line":58},[37,137150,53889],{"class":51368},[37,137152,1093],{"class":54},[37,137154,14766],{"class":2035},[37,137156,137157],{"class":50},"^=",[37,137159,137160],{"class":309},"\"icon\"",[37,137162,137163],{"class":54},"] { }  ",[37,137165,137166],{"class":43},"\u002F* 以 icon 开头 *\u002F\n",[37,137168,137169,137171,137173,137175,137178,137180,137182],{"class":39,"line":64},[37,137170,53889],{"class":51368},[37,137172,1093],{"class":54},[37,137174,14766],{"class":2035},[37,137176,137177],{"class":50},"$=",[37,137179,137160],{"class":309},[37,137181,137163],{"class":54},[37,137183,137184],{"class":43},"\u002F* 以 icon 结尾 *\u002F\n",[37,137186,137187,137189,137191,137193,137196,137198,137200],{"class":39,"line":76},[37,137188,53889],{"class":51368},[37,137190,1093],{"class":54},[37,137192,14766],{"class":2035},[37,137194,137195],{"class":50},"*=",[37,137197,137160],{"class":309},[37,137199,137163],{"class":54},[37,137201,137202],{"class":43},"\u002F* 包含 icon *\u002F\n",[14,137204,137205],{},"ul的第一个儿子文本为红色",[14,137207,137208],{},"一定要在冒号前加空格，不然就是选中所有的了",[27,137210,137212],{"className":126599,"code":137211,"language":126601,"meta":32,"style":32},".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",[34,137213,137214,137220,137230,137234,137238,137243,137256,137269,137285,137302,137319],{"__ignoreMap":32},[37,137215,137216,137218],{"class":39,"line":40},[37,137217,126890],{"class":2035},[37,137219,15644],{"class":54},[37,137221,137222,137224,137226,137228],{"class":39,"line":47},[37,137223,70973],{"class":82},[37,137225,51505],{"class":54},[37,137227,57489],{"class":82},[37,137229,1364],{"class":54},[37,137231,137232],{"class":39,"line":58},[37,137233,1637],{"class":54},[37,137235,137236],{"class":39,"line":64},[37,137237,136060],{"class":54},[37,137239,137240],{"class":39,"line":76},[37,137241,137242],{"class":43},"\u002F* 结构伪类选择器 *\u002F\n",[37,137244,137245,137247,137250,137253],{"class":39,"line":92},[37,137246,161],{"class":51368},[37,137248,137249],{"class":2035},":first-child",[37,137251,137252],{"class":54}," { }           ",[37,137254,137255],{"class":43},"\u002F* 第一个 *\u002F\n",[37,137257,137258,137260,137263,137266],{"class":39,"line":97},[37,137259,161],{"class":51368},[37,137261,137262],{"class":2035},":last-child",[37,137264,137265],{"class":54}," { }            ",[37,137267,137268],{"class":43},"\u002F* 最后一个 *\u002F\n",[37,137270,137271,137273,137275,137277,137279,137282],{"class":39,"line":107},[37,137272,161],{"class":51368},[37,137274,129513],{"class":2035},[37,137276,208],{"class":54},[37,137278,282],{"class":82},[37,137280,137281],{"class":54},") { }          ",[37,137283,137284],{"class":43},"\u002F* 第2个 *\u002F\n",[37,137286,137287,137289,137291,137293,137296,137299],{"class":39,"line":1390},[37,137288,161],{"class":51368},[37,137290,129513],{"class":2035},[37,137292,208],{"class":54},[37,137294,137295],{"class":82},"2n",[37,137297,137298],{"class":54},") { }         ",[37,137300,137301],{"class":43},"\u002F* 偶数 *\u002F\n",[37,137303,137304,137306,137308,137310,137313,137316],{"class":39,"line":1402},[37,137305,161],{"class":51368},[37,137307,129513],{"class":2035},[37,137309,208],{"class":54},[37,137311,137312],{"class":82},"2n+1",[37,137314,137315],{"class":54},") { }       ",[37,137317,137318],{"class":43},"\u002F* 奇数 *\u002F\n",[37,137320,137321,137323,137325,137327,137330,137332],{"class":39,"line":1684},[37,137322,161],{"class":51368},[37,137324,129513],{"class":2035},[37,137326,208],{"class":54},[37,137328,137329],{"class":82},"-n+3",[37,137331,137315],{"class":54},[37,137333,137334],{"class":43},"\u002F* 前3个 *\u002F\n",[51679,137336,137339],{"className":137337},[137338],"example","\n  示例内容\n",[14,137341,137342],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1210,137344,137345],{},[161,137346,137347,137350],{},[34,137348,137349],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137352,137353],{},"也就是说它选择的是熊大",[158,137355,137356],{"start":92},[161,137357,137358],{},"权重",[27,137360,137362],{"className":126599,"code":137361,"language":126601,"meta":32,"style":32},"\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",[34,137363,137364,137368,137378,137388,137402,137416,137430],{"__ignoreMap":32},[37,137365,137366],{"class":39,"line":40},[37,137367,137242],{"class":43},[37,137369,137370,137372,137374,137376],{"class":39,"line":47},[37,137371,161],{"class":51368},[37,137373,137249],{"class":2035},[37,137375,137252],{"class":54},[37,137377,137255],{"class":43},[37,137379,137380,137382,137384,137386],{"class":39,"line":58},[37,137381,161],{"class":51368},[37,137383,137262],{"class":2035},[37,137385,137265],{"class":54},[37,137387,137268],{"class":43},[37,137389,137390,137392,137394,137396,137398,137400],{"class":39,"line":64},[37,137391,161],{"class":51368},[37,137393,129513],{"class":2035},[37,137395,208],{"class":54},[37,137397,282],{"class":82},[37,137399,137281],{"class":54},[37,137401,137284],{"class":43},[37,137403,137404,137406,137408,137410,137412,137414],{"class":39,"line":76},[37,137405,161],{"class":51368},[37,137407,129513],{"class":2035},[37,137409,208],{"class":54},[37,137411,137295],{"class":82},[37,137413,137298],{"class":54},[37,137415,137301],{"class":43},[37,137417,137418,137420,137422,137424,137426,137428],{"class":39,"line":92},[37,137419,161],{"class":51368},[37,137421,129513],{"class":2035},[37,137423,208],{"class":54},[37,137425,137312],{"class":82},[37,137427,137315],{"class":54},[37,137429,137318],{"class":43},[37,137431,137432,137434,137436,137438,137440,137442],{"class":39,"line":97},[37,137433,161],{"class":51368},[37,137435,129513],{"class":2035},[37,137437,208],{"class":54},[37,137439,137329],{"class":82},[37,137441,137315],{"class":54},[37,137443,137334],{"class":43},[14,137445,137446],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22070,137448,137450],{"id":137449},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,137452,137453],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[119,137455],{"style":126455,"src":137456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[158,137458,137459],{},[161,137460,237],{},[1210,137462,137463,137466,137469,137472,137475,137478],{},[161,137464,137465],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[161,137467,137468],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[161,137470,137471],{},"语法： element::before {}",[161,137473,137474],{},"before 和 after 必须有 content 属性",[161,137476,137477],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[161,137479,137480],{},"伪元素选择器和标签选择器一样，权重为 1",[158,137482,137483],{"start":47},[161,137484,137485],{},"实例",[27,137487,137488],{"className":126599,"code":137361,"language":126601,"meta":32,"style":32},[34,137489,137490,137494,137504,137514,137528,137542,137556],{"__ignoreMap":32},[37,137491,137492],{"class":39,"line":40},[37,137493,137242],{"class":43},[37,137495,137496,137498,137500,137502],{"class":39,"line":47},[37,137497,161],{"class":51368},[37,137499,137249],{"class":2035},[37,137501,137252],{"class":54},[37,137503,137255],{"class":43},[37,137505,137506,137508,137510,137512],{"class":39,"line":58},[37,137507,161],{"class":51368},[37,137509,137262],{"class":2035},[37,137511,137265],{"class":54},[37,137513,137268],{"class":43},[37,137515,137516,137518,137520,137522,137524,137526],{"class":39,"line":64},[37,137517,161],{"class":51368},[37,137519,129513],{"class":2035},[37,137521,208],{"class":54},[37,137523,282],{"class":82},[37,137525,137281],{"class":54},[37,137527,137284],{"class":43},[37,137529,137530,137532,137534,137536,137538,137540],{"class":39,"line":76},[37,137531,161],{"class":51368},[37,137533,129513],{"class":2035},[37,137535,208],{"class":54},[37,137537,137295],{"class":82},[37,137539,137298],{"class":54},[37,137541,137301],{"class":43},[37,137543,137544,137546,137548,137550,137552,137554],{"class":39,"line":92},[37,137545,161],{"class":51368},[37,137547,129513],{"class":2035},[37,137549,208],{"class":54},[37,137551,137312],{"class":82},[37,137553,137315],{"class":54},[37,137555,137318],{"class":43},[37,137557,137558,137560,137562,137564,137566,137568],{"class":39,"line":97},[37,137559,161],{"class":51368},[37,137561,129513],{"class":2035},[37,137563,208],{"class":54},[37,137565,137329],{"class":82},[37,137567,137315],{"class":54},[37,137569,137334],{"class":43},[119,137571],{"style":126455,"src":137572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[158,137574,137575],{"start":58},[161,137576,137577],{},"使用场景1",[119,137579],{"style":126455,"src":137580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,137582,137583],{},"不需要再加盒子来整红色那部分了",[27,137585,137587],{"className":126599,"code":137586,"language":126601,"meta":32,"style":32},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[34,137588,137589,137594,137603,137614,137624,137628,137637,137648,137658],{"__ignoreMap":32},[37,137590,137591],{"class":39,"line":40},[37,137592,137593],{"class":43},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[37,137595,137596,137598,137601],{"class":39,"line":47},[37,137597,51679],{"class":51368},[37,137599,137600],{"class":2035},"::before",[37,137602,15644],{"class":54},[37,137604,137605,137608,137610,137612],{"class":39,"line":58},[37,137606,137607],{"class":82},"  content",[37,137609,51505],{"class":54},[37,137611,7724],{"class":309},[37,137613,1364],{"class":54},[37,137615,137616,137618,137620,137622],{"class":39,"line":64},[37,137617,128215],{"class":82},[37,137619,51505],{"class":54},[37,137621,60937],{"class":82},[37,137623,1364],{"class":54},[37,137625,137626],{"class":39,"line":76},[37,137627,1637],{"class":54},[37,137629,137630,137632,137635],{"class":39,"line":92},[37,137631,51679],{"class":51368},[37,137633,137634],{"class":2035},"::after",[37,137636,15644],{"class":54},[37,137638,137639,137641,137643,137646],{"class":39,"line":97},[37,137640,137607],{"class":82},[37,137642,51505],{"class":54},[37,137644,137645],{"class":309},"\"→\"",[37,137647,1364],{"class":54},[37,137649,137650,137652,137654,137656],{"class":39,"line":107},[37,137651,70973],{"class":82},[37,137653,51505],{"class":54},[37,137655,62138],{"class":82},[37,137657,1364],{"class":54},[37,137659,137660],{"class":39,"line":1390},[37,137661,1637],{"class":54},[119,137663],{"style":126455,"src":137664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,137666,137667],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[119,137669],{"style":126455,"src":137670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,137672,137673],{},"但是在引用时需要先转义一下",[14,137675,137676],{},"content='\\e930'",[158,137678,137679],{"start":64},[161,137680,137681],{},"使用场景2",[14,137683,137684],{},"仿土豆效果",[14,137686,137687],{},"通过使用伪元素选择器可以减少body中盒子的数量",[27,137689,137690],{"className":126599,"code":137586,"language":126601,"meta":32,"style":32},[34,137691,137692,137696,137704,137714,137724,137728,137736,137746,137756],{"__ignoreMap":32},[37,137693,137694],{"class":39,"line":40},[37,137695,137593],{"class":43},[37,137697,137698,137700,137702],{"class":39,"line":47},[37,137699,51679],{"class":51368},[37,137701,137600],{"class":2035},[37,137703,15644],{"class":54},[37,137705,137706,137708,137710,137712],{"class":39,"line":58},[37,137707,137607],{"class":82},[37,137709,51505],{"class":54},[37,137711,7724],{"class":309},[37,137713,1364],{"class":54},[37,137715,137716,137718,137720,137722],{"class":39,"line":64},[37,137717,128215],{"class":82},[37,137719,51505],{"class":54},[37,137721,60937],{"class":82},[37,137723,1364],{"class":54},[37,137725,137726],{"class":39,"line":76},[37,137727,1637],{"class":54},[37,137729,137730,137732,137734],{"class":39,"line":92},[37,137731,51679],{"class":51368},[37,137733,137634],{"class":2035},[37,137735,15644],{"class":54},[37,137737,137738,137740,137742,137744],{"class":39,"line":97},[37,137739,137607],{"class":82},[37,137741,51505],{"class":54},[37,137743,137645],{"class":309},[37,137745,1364],{"class":54},[37,137747,137748,137750,137752,137754],{"class":39,"line":107},[37,137749,70973],{"class":82},[37,137751,51505],{"class":54},[37,137753,62138],{"class":82},[37,137755,1364],{"class":54},[37,137757,137758],{"class":39,"line":1390},[37,137759,1637],{"class":54},[119,137761],{"style":126455,"src":137762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[158,137764,137765],{"start":76},[161,137766,137767],{},"使用场景3",[14,137769,137770],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[27,137772,137774],{"className":126599,"code":137773,"language":126601,"meta":32,"style":32},".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",[34,137775,137776,137782,137792,137796,137800,137804,137812,137822,137832,137836,137844,137854,137864],{"__ignoreMap":32},[37,137777,137778,137780],{"class":39,"line":40},[37,137779,130447],{"class":2035},[37,137781,15644],{"class":54},[37,137783,137784,137786,137788,137790],{"class":39,"line":47},[37,137785,131079],{"class":82},[37,137787,51505],{"class":54},[37,137789,23808],{"class":82},[37,137791,1364],{"class":54},[37,137793,137794],{"class":39,"line":58},[37,137795,1637],{"class":54},[37,137797,137798],{"class":39,"line":64},[37,137799,136060],{"class":54},[37,137801,137802],{"class":39,"line":76},[37,137803,137593],{"class":43},[37,137805,137806,137808,137810],{"class":39,"line":92},[37,137807,51679],{"class":51368},[37,137809,137600],{"class":2035},[37,137811,15644],{"class":54},[37,137813,137814,137816,137818,137820],{"class":39,"line":97},[37,137815,137607],{"class":82},[37,137817,51505],{"class":54},[37,137819,7724],{"class":309},[37,137821,1364],{"class":54},[37,137823,137824,137826,137828,137830],{"class":39,"line":107},[37,137825,128215],{"class":82},[37,137827,51505],{"class":54},[37,137829,60937],{"class":82},[37,137831,1364],{"class":54},[37,137833,137834],{"class":39,"line":1390},[37,137835,1637],{"class":54},[37,137837,137838,137840,137842],{"class":39,"line":1402},[37,137839,51679],{"class":51368},[37,137841,137634],{"class":2035},[37,137843,15644],{"class":54},[37,137845,137846,137848,137850,137852],{"class":39,"line":1684},[37,137847,137607],{"class":82},[37,137849,51505],{"class":54},[37,137851,137645],{"class":309},[37,137853,1364],{"class":54},[37,137855,137856,137858,137860,137862],{"class":39,"line":1689},[37,137857,70973],{"class":82},[37,137859,51505],{"class":54},[37,137861,62138],{"class":82},[37,137863,1364],{"class":54},[37,137865,137866],{"class":39,"line":1695},[37,137867,1637],{"class":54},[14,137869,137870],{},"div {\nmargin: 0 auto;\n}",[27,137872,137875],{"className":137873,"code":137874,"language":5259},[5257],"\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",[34,137876,137874],{"__ignoreMap":32},[14,137878,137879],{},"如果想让多个元素都发生变化",[14,137881,137882],{},"不能如下操作：",[14,137884,137885],{},"transition: width 2s ease 0.5s;",[14,137887,137888],{},"transition: height 2s ease 0.5s;不对！！！",[14,137890,137891],{},"上方会样式冲突，导致不显示任何过渡效果",[14,137893,137894],{},"使用如下：加逗号隔开",[14,137896,137897],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,137899,137900],{},"transition all 2s ease;",[175,137902,137904],{"id":137903},"_1426-过渡练习","14.2.6 过渡练习",[158,137906,137907],{},[161,137908,137909],{},"进度条",[119,137911],{"style":126455,"src":137912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[27,137914,137916],{"className":126599,"code":137915,"language":126601,"meta":32,"style":32},"div {\n  transition: all 0.3s ease;\n}\n",[34,137917,137918,137924,137942],{"__ignoreMap":32},[37,137919,137920,137922],{"class":39,"line":40},[37,137921,51679],{"class":51368},[37,137923,15644],{"class":54},[37,137925,137926,137929,137931,137933,137936,137938,137940],{"class":39,"line":47},[37,137927,137928],{"class":82},"  transition",[37,137930,51505],{"class":54},[37,137932,28194],{"class":82},[37,137934,137935],{"class":82}," 0.3",[37,137937,898],{"class":50},[37,137939,78748],{"class":82},[37,137941,1364],{"class":54},[37,137943,137944],{"class":39,"line":58},[37,137945,1637],{"class":54},[158,137947,137948],{"start":47},[161,137949,137950],{},"小米logo",[14,137952,137953],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[27,137955,137957],{"className":126599,"code":137956,"language":126601,"meta":32,"style":32},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[34,137958,137959,137964,137970,137986,137991],{"__ignoreMap":32},[37,137960,137961],{"class":39,"line":40},[37,137962,137963],{"class":43},"\u002F* CSS3 过渡 *\u002F\n",[37,137965,137966,137968],{"class":39,"line":47},[37,137967,51679],{"class":51368},[37,137969,15644],{"class":54},[37,137971,137972,137974,137976,137978,137980,137982,137984],{"class":39,"line":58},[37,137973,137928],{"class":82},[37,137975,51505],{"class":54},[37,137977,28194],{"class":82},[37,137979,137935],{"class":82},[37,137981,898],{"class":50},[37,137983,78748],{"class":82},[37,137985,1364],{"class":54},[37,137987,137988],{"class":39,"line":64},[37,137989,137990],{"class":43},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[37,137992,137993],{"class":39,"line":76},[37,137994,1637],{"class":54},[14,137996,137997],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[123,137999,138000],{},"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":32,"searchDepth":47,"depth":47,"links":138002},[138003,138008],{"id":136333,"depth":47,"text":136334,"children":138004},[138005,138006,138007],{"id":136337,"depth":58,"text":136338},{"id":136414,"depth":58,"text":136415},{"id":136745,"depth":58,"text":136746},{"id":137036,"depth":47,"text":137037,"children":138009},[138010,138011],{"id":137040,"depth":58,"text":137041},{"id":137903,"depth":58,"text":137904},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136325,"description":128},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138018,"title":138019,"body":138020,"description":128,"extension":129,"meta":139764,"navigation":131,"path":139765,"seo":139766,"stem":139767,"__hash__":139768},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138021,"toc":139745},[138022,138025,138029,138032,138038,138044,138048,138050,138053,138056,138059,138062,138065,138068,138071,138075,138079,138082,138085,138088,138092,138095,138098,138103,138106,138109,138112,138116,138119,138128,138131,138134,138138,138141,138144,138149,138156,138170,138178,138185,138190,138193,138196,138199,138206,138210,138216,138222,138225,138228,138233,138239,138241,138249,138254,138257,138263,138265,138270,138275,138278,138280,138285,138288,138293,138298,138332,138336,138340,138343,138347,138350,138436,138439,138476,138479,138515,138519,138524,138537,138591,138593,138621,138623,138651,138657,138671,138673,138717,138719,138763,138766,138773,138784,138786,138813,138815,138841,138848,138864,138866,138960,138962,139056,139063,139066,139071,139077,139151,139154,139156,139192,139194,139230,139233,139240,139259,139262,139265,139267,139292,139294,139318,139321,139324,139354,139358,139361,139424,139426,139492,139494,139558,139561,139593,139595,139621,139623,139649,139652,139683,139685,139711,139713,139739,139742],[10,138023,138019],{"id":138024},"_15-品优购项目上篇-搭建与公共模块",[146,138026,138028],{"id":138027},"_151-项目规划","15.1 项目规划",[119,138030],{"style":126455,"src":138031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,138033,138034,138037],{},[354,138035,138036],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,138039,138040,138043],{},[354,138041,138042],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[146,138045,138047],{"id":138046},"_152-项目介绍","15.2 项目介绍",[14,138049,138036],{},[119,138051],{"style":126455,"src":138052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,138054,138055],{},"主页：",[119,138057],{"style":126455,"src":138058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,138060,138061],{},"列表页：",[119,138063],{"style":126455,"src":138064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138066,138067],{},"注册页：",[119,138069],{"style":126455,"src":138070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[146,138072,138074],{"id":138073},"_153-项目搭建工作","15.3 项目搭建工作",[175,138076,138078],{"id":138077},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[119,138080],{"style":126455,"src":138081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138083,138084],{},"经常更换的图片要放到upload文件夹中",[14,138086,138087],{},"不经常换的放到images文件夹中",[175,138089,138091],{"id":138090},"_1532-创建文件如下","15.3.2 创建文件如下",[119,138093],{"style":126455,"src":138094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[119,138096],{"style":126455,"src":138097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138099,138100],{},[354,138101,138102],{},"初始化样式：",[14,138104,138105],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138107,138108],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138110,138111],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[175,138113,138115],{"id":138114},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138117,138118],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138120,138121,138122,138127],{},"这里最典型的应用就是 ",[354,138123,138124],{},[34,138125,138126],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[119,138129],{"style":126455,"src":138130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138132,138133],{},"通过link方法来引入",[175,138135,138137],{"id":138136},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[119,138139],{"style":126455,"src":138140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138142,138143],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[158,138145,138146],{},[161,138147,138148],{},"制作favicon图标",[14,138150,138151,138152,138155],{},"①把品优购图标切成 ",[34,138153,138154],{},"png"," 图片",[14,138157,138158,138159,138161,138162,138165,138166],{},"②把 ",[34,138160,138154],{}," 图片转换为 ",[34,138163,138164],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[443,138167,138168],{"href":138168,"rel":138169},"http:\u002F\u002Fwww.bitbug.net\u002F",[23937],[158,138171,138172,138175],{"start":47},[161,138173,138174],{},"favicon图标放到网站根目录下",[161,138176,138177],{},"HTML页面引入favicon",[14,138179,138180,138181,138184],{},"在html 页面里面的 ",[34,138182,138183],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138186,138187],{},[34,138188,138189],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138191,138192],{},"复制这行代码或者在生成这个的网站进行复制",[119,138194],{"style":126455,"src":138195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138197,138198],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138200,138201,138202],{},"例如:",[443,138203,138204],{"href":138204,"rel":138205},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23937],[175,138207,138209],{"id":138208},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138211,138212,138215],{},[354,138213,138214],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138217,138218,138221],{},[354,138219,138220],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138223,138224],{},"页面必须有三个标签用来符合 SEO 优化",[119,138226],{"style":126455,"src":138227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[158,138229,138230],{},[161,138231,138232],{},"title网站标题",[14,138234,138235,138238],{},[354,138236,138237],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138240,68858],{},[1210,138242,138243,138246],{},[161,138244,138245],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[161,138247,138248],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[158,138250,138251],{"start":47},[161,138252,138253],{},"description网站描述",[14,138255,138256],{},"简要说明我们网站主要是做什么的",[14,138258,138259,138262],{},[354,138260,138261],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138264,68858],{},[14,138266,138267],{},[34,138268,138269],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[158,138271,138272],{"start":58},[161,138273,138274],{},"keywords关键词",[14,138276,138277],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138279,68858],{},[14,138281,138282],{},[34,138283,138284],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138286,138287],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138289,138290],{},[354,138291,138292],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[158,138294,138295],{"start":64},[161,138296,138297],{},"代码总结",[27,138299,138300],{"className":127346,"code":130703,"language":127348,"meta":32,"style":32},[34,138301,138302,138306,138320,138324],{"__ignoreMap":32},[37,138303,138304],{"class":39,"line":40},[37,138305,130710],{"class":43},[37,138307,138308,138310,138312,138314,138316,138318],{"class":39,"line":47},[37,138309,1113],{"class":54},[37,138311,51679],{"class":51368},[37,138313,53554],{"class":2035},[37,138315,70],{"class":54},[37,138317,130723],{"class":309},[37,138319,51375],{"class":54},[37,138321,138322],{"class":39,"line":58},[37,138323,130730],{"class":54},[37,138325,138326,138328,138330],{"class":39,"line":64},[37,138327,51853],{"class":54},[37,138329,51679],{"class":51368},[37,138331,51375],{"class":54},[146,138333,138335],{"id":138334},"_154-项目公共部分制作","15.4 项目公共部分制作",[175,138337,138339],{"id":138338},"_1541-常用模块类命名","15.4.1 常用模块类命名",[119,138341],{"style":126455,"src":138342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[175,138344,138346],{"id":138345},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138348,138349],{},"布局思路：",[1210,138351,138352,138355,138358,138380,138413],{},[161,138353,138354],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[161,138356,138357],{},"里面包含版心的盒子",[161,138359,138360,138361],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1210,138362,138363,138371,138377],{},[161,138364,138365,138366,21572,138368,138370],{},"1 号盒子 里面包含一个",[34,138367,1210],{},[34,138369,1210],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[161,138372,138373,138374,138376],{},"里面的内容是水平排列，所以需要给",[34,138375,161],{},"设置浮动",[161,138378,138379],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[161,138381,138382,138383],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1210,138384,138385,138399,138404],{},[161,138386,138387,138388,21572,138390,138392,138393,138395,138396,138398],{},"2 号盒子 里面包含一个",[34,138389,1210],{},[34,138391,1210],{},"包裹",[34,138394,161],{},"，中间的",[34,138397,1124],{},"可以用样式去设置，也可以用字符 |",[161,138400,138401,138402,138376],{},"里面内容水平排列，给",[34,138403,161],{},[161,138405,138406,138407,138409,138410,138412],{},"找到里面所有偶数的 ",[34,138408,161],{}," 设置样式（偶数的 ",[34,138411,161],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[161,138414,138415,138416],{},"需要用到字体图标",[1210,138417,138418,138424,138427,138430,138433],{},[161,138419,138420,138421],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[34,138422,138423],{},"arrow-icon",[161,138425,138426],{},"先要引入字体图片的资源",[161,138428,138429],{},"在样式里面利用 font-face 来进行声明",[161,138431,138432],{},"在伪元素的 content属性设置 图标的编码",[161,138434,138435],{},"给伪元素设置font-family属性",[14,138437,138438],{},"结构实例代码：",[27,138440,138442],{"className":126599,"code":138441,"language":126601,"meta":32,"style":32},"div::before {\n  content: \"\";\n  display: block;\n}\n",[34,138443,138444,138452,138462,138472],{"__ignoreMap":32},[37,138445,138446,138448,138450],{"class":39,"line":40},[37,138447,51679],{"class":51368},[37,138449,137600],{"class":2035},[37,138451,15644],{"class":54},[37,138453,138454,138456,138458,138460],{"class":39,"line":47},[37,138455,137607],{"class":82},[37,138457,51505],{"class":54},[37,138459,7724],{"class":309},[37,138461,1364],{"class":54},[37,138463,138464,138466,138468,138470],{"class":39,"line":58},[37,138465,128215],{"class":82},[37,138467,51505],{"class":54},[37,138469,60937],{"class":82},[37,138471,1364],{"class":54},[37,138473,138474],{"class":39,"line":64},[37,138475,1637],{"class":54},[14,138477,138478],{},"样式实例代码：",[27,138480,138481],{"className":126599,"code":138441,"language":126601,"meta":32,"style":32},[34,138482,138483,138491,138501,138511],{"__ignoreMap":32},[37,138484,138485,138487,138489],{"class":39,"line":40},[37,138486,51679],{"class":51368},[37,138488,137600],{"class":2035},[37,138490,15644],{"class":54},[37,138492,138493,138495,138497,138499],{"class":39,"line":47},[37,138494,137607],{"class":82},[37,138496,51505],{"class":54},[37,138498,7724],{"class":309},[37,138500,1364],{"class":54},[37,138502,138503,138505,138507,138509],{"class":39,"line":58},[37,138504,128215],{"class":82},[37,138506,51505],{"class":54},[37,138508,60937],{"class":82},[37,138510,1364],{"class":54},[37,138512,138513],{"class":39,"line":64},[37,138514,1637],{"class":54},[175,138516,138518],{"id":138517},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1210,138520,138521],{},[161,138522,138523],{},"header 盒子必须要有高度",[14,138525,138526,138527,138529,138530],{},"1 号盒子是 ",[34,138528,131611],{}," 标志定位，在正常开发过程中， ",[354,138531,138532,138533,138536],{},"logo的布局其实是有讲究的，需要进行 ",[34,138534,138535],{},"logoSEO","的优化 （★★★）",[1210,138538,138539,138547,138555,138582],{},[161,138540,138541,138543,138544,138546],{},[34,138542,131611],{}," 里面首先放一个 ",[34,138545,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[161,138548,138549,138551,138552,138554],{},[34,138550,10],{}," 里面再放一个链接，可以返回首页的，把 ",[34,138553,131611],{}," 的背景图片给链接即可",[161,138556,138557,138558],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1210,138559,138560,138575],{},[161,138561,138562,138563,138566,138567,138570,138571,138574],{},"方法1：",[34,138564,138565],{},"text-indent"," 移到盒子外面（",[34,138568,138569],{},"text-indent: -9999px",") ，然后 ",[34,138572,138573],{},"overflow:hidden"," ，淘宝的做法",[161,138576,138577,138578,138581],{},"方法2：直接给 ",[34,138579,138580],{},"font-size: 0;"," 就看不到文字了，京东的做法",[161,138583,138584,138585,138587,138588,138590],{},"最后给链接一个 ",[34,138586,51475],{}," 属性，这样鼠标放到 ",[34,138589,131611],{}," 上就可以看到提示文字了",[14,138592,138438],{},[27,138594,138595],{"className":127346,"code":131832,"language":127348,"meta":32,"style":32},[34,138596,138597],{"__ignoreMap":32},[37,138598,138599,138601,138603,138605,138607,138609,138611,138613,138615,138617,138619],{"class":39,"line":40},[37,138600,1113],{"class":54},[37,138602,443],{"class":51368},[37,138604,61125],{"class":2035},[37,138606,70],{"class":54},[37,138608,131847],{"class":309},[37,138610,131850],{"class":2035},[37,138612,70],{"class":54},[37,138614,131855],{"class":309},[37,138616,131858],{"class":54},[37,138618,443],{"class":51368},[37,138620,51375],{"class":54},[14,138622,138478],{},[27,138624,138625],{"className":127346,"code":131832,"language":127348,"meta":32,"style":32},[34,138626,138627],{"__ignoreMap":32},[37,138628,138629,138631,138633,138635,138637,138639,138641,138643,138645,138647,138649],{"class":39,"line":40},[37,138630,1113],{"class":54},[37,138632,443],{"class":51368},[37,138634,61125],{"class":2035},[37,138636,70],{"class":54},[37,138638,131847],{"class":309},[37,138640,131850],{"class":2035},[37,138642,70],{"class":54},[37,138644,131855],{"class":309},[37,138646,131858],{"class":54},[37,138648,443],{"class":51368},[37,138650,51375],{"class":54},[14,138652,138653,138654,138656],{},"2 号盒子是 ",[34,138655,131624],{}," 搜索模块定位",[1210,138658,138659,138662,138665,138668],{},[161,138660,138661],{},"search盒子利用定位的方式放在对应的位置",[161,138663,138664],{},"search盒子设置绝对定位，header盒子设置相对定位",[161,138666,138667],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[161,138669,138670],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,138672,138438],{},[27,138674,138675],{"className":126599,"code":131919,"language":126601,"meta":32,"style":32},[34,138676,138677,138699,138703,138713],{"__ignoreMap":32},[37,138678,138679,138681,138683,138685,138687,138689,138691,138693,138695,138697],{"class":39,"line":40},[37,138680,51679],{"class":51368},[37,138682,12507],{"class":54},[37,138684,14],{"class":51368},[37,138686,12507],{"class":54},[37,138688,10],{"class":51368},[37,138690,12507],{"class":54},[37,138692,1210],{"class":51368},[37,138694,12507],{"class":54},[37,138696,161],{"class":51368},[37,138698,15644],{"class":54},[37,138700,138701],{"class":39,"line":47},[37,138702,131948],{"class":43},[37,138704,138705,138707,138709,138711],{"class":39,"line":58},[37,138706,128215],{"class":82},[37,138708,51505],{"class":54},[37,138710,60937],{"class":82},[37,138712,1364],{"class":54},[37,138714,138715],{"class":39,"line":64},[37,138716,1637],{"class":54},[14,138718,138478],{},[27,138720,138721],{"className":126599,"code":131919,"language":126601,"meta":32,"style":32},[34,138722,138723,138745,138749,138759],{"__ignoreMap":32},[37,138724,138725,138727,138729,138731,138733,138735,138737,138739,138741,138743],{"class":39,"line":40},[37,138726,51679],{"class":51368},[37,138728,12507],{"class":54},[37,138730,14],{"class":51368},[37,138732,12507],{"class":54},[37,138734,10],{"class":51368},[37,138736,12507],{"class":54},[37,138738,1210],{"class":51368},[37,138740,12507],{"class":54},[37,138742,161],{"class":51368},[37,138744,15644],{"class":54},[37,138746,138747],{"class":39,"line":47},[37,138748,131948],{"class":43},[37,138750,138751,138753,138755,138757],{"class":39,"line":58},[37,138752,128215],{"class":82},[37,138754,51505],{"class":54},[37,138756,60937],{"class":82},[37,138758,1364],{"class":54},[37,138760,138761],{"class":39,"line":64},[37,138762,1637],{"class":54},[14,138764,138765],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,138767,138768,138769,138772],{},"3 号盒子是 ",[34,138770,138771],{},"hotwords"," 热词模块定位",[1210,138774,138775,138778,138781],{},[161,138776,138777],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[161,138779,138780],{},"给里面所有的a标签设置 左右10px的外边距",[161,138782,138783],{},"给第一个a标签设置文字变红色（#c81623）",[14,138785,138438],{},[27,138787,138789],{"className":126599,"code":138788,"language":126601,"meta":32,"style":32},"div {\n  margin: 0 auto;\n}\n",[34,138790,138791,138797,138809],{"__ignoreMap":32},[37,138792,138793,138795],{"class":39,"line":40},[37,138794,51679],{"class":51368},[37,138796,15644],{"class":54},[37,138798,138799,138801,138803,138805,138807],{"class":39,"line":47},[37,138800,70538],{"class":82},[37,138802,51505],{"class":54},[37,138804,396],{"class":82},[37,138806,51624],{"class":82},[37,138808,1364],{"class":54},[37,138810,138811],{"class":39,"line":58},[37,138812,1637],{"class":54},[14,138814,138478],{},[27,138816,138817],{"className":126599,"code":138788,"language":126601,"meta":32,"style":32},[34,138818,138819,138825,138837],{"__ignoreMap":32},[37,138820,138821,138823],{"class":39,"line":40},[37,138822,51679],{"class":51368},[37,138824,15644],{"class":54},[37,138826,138827,138829,138831,138833,138835],{"class":39,"line":47},[37,138828,70538],{"class":82},[37,138830,51505],{"class":54},[37,138832,396],{"class":82},[37,138834,51624],{"class":82},[37,138836,1364],{"class":54},[37,138838,138839],{"class":39,"line":58},[37,138840,1637],{"class":54},[14,138842,138843,138844,138847],{},"4 号盒子是 ",[34,138845,138846],{},"shopcar"," 购物车模块",[1210,138849,138850,138855,138858,138861],{},[161,138851,123382,138852,138854],{},[34,138853,138846],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[161,138856,138857],{},"count 统计部分用绝对定位做",[161,138859,138860],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[161,138862,138863],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,138865,138438],{},[27,138867,138868],{"className":126599,"code":132031,"language":126601,"meta":32,"style":32},[34,138869,138870,138874,138888,138892,138906,138910,138924,138928,138942,138946],{"__ignoreMap":32},[37,138871,138872],{"class":39,"line":40},[37,138873,132038],{"class":43},[37,138875,138876,138878,138880,138882,138884,138886],{"class":39,"line":47},[37,138877,132043],{"class":2035},[37,138879,79875],{"class":54},[37,138881,128959],{"class":82},[37,138883,51505],{"class":54},[37,138885,132052],{"class":82},[37,138887,129529],{"class":54},[37,138889,138890],{"class":39,"line":58},[37,138891,132059],{"class":43},[37,138893,138894,138896,138898,138900,138902,138904],{"class":39,"line":64},[37,138895,132064],{"class":2035},[37,138897,79875],{"class":54},[37,138899,128959],{"class":82},[37,138901,51505],{"class":54},[37,138903,54832],{"class":82},[37,138905,129529],{"class":54},[37,138907,138908],{"class":39,"line":76},[37,138909,132079],{"class":43},[37,138911,138912,138914,138916,138918,138920,138922],{"class":39,"line":92},[37,138913,132084],{"class":2035},[37,138915,79875],{"class":54},[37,138917,128959],{"class":82},[37,138919,51505],{"class":54},[37,138921,54899],{"class":82},[37,138923,129529],{"class":54},[37,138925,138926],{"class":39,"line":97},[37,138927,132099],{"class":43},[37,138929,138930,138932,138934,138936,138938,138940],{"class":39,"line":107},[37,138931,132104],{"class":2035},[37,138933,79875],{"class":54},[37,138935,128959],{"class":82},[37,138937,51505],{"class":54},[37,138939,86301],{"class":82},[37,138941,129529],{"class":54},[37,138943,138944],{"class":39,"line":1390},[37,138945,132119],{"class":43},[37,138947,138948,138950,138952,138954,138956,138958],{"class":39,"line":1402},[37,138949,132124],{"class":2035},[37,138951,79875],{"class":54},[37,138953,128959],{"class":82},[37,138955,51505],{"class":54},[37,138957,132133],{"class":82},[37,138959,129529],{"class":54},[14,138961,138478],{},[27,138963,138964],{"className":126599,"code":132031,"language":126601,"meta":32,"style":32},[34,138965,138966,138970,138984,138988,139002,139006,139020,139024,139038,139042],{"__ignoreMap":32},[37,138967,138968],{"class":39,"line":40},[37,138969,132038],{"class":43},[37,138971,138972,138974,138976,138978,138980,138982],{"class":39,"line":47},[37,138973,132043],{"class":2035},[37,138975,79875],{"class":54},[37,138977,128959],{"class":82},[37,138979,51505],{"class":54},[37,138981,132052],{"class":82},[37,138983,129529],{"class":54},[37,138985,138986],{"class":39,"line":58},[37,138987,132059],{"class":43},[37,138989,138990,138992,138994,138996,138998,139000],{"class":39,"line":64},[37,138991,132064],{"class":2035},[37,138993,79875],{"class":54},[37,138995,128959],{"class":82},[37,138997,51505],{"class":54},[37,138999,54832],{"class":82},[37,139001,129529],{"class":54},[37,139003,139004],{"class":39,"line":76},[37,139005,132079],{"class":43},[37,139007,139008,139010,139012,139014,139016,139018],{"class":39,"line":92},[37,139009,132084],{"class":2035},[37,139011,79875],{"class":54},[37,139013,128959],{"class":82},[37,139015,51505],{"class":54},[37,139017,54899],{"class":82},[37,139019,129529],{"class":54},[37,139021,139022],{"class":39,"line":97},[37,139023,132099],{"class":43},[37,139025,139026,139028,139030,139032,139034,139036],{"class":39,"line":107},[37,139027,132104],{"class":2035},[37,139029,79875],{"class":54},[37,139031,128959],{"class":82},[37,139033,51505],{"class":54},[37,139035,86301],{"class":82},[37,139037,129529],{"class":54},[37,139039,139040],{"class":39,"line":1390},[37,139041,132119],{"class":43},[37,139043,139044,139046,139048,139050,139052,139054],{"class":39,"line":1402},[37,139045,132124],{"class":2035},[37,139047,79875],{"class":54},[37,139049,128959],{"class":82},[37,139051,51505],{"class":54},[37,139053,132133],{"class":82},[37,139055,129529],{"class":54},[175,139057,139059,139060,139062],{"id":139058},"_1544-nav导航模块制作","15.4.4 ",[34,139061,53781],{},"导航模块制作",[119,139064],{"style":126455,"src":139065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139067,139068,139070],{},[34,139069,53781],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139072,139073,139074],{},"1 号盒子左侧浮动，",[34,139075,139076],{},"dropdown",[1210,139078,139079,139089,139097,139103,139111,139121,139129,139140],{},[161,139080,139081,139082,101065,139085,139088],{},"1号盒子有讲究，根据相关性 里面包含 ",[34,139083,139084],{},".dt",[34,139086,139087],{},".dd"," 两个盒子",[161,139090,139091,139093,139094,139096],{},[34,139092,139084],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[34,139095,139087],{}," 挤到下面去了",[161,139098,139099,139100,139102],{},"给 ",[34,139101,139087],{}," 盒子设置宽度 和 高度，以及背景颜色",[161,139104,139099,139105,139107,139108,120284],{},[34,139106,139087],{}," 盒子里面定义 无序列表 （",[34,139109,139110],{},"ul > li > a",[161,139112,139113,139114,139116,139117,139120],{},"每个 ",[34,139115,161],{}," 都有一个高度（",[34,139118,139119],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[161,139122,139099,139123,139125,139126,120284],{},[34,139124,161],{}," 里面的a设置文字大小（",[34,139127,139128],{},"14px",[161,139130,139099,139131,139133,139134,139136,139137,139139],{},[34,139132,161],{}," 设置 ",[34,139135,127760],{},"，当鼠标移入的时候，让",[34,139138,161],{},"的背景变成白色，让里面的文字变成红色",[161,139141,139142,139144,139145,139147,139148,139150],{},[34,139143,161],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[34,139146,161],{},"的右侧，那么给",[34,139149,161],{},"设置相对定位",[14,139152,139153],{},"一定要注意相关性",[14,139155,138438],{},[27,139157,139158],{"className":126599,"code":138441,"language":126601,"meta":32,"style":32},[34,139159,139160,139168,139178,139188],{"__ignoreMap":32},[37,139161,139162,139164,139166],{"class":39,"line":40},[37,139163,51679],{"class":51368},[37,139165,137600],{"class":2035},[37,139167,15644],{"class":54},[37,139169,139170,139172,139174,139176],{"class":39,"line":47},[37,139171,137607],{"class":82},[37,139173,51505],{"class":54},[37,139175,7724],{"class":309},[37,139177,1364],{"class":54},[37,139179,139180,139182,139184,139186],{"class":39,"line":58},[37,139181,128215],{"class":82},[37,139183,51505],{"class":54},[37,139185,60937],{"class":82},[37,139187,1364],{"class":54},[37,139189,139190],{"class":39,"line":64},[37,139191,1637],{"class":54},[14,139193,138478],{},[27,139195,139196],{"className":126599,"code":138441,"language":126601,"meta":32,"style":32},[34,139197,139198,139206,139216,139226],{"__ignoreMap":32},[37,139199,139200,139202,139204],{"class":39,"line":40},[37,139201,51679],{"class":51368},[37,139203,137600],{"class":2035},[37,139205,15644],{"class":54},[37,139207,139208,139210,139212,139214],{"class":39,"line":47},[37,139209,137607],{"class":82},[37,139211,51505],{"class":54},[37,139213,7724],{"class":309},[37,139215,1364],{"class":54},[37,139217,139218,139220,139222,139224],{"class":39,"line":58},[37,139219,128215],{"class":82},[37,139221,51505],{"class":54},[37,139223,60937],{"class":82},[37,139225,1364],{"class":54},[37,139227,139228],{"class":39,"line":64},[37,139229,1637],{"class":54},[14,139231,139232],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139234,139235,139236,139239],{},"2 号盒子左侧浮动，",[34,139237,139238],{},"navitems"," 导航栏组",[1210,139241,139242,139247,139256],{},[161,139243,139244,139245],{},"里面结构是 ",[34,139246,139110],{},[161,139248,139249,139250,139252,139253,139255],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[34,139251,443],{},"左右的",[34,139254,30953],{},"把两侧撑开",[161,139257,139258],{},"让文字垂直居中（行高等于高度）",[119,139260],{"style":126455,"src":139261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139263,139264],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139266,138438],{},[27,139268,139270],{"className":126599,"code":139269,"language":126601,"meta":32,"style":32},".box {\n  float: left;\n}\n",[34,139271,139272,139278,139288],{"__ignoreMap":32},[37,139273,139274,139276],{"class":39,"line":40},[37,139275,130447],{"class":2035},[37,139277,15644],{"class":54},[37,139279,139280,139282,139284,139286],{"class":39,"line":47},[37,139281,131079],{"class":82},[37,139283,51505],{"class":54},[37,139285,23808],{"class":82},[37,139287,1364],{"class":54},[37,139289,139290],{"class":39,"line":58},[37,139291,1637],{"class":54},[14,139293,138478],{},[27,139295,139296],{"className":126599,"code":139269,"language":126601,"meta":32,"style":32},[34,139297,139298,139304,139314],{"__ignoreMap":32},[37,139299,139300,139302],{"class":39,"line":40},[37,139301,130447],{"class":2035},[37,139303,15644],{"class":54},[37,139305,139306,139308,139310,139312],{"class":39,"line":47},[37,139307,131079],{"class":82},[37,139309,51505],{"class":54},[37,139311,23808],{"class":82},[37,139313,1364],{"class":54},[37,139315,139316],{"class":39,"line":58},[37,139317,1637],{"class":54},[14,139319,139320],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[119,139322],{"style":126455,"src":139323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[27,139325,139326],{"className":126599,"code":130756,"language":126601,"meta":32,"style":32},[34,139327,139328,139334,139350],{"__ignoreMap":32},[37,139329,139330,139332],{"class":39,"line":40},[37,139331,51679],{"class":51368},[37,139333,15644],{"class":54},[37,139335,139336,139338,139340,139342,139344,139346,139348],{"class":39,"line":47},[37,139337,70964],{"class":82},[37,139339,51505],{"class":54},[37,139341,422],{"class":82},[37,139343,51560],{"class":50},[37,139345,51589],{"class":82},[37,139347,129991],{"class":82},[37,139349,1364],{"class":54},[37,139351,139352],{"class":39,"line":58},[37,139353,1637],{"class":54},[175,139355,139357],{"id":139356},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[119,139359],{"style":126455,"src":139360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1210,139362,139363,139368,139373],{},[161,139364,139365,139367],{},[34,139366,131802],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[161,139369,139370,139372],{},[34,139371,131802],{}," 里面有一个大的版心",[161,139374,139375,139376,139379,139380],{},"版心里面包含 1 号盒子，",[34,139377,139378],{},"mod_service"," 是服务模块，mod 是模块的意思",[1210,139381,139382,139387,139400,139416,139421],{},[161,139383,139099,139384,139386],{},[34,139385,139378],{}," 设置高度（80px）和下边框",[161,139388,139389,139390,139393,139394,139396,139397,139399],{},"在里面定义 ",[34,139391,139392],{},"ul > li"," ,每个",[34,139395,161],{}," 宽度是300px 高度是 50px，给每个",[34,139398,161],{},"设置35px的左内边距",[161,139401,139402,139403,139405,139406,139408,139409,139411,139412,18482,139414,120284],{},"在每个",[34,139404,161],{},"里面，放一个 ",[34,139407,22982],{},"（里面放图标），一个",[34,139410,51679],{},"（里面放",[34,139413,51679],{},[34,139415,14],{},[161,139417,139099,139418,139420],{},[34,139419,22982],{},"设置浮动，让h5与这个div左右排列",[161,139422,139423],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,139425,138438],{},[27,139427,139429],{"className":126599,"code":139428,"language":126601,"meta":32,"style":32},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[34,139430,139431,139437,139449,139461,139488],{"__ignoreMap":32},[37,139432,139433,139435],{"class":39,"line":40},[37,139434,134356],{"class":2035},[37,139436,15644],{"class":54},[37,139438,139439,139441,139443,139445,139447],{"class":39,"line":47},[37,139440,70636],{"class":82},[37,139442,51505],{"class":54},[37,139444,903],{"class":82},[37,139446,51560],{"class":50},[37,139448,1364],{"class":54},[37,139450,139451,139453,139455,139457,139459],{"class":39,"line":58},[37,139452,70856],{"class":82},[37,139454,51505],{"class":54},[37,139456,903],{"class":82},[37,139458,51560],{"class":50},[37,139460,1364],{"class":54},[37,139462,139463,139465,139467,139469,139471,139473,139475,139477,139480,139482,139484,139486],{"class":39,"line":64},[37,139464,70679],{"class":82},[37,139466,51505],{"class":54},[37,139468,61794],{"class":82},[37,139470,208],{"class":54},[37,139472,134395],{"class":5288},[37,139474,13786],{"class":54},[37,139476,61804],{"class":82},[37,139478,139479],{"class":82}," -10",[37,139481,51560],{"class":50},[37,139483,134414],{"class":82},[37,139485,51560],{"class":50},[37,139487,1364],{"class":54},[37,139489,139490],{"class":39,"line":76},[37,139491,1637],{"class":54},[14,139493,138478],{},[27,139495,139496],{"className":126599,"code":139428,"language":126601,"meta":32,"style":32},[34,139497,139498,139504,139516,139528,139554],{"__ignoreMap":32},[37,139499,139500,139502],{"class":39,"line":40},[37,139501,134356],{"class":2035},[37,139503,15644],{"class":54},[37,139505,139506,139508,139510,139512,139514],{"class":39,"line":47},[37,139507,70636],{"class":82},[37,139509,51505],{"class":54},[37,139511,903],{"class":82},[37,139513,51560],{"class":50},[37,139515,1364],{"class":54},[37,139517,139518,139520,139522,139524,139526],{"class":39,"line":58},[37,139519,70856],{"class":82},[37,139521,51505],{"class":54},[37,139523,903],{"class":82},[37,139525,51560],{"class":50},[37,139527,1364],{"class":54},[37,139529,139530,139532,139534,139536,139538,139540,139542,139544,139546,139548,139550,139552],{"class":39,"line":64},[37,139531,70679],{"class":82},[37,139533,51505],{"class":54},[37,139535,61794],{"class":82},[37,139537,208],{"class":54},[37,139539,134395],{"class":5288},[37,139541,13786],{"class":54},[37,139543,61804],{"class":82},[37,139545,139479],{"class":82},[37,139547,51560],{"class":50},[37,139549,134414],{"class":82},[37,139551,51560],{"class":50},[37,139553,1364],{"class":54},[37,139555,139556],{"class":39,"line":76},[37,139557,1637],{"class":54},[14,139559,139560],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1210,139562,139563,139566,139572,139578,139590],{},[161,139564,139565],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[161,139567,139568,139569,120284],{},"里面的布局利用 自定义列表来实现（",[34,139570,139571],{},"dl > dt + dd",[161,139573,139099,139574,139577],{},[34,139575,139576],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[161,139579,139099,139580,139583,139584,18482,139586,139589],{},[34,139581,139582],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[34,139585,139582],{},[34,139587,139588],{},"dd","之间有些距离",[161,139591,139592],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,139594,138438],{},[27,139596,139597],{"className":126599,"code":138788,"language":126601,"meta":32,"style":32},[34,139598,139599,139605,139617],{"__ignoreMap":32},[37,139600,139601,139603],{"class":39,"line":40},[37,139602,51679],{"class":51368},[37,139604,15644],{"class":54},[37,139606,139607,139609,139611,139613,139615],{"class":39,"line":47},[37,139608,70538],{"class":82},[37,139610,51505],{"class":54},[37,139612,396],{"class":82},[37,139614,51624],{"class":82},[37,139616,1364],{"class":54},[37,139618,139619],{"class":39,"line":58},[37,139620,1637],{"class":54},[14,139622,138478],{},[27,139624,139625],{"className":126599,"code":138788,"language":126601,"meta":32,"style":32},[34,139626,139627,139633,139645],{"__ignoreMap":32},[37,139628,139629,139631],{"class":39,"line":40},[37,139630,51679],{"class":51368},[37,139632,15644],{"class":54},[37,139634,139635,139637,139639,139641,139643],{"class":39,"line":47},[37,139636,70538],{"class":82},[37,139638,51505],{"class":54},[37,139640,396],{"class":82},[37,139642,51624],{"class":82},[37,139644,1364],{"class":54},[37,139646,139647],{"class":39,"line":58},[37,139648,1637],{"class":54},[14,139650,139651],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1210,139653,139654,139663,139666,139677],{},[161,139655,139656,139657,139659,139660,139662],{},"分为上下两块，上面是 ",[34,139658,131819],{}," 友情链接，下面是 ",[34,139661,131812],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[161,139664,139665],{},"把内容分别复制到相应模块中",[161,139667,139099,139668,139670,139671,139673,139674,139676],{},[34,139669,131819],{}," 设置 15px 的下外边距，给",[34,139672,131819],{}," 里面 的 ",[34,139675,443],{}," 标签设置 左右 3px 的外边距",[161,139678,139679,139680,139682],{},"给",[34,139681,131812],{}," 设置 20px 的行高",[14,139684,138438],{},[27,139686,139687],{"className":126599,"code":138788,"language":126601,"meta":32,"style":32},[34,139688,139689,139695,139707],{"__ignoreMap":32},[37,139690,139691,139693],{"class":39,"line":40},[37,139692,51679],{"class":51368},[37,139694,15644],{"class":54},[37,139696,139697,139699,139701,139703,139705],{"class":39,"line":47},[37,139698,70538],{"class":82},[37,139700,51505],{"class":54},[37,139702,396],{"class":82},[37,139704,51624],{"class":82},[37,139706,1364],{"class":54},[37,139708,139709],{"class":39,"line":58},[37,139710,1637],{"class":54},[14,139712,138478],{},[27,139714,139715],{"className":126599,"code":138788,"language":126601,"meta":32,"style":32},[34,139716,139717,139723,139735],{"__ignoreMap":32},[37,139718,139719,139721],{"class":39,"line":40},[37,139720,51679],{"class":51368},[37,139722,15644],{"class":54},[37,139724,139725,139727,139729,139731,139733],{"class":39,"line":47},[37,139726,70538],{"class":82},[37,139728,51505],{"class":54},[37,139730,396],{"class":82},[37,139732,51624],{"class":82},[37,139734,1364],{"class":54},[37,139736,139737],{"class":39,"line":58},[37,139738,1637],{"class":54},[14,139740,139741],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[123,139743,139744],{},"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":32,"searchDepth":47,"depth":47,"links":139746},[139747,139748,139749,139756],{"id":138027,"depth":47,"text":138028},{"id":138046,"depth":47,"text":138047},{"id":138073,"depth":47,"text":138074,"children":139750},[139751,139752,139753,139754,139755],{"id":138077,"depth":58,"text":138078},{"id":138090,"depth":58,"text":138091},{"id":138114,"depth":58,"text":138115},{"id":138136,"depth":58,"text":138137},{"id":138208,"depth":58,"text":138209},{"id":138334,"depth":47,"text":138335,"children":139757},[139758,139759,139760,139761,139763],{"id":138338,"depth":58,"text":138339},{"id":138345,"depth":58,"text":138346},{"id":138517,"depth":58,"text":138518},{"id":139058,"depth":58,"text":139762},"15.4.4 nav导航模块制作",{"id":139356,"depth":58,"text":139357},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138019,"description":128},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139770,"title":139771,"body":139772,"description":128,"extension":129,"meta":142174,"navigation":131,"path":142175,"seo":142176,"stem":142177,"__hash__":142178},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139773,"toc":142151},[139774,139777,139781,139785,139797,139800,139803,139806,139817,139819,139843,139845,139869,139874,139877,139879,139915,139917,139953,139956,139961,139964,139967,139970,140000,140007,140010,140020,140022,140056,140059,140093,140099,140116,140118,140154,140156,140192,140197,140222,140224,140250,140252,140276,140283,140286,140350,140352,140394,140396,140436,140443,140448,140450,140480,140482,140512,140516,140519,140526,140538,140540,140566,140568,140592,140595,140597,140621,140627,140637,140639,140669,140671,140701,140708,140749,140751,140787,140789,140825,140829,140832,140835,140838,140844,140849,140852,140875,140878,140902,140905,140929,140934,140937,140940,140943,140946,140949,141023,141025,141055,141057,141087,141090,141093,141125,141129,141133,141147,141156,141159,141164,141166,141260,141262,141356,141379,141381,141405,141407,141431,141438,141441,141451,141453,141477,141482,141490,141492,141522,141527,141567,141569,141595,141597,141623,141627,141630,141635,141638,141642,141650,141657,141665,141667,141697,141699,141729,141737,141740,141743,141745,141775,141777,141807,141810,141815,141817,141841,141843,141867,141870,141955,141957,141981,141983,142007,142011,142013,142037,142039,142073,142077,142091,142094,142099,142102,142107,142110,142140,142148],[10,139775,139771],{"id":139776},"_16-品优购项目下篇-主体与页面开发",[146,139778,139780],{"id":139779},"_161-项目主体模块制作","16.1 项目主体模块制作",[175,139782,139784],{"id":139783},"_1611-首页制作","16.1.1 首页制作",[14,139786,139787,139789,139790,139792,139793,139796],{},[354,139788,102105],{}," 主体模块是 ",[354,139791,74126],{}," 里面专有的，注意需要新的样式文件 ",[354,139794,139795],{},"index.css，"," 就不要写在common.css中了",[119,139798],{"style":126455,"src":139799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[119,139801],{"style":126455,"src":139802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,139804,139805],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1210,139807,139808,139811,139814],{},[161,139809,139810],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[161,139812,139813],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[161,139815,139816],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,139818,138438],{},[27,139820,139821],{"className":126599,"code":139269,"language":126601,"meta":32,"style":32},[34,139822,139823,139829,139839],{"__ignoreMap":32},[37,139824,139825,139827],{"class":39,"line":40},[37,139826,130447],{"class":2035},[37,139828,15644],{"class":54},[37,139830,139831,139833,139835,139837],{"class":39,"line":47},[37,139832,131079],{"class":82},[37,139834,51505],{"class":54},[37,139836,23808],{"class":82},[37,139838,1364],{"class":54},[37,139840,139841],{"class":39,"line":58},[37,139842,1637],{"class":54},[14,139844,138478],{},[27,139846,139847],{"className":126599,"code":139269,"language":126601,"meta":32,"style":32},[34,139848,139849,139855,139865],{"__ignoreMap":32},[37,139850,139851,139853],{"class":39,"line":40},[37,139852,130447],{"class":2035},[37,139854,15644],{"class":54},[37,139856,139857,139859,139861,139863],{"class":39,"line":47},[37,139858,131079],{"class":82},[37,139860,51505],{"class":54},[37,139862,23808],{"class":82},[37,139864,1364],{"class":54},[37,139866,139867],{"class":39,"line":58},[37,139868,1637],{"class":54},[158,139870,139871],{},[161,139872,139873],{},"左侧focus模块制作",[119,139875],{"style":126455,"src":139876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,139878,138438],{},[27,139880,139881],{"className":126599,"code":127922,"language":126601,"meta":32,"style":32},[34,139882,139883,139891,139901,139911],{"__ignoreMap":32},[37,139884,139885,139887,139889],{"class":39,"line":40},[37,139886,53889],{"class":51368},[37,139888,61968],{"class":2035},[37,139890,15644],{"class":54},[37,139892,139893,139895,139897,139899],{"class":39,"line":47},[37,139894,127937],{"class":82},[37,139896,51505],{"class":54},[37,139898,54957],{"class":82},[37,139900,1364],{"class":54},[37,139902,139903,139905,139907,139909],{"class":39,"line":58},[37,139904,70866],{"class":82},[37,139906,51505],{"class":54},[37,139908,54805],{"class":82},[37,139910,1364],{"class":54},[37,139912,139913],{"class":39,"line":64},[37,139914,1637],{"class":54},[14,139916,138478],{},[27,139918,139919],{"className":126599,"code":127922,"language":126601,"meta":32,"style":32},[34,139920,139921,139929,139939,139949],{"__ignoreMap":32},[37,139922,139923,139925,139927],{"class":39,"line":40},[37,139924,53889],{"class":51368},[37,139926,61968],{"class":2035},[37,139928,15644],{"class":54},[37,139930,139931,139933,139935,139937],{"class":39,"line":47},[37,139932,127937],{"class":82},[37,139934,51505],{"class":54},[37,139936,54957],{"class":82},[37,139938,1364],{"class":54},[37,139940,139941,139943,139945,139947],{"class":39,"line":58},[37,139942,70866],{"class":82},[37,139944,51505],{"class":54},[37,139946,54805],{"class":82},[37,139948,1364],{"class":54},[37,139950,139951],{"class":39,"line":64},[37,139952,1637],{"class":54},[14,139954,139955],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[158,139957,139958],{"start":47},[161,139959,139960],{},"右侧newsflash模块制作",[119,139962],{"style":126455,"src":139963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,139965,139966],{},"右侧的模块 分为上中下三个盒子",[14,139968,139969],{},"结构代码：",[27,139971,139972],{"className":127346,"code":134101,"language":127348,"meta":32,"style":32},[34,139973,139974],{"__ignoreMap":32},[37,139975,139976,139978,139980,139982,139984,139986,139988,139990,139992,139994,139996,139998],{"class":39,"line":40},[37,139977,1113],{"class":54},[37,139979,119],{"class":51368},[37,139981,55307],{"class":2035},[37,139983,70],{"class":54},[37,139985,134116],{"class":309},[37,139987,55315],{"class":2035},[37,139989,70],{"class":54},[37,139991,134123],{"class":309},[37,139993,134126],{"class":2035},[37,139995,70],{"class":54},[37,139997,134131],{"class":309},[37,139999,51375],{"class":54},[14,140001,140002,140003,140006],{},"1 号盒子为 ",[34,140004,140005],{},"news"," 新闻模块 高度为 165px",[119,140008],{"style":126455,"src":140009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,140011,140012,140013,140016,140017],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[34,140014,140015],{},"news-hd","，下面是 ",[34,140018,140019],{},"news-bd",[14,140021,139969],{},[27,140023,140024],{"className":127346,"code":130703,"language":127348,"meta":32,"style":32},[34,140025,140026,140030,140044,140048],{"__ignoreMap":32},[37,140027,140028],{"class":39,"line":40},[37,140029,130710],{"class":43},[37,140031,140032,140034,140036,140038,140040,140042],{"class":39,"line":47},[37,140033,1113],{"class":54},[37,140035,51679],{"class":51368},[37,140037,53554],{"class":2035},[37,140039,70],{"class":54},[37,140041,130723],{"class":309},[37,140043,51375],{"class":54},[37,140045,140046],{"class":39,"line":58},[37,140047,130730],{"class":54},[37,140049,140050,140052,140054],{"class":39,"line":64},[37,140051,51853],{"class":54},[37,140053,51679],{"class":51368},[37,140055,51375],{"class":54},[14,140057,140058],{},"样式代码：",[27,140060,140061],{"className":127346,"code":130703,"language":127348,"meta":32,"style":32},[34,140062,140063,140067,140081,140085],{"__ignoreMap":32},[37,140064,140065],{"class":39,"line":40},[37,140066,130710],{"class":43},[37,140068,140069,140071,140073,140075,140077,140079],{"class":39,"line":47},[37,140070,1113],{"class":54},[37,140072,51679],{"class":51368},[37,140074,53554],{"class":2035},[37,140076,70],{"class":54},[37,140078,130723],{"class":309},[37,140080,51375],{"class":54},[37,140082,140083],{"class":39,"line":58},[37,140084,130730],{"class":54},[37,140086,140087,140089,140091],{"class":39,"line":64},[37,140088,51853],{"class":54},[37,140090,51679],{"class":51368},[37,140092,51375],{"class":54},[14,140094,140095,140096,140098],{},"上面是",[34,140097,140015],{},"，设置高度是 33px，设置下边框",[1210,140100,140101,140107],{},[161,140102,140103,140104,140106],{},"里面放一个",[34,140105,22982],{}," 标题",[161,140108,140109,140110,140112,140113,140115],{},"放一个a",[34,140111,102740],{},"，内容是 更多，然后让 ",[34,140114,443],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140117,139969],{},[27,140119,140120],{"className":126599,"code":138441,"language":126601,"meta":32,"style":32},[34,140121,140122,140130,140140,140150],{"__ignoreMap":32},[37,140123,140124,140126,140128],{"class":39,"line":40},[37,140125,51679],{"class":51368},[37,140127,137600],{"class":2035},[37,140129,15644],{"class":54},[37,140131,140132,140134,140136,140138],{"class":39,"line":47},[37,140133,137607],{"class":82},[37,140135,51505],{"class":54},[37,140137,7724],{"class":309},[37,140139,1364],{"class":54},[37,140141,140142,140144,140146,140148],{"class":39,"line":58},[37,140143,128215],{"class":82},[37,140145,51505],{"class":54},[37,140147,60937],{"class":82},[37,140149,1364],{"class":54},[37,140151,140152],{"class":39,"line":64},[37,140153,1637],{"class":54},[14,140155,140058],{},[27,140157,140158],{"className":126599,"code":138441,"language":126601,"meta":32,"style":32},[34,140159,140160,140168,140178,140188],{"__ignoreMap":32},[37,140161,140162,140164,140166],{"class":39,"line":40},[37,140163,51679],{"class":51368},[37,140165,137600],{"class":2035},[37,140167,15644],{"class":54},[37,140169,140170,140172,140174,140176],{"class":39,"line":47},[37,140171,137607],{"class":82},[37,140173,51505],{"class":54},[37,140175,7724],{"class":309},[37,140177,1364],{"class":54},[37,140179,140180,140182,140184,140186],{"class":39,"line":58},[37,140181,128215],{"class":82},[37,140183,51505],{"class":54},[37,140185,60937],{"class":82},[37,140187,1364],{"class":54},[37,140189,140190],{"class":39,"line":64},[37,140191,1637],{"class":54},[14,140193,140194,140195],{},"下面是",[34,140196,140019],{},[1210,140198,140199,140207],{},[161,140200,140201,140202,101065,140204,140206],{},"里面包含 ",[34,140203,1210],{},[34,140205,161],{}," 还有链接",[161,140208,139679,140209,140211,140212,140214,140215,140218,140219],{},[34,140210,161],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[34,140213,131265],{}," 2.设置 ",[34,140216,140217],{},"white-space: nowrap;"," 3. 设置 ",[34,140220,140221],{},"text-overflow: ellipsis;",[14,140223,139969],{},[27,140225,140227],{"className":126599,"code":140226,"language":126601,"meta":32,"style":32},"div {\n  overflow: hidden;\n}\n",[34,140228,140229,140235,140246],{"__ignoreMap":32},[37,140230,140231,140233],{"class":39,"line":40},[37,140232,51679],{"class":51368},[37,140234,15644],{"class":54},[37,140236,140237,140240,140242,140244],{"class":39,"line":47},[37,140238,140239],{"class":82},"  overflow",[37,140241,51505],{"class":54},[37,140243,61782],{"class":82},[37,140245,1364],{"class":54},[37,140247,140248],{"class":39,"line":58},[37,140249,1637],{"class":54},[14,140251,140058],{},[27,140253,140254],{"className":126599,"code":140226,"language":126601,"meta":32,"style":32},[34,140255,140256,140262,140272],{"__ignoreMap":32},[37,140257,140258,140260],{"class":39,"line":40},[37,140259,51679],{"class":51368},[37,140261,15644],{"class":54},[37,140263,140264,140266,140268,140270],{"class":39,"line":47},[37,140265,140239],{"class":82},[37,140267,51505],{"class":54},[37,140269,61782],{"class":82},[37,140271,1364],{"class":54},[37,140273,140274],{"class":39,"line":58},[37,140275,1637],{"class":54},[14,140277,140278,140279,140282],{},"2 号盒子为 ",[34,140280,140281],{},"lifeservice"," 生活服务模块 高度为 209px",[119,140284],{"style":126455,"src":140285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1210,140287,140288,140291,140301,140325,140336],{},[161,140289,140290],{},"设置边框（左右下边框）",[161,140292,140293,140294,140297,140298,140300],{},"里面的内容 是 ",[34,140295,140296],{},"ul > 12*li","，给",[34,140299,161],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[161,140302,140303,140304],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1210,140305,140306,140311,140320],{},[161,140307,140308,140310],{},[34,140309,140281],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[161,140312,140313,140314,140316,140317,140319],{},"可以让 ",[34,140315,140281],{}," 里面的 ",[34,140318,1210],{}," 宽度为 252，就可以装的下 4 个 小 li",[161,140321,140322,140324],{},[34,140323,140281],{}," 盒子 overflow 隐藏多余的部分就可以了",[161,140326,116514,140327,140329,140330,140332,140333,140335],{},[34,140328,161],{}," 里面放一个 ",[34,140331,645],{},"（里面放图标），下面的文本用 ",[34,140334,14],{}," 标签包裹",[161,140337,139099,140338,140340,140341,140343,140344,139133,140346,140349],{},[34,140339,645],{}," 设置 24px宽和28px的高（注意 ",[34,140342,645],{}," 是行内元素， 转成行内块），给 ",[34,140345,161],{},[34,140347,140348],{},"text-align:center"," 让里面内容居中显示",[14,140351,139969],{},[27,140353,140355],{"className":126599,"code":140354,"language":126601,"meta":32,"style":32},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[34,140356,140357,140375,140380,140390],{"__ignoreMap":32},[37,140358,140359,140361,140363,140365,140367,140369,140371,140373],{"class":39,"line":40},[37,140360,37],{"class":51368},[37,140362,12507],{"class":54},[37,140364,443],{"class":51368},[37,140366,12507],{"class":54},[37,140368,23625],{"class":51368},[37,140370,12507],{"class":54},[37,140372,354],{"class":51368},[37,140374,15644],{"class":54},[37,140376,140377],{"class":39,"line":47},[37,140378,140379],{"class":43},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[37,140381,140382,140384,140386,140388],{"class":39,"line":58},[37,140383,128215],{"class":82},[37,140385,51505],{"class":54},[37,140387,128277],{"class":82},[37,140389,1364],{"class":54},[37,140391,140392],{"class":39,"line":64},[37,140393,1637],{"class":54},[14,140395,140058],{},[27,140397,140398],{"className":126599,"code":140354,"language":126601,"meta":32,"style":32},[34,140399,140400,140418,140422,140432],{"__ignoreMap":32},[37,140401,140402,140404,140406,140408,140410,140412,140414,140416],{"class":39,"line":40},[37,140403,37],{"class":51368},[37,140405,12507],{"class":54},[37,140407,443],{"class":51368},[37,140409,12507],{"class":54},[37,140411,23625],{"class":51368},[37,140413,12507],{"class":54},[37,140415,354],{"class":51368},[37,140417,15644],{"class":54},[37,140419,140420],{"class":39,"line":47},[37,140421,140379],{"class":43},[37,140423,140424,140426,140428,140430],{"class":39,"line":58},[37,140425,128215],{"class":82},[37,140427,51505],{"class":54},[37,140429,128277],{"class":82},[37,140431,1364],{"class":54},[37,140433,140434],{"class":39,"line":64},[37,140435,1637],{"class":54},[14,140437,140438,140439,140442],{},"3 号盒子为 ",[34,140440,140441],{},"bargain"," 特价商品",[1210,140444,140445],{},[161,140446,140447],{},"这个比较简单，直接插入一张图片即可",[14,140449,139969],{},[27,140451,140452],{"className":127346,"code":134101,"language":127348,"meta":32,"style":32},[34,140453,140454],{"__ignoreMap":32},[37,140455,140456,140458,140460,140462,140464,140466,140468,140470,140472,140474,140476,140478],{"class":39,"line":40},[37,140457,1113],{"class":54},[37,140459,119],{"class":51368},[37,140461,55307],{"class":2035},[37,140463,70],{"class":54},[37,140465,134116],{"class":309},[37,140467,55315],{"class":2035},[37,140469,70],{"class":54},[37,140471,134123],{"class":309},[37,140473,134126],{"class":2035},[37,140475,70],{"class":54},[37,140477,134131],{"class":309},[37,140479,51375],{"class":54},[14,140481,140058],{},[27,140483,140484],{"className":127346,"code":134101,"language":127348,"meta":32,"style":32},[34,140485,140486],{"__ignoreMap":32},[37,140487,140488,140490,140492,140494,140496,140498,140500,140502,140504,140506,140508,140510],{"class":39,"line":40},[37,140489,1113],{"class":54},[37,140491,119],{"class":51368},[37,140493,55307],{"class":2035},[37,140495,70],{"class":54},[37,140497,134116],{"class":309},[37,140499,55315],{"class":2035},[37,140501,70],{"class":54},[37,140503,134123],{"class":309},[37,140505,134126],{"class":2035},[37,140507,70],{"class":54},[37,140509,134131],{"class":309},[37,140511,51375],{"class":54},[175,140513,140515],{"id":140514},"_1612-推荐模块制作","16.1.2 推荐模块制作",[119,140517],{"style":126455,"src":140518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,140520,140521,140522,140525],{},"大盒子 ",[34,140523,140524],{},"recom"," 推荐模块 recommend",[1210,140527,140528],{},[161,140529,140530,140531,140533,140534,140537],{},"给这个 ",[34,140532,140524],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[34,140535,140536],{},"#ebebeb","），设置距离上边 12px",[14,140539,139969],{},[27,140541,140543],{"className":126599,"code":140542,"language":126601,"meta":32,"style":32},"div {\n  background-color: #f0f0f0;\n}\n",[34,140544,140545,140551,140562],{"__ignoreMap":32},[37,140546,140547,140549],{"class":39,"line":40},[37,140548,51679],{"class":51368},[37,140550,15644],{"class":54},[37,140552,140553,140555,140557,140560],{"class":39,"line":47},[37,140554,70946],{"class":82},[37,140556,51505],{"class":54},[37,140558,140559],{"class":82},"#f0f0f0",[37,140561,1364],{"class":54},[37,140563,140564],{"class":39,"line":58},[37,140565,1637],{"class":54},[14,140567,140058],{},[27,140569,140570],{"className":126599,"code":140542,"language":126601,"meta":32,"style":32},[34,140571,140572,140578,140588],{"__ignoreMap":32},[37,140573,140574,140576],{"class":39,"line":40},[37,140575,51679],{"class":51368},[37,140577,15644],{"class":54},[37,140579,140580,140582,140584,140586],{"class":39,"line":47},[37,140581,70946],{"class":82},[37,140583,51505],{"class":54},[37,140585,140559],{"class":82},[37,140587,1364],{"class":54},[37,140589,140590],{"class":39,"line":58},[37,140591,1637],{"class":54},[14,140593,140594],{},"里面包含 2 个盒子， 浮动即可",[14,140596,139969],{},[27,140598,140599],{"className":126599,"code":139269,"language":126601,"meta":32,"style":32},[34,140600,140601,140607,140617],{"__ignoreMap":32},[37,140602,140603,140605],{"class":39,"line":40},[37,140604,130447],{"class":2035},[37,140606,15644],{"class":54},[37,140608,140609,140611,140613,140615],{"class":39,"line":47},[37,140610,131079],{"class":82},[37,140612,51505],{"class":54},[37,140614,23808],{"class":82},[37,140616,1364],{"class":54},[37,140618,140619],{"class":39,"line":58},[37,140620,1637],{"class":54},[14,140622,140623,140624],{},"1 号盒子 ",[34,140625,140626],{},"recom_hd",[1210,140628,140629,140632],{},[161,140630,140631],{},"设置宽度205px，高度163px",[161,140633,140103,140634,140636],{},[34,140635,119],{},"标签，插入图片即可",[14,140638,139969],{},[27,140640,140641],{"className":127346,"code":134101,"language":127348,"meta":32,"style":32},[34,140642,140643],{"__ignoreMap":32},[37,140644,140645,140647,140649,140651,140653,140655,140657,140659,140661,140663,140665,140667],{"class":39,"line":40},[37,140646,1113],{"class":54},[37,140648,119],{"class":51368},[37,140650,55307],{"class":2035},[37,140652,70],{"class":54},[37,140654,134116],{"class":309},[37,140656,55315],{"class":2035},[37,140658,70],{"class":54},[37,140660,134123],{"class":309},[37,140662,134126],{"class":2035},[37,140664,70],{"class":54},[37,140666,134131],{"class":309},[37,140668,51375],{"class":54},[14,140670,140058],{},[27,140672,140673],{"className":127346,"code":134101,"language":127348,"meta":32,"style":32},[34,140674,140675],{"__ignoreMap":32},[37,140676,140677,140679,140681,140683,140685,140687,140689,140691,140693,140695,140697,140699],{"class":39,"line":40},[37,140678,1113],{"class":54},[37,140680,119],{"class":51368},[37,140682,55307],{"class":2035},[37,140684,70],{"class":54},[37,140686,134116],{"class":309},[37,140688,55315],{"class":2035},[37,140690,70],{"class":54},[37,140692,134123],{"class":309},[37,140694,134126],{"class":2035},[37,140696,70],{"class":54},[37,140698,134131],{"class":309},[37,140700,51375],{"class":54},[14,140702,140703,140704,140707],{},"2 号盒子 ",[34,140705,140706],{},"recom_bd"," ，注意里面的小竖线",[1210,140709,140710,140721,140724,140729,140734],{},[161,140711,140712,140713,140715,140716,140718,140719],{},"右侧结构里面放 ",[34,140714,1210],{}," 包含 4个 ",[34,140717,161],{},"，每个li里面包含一个",[34,140720,119],{},[161,140722,140723],{},"直接利用切片工具把里面的内容当成一张图片",[161,140725,139099,140726,140728],{},[34,140727,161],{}," 设置浮动",[161,140730,139099,140731,140733],{},[34,140732,119],{}," 设置宽高，宽度 248px，高度 163px",[161,140735,140736,140737,140297,140740,140742,140743,140745,140746],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[34,140738,140739],{},"top 10px",[34,140741,161],{},"设置相对定位（注意，最后一个",[34,140744,161],{},"不用设置伪元素），可以利用 ",[34,140747,140748],{},"nth-child(-n+3){...}",[14,140750,139969],{},[27,140752,140753],{"className":126599,"code":138441,"language":126601,"meta":32,"style":32},[34,140754,140755,140763,140773,140783],{"__ignoreMap":32},[37,140756,140757,140759,140761],{"class":39,"line":40},[37,140758,51679],{"class":51368},[37,140760,137600],{"class":2035},[37,140762,15644],{"class":54},[37,140764,140765,140767,140769,140771],{"class":39,"line":47},[37,140766,137607],{"class":82},[37,140768,51505],{"class":54},[37,140770,7724],{"class":309},[37,140772,1364],{"class":54},[37,140774,140775,140777,140779,140781],{"class":39,"line":58},[37,140776,128215],{"class":82},[37,140778,51505],{"class":54},[37,140780,60937],{"class":82},[37,140782,1364],{"class":54},[37,140784,140785],{"class":39,"line":64},[37,140786,1637],{"class":54},[14,140788,140058],{},[27,140790,140791],{"className":126599,"code":138441,"language":126601,"meta":32,"style":32},[34,140792,140793,140801,140811,140821],{"__ignoreMap":32},[37,140794,140795,140797,140799],{"class":39,"line":40},[37,140796,51679],{"class":51368},[37,140798,137600],{"class":2035},[37,140800,15644],{"class":54},[37,140802,140803,140805,140807,140809],{"class":39,"line":47},[37,140804,137607],{"class":82},[37,140806,51505],{"class":54},[37,140808,7724],{"class":309},[37,140810,1364],{"class":54},[37,140812,140813,140815,140817,140819],{"class":39,"line":58},[37,140814,128215],{"class":82},[37,140816,51505],{"class":54},[37,140818,60937],{"class":82},[37,140820,1364],{"class":54},[37,140822,140823],{"class":39,"line":64},[37,140824,1637],{"class":54},[175,140826,140828],{"id":140827},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[119,140830],{"style":126455,"src":140831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,140833,140834],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,140836,140837],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,140839,140840,140843],{},[34,140841,140842],{},"box_hd"," 制作",[14,140845,140623,140846,140848],{},[34,140847,140842],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[119,140850],{"style":126455,"src":140851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1210,140853,140854,140859,140864,140867],{},[161,140855,140856,140858],{},[34,140857,140842],{}," 给 30px 的高度，2个像素的下边框",[161,140860,140861,140862],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[34,140863,139110],{},[161,140865,140866],{},"左侧盒左浮动，右侧盒子右浮动",[161,140868,140869,140871,140872,140874],{},[34,140870,443],{},"标签之间的距离用左右的",[34,140873,30953],{},"撑开即可",[14,140876,140877],{},"结构代码",[27,140879,140880],{"className":126599,"code":139269,"language":126601,"meta":32,"style":32},[34,140881,140882,140888,140898],{"__ignoreMap":32},[37,140883,140884,140886],{"class":39,"line":40},[37,140885,130447],{"class":2035},[37,140887,15644],{"class":54},[37,140889,140890,140892,140894,140896],{"class":39,"line":47},[37,140891,131079],{"class":82},[37,140893,51505],{"class":54},[37,140895,23808],{"class":82},[37,140897,1364],{"class":54},[37,140899,140900],{"class":39,"line":58},[37,140901,1637],{"class":54},[14,140903,140904],{},"样式代码",[27,140906,140907],{"className":126599,"code":139269,"language":126601,"meta":32,"style":32},[34,140908,140909,140915,140925],{"__ignoreMap":32},[37,140910,140911,140913],{"class":39,"line":40},[37,140912,130447],{"class":2035},[37,140914,15644],{"class":54},[37,140916,140917,140919,140921,140923],{"class":39,"line":47},[37,140918,131079],{"class":82},[37,140920,51505],{"class":54},[37,140922,23808],{"class":82},[37,140924,1364],{"class":54},[37,140926,140927],{"class":39,"line":58},[37,140928,1637],{"class":54},[14,140930,140931,140843],{},[34,140932,140933],{},"box_bd",[14,140935,140936],{},"2 号盒子 box_bd，不要给高度",[119,140938],{"style":126455,"src":140939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,140941,140942],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,140944,140945],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,140947,140948],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1210,140950,140951,140963,140979],{},[161,140952,140953,140955,140956,140959,140960,140962],{},[34,140954,140933],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[34,140957,140958],{},"tab_content","，在",[34,140961,140958],{}," 里面包裹tab选项卡对应的内容",[161,140964,140965,140966,140969,140970,140972,140973,140975,140976,140978],{},"内容被一个大盒子包裹（",[34,140967,140968],{},"tab_list_item","），里面是 ",[34,140971,1210],{}," 包裹 5个 ",[34,140974,161],{},"，每个",[34,140977,161],{},"设置对应的宽度，然后设置浮动",[161,140980,140981,140982,140984,140985,140987,140988],{},"而这5个",[34,140983,161],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[34,140986,161],{},"设置",[1210,140989,140990,141008,141011],{},[161,140991,140992,140993,140995,140996,140998,140999,141001,141002,141004,141005,141007],{},"第一个小 ",[34,140994,161],{}," 分为上下结构，上面是 ",[34,140997,1210],{}," 包裹 ",[34,141000,161],{}," ，",[34,141003,161],{},"里面包裹 ",[34,141006,443],{},"，下面插入一张图片",[161,141009,141010],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[161,141012,141013,141014,141016,141017,141019,141020,141022],{},"后面的小 ",[34,141015,161],{}," 里面先放一个",[34,141018,443],{},"标签，然后在",[34,141021,443],{},"标签里面插入图片即可",[14,141024,140877],{},[27,141026,141027],{"className":127346,"code":134101,"language":127348,"meta":32,"style":32},[34,141028,141029],{"__ignoreMap":32},[37,141030,141031,141033,141035,141037,141039,141041,141043,141045,141047,141049,141051,141053],{"class":39,"line":40},[37,141032,1113],{"class":54},[37,141034,119],{"class":51368},[37,141036,55307],{"class":2035},[37,141038,70],{"class":54},[37,141040,134116],{"class":309},[37,141042,55315],{"class":2035},[37,141044,70],{"class":54},[37,141046,134123],{"class":309},[37,141048,134126],{"class":2035},[37,141050,70],{"class":54},[37,141052,134131],{"class":309},[37,141054,51375],{"class":54},[14,141056,140904],{},[27,141058,141059],{"className":127346,"code":134101,"language":127348,"meta":32,"style":32},[34,141060,141061],{"__ignoreMap":32},[37,141062,141063,141065,141067,141069,141071,141073,141075,141077,141079,141081,141083,141085],{"class":39,"line":40},[37,141064,1113],{"class":54},[37,141066,119],{"class":51368},[37,141068,55307],{"class":2035},[37,141070,70],{"class":54},[37,141072,134116],{"class":309},[37,141074,55315],{"class":2035},[37,141076,70],{"class":54},[37,141078,134123],{"class":309},[37,141080,134126],{"class":2035},[37,141082,70],{"class":54},[37,141084,134131],{"class":309},[37,141086,51375],{"class":54},[14,141088,141089],{},"tab栏切换需求！！！！！！介绍：",[119,141091],{"style":126455,"src":141092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1210,141094,141095,141103,141109,141112],{},[161,141096,141097,141100,141101],{},[34,141098,141099],{},"tab","栏的布局是 ",[34,141102,139110],{},[161,141104,141105,141106,141108],{},"有多少个",[34,141107,141099],{},"选项卡，那么对应就有多少个内容",[161,141110,141111],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[161,141113,141114,141115,141118,141119,141121,141122,141124],{},"等后面我们学习了",[34,141116,141117],{},"js","之后，我们就会配合",[34,141120,141117],{},"来实现，",[34,141123,141099],{},"栏的切换",[146,141126,141128],{"id":141127},"_162-列表制作","16.2 列表制作",[175,141130,141132],{"id":141131},"_1621-准备工作","16.2.1 准备工作",[1210,141134,141135,141138,141141,141144],{},[161,141136,141137],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[161,141139,141140],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[161,141142,141143],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[161,141145,141146],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[175,141148,141150,141151,101065,141153,141155],{"id":141149},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[34,141152,131604],{},[34,141154,53781],{}," 修改",[119,141157],{"style":126455,"src":141158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1210,141160,141161],{},[161,141162,141163],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141165,139969],{},[27,141167,141168],{"className":126599,"code":132031,"language":126601,"meta":32,"style":32},[34,141169,141170,141174,141188,141192,141206,141210,141224,141228,141242,141246],{"__ignoreMap":32},[37,141171,141172],{"class":39,"line":40},[37,141173,132038],{"class":43},[37,141175,141176,141178,141180,141182,141184,141186],{"class":39,"line":47},[37,141177,132043],{"class":2035},[37,141179,79875],{"class":54},[37,141181,128959],{"class":82},[37,141183,51505],{"class":54},[37,141185,132052],{"class":82},[37,141187,129529],{"class":54},[37,141189,141190],{"class":39,"line":58},[37,141191,132059],{"class":43},[37,141193,141194,141196,141198,141200,141202,141204],{"class":39,"line":64},[37,141195,132064],{"class":2035},[37,141197,79875],{"class":54},[37,141199,128959],{"class":82},[37,141201,51505],{"class":54},[37,141203,54832],{"class":82},[37,141205,129529],{"class":54},[37,141207,141208],{"class":39,"line":76},[37,141209,132079],{"class":43},[37,141211,141212,141214,141216,141218,141220,141222],{"class":39,"line":92},[37,141213,132084],{"class":2035},[37,141215,79875],{"class":54},[37,141217,128959],{"class":82},[37,141219,51505],{"class":54},[37,141221,54899],{"class":82},[37,141223,129529],{"class":54},[37,141225,141226],{"class":39,"line":97},[37,141227,132099],{"class":43},[37,141229,141230,141232,141234,141236,141238,141240],{"class":39,"line":107},[37,141231,132104],{"class":2035},[37,141233,79875],{"class":54},[37,141235,128959],{"class":82},[37,141237,51505],{"class":54},[37,141239,86301],{"class":82},[37,141241,129529],{"class":54},[37,141243,141244],{"class":39,"line":1390},[37,141245,132119],{"class":43},[37,141247,141248,141250,141252,141254,141256,141258],{"class":39,"line":1402},[37,141249,132124],{"class":2035},[37,141251,79875],{"class":54},[37,141253,128959],{"class":82},[37,141255,51505],{"class":54},[37,141257,132133],{"class":82},[37,141259,129529],{"class":54},[14,141261,140058],{},[27,141263,141264],{"className":126599,"code":132031,"language":126601,"meta":32,"style":32},[34,141265,141266,141270,141284,141288,141302,141306,141320,141324,141338,141342],{"__ignoreMap":32},[37,141267,141268],{"class":39,"line":40},[37,141269,132038],{"class":43},[37,141271,141272,141274,141276,141278,141280,141282],{"class":39,"line":47},[37,141273,132043],{"class":2035},[37,141275,79875],{"class":54},[37,141277,128959],{"class":82},[37,141279,51505],{"class":54},[37,141281,132052],{"class":82},[37,141283,129529],{"class":54},[37,141285,141286],{"class":39,"line":58},[37,141287,132059],{"class":43},[37,141289,141290,141292,141294,141296,141298,141300],{"class":39,"line":64},[37,141291,132064],{"class":2035},[37,141293,79875],{"class":54},[37,141295,128959],{"class":82},[37,141297,51505],{"class":54},[37,141299,54832],{"class":82},[37,141301,129529],{"class":54},[37,141303,141304],{"class":39,"line":76},[37,141305,132079],{"class":43},[37,141307,141308,141310,141312,141314,141316,141318],{"class":39,"line":92},[37,141309,132084],{"class":2035},[37,141311,79875],{"class":54},[37,141313,128959],{"class":82},[37,141315,51505],{"class":54},[37,141317,54899],{"class":82},[37,141319,129529],{"class":54},[37,141321,141322],{"class":39,"line":97},[37,141323,132099],{"class":43},[37,141325,141326,141328,141330,141332,141334,141336],{"class":39,"line":107},[37,141327,132104],{"class":2035},[37,141329,79875],{"class":54},[37,141331,128959],{"class":82},[37,141333,51505],{"class":54},[37,141335,86301],{"class":82},[37,141337,129529],{"class":54},[37,141339,141340],{"class":39,"line":1390},[37,141341,132119],{"class":43},[37,141343,141344,141346,141348,141350,141352,141354],{"class":39,"line":1402},[37,141345,132124],{"class":2035},[37,141347,79875],{"class":54},[37,141349,128959],{"class":82},[37,141351,51505],{"class":54},[37,141353,132133],{"class":82},[37,141355,129529],{"class":54},[1210,141357,141358,141369],{},[161,141359,141360,141361,141364,141365,101065,141367],{},"1 号盒子左侧浮动 ",[34,141362,141363],{},"sk_list"," 里面包含 ",[34,141366,1210],{},[34,141368,161],{},[161,141370,141371,141372,141364,141375,101065,141377],{},"2 号盒子左侧浮动 ",[34,141373,141374],{},"sk_con",[34,141376,1210],{},[34,141378,161],{},[14,141380,139969],{},[27,141382,141383],{"className":126599,"code":139269,"language":126601,"meta":32,"style":32},[34,141384,141385,141391,141401],{"__ignoreMap":32},[37,141386,141387,141389],{"class":39,"line":40},[37,141388,130447],{"class":2035},[37,141390,15644],{"class":54},[37,141392,141393,141395,141397,141399],{"class":39,"line":47},[37,141394,131079],{"class":82},[37,141396,51505],{"class":54},[37,141398,23808],{"class":82},[37,141400,1364],{"class":54},[37,141402,141403],{"class":39,"line":58},[37,141404,1637],{"class":54},[14,141406,140058],{},[27,141408,141409],{"className":126599,"code":139269,"language":126601,"meta":32,"style":32},[34,141410,141411,141417,141427],{"__ignoreMap":32},[37,141412,141413,141415],{"class":39,"line":40},[37,141414,130447],{"class":2035},[37,141416,15644],{"class":54},[37,141418,141419,141421,141423,141425],{"class":39,"line":47},[37,141420,131079],{"class":82},[37,141422,51505],{"class":54},[37,141424,23808],{"class":82},[37,141426,1364],{"class":54},[37,141428,141429],{"class":39,"line":58},[37,141430,1637],{"class":54},[175,141432,141434,141435],{"id":141433},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[34,141436,141437],{},"sk_container",[119,141439],{"style":126455,"src":141440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1210,141442,141443,141448],{},[161,141444,140623,141445,141447],{},[34,141446,141437],{}," 给宽度 1200，不要给高度",[161,141449,141450],{},"一定不要忘记清除浮动",[14,141452,139969],{},[27,141454,141455],{"className":126599,"code":139269,"language":126601,"meta":32,"style":32},[34,141456,141457,141463,141473],{"__ignoreMap":32},[37,141458,141459,141461],{"class":39,"line":40},[37,141460,130447],{"class":2035},[37,141462,15644],{"class":54},[37,141464,141465,141467,141469,141471],{"class":39,"line":47},[37,141466,131079],{"class":82},[37,141468,51505],{"class":54},[37,141470,23808],{"class":82},[37,141472,1364],{"class":54},[37,141474,141475],{"class":39,"line":58},[37,141476,1637],{"class":54},[158,141478,141479],{},[161,141480,141481],{},"sk_hd制作",[1210,141483,141484],{},[161,141485,140703,141486,141489],{},[34,141487,141488],{},"sk_hd"," ，插入图片即可",[14,141491,139969],{},[27,141493,141494],{"className":127346,"code":134101,"language":127348,"meta":32,"style":32},[34,141495,141496],{"__ignoreMap":32},[37,141497,141498,141500,141502,141504,141506,141508,141510,141512,141514,141516,141518,141520],{"class":39,"line":40},[37,141499,1113],{"class":54},[37,141501,119],{"class":51368},[37,141503,55307],{"class":2035},[37,141505,70],{"class":54},[37,141507,134116],{"class":309},[37,141509,55315],{"class":2035},[37,141511,70],{"class":54},[37,141513,134123],{"class":309},[37,141515,134126],{"class":2035},[37,141517,70],{"class":54},[37,141519,134131],{"class":309},[37,141521,51375],{"class":54},[158,141523,141524],{"start":47},[161,141525,141526],{},"sk_bd制作",[1210,141528,141529],{},[161,141530,141531,141532,141535,141536,101065,141538,141540],{},"3 号盒子 ",[34,141533,141534],{},"sk_bd"," ，里面包含很多的 ",[34,141537,1210],{},[34,141539,161],{},[1210,141541,141542,141551],{},[161,141543,141544,141545,141547,141548,141550],{},"当鼠标移入到 ",[34,141546,161],{}," 上面的时候显示红色的边框，在这里先给 ",[34,141549,161],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[161,141552,141553,141554,141556,141557,141559,141560,141563,141564,141566],{},"由于给每个 ",[34,141555,161],{}," 都设置了外边距，导致一行的最后一个 ",[34,141558,161],{}," 掉了下来，在这里我们利用 ",[34,141561,141562],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[34,141565,161],{},"，去掉外边距就好了",[14,141568,139969],{},[27,141570,141571],{"className":126599,"code":138788,"language":126601,"meta":32,"style":32},[34,141572,141573,141579,141591],{"__ignoreMap":32},[37,141574,141575,141577],{"class":39,"line":40},[37,141576,51679],{"class":51368},[37,141578,15644],{"class":54},[37,141580,141581,141583,141585,141587,141589],{"class":39,"line":47},[37,141582,70538],{"class":82},[37,141584,51505],{"class":54},[37,141586,396],{"class":82},[37,141588,51624],{"class":82},[37,141590,1364],{"class":54},[37,141592,141593],{"class":39,"line":58},[37,141594,1637],{"class":54},[14,141596,140058],{},[27,141598,141599],{"className":126599,"code":138788,"language":126601,"meta":32,"style":32},[34,141600,141601,141607,141619],{"__ignoreMap":32},[37,141602,141603,141605],{"class":39,"line":40},[37,141604,51679],{"class":51368},[37,141606,15644],{"class":54},[37,141608,141609,141611,141613,141615,141617],{"class":39,"line":47},[37,141610,70538],{"class":82},[37,141612,51505],{"class":54},[37,141614,396],{"class":82},[37,141616,51624],{"class":82},[37,141618,1364],{"class":54},[37,141620,141621],{"class":39,"line":58},[37,141622,1637],{"class":54},[146,141624,141626],{"id":141625},"_163-注册页面制作","16.3 注册页面制作",[119,141628],{"style":126455,"src":141629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,141631,141632,141634],{},[354,141633,9097],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[119,141636],{"style":126455,"src":141637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[175,141639,141641],{"id":141640},"_1631-准备工作","16.3.1 准备工作",[1210,141643,141644,141647],{},[161,141645,141646],{},"创建register.html，引入 base.css，引入favicon图标",[161,141648,141649],{},"创建register.css ，在html页面进行引入",[175,141651,141653,141654,141656],{"id":141652},"_1632-header-头部实现","16.3.2 ",[34,141655,131604],{}," 头部实现",[1210,141658,141659,141662],{},[161,141660,141661],{},"整个内容用 版心 进行包裹",[161,141663,141664],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,141666,139969],{},[27,141668,141669],{"className":127346,"code":134101,"language":127348,"meta":32,"style":32},[34,141670,141671],{"__ignoreMap":32},[37,141672,141673,141675,141677,141679,141681,141683,141685,141687,141689,141691,141693,141695],{"class":39,"line":40},[37,141674,1113],{"class":54},[37,141676,119],{"class":51368},[37,141678,55307],{"class":2035},[37,141680,70],{"class":54},[37,141682,134116],{"class":309},[37,141684,55315],{"class":2035},[37,141686,70],{"class":54},[37,141688,134123],{"class":309},[37,141690,134126],{"class":2035},[37,141692,70],{"class":54},[37,141694,134131],{"class":309},[37,141696,51375],{"class":54},[14,141698,140058],{},[27,141700,141701],{"className":127346,"code":134101,"language":127348,"meta":32,"style":32},[34,141702,141703],{"__ignoreMap":32},[37,141704,141705,141707,141709,141711,141713,141715,141717,141719,141721,141723,141725,141727],{"class":39,"line":40},[37,141706,1113],{"class":54},[37,141708,119],{"class":51368},[37,141710,55307],{"class":2035},[37,141712,70],{"class":54},[37,141714,134116],{"class":309},[37,141716,55315],{"class":2035},[37,141718,70],{"class":54},[37,141720,134123],{"class":309},[37,141722,134126],{"class":2035},[37,141724,70],{"class":54},[37,141726,134131],{"class":309},[37,141728,51375],{"class":54},[175,141730,141732,141733,141736],{"id":141731},"_1633-registerarea-主体模块实现","16.3.3 ",[34,141734,141735],{},"registerarea"," 主体模块实现",[119,141738],{"style":126455,"src":141739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,141741,141742],{},"整个大盒子 高度为 522px，设置4个边框",[14,141744,139969],{},[27,141746,141747],{"className":126599,"code":130756,"language":126601,"meta":32,"style":32},[34,141748,141749,141755,141771],{"__ignoreMap":32},[37,141750,141751,141753],{"class":39,"line":40},[37,141752,51679],{"class":51368},[37,141754,15644],{"class":54},[37,141756,141757,141759,141761,141763,141765,141767,141769],{"class":39,"line":47},[37,141758,70964],{"class":82},[37,141760,51505],{"class":54},[37,141762,422],{"class":82},[37,141764,51560],{"class":50},[37,141766,51589],{"class":82},[37,141768,129991],{"class":82},[37,141770,1364],{"class":54},[37,141772,141773],{"class":39,"line":58},[37,141774,1637],{"class":54},[14,141776,140058],{},[27,141778,141779],{"className":126599,"code":130756,"language":126601,"meta":32,"style":32},[34,141780,141781,141787,141803],{"__ignoreMap":32},[37,141782,141783,141785],{"class":39,"line":40},[37,141784,51679],{"class":51368},[37,141786,15644],{"class":54},[37,141788,141789,141791,141793,141795,141797,141799,141801],{"class":39,"line":47},[37,141790,70964],{"class":82},[37,141792,51505],{"class":54},[37,141794,422],{"class":82},[37,141796,51560],{"class":50},[37,141798,51589],{"class":82},[37,141800,129991],{"class":82},[37,141802,1364],{"class":54},[37,141804,141805],{"class":39,"line":58},[37,141806,1637],{"class":54},[14,141808,141809],{},"1号盒子 是一个 h3 标签，放标题",[1210,141811,141812],{},[161,141813,141814],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,141816,139969],{},[27,141818,141819],{"className":126599,"code":139269,"language":126601,"meta":32,"style":32},[34,141820,141821,141827,141837],{"__ignoreMap":32},[37,141822,141823,141825],{"class":39,"line":40},[37,141824,130447],{"class":2035},[37,141826,15644],{"class":54},[37,141828,141829,141831,141833,141835],{"class":39,"line":47},[37,141830,131079],{"class":82},[37,141832,51505],{"class":54},[37,141834,23808],{"class":82},[37,141836,1364],{"class":54},[37,141838,141839],{"class":39,"line":58},[37,141840,1637],{"class":54},[14,141842,140058],{},[27,141844,141845],{"className":126599,"code":139269,"language":126601,"meta":32,"style":32},[34,141846,141847,141853,141863],{"__ignoreMap":32},[37,141848,141849,141851],{"class":39,"line":40},[37,141850,130447],{"class":2035},[37,141852,15644],{"class":54},[37,141854,141855,141857,141859,141861],{"class":39,"line":47},[37,141856,131079],{"class":82},[37,141858,51505],{"class":54},[37,141860,23808],{"class":82},[37,141862,1364],{"class":54},[37,141864,141865],{"class":39,"line":58},[37,141866,1637],{"class":54},[14,141868,141869],{},"2号盒子 里面放注册的内容",[1210,141871,141872,141875,141884,141898,141911,141914,141917,141935,141949],{},[161,141873,141874],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[161,141876,141877,141878,141880,141881,141883],{},"里面的内容利用 ",[34,141879,1210],{}," 包含 ",[34,141882,161],{}," 来实现的（不需要用表格）",[161,141885,139113,141886,141888,141889,141891,141892,141894,141895,141897],{},[34,141887,161],{}," 里面，左侧放 ",[34,141890,33677],{}," 标签， 中间放",[34,141893,53889],{}," 标签， 右侧放 ",[34,141896,37],{}," 提示信息",[161,141899,141900,141901,141903,141904,141906,141907,141910],{},"左侧 ",[34,141902,33677],{},"里面的文字都是右对齐，我们可以给",[34,141905,33677],{},"设置一个宽度（88px），然后利用",[34,141908,141909],{},"text-align"," 来设置右对齐",[161,141912,141913],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[161,141915,141916],{},"右侧 span修饰一下文字颜色",[161,141918,141919,141920],{},"提示信息的样式优化",[1210,141921,141922,141925,141928],{},[161,141923,141924],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[161,141926,141927],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[161,141929,141930,141931,141934],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[34,141932,141933],{},"vertical-algin"," 来设置 图片与文字对齐方式",[161,141936,141937,141938],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1210,141939,141940,141946],{},[161,141941,141942,141943,141945],{},"设置 ",[34,141944,23625],{}," 的 左右 12px 的内边距，设置一下文字颜色",[161,141947,141948],{},"分别设置 背景颜色",[161,141950,141951,141952,141954],{},"同意协议 和 完成注册 都是用 ",[34,141953,161],{}," 进行包裹",[14,141956,139969],{},[27,141958,141959],{"className":126599,"code":140542,"language":126601,"meta":32,"style":32},[34,141960,141961,141967,141977],{"__ignoreMap":32},[37,141962,141963,141965],{"class":39,"line":40},[37,141964,51679],{"class":51368},[37,141966,15644],{"class":54},[37,141968,141969,141971,141973,141975],{"class":39,"line":47},[37,141970,70946],{"class":82},[37,141972,51505],{"class":54},[37,141974,140559],{"class":82},[37,141976,1364],{"class":54},[37,141978,141979],{"class":39,"line":58},[37,141980,1637],{"class":54},[14,141982,140058],{},[27,141984,141985],{"className":126599,"code":140542,"language":126601,"meta":32,"style":32},[34,141986,141987,141993,142003],{"__ignoreMap":32},[37,141988,141989,141991],{"class":39,"line":40},[37,141990,51679],{"class":51368},[37,141992,15644],{"class":54},[37,141994,141995,141997,141999,142001],{"class":39,"line":47},[37,141996,70946],{"class":82},[37,141998,51505],{"class":54},[37,142000,140559],{"class":82},[37,142002,1364],{"class":54},[37,142004,142005],{"class":39,"line":58},[37,142006,1637],{"class":54},[175,142008,142010],{"id":142009},"_1634-底部实现","16.3.4 底部实现",[14,142012,139969],{},[27,142014,142015],{"className":126599,"code":140542,"language":126601,"meta":32,"style":32},[34,142016,142017,142023,142033],{"__ignoreMap":32},[37,142018,142019,142021],{"class":39,"line":40},[37,142020,51679],{"class":51368},[37,142022,15644],{"class":54},[37,142024,142025,142027,142029,142031],{"class":39,"line":47},[37,142026,70946],{"class":82},[37,142028,51505],{"class":54},[37,142030,140559],{"class":82},[37,142032,1364],{"class":54},[37,142034,142035],{"class":39,"line":58},[37,142036,1637],{"class":54},[14,142038,140058],{},[27,142040,142041],{"className":127346,"code":130703,"language":127348,"meta":32,"style":32},[34,142042,142043,142047,142061,142065],{"__ignoreMap":32},[37,142044,142045],{"class":39,"line":40},[37,142046,130710],{"class":43},[37,142048,142049,142051,142053,142055,142057,142059],{"class":39,"line":47},[37,142050,1113],{"class":54},[37,142052,51679],{"class":51368},[37,142054,53554],{"class":2035},[37,142056,70],{"class":54},[37,142058,130723],{"class":309},[37,142060,51375],{"class":54},[37,142062,142063],{"class":39,"line":58},[37,142064,130730],{"class":54},[37,142066,142067,142069,142071],{"class":39,"line":64},[37,142068,51853],{"class":54},[37,142070,51679],{"class":51368},[37,142072,51375],{"class":54},[146,142074,142076],{"id":142075},"_164-项目总结","16.4 项目总结",[158,142078,142079,142082,142085,142088],{},[161,142080,142081],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[161,142083,142084],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[161,142086,142087],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[161,142089,142090],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[119,142092],{"style":126455,"src":142093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[158,142095,142096],{"start":76},[161,142097,142098],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[119,142100],{"style":126455,"src":142101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[158,142103,142104],{"start":92},[161,142105,142106],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[119,142108],{"style":126455,"src":142109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[27,142111,142112],{"className":127346,"code":136756,"language":127348,"meta":32,"style":32},[34,142113,142114],{"__ignoreMap":32},[37,142115,142116,142118,142120,142122,142124,142126,142128,142130,142132,142134,142136,142138],{"class":39,"line":40},[37,142117,1113],{"class":54},[37,142119,53889],{"class":51368},[37,142121,53892],{"class":2035},[37,142123,70],{"class":54},[37,142125,62767],{"class":309},[37,142127,14992],{"class":2035},[37,142129,70],{"class":54},[37,142131,136777],{"class":309},[37,142133,61088],{"class":2035},[37,142135,70],{"class":54},[37,142137,136784],{"class":309},[37,142139,51375],{"class":54},[158,142141,142142,142145],{"start":97},[161,142143,142144],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[161,142146,142147],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[123,142149,142150],{},"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":32,"searchDepth":47,"depth":47,"links":142152},[142153,142158,142165,142173],{"id":139779,"depth":47,"text":139780,"children":142154},[142155,142156,142157],{"id":139783,"depth":58,"text":139784},{"id":140514,"depth":58,"text":140515},{"id":140827,"depth":58,"text":140828},{"id":141127,"depth":47,"text":141128,"children":142159},[142160,142161,142163],{"id":141131,"depth":58,"text":141132},{"id":141149,"depth":58,"text":142162},"16.2.2 列表页 header 和 nav 修改",{"id":141433,"depth":58,"text":142164},"16.2.3 列表页主体 sk_container",{"id":141625,"depth":47,"text":141626,"children":142166},[142167,142168,142170,142172],{"id":141640,"depth":58,"text":141641},{"id":141652,"depth":58,"text":142169},"16.3.2 header 头部实现",{"id":141731,"depth":58,"text":142171},"16.3.3 registerarea 主体模块实现",{"id":142009,"depth":58,"text":142010},{"id":142075,"depth":47,"text":142076},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139771,"description":128},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142180,"title":142181,"body":142182,"description":128,"extension":129,"meta":142290,"navigation":131,"path":142291,"seo":142292,"stem":142293,"__hash__":142294},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142183,"toc":142285},[142184,142187,142191,142194,142197,142206,142215,142219,142224,142231,142249,142252,142255,142258,142261,142264,142267,142270,142273,142276,142279,142282],[10,142185,142181],{"id":142186},"_17-web服务器与网站发布",[146,142188,142190],{"id":142189},"_171-web服务器","17.1 Web服务器",[14,142192,142193],{},"把自己网站上传到服务器上，可以让其他人访问",[119,142195],{"style":126455,"src":142196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142198,142199,142202,142203],{},[354,142200,142201],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[354,142204,142205],{},"Web 服务器等",[14,142207,142208,142209,101065,142212,25813],{},"根据服务器在网络中所在的位置不同，又可分为 ",[354,142210,142211],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[354,142213,142214],{},"远程服务器",[175,142216,142218],{"id":142217},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142220,142221],{},[354,142222,142223],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142225,142226,142227],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[443,142228,142229],{"href":142229,"rel":142230},"http:\u002F\u002Ffree.3v.do\u002F",[23937],[1210,142232,142233,142236,142239,142246],{},[161,142234,142235],{},"去免费空间网站注册账号。",[161,142237,142238],{},"记录下主机名、用户名、密码、域名。",[161,142240,142241,142242,142245],{},"利用 ",[34,142243,142244],{},"utftp"," 软件 上传网站到远程服务器",[161,142247,142248],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142250,142251],{},"使用软件上传，对上传软件文件进行解压",[119,142253],{"style":126455,"src":142254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[119,142256],{"style":126455,"src":142257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142259,142260],{},"输入刚刚申请的服务器账号信息：",[119,142262],{"style":126455,"src":142263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[119,142265],{"style":126455,"src":142266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[119,142268],{"style":126455,"src":142269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[119,142271],{"style":126455,"src":142272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142274,142275],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[119,142277],{"style":126455,"src":142278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142280,142281],{},"浏览器输入域名即可访问",[14,142283,142284],{},"首页一定必须是index",{"title":32,"searchDepth":47,"depth":47,"links":142286},[142287],{"id":142189,"depth":47,"text":142190,"children":142288},[142289],{"id":142217,"depth":58,"text":142218},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142181,"description":128},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142296,"title":142297,"body":142298,"description":128,"extension":129,"meta":143225,"navigation":131,"path":143226,"seo":143227,"stem":143228,"__hash__":143229},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142299,"toc":143208},[142300,142303,142307,142310,142313,142324,142327,142331,142335,142340,142343,142346,142349,142352,142356,142382,142386,142390,142393,142396,142400,142433,142437,142440,142443,142507,142511,142515,142518,142521,142524,142528,142573,142577,142580,142610,142614,142618,142621,142624,142628,142631,142700,142703,142811,142813,142819,142823,142826,142829,142925,142928,142932,142956,142960,142963,142967,142970,142974,142977,142980,142983,142986,142990,142993,142996,143000,143004,143007,143010,143013,143016,143020,143023,143027,143030,143033,143078,143082,143086,143089,143092,143095,143127,143131,143134,143168,143172,143175,143205],[10,142301,142297],{"id":142302},"_18-2d动画与3d转换",[146,142304,142306],{"id":142305},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142308,142309],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142311,142312],{},"转换（transform）你可以简单理解为变形",[1210,142314,142315,142318,142321],{},[161,142316,142317],{},"移动：translate",[161,142319,142320],{},"旋转：rotate",[161,142322,142323],{},"缩放：scale",[119,142325],{"style":126455,"src":142326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[175,142328,142330],{"id":142329},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22070,142332,142334],{"id":142333},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142336,142337,142338],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[354,142339,133258],{},[119,142341],{"style":126455,"src":142342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142344,142345],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142347,142348],{},"对于行内元素无效",[14,142350,142351],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22070,142353,142355],{"id":142354},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[27,142357,142358],{"className":126599,"code":138788,"language":126601,"meta":32,"style":32},[34,142359,142360,142366,142378],{"__ignoreMap":32},[37,142361,142362,142364],{"class":39,"line":40},[37,142363,51679],{"class":51368},[37,142365,15644],{"class":54},[37,142367,142368,142370,142372,142374,142376],{"class":39,"line":47},[37,142369,70538],{"class":82},[37,142371,51505],{"class":54},[37,142373,396],{"class":82},[37,142375,51624],{"class":82},[37,142377,1364],{"class":54},[37,142379,142380],{"class":39,"line":58},[37,142381,1637],{"class":54},[175,142383,142385],{"id":142384},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22070,142387,142389],{"id":142388},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142391,142392],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[119,142394],{"style":126455,"src":142395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22070,142397,142399],{"id":142398},"_18122-旋转效果","18.1.2.2 旋转效果",[27,142401,142403],{"className":126599,"code":142402,"language":126601,"meta":32,"style":32},"div {\n  transform: rotate(45deg);\n}\n",[34,142404,142405,142411,142429],{"__ignoreMap":32},[37,142406,142407,142409],{"class":39,"line":40},[37,142408,51679],{"class":51368},[37,142410,15644],{"class":54},[37,142412,142413,142415,142417,142420,142422,142424,142427],{"class":39,"line":47},[37,142414,136583],{"class":82},[37,142416,51505],{"class":54},[37,142418,142419],{"class":82},"rotate",[37,142421,208],{"class":54},[37,142423,733],{"class":82},[37,142425,142426],{"class":50},"deg",[37,142428,2791],{"class":54},[37,142430,142431],{"class":39,"line":58},[37,142432,1637],{"class":54},[22070,142434,142436],{"id":142435},"_18123-三角做法","18.1.2.3 三角做法",[14,142438,142439],{},"该下标当经过最外层大盒子时会实现向上反转",[119,142441],{"style":126455,"src":142442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[27,142444,142445],{"className":126599,"code":135119,"language":126601,"meta":32,"style":32},[34,142446,142447,142451,142457,142467,142477,142493,142503],{"__ignoreMap":32},[37,142448,142449],{"class":39,"line":40},[37,142450,135126],{"class":43},[37,142452,142453,142455],{"class":39,"line":47},[37,142454,135131],{"class":2035},[37,142456,15644],{"class":54},[37,142458,142459,142461,142463,142465],{"class":39,"line":58},[37,142460,70636],{"class":82},[37,142462,51505],{"class":54},[37,142464,396],{"class":82},[37,142466,1364],{"class":54},[37,142468,142469,142471,142473,142475],{"class":39,"line":64},[37,142470,70856],{"class":82},[37,142472,51505],{"class":54},[37,142474,396],{"class":82},[37,142476,1364],{"class":54},[37,142478,142479,142481,142483,142485,142487,142489,142491],{"class":39,"line":76},[37,142480,70964],{"class":82},[37,142482,51505],{"class":54},[37,142484,650],{"class":82},[37,142486,51560],{"class":50},[37,142488,51589],{"class":82},[37,142490,64059],{"class":82},[37,142492,1364],{"class":54},[37,142494,142495,142497,142499,142501],{"class":39,"line":92},[37,142496,135174],{"class":82},[37,142498,51505],{"class":54},[37,142500,62437],{"class":82},[37,142502,1364],{"class":54},[37,142504,142505],{"class":39,"line":97},[37,142506,1637],{"class":54},[175,142508,142510],{"id":142509},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22070,142512,142514],{"id":142513},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,142516,142517],{},"设置中心点",[119,142519],{"style":126455,"src":142520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,142522,142523],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22070,142525,142527],{"id":142526},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[27,142529,142531],{"className":126599,"code":142530,"language":126601,"meta":32,"style":32},"\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",[34,142532,142533,142538,142544,142559,142564,142569],{"__ignoreMap":32},[37,142534,142535],{"class":39,"line":40},[37,142536,142537],{"class":43},"\u002F* 转换中心点 *\u002F\n",[37,142539,142540,142542],{"class":39,"line":47},[37,142541,51679],{"class":51368},[37,142543,15644],{"class":54},[37,142545,142546,142549,142551,142553,142555,142557],{"class":39,"line":58},[37,142547,142548],{"class":82},"  transform-origin",[37,142550,51505],{"class":54},[37,142552,51660],{"class":82},[37,142554,17216],{"class":82},[37,142556,130462],{"class":54},[37,142558,135272],{"class":43},[37,142560,142561],{"class":39,"line":64},[37,142562,142563],{"class":43},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[37,142565,142566],{"class":39,"line":76},[37,142567,142568],{"class":43},"  \u002F* transform-origin: left top; *\u002F\n",[37,142570,142571],{"class":39,"line":92},[37,142572,1637],{"class":54},[22070,142574,142576],{"id":142575},"_18133-旋转案例","18.1.3.3 旋转案例",[119,142578],{"style":126455,"src":142579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[27,142581,142582],{"className":126599,"code":142402,"language":126601,"meta":32,"style":32},[34,142583,142584,142590,142606],{"__ignoreMap":32},[37,142585,142586,142588],{"class":39,"line":40},[37,142587,51679],{"class":51368},[37,142589,15644],{"class":54},[37,142591,142592,142594,142596,142598,142600,142602,142604],{"class":39,"line":47},[37,142593,136583],{"class":82},[37,142595,51505],{"class":54},[37,142597,142419],{"class":82},[37,142599,208],{"class":54},[37,142601,733],{"class":82},[37,142603,142426],{"class":50},[37,142605,2791],{"class":54},[37,142607,142608],{"class":39,"line":58},[37,142609,1637],{"class":54},[175,142611,142613],{"id":142612},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22070,142615,142617],{"id":142616},"_18141-scale介绍","18.1.4.1 scale介绍",[14,142619,142620],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[119,142622],{"style":126455,"src":142623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22070,142625,142627],{"id":142626},"_18142-分页按钮","18.1.4.2 分页按钮",[119,142629],{"style":126455,"src":142630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[27,142632,142634],{"className":126599,"code":142633,"language":126601,"meta":32,"style":32},"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",[34,142635,142636,142642,142658,142662,142666,142671,142677,142691,142696],{"__ignoreMap":32},[37,142637,142638,142640],{"class":39,"line":40},[37,142639,51679],{"class":51368},[37,142641,15644],{"class":54},[37,142643,142644,142646,142648,142651,142653,142656],{"class":39,"line":47},[37,142645,136583],{"class":82},[37,142647,51505],{"class":54},[37,142649,142650],{"class":82},"scale",[37,142652,208],{"class":54},[37,142654,142655],{"class":82},"1.2",[37,142657,2791],{"class":54},[37,142659,142660],{"class":39,"line":58},[37,142661,1637],{"class":54},[37,142663,142664],{"class":39,"line":64},[37,142665,136060],{"class":54},[37,142667,142668],{"class":39,"line":76},[37,142669,142670],{"class":43},"\u002F* 2D 缩放 *\u002F\n",[37,142672,142673,142675],{"class":39,"line":92},[37,142674,51679],{"class":51368},[37,142676,15644],{"class":54},[37,142678,142679,142681,142683,142685,142687,142689],{"class":39,"line":97},[37,142680,136583],{"class":82},[37,142682,51505],{"class":54},[37,142684,142650],{"class":82},[37,142686,208],{"class":54},[37,142688,142655],{"class":82},[37,142690,2791],{"class":54},[37,142692,142693],{"class":39,"line":107},[37,142694,142695],{"class":43},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[37,142697,142698],{"class":39,"line":1390},[37,142699,1637],{"class":54},[14,142701,142702],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[27,142704,142706],{"className":126599,"code":142705,"language":126601,"meta":32,"style":32},"\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",[34,142707,142708,142713,142723,142744,142765,142769,142774,142780,142807],{"__ignoreMap":32},[37,142709,142710],{"class":39,"line":40},[37,142711,142712],{"class":43},"\u002F* 定义动画 *\u002F\n",[37,142714,142715,142718,142721],{"class":39,"line":47},[37,142716,142717],{"class":50},"@keyframes",[37,142719,142720],{"class":5288}," move",[37,142722,15644],{"class":54},[37,142724,142725,142728,142730,142732,142734,142737,142739,142741],{"class":39,"line":58},[37,142726,142727],{"class":2035},"  0%",[37,142729,79875],{"class":54},[37,142731,48202],{"class":82},[37,142733,51505],{"class":54},[37,142735,142736],{"class":82},"translateX",[37,142738,208],{"class":54},[37,142740,396],{"class":82},[37,142742,142743],{"class":54},"); }\n",[37,142745,142746,142749,142751,142753,142755,142757,142759,142761,142763],{"class":39,"line":64},[37,142747,142748],{"class":2035},"  100%",[37,142750,79875],{"class":54},[37,142752,48202],{"class":82},[37,142754,51505],{"class":54},[37,142756,142736],{"class":82},[37,142758,208],{"class":54},[37,142760,516],{"class":82},[37,142762,51560],{"class":50},[37,142764,142743],{"class":54},[37,142766,142767],{"class":39,"line":76},[37,142768,1637],{"class":54},[37,142770,142771],{"class":39,"line":92},[37,142772,142773],{"class":43},"\u002F* 调用动画 *\u002F\n",[37,142775,142776,142778],{"class":39,"line":97},[37,142777,51679],{"class":51368},[37,142779,15644],{"class":54},[37,142781,142782,142785,142787,142789,142791,142793,142795,142797,142799,142802,142805],{"class":39,"line":107},[37,142783,142784],{"class":82},"  animation",[37,142786,51505],{"class":54},[37,142788,135285],{"class":82},[37,142790,25191],{"class":82},[37,142792,898],{"class":50},[37,142794,78748],{"class":82},[37,142796,4165],{"class":82},[37,142798,898],{"class":50},[37,142800,142801],{"class":82}," infinite",[37,142803,142804],{"class":82}," alternate",[37,142806,1364],{"class":54},[37,142808,142809],{"class":39,"line":1390},[37,142810,1637],{"class":54},[14,142812,142702],{},[27,142814,142817],{"className":142815,"code":142816,"language":5259},[5257],"\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",[34,142818,142816],{"__ignoreMap":32},[22070,142820,142822],{"id":142821},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,142824,142825],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[119,142827],{"style":126455,"src":142828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[27,142830,142831],{"className":126599,"code":142705,"language":126601,"meta":32,"style":32},[34,142832,142833,142837,142845,142863,142883,142887,142891,142897,142921],{"__ignoreMap":32},[37,142834,142835],{"class":39,"line":40},[37,142836,142712],{"class":43},[37,142838,142839,142841,142843],{"class":39,"line":47},[37,142840,142717],{"class":50},[37,142842,142720],{"class":5288},[37,142844,15644],{"class":54},[37,142846,142847,142849,142851,142853,142855,142857,142859,142861],{"class":39,"line":58},[37,142848,142727],{"class":2035},[37,142850,79875],{"class":54},[37,142852,48202],{"class":82},[37,142854,51505],{"class":54},[37,142856,142736],{"class":82},[37,142858,208],{"class":54},[37,142860,396],{"class":82},[37,142862,142743],{"class":54},[37,142864,142865,142867,142869,142871,142873,142875,142877,142879,142881],{"class":39,"line":64},[37,142866,142748],{"class":2035},[37,142868,79875],{"class":54},[37,142870,48202],{"class":82},[37,142872,51505],{"class":54},[37,142874,142736],{"class":82},[37,142876,208],{"class":54},[37,142878,516],{"class":82},[37,142880,51560],{"class":50},[37,142882,142743],{"class":54},[37,142884,142885],{"class":39,"line":76},[37,142886,1637],{"class":54},[37,142888,142889],{"class":39,"line":92},[37,142890,142773],{"class":43},[37,142892,142893,142895],{"class":39,"line":97},[37,142894,51679],{"class":51368},[37,142896,15644],{"class":54},[37,142898,142899,142901,142903,142905,142907,142909,142911,142913,142915,142917,142919],{"class":39,"line":107},[37,142900,142784],{"class":82},[37,142902,51505],{"class":54},[37,142904,135285],{"class":82},[37,142906,25191],{"class":82},[37,142908,898],{"class":50},[37,142910,78748],{"class":82},[37,142912,4165],{"class":82},[37,142914,898],{"class":50},[37,142916,142801],{"class":82},[37,142918,142804],{"class":82},[37,142920,1364],{"class":54},[37,142922,142923],{"class":39,"line":1390},[37,142924,1637],{"class":54},[14,142926,142927],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[175,142929,142931],{"id":142930},"_1823-知识点回顾","18.2.3 知识点回顾",[27,142933,142934],{"className":126599,"code":128768,"language":126601,"meta":32,"style":32},[34,142935,142936,142942,142952],{"__ignoreMap":32},[37,142937,142938,142940],{"class":39,"line":40},[37,142939,51679],{"class":51368},[37,142941,15644],{"class":54},[37,142943,142944,142946,142948,142950],{"class":39,"line":47},[37,142945,128781],{"class":82},[37,142947,51505],{"class":54},[37,142949,61804],{"class":82},[37,142951,1364],{"class":54},[37,142953,142954],{"class":39,"line":58},[37,142955,1637],{"class":54},[146,142957,142959],{"id":142958},"_183-3d-转换","18.3 3D 转换",[14,142961,142962],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[175,142964,142966],{"id":142965},"_1831-坐标轴认识","18.3.1 坐标轴认识",[119,142968],{"style":126455,"src":142969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[175,142971,142973],{"id":142972},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[119,142975],{"style":126455,"src":142976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,142978,142979],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,142981,142982],{},"translate3d的效果需要搭配透视perspective来使用",[119,142984],{"style":126455,"src":142985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[175,142987,142989],{"id":142988},"_1833-透视-perspective","18.3.3 透视 perspective",[119,142991],{"style":126455,"src":142992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,142994,142995],{},"透视写在父盒子上，单位为像素",[175,142997,142999],{"id":142998},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22070,143001,143003],{"id":143002},"_18341-分开解释","18.3.4.1 分开解释",[119,143005],{"style":126455,"src":143006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[119,143008],{"style":126455,"src":143009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[119,143011],{"style":126455,"src":143012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,143014,143015],{},"总结来说就是左手原则",[22070,143017,143019],{"id":143018},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[119,143021],{"style":126455,"src":143022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[175,143024,143026],{"id":143025},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[119,143028],{"style":126455,"src":143029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[119,143031],{"style":126455,"src":143032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[27,143034,143036],{"className":126599,"code":143035,"language":126601,"meta":32,"style":32},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[34,143037,143038,143044,143057,143074],{"__ignoreMap":32},[37,143039,143040,143042],{"class":39,"line":40},[37,143041,51679],{"class":51368},[37,143043,15644],{"class":54},[37,143045,143046,143049,143051,143053,143055],{"class":39,"line":47},[37,143047,143048],{"class":82},"  perspective",[37,143050,51505],{"class":54},[37,143052,65142],{"class":82},[37,143054,51560],{"class":50},[37,143056,1364],{"class":54},[37,143058,143059,143061,143063,143066,143068,143070,143072],{"class":39,"line":58},[37,143060,136583],{"class":82},[37,143062,51505],{"class":54},[37,143064,143065],{"class":82},"rotateX",[37,143067,208],{"class":54},[37,143069,733],{"class":82},[37,143071,142426],{"class":50},[37,143073,2791],{"class":54},[37,143075,143076],{"class":39,"line":64},[37,143077,1637],{"class":54},[175,143079,143081],{"id":143080},"_1836-案例","18.3.6 案例",[22070,143083,143085],{"id":143084},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[119,143087],{"style":126455,"src":143088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[119,143090],{"style":126455,"src":143091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[119,143093],{"style":126455,"src":143094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[27,143096,143098],{"className":126599,"code":143097,"language":126601,"meta":32,"style":32},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[34,143099,143100,143105,143111,143123],{"__ignoreMap":32},[37,143101,143102],{"class":39,"line":40},[37,143103,143104],{"class":43},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[37,143106,143107,143109],{"class":39,"line":47},[37,143108,133596],{"class":2035},[37,143110,15644],{"class":54},[37,143112,143113,143115,143117,143119,143121],{"class":39,"line":58},[37,143114,143048],{"class":82},[37,143116,51505],{"class":54},[37,143118,65142],{"class":82},[37,143120,51560],{"class":50},[37,143122,1364],{"class":54},[37,143124,143125],{"class":39,"line":64},[37,143126,1637],{"class":54},[22070,143128,143130],{"id":143129},"_18362-3d导航栏","18.3.6.2 3D导航栏",[119,143132],{"style":126455,"src":143133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[27,143135,143136],{"className":127346,"code":130703,"language":127348,"meta":32,"style":32},[34,143137,143138,143142,143156,143160],{"__ignoreMap":32},[37,143139,143140],{"class":39,"line":40},[37,143141,130710],{"class":43},[37,143143,143144,143146,143148,143150,143152,143154],{"class":39,"line":47},[37,143145,1113],{"class":54},[37,143147,51679],{"class":51368},[37,143149,53554],{"class":2035},[37,143151,70],{"class":54},[37,143153,130723],{"class":309},[37,143155,51375],{"class":54},[37,143157,143158],{"class":39,"line":58},[37,143159,130730],{"class":54},[37,143161,143162,143164,143166],{"class":39,"line":64},[37,143163,51853],{"class":54},[37,143165,51679],{"class":51368},[37,143167,51375],{"class":54},[22070,143169,143171],{"id":143170},"_18363-旋转木马","18.3.6.3 旋转木马",[119,143173],{"style":126455,"src":143174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[27,143176,143177],{"className":126599,"code":142402,"language":126601,"meta":32,"style":32},[34,143178,143179,143185,143201],{"__ignoreMap":32},[37,143180,143181,143183],{"class":39,"line":40},[37,143182,51679],{"class":51368},[37,143184,15644],{"class":54},[37,143186,143187,143189,143191,143193,143195,143197,143199],{"class":39,"line":47},[37,143188,136583],{"class":82},[37,143190,51505],{"class":54},[37,143192,142419],{"class":82},[37,143194,208],{"class":54},[37,143196,733],{"class":82},[37,143198,142426],{"class":50},[37,143200,2791],{"class":54},[37,143202,143203],{"class":39,"line":58},[37,143204,1637],{"class":54},[123,143206,143207],{},"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":32,"searchDepth":47,"depth":47,"links":143209},[143210,143217],{"id":142305,"depth":47,"text":142306,"children":143211},[143212,143213,143214,143215,143216],{"id":142329,"depth":58,"text":142330},{"id":142384,"depth":58,"text":142385},{"id":142509,"depth":58,"text":142510},{"id":142612,"depth":58,"text":142613},{"id":142930,"depth":58,"text":142931},{"id":142958,"depth":47,"text":142959,"children":143218},[143219,143220,143221,143222,143223,143224],{"id":142965,"depth":58,"text":142966},{"id":142972,"depth":58,"text":142973},{"id":142988,"depth":58,"text":142989},{"id":142998,"depth":58,"text":142999},{"id":143025,"depth":58,"text":143026},{"id":143080,"depth":58,"text":143081},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142297,"description":128},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143231,"title":143232,"body":143233,"description":128,"extension":129,"meta":143436,"navigation":131,"path":143437,"seo":143438,"stem":143439,"__hash__":143440},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143234,"toc":143425},[143235,143238,143242,143245,143248,143252,143255,143258,143261,143265,143268,143272,143275,143279,143282,143286,143300,143304,143329,143332,143335,143352,143356,143360,143363,143366,143370,143373,143376,143394,143398,143401,143415,143419,143422],[10,143236,143232],{"id":143237},"_19-移动端基础-前缀现状与视口",[146,143239,143241],{"id":143240},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[119,143243],{"style":126455,"src":143244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143246,143247],{},"意思就是加个前缀，增加兼容性",[146,143249,143251],{"id":143250},"_192-移动端现状认识","19.2 移动端现状认识",[119,143253],{"style":126455,"src":143254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143256,143257],{},"调试方法：",[119,143259],{"style":126455,"src":143260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[146,143262,143264],{"id":143263},"_193-视口","19.3 视口",[14,143266,143267],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[175,143269,143271],{"id":143270},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[119,143273],{"style":126455,"src":143274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[175,143276,143278],{"id":143277},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[119,143280],{"style":126455,"src":143281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[175,143283,143285],{"id":143284},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1210,143287,143288,143291,143294,143297],{},[161,143289,143290],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[161,143292,143293],{},"理想视口，对设备来讲，是最理想的视口尺寸",[161,143295,143296],{},"需要手动添写meta视口标签通知浏览器操作",[161,143298,143299],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[175,143301,143303],{"id":143302},"_1934-meta视口标签","19.3.4 meta视口标签",[27,143305,143307],{"className":127346,"code":143306,"language":127348,"meta":32,"style":32},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[34,143308,143309],{"__ignoreMap":32},[37,143310,143311,143313,143315,143317,143319,143321,143323,143325,143327],{"class":39,"line":40},[37,143312,1113],{"class":54},[37,143314,51412],{"class":51368},[37,143316,14992],{"class":2035},[37,143318,70],{"class":54},[37,143320,51459],{"class":309},[37,143322,51439],{"class":2035},[37,143324,70],{"class":54},[37,143326,51466],{"class":309},[37,143328,51375],{"class":54},[119,143330],{"style":126455,"src":143331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143333,143334],{},"标准视口设置：",[158,143336,143337,143340,143343,143346,143349],{},[161,143338,143339],{},"视口宽度和设备保持一致",[161,143341,143342],{},"视口的默认缩放比例1.0",[161,143344,143345],{},"不允许用户自行缩放",[161,143347,143348],{},"最大允许的缩放比例1.0",[161,143350,143351],{},"最小允许的缩放比例1.0",[175,143353,143355],{"id":143354},"_1935-二倍图","19.3.5 二倍图",[22070,143357,143359],{"id":143358},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[119,143361],{"style":126455,"src":143362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[119,143364],{"style":126455,"src":143365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22070,143367,143369],{"id":143368},"_19352-多倍图","19.3.5.2 多倍图",[119,143371],{"style":126455,"src":143372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143374,143375],{},"二倍图法，代码如下：",[27,143377,143379],{"className":126599,"code":143378,"language":126601,"meta":32,"style":32},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[34,143380,143381,143386],{"__ignoreMap":32},[37,143382,143383],{"class":39,"line":40},[37,143384,143385],{"class":43},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[37,143387,143388,143391],{"class":39,"line":47},[37,143389,143390],{"class":51368},"background-size",[37,143392,143393],{"class":54},": 50% 50%;\n",[22070,143395,143397],{"id":143396},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[119,143399],{"style":126455,"src":143400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[158,143402,143403,143406,143409,143412],{},[161,143404,143405],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[161,143407,143408],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[161,143410,143411],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[161,143413,143414],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22070,143416,143418],{"id":143417},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[119,143420],{"style":126455,"src":143421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[123,143423,143424],{},"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":32,"searchDepth":47,"depth":47,"links":143426},[143427,143428,143429],{"id":143240,"depth":47,"text":143241},{"id":143250,"depth":47,"text":143251},{"id":143263,"depth":47,"text":143264,"children":143430},[143431,143432,143433,143434,143435],{"id":143270,"depth":58,"text":143271},{"id":143277,"depth":58,"text":143278},{"id":143284,"depth":58,"text":143285},{"id":143302,"depth":58,"text":143303},{"id":143354,"depth":58,"text":143355},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143232,"description":128},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143442,"title":143443,"body":143444,"description":128,"extension":129,"meta":144321,"navigation":131,"path":144322,"seo":144323,"stem":144324,"__hash__":144325},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143445,"toc":144305},[143446,143449,143453,143460,143463,143470,143473,143478,143481,143485,143489,143496,143499,143502,143506,143509,143512,143515,143518,143521,143525,143528,143532,143534,143537,143540,143543,143546,143548,143551,143553,143583,143585,143615,143619,143622,143626,143629,143646,143649,143652,143728,143730,143733,143736,143739,143742,143744,143747,143750,143754,143776,143779,143782,143786,143789,143795,143798,143802,143805,143808,143812,143815,143818,143821,143825,143828,143831,143834,143837,143841,143844,143848,143855,143858,143861,143864,143867,143877,143880,143883,143890,143893,143897,143900,143903,143907,143910,143913,143916,143961,143964,143967,143970,143972,144101,144103,144141,144144,144147,144149,144267,144269,144303],[10,143447,143443],{"id":143448},"_20-移动端布局实战上篇",[146,143450,143452],{"id":143451},"_201-移动端主流方案","20.1 移动端主流方案",[158,143454,143455],{},[161,143456,143457],{},[354,143458,143459],{},"单独移动端页面（主流）",[119,143461],{"style":126455,"src":143462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[158,143464,143465],{"start":47},[161,143466,143467],{},[354,143468,143469],{},"响应式兼容PC移动端",[119,143471],{"style":126455,"src":143472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[158,143474,143475],{"start":58},[161,143476,143477],{},"两种页面选型布局方式",[119,143479],{"style":126455,"src":143480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[146,143482,143484],{"id":143483},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[175,143486,143488],{"id":143487},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,143490,143491,143492],{},"官网地址： ",[443,143493,143494],{"href":143494,"rel":143495},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23937],[119,143497],{"style":126455,"src":143498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[119,143500],{"style":126455,"src":143501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[175,143503,143505],{"id":143504},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[119,143507],{"style":126455,"src":143508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[119,143510],{"style":126455,"src":143511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,143513,143514],{},"去除高亮：",[14,143516,143517],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,143519,143520],{},"-webkit- tap-highlight-color: transparent;",[146,143522,143524],{"id":143523},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[119,143526],{"style":126455,"src":143527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[146,143529,143531],{"id":143530},"_204-流式布局案例","20.4 流式布局案例",[14,143533,237],{},[14,143535,143536],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,143538,143539],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,143541,143542],{},"图片格式：",[119,143544],{"style":126455,"src":143545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,143547,135642],{},[119,143549],{"style":126455,"src":143550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,143552,139969],{},[27,143554,143555],{"className":127346,"code":134101,"language":127348,"meta":32,"style":32},[34,143556,143557],{"__ignoreMap":32},[37,143558,143559,143561,143563,143565,143567,143569,143571,143573,143575,143577,143579,143581],{"class":39,"line":40},[37,143560,1113],{"class":54},[37,143562,119],{"class":51368},[37,143564,55307],{"class":2035},[37,143566,70],{"class":54},[37,143568,134116],{"class":309},[37,143570,55315],{"class":2035},[37,143572,70],{"class":54},[37,143574,134123],{"class":309},[37,143576,134126],{"class":2035},[37,143578,70],{"class":54},[37,143580,134131],{"class":309},[37,143582,51375],{"class":54},[14,143584,140058],{},[27,143586,143587],{"className":127346,"code":134101,"language":127348,"meta":32,"style":32},[34,143588,143589],{"__ignoreMap":32},[37,143590,143591,143593,143595,143597,143599,143601,143603,143605,143607,143609,143611,143613],{"class":39,"line":40},[37,143592,1113],{"class":54},[37,143594,119],{"class":51368},[37,143596,55307],{"class":2035},[37,143598,70],{"class":54},[37,143600,134116],{"class":309},[37,143602,55315],{"class":2035},[37,143604,70],{"class":54},[37,143606,134123],{"class":309},[37,143608,134126],{"class":2035},[37,143610,70],{"class":54},[37,143612,134131],{"class":309},[37,143614,51375],{"class":54},[146,143616,143618],{"id":143617},"_205-flex布局","20.5 flex布局",[119,143620],{"style":126455,"src":143621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[175,143623,143625],{"id":143624},"_2051-布局原理","20.5.1 布局原理",[14,143627,143628],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1210,143630,143631,143634,143637,143640,143643],{},[161,143632,143633],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[161,143635,143636],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[161,143638,143639],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[161,143641,143642],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[161,143644,143645],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,143647,143648],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,143650,143651],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[27,143653,143655],{"className":126599,"code":143654,"language":126601,"meta":32,"style":32},"\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",[34,143656,143657,143662,143669,143679,143691,143702,143713,143724],{"__ignoreMap":32},[37,143658,143659],{"class":39,"line":40},[37,143660,143661],{"class":43},"\u002F* Flex 弹性布局 *\u002F\n",[37,143663,143664,143667],{"class":39,"line":47},[37,143665,143666],{"class":2035},".container",[37,143668,15644],{"class":54},[37,143670,143671,143673,143675,143677],{"class":39,"line":58},[37,143672,128215],{"class":82},[37,143674,51505],{"class":54},[37,143676,51545],{"class":82},[37,143678,1364],{"class":54},[37,143680,143681,143684,143686,143689],{"class":39,"line":64},[37,143682,143683],{"class":82},"  flex-direction",[37,143685,51505],{"class":54},[37,143687,143688],{"class":82},"row",[37,143690,1364],{"class":54},[37,143692,143693,143696,143698,143700],{"class":39,"line":76},[37,143694,143695],{"class":82},"  justify-content",[37,143697,51505],{"class":54},[37,143699,51736],{"class":82},[37,143701,1364],{"class":54},[37,143703,143704,143707,143709,143711],{"class":39,"line":92},[37,143705,143706],{"class":82},"  align-items",[37,143708,51505],{"class":54},[37,143710,51660],{"class":82},[37,143712,1364],{"class":54},[37,143714,143715,143718,143720,143722],{"class":39,"line":97},[37,143716,143717],{"class":82},"  flex-wrap",[37,143719,51505],{"class":54},[37,143721,78678],{"class":82},[37,143723,1364],{"class":54},[37,143725,143726],{"class":39,"line":107},[37,143727,1637],{"class":54},[14,143729,70521],{},[14,143731,143732],{},".form-item .male-label {",[14,143734,143735],{},"   margin-right: 20px;",[14,143737,143738],{},"   display: inline-flex;",[14,143740,143741],{},"   align-items: center;",[14,143743,1149],{},[119,143745],{"style":126455,"src":143746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[119,143748],{"style":126455,"src":143749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[175,143751,143753],{"id":143752},"_2052-常见父项属性","20.5.2 常见父项属性",[158,143755,143756,143759,143762,143765,143768,143771,143774],{},[161,143757,143758],{},"flex-direction：设置主轴的方向",[161,143760,143761],{},"justify-content：设置主轴上的子元素排列方式",[161,143763,143764],{},"flex-wrap：设置子元素是否换行",[161,143766,143767],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[161,143769,143770],{},"align-items：设置侧轴上的子元素排列方式（单行）",[161,143772,143773],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[161,143775,143758],{},[119,143777],{"style":126455,"src":143778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[119,143780],{"style":126455,"src":143781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[158,143783,143784],{"start":47},[161,143785,143761],{},[119,143787],{"style":126455,"src":143788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,143790,143791,143794],{},[34,143792,143793],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,143796,143797],{},"跟着主轴走",[158,143799,143800],{"start":58},[161,143801,143764],{},[119,143803],{"style":126455,"src":143804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,143806,143807],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[158,143809,143810],{"start":64},[161,143811,143767],{},[119,143813],{"style":126455,"src":143814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,143816,143817],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,143819,143820],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[158,143822,143823],{"start":76},[161,143824,143770],{},[119,143826],{"style":126455,"src":143827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,143829,143830],{},"align-items与align-content之间的区别：",[14,143832,143833],{},"单找items，多找content",[119,143835],{"style":126455,"src":143836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[158,143838,143839],{"start":92},[161,143840,143773],{},[119,143842],{"style":126455,"src":143843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[175,143845,143847],{"id":143846},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[158,143849,143850],{},[161,143851,143852],{},[354,143853,143854],{},"flex 属性",[14,143856,143857],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[119,143859],{"style":126455,"src":143860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,143862,143863],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,143865,143866],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[158,143868,143869],{"start":47},[161,143870,143871,13867,143874],{},[354,143872,143873],{},"align-self",[354,143875,143876],{},"控制子项自己在侧轴上的排列方式",[119,143878],{"style":126455,"src":143879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,143881,143882],{},"单个子盒子在父盒子侧轴上的排列方式",[158,143884,143885],{"start":58},[161,143886,143887,143889],{},[354,143888,95344],{}," 属性定义项目的排列顺序",[119,143891],{"style":126455,"src":143892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[175,143894,143896],{"id":143895},"_2054-背景线性渐变","20.5.4 背景线性渐变",[119,143898],{"style":126455,"src":143899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,143901,143902],{},"必须要添加浏览器的私有前缀",[175,143904,143906],{"id":143905},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,143908,143909],{},"学到最重要的知识：",[14,143911,143912],{},"flex处理这样的布局思路",[119,143914],{"style":126455,"src":143915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[27,143917,143919],{"className":126599,"code":143918,"language":126601,"meta":32,"style":32},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[34,143920,143921,143927,143937,143947,143957],{"__ignoreMap":32},[37,143922,143923,143925],{"class":39,"line":40},[37,143924,143666],{"class":2035},[37,143926,15644],{"class":54},[37,143928,143929,143931,143933,143935],{"class":39,"line":47},[37,143930,128215],{"class":82},[37,143932,51505],{"class":54},[37,143934,51545],{"class":82},[37,143936,1364],{"class":54},[37,143938,143939,143941,143943,143945],{"class":39,"line":58},[37,143940,143695],{"class":82},[37,143942,51505],{"class":54},[37,143944,51660],{"class":82},[37,143946,1364],{"class":54},[37,143948,143949,143951,143953,143955],{"class":39,"line":64},[37,143950,143706],{"class":82},[37,143952,51505],{"class":54},[37,143954,51660],{"class":82},[37,143956,1364],{"class":54},[37,143958,143959],{"class":39,"line":76},[37,143960,1637],{"class":54},[14,143962,143963],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,143965,143966],{},"使用属性选择器",[119,143968],{"style":126455,"src":143969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,143971,68957],{},[27,143973,143975],{"className":127346,"code":143974,"language":127348,"meta":32,"style":32},"\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",[34,143976,143977,143982,143996,144001,144021,144026,144045,144050,144069,144074,144093],{"__ignoreMap":32},[37,143978,143979],{"class":39,"line":40},[37,143980,143981],{"class":43},"\u003C!-- 携程网移动端案例结构 -->\n",[37,143983,143984,143986,143988,143990,143992,143994],{"class":39,"line":47},[37,143985,1113],{"class":54},[37,143987,51679],{"class":51368},[37,143989,53554],{"class":2035},[37,143991,70],{"class":54},[37,143993,92391],{"class":309},[37,143995,51375],{"class":54},[37,143997,143998],{"class":39,"line":58},[37,143999,144000],{"class":43},"  \u003C!-- 搜索栏 -->\n",[37,144002,144003,144005,144007,144009,144011,144014,144017,144019],{"class":39,"line":64},[37,144004,52212],{"class":54},[37,144006,51679],{"class":51368},[37,144008,53554],{"class":2035},[37,144010,70],{"class":54},[37,144012,144013],{"class":309},"\"search-index\"",[37,144015,144016],{"class":54},">...\u003C\u002F",[37,144018,51679],{"class":51368},[37,144020,51375],{"class":54},[37,144022,144023],{"class":39,"line":76},[37,144024,144025],{"class":43},"  \u003C!-- 焦点图 -->\n",[37,144027,144028,144030,144032,144034,144036,144039,144041,144043],{"class":39,"line":92},[37,144029,52212],{"class":54},[37,144031,51679],{"class":51368},[37,144033,53554],{"class":2035},[37,144035,70],{"class":54},[37,144037,144038],{"class":309},"\"focus\"",[37,144040,144016],{"class":54},[37,144042,51679],{"class":51368},[37,144044,51375],{"class":54},[37,144046,144047],{"class":39,"line":97},[37,144048,144049],{"class":43},"  \u003C!-- 主导航 -->\n",[37,144051,144052,144054,144056,144058,144060,144063,144065,144067],{"class":39,"line":107},[37,144053,52212],{"class":54},[37,144055,51679],{"class":51368},[37,144057,53554],{"class":2035},[37,144059,70],{"class":54},[37,144061,144062],{"class":309},"\"local-nav\"",[37,144064,144016],{"class":54},[37,144066,51679],{"class":51368},[37,144068,51375],{"class":54},[37,144070,144071],{"class":39,"line":1390},[37,144072,144073],{"class":43},"  \u003C!-- 子导航 -->\n",[37,144075,144076,144078,144080,144082,144084,144087,144089,144091],{"class":39,"line":1402},[37,144077,52212],{"class":54},[37,144079,51679],{"class":51368},[37,144081,53554],{"class":2035},[37,144083,70],{"class":54},[37,144085,144086],{"class":309},"\"nav-common\"",[37,144088,144016],{"class":54},[37,144090,51679],{"class":51368},[37,144092,51375],{"class":54},[37,144094,144095,144097,144099],{"class":39,"line":1684},[37,144096,51853],{"class":54},[37,144098,51679],{"class":51368},[37,144100,51375],{"class":54},[14,144102,70521],{},[27,144104,144105],{"className":126599,"code":137051,"language":126601,"meta":32,"style":32},[34,144106,144107,144121,144137],{"__ignoreMap":32},[37,144108,144109,144111,144113,144115,144117,144119],{"class":39,"line":40},[37,144110,53889],{"class":51368},[37,144112,1093],{"class":54},[37,144114,103154],{"class":2035},[37,144116,70],{"class":50},[37,144118,62767],{"class":309},[37,144120,137068],{"class":54},[37,144122,144123,144125,144127,144129,144131,144133,144135],{"class":39,"line":47},[37,144124,70964],{"class":82},[37,144126,51505],{"class":54},[37,144128,422],{"class":82},[37,144130,51560],{"class":50},[37,144132,51589],{"class":82},[37,144134,130179],{"class":82},[37,144136,1364],{"class":54},[37,144138,144139],{"class":39,"line":58},[37,144140,1637],{"class":54},[14,144142,144143],{},"总代码和效果展示：",[119,144145],{"style":126455,"src":144146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144148,68957],{},[27,144150,144151],{"className":127346,"code":143974,"language":127348,"meta":32,"style":32},[34,144152,144153,144157,144171,144175,144193,144197,144215,144219,144237,144241,144259],{"__ignoreMap":32},[37,144154,144155],{"class":39,"line":40},[37,144156,143981],{"class":43},[37,144158,144159,144161,144163,144165,144167,144169],{"class":39,"line":47},[37,144160,1113],{"class":54},[37,144162,51679],{"class":51368},[37,144164,53554],{"class":2035},[37,144166,70],{"class":54},[37,144168,92391],{"class":309},[37,144170,51375],{"class":54},[37,144172,144173],{"class":39,"line":58},[37,144174,144000],{"class":43},[37,144176,144177,144179,144181,144183,144185,144187,144189,144191],{"class":39,"line":64},[37,144178,52212],{"class":54},[37,144180,51679],{"class":51368},[37,144182,53554],{"class":2035},[37,144184,70],{"class":54},[37,144186,144013],{"class":309},[37,144188,144016],{"class":54},[37,144190,51679],{"class":51368},[37,144192,51375],{"class":54},[37,144194,144195],{"class":39,"line":76},[37,144196,144025],{"class":43},[37,144198,144199,144201,144203,144205,144207,144209,144211,144213],{"class":39,"line":92},[37,144200,52212],{"class":54},[37,144202,51679],{"class":51368},[37,144204,53554],{"class":2035},[37,144206,70],{"class":54},[37,144208,144038],{"class":309},[37,144210,144016],{"class":54},[37,144212,51679],{"class":51368},[37,144214,51375],{"class":54},[37,144216,144217],{"class":39,"line":97},[37,144218,144049],{"class":43},[37,144220,144221,144223,144225,144227,144229,144231,144233,144235],{"class":39,"line":107},[37,144222,52212],{"class":54},[37,144224,51679],{"class":51368},[37,144226,53554],{"class":2035},[37,144228,70],{"class":54},[37,144230,144062],{"class":309},[37,144232,144016],{"class":54},[37,144234,51679],{"class":51368},[37,144236,51375],{"class":54},[37,144238,144239],{"class":39,"line":1390},[37,144240,144073],{"class":43},[37,144242,144243,144245,144247,144249,144251,144253,144255,144257],{"class":39,"line":1402},[37,144244,52212],{"class":54},[37,144246,51679],{"class":51368},[37,144248,53554],{"class":2035},[37,144250,70],{"class":54},[37,144252,144086],{"class":309},[37,144254,144016],{"class":54},[37,144256,51679],{"class":51368},[37,144258,51375],{"class":54},[37,144260,144261,144263,144265],{"class":39,"line":1684},[37,144262,51853],{"class":54},[37,144264,51679],{"class":51368},[37,144266,51375],{"class":54},[14,144268,70521],{},[27,144270,144271],{"className":127346,"code":130703,"language":127348,"meta":32,"style":32},[34,144272,144273,144277,144291,144295],{"__ignoreMap":32},[37,144274,144275],{"class":39,"line":40},[37,144276,130710],{"class":43},[37,144278,144279,144281,144283,144285,144287,144289],{"class":39,"line":47},[37,144280,1113],{"class":54},[37,144282,51679],{"class":51368},[37,144284,53554],{"class":2035},[37,144286,70],{"class":54},[37,144288,130723],{"class":309},[37,144290,51375],{"class":54},[37,144292,144293],{"class":39,"line":58},[37,144294,130730],{"class":54},[37,144296,144297,144299,144301],{"class":39,"line":64},[37,144298,51853],{"class":54},[37,144300,51679],{"class":51368},[37,144302,51375],{"class":54},[123,144304,138000],{},{"title":32,"searchDepth":47,"depth":47,"links":144306},[144307,144308,144312,144313,144314],{"id":143451,"depth":47,"text":143452},{"id":143483,"depth":47,"text":143484,"children":144309},[144310,144311],{"id":143487,"depth":58,"text":143488},{"id":143504,"depth":58,"text":143505},{"id":143523,"depth":47,"text":143524},{"id":143530,"depth":47,"text":143531},{"id":143617,"depth":47,"text":143618,"children":144315},[144316,144317,144318,144319,144320],{"id":143624,"depth":58,"text":143625},{"id":143752,"depth":58,"text":143753},{"id":143846,"depth":58,"text":143847},{"id":143895,"depth":58,"text":143896},{"id":143905,"depth":58,"text":143906},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143443,"description":128},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144327,"title":144328,"body":144329,"description":128,"extension":129,"meta":145556,"navigation":131,"path":145557,"seo":145558,"stem":145559,"__hash__":145560},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144330,"toc":145534},[144331,144334,144338,144342,144345,144348,144352,144357,144360,144363,144366,144369,144372,144429,144432,144437,144440,144443,144447,144458,144462,144465,144468,144475,144480,144484,144487,144493,144496,144500,144503,144510,144513,144516,144523,144526,144533,144536,144539,144546,144549,144552,144554,144571,144575,144578,144581,144584,144588,144591,144594,144597,144600,144603,144606,144608,144611,144614,144676,144679,144789,144796,144802,144805,144808,144812,144815,144819,144824,144827,144834,144837,144843,144848,144851,144854,144857,144860,144863,144866,144869,144872,144928,144930,144956,144960,144963,144966,144969,144977,144980,144983,144987,145043,145046,145050,145056,145067,145070,145075,145078,145081,145087,145090,145093,145096,145099,145102,145105,145108,145111,145136,145142,145145,145148,145151,145154,145157,145160,145165,145168,145171,145174,145182,145185,145192,145195,145198,145200,145224,145226,145229,145232,145235,145238,145241,145244,145247,145281,145284,145287,145321,145328,145331,145334,145337,145340,145343,145346,145353,145356,145359,145362,145365,145372,145375,145378,145385,145388,145391,145395,145398,145401,145404,145407,145410,145413,145416,145419,145421,145445,145447,145471,145475,145486,145489,145492,145495,145498,145501,145504,145507,145510,145513,145516,145519,145522,145525,145528,145531],[10,144332,144328],{"id":144333},"_21-移动端布局实战下篇",[146,144335,144337],{"id":144336},"_211-rem适配布局","21.1 rem适配布局",[175,144339,144341],{"id":144340},"_2111-rem单位","21.1.1 rem单位",[119,144343],{"style":126455,"src":144344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144346,144347],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[175,144349,144351],{"id":144350},"_2112-媒体查询","21.1.2 媒体查询",[158,144353,144354],{},[161,144355,144356],{},"参数介绍",[119,144358],{"style":126455,"src":144359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[119,144361],{"style":126455,"src":144362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[119,144364],{"style":126455,"src":144365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[119,144367],{"style":126455,"src":144368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[119,144370],{"style":126455,"src":144371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[27,144373,144375],{"className":126599,"code":144374,"language":126601,"meta":32,"style":32},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[34,144376,144377,144382,144401,144408,144421,144425],{"__ignoreMap":32},[37,144378,144379],{"class":39,"line":40},[37,144380,144381],{"class":43},"\u002F* 媒体查询 *\u002F\n",[37,144383,144384,144387,144389,144392,144394,144397,144399],{"class":39,"line":47},[37,144385,144386],{"class":50},"@media",[37,144388,1730],{"class":54},[37,144390,144391],{"class":82},"max-width",[37,144393,51505],{"class":54},[37,144395,144396],{"class":82},"768",[37,144398,51560],{"class":50},[37,144400,12514],{"class":54},[37,144402,144403,144406],{"class":39,"line":58},[37,144404,144405],{"class":2035},"  .container",[37,144407,15644],{"class":54},[37,144409,144410,144413,144415,144417,144419],{"class":39,"line":64},[37,144411,144412],{"class":82},"    width",[37,144414,51505],{"class":54},[37,144416,516],{"class":82},[37,144418,533],{"class":50},[37,144420,1364],{"class":54},[37,144422,144423],{"class":39,"line":76},[37,144424,127395],{"class":54},[37,144426,144427],{"class":39,"line":92},[37,144428,1637],{"class":54},[14,144430,144431],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[158,144433,144434],{"start":47},[161,144435,144436],{},"引入资源",[119,144438],{"style":126455,"src":144439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,144441,144442],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[175,144444,144446],{"id":144445},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1210,144448,144449,144452,144455],{},[161,144450,144451],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[161,144453,144454],{},"媒体查询可以根据不同设备宽度来修改样式",[161,144456,144457],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[146,144459,144461],{"id":144460},"_212-less基础","21.2 Less基础",[14,144463,144464],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,144466,144467],{},"Less可以解决该问题，它是css的扩展语言",[14,144469,144470,144471],{},"Less中文网址： ",[443,144472,144473],{"href":144473,"rel":144474},"http:\u002F\u002Flesscss.cn\u002F",[23937],[14,144476,144477],{},[354,144478,144479],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[175,144481,144483],{"id":144482},"_2121-less安装","21.2.1 less安装",[14,144485,144486],{},"如果使用vscode，则无需进行下方安装步骤",[14,144488,144489],{},[443,144490,144491],{"href":144491,"rel":144492},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23937],[119,144494],{"style":126455,"src":144495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[175,144497,144499],{"id":144498},"_2122-less使用","21.2.2 less使用",[14,144501,144502],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[158,144504,144505],{},[161,144506,144507],{},[354,144508,144509],{},"Less 变量",[119,144511],{"style":126455,"src":144512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[119,144514],{"style":126455,"src":144515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[158,144517,144518],{"start":47},[161,144519,144520],{},[354,144521,144522],{},"Less 编译",[119,144524],{"style":126455,"src":144525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[158,144527,144528],{"start":58},[161,144529,144530],{},[354,144531,144532],{},"Less 嵌套",[119,144534],{"style":126455,"src":144535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[119,144537],{"style":126455,"src":144538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[158,144540,144541],{"start":64},[161,144542,144543],{},[354,144544,144545],{},"Less 运算",[119,144547],{"style":126455,"src":144548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,144550,144551],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,144553,237],{},[1210,144555,144556,144559,144562,144565,144568],{},[161,144557,144558],{},"乘号（*）和除号（\u002F）的写法",[161,144560,144561],{},"运算符中间左右有个空格隔开 1px + 5",[161,144563,144564],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[161,144566,144567],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[161,144569,144570],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[146,144572,144574],{"id":144573},"_213-rem-适配方案","21.3 rem 适配方案",[14,144576,144577],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,144579,144580],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[119,144582],{"style":126455,"src":144583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[175,144585,144587],{"id":144586},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,144589,144590],{},"rem + 媒体查询 + less 技术",[119,144592],{"style":126455,"src":144593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,144595,144596],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,144598,144599],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[119,144601],{"style":126455,"src":144602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,144604,144605],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,144607,14705],{},[119,144609],{"style":126455,"src":144610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,144612,144613],{},"index.html:",[27,144615,144617],{"className":126599,"code":144616,"language":126601,"meta":32,"style":32},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[34,144618,144619,144624,144630,144646,144650,144656,144672],{"__ignoreMap":32},[37,144620,144621],{"class":39,"line":40},[37,144622,144623],{"class":43},"\u002F* rem 适配方案 *\u002F\n",[37,144625,144626,144628],{"class":39,"line":47},[37,144627,50703],{"class":51368},[37,144629,15644],{"class":54},[37,144631,144632,144634,144636,144639,144641,144643],{"class":39,"line":58},[37,144633,70694],{"class":82},[37,144635,51505],{"class":54},[37,144637,144638],{"class":82},"62.5",[37,144640,533],{"class":50},[37,144642,130462],{"class":54},[37,144644,144645],{"class":43},"\u002F* 1rem = 10px *\u002F\n",[37,144647,144648],{"class":39,"line":64},[37,144649,1637],{"class":54},[37,144651,144652,144654],{"class":39,"line":76},[37,144653,130447],{"class":2035},[37,144655,15644],{"class":54},[37,144657,144658,144660,144662,144664,144667,144669],{"class":39,"line":92},[37,144659,70636],{"class":82},[37,144661,51505],{"class":54},[37,144663,650],{"class":82},[37,144665,144666],{"class":50},"rem",[37,144668,130462],{"class":54},[37,144670,144671],{"class":43},"\u002F* 100px *\u002F\n",[37,144673,144674],{"class":39,"line":97},[37,144675,1637],{"class":54},[14,144677,144678],{},"common.less",[27,144680,144682],{"className":126599,"code":144681,"language":126601,"meta":32,"style":32},"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",[34,144683,144684,144690,144705,144709,144715,144729,144733,144737,144741,144747,144761,144765,144771,144785],{"__ignoreMap":32},[37,144685,144686,144688],{"class":39,"line":40},[37,144687,50703],{"class":51368},[37,144689,15644],{"class":54},[37,144691,144692,144694,144696,144698,144700,144702],{"class":39,"line":47},[37,144693,70694],{"class":82},[37,144695,51505],{"class":54},[37,144697,144638],{"class":82},[37,144699,533],{"class":50},[37,144701,26140],{"class":54},[37,144703,144704],{"class":43},"\u002F* 10px *\u002F\n",[37,144706,144707],{"class":39,"line":58},[37,144708,1637],{"class":54},[37,144710,144711,144713],{"class":39,"line":64},[37,144712,51679],{"class":51368},[37,144714,15644],{"class":54},[37,144716,144717,144719,144721,144723,144725,144727],{"class":39,"line":76},[37,144718,70636],{"class":82},[37,144720,51505],{"class":54},[37,144722,650],{"class":82},[37,144724,144666],{"class":50},[37,144726,26140],{"class":54},[37,144728,144671],{"class":43},[37,144730,144731],{"class":39,"line":92},[37,144732,1637],{"class":54},[37,144734,144735],{"class":39,"line":97},[37,144736,136060],{"class":54},[37,144738,144739],{"class":39,"line":107},[37,144740,144623],{"class":43},[37,144742,144743,144745],{"class":39,"line":1390},[37,144744,50703],{"class":51368},[37,144746,15644],{"class":54},[37,144748,144749,144751,144753,144755,144757,144759],{"class":39,"line":1402},[37,144750,70694],{"class":82},[37,144752,51505],{"class":54},[37,144754,144638],{"class":82},[37,144756,533],{"class":50},[37,144758,130462],{"class":54},[37,144760,144645],{"class":43},[37,144762,144763],{"class":39,"line":1684},[37,144764,1637],{"class":54},[37,144766,144767,144769],{"class":39,"line":1689},[37,144768,130447],{"class":2035},[37,144770,15644],{"class":54},[37,144772,144773,144775,144777,144779,144781,144783],{"class":39,"line":1695},[37,144774,70636],{"class":82},[37,144776,51505],{"class":54},[37,144778,650],{"class":82},[37,144780,144666],{"class":50},[37,144782,130462],{"class":54},[37,144784,144671],{"class":43},[37,144786,144787],{"class":39,"line":1700},[37,144788,1637],{"class":54},[14,144790,144791,144792,144795],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23625,144793,144794],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[27,144797,144800],{"className":144798,"code":144799,"language":5259},[5257],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[34,144801,144799],{"__ignoreMap":32},[14,144803,144804],{},"less保存时会自动变成.css文件",[14,144806,144807],{},"好好搞懂上述代码写法",[175,144809,144811],{"id":144810},"_2132-样式导入样式","21.3.2 样式导入样式",[119,144813],{"style":126455,"src":144814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[175,144816,144818],{"id":144817},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[158,144820,144821],{},[161,144822,144823],{},"准备工作",[119,144825],{"style":126455,"src":144826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,144828,144829,144830],{},"github地址：",[443,144831,144832],{"href":144832,"rel":144833},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23937],[14,144835,144836],{},"下载之后，将index.js文件拖到项目中就可以了",[14,144838,144839,144840],{},"js文件引入到index.html中使用的是",[34,144841,144842],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[158,144844,144845],{"start":47},[161,144846,144847],{},"vscode插件",[119,144849],{"style":126455,"src":144850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,144852,144853],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,144855,144856],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[119,144858],{"style":126455,"src":144859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,144861,144862],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[119,144864],{"style":126455,"src":144865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,144867,144868],{},"修改成75就可以，alt+z为快捷键",[14,144870,144871],{},"index.css：",[27,144873,144874],{"className":126599,"code":144616,"language":126601,"meta":32,"style":32},[34,144875,144876,144880,144886,144900,144904,144910,144924],{"__ignoreMap":32},[37,144877,144878],{"class":39,"line":40},[37,144879,144623],{"class":43},[37,144881,144882,144884],{"class":39,"line":47},[37,144883,50703],{"class":51368},[37,144885,15644],{"class":54},[37,144887,144888,144890,144892,144894,144896,144898],{"class":39,"line":58},[37,144889,70694],{"class":82},[37,144891,51505],{"class":54},[37,144893,144638],{"class":82},[37,144895,533],{"class":50},[37,144897,130462],{"class":54},[37,144899,144645],{"class":43},[37,144901,144902],{"class":39,"line":64},[37,144903,1637],{"class":54},[37,144905,144906,144908],{"class":39,"line":76},[37,144907,130447],{"class":2035},[37,144909,15644],{"class":54},[37,144911,144912,144914,144916,144918,144920,144922],{"class":39,"line":92},[37,144913,70636],{"class":82},[37,144915,51505],{"class":54},[37,144917,650],{"class":82},[37,144919,144666],{"class":50},[37,144921,130462],{"class":54},[37,144923,144671],{"class":43},[37,144925,144926],{"class":39,"line":97},[37,144927,1637],{"class":54},[14,144929,144613],{},[27,144931,144932],{"className":126599,"code":127003,"language":126601,"meta":32,"style":32},[34,144933,144934,144940,144952],{"__ignoreMap":32},[37,144935,144936,144938],{"class":39,"line":40},[37,144937,51868],{"class":51368},[37,144939,15644],{"class":54},[37,144941,144942,144944,144946,144948,144950],{"class":39,"line":47},[37,144943,70694],{"class":82},[37,144945,51505],{"class":54},[37,144947,804],{"class":82},[37,144949,51560],{"class":50},[37,144951,1364],{"class":54},[37,144953,144954],{"class":39,"line":58},[37,144955,1637],{"class":54},[146,144957,144959],{"id":144958},"_214-响应式开发","21.4 响应式开发",[14,144961,144962],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[119,144964],{"style":126455,"src":144965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,144967,144968],{},"做法：",[1210,144970,144971,144974],{},[161,144972,144973],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[161,144975,144976],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[119,144978],{"style":126455,"src":144979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,144981,144982],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[175,144984,144986],{"id":144985},"_2141-简单代码示范","21.4.1 简单代码示范",[27,144988,144989],{"className":126599,"code":144616,"language":126601,"meta":32,"style":32},[34,144990,144991,144995,145001,145015,145019,145025,145039],{"__ignoreMap":32},[37,144992,144993],{"class":39,"line":40},[37,144994,144623],{"class":43},[37,144996,144997,144999],{"class":39,"line":47},[37,144998,50703],{"class":51368},[37,145000,15644],{"class":54},[37,145002,145003,145005,145007,145009,145011,145013],{"class":39,"line":58},[37,145004,70694],{"class":82},[37,145006,51505],{"class":54},[37,145008,144638],{"class":82},[37,145010,533],{"class":50},[37,145012,130462],{"class":54},[37,145014,144645],{"class":43},[37,145016,145017],{"class":39,"line":64},[37,145018,1637],{"class":54},[37,145020,145021,145023],{"class":39,"line":76},[37,145022,130447],{"class":2035},[37,145024,15644],{"class":54},[37,145026,145027,145029,145031,145033,145035,145037],{"class":39,"line":92},[37,145028,70636],{"class":82},[37,145030,51505],{"class":54},[37,145032,650],{"class":82},[37,145034,144666],{"class":50},[37,145036,130462],{"class":54},[37,145038,144671],{"class":43},[37,145040,145041],{"class":39,"line":97},[37,145042,1637],{"class":54},[14,145044,145045],{},"父盒子一般命名为container",[175,145047,145049],{"id":145048},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,145051,145052,145053],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[354,145054,145055],{},"使得 Web 开发更加快捷",[1210,145057,145058],{},[161,145059,145060,145061],{},"官网：",[354,145062,145063],{},[443,145064,145065],{"href":145065,"rel":145066},"http:\u002F\u002Fgetbootstrap.com\u002F",[23937],[14,145068,145069],{},"可以直接去官网拿现成的东西",[158,145071,145072],{},[161,145073,145074],{},"Bootstrap的使用",[14,145076,145077],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145079,145080],{},"Bootstrap 使用四步曲：",[14,145082,145083,145086],{},[354,145084,145085],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[119,145088],{"style":126455,"src":145089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145091,145092],{},"打开Bootstrap官网，然后下载",[119,145094],{"style":126455,"src":145095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[119,145097],{"style":126455,"src":145098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145100,145101],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145103,145104],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145106,145107],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[119,145109],{"style":126455,"src":145110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[27,145112,145114],{"className":126599,"code":145113,"language":126601,"meta":32,"style":32},".center {\n  color: red;\n}\n",[34,145115,145116,145122,145132],{"__ignoreMap":32},[37,145117,145118,145120],{"class":39,"line":40},[37,145119,126890],{"class":2035},[37,145121,15644],{"class":54},[37,145123,145124,145126,145128,145130],{"class":39,"line":47},[37,145125,70973],{"class":82},[37,145127,51505],{"class":54},[37,145129,57489],{"class":82},[37,145131,1364],{"class":54},[37,145133,145134],{"class":39,"line":58},[37,145135,1637],{"class":54},[14,145137,145138,145141],{},[34,145139,145140],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[119,145143],{"style":126455,"src":145144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[119,145146],{"style":126455,"src":145147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[119,145149],{"style":126455,"src":145150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145152,145153],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[119,145155],{"style":126455,"src":145156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145158,145159],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[158,145161,145162],{"start":47},[161,145163,145164],{},"布局容器",[119,145166],{"style":126455,"src":145167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145169,145170],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145172,145173],{},"container-fluid用于移动式布局比较方便",[158,145175,145176],{"start":58},[161,145177,145178,145179],{},"bootstrap ",[354,145180,145181],{},"栅格系统原理",[119,145183],{"style":126455,"src":145184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[158,145186,145187],{"start":64},[161,145188,145189],{},[354,145190,145191],{},"栅格选项参数",[119,145193],{"style":126455,"src":145194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145196,145197],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145199,14705],{},[27,145201,145202],{"className":126599,"code":145113,"language":126601,"meta":32,"style":32},[34,145203,145204,145210,145220],{"__ignoreMap":32},[37,145205,145206,145208],{"class":39,"line":40},[37,145207,126890],{"class":2035},[37,145209,15644],{"class":54},[37,145211,145212,145214,145216,145218],{"class":39,"line":47},[37,145213,70973],{"class":82},[37,145215,51505],{"class":54},[37,145217,57489],{"class":82},[37,145219,1364],{"class":54},[37,145221,145222],{"class":39,"line":58},[37,145223,1637],{"class":54},[14,145225,135642],{},[119,145227],{"style":126455,"src":145228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145230,145231],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145233,145234],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145236,145237],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145239,145240],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145242,145243],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145245,145246],{},"汇总展示说明：",[27,145248,145249],{"className":127346,"code":130703,"language":127348,"meta":32,"style":32},[34,145250,145251,145255,145269,145273],{"__ignoreMap":32},[37,145252,145253],{"class":39,"line":40},[37,145254,130710],{"class":43},[37,145256,145257,145259,145261,145263,145265,145267],{"class":39,"line":47},[37,145258,1113],{"class":54},[37,145260,51679],{"class":51368},[37,145262,53554],{"class":2035},[37,145264,70],{"class":54},[37,145266,130723],{"class":309},[37,145268,51375],{"class":54},[37,145270,145271],{"class":39,"line":58},[37,145272,130730],{"class":54},[37,145274,145275,145277,145279],{"class":39,"line":64},[37,145276,51853],{"class":54},[37,145278,51679],{"class":51368},[37,145280,51375],{"class":54},[119,145282],{"style":126455,"src":145283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145285,145286],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[27,145288,145289],{"className":127346,"code":130703,"language":127348,"meta":32,"style":32},[34,145290,145291,145295,145309,145313],{"__ignoreMap":32},[37,145292,145293],{"class":39,"line":40},[37,145294,130710],{"class":43},[37,145296,145297,145299,145301,145303,145305,145307],{"class":39,"line":47},[37,145298,1113],{"class":54},[37,145300,51679],{"class":51368},[37,145302,53554],{"class":2035},[37,145304,70],{"class":54},[37,145306,130723],{"class":309},[37,145308,51375],{"class":54},[37,145310,145311],{"class":39,"line":58},[37,145312,130730],{"class":54},[37,145314,145315,145317,145319],{"class":39,"line":64},[37,145316,51853],{"class":54},[37,145318,51679],{"class":51368},[37,145320,51375],{"class":54},[158,145322,145323],{"start":76},[161,145324,145325],{},[354,145326,145327],{},"列嵌套",[119,145329],{"style":126455,"src":145330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145332,145333],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145335,145336],{},"没加row内部这样：",[119,145338],{"style":126455,"src":145339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145341,145342],{},"加上row之后内部为：",[119,145344],{"style":126455,"src":145345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[158,145347,145348],{"start":92},[161,145349,145350],{},[354,145351,145352],{},"列偏移",[119,145354],{"style":126455,"src":145355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145357,145358],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145360,145361],{},"要加偏移量，即偏移份数",[14,145363,145364],{},"偏移的份数=12-两个盒子的份数",[158,145366,145367],{"start":97},[161,145368,145369],{},[354,145370,145371],{},"列排序",[119,145373],{"style":126455,"src":145374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145376,145377],{},"pull拉左；push推右",[158,145379,145380],{"start":107},[161,145381,145382],{},[354,145383,145384],{},"响应式工具",[119,145386],{"style":126455,"src":145387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145389,145390],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[175,145392,145394],{"id":145393},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145396,145397],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145399,145400],{},"ul {",[14,145402,145403],{},"list-style: none;",[14,145405,145406],{},"margin:0;",[14,145408,145409],{},"padding:0; }",[119,145411],{"style":126455,"src":145412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[119,145414],{"style":126455,"src":145415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145417,145418],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,145420,68957],{},[27,145422,145423],{"className":126599,"code":139269,"language":126601,"meta":32,"style":32},[34,145424,145425,145431,145441],{"__ignoreMap":32},[37,145426,145427,145429],{"class":39,"line":40},[37,145428,130447],{"class":2035},[37,145430,15644],{"class":54},[37,145432,145433,145435,145437,145439],{"class":39,"line":47},[37,145434,131079],{"class":82},[37,145436,51505],{"class":54},[37,145438,23808],{"class":82},[37,145440,1364],{"class":54},[37,145442,145443],{"class":39,"line":58},[37,145444,1637],{"class":54},[14,145446,70521],{},[27,145448,145449],{"className":126599,"code":139269,"language":126601,"meta":32,"style":32},[34,145450,145451,145457,145467],{"__ignoreMap":32},[37,145452,145453,145455],{"class":39,"line":40},[37,145454,130447],{"class":2035},[37,145456,15644],{"class":54},[37,145458,145459,145461,145463,145465],{"class":39,"line":47},[37,145460,131079],{"class":82},[37,145462,51505],{"class":54},[37,145464,23808],{"class":82},[37,145466,1364],{"class":54},[37,145468,145469],{"class":39,"line":58},[37,145470,1637],{"class":54},[146,145472,145474],{"id":145473},"_215-swiper-插件使用","21.5 swiper 插件使用",[1210,145476,145477,145480,145483],{},[161,145478,145479],{},"下载需要的css和js文件html页面中 引入相关文件",[161,145481,145482],{},"官网找到类似案例，复制html结构，css样式 js 语法",[161,145484,145485],{},"根据需求定制修改模块",[119,145487],{"style":126455,"src":145488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,145490,145491],{},"解压后将这两部分放到项目中",[119,145493],{"style":126455,"src":145494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,145496,145497],{},"这个插件可以帮助我们实现轮播图效果",[14,145499,145500],{},"用法：",[119,145502],{"style":126455,"src":145503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,145505,145506],{},"找到自己喜欢的",[119,145508],{"style":126455,"src":145509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,145511,145512],{},"右键，查看网页源代码",[119,145514],{"style":126455,"src":145515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,145517,145518],{},"复制人家的结构内容",[14,145520,145521],{},"然后去看API文档：",[119,145523],{"style":126455,"src":145524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,145526,145527],{},"可以看看如何修改样式",[14,145529,145530],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[123,145532,145533],{},"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":32,"searchDepth":47,"depth":47,"links":145535},[145536,145541,145545,145550,145555],{"id":144336,"depth":47,"text":144337,"children":145537},[145538,145539,145540],{"id":144340,"depth":58,"text":144341},{"id":144350,"depth":58,"text":144351},{"id":144445,"depth":58,"text":144446},{"id":144460,"depth":47,"text":144461,"children":145542},[145543,145544],{"id":144482,"depth":58,"text":144483},{"id":144498,"depth":58,"text":144499},{"id":144573,"depth":47,"text":144574,"children":145546},[145547,145548,145549],{"id":144586,"depth":58,"text":144587},{"id":144810,"depth":58,"text":144811},{"id":144817,"depth":58,"text":144818},{"id":144958,"depth":47,"text":144959,"children":145551},[145552,145553,145554],{"id":144985,"depth":58,"text":144986},{"id":145048,"depth":58,"text":145049},{"id":145393,"depth":58,"text":145394},{"id":145473,"depth":47,"text":145474},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144328,"description":128},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145562,"title":145563,"body":145564,"description":128,"extension":129,"meta":145784,"navigation":131,"path":145785,"seo":145786,"stem":145787,"__hash__":145788},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145565,"toc":145780},[145566,145569,145573,145576,145591,145596,145599,145604,145639,145644,145656,145661,145674,145679,145696,145701,145721,145726,145744,145747,145750,145753,145756,145760,145763,145766,145769,145772,145775,145778],[10,145567,145563],{"id":145568},"_22-代码提交与新型相对单位",[146,145570,145572],{"id":145571},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,145574,145575],{},"法1：",[158,145577,145578,145585,145588],{},[161,145579,145580,145581],{},"登录网站注册：",[443,145582,145583],{"href":145583,"rel":145584},"https:\u002F\u002Fgitee.com\u002F",[23937],[161,145586,145587],{},"码云创建新的仓库",[161,145589,145590],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1210,145592,145593],{},[161,145594,145595],{},"在网站根目录右键-- Git Bash Here",[119,145597],{"style":126455,"src":145598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1210,145600,145601],{},[161,145602,145603],{},"如果是第一次利用git提交，请配置好全局选项",[27,145605,145607],{"className":117343,"code":145606,"language":117345,"meta":32,"style":32},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[34,145608,145609,145625],{"__ignoreMap":32},[37,145610,145611,145614,145616,145619,145622],{"class":39,"line":40},[37,145612,145613],{"class":2035},"git",[37,145615,119766],{"class":309},[37,145617,145618],{"class":82}," --global",[37,145620,145621],{"class":309}," user.name",[37,145623,145624],{"class":309}," \"你的名字\"\n",[37,145626,145627,145629,145631,145633,145636],{"class":39,"line":47},[37,145628,145613],{"class":2035},[37,145630,119766],{"class":309},[37,145632,145618],{"class":82},[37,145634,145635],{"class":309}," user.email",[37,145637,145638],{"class":309}," \"你的邮箱\"\n",[1210,145640,145641],{},[161,145642,145643],{},"初始化仓库",[27,145645,145647],{"className":117343,"code":145646,"language":117345,"meta":32,"style":32},"git init\n",[34,145648,145649],{"__ignoreMap":32},[37,145650,145651,145653],{"class":39,"line":40},[37,145652,145613],{"class":2035},[37,145654,145655],{"class":309}," init\n",[1210,145657,145658],{},[161,145659,145660],{},"把本地文件放到暂存区",[27,145662,145664],{"className":117343,"code":145663,"language":117345,"meta":32,"style":32},"git add .\n",[34,145665,145666],{"__ignoreMap":32},[37,145667,145668,145670,145672],{"class":39,"line":40},[37,145669,145613],{"class":2035},[37,145671,5281],{"class":309},[37,145673,28814],{"class":309},[1210,145675,145676],{},[161,145677,145678],{},"把本地文件放到本地仓库里面",[27,145680,145682],{"className":117343,"code":145681,"language":117345,"meta":32,"style":32},"git commit -m \"first commit\"\n",[34,145683,145684],{"__ignoreMap":32},[37,145685,145686,145688,145691,145693],{"class":39,"line":40},[37,145687,145613],{"class":2035},[37,145689,145690],{"class":309}," commit",[37,145692,100929],{"class":82},[37,145694,145695],{"class":309}," \"first commit\"\n",[1210,145697,145698],{},[161,145699,145700],{},"链接远程仓库",[27,145702,145704],{"className":117343,"code":145703,"language":117345,"meta":32,"style":32},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[34,145705,145706],{"__ignoreMap":32},[37,145707,145708,145710,145713,145715,145718],{"class":39,"line":40},[37,145709,145613],{"class":2035},[37,145711,145712],{"class":309}," remote",[37,145714,5281],{"class":309},[37,145716,145717],{"class":309}," origin",[37,145719,145720],{"class":309}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1210,145722,145723],{},[161,145724,145725],{},"把本地仓库的文件推送到远程仓库 push",[27,145727,145729],{"className":117343,"code":145728,"language":117345,"meta":32,"style":32},"git push -u origin master\n",[34,145730,145731],{"__ignoreMap":32},[37,145732,145733,145735,145737,145739,145741],{"class":39,"line":40},[37,145734,145613],{"class":2035},[37,145736,29089],{"class":309},[37,145738,28363],{"class":82},[37,145740,145717],{"class":309},[37,145742,145743],{"class":309}," master\n",[119,145745],{"style":126455,"src":145746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,145748,145749],{},"上方方法暂未实现，后边学完git后在整",[14,145751,145752],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[119,145754],{"style":126455,"src":145755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[146,145757,145759],{"id":145758},"_222-新型相对单位","22.2 新型相对单位",[119,145761],{"style":126455,"src":145762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[119,145764],{"style":126455,"src":145765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,145767,145768],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,145770,145771],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[119,145773],{"style":126455,"src":145774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,145776,145777],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[123,145779,24030],{},{"title":32,"searchDepth":47,"depth":47,"links":145781},[145782,145783],{"id":145571,"depth":47,"text":145572},{"id":145758,"depth":47,"text":145759},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145563,"description":128},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145790,"title":145791,"body":145792,"description":145796,"extension":129,"meta":145797,"navigation":131,"path":145798,"seo":145799,"stem":145800,"__hash__":145801},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145793,"toc":145794},[],{"title":32,"searchDepth":47,"depth":47,"links":145795},[],"自己正经开始学编程的第一门语言！",{"category":92907},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145791,"description":145796},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145803,"title":145804,"body":145805,"description":128,"extension":129,"meta":146952,"navigation":131,"path":146953,"seo":146954,"stem":146955,"__hash__":146956},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145806,"toc":146928},[145807,145810,145814,145817,145820,145845,145848,145854,145858,145861,145888,145891,145931,145934,145946,145949,145955,145959,145963,145990,146007,146014,146018,146021,146047,146050,146054,146057,146097,146100,146117,146123,146127,146132,146176,146179,146197,146200,146268,146272,146279,146282,146297,146300,146309,146312,146323,146326,146335,146338,146355,146358,146373,146377,146381,146384,146386,146406,146410,146413,146416,146427,146430,146436,146440,146446,146473,146476,146488,146491,146502,146505,146511,146515,146521,146571,146574,146616,146619,146652,146655,146689,146693,146696,146716,146719,146755,146758,146771,146775,146779,146785,146788,146801,146805,146808,146814,146817,146821,146824,146827,146876,146880,146896,146902,146909,146915,146925],[10,145808,145804],{"id":145809},"_1-python环境与第一个程序",[146,145811,145813],{"id":145812},"_11-什么是python","1.1 什么是Python",[14,145815,145816],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,145818,145819],{},"理解 Python 时抓住三个关键词：",[158,145821,145822,145825,145828],{},[161,145823,145824],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[161,145826,145827],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[161,145829,145830,145831,417,145834,417,145837,417,145840,417,145842,28458],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[34,145832,145833],{},"os",[34,145835,145836],{},"sys",[34,145838,145839],{},"json",[34,145841,57928],{},[34,145843,145844],{},"datetime",[14,145846,145847],{},"Python 程序的运行链路：",[27,145849,145852],{"className":145850,"code":145851,"language":5259,"meta":32},[5257],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[34,145853,145851],{"__ignoreMap":32},[146,145855,145857],{"id":145856},"_12-python解释器","1.2 Python解释器",[14,145859,145860],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[27,145862,145864],{"className":23894,"code":145863,"language":23896,"meta":32,"style":32},"python --version\npython3 --version\npython\npython3\n",[34,145865,145866,145872,145878,145883],{"__ignoreMap":32},[37,145867,145868,145870],{"class":39,"line":40},[37,145869,31],{"class":2035},[37,145871,26366],{"class":82},[37,145873,145874,145876],{"class":39,"line":47},[37,145875,100926],{"class":2035},[37,145877,26366],{"class":82},[37,145879,145880],{"class":39,"line":58},[37,145881,145882],{"class":2035},"python\n",[37,145884,145885],{"class":39,"line":64},[37,145886,145887],{"class":2035},"python3\n",[14,145889,145890],{},"进入交互模式后，可以直接输入表达式：",[27,145892,145894],{"className":29,"code":145893,"language":31,"meta":32,"style":32},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[34,145895,145896,145907,145912,145926],{"__ignoreMap":32},[37,145897,145898,145901,145903,145905],{"class":39,"line":40},[37,145899,145900],{"class":50},">>>",[37,145902,25191],{"class":82},[37,145904,45635],{"class":50},[37,145906,47791],{"class":82},[37,145908,145909],{"class":39,"line":47},[37,145910,145911],{"class":82},"3\n",[37,145913,145914,145916,145919,145921,145924],{"class":39,"line":58},[37,145915,145900],{"class":50},[37,145917,145918],{"class":82}," print",[37,145920,208],{"class":54},[37,145922,145923],{"class":309},"\"hello python\"",[37,145925,214],{"class":54},[37,145927,145928],{"class":39,"line":64},[37,145929,145930],{"class":54},"hello python\n",[14,145932,145933],{},"退出交互模式：",[27,145935,145937],{"className":29,"code":145936,"language":31,"meta":32,"style":32},"exit()\n",[34,145938,145939],{"__ignoreMap":32},[37,145940,145941,145944],{"class":39,"line":40},[37,145942,145943],{"class":82},"exit",[37,145945,2048],{"class":54},[14,145947,145948],{},"或使用快捷键：",[27,145950,145953],{"className":145951,"code":145952,"language":5259,"meta":32},[5257],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[34,145954,145952],{"__ignoreMap":32},[146,145956,145958],{"id":145957},"_13-安装python","1.3 安装Python",[175,145960,145962],{"id":145961},"_131-windows安装","1.3.1 Windows安装",[158,145964,145965,145972,145975,145981,145987],{},[161,145966,145967,145968],{},"打开 Python 官网：",[443,145969,145970],{"href":145970,"rel":145971},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[23937],[161,145973,145974],{},"下载 Windows Installer。",[161,145976,145977,145978,28458],{},"安装时勾选 ",[34,145979,145980],{},"Add Python to PATH",[161,145982,145983,145984,28458],{},"点击 ",[34,145985,145986],{},"Install Now",[161,145988,145989],{},"安装完成后打开命令提示符验证：",[27,145991,145993],{"className":23894,"code":145992,"language":23896,"meta":32,"style":32},"python --version\npip --version\n",[34,145994,145995,146001],{"__ignoreMap":32},[37,145996,145997,145999],{"class":39,"line":40},[37,145998,31],{"class":2035},[37,146000,26366],{"class":82},[37,146002,146003,146005],{"class":39,"line":47},[37,146004,23903],{"class":2035},[37,146006,26366],{"class":82},[14,146008,146009,146010,146013],{},"如果提示 ",[34,146011,146012],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[175,146015,146017],{"id":146016},"_132-macos安装","1.3.2 macOS安装",[14,146019,146020],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[27,146022,146024],{"className":23894,"code":146023,"language":23896,"meta":32,"style":32},"brew install python\npython3 --version\npip3 --version\n",[34,146025,146026,146035,146041],{"__ignoreMap":32},[37,146027,146028,146031,146033],{"class":39,"line":40},[37,146029,146030],{"class":2035},"brew",[37,146032,23906],{"class":309},[37,146034,124365],{"class":309},[37,146036,146037,146039],{"class":39,"line":47},[37,146038,100926],{"class":2035},[37,146040,26366],{"class":82},[37,146042,146043,146045],{"class":39,"line":58},[37,146044,119747],{"class":2035},[37,146046,26366],{"class":82},[14,146048,146049],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[175,146051,146053],{"id":146052},"_133-linux安装","1.3.3 Linux安装",[14,146055,146056],{},"Ubuntu\u002FDebian：",[27,146058,146060],{"className":23894,"code":146059,"language":23896,"meta":32,"style":32},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[34,146061,146062,146070,146085,146091],{"__ignoreMap":32},[37,146063,146064,146066,146068],{"class":39,"line":40},[37,146065,24649],{"class":2035},[37,146067,117364],{"class":309},[37,146069,26315],{"class":309},[37,146071,146072,146074,146076,146078,146080,146082],{"class":39,"line":47},[37,146073,24649],{"class":2035},[37,146075,117364],{"class":309},[37,146077,23906],{"class":309},[37,146079,104450],{"class":309},[37,146081,100845],{"class":309},[37,146083,146084],{"class":309}," python3-venv\n",[37,146086,146087,146089],{"class":39,"line":58},[37,146088,100926],{"class":2035},[37,146090,26366],{"class":82},[37,146092,146093,146095],{"class":39,"line":64},[37,146094,119747],{"class":2035},[37,146096,26366],{"class":82},[14,146098,146099],{},"Fedora：",[27,146101,146103],{"className":23894,"code":146102,"language":23896,"meta":32,"style":32},"sudo dnf install python3 python3-pip\n",[34,146104,146105],{"__ignoreMap":32},[37,146106,146107,146109,146111,146113,146115],{"class":39,"line":40},[37,146108,24649],{"class":2035},[37,146110,26388],{"class":309},[37,146112,23906],{"class":309},[37,146114,104450],{"class":309},[37,146116,119812],{"class":309},[14,146118,146119,146120,146122],{},"Linux 上通常使用 ",[34,146121,100926],{}," 命令，避免和系统旧版本 Python 冲突。",[146,146124,146126],{"id":146125},"_14-pip包管理器","1.4 pip包管理器",[14,146128,146129,146131],{},[34,146130,23903],{}," 用来安装第三方库。",[27,146133,146135],{"className":23894,"code":146134,"language":23896,"meta":32,"style":32},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[34,146136,146137,146146,146155,146163,146169],{"__ignoreMap":32},[37,146138,146139,146141,146143],{"class":39,"line":40},[37,146140,23903],{"class":2035},[37,146142,23906],{"class":309},[37,146144,146145],{"class":309}," requests\n",[37,146147,146148,146150,146153],{"class":39,"line":47},[37,146149,23903],{"class":2035},[37,146151,146152],{"class":309}," uninstall",[37,146154,146145],{"class":309},[37,146156,146157,146159,146161],{"class":39,"line":58},[37,146158,23903],{"class":2035},[37,146160,117621],{"class":309},[37,146162,146145],{"class":309},[37,146164,146165,146167],{"class":39,"line":64},[37,146166,23903],{"class":2035},[37,146168,119002],{"class":309},[37,146170,146171,146173],{"class":39,"line":76},[37,146172,23903],{"class":2035},[37,146174,146175],{"class":309}," freeze\n",[14,146177,146178],{},"国内网络较慢时可以临时使用镜像：",[27,146180,146182],{"className":23894,"code":146181,"language":23896,"meta":32,"style":32},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[34,146183,146184],{"__ignoreMap":32},[37,146185,146186,146188,146190,146193,146195],{"class":39,"line":40},[37,146187,23903],{"class":2035},[37,146189,23906],{"class":309},[37,146191,146192],{"class":309}," requests",[37,146194,26503],{"class":82},[37,146196,119775],{"class":309},[14,146198,146199],{},"常见第三方库：",[342,146201,146202,146211],{},[345,146203,146204],{},[348,146205,146206,146209],{},[351,146207,146208],{},"库",[351,146210,102743],{},[389,146212,146213,146221,146228,146236,146244,146252,146260],{},[348,146214,146215,146218],{},[394,146216,146217],{},"requests",[394,146219,146220],{},"网络请求",[348,146222,146223,146225],{},[394,146224,100673],{},[394,146226,146227],{},"数值计算",[348,146229,146230,146233],{},[394,146231,146232],{},"pandas",[394,146234,146235],{},"表格数据处理",[348,146237,146238,146241],{},[394,146239,146240],{},"matplotlib",[394,146242,146243],{},"绘图",[348,146245,146246,146249],{},[394,146247,146248],{},"pyecharts",[394,146250,146251],{},"ECharts 图表",[348,146253,146254,146257],{},[394,146255,146256],{},"flask",[394,146258,146259],{},"Web 后端",[348,146261,146262,146265],{},[394,146263,146264],{},"pytest",[394,146266,146267],{},"自动化测试",[146,146269,146271],{"id":146270},"_15-虚拟环境","1.5 虚拟环境",[14,146273,146274,146275,146278],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[34,146276,146277],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146280,146281],{},"创建虚拟环境：",[27,146283,146285],{"className":23894,"code":146284,"language":23896,"meta":32,"style":32},"python -m venv .venv\n",[34,146286,146287],{"__ignoreMap":32},[37,146288,146289,146291,146293,146295],{"class":39,"line":40},[37,146290,31],{"class":2035},[37,146292,100929],{"class":82},[37,146294,100932],{"class":309},[37,146296,100935],{"class":309},[14,146298,146299],{},"Windows 激活：",[27,146301,146303],{"className":23894,"code":146302,"language":23896,"meta":32,"style":32},".venv\\Scripts\\activate\n",[34,146304,146305],{"__ignoreMap":32},[37,146306,146307],{"class":39,"line":40},[37,146308,146302],{"class":2035},[14,146310,146311],{},"macOS\u002FLinux 激活：",[27,146313,146315],{"className":23894,"code":146314,"language":23896,"meta":32,"style":32},"source .venv\u002Fbin\u002Factivate\n",[34,146316,146317],{"__ignoreMap":32},[37,146318,146319,146321],{"class":39,"line":40},[37,146320,100940],{"class":82},[37,146322,100943],{"class":309},[14,146324,146325],{},"退出虚拟环境：",[27,146327,146329],{"className":23894,"code":146328,"language":23896,"meta":32,"style":32},"deactivate\n",[34,146330,146331],{"__ignoreMap":32},[37,146332,146333],{"class":39,"line":40},[37,146334,146328],{"class":2035},[14,146336,146337],{},"保存依赖：",[27,146339,146341],{"className":23894,"code":146340,"language":23896,"meta":32,"style":32},"pip freeze > requirements.txt\n",[34,146342,146343],{"__ignoreMap":32},[37,146344,146345,146347,146350,146352],{"class":39,"line":40},[37,146346,23903],{"class":2035},[37,146348,146349],{"class":309}," freeze",[37,146351,26295],{"class":50},[37,146353,146354],{"class":309}," requirements.txt\n",[14,146356,146357],{},"安装依赖：",[27,146359,146361],{"className":23894,"code":146360,"language":23896,"meta":32,"style":32},"pip install -r requirements.txt\n",[34,146362,146363],{"__ignoreMap":32},[37,146364,146365,146367,146369,146371],{"class":39,"line":40},[37,146366,23903],{"class":2035},[37,146368,23906],{"class":309},[37,146370,119686],{"class":82},[37,146372,146354],{"class":309},[146,146374,146376],{"id":146375},"_16-开发工具","1.6 开发工具",[175,146378,146380],{"id":146379},"_161-pycharm","1.6.1 PyCharm",[14,146382,146383],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146385,122109],{},[158,146387,146388,146391,146394,146400,146403],{},[161,146389,146390],{},"New Project：创建项目。",[161,146392,146393],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[161,146395,146396,146397,126030],{},"New Python File：创建 ",[34,146398,146399],{},".py",[161,146401,146402],{},"Run：运行当前文件。",[161,146404,146405],{},"Debug：断点调试。",[175,146407,146409],{"id":146408},"_162-vs-code","1.6.2 VS Code",[14,146411,146412],{},"VS Code 轻量，适合后续多语言开发。",[14,146414,146415],{},"建议安装插件：",[158,146417,146418,146421,146424],{},[161,146419,146420],{},"Python。",[161,146422,146423],{},"Pylance。",[161,146425,146426],{},"Jupyter。",[14,146428,146429],{},"选择解释器：",[27,146431,146434],{"className":146432,"code":146433,"language":5259,"meta":32},[5257],"Ctrl + Shift + P -> Python: Select Interpreter\n",[34,146435,146433],{"__ignoreMap":32},[146,146437,146439],{"id":146438},"_17-第一个python程序","1.7 第一个Python程序",[14,146441,146442,146443,24691],{},"创建文件 ",[34,146444,146445],{},"hello.py",[27,146447,146449],{"className":29,"code":146448,"language":31,"meta":32,"style":32},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[34,146450,146451,146462],{"__ignoreMap":32},[37,146452,146453,146455,146457,146460],{"class":39,"line":40},[37,146454,30485],{"class":82},[37,146456,208],{"class":54},[37,146458,146459],{"class":309},"\"Hello World\"",[37,146461,214],{"class":54},[37,146463,146464,146466,146468,146471],{"class":39,"line":47},[37,146465,30485],{"class":82},[37,146467,208],{"class":54},[37,146469,146470],{"class":309},"\"你好，Python\"",[37,146472,214],{"class":54},[14,146474,146475],{},"在终端运行：",[27,146477,146479],{"className":23894,"code":146478,"language":23896,"meta":32,"style":32},"python hello.py\n",[34,146480,146481],{"__ignoreMap":32},[37,146482,146483,146485],{"class":39,"line":40},[37,146484,31],{"class":2035},[37,146486,146487],{"class":309}," hello.py\n",[14,146489,146490],{},"或：",[27,146492,146494],{"className":23894,"code":146493,"language":23896,"meta":32,"style":32},"python3 hello.py\n",[34,146495,146496],{"__ignoreMap":32},[37,146497,146498,146500],{"class":39,"line":40},[37,146499,100926],{"class":2035},[37,146501,146487],{"class":309},[14,146503,146504],{},"输出：",[27,146506,146509],{"className":146507,"code":146508,"language":5259,"meta":32},[5257],"Hello World\n你好，Python\n",[34,146510,146508],{"__ignoreMap":32},[146,146512,146514],{"id":146513},"_18-print函数","1.8 print函数",[14,146516,146517,146520],{},[34,146518,146519],{},"print()"," 用来输出内容。",[27,146522,146524],{"className":29,"code":146523,"language":31,"meta":32,"style":32},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[34,146525,146526,146536,146546,146556],{"__ignoreMap":32},[37,146527,146528,146530,146532,146534],{"class":39,"line":40},[37,146529,30485],{"class":82},[37,146531,208],{"class":54},[37,146533,5916],{"class":309},[37,146535,214],{"class":54},[37,146537,146538,146540,146542,146544],{"class":39,"line":47},[37,146539,30485],{"class":82},[37,146541,208],{"class":54},[37,146543,516],{"class":82},[37,146545,214],{"class":54},[37,146547,146548,146550,146552,146554],{"class":39,"line":58},[37,146549,30485],{"class":82},[37,146551,208],{"class":54},[37,146553,255],{"class":82},[37,146555,214],{"class":54},[37,146557,146558,146560,146562,146565,146567,146569],{"class":39,"line":64},[37,146559,30485],{"class":82},[37,146561,208],{"class":54},[37,146563,146564],{"class":309},"\"年龄:\"",[37,146566,12507],{"class":54},[37,146568,853],{"class":82},[37,146570,214],{"class":54},[14,146572,146573],{},"多个内容用逗号隔开，默认中间加空格：",[27,146575,146577],{"className":29,"code":146576,"language":31,"meta":32,"style":32},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[34,146578,146579,146589,146599],{"__ignoreMap":32},[37,146580,146581,146584,146586],{"class":39,"line":40},[37,146582,146583],{"class":54},"name ",[37,146585,70],{"class":50},[37,146587,146588],{"class":309}," \"张三\"\n",[37,146590,146591,146594,146596],{"class":39,"line":47},[37,146592,146593],{"class":54},"age ",[37,146595,70],{"class":50},[37,146597,146598],{"class":82}," 18\n",[37,146600,146601,146603,146605,146608,146611,146613],{"class":39,"line":58},[37,146602,30485],{"class":82},[37,146604,208],{"class":54},[37,146606,146607],{"class":309},"\"姓名:\"",[37,146609,146610],{"class":54},", name, ",[37,146612,146564],{"class":309},[37,146614,146615],{"class":54},", age)\n",[14,146617,146618],{},"修改分隔符：",[27,146620,146622],{"className":29,"code":146621,"language":31,"meta":32,"style":32},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[34,146623,146624],{"__ignoreMap":32},[37,146625,146626,146628,146630,146633,146635,146637,146639,146641,146643,146646,146648,146650],{"class":39,"line":40},[37,146627,30485],{"class":82},[37,146629,208],{"class":54},[37,146631,146632],{"class":309},"\"2024\"",[37,146634,12507],{"class":54},[37,146636,54384],{"class":309},[37,146638,12507],{"class":54},[37,146640,54384],{"class":309},[37,146642,12507],{"class":54},[37,146644,146645],{"class":5288},"sep",[37,146647,70],{"class":50},[37,146649,32552],{"class":309},[37,146651,214],{"class":54},[14,146653,146654],{},"修改结尾符：",[27,146656,146658],{"className":29,"code":146657,"language":31,"meta":32,"style":32},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[34,146659,146660,146678],{"__ignoreMap":32},[37,146661,146662,146664,146666,146668,146670,146672,146674,146676],{"class":39,"line":40},[37,146663,30485],{"class":82},[37,146665,208],{"class":54},[37,146667,5916],{"class":309},[37,146669,12507],{"class":54},[37,146671,100],{"class":5288},[37,146673,70],{"class":50},[37,146675,4431],{"class":309},[37,146677,214],{"class":54},[37,146679,146680,146682,146684,146687],{"class":39,"line":47},[37,146681,30485],{"class":82},[37,146683,208],{"class":54},[37,146685,146686],{"class":309},"\"python\"",[37,146688,214],{"class":54},[146,146690,146692],{"id":146691},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,146694,146695],{},"交互运行适合临时验证：",[27,146697,146699],{"className":29,"code":146698,"language":31,"meta":32,"style":32},">>> 10 * 3\n30\n",[34,146700,146701,146711],{"__ignoreMap":32},[37,146702,146703,146705,146707,146709],{"class":39,"line":40},[37,146704,145900],{"class":50},[37,146706,2110],{"class":82},[37,146708,6590],{"class":50},[37,146710,120083],{"class":82},[37,146712,146713],{"class":39,"line":47},[37,146714,146715],{"class":82},"30\n",[14,146717,146718],{},"脚本运行适合保存程序：",[27,146720,146722],{"className":29,"code":146721,"language":31,"meta":32,"style":32},"price = 8\ncount = 5\nprint(price * count)\n",[34,146723,146724,146734,146743],{"__ignoreMap":32},[37,146725,146726,146729,146731],{"class":39,"line":40},[37,146727,146728],{"class":54},"price ",[37,146730,70],{"class":50},[37,146732,146733],{"class":82}," 8\n",[37,146735,146736,146739,146741],{"class":39,"line":47},[37,146737,146738],{"class":54},"count ",[37,146740,70],{"class":50},[37,146742,54495],{"class":82},[37,146744,146745,146747,146750,146752],{"class":39,"line":58},[37,146746,30485],{"class":82},[37,146748,146749],{"class":54},"(price ",[37,146751,659],{"class":50},[37,146753,146754],{"class":54}," count)\n",[14,146756,146757],{},"实际学习中推荐：",[158,146759,146760,146763,146768],{},[161,146761,146762],{},"临时试一个语法，用交互模式。",[161,146764,146765,146766,126030],{},"写完整练习，用 ",[34,146767,146399],{},[161,146769,146770],{},"写项目，用独立目录和虚拟环境。",[146,146772,146774],{"id":146773},"_110-常见错误","1.10 常见错误",[175,146776,146778],{"id":146777},"_1101-命令找不到","1.10.1 命令找不到",[27,146780,146783],{"className":146781,"code":146782,"language":5259,"meta":32},[5257],"python: command not found\n",[34,146784,146782],{"__ignoreMap":32},[14,146786,146787],{},"原因：",[158,146789,146790,146793,146796],{},[161,146791,146792],{},"没安装 Python。",[161,146794,146795],{},"PATH 没配置。",[161,146797,146798,146799,28458],{},"Linux\u002FmacOS 应该使用 ",[34,146800,100926],{},[175,146802,146804],{"id":146803},"_1102-文件名冲突","1.10.2 文件名冲突",[14,146806,146807],{},"不要把文件命名为：",[27,146809,146812],{"className":146810,"code":146811,"language":5259,"meta":32},[5257],"random.py\njson.py\ntime.py\nrequests.py\n",[34,146813,146811],{"__ignoreMap":32},[14,146815,146816],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[175,146818,146820],{"id":146819},"_1103-中文乱码","1.10.3 中文乱码",[14,146822,146823],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,146825,146826],{},"如果读写文件出现乱码，要明确指定编码：",[27,146828,146830],{"className":29,"code":146829,"language":31,"meta":32,"style":32},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[34,146831,146832,146866],{"__ignoreMap":32},[37,146833,146834,146836,146839,146841,146844,146846,146849,146851,146854,146856,146859,146861,146863],{"class":39,"line":40},[37,146835,107880],{"class":50},[37,146837,146838],{"class":82}," open",[37,146840,208],{"class":54},[37,146842,146843],{"class":309},"\"data.txt\"",[37,146845,12507],{"class":54},[37,146847,146848],{"class":309},"\"r\"",[37,146850,12507],{"class":54},[37,146852,146853],{"class":5288},"encoding",[37,146855,70],{"class":50},[37,146857,146858],{"class":309},"\"utf-8\"",[37,146860,13786],{"class":54},[37,146862,31453],{"class":50},[37,146864,146865],{"class":54}," f:\n",[37,146867,146868,146871,146873],{"class":39,"line":47},[37,146869,146870],{"class":54},"    content ",[37,146872,70],{"class":50},[37,146874,146875],{"class":54}," f.read()\n",[146,146877,146879],{"id":146878},"_111-本章练习","1.11 本章练习",[158,146881,146882,146885,146891],{},[161,146883,146884],{},"安装 Python，并在终端输出版本号。",[161,146886,146887,146888,146890],{},"新建 ",[34,146889,146445],{},"，输出自己的姓名、年龄、学习目标。",[161,146892,104413,146893,146895],{},[34,146894,146519],{}," 输出下面格式：",[27,146897,146900],{"className":146898,"code":146899,"language":5259,"meta":32},[5257],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[34,146901,146899],{"__ignoreMap":32},[158,146903,146904],{"start":64},[161,146905,104413,146906,146908],{},[34,146907,146645],{}," 输出日期：",[27,146910,146913],{"className":146911,"code":146912,"language":5259,"meta":32},[5257],"2024-10-10\n",[34,146914,146912],{"__ignoreMap":32},[158,146916,146917],{"start":76},[161,146918,104413,146919,146921,146922,146924],{},[34,146920,100],{}," 让两次 ",[34,146923,146519],{}," 输出在同一行。",[123,146926,146927],{},"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":32,"searchDepth":47,"depth":47,"links":146929},[146930,146931,146932,146937,146938,146939,146943,146944,146945,146946,146951],{"id":145812,"depth":47,"text":145813},{"id":145856,"depth":47,"text":145857},{"id":145957,"depth":47,"text":145958,"children":146933},[146934,146935,146936],{"id":145961,"depth":58,"text":145962},{"id":146016,"depth":58,"text":146017},{"id":146052,"depth":58,"text":146053},{"id":146125,"depth":47,"text":146126},{"id":146270,"depth":47,"text":146271},{"id":146375,"depth":47,"text":146376,"children":146940},[146941,146942],{"id":146379,"depth":58,"text":146380},{"id":146408,"depth":58,"text":146409},{"id":146438,"depth":47,"text":146439},{"id":146513,"depth":47,"text":146514},{"id":146691,"depth":47,"text":146692},{"id":146773,"depth":47,"text":146774,"children":146947},[146948,146949,146950],{"id":146777,"depth":58,"text":146778},{"id":146803,"depth":58,"text":146804},{"id":146819,"depth":58,"text":146820},{"id":146878,"depth":47,"text":146879},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145804,"description":128},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146958,"title":146959,"body":146960,"description":128,"extension":129,"meta":149364,"navigation":131,"path":149365,"seo":149366,"stem":149367,"__hash__":149368},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146961,"toc":149349},[146962,146965,146969,146972,146975,146992,146995,147037,147040,147044,147047,147050,147087,147090,147124,147127,147219,147223,147237,147240,147267,147270,147274,147377,147384,147387,147404,147408,147415,147604,147607,147680,147684,147687,147771,147774,147806,147810,148014,148017,148021,148027,148129,148132,148388,148392,148395,148398,148412,148414,148600,148604,148966,148972,148976,148979,149103,149106,149285,149288,149292,149325,149329,149346],[10,146963,146959],{"id":146964},"_10-json与pyecharts折线图",[146,146966,146968],{"id":146967},"_101-数据可视化","10.1 数据可视化",[14,146970,146971],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,146973,146974],{},"常见图表：",[158,146976,146977,146980,146983,146986,146989],{},[161,146978,146979],{},"折线图：看趋势。",[161,146981,146982],{},"柱状图：看分类对比。",[161,146984,146985],{},"饼图：看占比。",[161,146987,146988],{},"地图：看地域分布。",[161,146990,146991],{},"散点图：看两个变量之间的关系。",[14,146993,146994],{},"Python 可视化常用库：",[342,146996,146997,147005],{},[345,146998,146999],{},[348,147000,147001,147003],{},[351,147002,146208],{},[351,147004,23812],{},[389,147006,147007,147014,147022,147029],{},[348,147008,147009,147011],{},[394,147010,146240],{},[394,147012,147013],{},"基础、经典、可定制",[348,147015,147016,147019],{},[394,147017,147018],{},"seaborn",[394,147020,147021],{},"统计图表更美观",[348,147023,147024,147026],{},[394,147025,146248],{},[394,147027,147028],{},"生成交互式网页图表",[348,147030,147031,147034],{},[394,147032,147033],{},"plotly",[394,147035,147036],{},"交互图表能力强",[14,147038,147039],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[146,147041,147043],{"id":147042},"_102-json回顾","10.2 JSON回顾",[14,147045,147046],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,147048,147049],{},"Python 字典：",[27,147051,147053],{"className":29,"code":147052,"language":31,"meta":32,"style":32},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[34,147054,147055,147063,147074,147083],{"__ignoreMap":32},[37,147056,147057,147059,147061],{"class":39,"line":40},[37,147058,101705],{"class":54},[37,147060,70],{"class":50},[37,147062,15644],{"class":54},[37,147064,147065,147068,147070,147072],{"class":39,"line":47},[37,147066,147067],{"class":309},"    \"name\"",[37,147069,51505],{"class":54},[37,147071,69337],{"class":309},[37,147073,31536],{"class":54},[37,147075,147076,147079,147081],{"class":39,"line":58},[37,147077,147078],{"class":309},"    \"value\"",[37,147080,51505],{"class":54},[37,147082,97505],{"class":82},[37,147084,147085],{"class":39,"line":64},[37,147086,1637],{"class":54},[14,147088,147089],{},"JSON 字符串：",[27,147091,147094],{"className":147092,"code":147093,"language":145839,"meta":32,"style":32},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[34,147095,147096,147100,147111,147120],{"__ignoreMap":32},[37,147097,147098],{"class":39,"line":40},[37,147099,1618],{"class":54},[37,147101,147102,147105,147107,147109],{"class":39,"line":47},[37,147103,147104],{"class":82},"  \"name\"",[37,147106,51505],{"class":54},[37,147108,69337],{"class":309},[37,147110,31536],{"class":54},[37,147112,147113,147116,147118],{"class":39,"line":58},[37,147114,147115],{"class":82},"  \"value\"",[37,147117,51505],{"class":54},[37,147119,97505],{"class":82},[37,147121,147122],{"class":39,"line":64},[37,147123,1637],{"class":54},[14,147125,147126],{},"Python 与 JSON 的转换：",[27,147128,147130],{"className":29,"code":147129,"language":31,"meta":32,"style":32},"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",[34,147131,147132,147139,147143,147168,147172,147191,147198,147202,147212],{"__ignoreMap":32},[37,147133,147134,147136],{"class":39,"line":40},[37,147135,51],{"class":50},[37,147137,147138],{"class":54}," json\n",[37,147140,147141],{"class":39,"line":47},[37,147142,2472],{"emptyLinePlaceholder":131},[37,147144,147145,147147,147149,147151,147153,147155,147157,147159,147162,147164,147166],{"class":39,"line":58},[37,147146,101705],{"class":54},[37,147148,70],{"class":50},[37,147150,4520],{"class":54},[37,147152,62747],{"class":309},[37,147154,51505],{"class":54},[37,147156,69337],{"class":309},[37,147158,12507],{"class":54},[37,147160,147161],{"class":309},"\"value\"",[37,147163,51505],{"class":54},[37,147165,516],{"class":82},[37,147167,1637],{"class":54},[37,147169,147170],{"class":39,"line":64},[37,147171,2472],{"emptyLinePlaceholder":131},[37,147173,147174,147177,147179,147182,147185,147187,147189],{"class":39,"line":76},[37,147175,147176],{"class":54},"json_text ",[37,147178,70],{"class":50},[37,147180,147181],{"class":54}," json.dumps(data, ",[37,147183,147184],{"class":5288},"ensure_ascii",[37,147186,70],{"class":50},[37,147188,34056],{"class":82},[37,147190,214],{"class":54},[37,147192,147193,147195],{"class":39,"line":92},[37,147194,30485],{"class":82},[37,147196,147197],{"class":54},"(json_text)\n",[37,147199,147200],{"class":39,"line":97},[37,147201,2472],{"emptyLinePlaceholder":131},[37,147203,147204,147207,147209],{"class":39,"line":107},[37,147205,147206],{"class":54},"new_data ",[37,147208,70],{"class":50},[37,147210,147211],{"class":54}," json.loads(json_text)\n",[37,147213,147214,147216],{"class":39,"line":1390},[37,147215,30485],{"class":82},[37,147217,147218],{"class":54},"(new_data)\n",[146,147220,147222],{"id":147221},"_103-安装pyecharts","10.3 安装pyecharts",[27,147224,147226],{"className":23894,"code":147225,"language":23896,"meta":32,"style":32},"pip install pyecharts\n",[34,147227,147228],{"__ignoreMap":32},[37,147229,147230,147232,147234],{"class":39,"line":40},[37,147231,23903],{"class":2035},[37,147233,23906],{"class":309},[37,147235,147236],{"class":309}," pyecharts\n",[14,147238,147239],{},"验证：",[27,147241,147243],{"className":29,"code":147242,"language":31,"meta":32,"style":32},"import pyecharts\n\nprint(pyecharts.__version__)\n",[34,147244,147245,147251,147255],{"__ignoreMap":32},[37,147246,147247,147249],{"class":39,"line":40},[37,147248,51],{"class":50},[37,147250,147236],{"class":54},[37,147252,147253],{"class":39,"line":47},[37,147254,2472],{"emptyLinePlaceholder":131},[37,147256,147257,147259,147262,147265],{"class":39,"line":58},[37,147258,30485],{"class":82},[37,147260,147261],{"class":54},"(pyecharts.",[37,147263,147264],{"class":82},"__version__",[37,147266,214],{"class":54},[14,147268,147269],{},"如果使用虚拟环境，要先激活环境再安装。",[146,147271,147273],{"id":147272},"_104-第一个折线图","10.4 第一个折线图",[27,147275,147277],{"className":29,"code":147276,"language":31,"meta":32,"style":32},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[34,147278,147279,147291,147295,147305,147335,147367],{"__ignoreMap":32},[37,147280,147281,147283,147286,147288],{"class":39,"line":40},[37,147282,30807],{"class":50},[37,147284,147285],{"class":54}," pyecharts.charts ",[37,147287,51],{"class":50},[37,147289,147290],{"class":54}," Line\n",[37,147292,147293],{"class":39,"line":47},[37,147294,2472],{"emptyLinePlaceholder":131},[37,147296,147297,147300,147302],{"class":39,"line":58},[37,147298,147299],{"class":54},"line ",[37,147301,70],{"class":50},[37,147303,147304],{"class":54}," Line()\n",[37,147306,147307,147310,147313,147315,147318,147320,147323,147325,147328,147330,147333],{"class":39,"line":64},[37,147308,147309],{"class":54},"line.add_xaxis([",[37,147311,147312],{"class":309},"\"周一\"",[37,147314,12507],{"class":54},[37,147316,147317],{"class":309},"\"周二\"",[37,147319,12507],{"class":54},[37,147321,147322],{"class":309},"\"周三\"",[37,147324,12507],{"class":54},[37,147326,147327],{"class":309},"\"周四\"",[37,147329,12507],{"class":54},[37,147331,147332],{"class":309},"\"周五\"",[37,147334,4729],{"class":54},[37,147336,147337,147340,147343,147345,147347,147349,147351,147353,147355,147357,147360,147362,147365],{"class":39,"line":76},[37,147338,147339],{"class":54},"line.add_yaxis(",[37,147341,147342],{"class":309},"\"销售额\"",[37,147344,77586],{"class":54},[37,147346,516],{"class":82},[37,147348,12507],{"class":54},[37,147350,1020],{"class":82},[37,147352,12507],{"class":54},[37,147354,1065],{"class":82},[37,147356,12507],{"class":54},[37,147358,147359],{"class":82},"150",[37,147361,12507],{"class":54},[37,147363,147364],{"class":82},"180",[37,147366,4729],{"class":54},[37,147368,147369,147372,147375],{"class":39,"line":92},[37,147370,147371],{"class":54},"line.render(",[37,147373,147374],{"class":309},"\"line.html\"",[37,147376,214],{"class":54},[14,147378,147379,147380,147383],{},"运行后会生成 ",[34,147381,147382],{},"line.html","，用浏览器打开即可看到图表。",[14,147385,147386],{},"核心步骤：",[158,147388,147389,147392,147395,147398,147401],{},[161,147390,147391],{},"导入图表类。",[161,147393,147394],{},"创建图表对象。",[161,147396,147397],{},"添加 x 轴数据。",[161,147399,147400],{},"添加 y 轴数据。",[161,147402,147403],{},"渲染为 HTML。",[146,147405,147407],{"id":147406},"_105-全局配置","10.5 全局配置",[14,147409,147410,147411,147414],{},"常用配置在 ",[34,147412,147413],{},"pyecharts.options"," 中。",[27,147416,147418],{"className":29,"code":147417,"language":31,"meta":32,"style":32},"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",[34,147419,147420,147437,147447,147451,147459,147483,147511,147516,147535,147554,147572,147592,147596],{"__ignoreMap":32},[37,147421,147422,147424,147427,147429,147432,147434],{"class":39,"line":40},[37,147423,30807],{"class":50},[37,147425,147426],{"class":54}," pyecharts ",[37,147428,51],{"class":50},[37,147430,147431],{"class":54}," options ",[37,147433,31453],{"class":50},[37,147435,147436],{"class":54}," opts\n",[37,147438,147439,147441,147443,147445],{"class":39,"line":47},[37,147440,30807],{"class":50},[37,147442,147285],{"class":54},[37,147444,51],{"class":50},[37,147446,147290],{"class":54},[37,147448,147449],{"class":39,"line":58},[37,147450,2472],{"emptyLinePlaceholder":131},[37,147452,147453,147455,147457],{"class":39,"line":64},[37,147454,147299],{"class":54},[37,147456,70],{"class":50},[37,147458,147304],{"class":54},[37,147460,147461,147463,147465,147467,147469,147471,147473,147475,147477,147479,147481],{"class":39,"line":76},[37,147462,147309],{"class":54},[37,147464,147312],{"class":309},[37,147466,12507],{"class":54},[37,147468,147317],{"class":309},[37,147470,12507],{"class":54},[37,147472,147322],{"class":309},[37,147474,12507],{"class":54},[37,147476,147327],{"class":309},[37,147478,12507],{"class":54},[37,147480,147332],{"class":309},[37,147482,4729],{"class":54},[37,147484,147485,147487,147489,147491,147493,147495,147497,147499,147501,147503,147505,147507,147509],{"class":39,"line":92},[37,147486,147339],{"class":54},[37,147488,147342],{"class":309},[37,147490,77586],{"class":54},[37,147492,516],{"class":82},[37,147494,12507],{"class":54},[37,147496,1020],{"class":82},[37,147498,12507],{"class":54},[37,147500,1065],{"class":82},[37,147502,12507],{"class":54},[37,147504,147359],{"class":82},[37,147506,12507],{"class":54},[37,147508,147364],{"class":82},[37,147510,4729],{"class":54},[37,147512,147513],{"class":39,"line":97},[37,147514,147515],{"class":54},"line.set_global_opts(\n",[37,147517,147518,147521,147523,147526,147528,147530,147533],{"class":39,"line":107},[37,147519,147520],{"class":5288},"    title_opts",[37,147522,70],{"class":50},[37,147524,147525],{"class":54},"opts.TitleOpts(",[37,147527,51475],{"class":5288},[37,147529,70],{"class":50},[37,147531,147532],{"class":309},"\"一周销售额\"",[37,147534,38116],{"class":54},[37,147536,147537,147540,147542,147545,147547,147549,147552],{"class":39,"line":1390},[37,147538,147539],{"class":5288},"    xaxis_opts",[37,147541,70],{"class":50},[37,147543,147544],{"class":54},"opts.AxisOpts(",[37,147546,79878],{"class":5288},[37,147548,70],{"class":50},[37,147550,147551],{"class":309},"\"日期\"",[37,147553,38116],{"class":54},[37,147555,147556,147559,147561,147563,147565,147567,147570],{"class":39,"line":1402},[37,147557,147558],{"class":5288},"    yaxis_opts",[37,147560,70],{"class":50},[37,147562,147544],{"class":54},[37,147564,79878],{"class":5288},[37,147566,70],{"class":50},[37,147568,147569],{"class":309},"\"金额\"",[37,147571,38116],{"class":54},[37,147573,147574,147577,147579,147582,147585,147587,147590],{"class":39,"line":1684},[37,147575,147576],{"class":5288},"    tooltip_opts",[37,147578,70],{"class":50},[37,147580,147581],{"class":54},"opts.TooltipOpts(",[37,147583,147584],{"class":5288},"trigger",[37,147586,70],{"class":50},[37,147588,147589],{"class":309},"\"axis\"",[37,147591,38116],{"class":54},[37,147593,147594],{"class":39,"line":1689},[37,147595,214],{"class":54},[37,147597,147598,147600,147602],{"class":39,"line":1695},[37,147599,147371],{"class":54},[37,147601,147374],{"class":309},[37,147603,214],{"class":54},[14,147605,147606],{},"常见全局配置：",[342,147608,147609,147618],{},[345,147610,147611],{},[348,147612,147613,147616],{},[351,147614,147615],{},"配置",[351,147617,102743],{},[389,147619,147620,147630,147640,147650,147660,147670],{},[348,147621,147622,147627],{},[394,147623,147624],{},[34,147625,147626],{},"TitleOpts",[394,147628,147629],{},"标题",[348,147631,147632,147637],{},[394,147633,147634],{},[34,147635,147636],{},"LegendOpts",[394,147638,147639],{},"图例",[348,147641,147642,147647],{},[394,147643,147644],{},[34,147645,147646],{},"TooltipOpts",[394,147648,147649],{},"提示框",[348,147651,147652,147657],{},[394,147653,147654],{},[34,147655,147656],{},"AxisOpts",[394,147658,147659],{},"坐标轴",[348,147661,147662,147667],{},[394,147663,147664],{},[34,147665,147666],{},"VisualMapOpts",[394,147668,147669],{},"视觉映射",[348,147671,147672,147677],{},[394,147673,147674],{},[34,147675,147676],{},"DataZoomOpts",[394,147678,147679],{},"区域缩放",[146,147681,147683],{"id":147682},"_106-系列配置","10.6 系列配置",[14,147685,147686],{},"系列配置作用于某一组数据。",[27,147688,147690],{"className":29,"code":147689,"language":31,"meta":32,"style":32},"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",[34,147691,147692,147697,147708,147737,147748,147767],{"__ignoreMap":32},[37,147693,147694],{"class":39,"line":40},[37,147695,147696],{"class":54},"line.add_yaxis(\n",[37,147698,147699,147702,147704,147706],{"class":39,"line":47},[37,147700,147701],{"class":5288},"    series_name",[37,147703,70],{"class":50},[37,147705,147342],{"class":309},[37,147707,31536],{"class":54},[37,147709,147710,147713,147715,147717,147719,147721,147723,147725,147727,147729,147731,147733,147735],{"class":39,"line":58},[37,147711,147712],{"class":5288},"    y_axis",[37,147714,70],{"class":50},[37,147716,1093],{"class":54},[37,147718,516],{"class":82},[37,147720,12507],{"class":54},[37,147722,1020],{"class":82},[37,147724,12507],{"class":54},[37,147726,1065],{"class":82},[37,147728,12507],{"class":54},[37,147730,147359],{"class":82},[37,147732,12507],{"class":54},[37,147734,147364],{"class":82},[37,147736,87904],{"class":54},[37,147738,147739,147742,147744,147746],{"class":39,"line":64},[37,147740,147741],{"class":5288},"    is_smooth",[37,147743,70],{"class":50},[37,147745,31546],{"class":82},[37,147747,31536],{"class":54},[37,147749,147750,147753,147755,147758,147761,147763,147765],{"class":39,"line":76},[37,147751,147752],{"class":5288},"    label_opts",[37,147754,70],{"class":50},[37,147756,147757],{"class":54},"opts.LabelOpts(",[37,147759,147760],{"class":5288},"is_show",[37,147762,70],{"class":50},[37,147764,31546],{"class":82},[37,147766,38116],{"class":54},[37,147768,147769],{"class":39,"line":92},[37,147770,214],{"class":54},[14,147772,147773],{},"常用参数：",[158,147775,147776,147782,147788,147794,147800],{},[161,147777,147778,147781],{},[34,147779,147780],{},"series_name","：系列名称。",[161,147783,147784,147787],{},[34,147785,147786],{},"y_axis","：y 轴数据。",[161,147789,147790,147793],{},[34,147791,147792],{},"is_smooth","：是否平滑曲线。",[161,147795,147796,147799],{},[34,147797,147798],{},"label_opts","：标签配置。",[161,147801,147802,147805],{},[34,147803,147804],{},"symbol_size","：标记点大小。",[146,147807,147809],{"id":147808},"_107-多条折线","10.7 多条折线",[27,147811,147813],{"className":29,"code":147812,"language":31,"meta":32,"style":32},"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",[34,147814,147815,147829,147839,147843,147872,147876,147884,147889,147927,147964,147968,147985,148001,148005],{"__ignoreMap":32},[37,147816,147817,147819,147821,147823,147825,147827],{"class":39,"line":40},[37,147818,30807],{"class":50},[37,147820,147426],{"class":54},[37,147822,51],{"class":50},[37,147824,147431],{"class":54},[37,147826,31453],{"class":50},[37,147828,147436],{"class":54},[37,147830,147831,147833,147835,147837],{"class":39,"line":47},[37,147832,30807],{"class":50},[37,147834,147285],{"class":54},[37,147836,51],{"class":50},[37,147838,147290],{"class":54},[37,147840,147841],{"class":39,"line":58},[37,147842,2472],{"emptyLinePlaceholder":131},[37,147844,147845,147848,147850,147852,147854,147856,147858,147860,147862,147864,147866,147868,147870],{"class":39,"line":64},[37,147846,147847],{"class":54},"dates ",[37,147849,70],{"class":50},[37,147851,52294],{"class":54},[37,147853,147312],{"class":309},[37,147855,12507],{"class":54},[37,147857,147317],{"class":309},[37,147859,12507],{"class":54},[37,147861,147322],{"class":309},[37,147863,12507],{"class":54},[37,147865,147327],{"class":309},[37,147867,12507],{"class":54},[37,147869,147332],{"class":309},[37,147871,33315],{"class":54},[37,147873,147874],{"class":39,"line":76},[37,147875,2472],{"emptyLinePlaceholder":131},[37,147877,147878,147880,147882],{"class":39,"line":92},[37,147879,147299],{"class":54},[37,147881,70],{"class":50},[37,147883,147304],{"class":54},[37,147885,147886],{"class":39,"line":97},[37,147887,147888],{"class":54},"line.add_xaxis(dates)\n",[37,147890,147891,147893,147896,147898,147900,147902,147905,147907,147909,147911,147913,147915,147917,147919,147921,147923,147925],{"class":39,"line":107},[37,147892,147339],{"class":54},[37,147894,147895],{"class":309},"\"线上销售\"",[37,147897,77586],{"class":54},[37,147899,516],{"class":82},[37,147901,12507],{"class":54},[37,147903,147904],{"class":82},"130",[37,147906,12507],{"class":54},[37,147908,1020],{"class":82},[37,147910,12507],{"class":54},[37,147912,21120],{"class":82},[37,147914,12507],{"class":54},[37,147916,1794],{"class":82},[37,147918,112249],{"class":54},[37,147920,147792],{"class":5288},[37,147922,70],{"class":50},[37,147924,31546],{"class":82},[37,147926,214],{"class":54},[37,147928,147929,147931,147934,147936,147938,147940,147942,147944,147946,147948,147950,147952,147954,147956,147958,147960,147962],{"class":39,"line":1390},[37,147930,147339],{"class":54},[37,147932,147933],{"class":309},"\"线下销售\"",[37,147935,77586],{"class":54},[37,147937,815],{"class":82},[37,147939,12507],{"class":54},[37,147941,1065],{"class":82},[37,147943,12507],{"class":54},[37,147945,516],{"class":82},[37,147947,12507],{"class":54},[37,147949,1020],{"class":82},[37,147951,12507],{"class":54},[37,147953,147359],{"class":82},[37,147955,112249],{"class":54},[37,147957,147792],{"class":5288},[37,147959,70],{"class":50},[37,147961,31546],{"class":82},[37,147963,214],{"class":54},[37,147965,147966],{"class":39,"line":1402},[37,147967,147515],{"class":54},[37,147969,147970,147972,147974,147976,147978,147980,147983],{"class":39,"line":1684},[37,147971,147520],{"class":5288},[37,147973,70],{"class":50},[37,147975,147525],{"class":54},[37,147977,51475],{"class":5288},[37,147979,70],{"class":50},[37,147981,147982],{"class":309},"\"线上线下销售趋势\"",[37,147984,38116],{"class":54},[37,147986,147987,147989,147991,147993,147995,147997,147999],{"class":39,"line":1689},[37,147988,147576],{"class":5288},[37,147990,70],{"class":50},[37,147992,147581],{"class":54},[37,147994,147584],{"class":5288},[37,147996,70],{"class":50},[37,147998,147589],{"class":309},[37,148000,38116],{"class":54},[37,148002,148003],{"class":39,"line":1695},[37,148004,214],{"class":54},[37,148006,148007,148009,148012],{"class":39,"line":1700},[37,148008,147371],{"class":54},[37,148010,148011],{"class":309},"\"sales.html\"",[37,148013,214],{"class":54},[14,148015,148016],{},"多条折线适合比较不同指标或不同地区。",[146,148018,148020],{"id":148019},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,148022,148023,148024,24691],{},"假设 ",[34,148025,148026],{},"sales.json",[27,148028,148030],{"className":147092,"code":148029,"language":145839,"meta":32,"style":32},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[34,148031,148032,148037,148069,148097,148125],{"__ignoreMap":32},[37,148033,148034],{"class":39,"line":40},[37,148035,148036],{"class":54},"[\n",[37,148038,148039,148042,148045,148047,148049,148051,148054,148056,148058,148060,148063,148065,148067],{"class":39,"line":47},[37,148040,148041],{"class":54},"  {",[37,148043,148044],{"class":82},"\"date\"",[37,148046,51505],{"class":54},[37,148048,147312],{"class":309},[37,148050,12507],{"class":54},[37,148052,148053],{"class":82},"\"online\"",[37,148055,51505],{"class":54},[37,148057,516],{"class":82},[37,148059,12507],{"class":54},[37,148061,148062],{"class":82},"\"offline\"",[37,148064,51505],{"class":54},[37,148066,815],{"class":82},[37,148068,5002],{"class":54},[37,148070,148071,148073,148075,148077,148079,148081,148083,148085,148087,148089,148091,148093,148095],{"class":39,"line":58},[37,148072,148041],{"class":54},[37,148074,148044],{"class":82},[37,148076,51505],{"class":54},[37,148078,147317],{"class":309},[37,148080,12507],{"class":54},[37,148082,148053],{"class":82},[37,148084,51505],{"class":54},[37,148086,147904],{"class":82},[37,148088,12507],{"class":54},[37,148090,148062],{"class":82},[37,148092,51505],{"class":54},[37,148094,1065],{"class":82},[37,148096,5002],{"class":54},[37,148098,148099,148101,148103,148105,148107,148109,148111,148113,148115,148117,148119,148121,148123],{"class":39,"line":64},[37,148100,148041],{"class":54},[37,148102,148044],{"class":82},[37,148104,51505],{"class":54},[37,148106,147322],{"class":309},[37,148108,12507],{"class":54},[37,148110,148053],{"class":82},[37,148112,51505],{"class":54},[37,148114,1020],{"class":82},[37,148116,12507],{"class":54},[37,148118,148062],{"class":82},[37,148120,51505],{"class":54},[37,148122,516],{"class":82},[37,148124,1637],{"class":54},[37,148126,148127],{"class":39,"line":76},[37,148128,33315],{"class":54},[14,148130,148131],{},"读取并绘图：",[27,148133,148135],{"className":29,"code":148134,"language":31,"meta":32,"style":32},"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",[34,148136,148137,148143,148157,148167,148171,148203,148216,148220,148228,148237,148246,148250,148262,148271,148280,148289,148293,148301,148305,148322,148339,148343,148360,148376,148380],{"__ignoreMap":32},[37,148138,148139,148141],{"class":39,"line":40},[37,148140,51],{"class":50},[37,148142,147138],{"class":54},[37,148144,148145,148147,148149,148151,148153,148155],{"class":39,"line":47},[37,148146,30807],{"class":50},[37,148148,147426],{"class":54},[37,148150,51],{"class":50},[37,148152,147431],{"class":54},[37,148154,31453],{"class":50},[37,148156,147436],{"class":54},[37,148158,148159,148161,148163,148165],{"class":39,"line":58},[37,148160,30807],{"class":50},[37,148162,147285],{"class":54},[37,148164,51],{"class":50},[37,148166,147290],{"class":54},[37,148168,148169],{"class":39,"line":64},[37,148170,2472],{"emptyLinePlaceholder":131},[37,148172,148173,148175,148177,148179,148182,148184,148186,148188,148190,148192,148194,148196,148198,148201],{"class":39,"line":76},[37,148174,107880],{"class":50},[37,148176,146838],{"class":82},[37,148178,208],{"class":54},[37,148180,148181],{"class":309},"\"sales.json\"",[37,148183,12507],{"class":54},[37,148185,146848],{"class":309},[37,148187,12507],{"class":54},[37,148189,146853],{"class":5288},[37,148191,70],{"class":50},[37,148193,146858],{"class":309},[37,148195,13786],{"class":54},[37,148197,31453],{"class":50},[37,148199,148200],{"class":5288}," file",[37,148202,3811],{"class":54},[37,148204,148205,148207,148209,148212,148214],{"class":39,"line":92},[37,148206,101468],{"class":54},[37,148208,70],{"class":50},[37,148210,148211],{"class":54}," json.load(",[37,148213,45423],{"class":5288},[37,148215,214],{"class":54},[37,148217,148218],{"class":39,"line":97},[37,148219,2472],{"emptyLinePlaceholder":131},[37,148221,148222,148224,148226],{"class":39,"line":107},[37,148223,147847],{"class":54},[37,148225,70],{"class":50},[37,148227,51906],{"class":54},[37,148229,148230,148233,148235],{"class":39,"line":1390},[37,148231,148232],{"class":54},"online_sales ",[37,148234,70],{"class":50},[37,148236,51906],{"class":54},[37,148238,148239,148242,148244],{"class":39,"line":1402},[37,148240,148241],{"class":54},"offline_sales ",[37,148243,70],{"class":50},[37,148245,51906],{"class":54},[37,148247,148248],{"class":39,"line":1684},[37,148249,2472],{"emptyLinePlaceholder":131},[37,148251,148252,148254,148257,148259],{"class":39,"line":1689},[37,148253,3097],{"class":50},[37,148255,148256],{"class":54}," item ",[37,148258,26116],{"class":50},[37,148260,148261],{"class":54}," data:\n",[37,148263,148264,148267,148269],{"class":39,"line":1695},[37,148265,148266],{"class":54},"    dates.append(item[",[37,148268,148044],{"class":309},[37,148270,4729],{"class":54},[37,148272,148273,148276,148278],{"class":39,"line":1700},[37,148274,148275],{"class":54},"    online_sales.append(item[",[37,148277,148053],{"class":309},[37,148279,4729],{"class":54},[37,148281,148282,148285,148287],{"class":39,"line":1714},[37,148283,148284],{"class":54},"    offline_sales.append(item[",[37,148286,148062],{"class":309},[37,148288,4729],{"class":54},[37,148290,148291],{"class":39,"line":1719},[37,148292,2472],{"emptyLinePlaceholder":131},[37,148294,148295,148297,148299],{"class":39,"line":1725},[37,148296,147299],{"class":54},[37,148298,70],{"class":50},[37,148300,147304],{"class":54},[37,148302,148303],{"class":39,"line":1746},[37,148304,147888],{"class":54},[37,148306,148307,148309,148311,148314,148316,148318,148320],{"class":39,"line":1751},[37,148308,147339],{"class":54},[37,148310,147895],{"class":309},[37,148312,148313],{"class":54},", online_sales, ",[37,148315,147792],{"class":5288},[37,148317,70],{"class":50},[37,148319,31546],{"class":82},[37,148321,214],{"class":54},[37,148323,148324,148326,148328,148331,148333,148335,148337],{"class":39,"line":1765},[37,148325,147339],{"class":54},[37,148327,147933],{"class":309},[37,148329,148330],{"class":54},", offline_sales, ",[37,148332,147792],{"class":5288},[37,148334,70],{"class":50},[37,148336,31546],{"class":82},[37,148338,214],{"class":54},[37,148340,148341],{"class":39,"line":1770},[37,148342,147515],{"class":54},[37,148344,148345,148347,148349,148351,148353,148355,148358],{"class":39,"line":1799},[37,148346,147520],{"class":5288},[37,148348,70],{"class":50},[37,148350,147525],{"class":54},[37,148352,51475],{"class":5288},[37,148354,70],{"class":50},[37,148356,148357],{"class":309},"\"销售趋势\"",[37,148359,38116],{"class":54},[37,148361,148362,148364,148366,148368,148370,148372,148374],{"class":39,"line":1804},[37,148363,147576],{"class":5288},[37,148365,70],{"class":50},[37,148367,147581],{"class":54},[37,148369,147584],{"class":5288},[37,148371,70],{"class":50},[37,148373,147589],{"class":309},[37,148375,38116],{"class":54},[37,148377,148378],{"class":39,"line":1821},[37,148379,214],{"class":54},[37,148381,148382,148384,148386],{"class":39,"line":1826},[37,148383,147371],{"class":54},[37,148385,148011],{"class":309},[37,148387,214],{"class":54},[146,148389,148391],{"id":148390},"_109-数据清洗","10.9 数据清洗",[14,148393,148394],{},"真实数据经常不整齐，需要清洗。",[14,148396,148397],{},"常见问题：",[158,148399,148400,148403,148406,148409],{},[161,148401,148402],{},"数字是字符串。",[161,148404,148405],{},"字段缺失。",[161,148407,148408],{},"空值。",[161,148410,148411],{},"日期格式不统一。",[14,148413,15207],{},[27,148415,148417],{"className":29,"code":148416,"language":31,"meta":32,"style":32},"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",[34,148418,148419,148428,148451,148471,148492,148496,148500,148508,148517,148521,148532,148546,148555,148560,148564,148572,148582,148586,148593],{"__ignoreMap":32},[37,148420,148421,148424,148426],{"class":39,"line":40},[37,148422,148423],{"class":54},"raw_data ",[37,148425,70],{"class":50},[37,148427,55515],{"class":54},[37,148429,148430,148433,148435,148437,148439,148441,148444,148446,148449],{"class":39,"line":47},[37,148431,148432],{"class":54},"    {",[37,148434,148044],{"class":309},[37,148436,51505],{"class":54},[37,148438,147312],{"class":309},[37,148440,12507],{"class":54},[37,148442,148443],{"class":309},"\"sales\"",[37,148445,51505],{"class":54},[37,148447,148448],{"class":309},"\"100\"",[37,148450,5002],{"class":54},[37,148452,148453,148455,148457,148459,148461,148463,148465,148467,148469],{"class":39,"line":58},[37,148454,148432],{"class":54},[37,148456,148044],{"class":309},[37,148458,51505],{"class":54},[37,148460,147317],{"class":309},[37,148462,12507],{"class":54},[37,148464,148443],{"class":309},[37,148466,51505],{"class":54},[37,148468,7724],{"class":309},[37,148470,5002],{"class":54},[37,148472,148473,148475,148477,148479,148481,148483,148485,148487,148490],{"class":39,"line":64},[37,148474,148432],{"class":54},[37,148476,148044],{"class":309},[37,148478,51505],{"class":54},[37,148480,147322],{"class":309},[37,148482,12507],{"class":54},[37,148484,148443],{"class":309},[37,148486,51505],{"class":54},[37,148488,148489],{"class":309},"\"120\"",[37,148491,5002],{"class":54},[37,148493,148494],{"class":39,"line":76},[37,148495,33315],{"class":54},[37,148497,148498],{"class":39,"line":92},[37,148499,2472],{"emptyLinePlaceholder":131},[37,148501,148502,148504,148506],{"class":39,"line":97},[37,148503,147847],{"class":54},[37,148505,70],{"class":50},[37,148507,51906],{"class":54},[37,148509,148510,148513,148515],{"class":39,"line":107},[37,148511,148512],{"class":54},"sales ",[37,148514,70],{"class":50},[37,148516,51906],{"class":54},[37,148518,148519],{"class":39,"line":1390},[37,148520,2472],{"emptyLinePlaceholder":131},[37,148522,148523,148525,148527,148529],{"class":39,"line":1402},[37,148524,3097],{"class":50},[37,148526,148256],{"class":54},[37,148528,26116],{"class":50},[37,148530,148531],{"class":54}," raw_data:\n",[37,148533,148534,148537,148539,148542,148544],{"class":39,"line":1684},[37,148535,148536],{"class":54},"    value ",[37,148538,70],{"class":50},[37,148540,148541],{"class":54}," item.get(",[37,148543,148443],{"class":309},[37,148545,214],{"class":54},[37,148547,148548,148550,148552],{"class":39,"line":1689},[37,148549,3173],{"class":50},[37,148551,38999],{"class":50},[37,148553,148554],{"class":54}," value:\n",[37,148556,148557],{"class":39,"line":1695},[37,148558,148559],{"class":50},"        continue\n",[37,148561,148562],{"class":39,"line":1700},[37,148563,2472],{"emptyLinePlaceholder":131},[37,148565,148566,148568,148570],{"class":39,"line":1714},[37,148567,148266],{"class":54},[37,148569,148044],{"class":309},[37,148571,4729],{"class":54},[37,148573,148574,148577,148579],{"class":39,"line":1719},[37,148575,148576],{"class":54},"    sales.append(",[37,148578,211],{"class":82},[37,148580,148581],{"class":54},"(value))\n",[37,148583,148584],{"class":39,"line":1725},[37,148585,2472],{"emptyLinePlaceholder":131},[37,148587,148588,148590],{"class":39,"line":1746},[37,148589,30485],{"class":82},[37,148591,148592],{"class":54},"(dates)\n",[37,148594,148595,148597],{"class":39,"line":1751},[37,148596,30485],{"class":82},[37,148598,148599],{"class":54},"(sales)\n",[146,148601,148603],{"id":148602},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[27,148605,148607],{"className":29,"code":148606,"language":31,"meta":32,"style":32},"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",[34,148608,148609,148623,148633,148637,148645,148666,148688,148710,148732,148754,148758,148762,148784,148805,148809,148817,148821,148825,148835,148844,148854,148870,148874,148878,148895,148911,148927,148943,148953,148957],{"__ignoreMap":32},[37,148610,148611,148613,148615,148617,148619,148621],{"class":39,"line":40},[37,148612,30807],{"class":50},[37,148614,147426],{"class":54},[37,148616,51],{"class":50},[37,148618,147431],{"class":54},[37,148620,31453],{"class":50},[37,148622,147436],{"class":54},[37,148624,148625,148627,148629,148631],{"class":39,"line":47},[37,148626,30807],{"class":50},[37,148628,147285],{"class":54},[37,148630,51],{"class":50},[37,148632,147290],{"class":54},[37,148634,148635],{"class":39,"line":58},[37,148636,2472],{"emptyLinePlaceholder":131},[37,148638,148639,148641,148643],{"class":39,"line":64},[37,148640,148512],{"class":54},[37,148642,70],{"class":50},[37,148644,55515],{"class":54},[37,148646,148647,148649,148651,148653,148656,148658,148660,148662,148664],{"class":39,"line":76},[37,148648,148432],{"class":54},[37,148650,148044],{"class":309},[37,148652,51505],{"class":54},[37,148654,148655],{"class":309},"\"2024-10-01\"",[37,148657,12507],{"class":54},[37,148659,84152],{"class":309},[37,148661,51505],{"class":54},[37,148663,92091],{"class":82},[37,148665,5002],{"class":54},[37,148667,148668,148670,148672,148674,148677,148679,148681,148683,148686],{"class":39,"line":92},[37,148669,148432],{"class":54},[37,148671,148044],{"class":309},[37,148673,51505],{"class":54},[37,148675,148676],{"class":309},"\"2024-10-02\"",[37,148678,12507],{"class":54},[37,148680,84152],{"class":309},[37,148682,51505],{"class":54},[37,148684,148685],{"class":82},"1800",[37,148687,5002],{"class":54},[37,148689,148690,148692,148694,148696,148699,148701,148703,148705,148708],{"class":39,"line":97},[37,148691,148432],{"class":54},[37,148693,148044],{"class":309},[37,148695,51505],{"class":54},[37,148697,148698],{"class":309},"\"2024-10-03\"",[37,148700,12507],{"class":54},[37,148702,84152],{"class":309},[37,148704,51505],{"class":54},[37,148706,148707],{"class":82},"1500",[37,148709,5002],{"class":54},[37,148711,148712,148714,148716,148718,148721,148723,148725,148727,148730],{"class":39,"line":107},[37,148713,148432],{"class":54},[37,148715,148044],{"class":309},[37,148717,51505],{"class":54},[37,148719,148720],{"class":309},"\"2024-10-04\"",[37,148722,12507],{"class":54},[37,148724,84152],{"class":309},[37,148726,51505],{"class":54},[37,148728,148729],{"class":82},"2100",[37,148731,5002],{"class":54},[37,148733,148734,148736,148738,148740,148743,148745,148747,148749,148752],{"class":39,"line":1390},[37,148735,148432],{"class":54},[37,148737,148044],{"class":309},[37,148739,51505],{"class":54},[37,148741,148742],{"class":309},"\"2024-10-05\"",[37,148744,12507],{"class":54},[37,148746,84152],{"class":309},[37,148748,51505],{"class":54},[37,148750,148751],{"class":82},"2600",[37,148753,5002],{"class":54},[37,148755,148756],{"class":39,"line":1402},[37,148757,33315],{"class":54},[37,148759,148760],{"class":39,"line":1684},[37,148761,2472],{"emptyLinePlaceholder":131},[37,148763,148764,148766,148768,148771,148773,148775,148777,148779,148781],{"class":39,"line":1689},[37,148765,147847],{"class":54},[37,148767,70],{"class":50},[37,148769,148770],{"class":54}," [item[",[37,148772,148044],{"class":309},[37,148774,4515],{"class":54},[37,148776,3097],{"class":50},[37,148778,148256],{"class":54},[37,148780,26116],{"class":50},[37,148782,148783],{"class":54}," sales]\n",[37,148785,148786,148789,148791,148793,148795,148797,148799,148801,148803],{"class":39,"line":1695},[37,148787,148788],{"class":54},"amounts ",[37,148790,70],{"class":50},[37,148792,148770],{"class":54},[37,148794,84152],{"class":309},[37,148796,4515],{"class":54},[37,148798,3097],{"class":50},[37,148800,148256],{"class":54},[37,148802,26116],{"class":50},[37,148804,148783],{"class":54},[37,148806,148807],{"class":39,"line":1700},[37,148808,2472],{"emptyLinePlaceholder":131},[37,148810,148811,148813,148815],{"class":39,"line":1714},[37,148812,147299],{"class":54},[37,148814,70],{"class":50},[37,148816,147304],{"class":54},[37,148818,148819],{"class":39,"line":1719},[37,148820,147888],{"class":54},[37,148822,148823],{"class":39,"line":1725},[37,148824,147696],{"class":54},[37,148826,148827,148829,148831,148833],{"class":39,"line":1746},[37,148828,147701],{"class":5288},[37,148830,70],{"class":50},[37,148832,147342],{"class":309},[37,148834,31536],{"class":54},[37,148836,148837,148839,148841],{"class":39,"line":1751},[37,148838,147712],{"class":5288},[37,148840,70],{"class":50},[37,148842,148843],{"class":54},"amounts,\n",[37,148845,148846,148848,148850,148852],{"class":39,"line":1765},[37,148847,147741],{"class":5288},[37,148849,70],{"class":50},[37,148851,31546],{"class":82},[37,148853,31536],{"class":54},[37,148855,148856,148858,148860,148862,148864,148866,148868],{"class":39,"line":1770},[37,148857,147752],{"class":5288},[37,148859,70],{"class":50},[37,148861,147757],{"class":54},[37,148863,147760],{"class":5288},[37,148865,70],{"class":50},[37,148867,31546],{"class":82},[37,148869,38116],{"class":54},[37,148871,148872],{"class":39,"line":1799},[37,148873,214],{"class":54},[37,148875,148876],{"class":39,"line":1804},[37,148877,147515],{"class":54},[37,148879,148880,148882,148884,148886,148888,148890,148893],{"class":39,"line":1821},[37,148881,147520],{"class":5288},[37,148883,70],{"class":50},[37,148885,147525],{"class":54},[37,148887,51475],{"class":5288},[37,148889,70],{"class":50},[37,148891,148892],{"class":309},"\"每日销售额\"",[37,148894,38116],{"class":54},[37,148896,148897,148899,148901,148903,148905,148907,148909],{"class":39,"line":1826},[37,148898,147539],{"class":5288},[37,148900,70],{"class":50},[37,148902,147544],{"class":54},[37,148904,79878],{"class":5288},[37,148906,70],{"class":50},[37,148908,147551],{"class":309},[37,148910,38116],{"class":54},[37,148912,148913,148915,148917,148919,148921,148923,148925],{"class":39,"line":1831},[37,148914,147558],{"class":5288},[37,148916,70],{"class":50},[37,148918,147544],{"class":54},[37,148920,79878],{"class":5288},[37,148922,70],{"class":50},[37,148924,147569],{"class":309},[37,148926,38116],{"class":54},[37,148928,148929,148931,148933,148935,148937,148939,148941],{"class":39,"line":1836},[37,148930,147576],{"class":5288},[37,148932,70],{"class":50},[37,148934,147581],{"class":54},[37,148936,147584],{"class":5288},[37,148938,70],{"class":50},[37,148940,147589],{"class":309},[37,148942,38116],{"class":54},[37,148944,148945,148948,148950],{"class":39,"line":1850},[37,148946,148947],{"class":5288},"    datazoom_opts",[37,148949,70],{"class":50},[37,148951,148952],{"class":54},"[opts.DataZoomOpts()],\n",[37,148954,148955],{"class":39,"line":1855},[37,148956,214],{"class":54},[37,148958,148959,148961,148964],{"class":39,"line":2649},[37,148960,147371],{"class":54},[37,148962,148963],{"class":309},"\"daily_sales.html\"",[37,148965,214],{"class":54},[14,148967,148968,148971],{},[34,148969,148970],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[146,148973,148975],{"id":148974},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,148977,148978],{},"如果数据结构如下：",[27,148980,148982],{"className":29,"code":148981,"language":31,"meta":32,"style":32},"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",[34,148983,148984,148992,149000,149022,149043,149048,149055,149075,149095,149099],{"__ignoreMap":32},[37,148985,148986,148988,148990],{"class":39,"line":40},[37,148987,101705],{"class":54},[37,148989,70],{"class":50},[37,148991,15644],{"class":54},[37,148993,148994,148997],{"class":39,"line":47},[37,148995,148996],{"class":309},"    \"北京\"",[37,148998,148999],{"class":54},": [\n",[37,149001,149002,149004,149006,149008,149011,149013,149016,149018,149020],{"class":39,"line":58},[37,149003,4989],{"class":54},[37,149005,148044],{"class":309},[37,149007,51505],{"class":54},[37,149009,149010],{"class":309},"\"2024-01-01\"",[37,149012,12507],{"class":54},[37,149014,149015],{"class":309},"\"confirm\"",[37,149017,51505],{"class":54},[37,149019,650],{"class":82},[37,149021,5002],{"class":54},[37,149023,149024,149026,149028,149030,149033,149035,149037,149039,149041],{"class":39,"line":64},[37,149025,4989],{"class":54},[37,149027,148044],{"class":309},[37,149029,51505],{"class":54},[37,149031,149032],{"class":309},"\"2024-01-02\"",[37,149034,12507],{"class":54},[37,149036,149015],{"class":309},[37,149038,51505],{"class":54},[37,149040,702],{"class":82},[37,149042,5002],{"class":54},[37,149044,149045],{"class":39,"line":76},[37,149046,149047],{"class":54},"    ],\n",[37,149049,149050,149053],{"class":39,"line":92},[37,149051,149052],{"class":309},"    \"上海\"",[37,149054,148999],{"class":54},[37,149056,149057,149059,149061,149063,149065,149067,149069,149071,149073],{"class":39,"line":97},[37,149058,4989],{"class":54},[37,149060,148044],{"class":309},[37,149062,51505],{"class":54},[37,149064,149010],{"class":309},[37,149066,12507],{"class":54},[37,149068,149015],{"class":309},[37,149070,51505],{"class":54},[37,149072,600],{"class":82},[37,149074,5002],{"class":54},[37,149076,149077,149079,149081,149083,149085,149087,149089,149091,149093],{"class":39,"line":107},[37,149078,4989],{"class":54},[37,149080,148044],{"class":309},[37,149082,51505],{"class":54},[37,149084,149032],{"class":309},[37,149086,12507],{"class":54},[37,149088,149015],{"class":309},[37,149090,51505],{"class":54},[37,149092,727],{"class":82},[37,149094,5002],{"class":54},[37,149096,149097],{"class":39,"line":1390},[37,149098,149047],{"class":54},[37,149100,149101],{"class":39,"line":1402},[37,149102,1637],{"class":54},[14,149104,149105],{},"绘制多地区趋势：",[27,149107,149109],{"className":29,"code":149108,"language":31,"meta":32,"style":32},"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",[34,149110,149111,149125,149135,149139,149164,149168,149176,149180,149184,149196,149218,149231,149235,149239,149256,149272,149276],{"__ignoreMap":32},[37,149112,149113,149115,149117,149119,149121,149123],{"class":39,"line":40},[37,149114,30807],{"class":50},[37,149116,147426],{"class":54},[37,149118,51],{"class":50},[37,149120,147431],{"class":54},[37,149122,31453],{"class":50},[37,149124,147436],{"class":54},[37,149126,149127,149129,149131,149133],{"class":39,"line":47},[37,149128,30807],{"class":50},[37,149130,147285],{"class":54},[37,149132,51],{"class":50},[37,149134,147290],{"class":54},[37,149136,149137],{"class":39,"line":58},[37,149138,2472],{"emptyLinePlaceholder":131},[37,149140,149141,149143,149145,149147,149149,149151,149153,149155,149157,149160,149162],{"class":39,"line":64},[37,149142,147847],{"class":54},[37,149144,70],{"class":50},[37,149146,148770],{"class":54},[37,149148,148044],{"class":309},[37,149150,4515],{"class":54},[37,149152,3097],{"class":50},[37,149154,148256],{"class":54},[37,149156,26116],{"class":50},[37,149158,149159],{"class":54}," data[",[37,149161,69337],{"class":309},[37,149163,77595],{"class":54},[37,149165,149166],{"class":39,"line":76},[37,149167,2472],{"emptyLinePlaceholder":131},[37,149169,149170,149172,149174],{"class":39,"line":92},[37,149171,147299],{"class":54},[37,149173,70],{"class":50},[37,149175,147304],{"class":54},[37,149177,149178],{"class":39,"line":97},[37,149179,147888],{"class":54},[37,149181,149182],{"class":39,"line":107},[37,149183,2472],{"emptyLinePlaceholder":131},[37,149185,149186,149188,149191,149193],{"class":39,"line":1390},[37,149187,3097],{"class":50},[37,149189,149190],{"class":54}," city, records ",[37,149192,26116],{"class":50},[37,149194,149195],{"class":54}," data.items():\n",[37,149197,149198,149201,149203,149205,149207,149209,149211,149213,149215],{"class":39,"line":1402},[37,149199,149200],{"class":54},"    values ",[37,149202,70],{"class":50},[37,149204,148770],{"class":54},[37,149206,149015],{"class":309},[37,149208,4515],{"class":54},[37,149210,3097],{"class":50},[37,149212,148256],{"class":54},[37,149214,26116],{"class":50},[37,149216,149217],{"class":54}," records]\n",[37,149219,149220,149223,149225,149227,149229],{"class":39,"line":1684},[37,149221,149222],{"class":54},"    line.add_yaxis(city, values, ",[37,149224,147792],{"class":5288},[37,149226,70],{"class":50},[37,149228,31546],{"class":82},[37,149230,214],{"class":54},[37,149232,149233],{"class":39,"line":1689},[37,149234,2472],{"emptyLinePlaceholder":131},[37,149236,149237],{"class":39,"line":1695},[37,149238,147515],{"class":54},[37,149240,149241,149243,149245,149247,149249,149251,149254],{"class":39,"line":1700},[37,149242,147520],{"class":5288},[37,149244,70],{"class":50},[37,149246,147525],{"class":54},[37,149248,51475],{"class":5288},[37,149250,70],{"class":50},[37,149252,149253],{"class":309},"\"多地区趋势图\"",[37,149255,38116],{"class":54},[37,149257,149258,149260,149262,149264,149266,149268,149270],{"class":39,"line":1714},[37,149259,147576],{"class":5288},[37,149261,70],{"class":50},[37,149263,147581],{"class":54},[37,149265,147584],{"class":5288},[37,149267,70],{"class":50},[37,149269,147589],{"class":309},[37,149271,38116],{"class":54},[37,149273,149274],{"class":39,"line":1719},[37,149275,214],{"class":54},[37,149277,149278,149280,149283],{"class":39,"line":1725},[37,149279,147371],{"class":54},[37,149281,149282],{"class":309},"\"trend.html\"",[37,149284,214],{"class":54},[14,149286,149287],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[146,149289,149291],{"id":149290},"_1012-易错点","10.12 易错点",[158,149293,149294,149300,149306,149316,149322],{},[161,149295,149296,149299],{},[34,149297,149298],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[161,149301,149302,149305],{},[34,149303,149304],{},"render()"," 生成的是 HTML，不是图片。",[161,149307,149308,149309,149312,149313,28458],{},"JSON 字符串用 ",[34,149310,149311],{},"json.loads()","，JSON 文件用 ",[34,149314,149315],{},"json.load()",[161,149317,149318,149319,28458],{},"中文 JSON 保存时加 ",[34,149320,149321],{},"ensure_ascii=False",[161,149323,149324],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[146,149326,149328],{"id":149327},"_1013-本章练习","10.13 本章练习",[158,149330,149331,149334,149337,149340,149343],{},[161,149332,149333],{},"安装 pyecharts 并生成第一个折线图。",[161,149335,149336],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[161,149338,149339],{},"绘制两条折线，对比线上和线下销售额。",[161,149341,149342],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[161,149344,149345],{},"对含有空值的销售数据进行清洗后再绘图。",[123,149347,149348],{},"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":32,"searchDepth":47,"depth":47,"links":149350},[149351,149352,149353,149354,149355,149356,149357,149358,149359,149360,149361,149362,149363],{"id":146967,"depth":47,"text":146968},{"id":147042,"depth":47,"text":147043},{"id":147221,"depth":47,"text":147222},{"id":147272,"depth":47,"text":147273},{"id":147406,"depth":47,"text":147407},{"id":147682,"depth":47,"text":147683},{"id":147808,"depth":47,"text":147809},{"id":148019,"depth":47,"text":148020},{"id":148390,"depth":47,"text":148391},{"id":148602,"depth":47,"text":148603},{"id":148974,"depth":47,"text":148975},{"id":149290,"depth":47,"text":149291},{"id":149327,"depth":47,"text":149328},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146959,"description":128},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149370,"title":149371,"body":149372,"description":128,"extension":129,"meta":151732,"navigation":131,"path":151733,"seo":151734,"stem":151735,"__hash__":151736},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149373,"toc":151709},[149374,149377,149381,149384,149387,149463,149466,149557,149560,149564,149567,149611,149624,149628,149631,149698,149701,149705,149708,149792,149800,149804,149809,149950,149953,149964,149970,149976,150090,150094,150097,150100,150353,150356,150360,150363,150467,150470,150474,150625,150629,150636,150749,150753,150756,150862,150865,150869,150872,150903,150906,151011,151014,151018,151022,151032,151100,151104,151111,151175,151178,151182,151188,151284,151293,151297,151621,151630,151634,151662,151666,151706],[10,149375,149371],{"id":149376},"_11-面向对象基础",[146,149378,149380],{"id":149379},"_111-什么是面向对象","11.1 什么是面向对象",[14,149382,149383],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149385,149386],{},"面向过程：",[27,149388,149390],{"className":29,"code":149389,"language":31,"meta":32,"style":32},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[34,149391,149392,149401,149409,149413,149423,149454,149458],{"__ignoreMap":32},[37,149393,149394,149396,149398],{"class":39,"line":40},[37,149395,146583],{"class":54},[37,149397,70],{"class":50},[37,149399,149400],{"class":309}," \"小明\"\n",[37,149402,149403,149405,149407],{"class":39,"line":47},[37,149404,146593],{"class":54},[37,149406,70],{"class":50},[37,149408,146598],{"class":82},[37,149410,149411],{"class":39,"line":58},[37,149412,2472],{"emptyLinePlaceholder":131},[37,149414,149415,149417,149420],{"class":39,"line":64},[37,149416,32017],{"class":50},[37,149418,149419],{"class":2035}," introduce",[37,149421,149422],{"class":54},"(name, age):\n",[37,149424,149425,149427,149429,149431,149434,149436,149438,149440,149443,149445,149447,149449,149452],{"class":39,"line":76},[37,149426,31369],{"class":82},[37,149428,208],{"class":54},[37,149430,258],{"class":50},[37,149432,149433],{"class":309},"\"我叫",[37,149435,1099],{"class":82},[37,149437,79878],{"class":54},[37,149439,1149],{"class":82},[37,149441,149442],{"class":309},"，今年",[37,149444,1099],{"class":82},[37,149446,70289],{"class":54},[37,149448,1149],{"class":82},[37,149450,149451],{"class":309},"岁\"",[37,149453,214],{"class":54},[37,149455,149456],{"class":39,"line":92},[37,149457,2472],{"emptyLinePlaceholder":131},[37,149459,149460],{"class":39,"line":97},[37,149461,149462],{"class":54},"introduce(name, age)\n",[14,149464,149465],{},"面向对象：",[27,149467,149469],{"className":29,"code":149468,"language":31,"meta":32,"style":32},"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",[34,149470,149471,149479,149487,149516,149520,149524,149534,149543,149552],{"__ignoreMap":32},[37,149472,149473,149475,149477],{"class":39,"line":40},[37,149474,14766],{"class":50},[37,149476,7970],{"class":2035},[37,149478,3811],{"class":54},[37,149480,149481,149483,149485],{"class":39,"line":47},[37,149482,30871],{"class":50},[37,149484,149419],{"class":2035},[37,149486,30877],{"class":54},[37,149488,149489,149491,149493,149495,149497,149500,149502,149504,149506,149508,149510,149512,149514],{"class":39,"line":58},[37,149490,32520],{"class":82},[37,149492,208],{"class":54},[37,149494,258],{"class":50},[37,149496,149433],{"class":309},[37,149498,149499],{"class":82},"{self",[37,149501,80369],{"class":54},[37,149503,1149],{"class":82},[37,149505,149442],{"class":309},[37,149507,149499],{"class":82},[37,149509,80381],{"class":54},[37,149511,1149],{"class":82},[37,149513,149451],{"class":309},[37,149515,214],{"class":54},[37,149517,149518],{"class":39,"line":64},[37,149519,2472],{"emptyLinePlaceholder":131},[37,149521,149522],{"class":39,"line":76},[37,149523,2472],{"emptyLinePlaceholder":131},[37,149525,149526,149529,149531],{"class":39,"line":92},[37,149527,149528],{"class":54},"student ",[37,149530,70],{"class":50},[37,149532,149533],{"class":54}," Student()\n",[37,149535,149536,149539,149541],{"class":39,"line":97},[37,149537,149538],{"class":54},"student.name ",[37,149540,70],{"class":50},[37,149542,149400],{"class":309},[37,149544,149545,149548,149550],{"class":39,"line":107},[37,149546,149547],{"class":54},"student.age ",[37,149549,70],{"class":50},[37,149551,146598],{"class":82},[37,149553,149554],{"class":39,"line":1390},[37,149555,149556],{"class":54},"student.introduce()\n",[14,149558,149559],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[146,149561,149563],{"id":149562},"_112-类和对象","11.2 类和对象",[14,149565,149566],{},"类是模板，对象是根据模板创建出来的具体实例。",[27,149568,149570],{"className":29,"code":149569,"language":31,"meta":32,"style":32},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[34,149571,149572,149580,149585,149589,149593,149602],{"__ignoreMap":32},[37,149573,149574,149576,149578],{"class":39,"line":40},[37,149575,14766],{"class":50},[37,149577,7970],{"class":2035},[37,149579,3811],{"class":54},[37,149581,149582],{"class":39,"line":47},[37,149583,149584],{"class":50},"    pass\n",[37,149586,149587],{"class":39,"line":58},[37,149588,2472],{"emptyLinePlaceholder":131},[37,149590,149591],{"class":39,"line":64},[37,149592,2472],{"emptyLinePlaceholder":131},[37,149594,149595,149598,149600],{"class":39,"line":76},[37,149596,149597],{"class":54},"student1 ",[37,149599,70],{"class":50},[37,149601,149533],{"class":54},[37,149603,149604,149607,149609],{"class":39,"line":92},[37,149605,149606],{"class":54},"student2 ",[37,149608,70],{"class":50},[37,149610,149533],{"class":54},[14,149612,149613,149616,149617,101065,149620,149623],{},[34,149614,149615],{},"Student"," 是类，",[34,149618,149619],{},"student1",[34,149621,149622],{},"student2"," 是对象。",[146,149625,149627],{"id":149626},"_113-属性","11.3 属性",[14,149629,149630],{},"属性是对象保存的数据。",[27,149632,149634],{"className":29,"code":149633,"language":31,"meta":32,"style":32},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[34,149635,149636,149644,149648,149652,149656,149664,149672,149680,149684,149691],{"__ignoreMap":32},[37,149637,149638,149640,149642],{"class":39,"line":40},[37,149639,14766],{"class":50},[37,149641,7970],{"class":2035},[37,149643,3811],{"class":54},[37,149645,149646],{"class":39,"line":47},[37,149647,149584],{"class":50},[37,149649,149650],{"class":39,"line":58},[37,149651,2472],{"emptyLinePlaceholder":131},[37,149653,149654],{"class":39,"line":64},[37,149655,2472],{"emptyLinePlaceholder":131},[37,149657,149658,149660,149662],{"class":39,"line":76},[37,149659,149528],{"class":54},[37,149661,70],{"class":50},[37,149663,149533],{"class":54},[37,149665,149666,149668,149670],{"class":39,"line":92},[37,149667,149538],{"class":54},[37,149669,70],{"class":50},[37,149671,149400],{"class":309},[37,149673,149674,149676,149678],{"class":39,"line":97},[37,149675,149547],{"class":54},[37,149677,70],{"class":50},[37,149679,146598],{"class":82},[37,149681,149682],{"class":39,"line":107},[37,149683,2472],{"emptyLinePlaceholder":131},[37,149685,149686,149688],{"class":39,"line":1390},[37,149687,30485],{"class":82},[37,149689,149690],{"class":54},"(student.name)\n",[37,149692,149693,149695],{"class":39,"line":1402},[37,149694,30485],{"class":82},[37,149696,149697],{"class":54},"(student.age)\n",[14,149699,149700],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[146,149702,149704],{"id":149703},"_114-方法","11.4 方法",[14,149706,149707],{},"类中的函数叫方法。",[27,149709,149710],{"className":29,"code":149468,"language":31,"meta":32,"style":32},[34,149711,149712,149720,149728,149756,149760,149764,149772,149780,149788],{"__ignoreMap":32},[37,149713,149714,149716,149718],{"class":39,"line":40},[37,149715,14766],{"class":50},[37,149717,7970],{"class":2035},[37,149719,3811],{"class":54},[37,149721,149722,149724,149726],{"class":39,"line":47},[37,149723,30871],{"class":50},[37,149725,149419],{"class":2035},[37,149727,30877],{"class":54},[37,149729,149730,149732,149734,149736,149738,149740,149742,149744,149746,149748,149750,149752,149754],{"class":39,"line":58},[37,149731,32520],{"class":82},[37,149733,208],{"class":54},[37,149735,258],{"class":50},[37,149737,149433],{"class":309},[37,149739,149499],{"class":82},[37,149741,80369],{"class":54},[37,149743,1149],{"class":82},[37,149745,149442],{"class":309},[37,149747,149499],{"class":82},[37,149749,80381],{"class":54},[37,149751,1149],{"class":82},[37,149753,149451],{"class":309},[37,149755,214],{"class":54},[37,149757,149758],{"class":39,"line":64},[37,149759,2472],{"emptyLinePlaceholder":131},[37,149761,149762],{"class":39,"line":76},[37,149763,2472],{"emptyLinePlaceholder":131},[37,149765,149766,149768,149770],{"class":39,"line":92},[37,149767,149528],{"class":54},[37,149769,70],{"class":50},[37,149771,149533],{"class":54},[37,149773,149774,149776,149778],{"class":39,"line":97},[37,149775,149538],{"class":54},[37,149777,70],{"class":50},[37,149779,149400],{"class":309},[37,149781,149782,149784,149786],{"class":39,"line":107},[37,149783,149547],{"class":54},[37,149785,70],{"class":50},[37,149787,146598],{"class":82},[37,149789,149790],{"class":39,"line":1390},[37,149791,149556],{"class":54},[14,149793,149794,149796,149797,149799],{},[34,149795,30893],{}," 表示当前对象。调用方法时不需要手动传入 ",[34,149798,30893],{},"，Python 会自动传。",[146,149801,149803],{"id":149802},"_115-构造方法__init__","11.5 构造方法__init__",[14,149805,149806,149808],{},[34,149807,30899],{}," 在对象创建时自动执行，用于初始化属性。",[27,149810,149812],{"className":29,"code":149811,"language":31,"meta":32,"style":32},"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",[34,149813,149814,149822,149831,149843,149855,149866,149870,149878,149916,149920,149924,149946],{"__ignoreMap":32},[37,149815,149816,149818,149820],{"class":39,"line":40},[37,149817,14766],{"class":50},[37,149819,7970],{"class":2035},[37,149821,3811],{"class":54},[37,149823,149824,149826,149828],{"class":39,"line":47},[37,149825,30871],{"class":50},[37,149827,30874],{"class":82},[37,149829,149830],{"class":54},"(self, name, age, score):\n",[37,149832,149833,149835,149838,149840],{"class":39,"line":58},[37,149834,30915],{"class":82},[37,149836,149837],{"class":54},".name ",[37,149839,70],{"class":50},[37,149841,149842],{"class":54}," name\n",[37,149844,149845,149847,149850,149852],{"class":39,"line":64},[37,149846,30915],{"class":82},[37,149848,149849],{"class":54},".age ",[37,149851,70],{"class":50},[37,149853,149854],{"class":54}," age\n",[37,149856,149857,149859,149862,149864],{"class":39,"line":76},[37,149858,30915],{"class":82},[37,149860,149861],{"class":54},".score ",[37,149863,70],{"class":50},[37,149865,1651],{"class":54},[37,149867,149868],{"class":39,"line":92},[37,149869,2472],{"emptyLinePlaceholder":131},[37,149871,149872,149874,149876],{"class":39,"line":97},[37,149873,30871],{"class":50},[37,149875,149419],{"class":2035},[37,149877,30877],{"class":54},[37,149879,149880,149882,149884,149886,149888,149890,149892,149894,149896,149898,149900,149902,149905,149907,149910,149912,149914],{"class":39,"line":107},[37,149881,32520],{"class":82},[37,149883,208],{"class":54},[37,149885,258],{"class":50},[37,149887,149433],{"class":309},[37,149889,149499],{"class":82},[37,149891,80369],{"class":54},[37,149893,1149],{"class":82},[37,149895,149442],{"class":309},[37,149897,149499],{"class":82},[37,149899,80381],{"class":54},[37,149901,1149],{"class":82},[37,149903,149904],{"class":309},"岁，成绩",[37,149906,149499],{"class":82},[37,149908,149909],{"class":54},".score",[37,149911,1149],{"class":82},[37,149913,456],{"class":309},[37,149915,214],{"class":54},[37,149917,149918],{"class":39,"line":1390},[37,149919,2472],{"emptyLinePlaceholder":131},[37,149921,149922],{"class":39,"line":1402},[37,149923,2472],{"emptyLinePlaceholder":131},[37,149925,149926,149928,149930,149933,149936,149938,149940,149942,149944],{"class":39,"line":1684},[37,149927,149528],{"class":54},[37,149929,70],{"class":50},[37,149931,149932],{"class":54}," Student(",[37,149934,149935],{"class":309},"\"小明\"",[37,149937,12507],{"class":54},[37,149939,853],{"class":82},[37,149941,12507],{"class":54},[37,149943,1192],{"class":82},[37,149945,214],{"class":54},[37,149947,149948],{"class":39,"line":1689},[37,149949,149556],{"class":54},[14,149951,149952],{},"构造方法的好处：",[158,149954,149955,149958,149961],{},[161,149956,149957],{},"创建对象时必须提供必要数据。",[161,149959,149960],{},"属性初始化集中，不容易漏。",[161,149962,149963],{},"对象状态更完整。",[146,149965,149967,149968],{"id":149966},"_116-str","11.6 ",[354,149969,1373],{},[14,149971,149972,149973,28458],{},"直接打印对象时，默认输出不直观。可以定义 ",[34,149974,149975],{},"__str__",[27,149977,149979],{"className":29,"code":149978,"language":31,"meta":32,"style":32},"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",[34,149980,149981,149989,149998,150008,150018,150022,150031,150059,150063,150067,150083],{"__ignoreMap":32},[37,149982,149983,149985,149987],{"class":39,"line":40},[37,149984,14766],{"class":50},[37,149986,7970],{"class":2035},[37,149988,3811],{"class":54},[37,149990,149991,149993,149995],{"class":39,"line":47},[37,149992,30871],{"class":50},[37,149994,30874],{"class":82},[37,149996,149997],{"class":54},"(self, name, age):\n",[37,149999,150000,150002,150004,150006],{"class":39,"line":58},[37,150001,30915],{"class":82},[37,150003,149837],{"class":54},[37,150005,70],{"class":50},[37,150007,149842],{"class":54},[37,150009,150010,150012,150014,150016],{"class":39,"line":64},[37,150011,30915],{"class":82},[37,150013,149849],{"class":54},[37,150015,70],{"class":50},[37,150017,149854],{"class":54},[37,150019,150020],{"class":39,"line":76},[37,150021,2472],{"emptyLinePlaceholder":131},[37,150023,150024,150026,150029],{"class":39,"line":92},[37,150025,30871],{"class":50},[37,150027,150028],{"class":82}," __str__",[37,150030,30877],{"class":54},[37,150032,150033,150035,150038,150041,150043,150045,150047,150050,150052,150054,150056],{"class":39,"line":97},[37,150034,14824],{"class":50},[37,150036,150037],{"class":50}," f",[37,150039,150040],{"class":309},"\"Student(name=",[37,150042,149499],{"class":82},[37,150044,80369],{"class":54},[37,150046,1149],{"class":82},[37,150048,150049],{"class":309},", age=",[37,150051,149499],{"class":82},[37,150053,80381],{"class":54},[37,150055,1149],{"class":82},[37,150057,150058],{"class":309},")\"\n",[37,150060,150061],{"class":39,"line":107},[37,150062,2472],{"emptyLinePlaceholder":131},[37,150064,150065],{"class":39,"line":1390},[37,150066,2472],{"emptyLinePlaceholder":131},[37,150068,150069,150071,150073,150075,150077,150079,150081],{"class":39,"line":1402},[37,150070,149528],{"class":54},[37,150072,70],{"class":50},[37,150074,149932],{"class":54},[37,150076,149935],{"class":309},[37,150078,12507],{"class":54},[37,150080,853],{"class":82},[37,150082,214],{"class":54},[37,150084,150085,150087],{"class":39,"line":1684},[37,150086,30485],{"class":82},[37,150088,150089],{"class":54},"(student)\n",[146,150091,150093],{"id":150092},"_117-封装","11.7 封装",[14,150095,150096],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150098,150099],{},"Python 中以双下划线开头的属性通常视为私有属性。",[27,150101,150103],{"className":29,"code":150102,"language":31,"meta":32,"style":32},"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",[34,150104,150105,150114,150123,150135,150147,150151,150160,150169,150173,150183,150196,150207,150212,150223,150227,150236,150248,150259,150263,150276,150287,150291,150302,150306,150310,150328,150337,150346],{"__ignoreMap":32},[37,150106,150107,150109,150112],{"class":39,"line":40},[37,150108,14766],{"class":50},[37,150110,150111],{"class":2035}," Account",[37,150113,3811],{"class":54},[37,150115,150116,150118,150120],{"class":39,"line":47},[37,150117,30871],{"class":50},[37,150119,30874],{"class":82},[37,150121,150122],{"class":54},"(self, owner, balance):\n",[37,150124,150125,150127,150130,150132],{"class":39,"line":58},[37,150126,30915],{"class":82},[37,150128,150129],{"class":54},".owner ",[37,150131,70],{"class":50},[37,150133,150134],{"class":54}," owner\n",[37,150136,150137,150139,150142,150144],{"class":39,"line":64},[37,150138,30915],{"class":82},[37,150140,150141],{"class":54},".__balance ",[37,150143,70],{"class":50},[37,150145,150146],{"class":54}," balance\n",[37,150148,150149],{"class":39,"line":76},[37,150150,2472],{"emptyLinePlaceholder":131},[37,150152,150153,150155,150158],{"class":39,"line":92},[37,150154,30871],{"class":50},[37,150156,150157],{"class":2035}," get_balance",[37,150159,30877],{"class":54},[37,150161,150162,150164,150166],{"class":39,"line":97},[37,150163,14824],{"class":50},[37,150165,38942],{"class":82},[37,150167,150168],{"class":54},".__balance\n",[37,150170,150171],{"class":39,"line":107},[37,150172,2472],{"emptyLinePlaceholder":131},[37,150174,150175,150177,150180],{"class":39,"line":1390},[37,150176,30871],{"class":50},[37,150178,150179],{"class":2035}," deposit",[37,150181,150182],{"class":54},"(self, money):\n",[37,150184,150185,150187,150190,150192,150194],{"class":39,"line":1402},[37,150186,2569],{"class":50},[37,150188,150189],{"class":54}," money ",[37,150191,1660],{"class":50},[37,150193,4165],{"class":82},[37,150195,3811],{"class":54},[37,150197,150198,150200,150202,150205],{"class":39,"line":1684},[37,150199,34719],{"class":82},[37,150201,208],{"class":54},[37,150203,150204],{"class":309},"\"存款金额必须大于0\"",[37,150206,214],{"class":54},[37,150208,150209],{"class":39,"line":1689},[37,150210,150211],{"class":50},"            return\n",[37,150213,150214,150216,150218,150220],{"class":39,"line":1695},[37,150215,30915],{"class":82},[37,150217,150141],{"class":54},[37,150219,9549],{"class":50},[37,150221,150222],{"class":54}," money\n",[37,150224,150225],{"class":39,"line":1700},[37,150226,2472],{"emptyLinePlaceholder":131},[37,150228,150229,150231,150234],{"class":39,"line":1714},[37,150230,30871],{"class":50},[37,150232,150233],{"class":2035}," withdraw",[37,150235,150182],{"class":54},[37,150237,150238,150240,150242,150244,150246],{"class":39,"line":1719},[37,150239,2569],{"class":50},[37,150241,150189],{"class":54},[37,150243,1660],{"class":50},[37,150245,4165],{"class":82},[37,150247,3811],{"class":54},[37,150249,150250,150252,150254,150257],{"class":39,"line":1725},[37,150251,34719],{"class":82},[37,150253,208],{"class":54},[37,150255,150256],{"class":309},"\"取款金额必须大于0\"",[37,150258,214],{"class":54},[37,150260,150261],{"class":39,"line":1746},[37,150262,150211],{"class":50},[37,150264,150265,150267,150269,150271,150273],{"class":39,"line":1751},[37,150266,2569],{"class":50},[37,150268,150189],{"class":54},[37,150270,1163],{"class":50},[37,150272,38942],{"class":82},[37,150274,150275],{"class":54},".__balance:\n",[37,150277,150278,150280,150282,150285],{"class":39,"line":1765},[37,150279,34719],{"class":82},[37,150281,208],{"class":54},[37,150283,150284],{"class":309},"\"余额不足\"",[37,150286,214],{"class":54},[37,150288,150289],{"class":39,"line":1770},[37,150290,150211],{"class":50},[37,150292,150293,150295,150297,150300],{"class":39,"line":1799},[37,150294,30915],{"class":82},[37,150296,150141],{"class":54},[37,150298,150299],{"class":50},"-=",[37,150301,150222],{"class":54},[37,150303,150304],{"class":39,"line":1804},[37,150305,2472],{"emptyLinePlaceholder":131},[37,150307,150308],{"class":39,"line":1821},[37,150309,2472],{"emptyLinePlaceholder":131},[37,150311,150312,150315,150317,150320,150322,150324,150326],{"class":39,"line":1826},[37,150313,150314],{"class":54},"account ",[37,150316,70],{"class":50},[37,150318,150319],{"class":54}," Account(",[37,150321,149935],{"class":309},[37,150323,12507],{"class":54},[37,150325,6482],{"class":82},[37,150327,214],{"class":54},[37,150329,150330,150333,150335],{"class":39,"line":1831},[37,150331,150332],{"class":54},"account.deposit(",[37,150334,1794],{"class":82},[37,150336,214],{"class":54},[37,150338,150339,150342,150344],{"class":39,"line":1836},[37,150340,150341],{"class":54},"account.withdraw(",[37,150343,516],{"class":82},[37,150345,214],{"class":54},[37,150347,150348,150350],{"class":39,"line":1850},[37,150349,30485],{"class":82},[37,150351,150352],{"class":54},"(account.get_balance())\n",[14,150354,150355],{},"封装的意义是避免外部随意修改内部状态。",[146,150357,150359],{"id":150358},"_118-继承","11.8 继承",[14,150361,150362],{},"继承可以让子类复用父类的属性和方法。",[27,150364,150366],{"className":29,"code":150365,"language":31,"meta":32,"style":32},"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",[34,150367,150368,150377,150386,150397,150401,150405,150419,150428,150439,150443,150447,150457,150462],{"__ignoreMap":32},[37,150369,150370,150372,150375],{"class":39,"line":40},[37,150371,14766],{"class":50},[37,150373,150374],{"class":2035}," Animal",[37,150376,3811],{"class":54},[37,150378,150379,150381,150384],{"class":39,"line":47},[37,150380,30871],{"class":50},[37,150382,150383],{"class":2035}," eat",[37,150385,30877],{"class":54},[37,150387,150388,150390,150392,150395],{"class":39,"line":58},[37,150389,32520],{"class":82},[37,150391,208],{"class":54},[37,150393,150394],{"class":309},"\"吃东西\"",[37,150396,214],{"class":54},[37,150398,150399],{"class":39,"line":64},[37,150400,2472],{"emptyLinePlaceholder":131},[37,150402,150403],{"class":39,"line":76},[37,150404,2472],{"emptyLinePlaceholder":131},[37,150406,150407,150409,150412,150414,150417],{"class":39,"line":92},[37,150408,14766],{"class":50},[37,150410,150411],{"class":2035}," Dog",[37,150413,208],{"class":54},[37,150415,150416],{"class":2035},"Animal",[37,150418,30856],{"class":54},[37,150420,150421,150423,150426],{"class":39,"line":97},[37,150422,30871],{"class":50},[37,150424,150425],{"class":2035}," bark",[37,150427,30877],{"class":54},[37,150429,150430,150432,150434,150437],{"class":39,"line":107},[37,150431,32520],{"class":82},[37,150433,208],{"class":54},[37,150435,150436],{"class":309},"\"汪汪\"",[37,150438,214],{"class":54},[37,150440,150441],{"class":39,"line":1390},[37,150442,2472],{"emptyLinePlaceholder":131},[37,150444,150445],{"class":39,"line":1402},[37,150446,2472],{"emptyLinePlaceholder":131},[37,150448,150449,150452,150454],{"class":39,"line":1684},[37,150450,150451],{"class":54},"dog ",[37,150453,70],{"class":50},[37,150455,150456],{"class":54}," Dog()\n",[37,150458,150459],{"class":39,"line":1689},[37,150460,150461],{"class":54},"dog.eat()\n",[37,150463,150464],{"class":39,"line":1695},[37,150465,150466],{"class":54},"dog.bark()\n",[14,150468,150469],{},"子类可以扩展新方法，也可以重写父类方法。",[146,150471,150473],{"id":150472},"_119-方法重写","11.9 方法重写",[27,150475,150477],{"className":29,"code":150476,"language":31,"meta":32,"style":32},"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",[34,150478,150479,150487,150496,150507,150511,150515,150527,150535,150545,150549,150553,150566,150574,150585,150589,150593,150601,150611,150615,150620],{"__ignoreMap":32},[37,150480,150481,150483,150485],{"class":39,"line":40},[37,150482,14766],{"class":50},[37,150484,150374],{"class":2035},[37,150486,3811],{"class":54},[37,150488,150489,150491,150494],{"class":39,"line":47},[37,150490,30871],{"class":50},[37,150492,150493],{"class":2035}," speak",[37,150495,30877],{"class":54},[37,150497,150498,150500,150502,150505],{"class":39,"line":58},[37,150499,32520],{"class":82},[37,150501,208],{"class":54},[37,150503,150504],{"class":309},"\"动物叫\"",[37,150506,214],{"class":54},[37,150508,150509],{"class":39,"line":64},[37,150510,2472],{"emptyLinePlaceholder":131},[37,150512,150513],{"class":39,"line":76},[37,150514,2472],{"emptyLinePlaceholder":131},[37,150516,150517,150519,150521,150523,150525],{"class":39,"line":92},[37,150518,14766],{"class":50},[37,150520,150411],{"class":2035},[37,150522,208],{"class":54},[37,150524,150416],{"class":2035},[37,150526,30856],{"class":54},[37,150528,150529,150531,150533],{"class":39,"line":97},[37,150530,30871],{"class":50},[37,150532,150493],{"class":2035},[37,150534,30877],{"class":54},[37,150536,150537,150539,150541,150543],{"class":39,"line":107},[37,150538,32520],{"class":82},[37,150540,208],{"class":54},[37,150542,150436],{"class":309},[37,150544,214],{"class":54},[37,150546,150547],{"class":39,"line":1390},[37,150548,2472],{"emptyLinePlaceholder":131},[37,150550,150551],{"class":39,"line":1402},[37,150552,2472],{"emptyLinePlaceholder":131},[37,150554,150555,150557,150560,150562,150564],{"class":39,"line":1684},[37,150556,14766],{"class":50},[37,150558,150559],{"class":2035}," Cat",[37,150561,208],{"class":54},[37,150563,150416],{"class":2035},[37,150565,30856],{"class":54},[37,150567,150568,150570,150572],{"class":39,"line":1689},[37,150569,30871],{"class":50},[37,150571,150493],{"class":2035},[37,150573,30877],{"class":54},[37,150575,150576,150578,150580,150583],{"class":39,"line":1695},[37,150577,32520],{"class":82},[37,150579,208],{"class":54},[37,150581,150582],{"class":309},"\"喵喵\"",[37,150584,214],{"class":54},[37,150586,150587],{"class":39,"line":1700},[37,150588,2472],{"emptyLinePlaceholder":131},[37,150590,150591],{"class":39,"line":1714},[37,150592,2472],{"emptyLinePlaceholder":131},[37,150594,150595,150597,150599],{"class":39,"line":1719},[37,150596,150451],{"class":54},[37,150598,70],{"class":50},[37,150600,150456],{"class":54},[37,150602,150603,150606,150608],{"class":39,"line":1725},[37,150604,150605],{"class":54},"cat ",[37,150607,70],{"class":50},[37,150609,150610],{"class":54}," Cat()\n",[37,150612,150613],{"class":39,"line":1746},[37,150614,2472],{"emptyLinePlaceholder":131},[37,150616,150617],{"class":39,"line":1751},[37,150618,150619],{"class":54},"dog.speak()\n",[37,150621,150622],{"class":39,"line":1765},[37,150623,150624],{"class":54},"cat.speak()\n",[146,150626,150628],{"id":150627},"_1110-super","11.10 super",[14,150630,150631,150632,150635],{},"子类可以通过 ",[34,150633,150634],{},"super()"," 调用父类方法。",[27,150637,150639],{"className":29,"code":150638,"language":31,"meta":32,"style":32},"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",[34,150640,150641,150649,150658,150668,150672,150676,150688,150697,150708,150718,150722,150726,150742],{"__ignoreMap":32},[37,150642,150643,150645,150647],{"class":39,"line":40},[37,150644,14766],{"class":50},[37,150646,15641],{"class":2035},[37,150648,3811],{"class":54},[37,150650,150651,150653,150655],{"class":39,"line":47},[37,150652,30871],{"class":50},[37,150654,30874],{"class":82},[37,150656,150657],{"class":54},"(self, name):\n",[37,150659,150660,150662,150664,150666],{"class":39,"line":58},[37,150661,30915],{"class":82},[37,150663,149837],{"class":54},[37,150665,70],{"class":50},[37,150667,149842],{"class":54},[37,150669,150670],{"class":39,"line":64},[37,150671,2472],{"emptyLinePlaceholder":131},[37,150673,150674],{"class":39,"line":76},[37,150675,2472],{"emptyLinePlaceholder":131},[37,150677,150678,150680,150682,150684,150686],{"class":39,"line":92},[37,150679,14766],{"class":50},[37,150681,7970],{"class":2035},[37,150683,208],{"class":54},[37,150685,19118],{"class":2035},[37,150687,30856],{"class":54},[37,150689,150690,150692,150694],{"class":39,"line":97},[37,150691,30871],{"class":50},[37,150693,30874],{"class":82},[37,150695,150696],{"class":54},"(self, name, score):\n",[37,150698,150699,150701,150703,150705],{"class":39,"line":107},[37,150700,30887],{"class":82},[37,150702,17333],{"class":54},[37,150704,30899],{"class":82},[37,150706,150707],{"class":54},"(name)\n",[37,150709,150710,150712,150714,150716],{"class":39,"line":1390},[37,150711,30915],{"class":82},[37,150713,149861],{"class":54},[37,150715,70],{"class":50},[37,150717,1651],{"class":54},[37,150719,150720],{"class":39,"line":1402},[37,150721,2472],{"emptyLinePlaceholder":131},[37,150723,150724],{"class":39,"line":1684},[37,150725,2472],{"emptyLinePlaceholder":131},[37,150727,150728,150730,150732,150734,150736,150738,150740],{"class":39,"line":1689},[37,150729,149528],{"class":54},[37,150731,70],{"class":50},[37,150733,149932],{"class":54},[37,150735,149935],{"class":309},[37,150737,12507],{"class":54},[37,150739,1192],{"class":82},[37,150741,214],{"class":54},[37,150743,150744,150746],{"class":39,"line":1695},[37,150745,30485],{"class":82},[37,150747,150748],{"class":54},"(student.name, student.score)\n",[146,150750,150752],{"id":150751},"_1111-多态","11.11 多态",[14,150754,150755],{},"多态指不同对象响应同一个方法，表现出不同结果。",[27,150757,150759],{"className":29,"code":150758,"language":31,"meta":32,"style":32},"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",[34,150760,150761,150769,150777,150787,150791,150795,150803,150811,150821,150825,150829,150839,150844,150848,150852,150857],{"__ignoreMap":32},[37,150762,150763,150765,150767],{"class":39,"line":40},[37,150764,14766],{"class":50},[37,150766,150411],{"class":2035},[37,150768,3811],{"class":54},[37,150770,150771,150773,150775],{"class":39,"line":47},[37,150772,30871],{"class":50},[37,150774,150493],{"class":2035},[37,150776,30877],{"class":54},[37,150778,150779,150781,150783,150785],{"class":39,"line":58},[37,150780,32520],{"class":82},[37,150782,208],{"class":54},[37,150784,150436],{"class":309},[37,150786,214],{"class":54},[37,150788,150789],{"class":39,"line":64},[37,150790,2472],{"emptyLinePlaceholder":131},[37,150792,150793],{"class":39,"line":76},[37,150794,2472],{"emptyLinePlaceholder":131},[37,150796,150797,150799,150801],{"class":39,"line":92},[37,150798,14766],{"class":50},[37,150800,150559],{"class":2035},[37,150802,3811],{"class":54},[37,150804,150805,150807,150809],{"class":39,"line":97},[37,150806,30871],{"class":50},[37,150808,150493],{"class":2035},[37,150810,30877],{"class":54},[37,150812,150813,150815,150817,150819],{"class":39,"line":107},[37,150814,32520],{"class":82},[37,150816,208],{"class":54},[37,150818,150582],{"class":309},[37,150820,214],{"class":54},[37,150822,150823],{"class":39,"line":1390},[37,150824,2472],{"emptyLinePlaceholder":131},[37,150826,150827],{"class":39,"line":1402},[37,150828,2472],{"emptyLinePlaceholder":131},[37,150830,150831,150833,150836],{"class":39,"line":1684},[37,150832,32017],{"class":50},[37,150834,150835],{"class":2035}," make_sound",[37,150837,150838],{"class":54},"(animal):\n",[37,150840,150841],{"class":39,"line":1689},[37,150842,150843],{"class":54},"    animal.speak()\n",[37,150845,150846],{"class":39,"line":1695},[37,150847,2472],{"emptyLinePlaceholder":131},[37,150849,150850],{"class":39,"line":1700},[37,150851,2472],{"emptyLinePlaceholder":131},[37,150853,150854],{"class":39,"line":1714},[37,150855,150856],{"class":54},"make_sound(Dog())\n",[37,150858,150859],{"class":39,"line":1719},[37,150860,150861],{"class":54},"make_sound(Cat())\n",[14,150863,150864],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[146,150866,150868],{"id":150867},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,150870,150871],{},"实例属性属于对象：",[27,150873,150875],{"className":29,"code":150874,"language":31,"meta":32,"style":32},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[34,150876,150877,150885,150893],{"__ignoreMap":32},[37,150878,150879,150881,150883],{"class":39,"line":40},[37,150880,14766],{"class":50},[37,150882,7970],{"class":2035},[37,150884,3811],{"class":54},[37,150886,150887,150889,150891],{"class":39,"line":47},[37,150888,30871],{"class":50},[37,150890,30874],{"class":82},[37,150892,150657],{"class":54},[37,150894,150895,150897,150899,150901],{"class":39,"line":58},[37,150896,30915],{"class":82},[37,150898,149837],{"class":54},[37,150900,70],{"class":50},[37,150902,149842],{"class":54},[14,150904,150905],{},"类属性属于类，所有对象共享：",[27,150907,150909],{"className":29,"code":150908,"language":31,"meta":32,"style":32},"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",[34,150910,150911,150919,150929,150933,150941,150951,150955,150959,150972,150986,150990,150997,151004],{"__ignoreMap":32},[37,150912,150913,150915,150917],{"class":39,"line":40},[37,150914,14766],{"class":50},[37,150916,7970],{"class":2035},[37,150918,3811],{"class":54},[37,150920,150921,150924,150926],{"class":39,"line":47},[37,150922,150923],{"class":54},"    school ",[37,150925,70],{"class":50},[37,150927,150928],{"class":309}," \"黑马学校\"\n",[37,150930,150931],{"class":39,"line":58},[37,150932,2472],{"emptyLinePlaceholder":131},[37,150934,150935,150937,150939],{"class":39,"line":64},[37,150936,30871],{"class":50},[37,150938,30874],{"class":82},[37,150940,150657],{"class":54},[37,150942,150943,150945,150947,150949],{"class":39,"line":76},[37,150944,30915],{"class":82},[37,150946,149837],{"class":54},[37,150948,70],{"class":50},[37,150950,149842],{"class":54},[37,150952,150953],{"class":39,"line":92},[37,150954,2472],{"emptyLinePlaceholder":131},[37,150956,150957],{"class":39,"line":97},[37,150958,2472],{"emptyLinePlaceholder":131},[37,150960,150961,150964,150966,150968,150970],{"class":39,"line":107},[37,150962,150963],{"class":54},"s1 ",[37,150965,70],{"class":50},[37,150967,149932],{"class":54},[37,150969,149935],{"class":309},[37,150971,214],{"class":54},[37,150973,150974,150977,150979,150981,150984],{"class":39,"line":1390},[37,150975,150976],{"class":54},"s2 ",[37,150978,70],{"class":50},[37,150980,149932],{"class":54},[37,150982,150983],{"class":309},"\"小红\"",[37,150985,214],{"class":54},[37,150987,150988],{"class":39,"line":1402},[37,150989,2472],{"emptyLinePlaceholder":131},[37,150991,150992,150994],{"class":39,"line":1684},[37,150993,30485],{"class":82},[37,150995,150996],{"class":54},"(s1.school)\n",[37,150998,150999,151001],{"class":39,"line":1689},[37,151000,30485],{"class":82},[37,151002,151003],{"class":54},"(s2.school)\n",[37,151005,151006,151008],{"class":39,"line":1695},[37,151007,30485],{"class":82},[37,151009,151010],{"class":54},"(Student.school)\n",[14,151012,151013],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[146,151015,151017],{"id":151016},"_1113-类方法和静态方法","11.13 类方法和静态方法",[175,151019,151021],{"id":151020},"_11131-类方法","11.13.1 类方法",[14,151023,151024,151025,151028,151029,28458],{},"类方法使用 ",[34,151026,151027],{},"@classmethod","，第一个参数通常是 ",[34,151030,151031],{},"cls",[27,151033,151035],{"className":29,"code":151034,"language":31,"meta":32,"style":32},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[34,151036,151037,151045,151053,151057,151065,151075,151085,151089,151093],{"__ignoreMap":32},[37,151038,151039,151041,151043],{"class":39,"line":40},[37,151040,14766],{"class":50},[37,151042,7970],{"class":2035},[37,151044,3811],{"class":54},[37,151046,151047,151049,151051],{"class":39,"line":47},[37,151048,150923],{"class":54},[37,151050,70],{"class":50},[37,151052,150928],{"class":309},[37,151054,151055],{"class":39,"line":58},[37,151056,2472],{"emptyLinePlaceholder":131},[37,151058,151059,151062],{"class":39,"line":64},[37,151060,151061],{"class":2035},"    @",[37,151063,151064],{"class":82},"classmethod\n",[37,151066,151067,151069,151072],{"class":39,"line":76},[37,151068,30871],{"class":50},[37,151070,151071],{"class":2035}," get_school",[37,151073,151074],{"class":54},"(cls):\n",[37,151076,151077,151079,151082],{"class":39,"line":92},[37,151078,14824],{"class":50},[37,151080,151081],{"class":82}," cls",[37,151083,151084],{"class":54},".school\n",[37,151086,151087],{"class":39,"line":97},[37,151088,2472],{"emptyLinePlaceholder":131},[37,151090,151091],{"class":39,"line":107},[37,151092,2472],{"emptyLinePlaceholder":131},[37,151094,151095,151097],{"class":39,"line":1390},[37,151096,30485],{"class":82},[37,151098,151099],{"class":54},"(Student.get_school())\n",[175,151101,151103],{"id":151102},"_11132-静态方法","11.13.2 静态方法",[14,151105,151106,151107,151110],{},"静态方法使用 ",[34,151108,151109],{},"@staticmethod","，不需要访问实例和类。",[27,151112,151114],{"className":29,"code":151113,"language":31,"meta":32,"style":32},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[34,151115,151116,151125,151132,151141,151152,151156,151160],{"__ignoreMap":32},[37,151117,151118,151120,151123],{"class":39,"line":40},[37,151119,14766],{"class":50},[37,151121,151122],{"class":2035}," MathUtils",[37,151124,3811],{"class":54},[37,151126,151127,151129],{"class":39,"line":47},[37,151128,151061],{"class":2035},[37,151130,151131],{"class":82},"staticmethod\n",[37,151133,151134,151136,151138],{"class":39,"line":58},[37,151135,30871],{"class":50},[37,151137,5281],{"class":2035},[37,151139,151140],{"class":54},"(a, b):\n",[37,151142,151143,151145,151147,151149],{"class":39,"line":64},[37,151144,14824],{"class":50},[37,151146,10941],{"class":54},[37,151148,685],{"class":50},[37,151150,151151],{"class":54}," b\n",[37,151153,151154],{"class":39,"line":76},[37,151155,2472],{"emptyLinePlaceholder":131},[37,151157,151158],{"class":39,"line":92},[37,151159,2472],{"emptyLinePlaceholder":131},[37,151161,151162,151164,151167,151169,151171,151173],{"class":39,"line":97},[37,151163,30485],{"class":82},[37,151165,151166],{"class":54},"(MathUtils.add(",[37,151168,422],{"class":82},[37,151170,12507],{"class":54},[37,151172,282],{"class":82},[37,151174,30567],{"class":54},[14,151176,151177],{},"静态方法本质上是放在类命名空间里的普通函数。",[146,151179,151181],{"id":151180},"_1114-dataclass","11.14 dataclass",[14,151183,151184,151187],{},[34,151185,151186],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[27,151189,151191],{"className":29,"code":151190,"language":31,"meta":32,"style":32},"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",[34,151192,151193,151205,151209,151213,151218,151226,151234,151242,151250,151254,151258,151278],{"__ignoreMap":32},[37,151194,151195,151197,151200,151202],{"class":39,"line":40},[37,151196,30807],{"class":50},[37,151198,151199],{"class":54}," dataclasses ",[37,151201,51],{"class":50},[37,151203,151204],{"class":54}," dataclass\n",[37,151206,151207],{"class":39,"line":47},[37,151208,2472],{"emptyLinePlaceholder":131},[37,151210,151211],{"class":39,"line":58},[37,151212,2472],{"emptyLinePlaceholder":131},[37,151214,151215],{"class":39,"line":64},[37,151216,151217],{"class":2035},"@dataclass\n",[37,151219,151220,151222,151224],{"class":39,"line":76},[37,151221,14766],{"class":50},[37,151223,7970],{"class":2035},[37,151225,3811],{"class":54},[37,151227,151228,151231],{"class":39,"line":92},[37,151229,151230],{"class":54},"    name: ",[37,151232,151233],{"class":82},"str\n",[37,151235,151236,151239],{"class":39,"line":97},[37,151237,151238],{"class":54},"    age: ",[37,151240,151241],{"class":82},"int\n",[37,151243,151244,151247],{"class":39,"line":107},[37,151245,151246],{"class":54},"    score: ",[37,151248,151249],{"class":82},"float\n",[37,151251,151252],{"class":39,"line":1390},[37,151253,2472],{"emptyLinePlaceholder":131},[37,151255,151256],{"class":39,"line":1402},[37,151257,2472],{"emptyLinePlaceholder":131},[37,151259,151260,151262,151264,151266,151268,151270,151272,151274,151276],{"class":39,"line":1684},[37,151261,149528],{"class":54},[37,151263,70],{"class":50},[37,151265,149932],{"class":54},[37,151267,149935],{"class":309},[37,151269,12507],{"class":54},[37,151271,853],{"class":82},[37,151273,12507],{"class":54},[37,151275,1192],{"class":82},[37,151277,214],{"class":54},[37,151279,151280,151282],{"class":39,"line":1689},[37,151281,30485],{"class":82},[37,151283,150089],{"class":54},[14,151285,151286,151287,417,151289,151292],{},"它会自动生成 ",[34,151288,30899],{},[34,151290,151291],{},"__repr__"," 等方法。适合数据模型类。",[146,151294,151296],{"id":151295},"_1115-小案例学生类","11.15 小案例：学生类",[27,151298,151300],{"className":29,"code":151299,"language":31,"meta":32,"style":32},"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",[34,151301,151302,151310,151319,151331,151341,151351,151361,151365,151374,151387,151391,151400,151406,151418,151430,151442,151454,151458,151462,151468,151478,151487,151497,151505,151513,151522,151526,151530,151538,151574,151578,151582,151607,151614],{"__ignoreMap":32},[37,151303,151304,151306,151308],{"class":39,"line":40},[37,151305,14766],{"class":50},[37,151307,7970],{"class":2035},[37,151309,3811],{"class":54},[37,151311,151312,151314,151316],{"class":39,"line":47},[37,151313,30871],{"class":50},[37,151315,30874],{"class":82},[37,151317,151318],{"class":54},"(self, student_id, name, age, score):\n",[37,151320,151321,151323,151326,151328],{"class":39,"line":58},[37,151322,30915],{"class":82},[37,151324,151325],{"class":54},".student_id ",[37,151327,70],{"class":50},[37,151329,151330],{"class":54}," student_id\n",[37,151332,151333,151335,151337,151339],{"class":39,"line":64},[37,151334,30915],{"class":82},[37,151336,149837],{"class":54},[37,151338,70],{"class":50},[37,151340,149842],{"class":54},[37,151342,151343,151345,151347,151349],{"class":39,"line":76},[37,151344,30915],{"class":82},[37,151346,149849],{"class":54},[37,151348,70],{"class":50},[37,151350,149854],{"class":54},[37,151352,151353,151355,151357,151359],{"class":39,"line":92},[37,151354,30915],{"class":82},[37,151356,149861],{"class":54},[37,151358,70],{"class":50},[37,151360,1651],{"class":54},[37,151362,151363],{"class":39,"line":97},[37,151364,2472],{"emptyLinePlaceholder":131},[37,151366,151367,151369,151372],{"class":39,"line":107},[37,151368,30871],{"class":50},[37,151370,151371],{"class":2035}," is_passed",[37,151373,30877],{"class":54},[37,151375,151376,151378,151380,151382,151384],{"class":39,"line":1390},[37,151377,14824],{"class":50},[37,151379,38942],{"class":82},[37,151381,149861],{"class":54},[37,151383,1782],{"class":50},[37,151385,151386],{"class":82}," 60\n",[37,151388,151389],{"class":39,"line":1402},[37,151390,2472],{"emptyLinePlaceholder":131},[37,151392,151393,151395,151398],{"class":39,"line":1684},[37,151394,30871],{"class":50},[37,151396,151397],{"class":2035}," to_dict",[37,151399,30877],{"class":54},[37,151401,151402,151404],{"class":39,"line":1689},[37,151403,14824],{"class":50},[37,151405,15644],{"class":54},[37,151407,151408,151411,151413,151415],{"class":39,"line":1695},[37,151409,151410],{"class":309},"            \"student_id\"",[37,151412,51505],{"class":54},[37,151414,30893],{"class":82},[37,151416,151417],{"class":54},".student_id,\n",[37,151419,151420,151423,151425,151427],{"class":39,"line":1700},[37,151421,151422],{"class":309},"            \"name\"",[37,151424,51505],{"class":54},[37,151426,30893],{"class":82},[37,151428,151429],{"class":54},".name,\n",[37,151431,151432,151435,151437,151439],{"class":39,"line":1714},[37,151433,151434],{"class":309},"            \"age\"",[37,151436,51505],{"class":54},[37,151438,30893],{"class":82},[37,151440,151441],{"class":54},".age,\n",[37,151443,151444,151447,151449,151451],{"class":39,"line":1719},[37,151445,151446],{"class":309},"            \"score\"",[37,151448,51505],{"class":54},[37,151450,30893],{"class":82},[37,151452,151453],{"class":54},".score,\n",[37,151455,151456],{"class":39,"line":1725},[37,151457,2601],{"class":54},[37,151459,151460],{"class":39,"line":1746},[37,151461,2472],{"emptyLinePlaceholder":131},[37,151463,151464,151466],{"class":39,"line":1751},[37,151465,151061],{"class":2035},[37,151467,151064],{"class":82},[37,151469,151470,151472,151475],{"class":39,"line":1765},[37,151471,30871],{"class":50},[37,151473,151474],{"class":2035}," from_dict",[37,151476,151477],{"class":54},"(cls, data):\n",[37,151479,151480,151482,151484],{"class":39,"line":1770},[37,151481,14824],{"class":50},[37,151483,151081],{"class":82},[37,151485,151486],{"class":54},"(\n",[37,151488,151489,151492,151495],{"class":39,"line":1799},[37,151490,151491],{"class":54},"            data[",[37,151493,151494],{"class":309},"\"student_id\"",[37,151496,87904],{"class":54},[37,151498,151499,151501,151503],{"class":39,"line":1804},[37,151500,151491],{"class":54},[37,151502,62747],{"class":309},[37,151504,87904],{"class":54},[37,151506,151507,151509,151511],{"class":39,"line":1821},[37,151508,151491],{"class":54},[37,151510,69192],{"class":309},[37,151512,87904],{"class":54},[37,151514,151515,151517,151520],{"class":39,"line":1826},[37,151516,151491],{"class":54},[37,151518,151519],{"class":309},"\"score\"",[37,151521,87904],{"class":54},[37,151523,151524],{"class":39,"line":1831},[37,151525,38195],{"class":54},[37,151527,151528],{"class":39,"line":1836},[37,151529,2472],{"emptyLinePlaceholder":131},[37,151531,151532,151534,151536],{"class":39,"line":1850},[37,151533,30871],{"class":50},[37,151535,150028],{"class":82},[37,151537,30877],{"class":54},[37,151539,151540,151542,151544,151546,151548,151551,151553,151556,151558,151560,151562,151564,151566,151568,151570,151572],{"class":39,"line":1855},[37,151541,14824],{"class":50},[37,151543,150037],{"class":50},[37,151545,456],{"class":309},[37,151547,149499],{"class":82},[37,151549,151550],{"class":54},".student_id",[37,151552,1149],{"class":82},[37,151554,151555],{"class":82}," {self",[37,151557,80369],{"class":54},[37,151559,1149],{"class":82},[37,151561,151555],{"class":82},[37,151563,80381],{"class":54},[37,151565,1149],{"class":82},[37,151567,151555],{"class":82},[37,151569,149909],{"class":54},[37,151571,1149],{"class":82},[37,151573,25206],{"class":309},[37,151575,151576],{"class":39,"line":2649},[37,151577,2472],{"emptyLinePlaceholder":131},[37,151579,151580],{"class":39,"line":2663},[37,151581,2472],{"emptyLinePlaceholder":131},[37,151583,151584,151586,151588,151590,151593,151595,151597,151599,151601,151603,151605],{"class":39,"line":2671},[37,151585,149528],{"class":54},[37,151587,70],{"class":50},[37,151589,149932],{"class":54},[37,151591,151592],{"class":309},"\"001\"",[37,151594,12507],{"class":54},[37,151596,149935],{"class":309},[37,151598,12507],{"class":54},[37,151600,853],{"class":82},[37,151602,12507],{"class":54},[37,151604,1192],{"class":82},[37,151606,214],{"class":54},[37,151608,151609,151611],{"class":39,"line":2676},[37,151610,30485],{"class":82},[37,151612,151613],{"class":54},"(student.is_passed())\n",[37,151615,151616,151618],{"class":39,"line":2682},[37,151617,30485],{"class":82},[37,151619,151620],{"class":54},"(student.to_dict())\n",[14,151622,151623,101065,151626,151629],{},[34,151624,151625],{},"to_dict()",[34,151627,151628],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[146,151631,151633],{"id":151632},"_1116-易错点","11.16 易错点",[158,151635,151636,151642,151648,151653,151656,151659],{},[161,151637,151638,151639,28458],{},"类名推荐使用大驼峰，如 ",[34,151640,151641],{},"StudentManager",[161,151643,151644,151645,151647],{},"方法第一个参数必须写 ",[34,151646,30893],{},"，调用时不用传。",[161,151649,151650,151652],{},[34,151651,30899],{}," 不是普通方法，它在创建对象时自动执行。",[161,151654,151655],{},"私有属性不是绝对安全，只是约定和名称改写。",[161,151657,151658],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[161,151660,151661],{},"类中方法太多时，说明职责可能过重。",[146,151663,151665],{"id":151664},"_1117-本章练习","11.17 本章练习",[158,151667,151668,151674,151680,151685,151698],{},[161,151669,151670,151671,151673],{},"定义 ",[34,151672,149615],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[161,151675,151670,151676,151679],{},[34,151677,151678],{},"Account"," 类，实现存款、取款、查询余额。",[161,151681,151670,151682,151684],{},[34,151683,17298],{}," 类，计算圆的周长和面积。",[161,151686,151670,151687,417,151690,151693,151694,151697],{},[34,151688,151689],{},"Dog",[34,151691,151692],{},"Cat"," 类，并用同一个函数调用它们的 ",[34,151695,151696],{},"speak()"," 方法。",[161,151699,104413,151700,151702,151703,28458],{},[34,151701,151186],{}," 定义一个商品类 ",[34,151704,151705],{},"Product",[123,151707,151708],{},"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":32,"searchDepth":47,"depth":47,"links":151710},[151711,151712,151713,151714,151715,151716,151718,151719,151720,151721,151722,151723,151724,151728,151729,151730,151731],{"id":149379,"depth":47,"text":149380},{"id":149562,"depth":47,"text":149563},{"id":149626,"depth":47,"text":149627},{"id":149703,"depth":47,"text":149704},{"id":149802,"depth":47,"text":149803},{"id":149966,"depth":47,"text":151717},"11.6 str",{"id":150092,"depth":47,"text":150093},{"id":150358,"depth":47,"text":150359},{"id":150472,"depth":47,"text":150473},{"id":150627,"depth":47,"text":150628},{"id":150751,"depth":47,"text":150752},{"id":150867,"depth":47,"text":150868},{"id":151016,"depth":47,"text":151017,"children":151725},[151726,151727],{"id":151020,"depth":58,"text":151021},{"id":151102,"depth":58,"text":151103},{"id":151180,"depth":47,"text":151181},{"id":151295,"depth":47,"text":151296},{"id":151632,"depth":47,"text":151633},{"id":151664,"depth":47,"text":151665},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149371,"description":128},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151738,"title":151739,"body":151740,"description":128,"extension":129,"meta":155053,"navigation":131,"path":155054,"seo":155055,"stem":155056,"__hash__":155057},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151741,"toc":155029},[151742,151745,151749,151752,151755,151784,151787,151795,151799,151803,151806,151829,151832,151838,151842,153288,153291,153312,153316,153319,153331,153334,153518,153521,153647,153650,153654,153658,153794,153798,153884,153888,153970,153974,154011,154015,154204,154208,154211,154441,154445,154448,154629,154632,154636,154639,154645,154648,154674,154678,154681,154695,154698,154723,154726,154740,154743,154760,154763,154780,154783,154800,154804,154830,154834,154857,154861,154864,154866,154872,154874,154895,154898,154904,154910,154914,154917,154993,154996,155000,155026],[10,151743,151739],{"id":151744},"_12-综合案例与复习路线",[146,151746,151748],{"id":151747},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,151750,151751],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,151753,151754],{},"一个合格的入门综合项目最好覆盖：",[158,151756,151757,151760,151763,151766,151769,151772,151775,151778,151781],{},[161,151758,151759],{},"输入输出。",[161,151761,151762],{},"判断和循环。",[161,151764,151765],{},"函数拆分。",[161,151767,151768],{},"列表、字典等容器。",[161,151770,151771],{},"文件持久化。",[161,151773,151774],{},"异常处理。",[161,151776,151777],{},"模块拆分。",[161,151779,151780],{},"可选：面向对象。",[161,151782,151783],{},"可选：数据可视化。",[14,151785,151786],{},"本章整理两个方向：",[158,151788,151789,151792],{},[161,151790,151791],{},"学生管理系统。",[161,151793,151794],{},"销售数据统计和可视化。",[146,151796,151798],{"id":151797},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[175,151800,151802],{"id":151801},"_1221-需求","12.2.1 需求",[14,151804,151805],{},"实现一个命令行学生管理系统：",[158,151807,151808,151811,151814,151817,151820,151823,151826],{},[161,151809,151810],{},"添加学生。",[161,151812,151813],{},"删除学生。",[161,151815,151816],{},"修改学生。",[161,151818,151819],{},"查询学生。",[161,151821,151822],{},"显示所有学生。",[161,151824,151825],{},"保存到 JSON 文件。",[161,151827,151828],{},"程序启动时自动读取 JSON 文件。",[14,151830,151831],{},"学生字段：",[27,151833,151836],{"className":151834,"code":151835,"language":5259,"meta":32},[5257],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[34,151837,151835],{"__ignoreMap":32},[146,151839,151841],{"id":151840},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[27,151843,151845],{"className":29,"code":151844,"language":31,"meta":32,"style":32},"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",[34,151846,151847,151853,151863,151867,151881,151885,151889,151898,151910,151916,151920,151926,151957,151967,151974,151985,151991,151995,151999,152009,152040,152066,152070,152074,152083,152094,152105,152116,152127,152138,152149,152160,152164,152168,152178,152190,152206,152213,152220,152224,152228,152238,152246,152253,152266,152276,152287,152291,152295,152304,152312,152318,152330,152338,152349,152353,152357,152366,152382,152386,152393,152404,152409,152413,152429,152444,152459,152463,152468,152476,152484,152492,152500,152504,152509,152520,152524,152528,152537,152552,152562,152566,152578,152589,152593,152597,152602,152606,152617,152621,152625,152634,152649,152657,152661,152673,152683,152687,152691,152706,152719,152732,152736,152749,152761,152773,152777,152781,152792,152796,152800,152809,152824,152832,152836,152848,152858,152862,152866,152871,152875,152879,152889,152895,152917,152936,152955,152974,152979,152983,152987,152996,153004,153015,153019,153023,153049,153059,153064,153068,153072,153080,153090,153094,153102,153107,153123,153127,153141,153146,153160,153165,153178,153183,153196,153201,153214,153219,153232,153243,153247,153253,153264,153268,153272,153284],{"__ignoreMap":32},[37,151848,151849,151851],{"class":39,"line":40},[37,151850,51],{"class":50},[37,151852,147138],{"class":54},[37,151854,151855,151857,151859,151861],{"class":39,"line":47},[37,151856,30807],{"class":50},[37,151858,108358],{"class":54},[37,151860,51],{"class":50},[37,151862,108363],{"class":54},[37,151864,151865],{"class":39,"line":58},[37,151866,2472],{"emptyLinePlaceholder":131},[37,151868,151869,151872,151874,151876,151879],{"class":39,"line":64},[37,151870,151871],{"class":82},"DATA_FILE",[37,151873,13636],{"class":50},[37,151875,108592],{"class":54},[37,151877,151878],{"class":309},"\"students.json\"",[37,151880,214],{"class":54},[37,151882,151883],{"class":39,"line":76},[37,151884,2472],{"emptyLinePlaceholder":131},[37,151886,151887],{"class":39,"line":92},[37,151888,2472],{"emptyLinePlaceholder":131},[37,151890,151891,151893,151896],{"class":39,"line":97},[37,151892,32017],{"class":50},[37,151894,151895],{"class":2035}," load_students",[37,151897,32023],{"class":54},[37,151899,151900,151902,151904,151907],{"class":39,"line":107},[37,151901,3173],{"class":50},[37,151903,38999],{"class":50},[37,151905,151906],{"class":82}," DATA_FILE",[37,151908,151909],{"class":54},".exists():\n",[37,151911,151912,151914],{"class":39,"line":1390},[37,151913,14824],{"class":50},[37,151915,51906],{"class":54},[37,151917,151918],{"class":39,"line":1402},[37,151919,2472],{"emptyLinePlaceholder":131},[37,151921,151922,151924],{"class":39,"line":1684},[37,151923,125831],{"class":50},[37,151925,3811],{"class":54},[37,151927,151928,151931,151933,151935,151937,151939,151941,151943,151945,151947,151949,151951,151953,151955],{"class":39,"line":1689},[37,151929,151930],{"class":50},"        with",[37,151932,146838],{"class":82},[37,151934,208],{"class":54},[37,151936,151871],{"class":82},[37,151938,12507],{"class":54},[37,151940,146848],{"class":309},[37,151942,12507],{"class":54},[37,151944,146853],{"class":5288},[37,151946,70],{"class":50},[37,151948,146858],{"class":309},[37,151950,13786],{"class":54},[37,151952,31453],{"class":50},[37,151954,148200],{"class":5288},[37,151956,3811],{"class":54},[37,151958,151959,151961,151963,151965],{"class":39,"line":1695},[37,151960,15804],{"class":50},[37,151962,148211],{"class":54},[37,151964,45423],{"class":5288},[37,151966,214],{"class":54},[37,151968,151969,151971],{"class":39,"line":1700},[37,151970,125859],{"class":50},[37,151972,151973],{"class":54}," json.JSONDecodeError:\n",[37,151975,151976,151978,151980,151983],{"class":39,"line":1714},[37,151977,32520],{"class":82},[37,151979,208],{"class":54},[37,151981,151982],{"class":309},"\"数据文件格式错误，已使用空数据启动\"",[37,151984,214],{"class":54},[37,151986,151987,151989],{"class":39,"line":1719},[37,151988,14824],{"class":50},[37,151990,51906],{"class":54},[37,151992,151993],{"class":39,"line":1725},[37,151994,2472],{"emptyLinePlaceholder":131},[37,151996,151997],{"class":39,"line":1746},[37,151998,2472],{"emptyLinePlaceholder":131},[37,152000,152001,152003,152006],{"class":39,"line":1751},[37,152002,32017],{"class":50},[37,152004,152005],{"class":2035}," save_students",[37,152007,152008],{"class":54},"(students):\n",[37,152010,152011,152013,152015,152017,152019,152021,152024,152026,152028,152030,152032,152034,152036,152038],{"class":39,"line":1765},[37,152012,34247],{"class":50},[37,152014,146838],{"class":82},[37,152016,208],{"class":54},[37,152018,151871],{"class":82},[37,152020,12507],{"class":54},[37,152022,152023],{"class":309},"\"w\"",[37,152025,12507],{"class":54},[37,152027,146853],{"class":5288},[37,152029,70],{"class":50},[37,152031,146858],{"class":309},[37,152033,13786],{"class":54},[37,152035,31453],{"class":50},[37,152037,148200],{"class":5288},[37,152039,3811],{"class":54},[37,152041,152042,152045,152047,152049,152051,152053,152055,152057,152060,152062,152064],{"class":39,"line":1770},[37,152043,152044],{"class":54},"        json.dump(students, ",[37,152046,45423],{"class":5288},[37,152048,12507],{"class":54},[37,152050,147184],{"class":5288},[37,152052,70],{"class":50},[37,152054,34056],{"class":82},[37,152056,12507],{"class":54},[37,152058,152059],{"class":5288},"indent",[37,152061,70],{"class":50},[37,152063,282],{"class":82},[37,152065,214],{"class":54},[37,152067,152068],{"class":39,"line":1799},[37,152069,2472],{"emptyLinePlaceholder":131},[37,152071,152072],{"class":39,"line":1804},[37,152073,2472],{"emptyLinePlaceholder":131},[37,152075,152076,152078,152081],{"class":39,"line":1821},[37,152077,32017],{"class":50},[37,152079,152080],{"class":2035}," show_menu",[37,152082,32023],{"class":54},[37,152084,152085,152087,152089,152092],{"class":39,"line":1826},[37,152086,31369],{"class":82},[37,152088,208],{"class":54},[37,152090,152091],{"class":309},"\"====== 学生管理系统 ======\"",[37,152093,214],{"class":54},[37,152095,152096,152098,152100,152103],{"class":39,"line":1831},[37,152097,31369],{"class":82},[37,152099,208],{"class":54},[37,152101,152102],{"class":309},"\"1. 添加学生\"",[37,152104,214],{"class":54},[37,152106,152107,152109,152111,152114],{"class":39,"line":1836},[37,152108,31369],{"class":82},[37,152110,208],{"class":54},[37,152112,152113],{"class":309},"\"2. 删除学生\"",[37,152115,214],{"class":54},[37,152117,152118,152120,152122,152125],{"class":39,"line":1850},[37,152119,31369],{"class":82},[37,152121,208],{"class":54},[37,152123,152124],{"class":309},"\"3. 修改学生\"",[37,152126,214],{"class":54},[37,152128,152129,152131,152133,152136],{"class":39,"line":1855},[37,152130,31369],{"class":82},[37,152132,208],{"class":54},[37,152134,152135],{"class":309},"\"4. 查询学生\"",[37,152137,214],{"class":54},[37,152139,152140,152142,152144,152147],{"class":39,"line":2649},[37,152141,31369],{"class":82},[37,152143,208],{"class":54},[37,152145,152146],{"class":309},"\"5. 显示所有学生\"",[37,152148,214],{"class":54},[37,152150,152151,152153,152155,152158],{"class":39,"line":2663},[37,152152,31369],{"class":82},[37,152154,208],{"class":54},[37,152156,152157],{"class":309},"\"0. 退出系统\"",[37,152159,214],{"class":54},[37,152161,152162],{"class":39,"line":2671},[37,152163,2472],{"emptyLinePlaceholder":131},[37,152165,152166],{"class":39,"line":2676},[37,152167,2472],{"emptyLinePlaceholder":131},[37,152169,152170,152172,152175],{"class":39,"line":2682},[37,152171,32017],{"class":50},[37,152173,152174],{"class":2035}," find_student",[37,152176,152177],{"class":54},"(students, student_id):\n",[37,152179,152180,152182,152185,152187],{"class":39,"line":2688},[37,152181,3273],{"class":50},[37,152183,152184],{"class":54}," student ",[37,152186,26116],{"class":50},[37,152188,152189],{"class":54}," students:\n",[37,152191,152192,152194,152197,152199,152201,152203],{"class":39,"line":2693},[37,152193,2569],{"class":50},[37,152195,152196],{"class":54}," student[",[37,152198,151494],{"class":309},[37,152200,4515],{"class":54},[37,152202,3021],{"class":50},[37,152204,152205],{"class":54}," student_id:\n",[37,152207,152208,152210],{"class":39,"line":8020},[37,152209,15804],{"class":50},[37,152211,152212],{"class":54}," student\n",[37,152214,152215,152217],{"class":39,"line":8044},[37,152216,4162],{"class":50},[37,152218,152219],{"class":82}," None\n",[37,152221,152222],{"class":39,"line":8049},[37,152223,2472],{"emptyLinePlaceholder":131},[37,152225,152226],{"class":39,"line":8055},[37,152227,2472],{"emptyLinePlaceholder":131},[37,152229,152230,152232,152235],{"class":39,"line":8082},[37,152231,32017],{"class":50},[37,152233,152234],{"class":2035}," input_int",[37,152236,152237],{"class":54},"(prompt):\n",[37,152239,152240,152242,152244],{"class":39,"line":8087},[37,152241,2323],{"class":50},[37,152243,95339],{"class":82},[37,152245,3811],{"class":54},[37,152247,152248,152251],{"class":39,"line":8093},[37,152249,152250],{"class":50},"        try",[37,152252,3811],{"class":54},[37,152254,152255,152257,152259,152261,152263],{"class":39,"line":8105},[37,152256,15804],{"class":50},[37,152258,2454],{"class":82},[37,152260,208],{"class":54},[37,152262,53889],{"class":82},[37,152264,152265],{"class":54},"(prompt))\n",[37,152267,152268,152271,152274],{"class":39,"line":8117},[37,152269,152270],{"class":50},"        except",[37,152272,152273],{"class":82}," ValueError",[37,152275,3811],{"class":54},[37,152277,152278,152280,152282,152285],{"class":39,"line":8129},[37,152279,34719],{"class":82},[37,152281,208],{"class":54},[37,152283,152284],{"class":309},"\"请输入整数\"",[37,152286,214],{"class":54},[37,152288,152289],{"class":39,"line":9788},[37,152290,2472],{"emptyLinePlaceholder":131},[37,152292,152293],{"class":39,"line":9813},[37,152294,2472],{"emptyLinePlaceholder":131},[37,152296,152297,152299,152302],{"class":39,"line":9836},[37,152298,32017],{"class":50},[37,152300,152301],{"class":2035}," input_float",[37,152303,152237],{"class":54},[37,152305,152306,152308,152310],{"class":39,"line":9860},[37,152307,2323],{"class":50},[37,152309,95339],{"class":82},[37,152311,3811],{"class":54},[37,152313,152314,152316],{"class":39,"line":9865},[37,152315,152250],{"class":50},[37,152317,3811],{"class":54},[37,152319,152320,152322,152324,152326,152328],{"class":39,"line":9870},[37,152321,15804],{"class":50},[37,152323,109844],{"class":82},[37,152325,208],{"class":54},[37,152327,53889],{"class":82},[37,152329,152265],{"class":54},[37,152331,152332,152334,152336],{"class":39,"line":9875},[37,152333,152270],{"class":50},[37,152335,152273],{"class":82},[37,152337,3811],{"class":54},[37,152339,152340,152342,152344,152347],{"class":39,"line":9884},[37,152341,34719],{"class":82},[37,152343,208],{"class":54},[37,152345,152346],{"class":309},"\"请输入数字\"",[37,152348,214],{"class":54},[37,152350,152351],{"class":39,"line":9889},[37,152352,2472],{"emptyLinePlaceholder":131},[37,152354,152355],{"class":39,"line":9895},[37,152356,2472],{"emptyLinePlaceholder":131},[37,152358,152359,152361,152364],{"class":39,"line":9916},[37,152360,32017],{"class":50},[37,152362,152363],{"class":2035}," add_student",[37,152365,152008],{"class":54},[37,152367,152368,152371,152373,152375,152377,152380],{"class":39,"line":9922},[37,152369,152370],{"class":54},"    student_id ",[37,152372,70],{"class":50},[37,152374,60673],{"class":82},[37,152376,208],{"class":54},[37,152378,152379],{"class":309},"\"请输入学号:\"",[37,152381,214],{"class":54},[37,152383,152384],{"class":39,"line":9936},[37,152385,2472],{"emptyLinePlaceholder":131},[37,152387,152388,152390],{"class":39,"line":9942},[37,152389,3173],{"class":50},[37,152391,152392],{"class":54}," find_student(students, student_id):\n",[37,152394,152395,152397,152399,152402],{"class":39,"line":9969},[37,152396,32520],{"class":82},[37,152398,208],{"class":54},[37,152400,152401],{"class":309},"\"学号已存在\"",[37,152403,214],{"class":54},[37,152405,152406],{"class":39,"line":9978},[37,152407,152408],{"class":50},"        return\n",[37,152410,152411],{"class":39,"line":9984},[37,152412,2472],{"emptyLinePlaceholder":131},[37,152414,152415,152418,152420,152422,152424,152427],{"class":39,"line":9992},[37,152416,152417],{"class":54},"    name ",[37,152419,70],{"class":50},[37,152421,60673],{"class":82},[37,152423,208],{"class":54},[37,152425,152426],{"class":309},"\"请输入姓名:\"",[37,152428,214],{"class":54},[37,152430,152431,152434,152436,152439,152442],{"class":39,"line":9997},[37,152432,152433],{"class":54},"    age ",[37,152435,70],{"class":50},[37,152437,152438],{"class":54}," input_int(",[37,152440,152441],{"class":309},"\"请输入年龄:\"",[37,152443,214],{"class":54},[37,152445,152446,152449,152451,152454,152457],{"class":39,"line":16676},[37,152447,152448],{"class":54},"    score ",[37,152450,70],{"class":50},[37,152452,152453],{"class":54}," input_float(",[37,152455,152456],{"class":309},"\"请输入成绩:\"",[37,152458,214],{"class":54},[37,152460,152461],{"class":39,"line":16682},[37,152462,2472],{"emptyLinePlaceholder":131},[37,152464,152465],{"class":39,"line":16705},[37,152466,152467],{"class":54},"    students.append({\n",[37,152469,152470,152473],{"class":39,"line":16711},[37,152471,152472],{"class":309},"        \"student_id\"",[37,152474,152475],{"class":54},": student_id,\n",[37,152477,152478,152481],{"class":39,"line":16734},[37,152479,152480],{"class":309},"        \"name\"",[37,152482,152483],{"class":54},": name,\n",[37,152485,152486,152489],{"class":39,"line":16748},[37,152487,152488],{"class":309},"        \"age\"",[37,152490,152491],{"class":54},": age,\n",[37,152493,152494,152497],{"class":39,"line":16768},[37,152495,152496],{"class":309},"        \"score\"",[37,152498,152499],{"class":54},": score,\n",[37,152501,152502],{"class":39,"line":16774},[37,152503,33530],{"class":54},[37,152505,152506],{"class":39,"line":16785},[37,152507,152508],{"class":54},"    save_students(students)\n",[37,152510,152511,152513,152515,152518],{"class":39,"line":16808},[37,152512,31369],{"class":82},[37,152514,208],{"class":54},[37,152516,152517],{"class":309},"\"添加成功\"",[37,152519,214],{"class":54},[37,152521,152522],{"class":39,"line":16830},[37,152523,2472],{"emptyLinePlaceholder":131},[37,152525,152526],{"class":39,"line":16835},[37,152527,2472],{"emptyLinePlaceholder":131},[37,152529,152530,152532,152535],{"class":39,"line":16841},[37,152531,32017],{"class":50},[37,152533,152534],{"class":2035}," delete_student",[37,152536,152008],{"class":54},[37,152538,152539,152541,152543,152545,152547,152550],{"class":39,"line":16855},[37,152540,152370],{"class":54},[37,152542,70],{"class":50},[37,152544,60673],{"class":82},[37,152546,208],{"class":54},[37,152548,152549],{"class":309},"\"请输入要删除的学号:\"",[37,152551,214],{"class":54},[37,152553,152554,152557,152559],{"class":39,"line":16868},[37,152555,152556],{"class":54},"    student ",[37,152558,70],{"class":50},[37,152560,152561],{"class":54}," find_student(students, student_id)\n",[37,152563,152564],{"class":39,"line":16873},[37,152565,2472],{"emptyLinePlaceholder":131},[37,152567,152568,152570,152572,152574,152576],{"class":39,"line":16887},[37,152569,3173],{"class":50},[37,152571,152184],{"class":54},[37,152573,38996],{"class":50},[37,152575,39002],{"class":82},[37,152577,3811],{"class":54},[37,152579,152580,152582,152584,152587],{"class":39,"line":16892},[37,152581,32520],{"class":82},[37,152583,208],{"class":54},[37,152585,152586],{"class":309},"\"学生不存在\"",[37,152588,214],{"class":54},[37,152590,152591],{"class":39,"line":16898},[37,152592,152408],{"class":50},[37,152594,152595],{"class":39,"line":16903},[37,152596,2472],{"emptyLinePlaceholder":131},[37,152598,152599],{"class":39,"line":16917},[37,152600,152601],{"class":54},"    students.remove(student)\n",[37,152603,152604],{"class":39,"line":16922},[37,152605,152508],{"class":54},[37,152607,152608,152610,152612,152615],{"class":39,"line":16927},[37,152609,31369],{"class":82},[37,152611,208],{"class":54},[37,152613,152614],{"class":309},"\"删除成功\"",[37,152616,214],{"class":54},[37,152618,152619],{"class":39,"line":16941},[37,152620,2472],{"emptyLinePlaceholder":131},[37,152622,152623],{"class":39,"line":16953},[37,152624,2472],{"emptyLinePlaceholder":131},[37,152626,152627,152629,152632],{"class":39,"line":16958},[37,152628,32017],{"class":50},[37,152630,152631],{"class":2035}," update_student",[37,152633,152008],{"class":54},[37,152635,152636,152638,152640,152642,152644,152647],{"class":39,"line":16971},[37,152637,152370],{"class":54},[37,152639,70],{"class":50},[37,152641,60673],{"class":82},[37,152643,208],{"class":54},[37,152645,152646],{"class":309},"\"请输入要修改的学号:\"",[37,152648,214],{"class":54},[37,152650,152651,152653,152655],{"class":39,"line":16976},[37,152652,152556],{"class":54},[37,152654,70],{"class":50},[37,152656,152561],{"class":54},[37,152658,152659],{"class":39,"line":16981},[37,152660,2472],{"emptyLinePlaceholder":131},[37,152662,152663,152665,152667,152669,152671],{"class":39,"line":16986},[37,152664,3173],{"class":50},[37,152666,152184],{"class":54},[37,152668,38996],{"class":50},[37,152670,39002],{"class":82},[37,152672,3811],{"class":54},[37,152674,152675,152677,152679,152681],{"class":39,"line":16999},[37,152676,32520],{"class":82},[37,152678,208],{"class":54},[37,152680,152586],{"class":309},[37,152682,214],{"class":54},[37,152684,152685],{"class":39,"line":17004},[37,152686,152408],{"class":50},[37,152688,152689],{"class":39,"line":32702},[37,152690,2472],{"emptyLinePlaceholder":131},[37,152692,152693,152695,152697,152699,152701,152704],{"class":39,"line":32708},[37,152694,152417],{"class":54},[37,152696,70],{"class":50},[37,152698,60673],{"class":82},[37,152700,208],{"class":54},[37,152702,152703],{"class":309},"\"请输入新姓名:\"",[37,152705,214],{"class":54},[37,152707,152708,152710,152712,152714,152717],{"class":39,"line":32714},[37,152709,152433],{"class":54},[37,152711,70],{"class":50},[37,152713,152438],{"class":54},[37,152715,152716],{"class":309},"\"请输入新年龄:\"",[37,152718,214],{"class":54},[37,152720,152721,152723,152725,152727,152730],{"class":39,"line":32720},[37,152722,152448],{"class":54},[37,152724,70],{"class":50},[37,152726,152453],{"class":54},[37,152728,152729],{"class":309},"\"请输入新成绩:\"",[37,152731,214],{"class":54},[37,152733,152734],{"class":39,"line":32726},[37,152735,2472],{"emptyLinePlaceholder":131},[37,152737,152738,152741,152743,152745,152747],{"class":39,"line":32737},[37,152739,152740],{"class":54},"    student[",[37,152742,62747],{"class":309},[37,152744,4515],{"class":54},[37,152746,70],{"class":50},[37,152748,149842],{"class":54},[37,152750,152751,152753,152755,152757,152759],{"class":39,"line":32743},[37,152752,152740],{"class":54},[37,152754,69192],{"class":309},[37,152756,4515],{"class":54},[37,152758,70],{"class":50},[37,152760,149854],{"class":54},[37,152762,152763,152765,152767,152769,152771],{"class":39,"line":32763},[37,152764,152740],{"class":54},[37,152766,151519],{"class":309},[37,152768,4515],{"class":54},[37,152770,70],{"class":50},[37,152772,1651],{"class":54},[37,152774,152775],{"class":39,"line":32769},[37,152776,2472],{"emptyLinePlaceholder":131},[37,152778,152779],{"class":39,"line":32780},[37,152780,152508],{"class":54},[37,152782,152783,152785,152787,152790],{"class":39,"line":32786},[37,152784,31369],{"class":82},[37,152786,208],{"class":54},[37,152788,152789],{"class":309},"\"修改成功\"",[37,152791,214],{"class":54},[37,152793,152794],{"class":39,"line":32792},[37,152795,2472],{"emptyLinePlaceholder":131},[37,152797,152798],{"class":39,"line":32798},[37,152799,2472],{"emptyLinePlaceholder":131},[37,152801,152802,152804,152807],{"class":39,"line":32804},[37,152803,32017],{"class":50},[37,152805,152806],{"class":2035}," query_student",[37,152808,152008],{"class":54},[37,152810,152811,152813,152815,152817,152819,152822],{"class":39,"line":32810},[37,152812,152370],{"class":54},[37,152814,70],{"class":50},[37,152816,60673],{"class":82},[37,152818,208],{"class":54},[37,152820,152821],{"class":309},"\"请输入要查询的学号:\"",[37,152823,214],{"class":54},[37,152825,152826,152828,152830],{"class":39,"line":32816},[37,152827,152556],{"class":54},[37,152829,70],{"class":50},[37,152831,152561],{"class":54},[37,152833,152834],{"class":39,"line":32822},[37,152835,2472],{"emptyLinePlaceholder":131},[37,152837,152838,152840,152842,152844,152846],{"class":39,"line":32842},[37,152839,3173],{"class":50},[37,152841,152184],{"class":54},[37,152843,38996],{"class":50},[37,152845,39002],{"class":82},[37,152847,3811],{"class":54},[37,152849,152850,152852,152854,152856],{"class":39,"line":32848},[37,152851,32520],{"class":82},[37,152853,208],{"class":54},[37,152855,152586],{"class":309},[37,152857,214],{"class":54},[37,152859,152860],{"class":39,"line":32864},[37,152861,152408],{"class":50},[37,152863,152864],{"class":39,"line":32870},[37,152865,2472],{"emptyLinePlaceholder":131},[37,152867,152868],{"class":39,"line":32884},[37,152869,152870],{"class":54},"    print_student(student)\n",[37,152872,152873],{"class":39,"line":32890},[37,152874,2472],{"emptyLinePlaceholder":131},[37,152876,152877],{"class":39,"line":32905},[37,152878,2472],{"emptyLinePlaceholder":131},[37,152880,152881,152883,152886],{"class":39,"line":32911},[37,152882,32017],{"class":50},[37,152884,152885],{"class":2035}," print_student",[37,152887,152888],{"class":54},"(student):\n",[37,152890,152891,152893],{"class":39,"line":32920},[37,152892,31369],{"class":82},[37,152894,151486],{"class":54},[37,152896,152897,152900,152902,152904,152907,152910,152912,152915],{"class":39,"line":32926},[37,152898,152899],{"class":50},"        f",[37,152901,456],{"class":309},[37,152903,1099],{"class":82},[37,152905,152906],{"class":54},"student[",[37,152908,152909],{"class":309},"'student_id'",[37,152911,1143],{"class":54},[37,152913,152914],{"class":82},"}\\t",[37,152916,25206],{"class":309},[37,152918,152919,152921,152923,152925,152927,152930,152932,152934],{"class":39,"line":32935},[37,152920,152899],{"class":50},[37,152922,456],{"class":309},[37,152924,1099],{"class":82},[37,152926,152906],{"class":54},[37,152928,152929],{"class":309},"'name'",[37,152931,1143],{"class":54},[37,152933,152914],{"class":82},[37,152935,25206],{"class":309},[37,152937,152938,152940,152942,152944,152946,152949,152951,152953],{"class":39,"line":32941},[37,152939,152899],{"class":50},[37,152941,456],{"class":309},[37,152943,1099],{"class":82},[37,152945,152906],{"class":54},[37,152947,152948],{"class":309},"'age'",[37,152950,1143],{"class":54},[37,152952,152914],{"class":82},[37,152954,25206],{"class":309},[37,152956,152957,152959,152961,152963,152965,152968,152970,152972],{"class":39,"line":32947},[37,152958,152899],{"class":50},[37,152960,456],{"class":309},[37,152962,1099],{"class":82},[37,152964,152906],{"class":54},[37,152966,152967],{"class":309},"'score'",[37,152969,1143],{"class":54},[37,152971,1149],{"class":82},[37,152973,25206],{"class":309},[37,152975,152976],{"class":39,"line":32956},[37,152977,152978],{"class":54},"    )\n",[37,152980,152981],{"class":39,"line":32962},[37,152982,2472],{"emptyLinePlaceholder":131},[37,152984,152985],{"class":39,"line":32973},[37,152986,2472],{"emptyLinePlaceholder":131},[37,152988,152989,152991,152994],{"class":39,"line":32979},[37,152990,32017],{"class":50},[37,152992,152993],{"class":2035}," show_all_students",[37,152995,152008],{"class":54},[37,152997,152998,153000,153002],{"class":39,"line":32998},[37,152999,3173],{"class":50},[37,153001,38999],{"class":50},[37,153003,152189],{"class":54},[37,153005,153006,153008,153010,153013],{"class":39,"line":33004},[37,153007,32520],{"class":82},[37,153009,208],{"class":54},[37,153011,153012],{"class":309},"\"暂无学生\"",[37,153014,214],{"class":54},[37,153016,153017],{"class":39,"line":33015},[37,153018,152408],{"class":50},[37,153020,153021],{"class":39,"line":33021},[37,153022,2472],{"emptyLinePlaceholder":131},[37,153024,153025,153027,153029,153032,153034,153037,153039,153042,153044,153047],{"class":39,"line":33041},[37,153026,31369],{"class":82},[37,153028,208],{"class":54},[37,153030,153031],{"class":309},"\"学号",[37,153033,1304],{"class":82},[37,153035,153036],{"class":309},"姓名",[37,153038,1304],{"class":82},[37,153040,153041],{"class":309},"年龄",[37,153043,1304],{"class":82},[37,153045,153046],{"class":309},"成绩\"",[37,153048,214],{"class":54},[37,153050,153051,153053,153055,153057],{"class":39,"line":33057},[37,153052,3273],{"class":50},[37,153054,152184],{"class":54},[37,153056,26116],{"class":50},[37,153058,152189],{"class":54},[37,153060,153061],{"class":39,"line":33063},[37,153062,153063],{"class":54},"        print_student(student)\n",[37,153065,153066],{"class":39,"line":33077},[37,153067,2472],{"emptyLinePlaceholder":131},[37,153069,153070],{"class":39,"line":33083},[37,153071,2472],{"emptyLinePlaceholder":131},[37,153073,153074,153076,153078],{"class":39,"line":33089},[37,153075,32017],{"class":50},[37,153077,2045],{"class":2035},[37,153079,32023],{"class":54},[37,153081,153082,153085,153087],{"class":39,"line":33100},[37,153083,153084],{"class":54},"    students ",[37,153086,70],{"class":50},[37,153088,153089],{"class":54}," load_students()\n",[37,153091,153092],{"class":39,"line":33106},[37,153093,2472],{"emptyLinePlaceholder":131},[37,153095,153096,153098,153100],{"class":39,"line":33112},[37,153097,2323],{"class":50},[37,153099,95339],{"class":82},[37,153101,3811],{"class":54},[37,153103,153104],{"class":39,"line":33122},[37,153105,153106],{"class":54},"        show_menu()\n",[37,153108,153109,153112,153114,153116,153118,153121],{"class":39,"line":33128},[37,153110,153111],{"class":54},"        choice ",[37,153113,70],{"class":50},[37,153115,60673],{"class":82},[37,153117,208],{"class":54},[37,153119,153120],{"class":309},"\"请输入操作:\"",[37,153122,214],{"class":54},[37,153124,153125],{"class":39,"line":33139},[37,153126,2472],{"emptyLinePlaceholder":131},[37,153128,153129,153131,153134,153136,153139],{"class":39,"line":33145},[37,153130,2569],{"class":50},[37,153132,153133],{"class":54}," choice ",[37,153135,3021],{"class":50},[37,153137,153138],{"class":309}," \"1\"",[37,153140,3811],{"class":54},[37,153142,153143],{"class":39,"line":33155},[37,153144,153145],{"class":54},"            add_student(students)\n",[37,153147,153148,153151,153153,153155,153158],{"class":39,"line":33160},[37,153149,153150],{"class":50},"        elif",[37,153152,153133],{"class":54},[37,153154,3021],{"class":50},[37,153156,153157],{"class":309}," \"2\"",[37,153159,3811],{"class":54},[37,153161,153162],{"class":39,"line":33166},[37,153163,153164],{"class":54},"            delete_student(students)\n",[37,153166,153167,153169,153171,153173,153176],{"class":39,"line":33215},[37,153168,153150],{"class":50},[37,153170,153133],{"class":54},[37,153172,3021],{"class":50},[37,153174,153175],{"class":309}," \"3\"",[37,153177,3811],{"class":54},[37,153179,153180],{"class":39,"line":33262},[37,153181,153182],{"class":54},"            update_student(students)\n",[37,153184,153185,153187,153189,153191,153194],{"class":39,"line":33267},[37,153186,153150],{"class":50},[37,153188,153133],{"class":54},[37,153190,3021],{"class":50},[37,153192,153193],{"class":309}," \"4\"",[37,153195,3811],{"class":54},[37,153197,153198],{"class":39,"line":33273},[37,153199,153200],{"class":54},"            query_student(students)\n",[37,153202,153203,153205,153207,153209,153212],{"class":39,"line":33292},[37,153204,153150],{"class":50},[37,153206,153133],{"class":54},[37,153208,3021],{"class":50},[37,153210,153211],{"class":309}," \"5\"",[37,153213,3811],{"class":54},[37,153215,153216],{"class":39,"line":33298},[37,153217,153218],{"class":54},"            show_all_students(students)\n",[37,153220,153221,153223,153225,153227,153230],{"class":39,"line":33318},[37,153222,153150],{"class":50},[37,153224,153133],{"class":54},[37,153226,3021],{"class":50},[37,153228,153229],{"class":309}," \"0\"",[37,153231,3811],{"class":54},[37,153233,153234,153236,153238,153241],{"class":39,"line":33324},[37,153235,34719],{"class":82},[37,153237,208],{"class":54},[37,153239,153240],{"class":309},"\"退出系统\"",[37,153242,214],{"class":54},[37,153244,153245],{"class":39,"line":33330},[37,153246,115145],{"class":50},[37,153248,153249,153251],{"class":39,"line":33340},[37,153250,2606],{"class":50},[37,153252,3811],{"class":54},[37,153254,153255,153257,153259,153262],{"class":39,"line":33345},[37,153256,34719],{"class":82},[37,153258,208],{"class":54},[37,153260,153261],{"class":309},"\"输入错误\"",[37,153263,214],{"class":54},[37,153265,153266],{"class":39,"line":33351},[37,153267,2472],{"emptyLinePlaceholder":131},[37,153269,153270],{"class":39,"line":33367},[37,153271,2472],{"emptyLinePlaceholder":131},[37,153273,153274,153276,153278,153280,153282],{"class":39,"line":33412},[37,153275,1603],{"class":50},[37,153277,31290],{"class":82},[37,153279,101606],{"class":50},[37,153281,101609],{"class":309},[37,153283,3811],{"class":54},[37,153285,153286],{"class":39,"line":33418},[37,153287,101616],{"class":54},[14,153289,153290],{},"这个项目串联了：",[158,153292,153293,153296,153299,153302,153305,153307],{},[161,153294,153295],{},"菜单循环。",[161,153297,153298],{},"函数封装。",[161,153300,153301],{},"列表字典。",[161,153303,153304],{},"JSON 读写。",[161,153306,151774],{},[161,153308,153309,28458],{},[34,153310,153311],{},"if __name__ == \"__main__\"",[146,153313,153315],{"id":153314},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153317,153318],{},"可以进一步拆成两个类：",[158,153320,153321,153326],{},[161,153322,153323,153325],{},[34,153324,149615],{},"：表示单个学生。",[161,153327,153328,153330],{},[34,153329,151641],{},"：负责学生增删改查和文件保存。",[14,153332,153333],{},"示意代码：",[27,153335,153337],{"className":29,"code":153336,"language":31,"meta":32,"style":32},"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",[34,153338,153339,153349,153353,153357,153361,153369,153376,153382,153388,153394,153398,153406,153412,153422,153432,153442,153452,153456,153460,153466,153474,153482,153490,153498,153506,153514],{"__ignoreMap":32},[37,153340,153341,153343,153345,153347],{"class":39,"line":40},[37,153342,30807],{"class":50},[37,153344,151199],{"class":54},[37,153346,51],{"class":50},[37,153348,151204],{"class":54},[37,153350,153351],{"class":39,"line":47},[37,153352,2472],{"emptyLinePlaceholder":131},[37,153354,153355],{"class":39,"line":58},[37,153356,2472],{"emptyLinePlaceholder":131},[37,153358,153359],{"class":39,"line":64},[37,153360,151217],{"class":2035},[37,153362,153363,153365,153367],{"class":39,"line":76},[37,153364,14766],{"class":50},[37,153366,7970],{"class":2035},[37,153368,3811],{"class":54},[37,153370,153371,153374],{"class":39,"line":92},[37,153372,153373],{"class":54},"    student_id: ",[37,153375,151233],{"class":82},[37,153377,153378,153380],{"class":39,"line":97},[37,153379,151230],{"class":54},[37,153381,151233],{"class":82},[37,153383,153384,153386],{"class":39,"line":107},[37,153385,151238],{"class":54},[37,153387,151241],{"class":82},[37,153389,153390,153392],{"class":39,"line":1390},[37,153391,151246],{"class":54},[37,153393,151249],{"class":82},[37,153395,153396],{"class":39,"line":1402},[37,153397,2472],{"emptyLinePlaceholder":131},[37,153399,153400,153402,153404],{"class":39,"line":1684},[37,153401,30871],{"class":50},[37,153403,151397],{"class":2035},[37,153405,30877],{"class":54},[37,153407,153408,153410],{"class":39,"line":1689},[37,153409,14824],{"class":50},[37,153411,15644],{"class":54},[37,153413,153414,153416,153418,153420],{"class":39,"line":1695},[37,153415,151410],{"class":309},[37,153417,51505],{"class":54},[37,153419,30893],{"class":82},[37,153421,151417],{"class":54},[37,153423,153424,153426,153428,153430],{"class":39,"line":1700},[37,153425,151422],{"class":309},[37,153427,51505],{"class":54},[37,153429,30893],{"class":82},[37,153431,151429],{"class":54},[37,153433,153434,153436,153438,153440],{"class":39,"line":1714},[37,153435,151434],{"class":309},[37,153437,51505],{"class":54},[37,153439,30893],{"class":82},[37,153441,151441],{"class":54},[37,153443,153444,153446,153448,153450],{"class":39,"line":1719},[37,153445,151446],{"class":309},[37,153447,51505],{"class":54},[37,153449,30893],{"class":82},[37,153451,151453],{"class":54},[37,153453,153454],{"class":39,"line":1725},[37,153455,2601],{"class":54},[37,153457,153458],{"class":39,"line":1746},[37,153459,2472],{"emptyLinePlaceholder":131},[37,153461,153462,153464],{"class":39,"line":1751},[37,153463,151061],{"class":2035},[37,153465,151064],{"class":82},[37,153467,153468,153470,153472],{"class":39,"line":1765},[37,153469,30871],{"class":50},[37,153471,151474],{"class":2035},[37,153473,151477],{"class":54},[37,153475,153476,153478,153480],{"class":39,"line":1770},[37,153477,14824],{"class":50},[37,153479,151081],{"class":82},[37,153481,151486],{"class":54},[37,153483,153484,153486,153488],{"class":39,"line":1799},[37,153485,151491],{"class":54},[37,153487,151494],{"class":309},[37,153489,87904],{"class":54},[37,153491,153492,153494,153496],{"class":39,"line":1804},[37,153493,151491],{"class":54},[37,153495,62747],{"class":309},[37,153497,87904],{"class":54},[37,153499,153500,153502,153504],{"class":39,"line":1821},[37,153501,151491],{"class":54},[37,153503,69192],{"class":309},[37,153505,87904],{"class":54},[37,153507,153508,153510,153512],{"class":39,"line":1826},[37,153509,151491],{"class":54},[37,153511,151519],{"class":309},[37,153513,87904],{"class":54},[37,153515,153516],{"class":39,"line":1831},[37,153517,38195],{"class":54},[14,153519,153520],{},"管理器示意：",[27,153522,153524],{"className":29,"code":153523,"language":31,"meta":32,"style":32},"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",[34,153525,153526,153535,153543,153554,153558,153568,153581,153592,153599,153605,153609,153618,153627,153633,153640],{"__ignoreMap":32},[37,153527,153528,153530,153533],{"class":39,"line":40},[37,153529,14766],{"class":50},[37,153531,153532],{"class":2035}," StudentManager",[37,153534,3811],{"class":54},[37,153536,153537,153539,153541],{"class":39,"line":47},[37,153538,30871],{"class":50},[37,153540,30874],{"class":82},[37,153542,30877],{"class":54},[37,153544,153545,153547,153550,153552],{"class":39,"line":58},[37,153546,30915],{"class":82},[37,153548,153549],{"class":54},".students ",[37,153551,70],{"class":50},[37,153553,51906],{"class":54},[37,153555,153556],{"class":39,"line":64},[37,153557,2472],{"emptyLinePlaceholder":131},[37,153559,153560,153562,153565],{"class":39,"line":76},[37,153561,30871],{"class":50},[37,153563,153564],{"class":2035}," find_by_id",[37,153566,153567],{"class":54},"(self, student_id):\n",[37,153569,153570,153572,153574,153576,153578],{"class":39,"line":92},[37,153571,3475],{"class":50},[37,153573,152184],{"class":54},[37,153575,26116],{"class":50},[37,153577,38942],{"class":82},[37,153579,153580],{"class":54},".students:\n",[37,153582,153583,153585,153588,153590],{"class":39,"line":97},[37,153584,4714],{"class":50},[37,153586,153587],{"class":54}," student.student_id ",[37,153589,3021],{"class":50},[37,153591,152205],{"class":54},[37,153593,153594,153597],{"class":39,"line":107},[37,153595,153596],{"class":50},"                return",[37,153598,152212],{"class":54},[37,153600,153601,153603],{"class":39,"line":1390},[37,153602,14824],{"class":50},[37,153604,152219],{"class":82},[37,153606,153607],{"class":39,"line":1402},[37,153608,2472],{"emptyLinePlaceholder":131},[37,153610,153611,153613,153615],{"class":39,"line":1684},[37,153612,30871],{"class":50},[37,153614,5281],{"class":2035},[37,153616,153617],{"class":54},"(self, student):\n",[37,153619,153620,153622,153624],{"class":39,"line":1689},[37,153621,2569],{"class":50},[37,153623,38942],{"class":82},[37,153625,153626],{"class":54},".find_by_id(student.student_id):\n",[37,153628,153629,153631],{"class":39,"line":1695},[37,153630,15804],{"class":50},[37,153632,125854],{"class":82},[37,153634,153635,153637],{"class":39,"line":1700},[37,153636,30915],{"class":82},[37,153638,153639],{"class":54},".students.append(student)\n",[37,153641,153642,153644],{"class":39,"line":1714},[37,153643,14824],{"class":50},[37,153645,153646],{"class":82}," True\n",[14,153648,153649],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[146,153651,153653],{"id":153652},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[175,153655,153657],{"id":153656},"_1251-数据结构","12.5.1 数据结构",[27,153659,153661],{"className":29,"code":153660,"language":31,"meta":32,"style":32},"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",[34,153662,153663,153671,153702,153732,153761,153790],{"__ignoreMap":32},[37,153664,153665,153667,153669],{"class":39,"line":40},[37,153666,148512],{"class":54},[37,153668,70],{"class":50},[37,153670,55515],{"class":54},[37,153672,153673,153675,153677,153679,153681,153683,153686,153688,153691,153693,153695,153697,153700],{"class":39,"line":47},[37,153674,148432],{"class":54},[37,153676,148044],{"class":309},[37,153678,51505],{"class":54},[37,153680,148655],{"class":309},[37,153682,12507],{"class":54},[37,153684,153685],{"class":309},"\"category\"",[37,153687,51505],{"class":54},[37,153689,153690],{"class":309},"\"手机\"",[37,153692,12507],{"class":54},[37,153694,84152],{"class":309},[37,153696,51505],{"class":54},[37,153698,153699],{"class":82},"12000",[37,153701,5002],{"class":54},[37,153703,153704,153706,153708,153710,153712,153714,153716,153718,153721,153723,153725,153727,153730],{"class":39,"line":58},[37,153705,148432],{"class":54},[37,153707,148044],{"class":309},[37,153709,51505],{"class":54},[37,153711,148655],{"class":309},[37,153713,12507],{"class":54},[37,153715,153685],{"class":309},[37,153717,51505],{"class":54},[37,153719,153720],{"class":309},"\"电脑\"",[37,153722,12507],{"class":54},[37,153724,84152],{"class":309},[37,153726,51505],{"class":54},[37,153728,153729],{"class":82},"18000",[37,153731,5002],{"class":54},[37,153733,153734,153736,153738,153740,153742,153744,153746,153748,153750,153752,153754,153756,153759],{"class":39,"line":64},[37,153735,148432],{"class":54},[37,153737,148044],{"class":309},[37,153739,51505],{"class":54},[37,153741,148676],{"class":309},[37,153743,12507],{"class":54},[37,153745,153685],{"class":309},[37,153747,51505],{"class":54},[37,153749,153690],{"class":309},[37,153751,12507],{"class":54},[37,153753,84152],{"class":309},[37,153755,51505],{"class":54},[37,153757,153758],{"class":82},"15000",[37,153760,5002],{"class":54},[37,153762,153763,153765,153767,153769,153771,153773,153775,153777,153779,153781,153783,153785,153788],{"class":39,"line":76},[37,153764,148432],{"class":54},[37,153766,148044],{"class":309},[37,153768,51505],{"class":54},[37,153770,148676],{"class":309},[37,153772,12507],{"class":54},[37,153774,153685],{"class":309},[37,153776,51505],{"class":54},[37,153778,153720],{"class":309},[37,153780,12507],{"class":54},[37,153782,84152],{"class":309},[37,153784,51505],{"class":54},[37,153786,153787],{"class":82},"16000",[37,153789,5002],{"class":54},[37,153791,153792],{"class":39,"line":92},[37,153793,33315],{"class":54},[175,153795,153797],{"id":153796},"_1252-按日期统计","12.5.2 按日期统计",[27,153799,153801],{"className":29,"code":153800,"language":31,"meta":32,"style":32},"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",[34,153802,153803,153812,153816,153827,153841,153854,153873,153877],{"__ignoreMap":32},[37,153804,153805,153808,153810],{"class":39,"line":40},[37,153806,153807],{"class":54},"daily_total ",[37,153809,70],{"class":50},[37,153811,87936],{"class":54},[37,153813,153814],{"class":39,"line":47},[37,153815,2472],{"emptyLinePlaceholder":131},[37,153817,153818,153820,153822,153824],{"class":39,"line":58},[37,153819,3097],{"class":50},[37,153821,148256],{"class":54},[37,153823,26116],{"class":50},[37,153825,153826],{"class":54}," sales:\n",[37,153828,153829,153832,153834,153837,153839],{"class":39,"line":64},[37,153830,153831],{"class":54},"    date ",[37,153833,70],{"class":50},[37,153835,153836],{"class":54}," item[",[37,153838,148044],{"class":309},[37,153840,33315],{"class":54},[37,153842,153843,153846,153848,153850,153852],{"class":39,"line":76},[37,153844,153845],{"class":54},"    amount ",[37,153847,70],{"class":50},[37,153849,153836],{"class":54},[37,153851,84152],{"class":309},[37,153853,33315],{"class":54},[37,153855,153856,153859,153861,153864,153866,153868,153870],{"class":39,"line":92},[37,153857,153858],{"class":54},"    daily_total[date] ",[37,153860,70],{"class":50},[37,153862,153863],{"class":54}," daily_total.get(date, ",[37,153865,396],{"class":82},[37,153867,13786],{"class":54},[37,153869,685],{"class":50},[37,153871,153872],{"class":54}," amount\n",[37,153874,153875],{"class":39,"line":97},[37,153876,2472],{"emptyLinePlaceholder":131},[37,153878,153879,153881],{"class":39,"line":107},[37,153880,30485],{"class":82},[37,153882,153883],{"class":54},"(daily_total)\n",[175,153885,153887],{"id":153886},"_1253-按类别统计","12.5.3 按类别统计",[27,153889,153891],{"className":29,"code":153890,"language":31,"meta":32,"style":32},"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",[34,153892,153893,153902,153906,153916,153929,153941,153959,153963],{"__ignoreMap":32},[37,153894,153895,153898,153900],{"class":39,"line":40},[37,153896,153897],{"class":54},"category_total ",[37,153899,70],{"class":50},[37,153901,87936],{"class":54},[37,153903,153904],{"class":39,"line":47},[37,153905,2472],{"emptyLinePlaceholder":131},[37,153907,153908,153910,153912,153914],{"class":39,"line":58},[37,153909,3097],{"class":50},[37,153911,148256],{"class":54},[37,153913,26116],{"class":50},[37,153915,153826],{"class":54},[37,153917,153918,153921,153923,153925,153927],{"class":39,"line":64},[37,153919,153920],{"class":54},"    category ",[37,153922,70],{"class":50},[37,153924,153836],{"class":54},[37,153926,153685],{"class":309},[37,153928,33315],{"class":54},[37,153930,153931,153933,153935,153937,153939],{"class":39,"line":76},[37,153932,153845],{"class":54},[37,153934,70],{"class":50},[37,153936,153836],{"class":54},[37,153938,84152],{"class":309},[37,153940,33315],{"class":54},[37,153942,153943,153946,153948,153951,153953,153955,153957],{"class":39,"line":92},[37,153944,153945],{"class":54},"    category_total[category] ",[37,153947,70],{"class":50},[37,153949,153950],{"class":54}," category_total.get(category, ",[37,153952,396],{"class":82},[37,153954,13786],{"class":54},[37,153956,685],{"class":50},[37,153958,153872],{"class":54},[37,153960,153961],{"class":39,"line":97},[37,153962,2472],{"emptyLinePlaceholder":131},[37,153964,153965,153967],{"class":39,"line":107},[37,153966,30485],{"class":82},[37,153968,153969],{"class":54},"(category_total)\n",[175,153971,153973],{"id":153972},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[27,153975,153977],{"className":29,"code":153976,"language":31,"meta":32,"style":32},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[34,153978,153979,154004],{"__ignoreMap":32},[37,153980,153981,153984,153986,153988,153991,153994,153997,154000,154002],{"class":39,"line":40},[37,153982,153983],{"class":54},"top_date, top_amount ",[37,153985,70],{"class":50},[37,153987,6023],{"class":82},[37,153989,153990],{"class":54},"(daily_total.items(), ",[37,153992,153993],{"class":5288},"key",[37,153995,153996],{"class":50},"=lambda",[37,153998,153999],{"class":54}," item: item[",[37,154001,422],{"class":82},[37,154003,4729],{"class":54},[37,154005,154006,154008],{"class":39,"line":47},[37,154007,30485],{"class":82},[37,154009,154010],{"class":54},"(top_date, top_amount)\n",[146,154012,154014],{"id":154013},"_126-绘制柱状图","12.6 绘制柱状图",[27,154016,154018],{"className":29,"code":154017,"language":31,"meta":32,"style":32},"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",[34,154019,154020,154034,154045,154049,154057,154069,154081,154092,154096,154100,154110,154121,154135,154140,154157,154174,154190,154194],{"__ignoreMap":32},[37,154021,154022,154024,154026,154028,154030,154032],{"class":39,"line":40},[37,154023,30807],{"class":50},[37,154025,147426],{"class":54},[37,154027,51],{"class":50},[37,154029,147431],{"class":54},[37,154031,31453],{"class":50},[37,154033,147436],{"class":54},[37,154035,154036,154038,154040,154042],{"class":39,"line":47},[37,154037,30807],{"class":50},[37,154039,147285],{"class":54},[37,154041,51],{"class":50},[37,154043,154044],{"class":54}," Bar\n",[37,154046,154047],{"class":39,"line":58},[37,154048,2472],{"emptyLinePlaceholder":131},[37,154050,154051,154053,154055],{"class":39,"line":64},[37,154052,153897],{"class":54},[37,154054,70],{"class":50},[37,154056,15644],{"class":54},[37,154058,154059,154062,154064,154067],{"class":39,"line":76},[37,154060,154061],{"class":309},"    \"手机\"",[37,154063,51505],{"class":54},[37,154065,154066],{"class":82},"27000",[37,154068,31536],{"class":54},[37,154070,154071,154074,154076,154079],{"class":39,"line":92},[37,154072,154073],{"class":309},"    \"电脑\"",[37,154075,51505],{"class":54},[37,154077,154078],{"class":82},"34000",[37,154080,31536],{"class":54},[37,154082,154083,154086,154088,154090],{"class":39,"line":97},[37,154084,154085],{"class":309},"    \"耳机\"",[37,154087,51505],{"class":54},[37,154089,124446],{"class":82},[37,154091,31536],{"class":54},[37,154093,154094],{"class":39,"line":107},[37,154095,1637],{"class":54},[37,154097,154098],{"class":39,"line":1390},[37,154099,2472],{"emptyLinePlaceholder":131},[37,154101,154102,154105,154107],{"class":39,"line":1402},[37,154103,154104],{"class":54},"bar ",[37,154106,70],{"class":50},[37,154108,154109],{"class":54}," Bar()\n",[37,154111,154112,154115,154118],{"class":39,"line":1684},[37,154113,154114],{"class":54},"bar.add_xaxis(",[37,154116,154117],{"class":82},"list",[37,154119,154120],{"class":54},"(category_total.keys()))\n",[37,154122,154123,154126,154128,154130,154132],{"class":39,"line":1689},[37,154124,154125],{"class":54},"bar.add_yaxis(",[37,154127,147342],{"class":309},[37,154129,12507],{"class":54},[37,154131,154117],{"class":82},[37,154133,154134],{"class":54},"(category_total.values()))\n",[37,154136,154137],{"class":39,"line":1695},[37,154138,154139],{"class":54},"bar.set_global_opts(\n",[37,154141,154142,154144,154146,154148,154150,154152,154155],{"class":39,"line":1700},[37,154143,147520],{"class":5288},[37,154145,70],{"class":50},[37,154147,147525],{"class":54},[37,154149,51475],{"class":5288},[37,154151,70],{"class":50},[37,154153,154154],{"class":309},"\"品类销售额\"",[37,154156,38116],{"class":54},[37,154158,154159,154161,154163,154165,154167,154169,154172],{"class":39,"line":1714},[37,154160,147539],{"class":5288},[37,154162,70],{"class":50},[37,154164,147544],{"class":54},[37,154166,79878],{"class":5288},[37,154168,70],{"class":50},[37,154170,154171],{"class":309},"\"品类\"",[37,154173,38116],{"class":54},[37,154175,154176,154178,154180,154182,154184,154186,154188],{"class":39,"line":1719},[37,154177,147558],{"class":5288},[37,154179,70],{"class":50},[37,154181,147544],{"class":54},[37,154183,79878],{"class":5288},[37,154185,70],{"class":50},[37,154187,147342],{"class":309},[37,154189,38116],{"class":54},[37,154191,154192],{"class":39,"line":1725},[37,154193,214],{"class":54},[37,154195,154196,154199,154202],{"class":39,"line":1746},[37,154197,154198],{"class":54},"bar.render(",[37,154200,154201],{"class":309},"\"category_sales.html\"",[37,154203,214],{"class":54},[146,154205,154207],{"id":154206},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154209,154210],{},"时间线适合展示不同日期、月份、年份的数据变化。",[27,154212,154214],{"className":29,"code":154213,"language":31,"meta":32,"style":32},"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",[34,154215,154216,154230,154241,154245,154253,154277,154300,154325,154329,154333,154343,154347,154358,154367,154377,154391,154422,154427,154431],{"__ignoreMap":32},[37,154217,154218,154220,154222,154224,154226,154228],{"class":39,"line":40},[37,154219,30807],{"class":50},[37,154221,147426],{"class":54},[37,154223,51],{"class":50},[37,154225,147431],{"class":54},[37,154227,31453],{"class":50},[37,154229,147436],{"class":54},[37,154231,154232,154234,154236,154238],{"class":39,"line":47},[37,154233,30807],{"class":50},[37,154235,147285],{"class":54},[37,154237,51],{"class":50},[37,154239,154240],{"class":54}," Bar, Timeline\n",[37,154242,154243],{"class":39,"line":58},[37,154244,2472],{"emptyLinePlaceholder":131},[37,154246,154247,154249,154251],{"class":39,"line":64},[37,154248,101705],{"class":54},[37,154250,70],{"class":50},[37,154252,15644],{"class":54},[37,154254,154255,154258,154261,154263,154265,154267,154269,154271,154273,154275],{"class":39,"line":76},[37,154256,154257],{"class":309},"    \"2024-10-01\"",[37,154259,154260],{"class":54},": {",[37,154262,153690],{"class":309},[37,154264,51505],{"class":54},[37,154266,153699],{"class":82},[37,154268,12507],{"class":54},[37,154270,153720],{"class":309},[37,154272,51505],{"class":54},[37,154274,153729],{"class":82},[37,154276,5002],{"class":54},[37,154278,154279,154282,154284,154286,154288,154290,154292,154294,154296,154298],{"class":39,"line":92},[37,154280,154281],{"class":309},"    \"2024-10-02\"",[37,154283,154260],{"class":54},[37,154285,153690],{"class":309},[37,154287,51505],{"class":54},[37,154289,153758],{"class":82},[37,154291,12507],{"class":54},[37,154293,153720],{"class":309},[37,154295,51505],{"class":54},[37,154297,153787],{"class":82},[37,154299,5002],{"class":54},[37,154301,154302,154305,154307,154309,154311,154314,154316,154318,154320,154323],{"class":39,"line":97},[37,154303,154304],{"class":309},"    \"2024-10-03\"",[37,154306,154260],{"class":54},[37,154308,153690],{"class":309},[37,154310,51505],{"class":54},[37,154312,154313],{"class":82},"17000",[37,154315,12507],{"class":54},[37,154317,153720],{"class":309},[37,154319,51505],{"class":54},[37,154321,154322],{"class":82},"19000",[37,154324,5002],{"class":54},[37,154326,154327],{"class":39,"line":107},[37,154328,1637],{"class":54},[37,154330,154331],{"class":39,"line":1390},[37,154332,2472],{"emptyLinePlaceholder":131},[37,154334,154335,154338,154340],{"class":39,"line":1402},[37,154336,154337],{"class":54},"timeline ",[37,154339,70],{"class":50},[37,154341,154342],{"class":54}," Timeline()\n",[37,154344,154345],{"class":39,"line":1684},[37,154346,2472],{"emptyLinePlaceholder":131},[37,154348,154349,154351,154354,154356],{"class":39,"line":1689},[37,154350,3097],{"class":50},[37,154352,154353],{"class":54}," date, category_data ",[37,154355,26116],{"class":50},[37,154357,149195],{"class":54},[37,154359,154360,154363,154365],{"class":39,"line":1695},[37,154361,154362],{"class":54},"    bar ",[37,154364,70],{"class":50},[37,154366,154109],{"class":54},[37,154368,154369,154372,154374],{"class":39,"line":1700},[37,154370,154371],{"class":54},"    bar.add_xaxis(",[37,154373,154117],{"class":82},[37,154375,154376],{"class":54},"(category_data.keys()))\n",[37,154378,154379,154382,154384,154386,154388],{"class":39,"line":1714},[37,154380,154381],{"class":54},"    bar.add_yaxis(",[37,154383,147342],{"class":309},[37,154385,12507],{"class":54},[37,154387,154117],{"class":82},[37,154389,154390],{"class":54},"(category_data.values()))\n",[37,154392,154393,154396,154399,154401,154403,154405,154407,154409,154411,154413,154415,154417,154420],{"class":39,"line":1719},[37,154394,154395],{"class":54},"    bar.set_global_opts(",[37,154397,154398],{"class":5288},"title_opts",[37,154400,70],{"class":50},[37,154402,147525],{"class":54},[37,154404,51475],{"class":5288},[37,154406,70],{"class":50},[37,154408,258],{"class":50},[37,154410,456],{"class":309},[37,154412,1099],{"class":82},[37,154414,73994],{"class":54},[37,154416,1149],{"class":82},[37,154418,154419],{"class":309},"销售额\"",[37,154421,30567],{"class":54},[37,154423,154424],{"class":39,"line":1725},[37,154425,154426],{"class":54},"    timeline.add(bar, date)\n",[37,154428,154429],{"class":39,"line":1746},[37,154430,2472],{"emptyLinePlaceholder":131},[37,154432,154433,154436,154439],{"class":39,"line":1751},[37,154434,154435],{"class":54},"timeline.render(",[37,154437,154438],{"class":309},"\"timeline_sales.html\"",[37,154440,214],{"class":54},[146,154442,154444],{"id":154443},"_128-绘制地图","12.8 绘制地图",[14,154446,154447],{},"地图适合展示地区数据。",[27,154449,154451],{"className":29,"code":154450,"language":31,"meta":32,"style":32},"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",[34,154452,154453,154467,154478,154482,154490,154503,154515,154528,154541,154545,154549,154559,154574,154579,154596,154615,154619],{"__ignoreMap":32},[37,154454,154455,154457,154459,154461,154463,154465],{"class":39,"line":40},[37,154456,30807],{"class":50},[37,154458,147426],{"class":54},[37,154460,51],{"class":50},[37,154462,147431],{"class":54},[37,154464,31453],{"class":50},[37,154466,147436],{"class":54},[37,154468,154469,154471,154473,154475],{"class":39,"line":47},[37,154470,30807],{"class":50},[37,154472,147285],{"class":54},[37,154474,51],{"class":50},[37,154476,154477],{"class":54}," Map\n",[37,154479,154480],{"class":39,"line":58},[37,154481,2472],{"emptyLinePlaceholder":131},[37,154483,154484,154486,154488],{"class":39,"line":64},[37,154485,101705],{"class":54},[37,154487,70],{"class":50},[37,154489,55515],{"class":54},[37,154491,154492,154495,154497,154499,154501],{"class":39,"line":76},[37,154493,154494],{"class":54},"    (",[37,154496,69337],{"class":309},[37,154498,12507],{"class":54},[37,154500,1020],{"class":82},[37,154502,38116],{"class":54},[37,154504,154505,154507,154509,154511,154513],{"class":39,"line":92},[37,154506,154494],{"class":54},[37,154508,69357],{"class":309},[37,154510,12507],{"class":54},[37,154512,147359],{"class":82},[37,154514,38116],{"class":54},[37,154516,154517,154519,154522,154524,154526],{"class":39,"line":97},[37,154518,154494],{"class":54},[37,154520,154521],{"class":309},"\"广东\"",[37,154523,12507],{"class":54},[37,154525,1794],{"class":82},[37,154527,38116],{"class":54},[37,154529,154530,154532,154535,154537,154539],{"class":39,"line":107},[37,154531,154494],{"class":54},[37,154533,154534],{"class":309},"\"浙江\"",[37,154536,12507],{"class":54},[37,154538,147364],{"class":82},[37,154540,38116],{"class":54},[37,154542,154543],{"class":39,"line":1390},[37,154544,33315],{"class":54},[37,154546,154547],{"class":39,"line":1402},[37,154548,2472],{"emptyLinePlaceholder":131},[37,154550,154551,154554,154556],{"class":39,"line":1684},[37,154552,154553],{"class":54},"map_chart ",[37,154555,70],{"class":50},[37,154557,154558],{"class":54}," Map()\n",[37,154560,154561,154564,154566,154569,154572],{"class":39,"line":1689},[37,154562,154563],{"class":54},"map_chart.add(",[37,154565,147342],{"class":309},[37,154567,154568],{"class":54},", data, ",[37,154570,154571],{"class":309},"\"china\"",[37,154573,214],{"class":54},[37,154575,154576],{"class":39,"line":1695},[37,154577,154578],{"class":54},"map_chart.set_global_opts(\n",[37,154580,154581,154583,154585,154587,154589,154591,154594],{"class":39,"line":1700},[37,154582,147520],{"class":5288},[37,154584,70],{"class":50},[37,154586,147525],{"class":54},[37,154588,51475],{"class":5288},[37,154590,70],{"class":50},[37,154592,154593],{"class":309},"\"地区销售额\"",[37,154595,38116],{"class":54},[37,154597,154598,154601,154603,154606,154609,154611,154613],{"class":39,"line":1714},[37,154599,154600],{"class":5288},"    visualmap_opts",[37,154602,70],{"class":50},[37,154604,154605],{"class":54},"opts.VisualMapOpts(",[37,154607,154608],{"class":5288},"max_",[37,154610,70],{"class":50},[37,154612,1794],{"class":82},[37,154614,38116],{"class":54},[37,154616,154617],{"class":39,"line":1719},[37,154618,214],{"class":54},[37,154620,154621,154624,154627],{"class":39,"line":1725},[37,154622,154623],{"class":54},"map_chart.render(",[37,154625,154626],{"class":309},"\"map_sales.html\"",[37,154628,214],{"class":54},[14,154630,154631],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[146,154633,154635],{"id":154634},"_129-项目拆分建议","12.9 项目拆分建议",[14,154637,154638],{},"当代码超过一个文件时，可以这样组织：",[27,154640,154643],{"className":154641,"code":154642,"language":5259,"meta":32},[5257],"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",[34,154644,154642],{"__ignoreMap":32},[14,154646,154647],{},"职责：",[158,154649,154650,154656,154662,154668],{},[161,154651,154652,154655],{},[34,154653,154654],{},"main.py","：程序入口。",[161,154657,154658,154661],{},[34,154659,154660],{},"file_utils.py","：读写 JSON。",[161,154663,154664,154667],{},[34,154665,154666],{},"sales_service.py","：统计销售数据。",[161,154669,154670,154673],{},[34,154671,154672],{},"chart_builder.py","：生成图表。",[146,154675,154677],{"id":154676},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,154679,154680],{},"语法基础：",[158,154682,154683,154686,154689,154692],{},[161,154684,154685],{},"会写变量、注释、输入输出。",[161,154687,154688],{},"会使用 int、float、str、bool。",[161,154690,154691],{},"会做类型转换。",[161,154693,154694],{},"会使用 f-string 格式化输出。",[14,154696,154697],{},"流程控制：",[158,154699,154700,154706,154712,154720],{},[161,154701,154702,154703,28458],{},"会写 ",[34,154704,154705],{},"if elif else",[161,154707,154702,154708,101065,154710,28458],{},[34,154709,108710],{},[34,154711,3097],{},[161,154713,154714,154715,101065,154717,28458],{},"理解 ",[34,154716,2125],{},[34,154718,154719],{},"continue",[161,154721,154722],{},"能写嵌套循环。",[14,154724,154725],{},"函数：",[158,154727,154728,154731,154734,154737],{},[161,154729,154730],{},"会定义和调用函数。",[161,154732,154733],{},"理解参数和返回值。",[161,154735,154736],{},"知道局部变量和全局变量。",[161,154738,154739],{},"会使用默认参数、关键字参数、不定长参数。",[14,154741,154742],{},"容器：",[158,154744,154745,154748,154751,154754,154757],{},[161,154746,154747],{},"会使用列表增删改查。",[161,154749,154750],{},"会遍历列表、字典。",[161,154752,154753],{},"会使用切片。",[161,154755,154756],{},"会用集合去重。",[161,154758,154759],{},"会处理列表嵌套字典。",[14,154761,154762],{},"文件和模块：",[158,154764,154765,154768,154771,154774,154777],{},[161,154766,154767],{},"会读写文本文件。",[161,154769,154770],{},"会读写 JSON。",[161,154772,154773],{},"会捕获常见异常。",[161,154775,154776],{},"会导入模块和第三方包。",[161,154778,154779],{},"会创建简单包结构。",[14,154781,154782],{},"项目能力：",[158,154784,154785,154788,154791,154794,154797],{},[161,154786,154787],{},"能把代码拆成函数。",[161,154789,154790],{},"能把数据保存到文件。",[161,154792,154793],{},"能处理用户输入错误。",[161,154795,154796],{},"能写一个完整菜单程序。",[161,154798,154799],{},"能用 pyecharts 生成图表。",[146,154801,154803],{"id":154802},"_1211-推荐练习顺序","12.11 推荐练习顺序",[158,154805,154806,154809,154812,154815,154818,154821,154824,154827],{},[161,154807,154808],{},"猜数字游戏。",[161,154810,154811],{},"ATM 菜单程序。",[161,154813,154814],{},"学生成绩统计。",[161,154816,154817],{},"学生管理系统函数版。",[161,154819,154820],{},"学生管理系统文件持久化版。",[161,154822,154823],{},"学生管理系统面向对象版。",[161,154825,154826],{},"销售数据统计。",[161,154828,154829],{},"销售数据可视化。",[146,154831,154833],{"id":154832},"_1212-常见学习误区","12.12 常见学习误区",[158,154835,154836,154839,154842,154845,154848,154851,154854],{},[161,154837,154838],{},"只看视频不敲代码。",[161,154840,154841],{},"一报错就复制错误去搜，不先读报错位置。",[161,154843,154844],{},"变量名随便写，后续自己看不懂。",[161,154846,154847],{},"所有代码都写在一个文件一个函数里。",[161,154849,154850],{},"不保存练习代码，复习时没有材料。",[161,154852,154853],{},"还没掌握列表字典就急着学框架。",[161,154855,154856],{},"不会读官方文档，只依赖教程。",[146,154858,154860],{"id":154859},"_1213-如何读报错","12.13 如何读报错",[14,154862,154863],{},"报错通常从下往上看最后几行。",[14,154865,15207],{},[27,154867,154870],{"className":154868,"code":154869,"language":5259,"meta":32},[5257],"ValueError: invalid literal for int() with base 10: 'abc'\n",[34,154871,154869],{"__ignoreMap":32},[14,154873,24672],{},[158,154875,154876,154882,154892],{},[161,154877,154878,154879,28458],{},"异常类型是 ",[34,154880,154881],{},"ValueError",[161,154883,107392,154884,154887,154888,154891],{},[34,154885,154886],{},"int()"," 无法把 ",[34,154889,154890],{},"'abc'"," 转成整数。",[161,154893,154894],{},"应该检查输入内容或增加异常处理。",[14,154896,154897],{},"再看文件名和行号：",[27,154899,154902],{"className":154900,"code":154901,"language":5259,"meta":32},[5257],"File \"main.py\", line 10, in \u003Cmodule>\n",[34,154903,154901],{"__ignoreMap":32},[14,154905,154906,154907,154909],{},"表示错误发生在 ",[34,154908,154654],{}," 第 10 行。",[146,154911,154913],{"id":154912},"_1214-后续学习方向","12.14 后续学习方向",[14,154915,154916],{},"Python 基础完成后，可以按兴趣选择方向：",[158,154918,154919,154931,154940,154952,154963,154972,154982],{},[161,154920,154921,154922,417,154925,417,154928,28458],{},"自动化办公：",[34,154923,154924],{},"openpyxl",[34,154926,154927],{},"python-docx",[34,154929,154930],{},"pdfplumber",[161,154932,154933,154934,417,154936,417,154938,28458],{},"数据分析：",[34,154935,100673],{},[34,154937,146232],{},[34,154939,146240],{},[161,154941,154942,154943,417,154946,417,154949,28458],{},"Web 后端：",[34,154944,154945],{},"Flask",[34,154947,154948],{},"FastAPI",[34,154950,154951],{},"Django",[161,154953,154954,154955,417,154957,417,154960,28458],{},"爬虫：",[34,154956,146217],{},[34,154958,154959],{},"BeautifulSoup",[34,154961,154962],{},"Scrapy",[161,154964,154965,154966,417,154968,154971],{},"测试开发：",[34,154967,146264],{},[34,154969,154970],{},"selenium","、接口测试。",[161,154973,154974,154975,417,154977,417,154979,28458],{},"人工智能：",[34,154976,100673],{},[34,154978,146232],{},[34,154980,154981],{},"pytorch",[161,154983,154984,154985,417,154987,417,154990,28458],{},"运维脚本：",[34,154986,145833],{},[34,154988,154989],{},"subprocess",[34,154991,154992],{},"paramiko",[14,154994,154995],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[146,154997,154999],{"id":154998},"_1215-结课练习","12.15 结课练习",[158,155001,155002,155005,155008,155011,155014,155017,155020,155023],{},[161,155003,155004],{},"完成函数版学生管理系统。",[161,155006,155007],{},"给学生管理系统增加 JSON 持久化。",[161,155009,155010],{},"给学生管理系统增加异常处理。",[161,155012,155013],{},"把学生管理系统改成面向对象版。",[161,155015,155016],{},"使用 pyecharts 绘制学生成绩柱状图。",[161,155018,155019],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[161,155021,155022],{},"按品类统计销售额并绘制柱状图。",[161,155024,155025],{},"写一份自己的 Python 学习路线图。",[123,155027,155028],{},"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":32,"searchDepth":47,"depth":47,"links":155030},[155031,155032,155035,155036,155037,155043,155044,155045,155046,155047,155048,155049,155050,155051,155052],{"id":151747,"depth":47,"text":151748},{"id":151797,"depth":47,"text":151798,"children":155033},[155034],{"id":151801,"depth":58,"text":151802},{"id":151840,"depth":47,"text":151841},{"id":153314,"depth":47,"text":153315},{"id":153652,"depth":47,"text":153653,"children":155038},[155039,155040,155041,155042],{"id":153656,"depth":58,"text":153657},{"id":153796,"depth":58,"text":153797},{"id":153886,"depth":58,"text":153887},{"id":153972,"depth":58,"text":153973},{"id":154013,"depth":47,"text":154014},{"id":154206,"depth":47,"text":154207},{"id":154443,"depth":47,"text":154444},{"id":154634,"depth":47,"text":154635},{"id":154676,"depth":47,"text":154677},{"id":154802,"depth":47,"text":154803},{"id":154832,"depth":47,"text":154833},{"id":154859,"depth":47,"text":154860},{"id":154912,"depth":47,"text":154913},{"id":154998,"depth":47,"text":154999},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151739,"description":128},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155059,"title":155060,"body":155061,"description":128,"extension":129,"meta":157530,"navigation":131,"path":157531,"seo":157532,"stem":157533,"__hash__":157534},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155062,"toc":157505},[155063,155066,155070,155073,155076,155096,155099,155122,155125,155128,155150,155153,155175,155179,155182,155222,155225,155346,155350,155353,155393,155396,155420,155423,155427,155430,155444,155477,155480,155515,155518,155541,155544,155577,155580,155582,155588,155663,155666,155672,155689,155729,155733,155736,155782,155784,155822,155825,155860,155863,155898,155901,155933,155936,155955,155959,155963,156076,156078,156153,156157,156203,156206,156232,156241,156245,156248,156311,156319,156347,156351,156391,156456,156460,156463,156502,156505,156550,156553,156614,156618,156645,156648,156676,156679,156683,156687,156752,156755,156793,156796,156828,156832,156931,156935,156938,157011,157014,157062,157066,157072,157112,157115,157162,157165,157214,157218,157220,157234,157236,157417,157421,157448,157468,157475,157479,157496,157502],[10,155064,155060],{"id":155065},"_2-基础语法变量与字符串",[146,155067,155069],{"id":155068},"_21-注释","2.1 注释",[14,155071,155072],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155074,155075],{},"单行注释：",[27,155077,155079],{"className":29,"code":155078,"language":31,"meta":32,"style":32},"# 这是单行注释\nprint(\"hello\")\n",[34,155080,155081,155086],{"__ignoreMap":32},[37,155082,155083],{"class":39,"line":40},[37,155084,155085],{"class":43},"# 这是单行注释\n",[37,155087,155088,155090,155092,155094],{"class":39,"line":47},[37,155089,30485],{"class":82},[37,155091,208],{"class":54},[37,155093,5916],{"class":309},[37,155095,214],{"class":54},[14,155097,155098],{},"多行说明常用三引号：",[27,155100,155102],{"className":29,"code":155101,"language":31,"meta":32,"style":32},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[34,155103,155104,155108,155113,155118],{"__ignoreMap":32},[37,155105,155106],{"class":39,"line":40},[37,155107,95745],{"class":309},[37,155109,155110],{"class":39,"line":47},[37,155111,155112],{"class":309},"这是多行说明。\n",[37,155114,155115],{"class":39,"line":58},[37,155116,155117],{"class":309},"常用于文件顶部说明、函数说明等。\n",[37,155119,155120],{"class":39,"line":64},[37,155121,95745],{"class":309},[14,155123,155124],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155126,155127],{},"不好：",[27,155129,155131],{"className":29,"code":155130,"language":31,"meta":32,"style":32},"# age 加 1\nage = age + 1\n",[34,155132,155133,155138],{"__ignoreMap":32},[37,155134,155135],{"class":39,"line":40},[37,155136,155137],{"class":43},"# age 加 1\n",[37,155139,155140,155142,155144,155146,155148],{"class":39,"line":47},[37,155141,146593],{"class":54},[37,155143,70],{"class":50},[37,155145,15779],{"class":54},[37,155147,685],{"class":50},[37,155149,55767],{"class":82},[14,155151,155152],{},"较好：",[27,155154,155156],{"className":29,"code":155155,"language":31,"meta":32,"style":32},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[34,155157,155158,155163],{"__ignoreMap":32},[37,155159,155160],{"class":39,"line":40},[37,155161,155162],{"class":43},"# 用户过完生日后，年龄增加一岁\n",[37,155164,155165,155167,155169,155171,155173],{"class":39,"line":47},[37,155166,146593],{"class":54},[37,155168,70],{"class":50},[37,155170,15779],{"class":54},[37,155172,685],{"class":50},[37,155174,55767],{"class":82},[146,155176,155178],{"id":155177},"_22-字面量","2.2 字面量",[14,155180,155181],{},"字面量就是代码中直接写出来的数据。",[27,155183,155185],{"className":29,"code":155184,"language":31,"meta":32,"style":32},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[34,155186,155187,155194,155201,155208,155215],{"__ignoreMap":32},[37,155188,155189,155191],{"class":39,"line":40},[37,155190,516],{"class":82},[37,155192,155193],{"class":43},"          # 整数\n",[37,155195,155196,155198],{"class":39,"line":47},[37,155197,255],{"class":82},[37,155199,155200],{"class":43},"         # 小数\n",[37,155202,155203,155205],{"class":39,"line":58},[37,155204,5916],{"class":309},[37,155206,155207],{"class":43},"      # 字符串\n",[37,155209,155210,155212],{"class":39,"line":64},[37,155211,31546],{"class":82},[37,155213,155214],{"class":43},"         # 布尔值\n",[37,155216,155217,155219],{"class":39,"line":76},[37,155218,95733],{"class":82},[37,155220,155221],{"class":43},"         # 空值\n",[14,155223,155224],{},"常见字面量类型：",[342,155226,155227,155237],{},[345,155228,155229],{},[348,155230,155231,155233,155235],{},[351,155232,23809],{},[351,155234,27565],{},[351,155236,25942],{},[389,155238,155239,155250,155261,155272,155284,155296,155308,155321,155333],{},[348,155240,155241,155243,155247],{},[394,155242,211],{},[394,155244,155245],{},[34,155246,516],{},[394,155248,155249],{},"整数",[348,155251,155252,155254,155258],{},[394,155253,247],{},[394,155255,155256],{},[34,155257,255],{},[394,155259,155260],{},"浮点数",[348,155262,155263,155265,155269],{},[394,155264,1373],{},[394,155266,155267],{},[34,155268,5916],{},[394,155270,155271],{},"字符串",[348,155273,155274,155276,155282],{},[394,155275,1427],{},[394,155277,155278,417,155280],{},[34,155279,31546],{},[34,155281,34056],{},[394,155283,66083],{},[348,155285,155286,155289,155293],{},[394,155287,155288],{},"NoneType",[394,155290,155291],{},[34,155292,95733],{},[394,155294,155295],{},"空值",[348,155297,155298,155300,155305],{},[394,155299,154117],{},[394,155301,155302],{},[34,155303,155304],{},"[1, 2, 3]",[394,155306,155307],{},"列表",[348,155309,155310,155313,155318],{},[394,155311,155312],{},"tuple",[394,155314,155315],{},[34,155316,155317],{},"(1, 2, 3)",[394,155319,155320],{},"元组",[348,155322,155323,155325,155330],{},[394,155324,114593],{},[394,155326,155327],{},[34,155328,155329],{},"{\"name\": \"张三\"}",[394,155331,155332],{},"字典",[348,155334,155335,155338,155343],{},[394,155336,155337],{},"set",[394,155339,155340],{},[34,155341,155342],{},"{1, 2, 3}",[394,155344,155345],{},"集合",[146,155347,155349],{"id":155348},"_23-变量","2.3 变量",[14,155351,155352],{},"变量是保存数据的名字。",[27,155354,155356],{"className":29,"code":155355,"language":31,"meta":32,"style":32},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[34,155357,155358,155366,155374,155384],{"__ignoreMap":32},[37,155359,155360,155362,155364],{"class":39,"line":40},[37,155361,146583],{"class":54},[37,155363,70],{"class":50},[37,155365,149400],{"class":309},[37,155367,155368,155370,155372],{"class":39,"line":47},[37,155369,146593],{"class":54},[37,155371,70],{"class":50},[37,155373,146598],{"class":82},[37,155375,155376,155379,155381],{"class":39,"line":58},[37,155377,155378],{"class":54},"height ",[37,155380,70],{"class":50},[37,155382,155383],{"class":82}," 1.75\n",[37,155385,155386,155389,155391],{"class":39,"line":64},[37,155387,155388],{"class":54},"is_student ",[37,155390,70],{"class":50},[37,155392,153646],{"class":82},[14,155394,155395],{},"Python 的变量不需要提前声明类型：",[27,155397,155399],{"className":29,"code":155398,"language":31,"meta":32,"style":32},"score = 100\nscore = \"满分\"\n",[34,155400,155401,155411],{"__ignoreMap":32},[37,155402,155403,155406,155408],{"class":39,"line":40},[37,155404,155405],{"class":54},"score ",[37,155407,70],{"class":50},[37,155409,155410],{"class":82}," 100\n",[37,155412,155413,155415,155417],{"class":39,"line":47},[37,155414,155405],{"class":54},[37,155416,70],{"class":50},[37,155418,155419],{"class":309}," \"满分\"\n",[14,155421,155422],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[146,155424,155426],{"id":155425},"_24-变量命名规则","2.4 变量命名规则",[14,155428,155429],{},"硬性规则：",[158,155431,155432,155435,155438,155441],{},[161,155433,155434],{},"只能由字母、数字、下划线组成。",[161,155436,155437],{},"不能以数字开头。",[161,155439,155440],{},"不能使用 Python 关键字。",[161,155442,155443],{},"区分大小写。",[27,155445,155447],{"className":29,"code":155446,"language":31,"meta":32,"style":32},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[34,155448,155449,155458,155467],{"__ignoreMap":32},[37,155450,155451,155454,155456],{"class":39,"line":40},[37,155452,155453],{"class":54},"user_name ",[37,155455,70],{"class":50},[37,155457,146588],{"class":309},[37,155459,155460,155463,155465],{"class":39,"line":47},[37,155461,155462],{"class":54},"age2 ",[37,155464,70],{"class":50},[37,155466,146598],{"class":82},[37,155468,155469,155472,155474],{"class":39,"line":58},[37,155470,155471],{"class":54},"_token ",[37,155473,70],{"class":50},[37,155475,155476],{"class":309}," \"abc\"\n",[14,155478,155479],{},"错误写法：",[27,155481,155483],{"className":29,"code":155482,"language":31,"meta":32,"style":32},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[34,155484,155485,155494,155506],{"__ignoreMap":32},[37,155486,155487,155490,155492],{"class":39,"line":40},[37,155488,155489],{"class":77471},"2age",[37,155491,13636],{"class":50},[37,155493,146598],{"class":82},[37,155495,155496,155498,155500,155502,155504],{"class":39,"line":47},[37,155497,131631],{"class":54},[37,155499,112],{"class":50},[37,155501,146583],{"class":54},[37,155503,70],{"class":50},[37,155505,146588],{"class":309},[37,155507,155508,155510,155512],{"class":39,"line":58},[37,155509,14766],{"class":50},[37,155511,13636],{"class":50},[37,155513,155514],{"class":309}," \"一班\"\n",[14,155516,155517],{},"查看关键字：",[27,155519,155521],{"className":29,"code":155520,"language":31,"meta":32,"style":32},"import keyword\n\nprint(keyword.kwlist)\n",[34,155522,155523,155530,155534],{"__ignoreMap":32},[37,155524,155525,155527],{"class":39,"line":40},[37,155526,51],{"class":50},[37,155528,155529],{"class":54}," keyword\n",[37,155531,155532],{"class":39,"line":47},[37,155533,2472],{"emptyLinePlaceholder":131},[37,155535,155536,155538],{"class":39,"line":58},[37,155537,30485],{"class":82},[37,155539,155540],{"class":54},"(keyword.kwlist)\n",[14,155542,155543],{},"推荐命名风格：",[27,155545,155547],{"className":29,"code":155546,"language":31,"meta":32,"style":32},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[34,155548,155549,155558,155568],{"__ignoreMap":32},[37,155550,155551,155554,155556],{"class":39,"line":40},[37,155552,155553],{"class":54},"student_name ",[37,155555,70],{"class":50},[37,155557,149400],{"class":309},[37,155559,155560,155563,155565],{"class":39,"line":47},[37,155561,155562],{"class":54},"total_price ",[37,155564,70],{"class":50},[37,155566,155567],{"class":82}," 99.8\n",[37,155569,155570,155573,155575],{"class":39,"line":58},[37,155571,155572],{"class":54},"is_finished ",[37,155574,70],{"class":50},[37,155576,125854],{"class":82},[14,155578,155579],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[146,155581,50800],{"id":50799},[14,155583,104413,155584,155587],{},[34,155585,155586],{},"type()"," 查看数据类型：",[27,155589,155591],{"className":29,"code":155590,"language":31,"meta":32,"style":32},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[34,155592,155593,155607,155621,155635,155649],{"__ignoreMap":32},[37,155594,155595,155597,155599,155601,155603,155605],{"class":39,"line":40},[37,155596,30485],{"class":82},[37,155598,208],{"class":54},[37,155600,103154],{"class":82},[37,155602,208],{"class":54},[37,155604,516],{"class":82},[37,155606,30567],{"class":54},[37,155608,155609,155611,155613,155615,155617,155619],{"class":39,"line":47},[37,155610,30485],{"class":82},[37,155612,208],{"class":54},[37,155614,103154],{"class":82},[37,155616,208],{"class":54},[37,155618,255],{"class":82},[37,155620,30567],{"class":54},[37,155622,155623,155625,155627,155629,155631,155633],{"class":39,"line":58},[37,155624,30485],{"class":82},[37,155626,208],{"class":54},[37,155628,103154],{"class":82},[37,155630,208],{"class":54},[37,155632,5916],{"class":309},[37,155634,30567],{"class":54},[37,155636,155637,155639,155641,155643,155645,155647],{"class":39,"line":64},[37,155638,30485],{"class":82},[37,155640,208],{"class":54},[37,155642,103154],{"class":82},[37,155644,208],{"class":54},[37,155646,31546],{"class":82},[37,155648,30567],{"class":54},[37,155650,155651,155653,155655,155657,155659,155661],{"class":39,"line":76},[37,155652,30485],{"class":82},[37,155654,208],{"class":54},[37,155656,103154],{"class":82},[37,155658,208],{"class":54},[37,155660,95733],{"class":82},[37,155662,30567],{"class":54},[14,155664,155665],{},"输出类似：",[27,155667,155670],{"className":155668,"code":155669,"language":5259,"meta":32},[5257],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[34,155671,155669],{"__ignoreMap":32},[14,155673,9097,155674,107330,155676,155678,155679,155681,155682,21572,155684,155681,155686,155688],{},[34,155675,1427],{},[34,155677,211],{}," 的子类，",[34,155680,31546],{}," 可以当作 ",[34,155683,422],{},[34,155685,34056],{},[34,155687,396],{},"，但业务代码中不要滥用。",[27,155690,155692],{"className":29,"code":155691,"language":31,"meta":32,"style":32},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[34,155693,155694,155712],{"__ignoreMap":32},[37,155695,155696,155698,155700,155702,155704,155706,155709],{"class":39,"line":40},[37,155697,30485],{"class":82},[37,155699,208],{"class":54},[37,155701,31546],{"class":82},[37,155703,45635],{"class":50},[37,155705,25191],{"class":82},[37,155707,155708],{"class":54},")   ",[37,155710,155711],{"class":43},"# 2\n",[37,155713,155714,155716,155718,155720,155722,155724,155726],{"class":39,"line":47},[37,155715,30485],{"class":82},[37,155717,208],{"class":54},[37,155719,34056],{"class":82},[37,155721,45635],{"class":50},[37,155723,25191],{"class":82},[37,155725,45876],{"class":54},[37,155727,155728],{"class":43},"# 1\n",[146,155730,155732],{"id":155731},"_26-类型转换","2.6 类型转换",[14,155734,155735],{},"常用转换函数：",[27,155737,155739],{"className":29,"code":155738,"language":31,"meta":32,"style":32},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[34,155740,155741,155751,155762,155772],{"__ignoreMap":32},[37,155742,155743,155745,155747,155749],{"class":39,"line":40},[37,155744,211],{"class":82},[37,155746,208],{"class":54},[37,155748,54384],{"class":309},[37,155750,214],{"class":54},[37,155752,155753,155755,155757,155760],{"class":39,"line":47},[37,155754,247],{"class":82},[37,155756,208],{"class":54},[37,155758,155759],{"class":309},"\"3.14\"",[37,155761,214],{"class":54},[37,155763,155764,155766,155768,155770],{"class":39,"line":58},[37,155765,1373],{"class":82},[37,155767,208],{"class":54},[37,155769,516],{"class":82},[37,155771,214],{"class":54},[37,155773,155774,155776,155778,155780],{"class":39,"line":64},[37,155775,1427],{"class":82},[37,155777,208],{"class":54},[37,155779,422],{"class":82},[37,155781,214],{"class":54},[14,155783,15207],{},[27,155785,155787],{"className":29,"code":155786,"language":31,"meta":32,"style":32},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[34,155788,155789,155798,155809],{"__ignoreMap":32},[37,155790,155791,155793,155795],{"class":39,"line":40},[37,155792,146593],{"class":54},[37,155794,70],{"class":50},[37,155796,155797],{"class":309}," \"18\"\n",[37,155799,155800,155802,155804,155806],{"class":39,"line":47},[37,155801,146593],{"class":54},[37,155803,70],{"class":50},[37,155805,2454],{"class":82},[37,155807,155808],{"class":54},"(age)\n",[37,155810,155811,155813,155816,155818,155820],{"class":39,"line":58},[37,155812,30485],{"class":82},[37,155814,155815],{"class":54},"(age ",[37,155817,685],{"class":50},[37,155819,25191],{"class":82},[37,155821,214],{"class":54},[14,155823,155824],{},"输入得到的内容永远是字符串：",[27,155826,155828],{"className":29,"code":155827,"language":31,"meta":32,"style":32},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[34,155829,155830,155846],{"__ignoreMap":32},[37,155831,155832,155835,155837,155839,155841,155844],{"class":39,"line":40},[37,155833,155834],{"class":54},"num ",[37,155836,70],{"class":50},[37,155838,60673],{"class":82},[37,155840,208],{"class":54},[37,155842,155843],{"class":309},"\"请输入数字:\"",[37,155845,214],{"class":54},[37,155847,155848,155850,155852,155854,155857],{"class":39,"line":47},[37,155849,30485],{"class":82},[37,155851,208],{"class":54},[37,155853,103154],{"class":82},[37,155855,155856],{"class":54},"(num))  ",[37,155858,155859],{"class":43},"# str\n",[14,155861,155862],{},"如果要做数学运算，必须转换：",[27,155864,155866],{"className":29,"code":155865,"language":31,"meta":32,"style":32},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[34,155867,155868,155886],{"__ignoreMap":32},[37,155869,155870,155872,155874,155876,155878,155880,155882,155884],{"class":39,"line":40},[37,155871,155834],{"class":54},[37,155873,70],{"class":50},[37,155875,2454],{"class":82},[37,155877,208],{"class":54},[37,155879,53889],{"class":82},[37,155881,208],{"class":54},[37,155883,155843],{"class":309},[37,155885,30567],{"class":54},[37,155887,155888,155890,155892,155894,155896],{"class":39,"line":47},[37,155889,30485],{"class":82},[37,155891,45688],{"class":54},[37,155893,685],{"class":50},[37,155895,2110],{"class":82},[37,155897,214],{"class":54},[14,155899,155900],{},"常见错误：",[27,155902,155904],{"className":29,"code":155903,"language":31,"meta":32,"style":32},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[34,155905,155906,155919],{"__ignoreMap":32},[37,155907,155908,155910,155912,155914,155916],{"class":39,"line":40},[37,155909,211],{"class":82},[37,155911,208],{"class":54},[37,155913,155759],{"class":309},[37,155915,155708],{"class":54},[37,155917,155918],{"class":43},"# 错误\n",[37,155920,155921,155923,155925,155928,155931],{"class":39,"line":47},[37,155922,211],{"class":82},[37,155924,208],{"class":54},[37,155926,155927],{"class":309},"\"abc\"",[37,155929,155930],{"class":54},")    ",[37,155932,155918],{"class":43},[14,155934,155935],{},"正确写法：",[27,155937,155939],{"className":29,"code":155938,"language":31,"meta":32,"style":32},"num = float(\"3.14\")\n",[34,155940,155941],{"__ignoreMap":32},[37,155942,155943,155945,155947,155949,155951,155953],{"class":39,"line":40},[37,155944,155834],{"class":54},[37,155946,70],{"class":50},[37,155948,109844],{"class":82},[37,155950,208],{"class":54},[37,155952,155759],{"class":309},[37,155954,214],{"class":54},[146,155956,155958],{"id":155957},"_27-运算符","2.7 运算符",[175,155960,155962],{"id":155961},"_271-算术运算符","2.7.1 算术运算符",[342,155964,155965,155976],{},[345,155966,155967],{},[348,155968,155969,155972,155974],{},[351,155970,155971],{},"运算符",[351,155973,25942],{},[351,155975,27565],{},[389,155977,155978,155992,156006,156020,156034,156048,156062],{},[348,155979,155980,155984,155987],{},[394,155981,155982],{},[34,155983,685],{},[394,155985,155986],{},"加法",[394,155988,155989],{},[34,155990,155991],{},"1 + 2",[348,155993,155994,155998,156001],{},[394,155995,155996],{},[34,155997,112],{},[394,155999,156000],{},"减法",[394,156002,156003],{},[34,156004,156005],{},"5 - 3",[348,156007,156008,156012,156015],{},[394,156009,156010],{},[34,156011,659],{},[394,156013,156014],{},"乘法",[394,156016,156017],{},[34,156018,156019],{},"2 * 3",[348,156021,156022,156026,156029],{},[394,156023,156024],{},[34,156025,787],{},[394,156027,156028],{},"除法，结果是浮点数",[394,156030,156031],{},[34,156032,156033],{},"5 \u002F 2",[348,156035,156036,156040,156043],{},[394,156037,156038],{},[34,156039,33398],{},[394,156041,156042],{},"整除",[394,156044,156045],{},[34,156046,156047],{},"5 \u002F\u002F 2",[348,156049,156050,156054,156057],{},[394,156051,156052],{},[34,156053,533],{},[394,156055,156056],{},"取余",[394,156058,156059],{},[34,156060,156061],{},"5 % 2",[348,156063,156064,156068,156071],{},[394,156065,156066],{},[34,156067,10733],{},[394,156069,156070],{},"幂运算",[394,156072,156073],{},[34,156074,156075],{},"2 ** 3",[14,156077,15207],{},[27,156079,156081],{"className":29,"code":156080,"language":31,"meta":32,"style":32},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[34,156082,156083,156101,156118,156135],{"__ignoreMap":32},[37,156084,156085,156087,156089,156091,156094,156096,156098],{"class":39,"line":40},[37,156086,30485],{"class":82},[37,156088,208],{"class":54},[37,156090,524],{"class":82},[37,156092,156093],{"class":50}," \u002F",[37,156095,14827],{"class":82},[37,156097,155708],{"class":54},[37,156099,156100],{"class":43},"# 2.5\n",[37,156102,156103,156105,156107,156109,156112,156114,156116],{"class":39,"line":47},[37,156104,30485],{"class":82},[37,156106,208],{"class":54},[37,156108,524],{"class":82},[37,156110,156111],{"class":50}," \u002F\u002F",[37,156113,14827],{"class":82},[37,156115,45876],{"class":54},[37,156117,155711],{"class":43},[37,156119,156120,156122,156124,156126,156129,156131,156133],{"class":39,"line":58},[37,156121,30485],{"class":82},[37,156123,208],{"class":54},[37,156125,524],{"class":82},[37,156127,156128],{"class":50}," %",[37,156130,14827],{"class":82},[37,156132,155708],{"class":54},[37,156134,155728],{"class":43},[37,156136,156137,156139,156141,156143,156146,156148,156150],{"class":39,"line":64},[37,156138,30485],{"class":82},[37,156140,208],{"class":54},[37,156142,282],{"class":82},[37,156144,156145],{"class":50}," **",[37,156147,78138],{"class":82},[37,156149,45876],{"class":54},[37,156151,156152],{"class":43},"# 8\n",[175,156154,156156],{"id":156155},"_272-赋值运算符","2.7.2 赋值运算符",[27,156158,156160],{"className":29,"code":156159,"language":31,"meta":32,"style":32},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[34,156161,156162,156170,156178,156186,156194],{"__ignoreMap":32},[37,156163,156164,156166,156168],{"class":39,"line":40},[37,156165,155834],{"class":54},[37,156167,70],{"class":50},[37,156169,58496],{"class":82},[37,156171,156172,156174,156176],{"class":39,"line":47},[37,156173,155834],{"class":54},[37,156175,9549],{"class":50},[37,156177,54495],{"class":82},[37,156179,156180,156182,156184],{"class":39,"line":58},[37,156181,155834],{"class":54},[37,156183,150299],{"class":50},[37,156185,47791],{"class":82},[37,156187,156188,156190,156192],{"class":39,"line":64},[37,156189,155834],{"class":54},[37,156191,137195],{"class":50},[37,156193,120083],{"class":82},[37,156195,156196,156198,156201],{"class":39,"line":76},[37,156197,155834],{"class":54},[37,156199,156200],{"class":50},"\u002F=",[37,156202,47791],{"class":82},[14,156204,156205],{},"等价关系：",[27,156207,156209],{"className":29,"code":156208,"language":31,"meta":32,"style":32},"num += 1\nnum = num + 1\n",[34,156210,156211,156219],{"__ignoreMap":32},[37,156212,156213,156215,156217],{"class":39,"line":40},[37,156214,155834],{"class":54},[37,156216,9549],{"class":50},[37,156218,55767],{"class":82},[37,156220,156221,156223,156225,156228,156230],{"class":39,"line":47},[37,156222,155834],{"class":54},[37,156224,70],{"class":50},[37,156226,156227],{"class":54}," num ",[37,156229,685],{"class":50},[37,156231,55767],{"class":82},[14,156233,156234,156235,101065,156238,28458],{},"Python 没有 ",[34,156236,156237],{},"num++",[34,156239,156240],{},"num--",[175,156242,156244],{"id":156243},"_273-比较运算符","2.7.3 比较运算符",[14,156246,156247],{},"比较运算结果是布尔值。",[27,156249,156251],{"className":29,"code":156250,"language":31,"meta":32,"style":32},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[34,156252,156253,156267,156282,156296],{"__ignoreMap":32},[37,156254,156255,156257,156259,156261,156263,156265],{"class":39,"line":40},[37,156256,30485],{"class":82},[37,156258,208],{"class":54},[37,156260,650],{"class":82},[37,156262,26295],{"class":50},[37,156264,2220],{"class":82},[37,156266,214],{"class":54},[37,156268,156269,156271,156273,156275,156278,156280],{"class":39,"line":47},[37,156270,30485],{"class":82},[37,156272,208],{"class":54},[37,156274,650],{"class":82},[37,156276,156277],{"class":50}," >=",[37,156279,2110],{"class":82},[37,156281,214],{"class":54},[37,156283,156284,156286,156288,156290,156292,156294],{"class":39,"line":58},[37,156285,30485],{"class":82},[37,156287,208],{"class":54},[37,156289,650],{"class":82},[37,156291,101606],{"class":50},[37,156293,2155],{"class":82},[37,156295,214],{"class":54},[37,156297,156298,156300,156302,156304,156307,156309],{"class":39,"line":64},[37,156299,30485],{"class":82},[37,156301,208],{"class":54},[37,156303,650],{"class":82},[37,156305,156306],{"class":50}," !=",[37,156308,2155],{"class":82},[37,156310,214],{"class":54},[14,156312,156313,156314,156316,156317,28458],{},"注意：判断相等用 ",[34,156315,3021],{},"，赋值用 ",[34,156318,70],{},[27,156320,156322],{"className":29,"code":156321,"language":31,"meta":32,"style":32},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[34,156323,156324,156336],{"__ignoreMap":32},[37,156325,156326,156328,156330,156333],{"class":39,"line":40},[37,156327,146593],{"class":54},[37,156329,70],{"class":50},[37,156331,156332],{"class":82}," 18",[37,156334,156335],{"class":43},"       # 赋值\n",[37,156337,156338,156340,156342,156344],{"class":39,"line":47},[37,156339,146593],{"class":54},[37,156341,3021],{"class":50},[37,156343,156332],{"class":82},[37,156345,156346],{"class":43},"      # 判断是否相等\n",[175,156348,156350],{"id":156349},"_274-逻辑运算符","2.7.4 逻辑运算符",[342,156352,156353,156361],{},[345,156354,156355],{},[348,156356,156357,156359],{},[351,156358,155971],{},[351,156360,25942],{},[389,156362,156363,156372,156381],{},[348,156364,156365,156369],{},[394,156366,156367],{},[34,156368,30532],{},[394,156370,156371],{},"并且",[348,156373,156374,156378],{},[394,156375,156376],{},[34,156377,115137],{},[394,156379,156380],{},"或者",[348,156382,156383,156388],{},[394,156384,156385],{},[34,156386,156387],{},"not",[394,156389,156390],{},"取反",[27,156392,156394],{"className":29,"code":156393,"language":31,"meta":32,"style":32},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[34,156395,156396,156404,156413,156417,156432,156446],{"__ignoreMap":32},[37,156397,156398,156400,156402],{"class":39,"line":40},[37,156399,146593],{"class":54},[37,156401,70],{"class":50},[37,156403,88133],{"class":82},[37,156405,156406,156409,156411],{"class":39,"line":47},[37,156407,156408],{"class":54},"has_ticket ",[37,156410,70],{"class":50},[37,156412,153646],{"class":82},[37,156414,156415],{"class":39,"line":58},[37,156416,2472],{"emptyLinePlaceholder":131},[37,156418,156419,156421,156423,156425,156427,156429],{"class":39,"line":64},[37,156420,30485],{"class":82},[37,156422,155815],{"class":54},[37,156424,1782],{"class":50},[37,156426,156332],{"class":82},[37,156428,120476],{"class":50},[37,156430,156431],{"class":54}," has_ticket)\n",[37,156433,156434,156436,156438,156440,156442,156444],{"class":39,"line":76},[37,156435,30485],{"class":82},[37,156437,155815],{"class":54},[37,156439,1113],{"class":50},[37,156441,156332],{"class":82},[37,156443,114248],{"class":50},[37,156445,156431],{"class":54},[37,156447,156448,156450,156452,156454],{"class":39,"line":92},[37,156449,30485],{"class":82},[37,156451,208],{"class":54},[37,156453,156387],{"class":50},[37,156455,156431],{"class":54},[146,156457,156459],{"id":156458},"_28-字符串定义","2.8 字符串定义",[14,156461,156462],{},"三种常见写法：",[27,156464,156466],{"className":29,"code":156465,"language":31,"meta":32,"style":32},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[34,156467,156468,156478,156487,156497],{"__ignoreMap":32},[37,156469,156470,156473,156475],{"class":39,"line":40},[37,156471,156472],{"class":54},"name1 ",[37,156474,70],{"class":50},[37,156476,156477],{"class":309}," '小明'\n",[37,156479,156480,156483,156485],{"class":39,"line":47},[37,156481,156482],{"class":54},"name2 ",[37,156484,70],{"class":50},[37,156486,149400],{"class":309},[37,156488,156489,156492,156494],{"class":39,"line":58},[37,156490,156491],{"class":54},"text ",[37,156493,70],{"class":50},[37,156495,156496],{"class":309}," \"\"\"这是多行字符串\n",[37,156498,156499],{"class":39,"line":64},[37,156500,156501],{"class":309},"可以换行\"\"\"\n",[14,156503,156504],{},"字符串中包含引号：",[27,156506,156508],{"className":29,"code":156507,"language":31,"meta":32,"style":32},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[34,156509,156510,156520,156530],{"__ignoreMap":32},[37,156511,156512,156515,156517],{"class":39,"line":40},[37,156513,156514],{"class":54},"msg ",[37,156516,70],{"class":50},[37,156518,156519],{"class":309}," \"他说:'你好'\"\n",[37,156521,156522,156525,156527],{"class":39,"line":47},[37,156523,156524],{"class":54},"msg2 ",[37,156526,70],{"class":50},[37,156528,156529],{"class":309}," '他说:\"你好\"'\n",[37,156531,156532,156535,156537,156540,156543,156546,156548],{"class":39,"line":58},[37,156533,156534],{"class":54},"msg3 ",[37,156536,70],{"class":50},[37,156538,156539],{"class":309}," \"他说:",[37,156541,156542],{"class":82},"\\\"",[37,156544,156545],{"class":309},"你好",[37,156547,156542],{"class":82},[37,156549,25206],{"class":309},[14,156551,156552],{},"常见转义字符：",[342,156554,156555,156564],{},[345,156556,156557],{},[348,156558,156559,156562],{},[351,156560,156561],{},"写法",[351,156563,100747],{},[389,156565,156566,156576,156585,156595,156604],{},[348,156567,156568,156573],{},[394,156569,156570],{},[34,156571,156572],{},"\\n",[394,156574,156575],{},"换行",[348,156577,156578,156582],{},[394,156579,156580],{},[34,156581,1304],{},[394,156583,156584],{},"制表符",[348,156586,156587,156592],{},[394,156588,156589],{},[34,156590,156591],{},"\\\\",[394,156593,156594],{},"反斜杠",[348,156596,156597,156601],{},[394,156598,156599],{},[34,156600,156542],{},[394,156602,156603],{},"双引号",[348,156605,156606,156611],{},[394,156607,156608],{},[34,156609,156610],{},"\\'",[394,156612,156613],{},"单引号",[146,156615,156617],{"id":156616},"_29-字符串拼接","2.9 字符串拼接",[27,156619,156621],{"className":29,"code":156620,"language":31,"meta":32,"style":32},"name = \"小明\"\nprint(\"你好，\" + name)\n",[34,156622,156623,156631],{"__ignoreMap":32},[37,156624,156625,156627,156629],{"class":39,"line":40},[37,156626,146583],{"class":54},[37,156628,70],{"class":50},[37,156630,149400],{"class":309},[37,156632,156633,156635,156637,156640,156642],{"class":39,"line":47},[37,156634,30485],{"class":82},[37,156636,208],{"class":54},[37,156638,156639],{"class":309},"\"你好，\"",[37,156641,45635],{"class":50},[37,156643,156644],{"class":54}," name)\n",[14,156646,156647],{},"字符串只能和字符串拼接：",[27,156649,156651],{"className":29,"code":156650,"language":31,"meta":32,"style":32},"age = 18\nprint(\"年龄:\" + str(age))\n",[34,156652,156653,156661],{"__ignoreMap":32},[37,156654,156655,156657,156659],{"class":39,"line":40},[37,156656,146593],{"class":54},[37,156658,70],{"class":50},[37,156660,146598],{"class":82},[37,156662,156663,156665,156667,156669,156671,156673],{"class":39,"line":47},[37,156664,30485],{"class":82},[37,156666,208],{"class":54},[37,156668,146564],{"class":309},[37,156670,45635],{"class":50},[37,156672,73987],{"class":82},[37,156674,156675],{"class":54},"(age))\n",[14,156677,156678],{},"更推荐使用格式化字符串。",[146,156680,156682],{"id":156681},"_210-字符串格式化","2.10 字符串格式化",[175,156684,156686],{"id":156685},"_2101-百分号格式化","2.10.1 百分号格式化",[27,156688,156690],{"className":29,"code":156689,"language":31,"meta":32,"style":32},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[34,156691,156692,156700,156708,156717,156721],{"__ignoreMap":32},[37,156693,156694,156696,156698],{"class":39,"line":40},[37,156695,146583],{"class":54},[37,156697,70],{"class":50},[37,156699,149400],{"class":309},[37,156701,156702,156704,156706],{"class":39,"line":47},[37,156703,146593],{"class":54},[37,156705,70],{"class":50},[37,156707,146598],{"class":82},[37,156709,156710,156712,156714],{"class":39,"line":58},[37,156711,155405],{"class":54},[37,156713,70],{"class":50},[37,156715,156716],{"class":82}," 95.5\n",[37,156718,156719],{"class":39,"line":64},[37,156720,2472],{"emptyLinePlaceholder":131},[37,156722,156723,156725,156727,156730,156733,156736,156739,156742,156745,156747,156749],{"class":39,"line":76},[37,156724,30485],{"class":82},[37,156726,208],{"class":54},[37,156728,156729],{"class":309},"\"姓名:",[37,156731,156732],{"class":82},"%s",[37,156734,156735],{"class":309}," 年龄:",[37,156737,156738],{"class":82},"%d",[37,156740,156741],{"class":309}," 分数:",[37,156743,156744],{"class":82},"%.1f",[37,156746,456],{"class":309},[37,156748,156128],{"class":50},[37,156750,156751],{"class":54}," (name, age, score))\n",[14,156753,156754],{},"常用占位符：",[342,156756,156757,156766],{},[345,156758,156759],{},[348,156760,156761,156764],{},[351,156762,156763],{},"占位符",[351,156765,25942],{},[389,156767,156768,156776,156784],{},[348,156769,156770,156774],{},[394,156771,156772],{},[34,156773,156732],{},[394,156775,155271],{},[348,156777,156778,156782],{},[394,156779,156780],{},[34,156781,156738],{},[394,156783,155249],{},[348,156785,156786,156791],{},[394,156787,156788],{},[34,156789,156790],{},"%f",[394,156792,155260],{},[14,156794,156795],{},"精度控制：",[27,156797,156799],{"className":29,"code":156798,"language":31,"meta":32,"style":32},"price = 12.3456\nprint(\"%.2f\" % price)\n",[34,156800,156801,156810],{"__ignoreMap":32},[37,156802,156803,156805,156807],{"class":39,"line":40},[37,156804,146728],{"class":54},[37,156806,70],{"class":50},[37,156808,156809],{"class":82}," 12.3456\n",[37,156811,156812,156814,156816,156818,156821,156823,156825],{"class":39,"line":47},[37,156813,30485],{"class":82},[37,156815,208],{"class":54},[37,156817,456],{"class":309},[37,156819,156820],{"class":82},"%.2f",[37,156822,456],{"class":309},[37,156824,156128],{"class":50},[37,156826,156827],{"class":54}," price)\n",[175,156829,156831],{"id":156830},"_2102-format方法","2.10.2 format方法",[27,156833,156835],{"className":29,"code":156834,"language":31,"meta":32,"style":32},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[34,156836,156837,156845,156853,156857,156876,156896],{"__ignoreMap":32},[37,156838,156839,156841,156843],{"class":39,"line":40},[37,156840,146583],{"class":54},[37,156842,70],{"class":50},[37,156844,149400],{"class":309},[37,156846,156847,156849,156851],{"class":39,"line":47},[37,156848,146593],{"class":54},[37,156850,70],{"class":50},[37,156852,146598],{"class":82},[37,156854,156855],{"class":39,"line":58},[37,156856,2472],{"emptyLinePlaceholder":131},[37,156858,156859,156861,156863,156865,156867,156869,156871,156873],{"class":39,"line":64},[37,156860,30485],{"class":82},[37,156862,208],{"class":54},[37,156864,156729],{"class":309},[37,156866,32528],{"class":82},[37,156868,156735],{"class":309},[37,156870,32528],{"class":82},[37,156872,456],{"class":309},[37,156874,156875],{"class":54},".format(name, age))\n",[37,156877,156878,156880,156882,156884,156887,156889,156892,156894],{"class":39,"line":76},[37,156879,30485],{"class":82},[37,156881,208],{"class":54},[37,156883,156729],{"class":309},[37,156885,156886],{"class":82},"{0}",[37,156888,156735],{"class":309},[37,156890,156891],{"class":82},"{1}",[37,156893,456],{"class":309},[37,156895,156875],{"class":54},[37,156897,156898,156900,156902,156904,156907,156909,156912,156914,156917,156919,156921,156924,156926,156928],{"class":39,"line":92},[37,156899,30485],{"class":82},[37,156901,208],{"class":54},[37,156903,156729],{"class":309},[37,156905,156906],{"class":82},"{name}",[37,156908,156735],{"class":309},[37,156910,156911],{"class":82},"{age}",[37,156913,456],{"class":309},[37,156915,156916],{"class":54},".format(",[37,156918,79878],{"class":5288},[37,156920,70],{"class":50},[37,156922,156923],{"class":54},"name, ",[37,156925,70289],{"class":5288},[37,156927,70],{"class":50},[37,156929,156930],{"class":54},"age))\n",[175,156932,156934],{"id":156933},"_2103-f-string","2.10.3 f-string",[14,156936,156937],{},"推荐写法：",[27,156939,156941],{"className":29,"code":156940,"language":31,"meta":32,"style":32},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[34,156942,156943,156951,156959,156967,156971],{"__ignoreMap":32},[37,156944,156945,156947,156949],{"class":39,"line":40},[37,156946,146583],{"class":54},[37,156948,70],{"class":50},[37,156950,149400],{"class":309},[37,156952,156953,156955,156957],{"class":39,"line":47},[37,156954,146593],{"class":54},[37,156956,70],{"class":50},[37,156958,146598],{"class":82},[37,156960,156961,156963,156965],{"class":39,"line":58},[37,156962,155405],{"class":54},[37,156964,70],{"class":50},[37,156966,156716],{"class":82},[37,156968,156969],{"class":39,"line":64},[37,156970,2472],{"emptyLinePlaceholder":131},[37,156972,156973,156975,156977,156979,156981,156983,156985,156987,156989,156991,156993,156995,156997,156999,157002,157005,157007,157009],{"class":39,"line":76},[37,156974,30485],{"class":82},[37,156976,208],{"class":54},[37,156978,258],{"class":50},[37,156980,156729],{"class":309},[37,156982,1099],{"class":82},[37,156984,79878],{"class":54},[37,156986,1149],{"class":82},[37,156988,156735],{"class":309},[37,156990,1099],{"class":82},[37,156992,70289],{"class":54},[37,156994,1149],{"class":82},[37,156996,156741],{"class":309},[37,156998,1099],{"class":82},[37,157000,157001],{"class":54},"score",[37,157003,157004],{"class":50},":.1f",[37,157006,1149],{"class":82},[37,157008,456],{"class":309},[37,157010,214],{"class":54},[14,157012,157013],{},"表达式也可以放进去：",[27,157015,157017],{"className":29,"code":157016,"language":31,"meta":32,"style":32},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[34,157018,157019,157027,157035],{"__ignoreMap":32},[37,157020,157021,157023,157025],{"class":39,"line":40},[37,157022,146728],{"class":54},[37,157024,70],{"class":50},[37,157026,146733],{"class":82},[37,157028,157029,157031,157033],{"class":39,"line":47},[37,157030,146738],{"class":54},[37,157032,70],{"class":50},[37,157034,54495],{"class":82},[37,157036,157037,157039,157041,157043,157046,157048,157050,157052,157055,157057,157060],{"class":39,"line":58},[37,157038,30485],{"class":82},[37,157040,208],{"class":54},[37,157042,258],{"class":50},[37,157044,157045],{"class":309},"\"总价:",[37,157047,1099],{"class":82},[37,157049,146728],{"class":54},[37,157051,659],{"class":50},[37,157053,157054],{"class":54}," count",[37,157056,1149],{"class":82},[37,157058,157059],{"class":309},"元\"",[37,157061,214],{"class":54},[146,157063,157065],{"id":157064},"_211-input输入","2.11 input输入",[14,157067,157068,157071],{},[34,157069,157070],{},"input()"," 会暂停程序，等待用户输入。",[27,157073,157075],{"className":29,"code":157074,"language":31,"meta":32,"style":32},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[34,157076,157077,157091],{"__ignoreMap":32},[37,157078,157079,157081,157083,157085,157087,157089],{"class":39,"line":40},[37,157080,146583],{"class":54},[37,157082,70],{"class":50},[37,157084,60673],{"class":82},[37,157086,208],{"class":54},[37,157088,152426],{"class":309},[37,157090,214],{"class":54},[37,157092,157093,157095,157097,157099,157102,157104,157106,157108,157110],{"class":39,"line":47},[37,157094,30485],{"class":82},[37,157096,208],{"class":54},[37,157098,258],{"class":50},[37,157100,157101],{"class":309},"\"你好，",[37,157103,1099],{"class":82},[37,157105,79878],{"class":54},[37,157107,1149],{"class":82},[37,157109,456],{"class":309},[37,157111,214],{"class":54},[14,157113,157114],{},"输入整数：",[27,157116,157118],{"className":29,"code":157117,"language":31,"meta":32,"style":32},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[34,157119,157120,157138],{"__ignoreMap":32},[37,157121,157122,157124,157126,157128,157130,157132,157134,157136],{"class":39,"line":40},[37,157123,146593],{"class":54},[37,157125,70],{"class":50},[37,157127,2454],{"class":82},[37,157129,208],{"class":54},[37,157131,53889],{"class":82},[37,157133,208],{"class":54},[37,157135,152441],{"class":309},[37,157137,30567],{"class":54},[37,157139,157140,157142,157144,157146,157149,157151,157153,157155,157158,157160],{"class":39,"line":47},[37,157141,30485],{"class":82},[37,157143,208],{"class":54},[37,157145,258],{"class":50},[37,157147,157148],{"class":309},"\"明年你",[37,157150,1099],{"class":82},[37,157152,146593],{"class":54},[37,157154,685],{"class":50},[37,157156,157157],{"class":82}," 1}",[37,157159,149451],{"class":309},[37,157161,214],{"class":54},[14,157163,157164],{},"输入小数：",[27,157166,157168],{"className":29,"code":157167,"language":31,"meta":32,"style":32},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[34,157169,157170,157189],{"__ignoreMap":32},[37,157171,157172,157174,157176,157178,157180,157182,157184,157187],{"class":39,"line":40},[37,157173,155378],{"class":54},[37,157175,70],{"class":50},[37,157177,109844],{"class":82},[37,157179,208],{"class":54},[37,157181,53889],{"class":82},[37,157183,208],{"class":54},[37,157185,157186],{"class":309},"\"请输入身高:\"",[37,157188,30567],{"class":54},[37,157190,157191,157193,157195,157197,157200,157202,157204,157207,157209,157212],{"class":39,"line":47},[37,157192,30485],{"class":82},[37,157194,208],{"class":54},[37,157196,258],{"class":50},[37,157198,157199],{"class":309},"\"身高:",[37,157201,1099],{"class":82},[37,157203,25054],{"class":54},[37,157205,157206],{"class":50},":.2f",[37,157208,1149],{"class":82},[37,157210,157211],{"class":309},"米\"",[37,157213,214],{"class":54},[146,157215,157217],{"id":157216},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157219,123339],{},[158,157221,157222,157225,157228,157231],{},[161,157223,157224],{},"输入商品单价。",[161,157226,157227],{},"输入购买数量。",[161,157229,157230],{},"输入折扣，例如 0.8 表示八折。",[161,157232,157233],{},"输出最终金额，保留两位小数。",[14,157235,10107],{},[27,157237,157239],{"className":29,"code":157238,"language":31,"meta":32,"style":32},"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",[34,157240,157241,157260,157279,157299,157303,157323,157327,157350,157371,157393],{"__ignoreMap":32},[37,157242,157243,157245,157247,157249,157251,157253,157255,157258],{"class":39,"line":40},[37,157244,146728],{"class":54},[37,157246,70],{"class":50},[37,157248,109844],{"class":82},[37,157250,208],{"class":54},[37,157252,53889],{"class":82},[37,157254,208],{"class":54},[37,157256,157257],{"class":309},"\"请输入商品单价:\"",[37,157259,30567],{"class":54},[37,157261,157262,157264,157266,157268,157270,157272,157274,157277],{"class":39,"line":47},[37,157263,146738],{"class":54},[37,157265,70],{"class":50},[37,157267,2454],{"class":82},[37,157269,208],{"class":54},[37,157271,53889],{"class":82},[37,157273,208],{"class":54},[37,157275,157276],{"class":309},"\"请输入购买数量:\"",[37,157278,30567],{"class":54},[37,157280,157281,157284,157286,157288,157290,157292,157294,157297],{"class":39,"line":58},[37,157282,157283],{"class":54},"discount ",[37,157285,70],{"class":50},[37,157287,109844],{"class":82},[37,157289,208],{"class":54},[37,157291,53889],{"class":82},[37,157293,208],{"class":54},[37,157295,157296],{"class":309},"\"请输入折扣:\"",[37,157298,30567],{"class":54},[37,157300,157301],{"class":39,"line":64},[37,157302,2472],{"emptyLinePlaceholder":131},[37,157304,157305,157308,157310,157313,157315,157318,157320],{"class":39,"line":76},[37,157306,157307],{"class":54},"total ",[37,157309,70],{"class":50},[37,157311,157312],{"class":54}," price ",[37,157314,659],{"class":50},[37,157316,157317],{"class":54}," count ",[37,157319,659],{"class":50},[37,157321,157322],{"class":54}," discount\n",[37,157324,157325],{"class":39,"line":92},[37,157326,2472],{"emptyLinePlaceholder":131},[37,157328,157329,157331,157333,157335,157338,157340,157342,157344,157346,157348],{"class":39,"line":97},[37,157330,30485],{"class":82},[37,157332,208],{"class":54},[37,157334,258],{"class":50},[37,157336,157337],{"class":309},"\"商品单价:",[37,157339,1099],{"class":82},[37,157341,79883],{"class":54},[37,157343,157206],{"class":50},[37,157345,1149],{"class":82},[37,157347,456],{"class":309},[37,157349,214],{"class":54},[37,157351,157352,157354,157356,157358,157361,157363,157365,157367,157369],{"class":39,"line":107},[37,157353,30485],{"class":82},[37,157355,208],{"class":54},[37,157357,258],{"class":50},[37,157359,157360],{"class":309},"\"购买数量:",[37,157362,1099],{"class":82},[37,157364,84502],{"class":54},[37,157366,1149],{"class":82},[37,157368,456],{"class":309},[37,157370,214],{"class":54},[37,157372,157373,157375,157377,157379,157382,157384,157387,157389,157391],{"class":39,"line":1390},[37,157374,30485],{"class":82},[37,157376,208],{"class":54},[37,157378,258],{"class":50},[37,157380,157381],{"class":309},"\"折扣:",[37,157383,1099],{"class":82},[37,157385,157386],{"class":54},"discount",[37,157388,1149],{"class":82},[37,157390,456],{"class":309},[37,157392,214],{"class":54},[37,157394,157395,157397,157399,157401,157404,157406,157409,157411,157413,157415],{"class":39,"line":1402},[37,157396,30485],{"class":82},[37,157398,208],{"class":54},[37,157400,258],{"class":50},[37,157402,157403],{"class":309},"\"应付金额:",[37,157405,1099],{"class":82},[37,157407,157408],{"class":54},"total",[37,157410,157206],{"class":50},[37,157412,1149],{"class":82},[37,157414,157059],{"class":309},[37,157416,214],{"class":54},[146,157418,157420],{"id":157419},"_213-易错点","2.13 易错点",[158,157422,157423,157428,157434,157442,157445],{},[161,157424,157425,157427],{},[34,157426,157070],{}," 的结果是字符串，做运算前要转换。",[161,157429,157430,157431,28458],{},"字符串拼接时，数字要先 ",[34,157432,157433],{},"str()",[161,157435,157436,157438,157439,157441],{},[34,157437,70],{}," 是赋值，",[34,157440,3021],{}," 是比较。",[161,157443,157444],{},"Python 没有自增自减运算符。",[161,157446,157447],{},"浮点数计算可能有精度误差：",[27,157449,157451],{"className":29,"code":157450,"language":31,"meta":32,"style":32},"print(0.1 + 0.2)\n",[34,157452,157453],{"__ignoreMap":32},[37,157454,157455,157457,157459,157461,157463,157466],{"class":39,"line":40},[37,157456,30485],{"class":82},[37,157458,208],{"class":54},[37,157460,86278],{"class":82},[37,157462,45635],{"class":50},[37,157464,157465],{"class":82}," 0.2",[37,157467,214],{"class":54},[14,157469,157470,157471,157474],{},"金额计算如果要求严格，可以后续学习 ",[34,157472,157473],{},"decimal"," 模块。",[146,157476,157478],{"id":157477},"_214-本章练习","2.14 本章练习",[158,157480,157481,157484,157487,157490,157493],{},[161,157482,157483],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[161,157485,157486],{},"输入圆的半径，计算面积，保留两位小数。",[161,157488,157489],{},"输入工资和奖金，计算总收入。",[161,157491,157492],{},"输入摄氏温度，转换为华氏温度。",[161,157494,157495],{},"写一个 BMI 计算程序：",[27,157497,157500],{"className":157498,"code":157499,"language":5259,"meta":32},[5257],"BMI = 体重kg \u002F 身高m ** 2\n",[34,157501,157499],{"__ignoreMap":32},[123,157503,157504],{},"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":32,"searchDepth":47,"depth":47,"links":157506},[157507,157508,157509,157510,157511,157512,157513,157519,157520,157521,157526,157527,157528,157529],{"id":155068,"depth":47,"text":155069},{"id":155177,"depth":47,"text":155178},{"id":155348,"depth":47,"text":155349},{"id":155425,"depth":47,"text":155426},{"id":50799,"depth":47,"text":50800},{"id":155731,"depth":47,"text":155732},{"id":155957,"depth":47,"text":155958,"children":157514},[157515,157516,157517,157518],{"id":155961,"depth":58,"text":155962},{"id":156155,"depth":58,"text":156156},{"id":156243,"depth":58,"text":156244},{"id":156349,"depth":58,"text":156350},{"id":156458,"depth":47,"text":156459},{"id":156616,"depth":47,"text":156617},{"id":156681,"depth":47,"text":156682,"children":157522},[157523,157524,157525],{"id":156685,"depth":58,"text":156686},{"id":156830,"depth":58,"text":156831},{"id":156933,"depth":58,"text":156934},{"id":157064,"depth":47,"text":157065},{"id":157216,"depth":47,"text":157217},{"id":157419,"depth":47,"text":157420},{"id":157477,"depth":47,"text":157478},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155060,"description":128},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157536,"title":157537,"body":157538,"description":128,"extension":129,"meta":159174,"navigation":131,"path":159175,"seo":159176,"stem":159177,"__hash__":159178},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157539,"toc":159155},[157540,157543,157547,157550,157565,157568,157596,157600,157650,157652,157668,157671,157697,157700,157704,157771,157774,157790,157794,157797,157915,157918,157925,157974,157980,157984,157987,158100,158103,158107,158111,158114,158164,158168,158171,158221,158225,158228,158266,158270,158273,158319,158322,158357,158361,158366,158369,158415,158417,158484,158488,158494,158605,158614,158618,158620,158631,158633,158799,158803,158805,158819,158821,159035,159039,159058,159075,159078,159124,159128,159152],[10,157541,157537],{"id":157542},"_3-判断语句",[146,157544,157546],{"id":157545},"_31-布尔值","3.1 布尔值",[14,157548,157549],{},"判断语句依赖布尔值：",[27,157551,157553],{"className":29,"code":157552,"language":31,"meta":32,"style":32},"True\nFalse\n",[34,157554,157555,157560],{"__ignoreMap":32},[37,157556,157557],{"class":39,"line":40},[37,157558,157559],{"class":82},"True\n",[37,157561,157562],{"class":39,"line":47},[37,157563,157564],{"class":82},"False\n",[14,157566,157567],{},"比较表达式会产生布尔值：",[27,157569,157571],{"className":29,"code":157570,"language":31,"meta":32,"style":32},"age = 18\nprint(age >= 18)  # True\n",[34,157572,157573,157581],{"__ignoreMap":32},[37,157574,157575,157577,157579],{"class":39,"line":40},[37,157576,146593],{"class":54},[37,157578,70],{"class":50},[37,157580,146598],{"class":82},[37,157582,157583,157585,157587,157589,157591,157593],{"class":39,"line":47},[37,157584,30485],{"class":82},[37,157586,155815],{"class":54},[37,157588,1782],{"class":50},[37,157590,156332],{"class":82},[37,157592,45876],{"class":54},[37,157594,157595],{"class":43},"# True\n",[146,157597,157599],{"id":157598},"_32-if基础语法","3.2 if基础语法",[27,157601,157603],{"className":29,"code":157602,"language":31,"meta":32,"style":32},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[34,157604,157605,157623,157627,157639],{"__ignoreMap":32},[37,157606,157607,157609,157611,157613,157615,157617,157619,157621],{"class":39,"line":40},[37,157608,146593],{"class":54},[37,157610,70],{"class":50},[37,157612,2454],{"class":82},[37,157614,208],{"class":54},[37,157616,53889],{"class":82},[37,157618,208],{"class":54},[37,157620,152441],{"class":309},[37,157622,30567],{"class":54},[37,157624,157625],{"class":39,"line":47},[37,157626,2472],{"emptyLinePlaceholder":131},[37,157628,157629,157631,157633,157635,157637],{"class":39,"line":58},[37,157630,1603],{"class":50},[37,157632,15779],{"class":54},[37,157634,1782],{"class":50},[37,157636,156332],{"class":82},[37,157638,3811],{"class":54},[37,157640,157641,157643,157645,157648],{"class":39,"line":64},[37,157642,31369],{"class":82},[37,157644,208],{"class":54},[37,157646,157647],{"class":309},"\"可以进入网吧\"",[37,157649,214],{"class":54},[14,157651,9097],{},[158,157653,157654,157659,157662,157665],{},[161,157655,157656,157658],{},[34,157657,1603],{}," 后面是条件表达式。",[161,157660,157661],{},"条件后面必须写冒号。",[161,157663,157664],{},"条件成立时执行缩进代码块。",[161,157666,157667],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,157669,157670],{},"错误示例：",[27,157672,157674],{"className":29,"code":157673,"language":31,"meta":32,"style":32},"if age >= 18\n    print(\"可以进入\")\n",[34,157675,157676,157686],{"__ignoreMap":32},[37,157677,157678,157680,157682,157684],{"class":39,"line":40},[37,157679,1603],{"class":50},[37,157681,15779],{"class":54},[37,157683,1782],{"class":50},[37,157685,146598],{"class":82},[37,157687,157688,157690,157692,157695],{"class":39,"line":47},[37,157689,31369],{"class":82},[37,157691,208],{"class":54},[37,157693,157694],{"class":309},"\"可以进入\"",[37,157696,214],{"class":54},[14,157698,157699],{},"缺少冒号。",[146,157701,157703],{"id":157702},"_33-if-else","3.3 if else",[27,157705,157707],{"className":29,"code":157706,"language":31,"meta":32,"style":32},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[34,157708,157709,157727,157731,157743,157754,157760],{"__ignoreMap":32},[37,157710,157711,157713,157715,157717,157719,157721,157723,157725],{"class":39,"line":40},[37,157712,146593],{"class":54},[37,157714,70],{"class":50},[37,157716,2454],{"class":82},[37,157718,208],{"class":54},[37,157720,53889],{"class":82},[37,157722,208],{"class":54},[37,157724,152441],{"class":309},[37,157726,30567],{"class":54},[37,157728,157729],{"class":39,"line":47},[37,157730,2472],{"emptyLinePlaceholder":131},[37,157732,157733,157735,157737,157739,157741],{"class":39,"line":58},[37,157734,1603],{"class":50},[37,157736,15779],{"class":54},[37,157738,1782],{"class":50},[37,157740,156332],{"class":82},[37,157742,3811],{"class":54},[37,157744,157745,157747,157749,157752],{"class":39,"line":64},[37,157746,31369],{"class":82},[37,157748,208],{"class":54},[37,157750,157751],{"class":309},"\"成年人\"",[37,157753,214],{"class":54},[37,157755,157756,157758],{"class":39,"line":76},[37,157757,1773],{"class":50},[37,157759,3811],{"class":54},[37,157761,157762,157764,157766,157769],{"class":39,"line":92},[37,157763,31369],{"class":82},[37,157765,208],{"class":54},[37,157767,157768],{"class":309},"\"未成年人\"",[37,157770,214],{"class":54},[14,157772,157773],{},"执行逻辑：",[158,157775,157776,157782,157787],{},[161,157777,157778,157779,157781],{},"条件成立，执行 ",[34,157780,1603],{}," 代码块。",[161,157783,157784,157785,157781],{},"条件不成立，执行 ",[34,157786,1773],{},[161,157788,157789],{},"两个代码块只会执行其中一个。",[146,157791,157793],{"id":157792},"_34-if-elif-else","3.4 if elif else",[14,157795,157796],{},"多条件判断：",[27,157798,157800],{"className":29,"code":157799,"language":31,"meta":32,"style":32},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[34,157801,157802,157820,157824,157838,157849,157863,157874,157887,157898,157904],{"__ignoreMap":32},[37,157803,157804,157806,157808,157810,157812,157814,157816,157818],{"class":39,"line":40},[37,157805,155405],{"class":54},[37,157807,70],{"class":50},[37,157809,2454],{"class":82},[37,157811,208],{"class":54},[37,157813,53889],{"class":82},[37,157815,208],{"class":54},[37,157817,152456],{"class":309},[37,157819,30567],{"class":54},[37,157821,157822],{"class":39,"line":47},[37,157823,2472],{"emptyLinePlaceholder":131},[37,157825,157826,157828,157831,157833,157836],{"class":39,"line":58},[37,157827,1603],{"class":50},[37,157829,157830],{"class":54}," score ",[37,157832,1782],{"class":50},[37,157834,157835],{"class":82}," 90",[37,157837,3811],{"class":54},[37,157839,157840,157842,157844,157847],{"class":39,"line":64},[37,157841,31369],{"class":82},[37,157843,208],{"class":54},[37,157845,157846],{"class":309},"\"优秀\"",[37,157848,214],{"class":54},[37,157850,157851,157854,157856,157858,157861],{"class":39,"line":76},[37,157852,157853],{"class":50},"elif",[37,157855,157830],{"class":54},[37,157857,1782],{"class":50},[37,157859,157860],{"class":82}," 80",[37,157862,3811],{"class":54},[37,157864,157865,157867,157869,157872],{"class":39,"line":92},[37,157866,31369],{"class":82},[37,157868,208],{"class":54},[37,157870,157871],{"class":309},"\"良好\"",[37,157873,214],{"class":54},[37,157875,157876,157878,157880,157882,157885],{"class":39,"line":97},[37,157877,157853],{"class":50},[37,157879,157830],{"class":54},[37,157881,1782],{"class":50},[37,157883,157884],{"class":82}," 60",[37,157886,3811],{"class":54},[37,157888,157889,157891,157893,157896],{"class":39,"line":107},[37,157890,31369],{"class":82},[37,157892,208],{"class":54},[37,157894,157895],{"class":309},"\"及格\"",[37,157897,214],{"class":54},[37,157899,157900,157902],{"class":39,"line":1390},[37,157901,1773],{"class":50},[37,157903,3811],{"class":54},[37,157905,157906,157908,157910,157913],{"class":39,"line":1402},[37,157907,31369],{"class":82},[37,157909,208],{"class":54},[37,157911,157912],{"class":309},"\"不及格\"",[37,157914,214],{"class":54},[14,157916,157917],{},"注意判断顺序很重要。",[14,157919,157920,157921,157924],{},"如果把 ",[34,157922,157923],{},"score >= 60"," 放在最前面：",[27,157926,157928],{"className":29,"code":157927,"language":31,"meta":32,"style":32},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[34,157929,157930,157942,157952,157964],{"__ignoreMap":32},[37,157931,157932,157934,157936,157938,157940],{"class":39,"line":40},[37,157933,1603],{"class":50},[37,157935,157830],{"class":54},[37,157937,1782],{"class":50},[37,157939,157884],{"class":82},[37,157941,3811],{"class":54},[37,157943,157944,157946,157948,157950],{"class":39,"line":47},[37,157945,31369],{"class":82},[37,157947,208],{"class":54},[37,157949,157895],{"class":309},[37,157951,214],{"class":54},[37,157953,157954,157956,157958,157960,157962],{"class":39,"line":58},[37,157955,157853],{"class":50},[37,157957,157830],{"class":54},[37,157959,1782],{"class":50},[37,157961,157835],{"class":82},[37,157963,3811],{"class":54},[37,157965,157966,157968,157970,157972],{"class":39,"line":64},[37,157967,31369],{"class":82},[37,157969,208],{"class":54},[37,157971,157846],{"class":309},[37,157973,214],{"class":54},[14,157975,157976,157977,157979],{},"成绩 95 会先满足 ",[34,157978,157923],{},"，后面的优秀分支就不会执行。",[146,157981,157983],{"id":157982},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,157985,157986],{},"嵌套判断就是在一个判断内部再写判断。",[27,157988,157990],{"className":29,"code":157989,"language":31,"meta":32,"style":32},"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",[34,157991,157992,158010,158025,158029,158041,158055,158065,158072,158083,158089],{"__ignoreMap":32},[37,157993,157994,157996,157998,158000,158002,158004,158006,158008],{"class":39,"line":40},[37,157995,146593],{"class":54},[37,157997,70],{"class":50},[37,157999,2454],{"class":82},[37,158001,208],{"class":54},[37,158003,53889],{"class":82},[37,158005,208],{"class":54},[37,158007,152441],{"class":309},[37,158009,30567],{"class":54},[37,158011,158012,158014,158016,158018,158020,158023],{"class":39,"line":47},[37,158013,156408],{"class":54},[37,158015,70],{"class":50},[37,158017,60673],{"class":82},[37,158019,208],{"class":54},[37,158021,158022],{"class":309},"\"是否有票(y\u002Fn):\"",[37,158024,214],{"class":54},[37,158026,158027],{"class":39,"line":58},[37,158028,2472],{"emptyLinePlaceholder":131},[37,158030,158031,158033,158035,158037,158039],{"class":39,"line":64},[37,158032,1603],{"class":50},[37,158034,15779],{"class":54},[37,158036,1782],{"class":50},[37,158038,156332],{"class":82},[37,158040,3811],{"class":54},[37,158042,158043,158045,158048,158050,158053],{"class":39,"line":76},[37,158044,3173],{"class":50},[37,158046,158047],{"class":54}," has_ticket ",[37,158049,3021],{"class":50},[37,158051,158052],{"class":309}," \"y\"",[37,158054,3811],{"class":54},[37,158056,158057,158059,158061,158063],{"class":39,"line":92},[37,158058,32520],{"class":82},[37,158060,208],{"class":54},[37,158062,157694],{"class":309},[37,158064,214],{"class":54},[37,158066,158067,158070],{"class":39,"line":97},[37,158068,158069],{"class":50},"    else",[37,158071,3811],{"class":54},[37,158073,158074,158076,158078,158081],{"class":39,"line":107},[37,158075,32520],{"class":82},[37,158077,208],{"class":54},[37,158079,158080],{"class":309},"\"请先买票\"",[37,158082,214],{"class":54},[37,158084,158085,158087],{"class":39,"line":1390},[37,158086,1773],{"class":50},[37,158088,3811],{"class":54},[37,158090,158091,158093,158095,158098],{"class":39,"line":1402},[37,158092,31369],{"class":82},[37,158094,208],{"class":54},[37,158096,158097],{"class":309},"\"未成年人禁止进入\"",[37,158099,214],{"class":54},[14,158101,158102],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[146,158104,158106],{"id":158105},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[175,158108,158110],{"id":158109},"_361-and","3.6.1 and",[14,158112,158113],{},"两个条件都成立才成立。",[27,158115,158117],{"className":29,"code":158116,"language":31,"meta":32,"style":32},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[34,158118,158119,158127,158135,158139,158154],{"__ignoreMap":32},[37,158120,158121,158123,158125],{"class":39,"line":40},[37,158122,146593],{"class":54},[37,158124,70],{"class":50},[37,158126,88133],{"class":82},[37,158128,158129,158131,158133],{"class":39,"line":47},[37,158130,156408],{"class":54},[37,158132,70],{"class":50},[37,158134,153646],{"class":82},[37,158136,158137],{"class":39,"line":58},[37,158138,2472],{"emptyLinePlaceholder":131},[37,158140,158141,158143,158145,158147,158149,158151],{"class":39,"line":64},[37,158142,1603],{"class":50},[37,158144,15779],{"class":54},[37,158146,1782],{"class":50},[37,158148,156332],{"class":82},[37,158150,120476],{"class":50},[37,158152,158153],{"class":54}," has_ticket:\n",[37,158155,158156,158158,158160,158162],{"class":39,"line":76},[37,158157,31369],{"class":82},[37,158159,208],{"class":54},[37,158161,157694],{"class":309},[37,158163,214],{"class":54},[175,158165,158167],{"id":158166},"_362-or","3.6.2 or",[14,158169,158170],{},"只要一个条件成立就成立。",[27,158172,158174],{"className":29,"code":158173,"language":31,"meta":32,"style":32},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[34,158175,158176,158185,158194,158198,158210],{"__ignoreMap":32},[37,158177,158178,158181,158183],{"class":39,"line":40},[37,158179,158180],{"class":54},"is_vip ",[37,158182,70],{"class":50},[37,158184,125854],{"class":82},[37,158186,158187,158190,158192],{"class":39,"line":47},[37,158188,158189],{"class":54},"coupon ",[37,158191,70],{"class":50},[37,158193,153646],{"class":82},[37,158195,158196],{"class":39,"line":58},[37,158197,2472],{"emptyLinePlaceholder":131},[37,158199,158200,158202,158205,158207],{"class":39,"line":64},[37,158201,1603],{"class":50},[37,158203,158204],{"class":54}," is_vip ",[37,158206,115137],{"class":50},[37,158208,158209],{"class":54}," coupon:\n",[37,158211,158212,158214,158216,158219],{"class":39,"line":76},[37,158213,31369],{"class":82},[37,158215,208],{"class":54},[37,158217,158218],{"class":309},"\"可以享受优惠\"",[37,158220,214],{"class":54},[175,158222,158224],{"id":158223},"_363-not","3.6.3 not",[14,158226,158227],{},"取反。",[27,158229,158231],{"className":29,"code":158230,"language":31,"meta":32,"style":32},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[34,158232,158233,158242,158246,158255],{"__ignoreMap":32},[37,158234,158235,158238,158240],{"class":39,"line":40},[37,158236,158237],{"class":54},"is_closed ",[37,158239,70],{"class":50},[37,158241,125854],{"class":82},[37,158243,158244],{"class":39,"line":47},[37,158245,2472],{"emptyLinePlaceholder":131},[37,158247,158248,158250,158252],{"class":39,"line":58},[37,158249,1603],{"class":50},[37,158251,38999],{"class":50},[37,158253,158254],{"class":54}," is_closed:\n",[37,158256,158257,158259,158261,158264],{"class":39,"line":64},[37,158258,31369],{"class":82},[37,158260,208],{"class":54},[37,158262,158263],{"class":309},"\"店铺营业中\"",[37,158265,214],{"class":54},[146,158267,158269],{"id":158268},"_37-链式比较","3.7 链式比较",[14,158271,158272],{},"Python 支持链式比较：",[27,158274,158276],{"className":29,"code":158275,"language":31,"meta":32,"style":32},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[34,158277,158278,158287,158291,158308],{"__ignoreMap":32},[37,158279,158280,158282,158284],{"class":39,"line":40},[37,158281,155405],{"class":54},[37,158283,70],{"class":50},[37,158285,158286],{"class":82}," 85\n",[37,158288,158289],{"class":39,"line":47},[37,158290,2472],{"emptyLinePlaceholder":131},[37,158292,158293,158295,158297,158300,158302,158304,158306],{"class":39,"line":58},[37,158294,1603],{"class":50},[37,158296,4165],{"class":82},[37,158298,158299],{"class":50}," \u003C=",[37,158301,157830],{"class":54},[37,158303,1660],{"class":50},[37,158305,5826],{"class":82},[37,158307,3811],{"class":54},[37,158309,158310,158312,158314,158317],{"class":39,"line":64},[37,158311,31369],{"class":82},[37,158313,208],{"class":54},[37,158315,158316],{"class":309},"\"成绩合法\"",[37,158318,214],{"class":54},[14,158320,158321],{},"等价于：",[27,158323,158325],{"className":29,"code":158324,"language":31,"meta":32,"style":32},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[34,158326,158327,158347],{"__ignoreMap":32},[37,158328,158329,158331,158333,158335,158337,158339,158341,158343,158345],{"class":39,"line":40},[37,158330,1603],{"class":50},[37,158332,157830],{"class":54},[37,158334,1782],{"class":50},[37,158336,4165],{"class":82},[37,158338,120476],{"class":50},[37,158340,157830],{"class":54},[37,158342,1660],{"class":50},[37,158344,5826],{"class":82},[37,158346,3811],{"class":54},[37,158348,158349,158351,158353,158355],{"class":39,"line":47},[37,158350,31369],{"class":82},[37,158352,208],{"class":54},[37,158354,158316],{"class":309},[37,158356,214],{"class":54},[146,158358,158360],{"id":158359},"_38-真值和假值","3.8 真值和假值",[14,158362,116514,158363,158365],{},[34,158364,1603],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158367,158368],{},"假值：",[27,158370,158372],{"className":29,"code":158371,"language":31,"meta":32,"style":32},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[34,158373,158374,158378,158383,158387,158391,158396,158400,158404,158409],{"__ignoreMap":32},[37,158375,158376],{"class":39,"line":40},[37,158377,157564],{"class":82},[37,158379,158380],{"class":39,"line":47},[37,158381,158382],{"class":82},"None\n",[37,158384,158385],{"class":39,"line":58},[37,158386,3157],{"class":82},[37,158388,158389],{"class":39,"line":64},[37,158390,32412],{"class":82},[37,158392,158393],{"class":39,"line":76},[37,158394,158395],{"class":309},"\"\"\n",[37,158397,158398],{"class":39,"line":92},[37,158399,32427],{"class":54},[37,158401,158402],{"class":39,"line":97},[37,158403,2048],{"class":54},[37,158405,158406],{"class":39,"line":107},[37,158407,158408],{"class":54},"{}\n",[37,158410,158411,158413],{"class":39,"line":1390},[37,158412,155337],{"class":82},[37,158414,2048],{"class":54},[14,158416,15207],{},[27,158418,158420],{"className":29,"code":158419,"language":31,"meta":32,"style":32},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[34,158421,158422,158436,158440,158447,158467,158473],{"__ignoreMap":32},[37,158423,158424,158426,158428,158430,158432,158434],{"class":39,"line":40},[37,158425,146583],{"class":54},[37,158427,70],{"class":50},[37,158429,60673],{"class":82},[37,158431,208],{"class":54},[37,158433,152426],{"class":309},[37,158435,214],{"class":54},[37,158437,158438],{"class":39,"line":47},[37,158439,2472],{"emptyLinePlaceholder":131},[37,158441,158442,158444],{"class":39,"line":58},[37,158443,1603],{"class":50},[37,158445,158446],{"class":54}," name:\n",[37,158448,158449,158451,158453,158455,158457,158459,158461,158463,158465],{"class":39,"line":64},[37,158450,31369],{"class":82},[37,158452,208],{"class":54},[37,158454,258],{"class":50},[37,158456,157101],{"class":309},[37,158458,1099],{"class":82},[37,158460,79878],{"class":54},[37,158462,1149],{"class":82},[37,158464,456],{"class":309},[37,158466,214],{"class":54},[37,158468,158469,158471],{"class":39,"line":76},[37,158470,1773],{"class":50},[37,158472,3811],{"class":54},[37,158474,158475,158477,158479,158482],{"class":39,"line":92},[37,158476,31369],{"class":82},[37,158478,208],{"class":54},[37,158480,158481],{"class":309},"\"姓名不能为空\"",[37,158483,214],{"class":54},[146,158485,158487],{"id":158486},"_39-match语句","3.9 match语句",[14,158489,158490,158491,158493],{},"Python 3.10 开始支持 ",[34,158492,71333],{},"。它适合处理固定选项。",[27,158495,158497],{"className":29,"code":158496,"language":31,"meta":32,"style":32},"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",[34,158498,158499,158515,158519,158526,158536,158547,158556,158567,158576,158587,158594],{"__ignoreMap":32},[37,158500,158501,158504,158506,158508,158510,158513],{"class":39,"line":40},[37,158502,158503],{"class":54},"command ",[37,158505,70],{"class":50},[37,158507,60673],{"class":82},[37,158509,208],{"class":54},[37,158511,158512],{"class":309},"\"请输入命令:\"",[37,158514,214],{"class":54},[37,158516,158517],{"class":39,"line":47},[37,158518,2472],{"emptyLinePlaceholder":131},[37,158520,158521,158523],{"class":39,"line":58},[37,158522,71333],{"class":50},[37,158524,158525],{"class":54}," command:\n",[37,158527,158528,158531,158534],{"class":39,"line":64},[37,158529,158530],{"class":50},"    case",[37,158532,158533],{"class":309}," \"start\"",[37,158535,3811],{"class":54},[37,158537,158538,158540,158542,158545],{"class":39,"line":76},[37,158539,32520],{"class":82},[37,158541,208],{"class":54},[37,158543,158544],{"class":309},"\"启动\"",[37,158546,214],{"class":54},[37,158548,158549,158551,158554],{"class":39,"line":92},[37,158550,158530],{"class":50},[37,158552,158553],{"class":309}," \"stop\"",[37,158555,3811],{"class":54},[37,158557,158558,158560,158562,158565],{"class":39,"line":97},[37,158559,32520],{"class":82},[37,158561,208],{"class":54},[37,158563,158564],{"class":309},"\"停止\"",[37,158566,214],{"class":54},[37,158568,158569,158571,158574],{"class":39,"line":107},[37,158570,158530],{"class":50},[37,158572,158573],{"class":309}," \"restart\"",[37,158575,3811],{"class":54},[37,158577,158578,158580,158582,158585],{"class":39,"line":1390},[37,158579,32520],{"class":82},[37,158581,208],{"class":54},[37,158583,158584],{"class":309},"\"重启\"",[37,158586,214],{"class":54},[37,158588,158589,158591],{"class":39,"line":1402},[37,158590,158530],{"class":50},[37,158592,158593],{"class":54}," _:\n",[37,158595,158596,158598,158600,158603],{"class":39,"line":1684},[37,158597,32520],{"class":82},[37,158599,208],{"class":54},[37,158601,158602],{"class":309},"\"未知命令\"",[37,158604,214],{"class":54},[14,158606,158607,158608,158610,158611,158613],{},"入门阶段掌握 ",[34,158609,154705],{}," 更重要，",[34,158612,71333],{}," 可以作为补充。",[146,158615,158617],{"id":158616},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,158619,123339],{},[158,158621,158622,158625,158628],{},[161,158623,158624],{},"输入成绩。",[161,158626,158627],{},"判断成绩是否合法。",[161,158629,158630],{},"输出等级。",[14,158632,10107],{},[27,158634,158636],{"className":29,"code":158635,"language":31,"meta":32,"style":32},"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",[34,158637,158638,158656,158660,158678,158689,158701,158712,158724,158735,158748,158759,158771,158782,158788],{"__ignoreMap":32},[37,158639,158640,158642,158644,158646,158648,158650,158652,158654],{"class":39,"line":40},[37,158641,155405],{"class":54},[37,158643,70],{"class":50},[37,158645,109844],{"class":82},[37,158647,208],{"class":54},[37,158649,53889],{"class":82},[37,158651,208],{"class":54},[37,158653,152456],{"class":309},[37,158655,30567],{"class":54},[37,158657,158658],{"class":39,"line":47},[37,158659,2472],{"emptyLinePlaceholder":131},[37,158661,158662,158664,158666,158668,158670,158672,158674,158676],{"class":39,"line":58},[37,158663,1603],{"class":50},[37,158665,38999],{"class":50},[37,158667,4165],{"class":82},[37,158669,158299],{"class":50},[37,158671,157830],{"class":54},[37,158673,1660],{"class":50},[37,158675,5826],{"class":82},[37,158677,3811],{"class":54},[37,158679,158680,158682,158684,158687],{"class":39,"line":64},[37,158681,31369],{"class":82},[37,158683,208],{"class":54},[37,158685,158686],{"class":309},"\"成绩不合法\"",[37,158688,214],{"class":54},[37,158690,158691,158693,158695,158697,158699],{"class":39,"line":76},[37,158692,157853],{"class":50},[37,158694,157830],{"class":54},[37,158696,1782],{"class":50},[37,158698,157835],{"class":82},[37,158700,3811],{"class":54},[37,158702,158703,158705,158707,158710],{"class":39,"line":92},[37,158704,31369],{"class":82},[37,158706,208],{"class":54},[37,158708,158709],{"class":309},"\"等级:A\"",[37,158711,214],{"class":54},[37,158713,158714,158716,158718,158720,158722],{"class":39,"line":97},[37,158715,157853],{"class":50},[37,158717,157830],{"class":54},[37,158719,1782],{"class":50},[37,158721,157860],{"class":82},[37,158723,3811],{"class":54},[37,158725,158726,158728,158730,158733],{"class":39,"line":107},[37,158727,31369],{"class":82},[37,158729,208],{"class":54},[37,158731,158732],{"class":309},"\"等级:B\"",[37,158734,214],{"class":54},[37,158736,158737,158739,158741,158743,158746],{"class":39,"line":1390},[37,158738,157853],{"class":50},[37,158740,157830],{"class":54},[37,158742,1782],{"class":50},[37,158744,158745],{"class":82}," 70",[37,158747,3811],{"class":54},[37,158749,158750,158752,158754,158757],{"class":39,"line":1402},[37,158751,31369],{"class":82},[37,158753,208],{"class":54},[37,158755,158756],{"class":309},"\"等级:C\"",[37,158758,214],{"class":54},[37,158760,158761,158763,158765,158767,158769],{"class":39,"line":1684},[37,158762,157853],{"class":50},[37,158764,157830],{"class":54},[37,158766,1782],{"class":50},[37,158768,157884],{"class":82},[37,158770,3811],{"class":54},[37,158772,158773,158775,158777,158780],{"class":39,"line":1689},[37,158774,31369],{"class":82},[37,158776,208],{"class":54},[37,158778,158779],{"class":309},"\"等级:D\"",[37,158781,214],{"class":54},[37,158783,158784,158786],{"class":39,"line":1695},[37,158785,1773],{"class":50},[37,158787,3811],{"class":54},[37,158789,158790,158792,158794,158797],{"class":39,"line":1700},[37,158791,31369],{"class":82},[37,158793,208],{"class":54},[37,158795,158796],{"class":309},"\"等级:E\"",[37,158798,214],{"class":54},[146,158800,158802],{"id":158801},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,158804,123339],{},[158,158806,158807,158810,158813,158816],{},[161,158808,158809],{},"输入消费金额。",[161,158811,158812],{},"输入会员等级，普通、银卡、金卡。",[161,158814,158815],{},"普通不打折，银卡 9 折，金卡 8 折。",[161,158817,158818],{},"满 500 再减 50。",[14,158820,10107],{},[27,158822,158824],{"className":29,"code":158823,"language":31,"meta":32,"style":32},"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",[34,158825,158826,158846,158862,158866,158874,158878,158892,158902,158915,158924,158937,158945,158951,158962,158966,158980,158984,158998,159008,159012],{"__ignoreMap":32},[37,158827,158828,158831,158833,158835,158837,158839,158841,158844],{"class":39,"line":40},[37,158829,158830],{"class":54},"amount ",[37,158832,70],{"class":50},[37,158834,109844],{"class":82},[37,158836,208],{"class":54},[37,158838,53889],{"class":82},[37,158840,208],{"class":54},[37,158842,158843],{"class":309},"\"请输入消费金额:\"",[37,158845,30567],{"class":54},[37,158847,158848,158851,158853,158855,158857,158860],{"class":39,"line":47},[37,158849,158850],{"class":54},"level ",[37,158852,70],{"class":50},[37,158854,60673],{"class":82},[37,158856,208],{"class":54},[37,158858,158859],{"class":309},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[37,158861,214],{"class":54},[37,158863,158864],{"class":39,"line":58},[37,158865,2472],{"emptyLinePlaceholder":131},[37,158867,158868,158870,158872],{"class":39,"line":64},[37,158869,157283],{"class":54},[37,158871,70],{"class":50},[37,158873,55767],{"class":82},[37,158875,158876],{"class":39,"line":76},[37,158877,2472],{"emptyLinePlaceholder":131},[37,158879,158880,158882,158885,158887,158890],{"class":39,"line":92},[37,158881,1603],{"class":50},[37,158883,158884],{"class":54}," level ",[37,158886,3021],{"class":50},[37,158888,158889],{"class":309}," \"银卡\"",[37,158891,3811],{"class":54},[37,158893,158894,158897,158899],{"class":39,"line":97},[37,158895,158896],{"class":54},"    discount ",[37,158898,70],{"class":50},[37,158900,158901],{"class":82}," 0.9\n",[37,158903,158904,158906,158908,158910,158913],{"class":39,"line":107},[37,158905,157853],{"class":50},[37,158907,158884],{"class":54},[37,158909,3021],{"class":50},[37,158911,158912],{"class":309}," \"金卡\"",[37,158914,3811],{"class":54},[37,158916,158917,158919,158921],{"class":39,"line":1390},[37,158918,158896],{"class":54},[37,158920,70],{"class":50},[37,158922,158923],{"class":82}," 0.8\n",[37,158925,158926,158928,158930,158932,158935],{"class":39,"line":1402},[37,158927,157853],{"class":50},[37,158929,158884],{"class":54},[37,158931,3021],{"class":50},[37,158933,158934],{"class":309}," \"普通\"",[37,158936,3811],{"class":54},[37,158938,158939,158941,158943],{"class":39,"line":1684},[37,158940,158896],{"class":54},[37,158942,70],{"class":50},[37,158944,55767],{"class":82},[37,158946,158947,158949],{"class":39,"line":1689},[37,158948,1773],{"class":50},[37,158950,3811],{"class":54},[37,158952,158953,158955,158957,158960],{"class":39,"line":1695},[37,158954,31369],{"class":82},[37,158956,208],{"class":54},[37,158958,158959],{"class":309},"\"会员等级输入错误，按普通会员计算\"",[37,158961,214],{"class":54},[37,158963,158964],{"class":39,"line":1700},[37,158965,2472],{"emptyLinePlaceholder":131},[37,158967,158968,158971,158973,158976,158978],{"class":39,"line":1714},[37,158969,158970],{"class":54},"pay ",[37,158972,70],{"class":50},[37,158974,158975],{"class":54}," amount ",[37,158977,659],{"class":50},[37,158979,157322],{"class":54},[37,158981,158982],{"class":39,"line":1719},[37,158983,2472],{"emptyLinePlaceholder":131},[37,158985,158986,158988,158991,158993,158996],{"class":39,"line":1725},[37,158987,1603],{"class":50},[37,158989,158990],{"class":54}," pay ",[37,158992,1782],{"class":50},[37,158994,158995],{"class":82}," 500",[37,158997,3811],{"class":54},[37,158999,159000,159003,159005],{"class":39,"line":1746},[37,159001,159002],{"class":54},"    pay ",[37,159004,150299],{"class":50},[37,159006,159007],{"class":82}," 50\n",[37,159009,159010],{"class":39,"line":1751},[37,159011,2472],{"emptyLinePlaceholder":131},[37,159013,159014,159016,159018,159020,159022,159024,159027,159029,159031,159033],{"class":39,"line":1765},[37,159015,30485],{"class":82},[37,159017,208],{"class":54},[37,159019,258],{"class":50},[37,159021,157403],{"class":309},[37,159023,1099],{"class":82},[37,159025,159026],{"class":54},"pay",[37,159028,157206],{"class":50},[37,159030,1149],{"class":82},[37,159032,157059],{"class":309},[37,159034,214],{"class":54},[146,159036,159038],{"id":159037},"_312-易错点","3.12 易错点",[158,159040,159041,159044,159047,159050,159055],{},[161,159042,159043],{},"冒号不能漏。",[161,159045,159046],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[161,159048,159049],{},"多分支判断要注意顺序。",[161,159051,159052,159053,28458],{},"判断相等用 ",[34,159054,3021],{},[161,159056,159057],{},"字符串比较区分大小写：",[27,159059,159061],{"className":29,"code":159060,"language":31,"meta":32,"style":32},"\"Y\" == \"y\"  # False\n",[34,159062,159063],{"__ignoreMap":32},[37,159064,159065,159068,159070,159072],{"class":39,"line":40},[37,159066,159067],{"class":309},"\"Y\"",[37,159069,101606],{"class":50},[37,159071,158052],{"class":309},[37,159073,159074],{"class":43},"  # False\n",[14,159076,159077],{},"可转换后再判断：",[27,159079,159081],{"className":29,"code":159080,"language":31,"meta":32,"style":32},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[34,159082,159083,159100,159113],{"__ignoreMap":32},[37,159084,159085,159088,159090,159092,159094,159097],{"class":39,"line":40},[37,159086,159087],{"class":54},"answer ",[37,159089,70],{"class":50},[37,159091,60673],{"class":82},[37,159093,208],{"class":54},[37,159095,159096],{"class":309},"\"是否继续(y\u002Fn):\"",[37,159098,159099],{"class":54},").lower()\n",[37,159101,159102,159104,159107,159109,159111],{"class":39,"line":47},[37,159103,1603],{"class":50},[37,159105,159106],{"class":54}," answer ",[37,159108,3021],{"class":50},[37,159110,158052],{"class":309},[37,159112,3811],{"class":54},[37,159114,159115,159117,159119,159122],{"class":39,"line":58},[37,159116,31369],{"class":82},[37,159118,208],{"class":54},[37,159120,159121],{"class":309},"\"继续\"",[37,159123,214],{"class":54},[146,159125,159127],{"id":159126},"_313-本章练习","3.13 本章练习",[158,159129,159130,159133,159136,159139,159149],{},[161,159131,159132],{},"输入年龄，判断是否成年。",[161,159134,159135],{},"输入年份，判断是否为闰年。",[161,159137,159138],{},"输入三个数字，输出最大值。",[161,159140,159141,159142,159145,159146,159148],{},"写登录判断：用户名是 ",[34,159143,159144],{},"admin"," 且密码是 ",[34,159147,15156],{}," 才登录成功。",[161,159150,159151],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[123,159153,159154],{},"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":32,"searchDepth":47,"depth":47,"links":159156},[159157,159158,159159,159160,159161,159162,159167,159168,159169,159170,159171,159172,159173],{"id":157545,"depth":47,"text":157546},{"id":157598,"depth":47,"text":157599},{"id":157702,"depth":47,"text":157703},{"id":157792,"depth":47,"text":157793},{"id":157982,"depth":47,"text":157983},{"id":158105,"depth":47,"text":158106,"children":159163},[159164,159165,159166],{"id":158109,"depth":58,"text":158110},{"id":158166,"depth":58,"text":158167},{"id":158223,"depth":58,"text":158224},{"id":158268,"depth":47,"text":158269},{"id":158359,"depth":47,"text":158360},{"id":158486,"depth":47,"text":158487},{"id":158616,"depth":47,"text":158617},{"id":158801,"depth":47,"text":158802},{"id":159037,"depth":47,"text":159038},{"id":159126,"depth":47,"text":159127},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157537,"description":128},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159180,"title":159181,"body":159182,"description":128,"extension":129,"meta":160951,"navigation":131,"path":160952,"seo":160953,"stem":160954,"__hash__":160955},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159183,"toc":160931},[159184,159187,159191,159197,159200,159217,159221,159223,159240,159242,159287,159289,159306,159310,159313,159379,159382,159400,159404,159565,159574,159578,159582,159587,159634,159636,159642,159646,159651,159698,159700,159706,159710,159715,159751,159754,159801,159805,159811,159869,159874,159905,159910,159914,159969,159972,160044,160047,160106,160110,160113,160188,160191,160195,160301,160304,160330,160334,160346,160415,160418,160510,160514,160516,160527,160529,160659,160663,160865,160873,160877,160907,160911,160928],[10,159185,159181],{"id":159186},"_4-循环语句",[146,159188,159190],{"id":159189},"_41-为什么需要循环","4.1 为什么需要循环",[14,159192,159193,159194,159196],{},"如果要输出 1 到 100，不应该写 100 行 ",[34,159195,146519],{},"，而应该用循环。",[14,159198,159199],{},"循环适合处理重复任务：",[158,159201,159202,159205,159208,159211,159214],{},[161,159203,159204],{},"重复输出。",[161,159206,159207],{},"重复输入。",[161,159209,159210],{},"遍历数据。",[161,159212,159213],{},"持续执行菜单。",[161,159215,159216],{},"批量处理文件或数据。",[146,159218,159220],{"id":159219},"_42-while循环","4.2 while循环",[14,159222,5253],{},[27,159224,159226],{"className":29,"code":159225,"language":31,"meta":32,"style":32},"while 条件:\n    循环体\n",[34,159227,159228,159235],{"__ignoreMap":32},[37,159229,159230,159232],{"class":39,"line":40},[37,159231,108710],{"class":50},[37,159233,159234],{"class":54}," 条件:\n",[37,159236,159237],{"class":39,"line":47},[37,159238,159239],{"class":54},"    循环体\n",[14,159241,15207],{},[27,159243,159245],{"className":29,"code":159244,"language":31,"meta":32,"style":32},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[34,159246,159247,159255,159259,159271,159278],{"__ignoreMap":32},[37,159248,159249,159251,159253],{"class":39,"line":40},[37,159250,100195],{"class":54},[37,159252,70],{"class":50},[37,159254,55767],{"class":82},[37,159256,159257],{"class":39,"line":47},[37,159258,2472],{"emptyLinePlaceholder":131},[37,159260,159261,159263,159265,159267,159269],{"class":39,"line":58},[37,159262,108710],{"class":50},[37,159264,9510],{"class":54},[37,159266,1660],{"class":50},[37,159268,2220],{"class":82},[37,159270,3811],{"class":54},[37,159272,159273,159275],{"class":39,"line":64},[37,159274,31369],{"class":82},[37,159276,159277],{"class":54},"(i)\n",[37,159279,159280,159283,159285],{"class":39,"line":76},[37,159281,159282],{"class":54},"    i ",[37,159284,9549],{"class":50},[37,159286,55767],{"class":82},[14,159288,80997],{},[158,159290,159291,159297,159300,159303],{},[161,159292,159293,159294,28458],{},"判断条件 ",[34,159295,159296],{},"i \u003C= 5",[161,159298,159299],{},"条件成立，执行循环体。",[161,159301,159302],{},"执行完后回到条件判断。",[161,159304,159305],{},"条件不成立，退出循环。",[146,159307,159309],{"id":159308},"_43-while累加","4.3 while累加",[14,159311,159312],{},"计算 1 到 100 的和：",[27,159314,159316],{"className":29,"code":159315,"language":31,"meta":32,"style":32},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[34,159317,159318,159326,159334,159338,159350,159360,159368,159372],{"__ignoreMap":32},[37,159319,159320,159322,159324],{"class":39,"line":40},[37,159321,100195],{"class":54},[37,159323,70],{"class":50},[37,159325,55767],{"class":82},[37,159327,159328,159330,159332],{"class":39,"line":47},[37,159329,157307],{"class":54},[37,159331,70],{"class":50},[37,159333,47401],{"class":82},[37,159335,159336],{"class":39,"line":58},[37,159337,2472],{"emptyLinePlaceholder":131},[37,159339,159340,159342,159344,159346,159348],{"class":39,"line":64},[37,159341,108710],{"class":50},[37,159343,9510],{"class":54},[37,159345,1660],{"class":50},[37,159347,5826],{"class":82},[37,159349,3811],{"class":54},[37,159351,159352,159355,159357],{"class":39,"line":76},[37,159353,159354],{"class":54},"    total ",[37,159356,9549],{"class":50},[37,159358,159359],{"class":54}," i\n",[37,159361,159362,159364,159366],{"class":39,"line":92},[37,159363,159282],{"class":54},[37,159365,9549],{"class":50},[37,159367,55767],{"class":82},[37,159369,159370],{"class":39,"line":97},[37,159371,2472],{"emptyLinePlaceholder":131},[37,159373,159374,159376],{"class":39,"line":107},[37,159375,30485],{"class":82},[37,159377,159378],{"class":54},"(total)\n",[14,159380,159381],{},"核心思想：",[158,159383,159384,159389,159394],{},[161,159385,159386,159388],{},[34,159387,645],{}," 控制循环次数。",[161,159390,159391,159393],{},[34,159392,157408],{}," 保存累加结果。",[161,159395,159396,159397,159399],{},"每轮循环都要更新 ",[34,159398,645],{},"，否则可能死循环。",[146,159401,159403],{"id":159402},"_44-while猜数字","4.4 while猜数字",[27,159405,159407],{"className":29,"code":159406,"language":31,"meta":32,"style":32},"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",[34,159408,159409,159415,159419,159436,159444,159448,159456,159476,159485,159489,159501,159512,159522,159533,159539,159561],{"__ignoreMap":32},[37,159410,159411,159413],{"class":39,"line":40},[37,159412,51],{"class":50},[37,159414,45397],{"class":54},[37,159416,159417],{"class":39,"line":47},[37,159418,2472],{"emptyLinePlaceholder":131},[37,159420,159421,159423,159425,159428,159430,159432,159434],{"class":39,"line":58},[37,159422,159087],{"class":54},[37,159424,70],{"class":50},[37,159426,159427],{"class":54}," random.randint(",[37,159429,422],{"class":82},[37,159431,12507],{"class":54},[37,159433,516],{"class":82},[37,159435,214],{"class":54},[37,159437,159438,159440,159442],{"class":39,"line":64},[37,159439,146738],{"class":54},[37,159441,70],{"class":50},[37,159443,47401],{"class":82},[37,159445,159446],{"class":39,"line":76},[37,159447,2472],{"emptyLinePlaceholder":131},[37,159449,159450,159452,159454],{"class":39,"line":92},[37,159451,108710],{"class":50},[37,159453,95339],{"class":82},[37,159455,3811],{"class":54},[37,159457,159458,159461,159463,159465,159467,159469,159471,159474],{"class":39,"line":97},[37,159459,159460],{"class":54},"    guess ",[37,159462,70],{"class":50},[37,159464,2454],{"class":82},[37,159466,208],{"class":54},[37,159468,53889],{"class":82},[37,159470,208],{"class":54},[37,159472,159473],{"class":309},"\"请输入1到100之间的数字:\"",[37,159475,30567],{"class":54},[37,159477,159478,159481,159483],{"class":39,"line":107},[37,159479,159480],{"class":54},"    count ",[37,159482,9549],{"class":50},[37,159484,55767],{"class":82},[37,159486,159487],{"class":39,"line":1390},[37,159488,2472],{"emptyLinePlaceholder":131},[37,159490,159491,159493,159496,159498],{"class":39,"line":1402},[37,159492,3173],{"class":50},[37,159494,159495],{"class":54}," guess ",[37,159497,1163],{"class":50},[37,159499,159500],{"class":54}," answer:\n",[37,159502,159503,159505,159507,159510],{"class":39,"line":1684},[37,159504,32520],{"class":82},[37,159506,208],{"class":54},[37,159508,159509],{"class":309},"\"猜大了\"",[37,159511,214],{"class":54},[37,159513,159514,159516,159518,159520],{"class":39,"line":1689},[37,159515,39362],{"class":50},[37,159517,159495],{"class":54},[37,159519,1113],{"class":50},[37,159521,159500],{"class":54},[37,159523,159524,159526,159528,159531],{"class":39,"line":1695},[37,159525,32520],{"class":82},[37,159527,208],{"class":54},[37,159529,159530],{"class":309},"\"猜小了\"",[37,159532,214],{"class":54},[37,159534,159535,159537],{"class":39,"line":1700},[37,159536,158069],{"class":50},[37,159538,3811],{"class":54},[37,159540,159541,159543,159545,159547,159550,159552,159554,159556,159559],{"class":39,"line":1714},[37,159542,32520],{"class":82},[37,159544,208],{"class":54},[37,159546,258],{"class":50},[37,159548,159549],{"class":309},"\"猜对了，一共猜了",[37,159551,1099],{"class":82},[37,159553,84502],{"class":54},[37,159555,1149],{"class":82},[37,159557,159558],{"class":309},"次\"",[37,159560,214],{"class":54},[37,159562,159563],{"class":39,"line":1719},[37,159564,31697],{"class":50},[14,159566,159567,159570,159571,159573],{},[34,159568,159569],{},"while True"," 表示无限循环，通常配合 ",[34,159572,2125],{}," 使用。",[146,159575,159577],{"id":159576},"_45-break和continue","4.5 break和continue",[175,159579,159581],{"id":159580},"_451-break","4.5.1 break",[14,159583,159584,159586],{},[34,159585,2125],{}," 直接结束整个循环。",[27,159588,159590],{"className":29,"code":159589,"language":31,"meta":32,"style":32},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[34,159591,159592,159612,159624,159628],{"__ignoreMap":32},[37,159593,159594,159596,159598,159600,159602,159604,159606,159608,159610],{"class":39,"line":40},[37,159595,3097],{"class":50},[37,159597,9510],{"class":54},[37,159599,26116],{"class":50},[37,159601,32512],{"class":82},[37,159603,208],{"class":54},[37,159605,422],{"class":82},[37,159607,12507],{"class":54},[37,159609,549],{"class":82},[37,159611,30856],{"class":54},[37,159613,159614,159616,159618,159620,159622],{"class":39,"line":47},[37,159615,3173],{"class":50},[37,159617,9510],{"class":54},[37,159619,3021],{"class":50},[37,159621,78138],{"class":82},[37,159623,3811],{"class":54},[37,159625,159626],{"class":39,"line":58},[37,159627,31697],{"class":50},[37,159629,159630,159632],{"class":39,"line":64},[37,159631,31369],{"class":82},[37,159633,159277],{"class":54},[14,159635,146504],{},[27,159637,159640],{"className":159638,"code":159639,"language":5259,"meta":32},[5257],"1\n2\n",[34,159641,159639],{"__ignoreMap":32},[175,159643,159645],{"id":159644},"_452-continue","4.5.2 continue",[14,159647,159648,159650],{},[34,159649,154719],{}," 跳过本轮剩余代码，进入下一轮循环。",[27,159652,159654],{"className":29,"code":159653,"language":31,"meta":32,"style":32},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[34,159655,159656,159676,159688,159692],{"__ignoreMap":32},[37,159657,159658,159660,159662,159664,159666,159668,159670,159672,159674],{"class":39,"line":40},[37,159659,3097],{"class":50},[37,159661,9510],{"class":54},[37,159663,26116],{"class":50},[37,159665,32512],{"class":82},[37,159667,208],{"class":54},[37,159669,422],{"class":82},[37,159671,12507],{"class":54},[37,159673,549],{"class":82},[37,159675,30856],{"class":54},[37,159677,159678,159680,159682,159684,159686],{"class":39,"line":47},[37,159679,3173],{"class":50},[37,159681,9510],{"class":54},[37,159683,3021],{"class":50},[37,159685,78138],{"class":82},[37,159687,3811],{"class":54},[37,159689,159690],{"class":39,"line":58},[37,159691,148559],{"class":50},[37,159693,159694,159696],{"class":39,"line":64},[37,159695,31369],{"class":82},[37,159697,159277],{"class":54},[14,159699,146504],{},[27,159701,159704],{"className":159702,"code":159703,"language":5259,"meta":32},[5257],"1\n2\n4\n5\n",[34,159705,159703],{"__ignoreMap":32},[146,159707,159709],{"id":159708},"_46-for循环","4.6 for循环",[14,159711,159712,159714],{},[34,159713,3097],{}," 常用于遍历序列。",[27,159716,159718],{"className":29,"code":159717,"language":31,"meta":32,"style":32},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[34,159719,159720,159729,159733,159744],{"__ignoreMap":32},[37,159721,159722,159724,159726],{"class":39,"line":40},[37,159723,146583],{"class":54},[37,159725,70],{"class":50},[37,159727,159728],{"class":309}," \"python\"\n",[37,159730,159731],{"class":39,"line":47},[37,159732,2472],{"emptyLinePlaceholder":131},[37,159734,159735,159737,159740,159742],{"class":39,"line":58},[37,159736,3097],{"class":50},[37,159738,159739],{"class":54}," ch ",[37,159741,26116],{"class":50},[37,159743,158446],{"class":54},[37,159745,159746,159748],{"class":39,"line":64},[37,159747,31369],{"class":82},[37,159749,159750],{"class":54},"(ch)\n",[14,159752,159753],{},"遍历列表：",[27,159755,159757],{"className":29,"code":159756,"language":31,"meta":32,"style":32},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[34,159758,159759,159781,159785,159795],{"__ignoreMap":32},[37,159760,159761,159764,159766,159768,159770,159772,159774,159776,159779],{"class":39,"line":40},[37,159762,159763],{"class":54},"students ",[37,159765,70],{"class":50},[37,159767,52294],{"class":54},[37,159769,149935],{"class":309},[37,159771,12507],{"class":54},[37,159773,150983],{"class":309},[37,159775,12507],{"class":54},[37,159777,159778],{"class":309},"\"小刚\"",[37,159780,33315],{"class":54},[37,159782,159783],{"class":39,"line":47},[37,159784,2472],{"emptyLinePlaceholder":131},[37,159786,159787,159789,159791,159793],{"class":39,"line":58},[37,159788,3097],{"class":50},[37,159790,152184],{"class":54},[37,159792,26116],{"class":50},[37,159794,152189],{"class":54},[37,159796,159797,159799],{"class":39,"line":64},[37,159798,31369],{"class":82},[37,159800,150089],{"class":54},[146,159802,159804],{"id":159803},"_47-range函数","4.7 range函数",[14,159806,159807,159810],{},[34,159808,159809],{},"range()"," 用于生成整数序列。",[27,159812,159814],{"className":29,"code":159813,"language":31,"meta":32,"style":32},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[34,159815,159816,159830,159848],{"__ignoreMap":32},[37,159817,159818,159820,159822,159824,159827],{"class":39,"line":40},[37,159819,33485],{"class":82},[37,159821,208],{"class":54},[37,159823,524],{"class":82},[37,159825,159826],{"class":54},")          ",[37,159828,159829],{"class":43},"# 0,1,2,3,4\n",[37,159831,159832,159834,159836,159838,159840,159842,159845],{"class":39,"line":47},[37,159833,33485],{"class":82},[37,159835,208],{"class":54},[37,159837,422],{"class":82},[37,159839,12507],{"class":54},[37,159841,524],{"class":82},[37,159843,159844],{"class":54},")       ",[37,159846,159847],{"class":43},"# 1,2,3,4\n",[37,159849,159850,159852,159854,159856,159858,159860,159862,159864,159866],{"class":39,"line":58},[37,159851,33485],{"class":82},[37,159853,208],{"class":54},[37,159855,422],{"class":82},[37,159857,12507],{"class":54},[37,159859,650],{"class":82},[37,159861,12507],{"class":54},[37,159863,282],{"class":82},[37,159865,155708],{"class":54},[37,159867,159868],{"class":43},"# 1,3,5,7,9\n",[14,159870,159871,159872,24691],{},"配合 ",[34,159873,3097],{},[27,159875,159877],{"className":29,"code":159876,"language":31,"meta":32,"style":32},"for i in range(1, 6):\n    print(i)\n",[34,159878,159879,159899],{"__ignoreMap":32},[37,159880,159881,159883,159885,159887,159889,159891,159893,159895,159897],{"class":39,"line":40},[37,159882,3097],{"class":50},[37,159884,9510],{"class":54},[37,159886,26116],{"class":50},[37,159888,32512],{"class":82},[37,159890,208],{"class":54},[37,159892,422],{"class":82},[37,159894,12507],{"class":54},[37,159896,549],{"class":82},[37,159898,30856],{"class":54},[37,159900,159901,159903],{"class":39,"line":47},[37,159902,31369],{"class":82},[37,159904,159277],{"class":54},[14,159906,9097,159907,159909],{},[34,159908,33485],{}," 的结束值不包含在内。",[146,159911,159913],{"id":159912},"_48-for循环求和","4.8 for循环求和",[27,159915,159917],{"className":29,"code":159916,"language":31,"meta":32,"style":32},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[34,159918,159919,159927,159931,159951,159959,159963],{"__ignoreMap":32},[37,159920,159921,159923,159925],{"class":39,"line":40},[37,159922,157307],{"class":54},[37,159924,70],{"class":50},[37,159926,47401],{"class":82},[37,159928,159929],{"class":39,"line":47},[37,159930,2472],{"emptyLinePlaceholder":131},[37,159932,159933,159935,159937,159939,159941,159943,159945,159947,159949],{"class":39,"line":58},[37,159934,3097],{"class":50},[37,159936,9510],{"class":54},[37,159938,26116],{"class":50},[37,159940,32512],{"class":82},[37,159942,208],{"class":54},[37,159944,422],{"class":82},[37,159946,12507],{"class":54},[37,159948,542],{"class":82},[37,159950,30856],{"class":54},[37,159952,159953,159955,159957],{"class":39,"line":64},[37,159954,159354],{"class":54},[37,159956,9549],{"class":50},[37,159958,159359],{"class":54},[37,159960,159961],{"class":39,"line":76},[37,159962,2472],{"emptyLinePlaceholder":131},[37,159964,159965,159967],{"class":39,"line":92},[37,159966,30485],{"class":82},[37,159968,159378],{"class":54},[14,159970,159971],{},"求偶数和：",[27,159973,159975],{"className":29,"code":159974,"language":31,"meta":32,"style":32},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[34,159976,159977,159985,159989,160009,160025,160034,160038],{"__ignoreMap":32},[37,159978,159979,159981,159983],{"class":39,"line":40},[37,159980,157307],{"class":54},[37,159982,70],{"class":50},[37,159984,47401],{"class":82},[37,159986,159987],{"class":39,"line":47},[37,159988,2472],{"emptyLinePlaceholder":131},[37,159990,159991,159993,159995,159997,159999,160001,160003,160005,160007],{"class":39,"line":58},[37,159992,3097],{"class":50},[37,159994,9510],{"class":54},[37,159996,26116],{"class":50},[37,159998,32512],{"class":82},[37,160000,208],{"class":54},[37,160002,422],{"class":82},[37,160004,12507],{"class":54},[37,160006,542],{"class":82},[37,160008,30856],{"class":54},[37,160010,160011,160013,160015,160017,160019,160021,160023],{"class":39,"line":64},[37,160012,3173],{"class":50},[37,160014,9510],{"class":54},[37,160016,533],{"class":50},[37,160018,14827],{"class":82},[37,160020,101606],{"class":50},[37,160022,4165],{"class":82},[37,160024,3811],{"class":54},[37,160026,160027,160030,160032],{"class":39,"line":76},[37,160028,160029],{"class":54},"        total ",[37,160031,9549],{"class":50},[37,160033,159359],{"class":54},[37,160035,160036],{"class":39,"line":92},[37,160037,2472],{"emptyLinePlaceholder":131},[37,160039,160040,160042],{"class":39,"line":97},[37,160041,30485],{"class":82},[37,160043,159378],{"class":54},[14,160045,160046],{},"也可以：",[27,160048,160050],{"className":29,"code":160049,"language":31,"meta":32,"style":32},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[34,160051,160052,160060,160064,160088,160096,160100],{"__ignoreMap":32},[37,160053,160054,160056,160058],{"class":39,"line":40},[37,160055,157307],{"class":54},[37,160057,70],{"class":50},[37,160059,47401],{"class":82},[37,160061,160062],{"class":39,"line":47},[37,160063,2472],{"emptyLinePlaceholder":131},[37,160065,160066,160068,160070,160072,160074,160076,160078,160080,160082,160084,160086],{"class":39,"line":58},[37,160067,3097],{"class":50},[37,160069,9510],{"class":54},[37,160071,26116],{"class":50},[37,160073,32512],{"class":82},[37,160075,208],{"class":54},[37,160077,282],{"class":82},[37,160079,12507],{"class":54},[37,160081,542],{"class":82},[37,160083,12507],{"class":54},[37,160085,282],{"class":82},[37,160087,30856],{"class":54},[37,160089,160090,160092,160094],{"class":39,"line":64},[37,160091,159354],{"class":54},[37,160093,9549],{"class":50},[37,160095,159359],{"class":54},[37,160097,160098],{"class":39,"line":76},[37,160099,2472],{"emptyLinePlaceholder":131},[37,160101,160102,160104],{"class":39,"line":92},[37,160103,30485],{"class":82},[37,160105,159378],{"class":54},[146,160107,160109],{"id":160108},"_49-循环嵌套","4.9 循环嵌套",[14,160111,160112],{},"嵌套循环就是循环里面再写循环。",[27,160114,160116],{"className":29,"code":160115,"language":31,"meta":32,"style":32},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[34,160117,160118,160138,160158],{"__ignoreMap":32},[37,160119,160120,160122,160124,160126,160128,160130,160132,160134,160136],{"class":39,"line":40},[37,160121,3097],{"class":50},[37,160123,9510],{"class":54},[37,160125,26116],{"class":50},[37,160127,32512],{"class":82},[37,160129,208],{"class":54},[37,160131,422],{"class":82},[37,160133,12507],{"class":54},[37,160135,498],{"class":82},[37,160137,30856],{"class":54},[37,160139,160140,160142,160144,160146,160148,160150,160152,160154,160156],{"class":39,"line":47},[37,160141,3273],{"class":50},[37,160143,9572],{"class":54},[37,160145,26116],{"class":50},[37,160147,32512],{"class":82},[37,160149,208],{"class":54},[37,160151,422],{"class":82},[37,160153,12507],{"class":54},[37,160155,498],{"class":82},[37,160157,30856],{"class":54},[37,160159,160160,160162,160164,160166,160169,160171,160173,160175,160178,160180,160182,160184,160186],{"class":39,"line":58},[37,160161,32520],{"class":82},[37,160163,208],{"class":54},[37,160165,258],{"class":50},[37,160167,160168],{"class":309},"\"i=",[37,160170,1099],{"class":82},[37,160172,645],{"class":54},[37,160174,1149],{"class":82},[37,160176,160177],{"class":309},", j=",[37,160179,1099],{"class":82},[37,160181,671],{"class":54},[37,160183,1149],{"class":82},[37,160185,456],{"class":309},[37,160187,214],{"class":54},[14,160189,160190],{},"外层循环执行一次，内层循环执行完整一轮。",[146,160192,160194],{"id":160193},"_410-九九乘法表","4.10 九九乘法表",[27,160196,160198],{"className":29,"code":160197,"language":31,"meta":32,"style":32},"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",[34,160199,160200,160220,160243,160295],{"__ignoreMap":32},[37,160201,160202,160204,160206,160208,160210,160212,160214,160216,160218],{"class":39,"line":40},[37,160203,3097],{"class":50},[37,160205,9510],{"class":54},[37,160207,26116],{"class":50},[37,160209,32512],{"class":82},[37,160211,208],{"class":54},[37,160213,422],{"class":82},[37,160215,12507],{"class":54},[37,160217,650],{"class":82},[37,160219,30856],{"class":54},[37,160221,160222,160224,160226,160228,160230,160232,160234,160237,160239,160241],{"class":39,"line":47},[37,160223,3273],{"class":50},[37,160225,9572],{"class":54},[37,160227,26116],{"class":50},[37,160229,32512],{"class":82},[37,160231,208],{"class":54},[37,160233,422],{"class":82},[37,160235,160236],{"class":54},", i ",[37,160238,685],{"class":50},[37,160240,25191],{"class":82},[37,160242,30856],{"class":54},[37,160244,160245,160247,160249,160251,160253,160255,160257,160259,160261,160263,160265,160267,160269,160271,160273,160275,160277,160279,160281,160283,160285,160287,160289,160291,160293],{"class":39,"line":58},[37,160246,32520],{"class":82},[37,160248,208],{"class":54},[37,160250,258],{"class":50},[37,160252,456],{"class":309},[37,160254,1099],{"class":82},[37,160256,671],{"class":54},[37,160258,1149],{"class":82},[37,160260,659],{"class":309},[37,160262,1099],{"class":82},[37,160264,645],{"class":54},[37,160266,1149],{"class":82},[37,160268,70],{"class":309},[37,160270,1099],{"class":82},[37,160272,100195],{"class":54},[37,160274,659],{"class":50},[37,160276,3482],{"class":54},[37,160278,1149],{"class":82},[37,160280,456],{"class":309},[37,160282,12507],{"class":54},[37,160284,100],{"class":5288},[37,160286,70],{"class":50},[37,160288,456],{"class":309},[37,160290,1304],{"class":82},[37,160292,456],{"class":309},[37,160294,214],{"class":54},[37,160296,160297,160299],{"class":39,"line":64},[37,160298,31369],{"class":82},[37,160300,2048],{"class":54},[14,160302,160303],{},"关键点：",[158,160305,160306,160312,160318,160324],{},[161,160307,160308,160309,160311],{},"外层 ",[34,160310,645],{}," 控制行。",[161,160313,160314,160315,160317],{},"内层 ",[34,160316,671],{}," 控制列。",[161,160319,160320,160321,160323],{},"每行结束后用 ",[34,160322,146519],{}," 换行。",[161,160325,160326,160329],{},[34,160327,160328],{},"end=\"\\t\""," 让同一行的内容横向排列。",[146,160331,160333],{"id":160332},"_411-循环else","4.11 循环else",[14,160335,160336,160337,160339,160340,160342,160343,160345],{},"Python 的循环可以带 ",[34,160338,1773],{},"。当循环正常结束时执行 ",[34,160341,1773],{},"，如果被 ",[34,160344,2125],{}," 打断，则不执行。",[27,160347,160349],{"className":29,"code":160348,"language":31,"meta":32,"style":32},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[34,160350,160351,160371,160383,160394,160398,160404],{"__ignoreMap":32},[37,160352,160353,160355,160357,160359,160361,160363,160365,160367,160369],{"class":39,"line":40},[37,160354,3097],{"class":50},[37,160356,9510],{"class":54},[37,160358,26116],{"class":50},[37,160360,32512],{"class":82},[37,160362,208],{"class":54},[37,160364,422],{"class":82},[37,160366,12507],{"class":54},[37,160368,549],{"class":82},[37,160370,30856],{"class":54},[37,160372,160373,160375,160377,160379,160381],{"class":39,"line":47},[37,160374,3173],{"class":50},[37,160376,9510],{"class":54},[37,160378,3021],{"class":50},[37,160380,2110],{"class":82},[37,160382,3811],{"class":54},[37,160384,160385,160387,160389,160392],{"class":39,"line":58},[37,160386,32520],{"class":82},[37,160388,208],{"class":54},[37,160390,160391],{"class":309},"\"找到了\"",[37,160393,214],{"class":54},[37,160395,160396],{"class":39,"line":64},[37,160397,31697],{"class":50},[37,160399,160400,160402],{"class":39,"line":76},[37,160401,1773],{"class":50},[37,160403,3811],{"class":54},[37,160405,160406,160408,160410,160413],{"class":39,"line":92},[37,160407,31369],{"class":82},[37,160409,208],{"class":54},[37,160411,160412],{"class":309},"\"没找到\"",[37,160414,214],{"class":54},[14,160416,160417],{},"常用于搜索。",[27,160419,160421],{"className":29,"code":160420,"language":31,"meta":32,"style":32},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[34,160422,160423,160444,160453,160457,160469,160480,160490,160494,160500],{"__ignoreMap":32},[37,160424,160425,160428,160430,160432,160434,160436,160438,160440,160442],{"class":39,"line":40},[37,160426,160427],{"class":54},"names ",[37,160429,70],{"class":50},[37,160431,52294],{"class":54},[37,160433,149935],{"class":309},[37,160435,12507],{"class":54},[37,160437,150983],{"class":309},[37,160439,12507],{"class":54},[37,160441,159778],{"class":309},[37,160443,33315],{"class":54},[37,160445,160446,160448,160450],{"class":39,"line":47},[37,160447,111625],{"class":54},[37,160449,70],{"class":50},[37,160451,160452],{"class":309}," \"小李\"\n",[37,160454,160455],{"class":39,"line":58},[37,160456,2472],{"emptyLinePlaceholder":131},[37,160458,160459,160461,160464,160466],{"class":39,"line":64},[37,160460,3097],{"class":50},[37,160462,160463],{"class":54}," name ",[37,160465,26116],{"class":50},[37,160467,160468],{"class":54}," names:\n",[37,160470,160471,160473,160475,160477],{"class":39,"line":76},[37,160472,3173],{"class":50},[37,160474,160463],{"class":54},[37,160476,3021],{"class":50},[37,160478,160479],{"class":54}," target:\n",[37,160481,160482,160484,160486,160488],{"class":39,"line":92},[37,160483,32520],{"class":82},[37,160485,208],{"class":54},[37,160487,160391],{"class":309},[37,160489,214],{"class":54},[37,160491,160492],{"class":39,"line":97},[37,160493,31697],{"class":50},[37,160495,160496,160498],{"class":39,"line":107},[37,160497,1773],{"class":50},[37,160499,3811],{"class":54},[37,160501,160502,160504,160506,160508],{"class":39,"line":1390},[37,160503,31369],{"class":82},[37,160505,208],{"class":54},[37,160507,160412],{"class":309},[37,160509,214],{"class":54},[146,160511,160513],{"id":160512},"_412-小案例登录重试","4.12 小案例：登录重试",[14,160515,123339],{},[158,160517,160518,160521,160524],{},[161,160519,160520],{},"用户最多输入 3 次密码。",[161,160522,160523],{},"密码正确则登录成功。",[161,160525,160526],{},"3 次都错误则锁定账号。",[14,160528,10107],{},[27,160530,160532],{"className":29,"code":160531,"language":31,"meta":32,"style":32},"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",[34,160533,160534,160544,160548,160564,160580,160584,160596,160607,160611,160617,160642,160648],{"__ignoreMap":32},[37,160535,160536,160539,160541],{"class":39,"line":40},[37,160537,160538],{"class":54},"password ",[37,160540,70],{"class":50},[37,160542,160543],{"class":309}," \"123456\"\n",[37,160545,160546],{"class":39,"line":47},[37,160547,2472],{"emptyLinePlaceholder":131},[37,160549,160550,160552,160554,160556,160558,160560,160562],{"class":39,"line":58},[37,160551,3097],{"class":50},[37,160553,9510],{"class":54},[37,160555,26116],{"class":50},[37,160557,32512],{"class":82},[37,160559,208],{"class":54},[37,160561,276],{"class":82},[37,160563,30856],{"class":54},[37,160565,160566,160569,160571,160573,160575,160578],{"class":39,"line":64},[37,160567,160568],{"class":54},"    user_password ",[37,160570,70],{"class":50},[37,160572,60673],{"class":82},[37,160574,208],{"class":54},[37,160576,160577],{"class":309},"\"请输入密码:\"",[37,160579,214],{"class":54},[37,160581,160582],{"class":39,"line":76},[37,160583,2472],{"emptyLinePlaceholder":131},[37,160585,160586,160588,160591,160593],{"class":39,"line":92},[37,160587,3173],{"class":50},[37,160589,160590],{"class":54}," user_password ",[37,160592,3021],{"class":50},[37,160594,160595],{"class":54}," password:\n",[37,160597,160598,160600,160602,160605],{"class":39,"line":97},[37,160599,32520],{"class":82},[37,160601,208],{"class":54},[37,160603,160604],{"class":309},"\"登录成功\"",[37,160606,214],{"class":54},[37,160608,160609],{"class":39,"line":107},[37,160610,31697],{"class":50},[37,160612,160613,160615],{"class":39,"line":1390},[37,160614,158069],{"class":50},[37,160616,3811],{"class":54},[37,160618,160619,160621,160623,160625,160628,160631,160633,160635,160637,160640],{"class":39,"line":1402},[37,160620,32520],{"class":82},[37,160622,208],{"class":54},[37,160624,258],{"class":50},[37,160626,160627],{"class":309},"\"密码错误，还剩",[37,160629,160630],{"class":82},"{2",[37,160632,52339],{"class":50},[37,160634,3104],{"class":54},[37,160636,1149],{"class":82},[37,160638,160639],{"class":309},"次机会\"",[37,160641,214],{"class":54},[37,160643,160644,160646],{"class":39,"line":1684},[37,160645,1773],{"class":50},[37,160647,3811],{"class":54},[37,160649,160650,160652,160654,160657],{"class":39,"line":1689},[37,160651,31369],{"class":82},[37,160653,208],{"class":54},[37,160655,160656],{"class":309},"\"账号已锁定\"",[37,160658,214],{"class":54},[146,160660,160662],{"id":160661},"_413-小案例菜单程序","4.13 小案例：菜单程序",[27,160664,160666],{"className":29,"code":160665,"language":31,"meta":32,"style":32},"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",[34,160667,160668,160676,160687,160698,160709,160720,160731,160735,160750,160754,160766,160777,160789,160800,160812,160823,160835,160845,160849,160855],{"__ignoreMap":32},[37,160669,160670,160672,160674],{"class":39,"line":40},[37,160671,108710],{"class":50},[37,160673,95339],{"class":82},[37,160675,3811],{"class":54},[37,160677,160678,160680,160682,160685],{"class":39,"line":47},[37,160679,31369],{"class":82},[37,160681,208],{"class":54},[37,160683,160684],{"class":309},"\"====== 菜单 ======\"",[37,160686,214],{"class":54},[37,160688,160689,160691,160693,160696],{"class":39,"line":58},[37,160690,31369],{"class":82},[37,160692,208],{"class":54},[37,160694,160695],{"class":309},"\"1. 查询余额\"",[37,160697,214],{"class":54},[37,160699,160700,160702,160704,160707],{"class":39,"line":64},[37,160701,31369],{"class":82},[37,160703,208],{"class":54},[37,160705,160706],{"class":309},"\"2. 存款\"",[37,160708,214],{"class":54},[37,160710,160711,160713,160715,160718],{"class":39,"line":76},[37,160712,31369],{"class":82},[37,160714,208],{"class":54},[37,160716,160717],{"class":309},"\"3. 取款\"",[37,160719,214],{"class":54},[37,160721,160722,160724,160726,160729],{"class":39,"line":92},[37,160723,31369],{"class":82},[37,160725,208],{"class":54},[37,160727,160728],{"class":309},"\"0. 退出\"",[37,160730,214],{"class":54},[37,160732,160733],{"class":39,"line":97},[37,160734,2472],{"emptyLinePlaceholder":131},[37,160736,160737,160740,160742,160744,160746,160748],{"class":39,"line":107},[37,160738,160739],{"class":54},"    choice ",[37,160741,70],{"class":50},[37,160743,60673],{"class":82},[37,160745,208],{"class":54},[37,160747,153120],{"class":309},[37,160749,214],{"class":54},[37,160751,160752],{"class":39,"line":1390},[37,160753,2472],{"emptyLinePlaceholder":131},[37,160755,160756,160758,160760,160762,160764],{"class":39,"line":1402},[37,160757,3173],{"class":50},[37,160759,153133],{"class":54},[37,160761,3021],{"class":50},[37,160763,153138],{"class":309},[37,160765,3811],{"class":54},[37,160767,160768,160770,160772,160775],{"class":39,"line":1684},[37,160769,32520],{"class":82},[37,160771,208],{"class":54},[37,160773,160774],{"class":309},"\"余额为1000元\"",[37,160776,214],{"class":54},[37,160778,160779,160781,160783,160785,160787],{"class":39,"line":1689},[37,160780,39362],{"class":50},[37,160782,153133],{"class":54},[37,160784,3021],{"class":50},[37,160786,153157],{"class":309},[37,160788,3811],{"class":54},[37,160790,160791,160793,160795,160798],{"class":39,"line":1695},[37,160792,32520],{"class":82},[37,160794,208],{"class":54},[37,160796,160797],{"class":309},"\"存款功能\"",[37,160799,214],{"class":54},[37,160801,160802,160804,160806,160808,160810],{"class":39,"line":1700},[37,160803,39362],{"class":50},[37,160805,153133],{"class":54},[37,160807,3021],{"class":50},[37,160809,153175],{"class":309},[37,160811,3811],{"class":54},[37,160813,160814,160816,160818,160821],{"class":39,"line":1714},[37,160815,32520],{"class":82},[37,160817,208],{"class":54},[37,160819,160820],{"class":309},"\"取款功能\"",[37,160822,214],{"class":54},[37,160824,160825,160827,160829,160831,160833],{"class":39,"line":1719},[37,160826,39362],{"class":50},[37,160828,153133],{"class":54},[37,160830,3021],{"class":50},[37,160832,153229],{"class":309},[37,160834,3811],{"class":54},[37,160836,160837,160839,160841,160843],{"class":39,"line":1725},[37,160838,32520],{"class":82},[37,160840,208],{"class":54},[37,160842,153240],{"class":309},[37,160844,214],{"class":54},[37,160846,160847],{"class":39,"line":1746},[37,160848,31697],{"class":50},[37,160850,160851,160853],{"class":39,"line":1751},[37,160852,158069],{"class":50},[37,160854,3811],{"class":54},[37,160856,160857,160859,160861,160863],{"class":39,"line":1765},[37,160858,32520],{"class":82},[37,160860,208],{"class":54},[37,160862,153261],{"class":309},[37,160864,214],{"class":54},[14,160866,160867,160868,160870,160871,28458],{},"菜单类程序通常使用 ",[34,160869,159569],{},"，用户选择退出时 ",[34,160872,2125],{},[146,160874,160876],{"id":160875},"_414-易错点","4.14 易错点",[158,160878,160879,160884,160890,160898,160904],{},[161,160880,160881,160883],{},[34,160882,108710],{}," 循环必须更新控制变量。",[161,160885,160886,160889],{},[34,160887,160888],{},"range(1, 10)"," 不包含 10。",[161,160891,160892,160894,160895,160897],{},[34,160893,2125],{}," 结束整个循环，",[34,160896,154719],{}," 只跳过本轮。",[161,160899,160900,160901,160903],{},"嵌套循环中，",[34,160902,2125],{}," 只跳出当前所在的一层循环。",[161,160905,160906],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[146,160908,160910],{"id":160909},"_415-本章练习","4.15 本章练习",[158,160912,160913,160916,160919,160922,160925],{},[161,160914,160915],{},"输出 1 到 100。",[161,160917,160918],{},"计算 1 到 100 的偶数和。",[161,160920,160921],{},"输出 100 以内能被 3 和 5 同时整除的数。",[161,160923,160924],{},"编写猜数字游戏，限制最多猜 7 次。",[161,160926,160927],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[123,160929,160930],{},"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":32,"searchDepth":47,"depth":47,"links":160932},[160933,160934,160935,160936,160937,160941,160942,160943,160944,160945,160946,160947,160948,160949,160950],{"id":159189,"depth":47,"text":159190},{"id":159219,"depth":47,"text":159220},{"id":159308,"depth":47,"text":159309},{"id":159402,"depth":47,"text":159403},{"id":159576,"depth":47,"text":159577,"children":160938},[160939,160940],{"id":159580,"depth":58,"text":159581},{"id":159644,"depth":58,"text":159645},{"id":159708,"depth":47,"text":159709},{"id":159803,"depth":47,"text":159804},{"id":159912,"depth":47,"text":159913},{"id":160108,"depth":47,"text":160109},{"id":160193,"depth":47,"text":160194},{"id":160332,"depth":47,"text":160333},{"id":160512,"depth":47,"text":160513},{"id":160661,"depth":47,"text":160662},{"id":160875,"depth":47,"text":160876},{"id":160909,"depth":47,"text":160910},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159181,"description":128},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160957,"title":160958,"body":160959,"description":128,"extension":129,"meta":162964,"navigation":131,"path":162965,"seo":162966,"stem":162967,"__hash__":162968},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160960,"toc":162944},[160961,160964,160968,160971,160974,160988,160991,161005,161009,161011,161030,161032,161079,161081,161095,161099,161173,161176,161180,161183,161242,161250,161253,161306,161309,161313,161318,161373,161381,161431,161435,161440,161448,161547,161553,161557,161562,161565,161576,161617,161630,161634,161637,161673,161676,161689,161692,161752,161756,161760,161763,161814,161818,161821,161868,161874,161940,161943,161947,161950,162066,162069,162073,162076,162182,162186,162189,162227,162230,162272,162275,162335,162338,162342,162806,162809,162813,162840,162846,162907,162911,162941],[10,160962,160958],{"id":160963},"_5-函数基础",[146,160965,160967],{"id":160966},"_51-为什么需要函数","5.1 为什么需要函数",[14,160969,160970],{},"函数用于封装一段可以重复使用的代码。",[14,160972,160973],{},"不使用函数的问题：",[158,160975,160976,160979,160982,160985],{},[161,160977,160978],{},"重复代码多。",[161,160980,160981],{},"修改逻辑时容易漏改。",[161,160983,160984],{},"主流程不清晰。",[161,160986,160987],{},"程序越写越长，难以维护。",[14,160989,160990],{},"使用函数后的好处：",[158,160992,160993,160996,160999,161002],{},[161,160994,160995],{},"提高复用性。",[161,160997,160998],{},"提高可读性。",[161,161000,161001],{},"便于调试。",[161,161003,161004],{},"便于分工。",[146,161006,161008],{"id":161007},"_52-函数定义","5.2 函数定义",[14,161010,5253],{},[27,161012,161014],{"className":29,"code":161013,"language":31,"meta":32,"style":32},"def 函数名():\n    函数体\n",[34,161015,161016,161025],{"__ignoreMap":32},[37,161017,161018,161020,161023],{"class":39,"line":40},[37,161019,32017],{"class":50},[37,161021,161022],{"class":2035}," 函数名",[37,161024,32023],{"class":54},[37,161026,161027],{"class":39,"line":47},[37,161028,161029],{"class":54},"    函数体\n",[14,161031,15207],{},[27,161033,161035],{"className":29,"code":161034,"language":31,"meta":32,"style":32},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[34,161036,161037,161046,161056,161066,161070,161074],{"__ignoreMap":32},[37,161038,161039,161041,161044],{"class":39,"line":40},[37,161040,32017],{"class":50},[37,161042,161043],{"class":2035}," say_hello",[37,161045,32023],{"class":54},[37,161047,161048,161050,161052,161054],{"class":39,"line":47},[37,161049,31369],{"class":82},[37,161051,208],{"class":54},[37,161053,5916],{"class":309},[37,161055,214],{"class":54},[37,161057,161058,161060,161062,161064],{"class":39,"line":58},[37,161059,31369],{"class":82},[37,161061,208],{"class":54},[37,161063,146686],{"class":309},[37,161065,214],{"class":54},[37,161067,161068],{"class":39,"line":64},[37,161069,2472],{"emptyLinePlaceholder":131},[37,161071,161072],{"class":39,"line":76},[37,161073,2472],{"emptyLinePlaceholder":131},[37,161075,161076],{"class":39,"line":92},[37,161077,161078],{"class":54},"say_hello()\n",[14,161080,9097],{},[158,161082,161083,161086,161089,161092],{},[161,161084,161085],{},"函数必须先定义，再调用。",[161,161087,161088],{},"函数名遵循变量命名规则。",[161,161090,161091],{},"函数体需要缩进。",[161,161093,161094],{},"函数不调用就不会执行。",[146,161096,161098],{"id":161097},"_53-函数调用","5.3 函数调用",[27,161100,161102],{"className":29,"code":161101,"language":31,"meta":32,"style":32},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[34,161103,161104,161113,161124,161135,161146,161156,161160,161164,161169],{"__ignoreMap":32},[37,161105,161106,161108,161111],{"class":39,"line":40},[37,161107,32017],{"class":50},[37,161109,161110],{"class":2035}," print_menu",[37,161112,32023],{"class":54},[37,161114,161115,161117,161119,161122],{"class":39,"line":47},[37,161116,31369],{"class":82},[37,161118,208],{"class":54},[37,161120,161121],{"class":309},"\"1. 查询\"",[37,161123,214],{"class":54},[37,161125,161126,161128,161130,161133],{"class":39,"line":58},[37,161127,31369],{"class":82},[37,161129,208],{"class":54},[37,161131,161132],{"class":309},"\"2. 添加\"",[37,161134,214],{"class":54},[37,161136,161137,161139,161141,161144],{"class":39,"line":64},[37,161138,31369],{"class":82},[37,161140,208],{"class":54},[37,161142,161143],{"class":309},"\"3. 删除\"",[37,161145,214],{"class":54},[37,161147,161148,161150,161152,161154],{"class":39,"line":76},[37,161149,31369],{"class":82},[37,161151,208],{"class":54},[37,161153,160728],{"class":309},[37,161155,214],{"class":54},[37,161157,161158],{"class":39,"line":92},[37,161159,2472],{"emptyLinePlaceholder":131},[37,161161,161162],{"class":39,"line":97},[37,161163,2472],{"emptyLinePlaceholder":131},[37,161165,161166],{"class":39,"line":107},[37,161167,161168],{"class":54},"print_menu()\n",[37,161170,161171],{"class":39,"line":1390},[37,161172,161168],{"class":54},[14,161174,161175],{},"函数可以多次调用，每次调用都会执行函数体。",[146,161177,161179],{"id":161178},"_54-参数","5.4 参数",[14,161181,161182],{},"参数用于向函数传递数据。",[27,161184,161186],{"className":29,"code":161185,"language":31,"meta":32,"style":32},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[34,161187,161188,161197,161217,161221,161225,161234],{"__ignoreMap":32},[37,161189,161190,161192,161194],{"class":39,"line":40},[37,161191,32017],{"class":50},[37,161193,161043],{"class":2035},[37,161195,161196],{"class":54},"(name):\n",[37,161198,161199,161201,161203,161205,161207,161209,161211,161213,161215],{"class":39,"line":47},[37,161200,31369],{"class":82},[37,161202,208],{"class":54},[37,161204,258],{"class":50},[37,161206,157101],{"class":309},[37,161208,1099],{"class":82},[37,161210,79878],{"class":54},[37,161212,1149],{"class":82},[37,161214,456],{"class":309},[37,161216,214],{"class":54},[37,161218,161219],{"class":39,"line":58},[37,161220,2472],{"emptyLinePlaceholder":131},[37,161222,161223],{"class":39,"line":64},[37,161224,2472],{"emptyLinePlaceholder":131},[37,161226,161227,161230,161232],{"class":39,"line":76},[37,161228,161229],{"class":54},"say_hello(",[37,161231,149935],{"class":309},[37,161233,214],{"class":54},[37,161235,161236,161238,161240],{"class":39,"line":92},[37,161237,161229],{"class":54},[37,161239,150983],{"class":309},[37,161241,214],{"class":54},[14,161243,161244,161246,161247,161249],{},[34,161245,79878],{}," 是形参，",[34,161248,149935],{}," 是实参。",[14,161251,161252],{},"多个参数：",[27,161254,161256],{"className":29,"code":161255,"language":31,"meta":32,"style":32},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[34,161257,161258,161266,161279,161285,161289,161293],{"__ignoreMap":32},[37,161259,161260,161262,161264],{"class":39,"line":40},[37,161261,32017],{"class":50},[37,161263,5281],{"class":2035},[37,161265,151140],{"class":54},[37,161267,161268,161271,161273,161275,161277],{"class":39,"line":47},[37,161269,161270],{"class":54},"    result ",[37,161272,70],{"class":50},[37,161274,10941],{"class":54},[37,161276,685],{"class":50},[37,161278,151151],{"class":54},[37,161280,161281,161283],{"class":39,"line":58},[37,161282,31369],{"class":82},[37,161284,76653],{"class":54},[37,161286,161287],{"class":39,"line":64},[37,161288,2472],{"emptyLinePlaceholder":131},[37,161290,161291],{"class":39,"line":76},[37,161292,2472],{"emptyLinePlaceholder":131},[37,161294,161295,161298,161300,161302,161304],{"class":39,"line":92},[37,161296,161297],{"class":54},"add(",[37,161299,650],{"class":82},[37,161301,12507],{"class":54},[37,161303,903],{"class":82},[37,161305,214],{"class":54},[14,161307,161308],{},"调用时参数数量必须匹配。",[146,161310,161312],{"id":161311},"_55-返回值","5.5 返回值",[14,161314,161315,161317],{},[34,161316,17118],{}," 用于把函数内部的结果返回给调用者。",[27,161319,161321],{"className":29,"code":161320,"language":31,"meta":32,"style":32},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[34,161322,161323,161331,161341,161345,161349,161367],{"__ignoreMap":32},[37,161324,161325,161327,161329],{"class":39,"line":40},[37,161326,32017],{"class":50},[37,161328,5281],{"class":2035},[37,161330,151140],{"class":54},[37,161332,161333,161335,161337,161339],{"class":39,"line":47},[37,161334,4162],{"class":50},[37,161336,10941],{"class":54},[37,161338,685],{"class":50},[37,161340,151151],{"class":54},[37,161342,161343],{"class":39,"line":58},[37,161344,2472],{"emptyLinePlaceholder":131},[37,161346,161347],{"class":39,"line":64},[37,161348,2472],{"emptyLinePlaceholder":131},[37,161350,161351,161354,161356,161359,161361,161363,161365],{"class":39,"line":76},[37,161352,161353],{"class":54},"result ",[37,161355,70],{"class":50},[37,161357,161358],{"class":54}," add(",[37,161360,650],{"class":82},[37,161362,12507],{"class":54},[37,161364,903],{"class":82},[37,161366,214],{"class":54},[37,161368,161369,161371],{"class":39,"line":92},[37,161370,30485],{"class":82},[37,161372,76653],{"class":54},[14,161374,161375,161376,161378,161379,28458],{},"如果函数没有写 ",[34,161377,17118],{},"，默认返回 ",[34,161380,95733],{},[27,161382,161384],{"className":29,"code":161383,"language":31,"meta":32,"style":32},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[34,161385,161386,161394,161404,161408,161412,161421],{"__ignoreMap":32},[37,161387,161388,161390,161392],{"class":39,"line":40},[37,161389,32017],{"class":50},[37,161391,161043],{"class":2035},[37,161393,32023],{"class":54},[37,161395,161396,161398,161400,161402],{"class":39,"line":47},[37,161397,31369],{"class":82},[37,161399,208],{"class":54},[37,161401,5916],{"class":309},[37,161403,214],{"class":54},[37,161405,161406],{"class":39,"line":58},[37,161407,2472],{"emptyLinePlaceholder":131},[37,161409,161410],{"class":39,"line":64},[37,161411,2472],{"emptyLinePlaceholder":131},[37,161413,161414,161416,161418],{"class":39,"line":76},[37,161415,161353],{"class":54},[37,161417,70],{"class":50},[37,161419,161420],{"class":54}," say_hello()\n",[37,161422,161423,161425,161428],{"class":39,"line":92},[37,161424,30485],{"class":82},[37,161426,161427],{"class":54},"(result)  ",[37,161429,161430],{"class":43},"# None\n",[146,161432,161434],{"id":161433},"_56-return的作用","5.6 return的作用",[14,161436,161437,161439],{},[34,161438,17118],{}," 有两个作用：",[158,161441,161442,161445],{},[161,161443,161444],{},"返回结果。",[161,161446,161447],{},"结束函数。",[27,161449,161451],{"className":29,"code":161450,"language":31,"meta":32,"style":32},"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",[34,161452,161453,161463,161475,161482,161486,161498,161505,161509,161516,161520,161524,161535],{"__ignoreMap":32},[37,161454,161455,161457,161460],{"class":39,"line":40},[37,161456,32017],{"class":50},[37,161458,161459],{"class":2035}," check_age",[37,161461,161462],{"class":54},"(age):\n",[37,161464,161465,161467,161469,161471,161473],{"class":39,"line":47},[37,161466,3173],{"class":50},[37,161468,15779],{"class":54},[37,161470,1113],{"class":50},[37,161472,4165],{"class":82},[37,161474,3811],{"class":54},[37,161476,161477,161479],{"class":39,"line":58},[37,161478,14824],{"class":50},[37,161480,161481],{"class":309}," \"年龄不合法\"\n",[37,161483,161484],{"class":39,"line":64},[37,161485,2472],{"emptyLinePlaceholder":131},[37,161487,161488,161490,161492,161494,161496],{"class":39,"line":76},[37,161489,3173],{"class":50},[37,161491,15779],{"class":54},[37,161493,1782],{"class":50},[37,161495,156332],{"class":82},[37,161497,3811],{"class":54},[37,161499,161500,161502],{"class":39,"line":92},[37,161501,14824],{"class":50},[37,161503,161504],{"class":309}," \"成年人\"\n",[37,161506,161507],{"class":39,"line":97},[37,161508,2472],{"emptyLinePlaceholder":131},[37,161510,161511,161513],{"class":39,"line":107},[37,161512,4162],{"class":50},[37,161514,161515],{"class":309}," \"未成年人\"\n",[37,161517,161518],{"class":39,"line":1390},[37,161519,2472],{"emptyLinePlaceholder":131},[37,161521,161522],{"class":39,"line":1402},[37,161523,2472],{"emptyLinePlaceholder":131},[37,161525,161526,161528,161531,161533],{"class":39,"line":1684},[37,161527,30485],{"class":82},[37,161529,161530],{"class":54},"(check_age(",[37,161532,903],{"class":82},[37,161534,30567],{"class":54},[37,161536,161537,161539,161541,161543,161545],{"class":39,"line":1689},[37,161538,30485],{"class":82},[37,161540,161530],{"class":54},[37,161542,112],{"class":50},[37,161544,422],{"class":82},[37,161546,30567],{"class":54},[14,161548,161549,161550,161552],{},"函数执行到 ",[34,161551,17118],{}," 后，后面的代码不会继续执行。",[146,161554,161556],{"id":161555},"_57-none","5.7 None",[14,161558,161559,161561],{},[34,161560,95733],{}," 表示空值或没有结果。",[14,161563,161564],{},"常见使用场景：",[158,161566,161567,161570,161573],{},[161,161568,161569],{},"函数没有返回值。",[161,161571,161572],{},"变量暂时没有具体值。",[161,161574,161575],{},"表示查询不到结果。",[27,161577,161579],{"className":29,"code":161578,"language":31,"meta":32,"style":32},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[34,161580,161581,161589,161593,161606],{"__ignoreMap":32},[37,161582,161583,161585,161587],{"class":39,"line":40},[37,161584,161353],{"class":54},[37,161586,70],{"class":50},[37,161588,152219],{"class":82},[37,161590,161591],{"class":39,"line":47},[37,161592,2472],{"emptyLinePlaceholder":131},[37,161594,161595,161597,161600,161602,161604],{"class":39,"line":58},[37,161596,1603],{"class":50},[37,161598,161599],{"class":54}," result ",[37,161601,38996],{"class":50},[37,161603,39002],{"class":82},[37,161605,3811],{"class":54},[37,161607,161608,161610,161612,161615],{"class":39,"line":64},[37,161609,31369],{"class":82},[37,161611,208],{"class":54},[37,161613,161614],{"class":309},"\"没有数据\"",[37,161616,214],{"class":54},[14,161618,161619,161620,161622,161623,161626,161627,28458],{},"判断 ",[34,161621,95733],{}," 推荐使用 ",[34,161624,161625],{},"is None","，不要写成 ",[34,161628,161629],{},"== None",[146,161631,161633],{"id":161632},"_58-函数文档字符串","5.8 函数文档字符串",[14,161635,161636],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[27,161638,161640],{"className":29,"code":161639,"language":31,"meta":32,"style":32},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[34,161641,161642,161652,161657],{"__ignoreMap":32},[37,161643,161644,161646,161649],{"class":39,"line":40},[37,161645,32017],{"class":50},[37,161647,161648],{"class":2035}," calculate_bmi",[37,161650,161651],{"class":54},"(weight, height):\n",[37,161653,161654],{"class":39,"line":47},[37,161655,161656],{"class":309},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[37,161658,161659,161661,161664,161666,161669,161671],{"class":39,"line":58},[37,161660,4162],{"class":50},[37,161662,161663],{"class":54}," weight ",[37,161665,787],{"class":50},[37,161667,161668],{"class":54}," height ",[37,161670,10733],{"class":50},[37,161672,47791],{"class":82},[14,161674,161675],{},"查看说明：",[27,161677,161679],{"className":29,"code":161678,"language":31,"meta":32,"style":32},"help(calculate_bmi)\n",[34,161680,161681],{"__ignoreMap":32},[37,161682,161683,161686],{"class":39,"line":40},[37,161684,161685],{"class":82},"help",[37,161687,161688],{"class":54},"(calculate_bmi)\n",[14,161690,161691],{},"较完整的写法：",[27,161693,161695],{"className":29,"code":161694,"language":31,"meta":32,"style":32},"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",[34,161696,161697,161705,161710,161715,161719,161724,161729,161734,161738],{"__ignoreMap":32},[37,161698,161699,161701,161703],{"class":39,"line":40},[37,161700,32017],{"class":50},[37,161702,161648],{"class":2035},[37,161704,161651],{"class":54},[37,161706,161707],{"class":39,"line":47},[37,161708,161709],{"class":309},"    \"\"\"\n",[37,161711,161712],{"class":39,"line":58},[37,161713,161714],{"class":309},"    计算BMI。\n",[37,161716,161717],{"class":39,"line":64},[37,161718,2472],{"emptyLinePlaceholder":131},[37,161720,161721],{"class":39,"line":76},[37,161722,161723],{"class":309},"    :param weight: 体重，单位kg\n",[37,161725,161726],{"class":39,"line":92},[37,161727,161728],{"class":309},"    :param height: 身高，单位m\n",[37,161730,161731],{"class":39,"line":97},[37,161732,161733],{"class":309},"    :return: BMI数值\n",[37,161735,161736],{"class":39,"line":107},[37,161737,161709],{"class":309},[37,161739,161740,161742,161744,161746,161748,161750],{"class":39,"line":1390},[37,161741,4162],{"class":50},[37,161743,161663],{"class":54},[37,161745,787],{"class":50},[37,161747,161668],{"class":54},[37,161749,10733],{"class":50},[37,161751,47791],{"class":82},[146,161753,161755],{"id":161754},"_59-变量作用域","5.9 变量作用域",[175,161757,161759],{"id":161758},"_591-局部变量","5.9.1 局部变量",[14,161761,161762],{},"在函数内部定义的变量，只能在函数内部使用。",[27,161764,161766],{"className":29,"code":161765,"language":31,"meta":32,"style":32},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[34,161767,161768,161777,161785,161791,161795,161799,161804],{"__ignoreMap":32},[37,161769,161770,161772,161775],{"class":39,"line":40},[37,161771,32017],{"class":50},[37,161773,161774],{"class":2035}," test",[37,161776,32023],{"class":54},[37,161778,161779,161781,161783],{"class":39,"line":47},[37,161780,45662],{"class":54},[37,161782,70],{"class":50},[37,161784,58496],{"class":82},[37,161786,161787,161789],{"class":39,"line":58},[37,161788,31369],{"class":82},[37,161790,221],{"class":54},[37,161792,161793],{"class":39,"line":64},[37,161794,2472],{"emptyLinePlaceholder":131},[37,161796,161797],{"class":39,"line":76},[37,161798,2472],{"emptyLinePlaceholder":131},[37,161800,161801],{"class":39,"line":92},[37,161802,161803],{"class":54},"test()\n",[37,161805,161806,161808,161811],{"class":39,"line":97},[37,161807,30485],{"class":82},[37,161809,161810],{"class":54},"(num)  ",[37,161812,161813],{"class":43},"# 报错\n",[175,161815,161817],{"id":161816},"_592-全局变量","5.9.2 全局变量",[14,161819,161820],{},"在函数外部定义的变量，可以在函数内部读取。",[27,161822,161824],{"className":29,"code":161823,"language":31,"meta":32,"style":32},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[34,161825,161826,161834,161838,161842,161850,161856,161860,161864],{"__ignoreMap":32},[37,161827,161828,161830,161832],{"class":39,"line":40},[37,161829,146583],{"class":54},[37,161831,70],{"class":50},[37,161833,149400],{"class":309},[37,161835,161836],{"class":39,"line":47},[37,161837,2472],{"emptyLinePlaceholder":131},[37,161839,161840],{"class":39,"line":58},[37,161841,2472],{"emptyLinePlaceholder":131},[37,161843,161844,161846,161848],{"class":39,"line":64},[37,161845,32017],{"class":50},[37,161847,161043],{"class":2035},[37,161849,32023],{"class":54},[37,161851,161852,161854],{"class":39,"line":76},[37,161853,31369],{"class":82},[37,161855,150707],{"class":54},[37,161857,161858],{"class":39,"line":92},[37,161859,2472],{"emptyLinePlaceholder":131},[37,161861,161862],{"class":39,"line":97},[37,161863,2472],{"emptyLinePlaceholder":131},[37,161865,161866],{"class":39,"line":107},[37,161867,161078],{"class":54},[14,161869,161870,161871,28458],{},"如果要在函数内部修改全局变量，需要 ",[34,161872,161873],{},"global",[27,161875,161877],{"className":29,"code":161876,"language":31,"meta":32,"style":32},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[34,161878,161879,161887,161891,161895,161904,161912,161920,161924,161928,161933],{"__ignoreMap":32},[37,161880,161881,161883,161885],{"class":39,"line":40},[37,161882,146738],{"class":54},[37,161884,70],{"class":50},[37,161886,47401],{"class":82},[37,161888,161889],{"class":39,"line":47},[37,161890,2472],{"emptyLinePlaceholder":131},[37,161892,161893],{"class":39,"line":58},[37,161894,2472],{"emptyLinePlaceholder":131},[37,161896,161897,161899,161902],{"class":39,"line":64},[37,161898,32017],{"class":50},[37,161900,161901],{"class":2035}," add_count",[37,161903,32023],{"class":54},[37,161905,161906,161909],{"class":39,"line":76},[37,161907,161908],{"class":50},"    global",[37,161910,161911],{"class":54}," count\n",[37,161913,161914,161916,161918],{"class":39,"line":92},[37,161915,159480],{"class":54},[37,161917,9549],{"class":50},[37,161919,55767],{"class":82},[37,161921,161922],{"class":39,"line":97},[37,161923,2472],{"emptyLinePlaceholder":131},[37,161925,161926],{"class":39,"line":107},[37,161927,2472],{"emptyLinePlaceholder":131},[37,161929,161930],{"class":39,"line":1390},[37,161931,161932],{"class":54},"add_count()\n",[37,161934,161935,161937],{"class":39,"line":1402},[37,161936,30485],{"class":82},[37,161938,161939],{"class":54},"(count)\n",[14,161941,161942],{},"不建议大量使用全局变量，项目变大后很难维护。",[146,161944,161946],{"id":161945},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,161948,161949],{},"一个函数中可以调用另一个函数。",[27,161951,161953],{"className":29,"code":161952,"language":31,"meta":32,"style":32},"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",[34,161954,161955,161964,161978,161982,161986,161995,162000,162020,162041,162045,162049,162053],{"__ignoreMap":32},[37,161956,161957,161959,161962],{"class":39,"line":40},[37,161958,32017],{"class":50},[37,161960,161961],{"class":2035}," print_line",[37,161963,32023],{"class":54},[37,161965,161966,161968,161970,161972,161974,161976],{"class":39,"line":47},[37,161967,31369],{"class":82},[37,161969,208],{"class":54},[37,161971,32552],{"class":309},[37,161973,6590],{"class":50},[37,161975,78733],{"class":82},[37,161977,214],{"class":54},[37,161979,161980],{"class":39,"line":58},[37,161981,2472],{"emptyLinePlaceholder":131},[37,161983,161984],{"class":39,"line":64},[37,161985,2472],{"emptyLinePlaceholder":131},[37,161987,161988,161990,161993],{"class":39,"line":76},[37,161989,32017],{"class":50},[37,161991,161992],{"class":2035}," print_info",[37,161994,149422],{"class":54},[37,161996,161997],{"class":39,"line":92},[37,161998,161999],{"class":54},"    print_line()\n",[37,162001,162002,162004,162006,162008,162010,162012,162014,162016,162018],{"class":39,"line":97},[37,162003,31369],{"class":82},[37,162005,208],{"class":54},[37,162007,258],{"class":50},[37,162009,156729],{"class":309},[37,162011,1099],{"class":82},[37,162013,79878],{"class":54},[37,162015,1149],{"class":82},[37,162017,456],{"class":309},[37,162019,214],{"class":54},[37,162021,162022,162024,162026,162028,162031,162033,162035,162037,162039],{"class":39,"line":107},[37,162023,31369],{"class":82},[37,162025,208],{"class":54},[37,162027,258],{"class":50},[37,162029,162030],{"class":309},"\"年龄:",[37,162032,1099],{"class":82},[37,162034,70289],{"class":54},[37,162036,1149],{"class":82},[37,162038,456],{"class":309},[37,162040,214],{"class":54},[37,162042,162043],{"class":39,"line":1390},[37,162044,161999],{"class":54},[37,162046,162047],{"class":39,"line":1402},[37,162048,2472],{"emptyLinePlaceholder":131},[37,162050,162051],{"class":39,"line":1684},[37,162052,2472],{"emptyLinePlaceholder":131},[37,162054,162055,162058,162060,162062,162064],{"class":39,"line":1689},[37,162056,162057],{"class":54},"print_info(",[37,162059,149935],{"class":309},[37,162061,12507],{"class":54},[37,162063,853],{"class":82},[37,162065,214],{"class":54},[14,162067,162068],{},"这种方式可以把小功能组合成大功能。",[146,162070,162072],{"id":162071},"_511-参数检查","5.11 参数检查",[14,162074,162075],{},"函数内部可以检查参数是否合法。",[27,162077,162079],{"className":29,"code":162078,"language":31,"meta":32,"style":32},"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",[34,162080,162081,162090,162102,162108,162118,162122,162126,162143,162147,162159,162170,162176],{"__ignoreMap":32},[37,162082,162083,162085,162088],{"class":39,"line":40},[37,162084,32017],{"class":50},[37,162086,162087],{"class":2035}," divide",[37,162089,151140],{"class":54},[37,162091,162092,162094,162096,162098,162100],{"class":39,"line":47},[37,162093,3173],{"class":50},[37,162095,10954],{"class":54},[37,162097,3021],{"class":50},[37,162099,4165],{"class":82},[37,162101,3811],{"class":54},[37,162103,162104,162106],{"class":39,"line":58},[37,162105,14824],{"class":50},[37,162107,152219],{"class":82},[37,162109,162110,162112,162114,162116],{"class":39,"line":64},[37,162111,4162],{"class":50},[37,162113,10941],{"class":54},[37,162115,787],{"class":50},[37,162117,151151],{"class":54},[37,162119,162120],{"class":39,"line":76},[37,162121,2472],{"emptyLinePlaceholder":131},[37,162123,162124],{"class":39,"line":92},[37,162125,2472],{"emptyLinePlaceholder":131},[37,162127,162128,162130,162132,162135,162137,162139,162141],{"class":39,"line":97},[37,162129,161353],{"class":54},[37,162131,70],{"class":50},[37,162133,162134],{"class":54}," divide(",[37,162136,650],{"class":82},[37,162138,12507],{"class":54},[37,162140,396],{"class":82},[37,162142,214],{"class":54},[37,162144,162145],{"class":39,"line":107},[37,162146,2472],{"emptyLinePlaceholder":131},[37,162148,162149,162151,162153,162155,162157],{"class":39,"line":1390},[37,162150,1603],{"class":50},[37,162152,161599],{"class":54},[37,162154,38996],{"class":50},[37,162156,39002],{"class":82},[37,162158,3811],{"class":54},[37,162160,162161,162163,162165,162168],{"class":39,"line":1402},[37,162162,31369],{"class":82},[37,162164,208],{"class":54},[37,162166,162167],{"class":309},"\"除数不能为0\"",[37,162169,214],{"class":54},[37,162171,162172,162174],{"class":39,"line":1684},[37,162173,1773],{"class":50},[37,162175,3811],{"class":54},[37,162177,162178,162180],{"class":39,"line":1689},[37,162179,31369],{"class":82},[37,162181,76653],{"class":54},[146,162183,162185],{"id":162184},"_512-类型提示","5.12 类型提示",[14,162187,162188],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[27,162190,162192],{"className":29,"code":162191,"language":31,"meta":32,"style":32},"def add(a: int, b: int) -> int:\n    return a + b\n",[34,162193,162194,162217],{"__ignoreMap":32},[37,162195,162196,162198,162200,162203,162205,162208,162210,162213,162215],{"class":39,"line":40},[37,162197,32017],{"class":50},[37,162199,5281],{"class":2035},[37,162201,162202],{"class":54},"(a: ",[37,162204,211],{"class":82},[37,162206,162207],{"class":54},", b: ",[37,162209,211],{"class":82},[37,162211,162212],{"class":54},") -> ",[37,162214,211],{"class":82},[37,162216,3811],{"class":54},[37,162218,162219,162221,162223,162225],{"class":39,"line":47},[37,162220,4162],{"class":50},[37,162222,10941],{"class":54},[37,162224,685],{"class":50},[37,162226,151151],{"class":54},[14,162228,162229],{},"字符串参数：",[27,162231,162233],{"className":29,"code":162232,"language":31,"meta":32,"style":32},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[34,162234,162235,162252],{"__ignoreMap":32},[37,162236,162237,162239,162241,162244,162246,162248,162250],{"class":39,"line":40},[37,162238,32017],{"class":50},[37,162240,161043],{"class":2035},[37,162242,162243],{"class":54},"(name: ",[37,162245,1373],{"class":82},[37,162247,162212],{"class":54},[37,162249,95733],{"class":82},[37,162251,3811],{"class":54},[37,162253,162254,162256,162258,162260,162262,162264,162266,162268,162270],{"class":39,"line":47},[37,162255,31369],{"class":82},[37,162257,208],{"class":54},[37,162259,258],{"class":50},[37,162261,157101],{"class":309},[37,162263,1099],{"class":82},[37,162265,79878],{"class":54},[37,162267,1149],{"class":82},[37,162269,456],{"class":309},[37,162271,214],{"class":54},[14,162273,162274],{},"列表参数：",[27,162276,162278],{"className":29,"code":162277,"language":31,"meta":32,"style":32},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[34,162279,162280,162299,162307,162319,162328],{"__ignoreMap":32},[37,162281,162282,162284,162287,162290,162292,162295,162297],{"class":39,"line":40},[37,162283,32017],{"class":50},[37,162285,162286],{"class":2035}," get_total",[37,162288,162289],{"class":54},"(numbers: list[",[37,162291,211],{"class":82},[37,162293,162294],{"class":54},"]) -> ",[37,162296,211],{"class":82},[37,162298,3811],{"class":54},[37,162300,162301,162303,162305],{"class":39,"line":47},[37,162302,159354],{"class":54},[37,162304,70],{"class":50},[37,162306,47401],{"class":82},[37,162308,162309,162311,162314,162316],{"class":39,"line":58},[37,162310,3273],{"class":50},[37,162312,162313],{"class":54}," number ",[37,162315,26116],{"class":50},[37,162317,162318],{"class":54}," numbers:\n",[37,162320,162321,162323,162325],{"class":39,"line":64},[37,162322,160029],{"class":54},[37,162324,9549],{"class":50},[37,162326,162327],{"class":54}," number\n",[37,162329,162330,162332],{"class":39,"line":76},[37,162331,4162],{"class":50},[37,162333,162334],{"class":54}," total\n",[14,162336,162337],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[146,162339,162341],{"id":162340},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[27,162343,162345],{"className":29,"code":162344,"language":31,"meta":32,"style":32},"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",[34,162346,162347,162357,162361,162365,162373,162384,162394,162404,162414,162424,162428,162432,162441,162463,162467,162471,162480,162486,162506,162518,162529,162533,162542,162553,162558,162562,162566,162575,162581,162600,162612,162622,162626,162637,162647,162651,162659,162670,162674,162678,162682,162690,162695,162709,162713,162725,162730,162742,162747,162759,162764,162776,162786,162790,162796],{"__ignoreMap":32},[37,162348,162349,162352,162354],{"class":39,"line":40},[37,162350,162351],{"class":54},"balance ",[37,162353,70],{"class":50},[37,162355,162356],{"class":82}," 1000\n",[37,162358,162359],{"class":39,"line":47},[37,162360,2472],{"emptyLinePlaceholder":131},[37,162362,162363],{"class":39,"line":58},[37,162364,2472],{"emptyLinePlaceholder":131},[37,162366,162367,162369,162371],{"class":39,"line":64},[37,162368,32017],{"class":50},[37,162370,152080],{"class":2035},[37,162372,32023],{"class":54},[37,162374,162375,162377,162379,162382],{"class":39,"line":76},[37,162376,31369],{"class":82},[37,162378,208],{"class":54},[37,162380,162381],{"class":309},"\"====== ATM ======\"",[37,162383,214],{"class":54},[37,162385,162386,162388,162390,162392],{"class":39,"line":92},[37,162387,31369],{"class":82},[37,162389,208],{"class":54},[37,162391,160695],{"class":309},[37,162393,214],{"class":54},[37,162395,162396,162398,162400,162402],{"class":39,"line":97},[37,162397,31369],{"class":82},[37,162399,208],{"class":54},[37,162401,160706],{"class":309},[37,162403,214],{"class":54},[37,162405,162406,162408,162410,162412],{"class":39,"line":107},[37,162407,31369],{"class":82},[37,162409,208],{"class":54},[37,162411,160717],{"class":309},[37,162413,214],{"class":54},[37,162415,162416,162418,162420,162422],{"class":39,"line":1390},[37,162417,31369],{"class":82},[37,162419,208],{"class":54},[37,162421,160728],{"class":309},[37,162423,214],{"class":54},[37,162425,162426],{"class":39,"line":1402},[37,162427,2472],{"emptyLinePlaceholder":131},[37,162429,162430],{"class":39,"line":1684},[37,162431,2472],{"emptyLinePlaceholder":131},[37,162433,162434,162436,162439],{"class":39,"line":1689},[37,162435,32017],{"class":50},[37,162437,162438],{"class":2035}," show_balance",[37,162440,32023],{"class":54},[37,162442,162443,162445,162447,162449,162452,162454,162457,162459,162461],{"class":39,"line":1695},[37,162444,31369],{"class":82},[37,162446,208],{"class":54},[37,162448,258],{"class":50},[37,162450,162451],{"class":309},"\"当前余额:",[37,162453,1099],{"class":82},[37,162455,162456],{"class":54},"balance",[37,162458,1149],{"class":82},[37,162460,157059],{"class":309},[37,162462,214],{"class":54},[37,162464,162465],{"class":39,"line":1700},[37,162466,2472],{"emptyLinePlaceholder":131},[37,162468,162469],{"class":39,"line":1714},[37,162470,2472],{"emptyLinePlaceholder":131},[37,162472,162473,162475,162478],{"class":39,"line":1719},[37,162474,32017],{"class":50},[37,162476,162477],{"class":2035}," save_money",[37,162479,32023],{"class":54},[37,162481,162482,162484],{"class":39,"line":1725},[37,162483,161908],{"class":50},[37,162485,150146],{"class":54},[37,162487,162488,162491,162493,162495,162497,162499,162501,162504],{"class":39,"line":1746},[37,162489,162490],{"class":54},"    money ",[37,162492,70],{"class":50},[37,162494,109844],{"class":82},[37,162496,208],{"class":54},[37,162498,53889],{"class":82},[37,162500,208],{"class":54},[37,162502,162503],{"class":309},"\"请输入存款金额:\"",[37,162505,30567],{"class":54},[37,162507,162508,162510,162512,162514,162516],{"class":39,"line":1751},[37,162509,3173],{"class":50},[37,162511,150189],{"class":54},[37,162513,1660],{"class":50},[37,162515,4165],{"class":82},[37,162517,3811],{"class":54},[37,162519,162520,162522,162524,162527],{"class":39,"line":1765},[37,162521,32520],{"class":82},[37,162523,208],{"class":54},[37,162525,162526],{"class":309},"\"金额必须大于0\"",[37,162528,214],{"class":54},[37,162530,162531],{"class":39,"line":1770},[37,162532,152408],{"class":50},[37,162534,162535,162538,162540],{"class":39,"line":1799},[37,162536,162537],{"class":54},"    balance ",[37,162539,9549],{"class":50},[37,162541,150222],{"class":54},[37,162543,162544,162546,162548,162551],{"class":39,"line":1804},[37,162545,31369],{"class":82},[37,162547,208],{"class":54},[37,162549,162550],{"class":309},"\"存款成功\"",[37,162552,214],{"class":54},[37,162554,162555],{"class":39,"line":1821},[37,162556,162557],{"class":54},"    show_balance()\n",[37,162559,162560],{"class":39,"line":1826},[37,162561,2472],{"emptyLinePlaceholder":131},[37,162563,162564],{"class":39,"line":1831},[37,162565,2472],{"emptyLinePlaceholder":131},[37,162567,162568,162570,162573],{"class":39,"line":1836},[37,162569,32017],{"class":50},[37,162571,162572],{"class":2035}," withdraw_money",[37,162574,32023],{"class":54},[37,162576,162577,162579],{"class":39,"line":1850},[37,162578,161908],{"class":50},[37,162580,150146],{"class":54},[37,162582,162583,162585,162587,162589,162591,162593,162595,162598],{"class":39,"line":1855},[37,162584,162490],{"class":54},[37,162586,70],{"class":50},[37,162588,109844],{"class":82},[37,162590,208],{"class":54},[37,162592,53889],{"class":82},[37,162594,208],{"class":54},[37,162596,162597],{"class":309},"\"请输入取款金额:\"",[37,162599,30567],{"class":54},[37,162601,162602,162604,162606,162608,162610],{"class":39,"line":2649},[37,162603,3173],{"class":50},[37,162605,150189],{"class":54},[37,162607,1660],{"class":50},[37,162609,4165],{"class":82},[37,162611,3811],{"class":54},[37,162613,162614,162616,162618,162620],{"class":39,"line":2663},[37,162615,32520],{"class":82},[37,162617,208],{"class":54},[37,162619,162526],{"class":309},[37,162621,214],{"class":54},[37,162623,162624],{"class":39,"line":2671},[37,162625,152408],{"class":50},[37,162627,162628,162630,162632,162634],{"class":39,"line":2676},[37,162629,3173],{"class":50},[37,162631,150189],{"class":54},[37,162633,1163],{"class":50},[37,162635,162636],{"class":54}," balance:\n",[37,162638,162639,162641,162643,162645],{"class":39,"line":2682},[37,162640,32520],{"class":82},[37,162642,208],{"class":54},[37,162644,150284],{"class":309},[37,162646,214],{"class":54},[37,162648,162649],{"class":39,"line":2688},[37,162650,152408],{"class":50},[37,162652,162653,162655,162657],{"class":39,"line":2693},[37,162654,162537],{"class":54},[37,162656,150299],{"class":50},[37,162658,150222],{"class":54},[37,162660,162661,162663,162665,162668],{"class":39,"line":8020},[37,162662,31369],{"class":82},[37,162664,208],{"class":54},[37,162666,162667],{"class":309},"\"取款成功\"",[37,162669,214],{"class":54},[37,162671,162672],{"class":39,"line":8044},[37,162673,162557],{"class":54},[37,162675,162676],{"class":39,"line":8049},[37,162677,2472],{"emptyLinePlaceholder":131},[37,162679,162680],{"class":39,"line":8055},[37,162681,2472],{"emptyLinePlaceholder":131},[37,162683,162684,162686,162688],{"class":39,"line":8082},[37,162685,108710],{"class":50},[37,162687,95339],{"class":82},[37,162689,3811],{"class":54},[37,162691,162692],{"class":39,"line":8087},[37,162693,162694],{"class":54},"    show_menu()\n",[37,162696,162697,162699,162701,162703,162705,162707],{"class":39,"line":8093},[37,162698,160739],{"class":54},[37,162700,70],{"class":50},[37,162702,60673],{"class":82},[37,162704,208],{"class":54},[37,162706,153120],{"class":309},[37,162708,214],{"class":54},[37,162710,162711],{"class":39,"line":8105},[37,162712,2472],{"emptyLinePlaceholder":131},[37,162714,162715,162717,162719,162721,162723],{"class":39,"line":8117},[37,162716,3173],{"class":50},[37,162718,153133],{"class":54},[37,162720,3021],{"class":50},[37,162722,153138],{"class":309},[37,162724,3811],{"class":54},[37,162726,162727],{"class":39,"line":8129},[37,162728,162729],{"class":54},"        show_balance()\n",[37,162731,162732,162734,162736,162738,162740],{"class":39,"line":9788},[37,162733,39362],{"class":50},[37,162735,153133],{"class":54},[37,162737,3021],{"class":50},[37,162739,153157],{"class":309},[37,162741,3811],{"class":54},[37,162743,162744],{"class":39,"line":9813},[37,162745,162746],{"class":54},"        save_money()\n",[37,162748,162749,162751,162753,162755,162757],{"class":39,"line":9836},[37,162750,39362],{"class":50},[37,162752,153133],{"class":54},[37,162754,3021],{"class":50},[37,162756,153175],{"class":309},[37,162758,3811],{"class":54},[37,162760,162761],{"class":39,"line":9860},[37,162762,162763],{"class":54},"        withdraw_money()\n",[37,162765,162766,162768,162770,162772,162774],{"class":39,"line":9865},[37,162767,39362],{"class":50},[37,162769,153133],{"class":54},[37,162771,3021],{"class":50},[37,162773,153229],{"class":309},[37,162775,3811],{"class":54},[37,162777,162778,162780,162782,162784],{"class":39,"line":9870},[37,162779,32520],{"class":82},[37,162781,208],{"class":54},[37,162783,153240],{"class":309},[37,162785,214],{"class":54},[37,162787,162788],{"class":39,"line":9875},[37,162789,31697],{"class":50},[37,162791,162792,162794],{"class":39,"line":9884},[37,162793,158069],{"class":50},[37,162795,3811],{"class":54},[37,162797,162798,162800,162802,162804],{"class":39,"line":9889},[37,162799,32520],{"class":82},[37,162801,208],{"class":54},[37,162803,153261],{"class":309},[37,162805,214],{"class":54},[14,162807,162808],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[146,162810,162812],{"id":162811},"_514-易错点","5.14 易错点",[158,162814,162815,162818,162821,162826,162831,162834],{},[161,162816,162817],{},"函数定义后必须调用才会执行。",[161,162819,162820],{},"函数名后面有括号才是调用。",[161,162822,162823,162825],{},[34,162824,17118],{}," 后面的代码不会执行。",[161,162827,162828,162829,28458],{},"没有返回值的函数默认返回 ",[34,162830,95733],{},[161,162832,162833],{},"局部变量不能在函数外部访问。",[161,162835,162836,162837,162839],{},"不要滥用 ",[34,162838,161873],{},"，更好的方式是让函数返回新值。",[14,162841,162842,162843,162845],{},"例如不用 ",[34,162844,161873],{}," 改写存款：",[27,162847,162849],{"className":29,"code":162848,"language":31,"meta":32,"style":32},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[34,162850,162851,162860,162871,162875,162879,162887,162900],{"__ignoreMap":32},[37,162852,162853,162855,162857],{"class":39,"line":40},[37,162854,32017],{"class":50},[37,162856,162477],{"class":2035},[37,162858,162859],{"class":54},"(balance, money):\n",[37,162861,162862,162864,162867,162869],{"class":39,"line":47},[37,162863,4162],{"class":50},[37,162865,162866],{"class":54}," balance ",[37,162868,685],{"class":50},[37,162870,150222],{"class":54},[37,162872,162873],{"class":39,"line":58},[37,162874,2472],{"emptyLinePlaceholder":131},[37,162876,162877],{"class":39,"line":64},[37,162878,2472],{"emptyLinePlaceholder":131},[37,162880,162881,162883,162885],{"class":39,"line":76},[37,162882,162351],{"class":54},[37,162884,70],{"class":50},[37,162886,162356],{"class":82},[37,162888,162889,162891,162893,162896,162898],{"class":39,"line":92},[37,162890,162351],{"class":54},[37,162892,70],{"class":50},[37,162894,162895],{"class":54}," save_money(balance, ",[37,162897,1794],{"class":82},[37,162899,214],{"class":54},[37,162901,162902,162904],{"class":39,"line":97},[37,162903,30485],{"class":82},[37,162905,162906],{"class":54},"(balance)\n",[146,162908,162910],{"id":162909},"_515-本章练习","5.15 本章练习",[158,162912,162913,162920,162926,162932,162938],{},[161,162914,162915,162916,162919],{},"定义函数 ",[34,162917,162918],{},"print_student(name, age)","，输出学生信息。",[161,162921,162915,162922,162925],{},[34,162923,162924],{},"get_max(a, b, c)","，返回三个数中的最大值。",[161,162927,162915,162928,162931],{},[34,162929,162930],{},"is_even(num)","，判断一个数是否为偶数。",[161,162933,162915,162934,162937],{},[34,162935,162936],{},"calculate_bmi(weight, height)","，返回 BMI。",[161,162939,162940],{},"把第 4 章的菜单程序拆分成多个函数。",[123,162942,162943],{},"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":32,"searchDepth":47,"depth":47,"links":162945},[162946,162947,162948,162949,162950,162951,162952,162953,162954,162958,162959,162960,162961,162962,162963],{"id":160966,"depth":47,"text":160967},{"id":161007,"depth":47,"text":161008},{"id":161097,"depth":47,"text":161098},{"id":161178,"depth":47,"text":161179},{"id":161311,"depth":47,"text":161312},{"id":161433,"depth":47,"text":161434},{"id":161555,"depth":47,"text":161556},{"id":161632,"depth":47,"text":161633},{"id":161754,"depth":47,"text":161755,"children":162955},[162956,162957],{"id":161758,"depth":58,"text":161759},{"id":161816,"depth":58,"text":161817},{"id":161945,"depth":47,"text":161946},{"id":162071,"depth":47,"text":162072},{"id":162184,"depth":47,"text":162185},{"id":162340,"depth":47,"text":162341},{"id":162811,"depth":47,"text":162812},{"id":162909,"depth":47,"text":162910},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160958,"description":128},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162970,"title":162971,"body":162972,"description":128,"extension":129,"meta":166016,"navigation":131,"path":166017,"seo":166018,"stem":166019,"__hash__":166020},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162973,"toc":165997},[162974,162977,162981,162984,162987,163091,163094,163098,163101,163181,163184,163188,163191,163251,163254,163290,163293,163308,163312,163385,163388,163443,163446,163516,163519,163603,163613,163671,163675,163720,163723,163749,163752,163858,163862,163865,163907,163910,163974,163977,163981,163984,164045,164048,164078,164081,164119,164123,164126,164135,164138,164262,164265,164306,164310,164313,164324,164364,164367,164382,164387,164390,164457,164460,164550,164554,164557,164605,164608,164635,164637,164667,164670,164690,164693,164724,164727,164760,164764,164767,164791,164794,164818,164821,164845,164849,164852,164982,164985,165065,165068,165143,165147,165150,165200,165203,165245,165248,165272,165274,165298,165301,165356,165359,165425,165429,165432,165435,165473,165476,165529,165532,165578,165581,165614,165617,165621,165940,165944,165973,165977,165994],[10,162975,162971],{"id":162976},"_6-数据容器",[146,162978,162980],{"id":162979},"_61-什么是数据容器","6.1 什么是数据容器",[14,162982,162983],{},"数据容器用于一次保存多个数据。",[14,162985,162986],{},"常见容器：",[342,162988,162989,163006],{},[345,162990,162991],{},[348,162992,162993,162995,162998,163001,163004],{},[351,162994,25844],{},[351,162996,162997],{},"是否有序",[351,162999,163000],{},"是否可变",[351,163002,163003],{},"是否允许重复",[351,163005,27565],{},[389,163007,163008,163026,163042,163057,163074],{},[348,163009,163010,163013,163016,163019,163022],{},[394,163011,163012],{},"list列表",[394,163014,163015],{},"有序",[394,163017,163018],{},"可变",[394,163020,163021],{},"允许",[394,163023,163024],{},[34,163025,155304],{},[348,163027,163028,163031,163033,163036,163038],{},[394,163029,163030],{},"tuple元组",[394,163032,163015],{},[394,163034,163035],{},"不可变",[394,163037,163021],{},[394,163039,163040],{},[34,163041,155317],{},[348,163043,163044,163047,163049,163051,163053],{},[394,163045,163046],{},"str字符串",[394,163048,163015],{},[394,163050,163035],{},[394,163052,163021],{},[394,163054,163055],{},[34,163056,155927],{},[348,163058,163059,163062,163065,163067,163070],{},[394,163060,163061],{},"set集合",[394,163063,163064],{},"无序",[394,163066,163018],{},[394,163068,163069],{},"不允许",[394,163071,163072],{},[34,163073,155342],{},[348,163075,163076,163079,163081,163083,163086],{},[394,163077,163078],{},"dict字典",[394,163080,163015],{},[394,163082,163018],{},[394,163084,163085],{},"key不允许重复",[394,163087,163088],{},[34,163089,163090],{},"{\"name\": \"小明\"}",[14,163092,163093],{},"Python 3.7 之后，字典保持插入顺序。",[146,163095,163097],{"id":163096},"_62-列表list","6.2 列表list",[14,163099,163100],{},"列表用于保存一组有顺序的数据。",[27,163102,163104],{"className":29,"code":163103,"language":31,"meta":32,"style":32},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[34,163105,163106,163126,163151,163172],{"__ignoreMap":32},[37,163107,163108,163110,163112,163114,163116,163118,163120,163122,163124],{"class":39,"line":40},[37,163109,160427],{"class":54},[37,163111,70],{"class":50},[37,163113,52294],{"class":54},[37,163115,149935],{"class":309},[37,163117,12507],{"class":54},[37,163119,150983],{"class":309},[37,163121,12507],{"class":54},[37,163123,159778],{"class":309},[37,163125,33315],{"class":54},[37,163127,163128,163131,163133,163135,163137,163139,163141,163143,163145,163147,163149],{"class":39,"line":47},[37,163129,163130],{"class":54},"numbers ",[37,163132,70],{"class":50},[37,163134,52294],{"class":54},[37,163136,422],{"class":82},[37,163138,12507],{"class":54},[37,163140,282],{"class":82},[37,163142,12507],{"class":54},[37,163144,276],{"class":82},[37,163146,12507],{"class":54},[37,163148,498],{"class":82},[37,163150,33315],{"class":54},[37,163152,163153,163156,163158,163160,163162,163164,163166,163168,163170],{"class":39,"line":58},[37,163154,163155],{"class":54},"mixed ",[37,163157,70],{"class":50},[37,163159,52294],{"class":54},[37,163161,149935],{"class":309},[37,163163,12507],{"class":54},[37,163165,853],{"class":82},[37,163167,12507],{"class":54},[37,163169,31546],{"class":82},[37,163171,33315],{"class":54},[37,163173,163174,163177,163179],{"class":39,"line":64},[37,163175,163176],{"class":54},"empty ",[37,163178,70],{"class":50},[37,163180,51906],{"class":54},[14,163182,163183],{},"推荐一个列表中保存同类数据，代码更清晰。",[146,163185,163187],{"id":163186},"_63-列表索引","6.3 列表索引",[14,163189,163190],{},"正向索引从 0 开始：",[27,163192,163194],{"className":29,"code":163193,"language":31,"meta":32,"style":32},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[34,163195,163196,163216,163220,163231,163241],{"__ignoreMap":32},[37,163197,163198,163200,163202,163204,163206,163208,163210,163212,163214],{"class":39,"line":40},[37,163199,160427],{"class":54},[37,163201,70],{"class":50},[37,163203,52294],{"class":54},[37,163205,149935],{"class":309},[37,163207,12507],{"class":54},[37,163209,150983],{"class":309},[37,163211,12507],{"class":54},[37,163213,159778],{"class":309},[37,163215,33315],{"class":54},[37,163217,163218],{"class":39,"line":47},[37,163219,2472],{"emptyLinePlaceholder":131},[37,163221,163222,163224,163227,163229],{"class":39,"line":58},[37,163223,30485],{"class":82},[37,163225,163226],{"class":54},"(names[",[37,163228,396],{"class":82},[37,163230,4729],{"class":54},[37,163232,163233,163235,163237,163239],{"class":39,"line":64},[37,163234,30485],{"class":82},[37,163236,163226],{"class":54},[37,163238,422],{"class":82},[37,163240,4729],{"class":54},[37,163242,163243,163245,163247,163249],{"class":39,"line":76},[37,163244,30485],{"class":82},[37,163246,163226],{"class":54},[37,163248,282],{"class":82},[37,163250,4729],{"class":54},[14,163252,163253],{},"反向索引从 -1 开始：",[27,163255,163257],{"className":29,"code":163256,"language":31,"meta":32,"style":32},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[34,163258,163259,163275],{"__ignoreMap":32},[37,163260,163261,163263,163265,163267,163269,163272],{"class":39,"line":40},[37,163262,30485],{"class":82},[37,163264,163226],{"class":54},[37,163266,112],{"class":50},[37,163268,422],{"class":82},[37,163270,163271],{"class":54},"])  ",[37,163273,163274],{"class":43},"# 小刚\n",[37,163276,163277,163279,163281,163283,163285,163287],{"class":39,"line":47},[37,163278,30485],{"class":82},[37,163280,163226],{"class":54},[37,163282,112],{"class":50},[37,163284,282],{"class":82},[37,163286,163271],{"class":54},[37,163288,163289],{"class":43},"# 小红\n",[14,163291,163292],{},"索引越界会报错：",[27,163294,163296],{"className":29,"code":163295,"language":31,"meta":32,"style":32},"print(names[3])\n",[34,163297,163298],{"__ignoreMap":32},[37,163299,163300,163302,163304,163306],{"class":39,"line":40},[37,163301,30485],{"class":82},[37,163303,163226],{"class":54},[37,163305,276],{"class":82},[37,163307,4729],{"class":54},[146,163309,163311],{"id":163310},"_64-列表常用方法","6.4 列表常用方法",[27,163313,163315],{"className":29,"code":163314,"language":31,"meta":32,"style":32},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[34,163316,163317,163333,163337,163346,163360,163374,163378],{"__ignoreMap":32},[37,163318,163319,163321,163323,163325,163327,163329,163331],{"class":39,"line":40},[37,163320,160427],{"class":54},[37,163322,70],{"class":50},[37,163324,52294],{"class":54},[37,163326,149935],{"class":309},[37,163328,12507],{"class":54},[37,163330,150983],{"class":309},[37,163332,33315],{"class":54},[37,163334,163335],{"class":39,"line":47},[37,163336,2472],{"emptyLinePlaceholder":131},[37,163338,163339,163342,163344],{"class":39,"line":58},[37,163340,163341],{"class":54},"names.append(",[37,163343,159778],{"class":309},[37,163345,214],{"class":54},[37,163347,163348,163351,163353,163355,163358],{"class":39,"line":64},[37,163349,163350],{"class":54},"names.insert(",[37,163352,422],{"class":82},[37,163354,12507],{"class":54},[37,163356,163357],{"class":309},"\"小李\"",[37,163359,214],{"class":54},[37,163361,163362,163365,163367,163369,163372],{"class":39,"line":76},[37,163363,163364],{"class":54},"names.extend([",[37,163366,8755],{"class":309},[37,163368,12507],{"class":54},[37,163370,163371],{"class":309},"\"小赵\"",[37,163373,4729],{"class":54},[37,163375,163376],{"class":39,"line":92},[37,163377,2472],{"emptyLinePlaceholder":131},[37,163379,163380,163382],{"class":39,"line":97},[37,163381,30485],{"class":82},[37,163383,163384],{"class":54},"(names)\n",[14,163386,163387],{},"删除元素：",[27,163389,163391],{"className":29,"code":163390,"language":31,"meta":32,"style":32},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[34,163392,163393,163402,163412,163426,163438],{"__ignoreMap":32},[37,163394,163395,163398,163400],{"class":39,"line":40},[37,163396,163397],{"class":54},"names.remove(",[37,163399,150983],{"class":309},[37,163401,214],{"class":54},[37,163403,163404,163407,163409],{"class":39,"line":47},[37,163405,163406],{"class":54},"last ",[37,163408,70],{"class":50},[37,163410,163411],{"class":54}," names.pop()\n",[37,163413,163414,163417,163419,163422,163424],{"class":39,"line":58},[37,163415,163416],{"class":54},"first ",[37,163418,70],{"class":50},[37,163420,163421],{"class":54}," names.pop(",[37,163423,396],{"class":82},[37,163425,214],{"class":54},[37,163427,163428,163431,163434,163436],{"class":39,"line":64},[37,163429,163430],{"class":50},"del",[37,163432,163433],{"class":54}," names[",[37,163435,396],{"class":82},[37,163437,33315],{"class":54},[37,163439,163440],{"class":39,"line":76},[37,163441,163442],{"class":54},"names.clear()\n",[14,163444,163445],{},"查询和统计：",[27,163447,163449],{"className":29,"code":163448,"language":31,"meta":32,"style":32},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[34,163450,163451,163479,163483,163494,163505],{"__ignoreMap":32},[37,163452,163453,163455,163457,163459,163461,163463,163465,163467,163469,163471,163473,163475,163477],{"class":39,"line":40},[37,163454,163130],{"class":54},[37,163456,70],{"class":50},[37,163458,52294],{"class":54},[37,163460,422],{"class":82},[37,163462,12507],{"class":54},[37,163464,282],{"class":82},[37,163466,12507],{"class":54},[37,163468,276],{"class":82},[37,163470,12507],{"class":54},[37,163472,282],{"class":82},[37,163474,12507],{"class":54},[37,163476,498],{"class":82},[37,163478,33315],{"class":54},[37,163480,163481],{"class":39,"line":47},[37,163482,2472],{"emptyLinePlaceholder":131},[37,163484,163485,163487,163490,163492],{"class":39,"line":58},[37,163486,30485],{"class":82},[37,163488,163489],{"class":54},"(numbers.index(",[37,163491,276],{"class":82},[37,163493,30567],{"class":54},[37,163495,163496,163498,163501,163503],{"class":39,"line":64},[37,163497,30485],{"class":82},[37,163499,163500],{"class":54},"(numbers.count(",[37,163502,282],{"class":82},[37,163504,30567],{"class":54},[37,163506,163507,163509,163511,163513],{"class":39,"line":76},[37,163508,30485],{"class":82},[37,163510,208],{"class":54},[37,163512,7430],{"class":82},[37,163514,163515],{"class":54},"(numbers))\n",[14,163517,163518],{},"排序：",[27,163520,163522],{"className":29,"code":163521,"language":31,"meta":32,"style":32},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[34,163523,163524,163548,163552,163557,163564,163568,163582,163588,163592,163597],{"__ignoreMap":32},[37,163525,163526,163528,163530,163532,163534,163536,163538,163540,163542,163544,163546],{"class":39,"line":40},[37,163527,163130],{"class":54},[37,163529,70],{"class":50},[37,163531,52294],{"class":54},[37,163533,276],{"class":82},[37,163535,12507],{"class":54},[37,163537,422],{"class":82},[37,163539,12507],{"class":54},[37,163541,524],{"class":82},[37,163543,12507],{"class":54},[37,163545,282],{"class":82},[37,163547,33315],{"class":54},[37,163549,163550],{"class":39,"line":47},[37,163551,2472],{"emptyLinePlaceholder":131},[37,163553,163554],{"class":39,"line":58},[37,163555,163556],{"class":54},"numbers.sort()\n",[37,163558,163559,163561],{"class":39,"line":64},[37,163560,30485],{"class":82},[37,163562,163563],{"class":54},"(numbers)\n",[37,163565,163566],{"class":39,"line":76},[37,163567,2472],{"emptyLinePlaceholder":131},[37,163569,163570,163573,163576,163578,163580],{"class":39,"line":92},[37,163571,163572],{"class":54},"numbers.sort(",[37,163574,163575],{"class":5288},"reverse",[37,163577,70],{"class":50},[37,163579,31546],{"class":82},[37,163581,214],{"class":54},[37,163583,163584,163586],{"class":39,"line":97},[37,163585,30485],{"class":82},[37,163587,163563],{"class":54},[37,163589,163590],{"class":39,"line":107},[37,163591,2472],{"emptyLinePlaceholder":131},[37,163593,163594],{"class":39,"line":1390},[37,163595,163596],{"class":54},"numbers.reverse()\n",[37,163598,163599,163601],{"class":39,"line":1402},[37,163600,30485],{"class":82},[37,163602,163563],{"class":54},[14,163604,163605,163608,163609,163612],{},[34,163606,163607],{},"sort()"," 会修改原列表，",[34,163610,163611],{},"sorted()"," 返回新列表。",[27,163614,163616],{"className":29,"code":163615,"language":31,"meta":32,"style":32},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[34,163617,163618,163642,163654,163658,163664],{"__ignoreMap":32},[37,163619,163620,163622,163624,163626,163628,163630,163632,163634,163636,163638,163640],{"class":39,"line":40},[37,163621,163130],{"class":54},[37,163623,70],{"class":50},[37,163625,52294],{"class":54},[37,163627,276],{"class":82},[37,163629,12507],{"class":54},[37,163631,422],{"class":82},[37,163633,12507],{"class":54},[37,163635,524],{"class":82},[37,163637,12507],{"class":54},[37,163639,282],{"class":82},[37,163641,33315],{"class":54},[37,163643,163644,163647,163649,163652],{"class":39,"line":47},[37,163645,163646],{"class":54},"new_numbers ",[37,163648,70],{"class":50},[37,163650,163651],{"class":82}," sorted",[37,163653,163563],{"class":54},[37,163655,163656],{"class":39,"line":58},[37,163657,2472],{"emptyLinePlaceholder":131},[37,163659,163660,163662],{"class":39,"line":64},[37,163661,30485],{"class":82},[37,163663,163563],{"class":54},[37,163665,163666,163668],{"class":39,"line":76},[37,163667,30485],{"class":82},[37,163669,163670],{"class":54},"(new_numbers)\n",[146,163672,163674],{"id":163673},"_65-列表遍历","6.5 列表遍历",[27,163676,163678],{"className":29,"code":163677,"language":31,"meta":32,"style":32},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[34,163679,163680,163700,163704,163714],{"__ignoreMap":32},[37,163681,163682,163684,163686,163688,163690,163692,163694,163696,163698],{"class":39,"line":40},[37,163683,160427],{"class":54},[37,163685,70],{"class":50},[37,163687,52294],{"class":54},[37,163689,149935],{"class":309},[37,163691,12507],{"class":54},[37,163693,150983],{"class":309},[37,163695,12507],{"class":54},[37,163697,159778],{"class":309},[37,163699,33315],{"class":54},[37,163701,163702],{"class":39,"line":47},[37,163703,2472],{"emptyLinePlaceholder":131},[37,163705,163706,163708,163710,163712],{"class":39,"line":58},[37,163707,3097],{"class":50},[37,163709,160463],{"class":54},[37,163711,26116],{"class":50},[37,163713,160468],{"class":54},[37,163715,163716,163718],{"class":39,"line":64},[37,163717,31369],{"class":82},[37,163719,150707],{"class":54},[14,163721,163722],{},"需要索引时：",[27,163724,163726],{"className":29,"code":163725,"language":31,"meta":32,"style":32},"for index, name in enumerate(names):\n    print(index, name)\n",[34,163727,163728,163742],{"__ignoreMap":32},[37,163729,163730,163732,163735,163737,163739],{"class":39,"line":40},[37,163731,3097],{"class":50},[37,163733,163734],{"class":54}," index, name ",[37,163736,26116],{"class":50},[37,163738,31676],{"class":82},[37,163740,163741],{"class":54},"(names):\n",[37,163743,163744,163746],{"class":39,"line":47},[37,163745,31369],{"class":82},[37,163747,163748],{"class":54},"(index, name)\n",[14,163750,163751],{},"统计总分：",[27,163753,163755],{"className":29,"code":163754,"language":31,"meta":32,"style":32},"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",[34,163756,163757,163782,163790,163794,163805,163813,163817,163834],{"__ignoreMap":32},[37,163758,163759,163762,163764,163766,163768,163770,163772,163774,163776,163778,163780],{"class":39,"line":40},[37,163760,163761],{"class":54},"scores ",[37,163763,70],{"class":50},[37,163765,52294],{"class":54},[37,163767,1065],{"class":82},[37,163769,12507],{"class":54},[37,163771,939],{"class":82},[37,163773,12507],{"class":54},[37,163775,459],{"class":82},[37,163777,12507],{"class":54},[37,163779,764],{"class":82},[37,163781,33315],{"class":54},[37,163783,163784,163786,163788],{"class":39,"line":47},[37,163785,157307],{"class":54},[37,163787,70],{"class":50},[37,163789,47401],{"class":82},[37,163791,163792],{"class":39,"line":58},[37,163793,2472],{"emptyLinePlaceholder":131},[37,163795,163796,163798,163800,163802],{"class":39,"line":64},[37,163797,3097],{"class":50},[37,163799,157830],{"class":54},[37,163801,26116],{"class":50},[37,163803,163804],{"class":54}," scores:\n",[37,163806,163807,163809,163811],{"class":39,"line":76},[37,163808,159354],{"class":54},[37,163810,9549],{"class":50},[37,163812,1651],{"class":54},[37,163814,163815],{"class":39,"line":92},[37,163816,2472],{"emptyLinePlaceholder":131},[37,163818,163819,163822,163824,163827,163829,163831],{"class":39,"line":97},[37,163820,163821],{"class":54},"avg ",[37,163823,70],{"class":50},[37,163825,163826],{"class":54}," total ",[37,163828,787],{"class":50},[37,163830,7403],{"class":82},[37,163832,163833],{"class":54},"(scores)\n",[37,163835,163836,163838,163840,163842,163845,163847,163850,163852,163854,163856],{"class":39,"line":107},[37,163837,30485],{"class":82},[37,163839,208],{"class":54},[37,163841,258],{"class":50},[37,163843,163844],{"class":309},"\"平均分:",[37,163846,1099],{"class":82},[37,163848,163849],{"class":54},"avg",[37,163851,157206],{"class":50},[37,163853,1149],{"class":82},[37,163855,456],{"class":309},[37,163857,214],{"class":54},[146,163859,163861],{"id":163860},"_66-元组tuple","6.6 元组tuple",[14,163863,163864],{},"元组和列表类似，但不可修改。",[27,163866,163868],{"className":29,"code":163867,"language":31,"meta":32,"style":32},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[34,163869,163870,163887],{"__ignoreMap":32},[37,163871,163872,163875,163877,163879,163881,163883,163885],{"class":39,"line":40},[37,163873,163874],{"class":54},"point ",[37,163876,70],{"class":50},[37,163878,1730],{"class":54},[37,163880,650],{"class":82},[37,163882,12507],{"class":54},[37,163884,903],{"class":82},[37,163886,214],{"class":54},[37,163888,163889,163891,163893,163895,163897,163899,163901,163903,163905],{"class":39,"line":47},[37,163890,116361],{"class":54},[37,163892,70],{"class":50},[37,163894,1730],{"class":54},[37,163896,149935],{"class":309},[37,163898,12507],{"class":54},[37,163900,853],{"class":82},[37,163902,12507],{"class":54},[37,163904,69337],{"class":309},[37,163906,214],{"class":54},[14,163908,163909],{},"单元素元组必须加逗号：",[27,163911,163913],{"className":29,"code":163912,"language":31,"meta":32,"style":32},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[34,163914,163915,163929,163942,163946,163960],{"__ignoreMap":32},[37,163916,163917,163920,163922,163924,163926],{"class":39,"line":40},[37,163918,163919],{"class":54},"t1 ",[37,163921,70],{"class":50},[37,163923,1730],{"class":54},[37,163925,650],{"class":82},[37,163927,163928],{"class":54},",)\n",[37,163930,163931,163934,163936,163938,163940],{"class":39,"line":47},[37,163932,163933],{"class":54},"t2 ",[37,163935,70],{"class":50},[37,163937,1730],{"class":54},[37,163939,650],{"class":82},[37,163941,214],{"class":54},[37,163943,163944],{"class":39,"line":58},[37,163945,2472],{"emptyLinePlaceholder":131},[37,163947,163948,163950,163952,163954,163957],{"class":39,"line":64},[37,163949,30485],{"class":82},[37,163951,208],{"class":54},[37,163953,103154],{"class":82},[37,163955,163956],{"class":54},"(t1))  ",[37,163958,163959],{"class":43},"# tuple\n",[37,163961,163962,163964,163966,163968,163971],{"class":39,"line":76},[37,163963,30485],{"class":82},[37,163965,208],{"class":54},[37,163967,103154],{"class":82},[37,163969,163970],{"class":54},"(t2))  ",[37,163972,163973],{"class":43},"# int\n",[14,163975,163976],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[146,163978,163980],{"id":163979},"_67-字符串str","6.7 字符串str",[14,163982,163983],{},"字符串也是序列，可以索引、切片和遍历。",[27,163985,163987],{"className":29,"code":163986,"language":31,"meta":32,"style":32},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[34,163988,163989,163997,164001,164012,164024,164028,164039],{"__ignoreMap":32},[37,163990,163991,163993,163995],{"class":39,"line":40},[37,163992,156491],{"class":54},[37,163994,70],{"class":50},[37,163996,159728],{"class":309},[37,163998,163999],{"class":39,"line":47},[37,164000,2472],{"emptyLinePlaceholder":131},[37,164002,164003,164005,164008,164010],{"class":39,"line":58},[37,164004,30485],{"class":82},[37,164006,164007],{"class":54},"(text[",[37,164009,396],{"class":82},[37,164011,4729],{"class":54},[37,164013,164014,164016,164018,164020,164022],{"class":39,"line":64},[37,164015,30485],{"class":82},[37,164017,164007],{"class":54},[37,164019,112],{"class":50},[37,164021,422],{"class":82},[37,164023,4729],{"class":54},[37,164025,164026],{"class":39,"line":76},[37,164027,2472],{"emptyLinePlaceholder":131},[37,164029,164030,164032,164034,164036],{"class":39,"line":92},[37,164031,3097],{"class":50},[37,164033,159739],{"class":54},[37,164035,26116],{"class":50},[37,164037,164038],{"class":54}," text:\n",[37,164040,164041,164043],{"class":39,"line":97},[37,164042,31369],{"class":82},[37,164044,159750],{"class":54},[14,164046,164047],{},"字符串不可变：",[27,164049,164051],{"className":29,"code":164050,"language":31,"meta":32,"style":32},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[34,164052,164053,164061],{"__ignoreMap":32},[37,164054,164055,164057,164059],{"class":39,"line":40},[37,164056,156491],{"class":54},[37,164058,70],{"class":50},[37,164060,159728],{"class":309},[37,164062,164063,164066,164068,164070,164072,164075],{"class":39,"line":47},[37,164064,164065],{"class":54},"text[",[37,164067,396],{"class":82},[37,164069,4515],{"class":54},[37,164071,70],{"class":50},[37,164073,164074],{"class":309}," \"P\"",[37,164076,164077],{"class":43},"  # 报错\n",[14,164079,164080],{},"如果要得到新字符串：",[27,164082,164084],{"className":29,"code":164083,"language":31,"meta":32,"style":32},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[34,164085,164086,164094,164112],{"__ignoreMap":32},[37,164087,164088,164090,164092],{"class":39,"line":40},[37,164089,156491],{"class":54},[37,164091,70],{"class":50},[37,164093,159728],{"class":309},[37,164095,164096,164098,164100,164102,164104,164107,164109],{"class":39,"line":47},[37,164097,156491],{"class":54},[37,164099,70],{"class":50},[37,164101,164074],{"class":309},[37,164103,45635],{"class":50},[37,164105,164106],{"class":54}," text[",[37,164108,422],{"class":82},[37,164110,164111],{"class":54},":]\n",[37,164113,164114,164116],{"class":39,"line":58},[37,164115,30485],{"class":82},[37,164117,164118],{"class":54},"(text)\n",[146,164120,164122],{"id":164121},"_68-切片","6.8 切片",[14,164124,164125],{},"切片用于从序列中取一部分。",[27,164127,164129],{"className":29,"code":164128,"language":31,"meta":32,"style":32},"序列[开始:结束:步长]\n",[34,164130,164131],{"__ignoreMap":32},[37,164132,164133],{"class":39,"line":40},[37,164134,164128],{"class":54},[14,164136,164137],{},"结束位置不包含。",[27,164139,164141],{"className":29,"code":164140,"language":31,"meta":32,"style":32},"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",[34,164142,164143,164180,164184,164203,164218,164232,164246],{"__ignoreMap":32},[37,164144,164145,164148,164150,164152,164154,164156,164158,164160,164162,164164,164166,164168,164170,164172,164174,164176,164178],{"class":39,"line":40},[37,164146,164147],{"class":54},"nums ",[37,164149,70],{"class":50},[37,164151,52294],{"class":54},[37,164153,396],{"class":82},[37,164155,12507],{"class":54},[37,164157,422],{"class":82},[37,164159,12507],{"class":54},[37,164161,282],{"class":82},[37,164163,12507],{"class":54},[37,164165,276],{"class":82},[37,164167,12507],{"class":54},[37,164169,498],{"class":82},[37,164171,12507],{"class":54},[37,164173,524],{"class":82},[37,164175,12507],{"class":54},[37,164177,549],{"class":82},[37,164179,33315],{"class":54},[37,164181,164182],{"class":39,"line":47},[37,164183,2472],{"emptyLinePlaceholder":131},[37,164185,164186,164188,164191,164193,164195,164197,164200],{"class":39,"line":58},[37,164187,30485],{"class":82},[37,164189,164190],{"class":54},"(nums[",[37,164192,422],{"class":82},[37,164194,1062],{"class":54},[37,164196,498],{"class":82},[37,164198,164199],{"class":54},"])    ",[37,164201,164202],{"class":43},"# [1, 2, 3]\n",[37,164204,164205,164207,164210,164212,164215],{"class":39,"line":64},[37,164206,30485],{"class":82},[37,164208,164209],{"class":54},"(nums[:",[37,164211,276],{"class":82},[37,164213,164214],{"class":54},"])     ",[37,164216,164217],{"class":43},"# [0, 1, 2]\n",[37,164219,164220,164222,164224,164226,164229],{"class":39,"line":76},[37,164221,30485],{"class":82},[37,164223,164190],{"class":54},[37,164225,276],{"class":82},[37,164227,164228],{"class":54},":])     ",[37,164230,164231],{"class":43},"# [3, 4, 5, 6]\n",[37,164233,164234,164236,164239,164241,164243],{"class":39,"line":92},[37,164235,30485],{"class":82},[37,164237,164238],{"class":54},"(nums[::",[37,164240,282],{"class":82},[37,164242,164199],{"class":54},[37,164244,164245],{"class":43},"# [0, 2, 4, 6]\n",[37,164247,164248,164250,164252,164254,164256,164259],{"class":39,"line":97},[37,164249,30485],{"class":82},[37,164251,164238],{"class":54},[37,164253,112],{"class":50},[37,164255,422],{"class":82},[37,164257,164258],{"class":54},"])   ",[37,164260,164261],{"class":43},"# 反转\n",[14,164263,164264],{},"字符串切片：",[27,164266,164268],{"className":29,"code":164267,"language":31,"meta":32,"style":32},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[34,164269,164270,164279,164293],{"__ignoreMap":32},[37,164271,164272,164274,164276],{"class":39,"line":40},[37,164273,156491],{"class":54},[37,164275,70],{"class":50},[37,164277,164278],{"class":309}," \"abcdef\"\n",[37,164280,164281,164283,164285,164287,164289,164291],{"class":39,"line":47},[37,164282,30485],{"class":82},[37,164284,164007],{"class":54},[37,164286,422],{"class":82},[37,164288,1062],{"class":54},[37,164290,498],{"class":82},[37,164292,4729],{"class":54},[37,164294,164295,164297,164300,164302,164304],{"class":39,"line":58},[37,164296,30485],{"class":82},[37,164298,164299],{"class":54},"(text[::",[37,164301,112],{"class":50},[37,164303,422],{"class":82},[37,164305,4729],{"class":54},[146,164307,164309],{"id":164308},"_69-集合set","6.9 集合set",[14,164311,164312],{},"集合特点：",[158,164314,164315,164318,164321],{},[161,164316,164317],{},"无序。",[161,164319,164320],{},"元素不重复。",[161,164322,164323],{},"可以做交集、并集、差集。",[27,164325,164327],{"className":29,"code":164326,"language":31,"meta":32,"style":32},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[34,164328,164329,164357],{"__ignoreMap":32},[37,164330,164331,164333,164335,164337,164339,164341,164343,164345,164347,164349,164351,164353,164355],{"class":39,"line":40},[37,164332,164147],{"class":54},[37,164334,70],{"class":50},[37,164336,4520],{"class":54},[37,164338,422],{"class":82},[37,164340,12507],{"class":54},[37,164342,282],{"class":82},[37,164344,12507],{"class":54},[37,164346,276],{"class":82},[37,164348,12507],{"class":54},[37,164350,276],{"class":82},[37,164352,12507],{"class":54},[37,164354,498],{"class":82},[37,164356,1637],{"class":54},[37,164358,164359,164361],{"class":39,"line":47},[37,164360,30485],{"class":82},[37,164362,164363],{"class":54},"(nums)\n",[14,164365,164366],{},"创建空集合：",[27,164368,164370],{"className":29,"code":164369,"language":31,"meta":32,"style":32},"s = set()\n",[34,164371,164372],{"__ignoreMap":32},[37,164373,164374,164376,164378,164380],{"class":39,"line":40},[37,164375,10651],{"class":54},[37,164377,70],{"class":50},[37,164379,119769],{"class":82},[37,164381,2048],{"class":54},[14,164383,9097,164384,164386],{},[34,164385,32528],{}," 是空字典，不是空集合。",[14,164388,164389],{},"集合常用操作：",[27,164391,164393],{"className":29,"code":164392,"language":31,"meta":32,"style":32},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[34,164394,164395,164415,164419,164428,164437,164446],{"__ignoreMap":32},[37,164396,164397,164399,164401,164403,164405,164407,164409,164411,164413],{"class":39,"line":40},[37,164398,10651],{"class":54},[37,164400,70],{"class":50},[37,164402,4520],{"class":54},[37,164404,422],{"class":82},[37,164406,12507],{"class":54},[37,164408,282],{"class":82},[37,164410,12507],{"class":54},[37,164412,276],{"class":82},[37,164414,1637],{"class":54},[37,164416,164417],{"class":39,"line":47},[37,164418,2472],{"emptyLinePlaceholder":131},[37,164420,164421,164424,164426],{"class":39,"line":58},[37,164422,164423],{"class":54},"s.add(",[37,164425,498],{"class":82},[37,164427,214],{"class":54},[37,164429,164430,164433,164435],{"class":39,"line":64},[37,164431,164432],{"class":54},"s.remove(",[37,164434,282],{"class":82},[37,164436,214],{"class":54},[37,164438,164439,164442,164444],{"class":39,"line":76},[37,164440,164441],{"class":54},"s.discard(",[37,164443,650],{"class":82},[37,164445,214],{"class":54},[37,164447,164448,164450,164452,164454],{"class":39,"line":92},[37,164449,30485],{"class":82},[37,164451,208],{"class":54},[37,164453,7430],{"class":82},[37,164455,164456],{"class":54},"(s))\n",[14,164458,164459],{},"交并差：",[27,164461,164463],{"className":29,"code":164462,"language":31,"meta":32,"style":32},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[34,164464,164465,164485,164505,164509,164524,164537],{"__ignoreMap":32},[37,164466,164467,164469,164471,164473,164475,164477,164479,164481,164483],{"class":39,"line":40},[37,164468,10991],{"class":54},[37,164470,70],{"class":50},[37,164472,4520],{"class":54},[37,164474,422],{"class":82},[37,164476,12507],{"class":54},[37,164478,282],{"class":82},[37,164480,12507],{"class":54},[37,164482,276],{"class":82},[37,164484,1637],{"class":54},[37,164486,164487,164489,164491,164493,164495,164497,164499,164501,164503],{"class":39,"line":47},[37,164488,11017],{"class":54},[37,164490,70],{"class":50},[37,164492,4520],{"class":54},[37,164494,276],{"class":82},[37,164496,12507],{"class":54},[37,164498,498],{"class":82},[37,164500,12507],{"class":54},[37,164502,524],{"class":82},[37,164504,1637],{"class":54},[37,164506,164507],{"class":39,"line":58},[37,164508,2472],{"emptyLinePlaceholder":131},[37,164510,164511,164513,164516,164518,164521],{"class":39,"line":64},[37,164512,30485],{"class":82},[37,164514,164515],{"class":54},"(a ",[37,164517,558],{"class":50},[37,164519,164520],{"class":54}," b)  ",[37,164522,164523],{"class":43},"# 交集\n",[37,164525,164526,164528,164530,164532,164534],{"class":39,"line":76},[37,164527,30485],{"class":82},[37,164529,164515],{"class":54},[37,164531,1124],{"class":50},[37,164533,164520],{"class":54},[37,164535,164536],{"class":43},"# 并集\n",[37,164538,164539,164541,164543,164545,164547],{"class":39,"line":92},[37,164540,30485],{"class":82},[37,164542,164515],{"class":54},[37,164544,112],{"class":50},[37,164546,164520],{"class":54},[37,164548,164549],{"class":43},"# 差集\n",[146,164551,164553],{"id":164552},"_610-字典dict","6.10 字典dict",[14,164555,164556],{},"字典通过 key-value 保存数据。",[27,164558,164560],{"className":29,"code":164559,"language":31,"meta":32,"style":32},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[34,164561,164562,164570,164580,164591,164601],{"__ignoreMap":32},[37,164563,164564,164566,164568],{"class":39,"line":40},[37,164565,149528],{"class":54},[37,164567,70],{"class":50},[37,164569,15644],{"class":54},[37,164571,164572,164574,164576,164578],{"class":39,"line":47},[37,164573,147067],{"class":309},[37,164575,51505],{"class":54},[37,164577,149935],{"class":309},[37,164579,31536],{"class":54},[37,164581,164582,164585,164587,164589],{"class":39,"line":58},[37,164583,164584],{"class":309},"    \"age\"",[37,164586,51505],{"class":54},[37,164588,853],{"class":82},[37,164590,31536],{"class":54},[37,164592,164593,164596,164598],{"class":39,"line":64},[37,164594,164595],{"class":309},"    \"score\"",[37,164597,51505],{"class":54},[37,164599,164600],{"class":82},"95\n",[37,164602,164603],{"class":39,"line":76},[37,164604,1637],{"class":54},[14,164606,164607],{},"获取值：",[27,164609,164611],{"className":29,"code":164610,"language":31,"meta":32,"style":32},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[34,164612,164613,164624],{"__ignoreMap":32},[37,164614,164615,164617,164620,164622],{"class":39,"line":40},[37,164616,30485],{"class":82},[37,164618,164619],{"class":54},"(student[",[37,164621,62747],{"class":309},[37,164623,4729],{"class":54},[37,164625,164626,164628,164631,164633],{"class":39,"line":47},[37,164627,30485],{"class":82},[37,164629,164630],{"class":54},"(student.get(",[37,164632,62747],{"class":309},[37,164634,30567],{"class":54},[14,164636,15460],{},[27,164638,164640],{"className":29,"code":164639,"language":31,"meta":32,"style":32},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[34,164641,164642,164655],{"__ignoreMap":32},[37,164643,164644,164646,164649,164652],{"class":39,"line":40},[37,164645,152906],{"class":54},[37,164647,164648],{"class":309},"\"address\"",[37,164650,164651],{"class":54},"]     ",[37,164653,164654],{"class":43},"# key不存在会报错\n",[37,164656,164657,164660,164662,164664],{"class":39,"line":47},[37,164658,164659],{"class":54},"student.get(",[37,164661,164648],{"class":309},[37,164663,13786],{"class":54},[37,164665,164666],{"class":43},"# key不存在返回None\n",[14,164668,164669],{},"设置默认值：",[27,164671,164673],{"className":29,"code":164672,"language":31,"meta":32,"style":32},"print(student.get(\"address\", \"未知\"))\n",[34,164674,164675],{"__ignoreMap":32},[37,164676,164677,164679,164681,164683,164685,164688],{"class":39,"line":40},[37,164678,30485],{"class":82},[37,164680,164630],{"class":54},[37,164682,164648],{"class":309},[37,164684,12507],{"class":54},[37,164686,164687],{"class":309},"\"未知\"",[37,164689,30567],{"class":54},[14,164691,164692],{},"新增和修改：",[27,164694,164696],{"className":29,"code":164695,"language":31,"meta":32,"style":32},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[34,164697,164698,164711],{"__ignoreMap":32},[37,164699,164700,164702,164704,164706,164708],{"class":39,"line":40},[37,164701,152906],{"class":54},[37,164703,69192],{"class":309},[37,164705,4515],{"class":54},[37,164707,70],{"class":50},[37,164709,164710],{"class":82}," 19\n",[37,164712,164713,164715,164717,164719,164721],{"class":39,"line":47},[37,164714,152906],{"class":54},[37,164716,164648],{"class":309},[37,164718,4515],{"class":54},[37,164720,70],{"class":50},[37,164722,164723],{"class":309}," \"北京\"\n",[14,164725,164726],{},"删除：",[27,164728,164730],{"className":29,"code":164729,"language":31,"meta":32,"style":32},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[34,164731,164732,164745,164755],{"__ignoreMap":32},[37,164733,164734,164736,164738,164741,164743],{"class":39,"line":40},[37,164735,155405],{"class":54},[37,164737,70],{"class":50},[37,164739,164740],{"class":54}," student.pop(",[37,164742,151519],{"class":309},[37,164744,214],{"class":54},[37,164746,164747,164749,164751,164753],{"class":39,"line":47},[37,164748,163430],{"class":50},[37,164750,152196],{"class":54},[37,164752,69192],{"class":309},[37,164754,33315],{"class":54},[37,164756,164757],{"class":39,"line":58},[37,164758,164759],{"class":54},"student.clear()\n",[146,164761,164763],{"id":164762},"_611-字典遍历","6.11 字典遍历",[14,164765,164766],{},"遍历 key：",[27,164768,164770],{"className":29,"code":164769,"language":31,"meta":32,"style":32},"for key in student:\n    print(key, student[key])\n",[34,164771,164772,164784],{"__ignoreMap":32},[37,164773,164774,164776,164779,164781],{"class":39,"line":40},[37,164775,3097],{"class":50},[37,164777,164778],{"class":54}," key ",[37,164780,26116],{"class":50},[37,164782,164783],{"class":54}," student:\n",[37,164785,164786,164788],{"class":39,"line":47},[37,164787,31369],{"class":82},[37,164789,164790],{"class":54},"(key, student[key])\n",[14,164792,164793],{},"遍历 value：",[27,164795,164797],{"className":29,"code":164796,"language":31,"meta":32,"style":32},"for value in student.values():\n    print(value)\n",[34,164798,164799,164811],{"__ignoreMap":32},[37,164800,164801,164803,164806,164808],{"class":39,"line":40},[37,164802,3097],{"class":50},[37,164804,164805],{"class":54}," value ",[37,164807,26116],{"class":50},[37,164809,164810],{"class":54}," student.values():\n",[37,164812,164813,164815],{"class":39,"line":47},[37,164814,31369],{"class":82},[37,164816,164817],{"class":54},"(value)\n",[14,164819,164820],{},"遍历 key 和 value：",[27,164822,164824],{"className":29,"code":164823,"language":31,"meta":32,"style":32},"for key, value in student.items():\n    print(key, value)\n",[34,164825,164826,164838],{"__ignoreMap":32},[37,164827,164828,164830,164833,164835],{"class":39,"line":40},[37,164829,3097],{"class":50},[37,164831,164832],{"class":54}," key, value ",[37,164834,26116],{"class":50},[37,164836,164837],{"class":54}," student.items():\n",[37,164839,164840,164842],{"class":39,"line":47},[37,164841,31369],{"class":82},[37,164843,164844],{"class":54},"(key, value)\n",[146,164846,164848],{"id":164847},"_612-嵌套容器","6.12 嵌套容器",[14,164850,164851],{},"列表中保存字典，是项目中最常见的结构之一。",[27,164853,164855],{"className":29,"code":164854,"language":31,"meta":32,"style":32},"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",[34,164856,164857,164865,164893,164921,164949,164953,164957,164967],{"__ignoreMap":32},[37,164858,164859,164861,164863],{"class":39,"line":40},[37,164860,159763],{"class":54},[37,164862,70],{"class":50},[37,164864,55515],{"class":54},[37,164866,164867,164869,164871,164873,164875,164877,164879,164881,164883,164885,164887,164889,164891],{"class":39,"line":47},[37,164868,148432],{"class":54},[37,164870,62747],{"class":309},[37,164872,51505],{"class":54},[37,164874,149935],{"class":309},[37,164876,12507],{"class":54},[37,164878,69192],{"class":309},[37,164880,51505],{"class":54},[37,164882,853],{"class":82},[37,164884,12507],{"class":54},[37,164886,151519],{"class":309},[37,164888,51505],{"class":54},[37,164890,1192],{"class":82},[37,164892,5002],{"class":54},[37,164894,164895,164897,164899,164901,164903,164905,164907,164909,164911,164913,164915,164917,164919],{"class":39,"line":58},[37,164896,148432],{"class":54},[37,164898,62747],{"class":309},[37,164900,51505],{"class":54},[37,164902,150983],{"class":309},[37,164904,12507],{"class":54},[37,164906,69192],{"class":309},[37,164908,51505],{"class":54},[37,164910,828],{"class":82},[37,164912,12507],{"class":54},[37,164914,151519],{"class":309},[37,164916,51505],{"class":54},[37,164918,1014],{"class":82},[37,164920,5002],{"class":54},[37,164922,164923,164925,164927,164929,164931,164933,164935,164937,164939,164941,164943,164945,164947],{"class":39,"line":64},[37,164924,148432],{"class":54},[37,164926,62747],{"class":309},[37,164928,51505],{"class":54},[37,164930,159778],{"class":309},[37,164932,12507],{"class":54},[37,164934,69192],{"class":309},[37,164936,51505],{"class":54},[37,164938,878],{"class":82},[37,164940,12507],{"class":54},[37,164942,151519],{"class":309},[37,164944,51505],{"class":54},[37,164946,611],{"class":82},[37,164948,5002],{"class":54},[37,164950,164951],{"class":39,"line":76},[37,164952,33315],{"class":54},[37,164954,164955],{"class":39,"line":92},[37,164956,2472],{"emptyLinePlaceholder":131},[37,164958,164959,164961,164963,164965],{"class":39,"line":97},[37,164960,3097],{"class":50},[37,164962,152184],{"class":54},[37,164964,26116],{"class":50},[37,164966,152189],{"class":54},[37,164968,164969,164971,164973,164975,164978,164980],{"class":39,"line":107},[37,164970,31369],{"class":82},[37,164972,164619],{"class":54},[37,164974,62747],{"class":309},[37,164976,164977],{"class":54},"], student[",[37,164979,151519],{"class":309},[37,164981,4729],{"class":54},[14,164983,164984],{},"统计平均分：",[27,164986,164988],{"className":29,"code":164987,"language":31,"meta":32,"style":32},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[34,164989,164990,164998,165002,165012,165024,165028,165043],{"__ignoreMap":32},[37,164991,164992,164994,164996],{"class":39,"line":40},[37,164993,157307],{"class":54},[37,164995,70],{"class":50},[37,164997,47401],{"class":82},[37,164999,165000],{"class":39,"line":47},[37,165001,2472],{"emptyLinePlaceholder":131},[37,165003,165004,165006,165008,165010],{"class":39,"line":58},[37,165005,3097],{"class":50},[37,165007,152184],{"class":54},[37,165009,26116],{"class":50},[37,165011,152189],{"class":54},[37,165013,165014,165016,165018,165020,165022],{"class":39,"line":64},[37,165015,159354],{"class":54},[37,165017,9549],{"class":50},[37,165019,152196],{"class":54},[37,165021,151519],{"class":309},[37,165023,33315],{"class":54},[37,165025,165026],{"class":39,"line":76},[37,165027,2472],{"emptyLinePlaceholder":131},[37,165029,165030,165032,165034,165036,165038,165040],{"class":39,"line":92},[37,165031,163821],{"class":54},[37,165033,70],{"class":50},[37,165035,163826],{"class":54},[37,165037,787],{"class":50},[37,165039,7403],{"class":82},[37,165041,165042],{"class":54},"(students)\n",[37,165044,165045,165047,165049,165051,165053,165055,165057,165059,165061,165063],{"class":39,"line":97},[37,165046,30485],{"class":82},[37,165048,208],{"class":54},[37,165050,258],{"class":50},[37,165052,163844],{"class":309},[37,165054,1099],{"class":82},[37,165056,163849],{"class":54},[37,165058,157206],{"class":50},[37,165060,1149],{"class":82},[37,165062,456],{"class":309},[37,165064,214],{"class":54},[14,165066,165067],{},"查找学生：",[27,165069,165071],{"className":29,"code":165070,"language":31,"meta":32,"style":32},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[34,165072,165073,165088,165092,165102,165116,165122,165126,165132],{"__ignoreMap":32},[37,165074,165075,165077,165079,165081,165083,165086],{"class":39,"line":40},[37,165076,111625],{"class":54},[37,165078,70],{"class":50},[37,165080,60673],{"class":82},[37,165082,208],{"class":54},[37,165084,165085],{"class":309},"\"请输入学生姓名:\"",[37,165087,214],{"class":54},[37,165089,165090],{"class":39,"line":47},[37,165091,2472],{"emptyLinePlaceholder":131},[37,165093,165094,165096,165098,165100],{"class":39,"line":58},[37,165095,3097],{"class":50},[37,165097,152184],{"class":54},[37,165099,26116],{"class":50},[37,165101,152189],{"class":54},[37,165103,165104,165106,165108,165110,165112,165114],{"class":39,"line":64},[37,165105,3173],{"class":50},[37,165107,152196],{"class":54},[37,165109,62747],{"class":309},[37,165111,4515],{"class":54},[37,165113,3021],{"class":50},[37,165115,160479],{"class":54},[37,165117,165118,165120],{"class":39,"line":76},[37,165119,32520],{"class":82},[37,165121,150089],{"class":54},[37,165123,165124],{"class":39,"line":92},[37,165125,31697],{"class":50},[37,165127,165128,165130],{"class":39,"line":97},[37,165129,1773],{"class":50},[37,165131,3811],{"class":54},[37,165133,165134,165136,165138,165141],{"class":39,"line":107},[37,165135,31369],{"class":82},[37,165137,208],{"class":54},[37,165139,165140],{"class":309},"\"没有找到\"",[37,165142,214],{"class":54},[146,165144,165146],{"id":165145},"_613-容器通用操作","6.13 容器通用操作",[14,165148,165149],{},"长度：",[27,165151,165153],{"className":29,"code":165152,"language":31,"meta":32,"style":32},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[34,165154,165155,165174,165184],{"__ignoreMap":32},[37,165156,165157,165159,165162,165164,165166,165168,165170,165172],{"class":39,"line":40},[37,165158,7430],{"class":82},[37,165160,165161],{"class":54},"([",[37,165163,422],{"class":82},[37,165165,12507],{"class":54},[37,165167,282],{"class":82},[37,165169,12507],{"class":54},[37,165171,276],{"class":82},[37,165173,4729],{"class":54},[37,165175,165176,165178,165180,165182],{"class":39,"line":47},[37,165177,7430],{"class":82},[37,165179,208],{"class":54},[37,165181,155927],{"class":309},[37,165183,214],{"class":54},[37,165185,165186,165188,165191,165193,165195,165197],{"class":39,"line":58},[37,165187,7430],{"class":82},[37,165189,165190],{"class":54},"({",[37,165192,62747],{"class":309},[37,165194,51505],{"class":54},[37,165196,149935],{"class":309},[37,165198,165199],{"class":54},"})\n",[14,165201,165202],{},"最大最小：",[27,165204,165206],{"className":29,"code":165205,"language":31,"meta":32,"style":32},"max([1, 2, 3])\nmin([1, 2, 3])\n",[34,165207,165208,165226],{"__ignoreMap":32},[37,165209,165210,165212,165214,165216,165218,165220,165222,165224],{"class":39,"line":40},[37,165211,6087],{"class":82},[37,165213,165161],{"class":54},[37,165215,422],{"class":82},[37,165217,12507],{"class":54},[37,165219,282],{"class":82},[37,165221,12507],{"class":54},[37,165223,276],{"class":82},[37,165225,4729],{"class":54},[37,165227,165228,165231,165233,165235,165237,165239,165241,165243],{"class":39,"line":47},[37,165229,165230],{"class":82},"min",[37,165232,165161],{"class":54},[37,165234,422],{"class":82},[37,165236,12507],{"class":54},[37,165238,282],{"class":82},[37,165240,12507],{"class":54},[37,165242,276],{"class":82},[37,165244,4729],{"class":54},[14,165246,165247],{},"求和：",[27,165249,165251],{"className":29,"code":165250,"language":31,"meta":32,"style":32},"sum([1, 2, 3])\n",[34,165252,165253],{"__ignoreMap":32},[37,165254,165255,165258,165260,165262,165264,165266,165268,165270],{"class":39,"line":40},[37,165256,165257],{"class":82},"sum",[37,165259,165161],{"class":54},[37,165261,422],{"class":82},[37,165263,12507],{"class":54},[37,165265,282],{"class":82},[37,165267,12507],{"class":54},[37,165269,276],{"class":82},[37,165271,4729],{"class":54},[14,165273,163518],{},[27,165275,165277],{"className":29,"code":165276,"language":31,"meta":32,"style":32},"sorted([3, 1, 2])\n",[34,165278,165279],{"__ignoreMap":32},[37,165280,165281,165284,165286,165288,165290,165292,165294,165296],{"class":39,"line":40},[37,165282,165283],{"class":82},"sorted",[37,165285,165161],{"class":54},[37,165287,276],{"class":82},[37,165289,12507],{"class":54},[37,165291,422],{"class":82},[37,165293,12507],{"class":54},[37,165295,282],{"class":82},[37,165297,4729],{"class":54},[14,165299,165300],{},"类型转换：",[27,165302,165304],{"className":29,"code":165303,"language":31,"meta":32,"style":32},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[34,165305,165306,165316,165334],{"__ignoreMap":32},[37,165307,165308,165310,165312,165314],{"class":39,"line":40},[37,165309,154117],{"class":82},[37,165311,208],{"class":54},[37,165313,155927],{"class":309},[37,165315,214],{"class":54},[37,165317,165318,165320,165322,165324,165326,165328,165330,165332],{"class":39,"line":47},[37,165319,155312],{"class":82},[37,165321,165161],{"class":54},[37,165323,422],{"class":82},[37,165325,12507],{"class":54},[37,165327,282],{"class":82},[37,165329,12507],{"class":54},[37,165331,276],{"class":82},[37,165333,4729],{"class":54},[37,165335,165336,165338,165340,165342,165344,165346,165348,165350,165352,165354],{"class":39,"line":58},[37,165337,155337],{"class":82},[37,165339,165161],{"class":54},[37,165341,422],{"class":82},[37,165343,12507],{"class":54},[37,165345,422],{"class":82},[37,165347,12507],{"class":54},[37,165349,282],{"class":82},[37,165351,12507],{"class":54},[37,165353,276],{"class":82},[37,165355,4729],{"class":54},[14,165357,165358],{},"成员判断：",[27,165360,165362],{"className":29,"code":165361,"language":31,"meta":32,"style":32},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[34,165363,165364,165381,165405],{"__ignoreMap":32},[37,165365,165366,165368,165370,165373,165376,165379],{"class":39,"line":40},[37,165367,30485],{"class":82},[37,165369,208],{"class":54},[37,165371,165372],{"class":309},"\"a\"",[37,165374,165375],{"class":50}," in",[37,165377,165378],{"class":309}," \"abc\"",[37,165380,214],{"class":54},[37,165382,165383,165385,165387,165389,165391,165393,165395,165397,165399,165401,165403],{"class":39,"line":47},[37,165384,30485],{"class":82},[37,165386,208],{"class":54},[37,165388,422],{"class":82},[37,165390,165375],{"class":50},[37,165392,52294],{"class":54},[37,165394,422],{"class":82},[37,165396,12507],{"class":54},[37,165398,282],{"class":82},[37,165400,12507],{"class":54},[37,165402,276],{"class":82},[37,165404,4729],{"class":54},[37,165406,165407,165409,165411,165413,165415,165417,165419,165421,165423],{"class":39,"line":58},[37,165408,30485],{"class":82},[37,165410,208],{"class":54},[37,165412,62747],{"class":309},[37,165414,165375],{"class":50},[37,165416,4520],{"class":54},[37,165418,62747],{"class":309},[37,165420,51505],{"class":54},[37,165422,149935],{"class":309},[37,165424,165199],{"class":54},[146,165426,165428],{"id":165427},"_614-推导式","6.14 推导式",[14,165430,165431],{},"推导式用于快速生成容器。",[14,165433,165434],{},"列表推导式：",[27,165436,165438],{"className":29,"code":165437,"language":31,"meta":32,"style":32},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[34,165439,165440,165467],{"__ignoreMap":32},[37,165441,165442,165444,165446,165449,165451,165453,165455,165457,165459,165461,165463,165465],{"class":39,"line":40},[37,165443,164147],{"class":54},[37,165445,70],{"class":50},[37,165447,165448],{"class":54}," [i ",[37,165450,3097],{"class":50},[37,165452,9510],{"class":54},[37,165454,26116],{"class":50},[37,165456,32512],{"class":82},[37,165458,208],{"class":54},[37,165460,422],{"class":82},[37,165462,12507],{"class":54},[37,165464,549],{"class":82},[37,165466,97347],{"class":54},[37,165468,165469,165471],{"class":39,"line":47},[37,165470,30485],{"class":82},[37,165472,164363],{"class":54},[14,165474,165475],{},"带条件：",[27,165477,165479],{"className":29,"code":165478,"language":31,"meta":32,"style":32},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[34,165480,165481,165522],{"__ignoreMap":32},[37,165482,165483,165486,165488,165490,165492,165494,165496,165498,165500,165502,165504,165506,165508,165510,165512,165514,165516,165518,165520],{"class":39,"line":40},[37,165484,165485],{"class":54},"even_nums ",[37,165487,70],{"class":50},[37,165489,165448],{"class":54},[37,165491,3097],{"class":50},[37,165493,9510],{"class":54},[37,165495,26116],{"class":50},[37,165497,32512],{"class":82},[37,165499,208],{"class":54},[37,165501,422],{"class":82},[37,165503,12507],{"class":54},[37,165505,542],{"class":82},[37,165507,13786],{"class":54},[37,165509,1603],{"class":50},[37,165511,9510],{"class":54},[37,165513,533],{"class":50},[37,165515,14827],{"class":82},[37,165517,101606],{"class":50},[37,165519,4165],{"class":82},[37,165521,33315],{"class":54},[37,165523,165524,165526],{"class":39,"line":47},[37,165525,30485],{"class":82},[37,165527,165528],{"class":54},"(even_nums)\n",[14,165530,165531],{},"字典推导式：",[27,165533,165535],{"className":29,"code":165534,"language":31,"meta":32,"style":32},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[34,165536,165537,165571],{"__ignoreMap":32},[37,165538,165539,165542,165544,165547,165549,165551,165554,165556,165558,165560,165562,165564,165566,165568],{"class":39,"line":40},[37,165540,165541],{"class":54},"squares ",[37,165543,70],{"class":50},[37,165545,165546],{"class":54}," {i: i ",[37,165548,10733],{"class":50},[37,165550,14827],{"class":82},[37,165552,165553],{"class":50}," for",[37,165555,9510],{"class":54},[37,165557,26116],{"class":50},[37,165559,32512],{"class":82},[37,165561,208],{"class":54},[37,165563,422],{"class":82},[37,165565,12507],{"class":54},[37,165567,549],{"class":82},[37,165569,165570],{"class":54},")}\n",[37,165572,165573,165575],{"class":39,"line":47},[37,165574,30485],{"class":82},[37,165576,165577],{"class":54},"(squares)\n",[14,165579,165580],{},"集合推导式：",[27,165582,165584],{"className":29,"code":165583,"language":31,"meta":32,"style":32},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[34,165585,165586,165607],{"__ignoreMap":32},[37,165587,165588,165591,165593,165596,165598,165600,165602,165605],{"class":39,"line":40},[37,165589,165590],{"class":54},"chars ",[37,165592,70],{"class":50},[37,165594,165595],{"class":54}," {ch ",[37,165597,3097],{"class":50},[37,165599,159739],{"class":54},[37,165601,26116],{"class":50},[37,165603,165604],{"class":309}," \"hello\"",[37,165606,1637],{"class":54},[37,165608,165609,165611],{"class":39,"line":47},[37,165610,30485],{"class":82},[37,165612,165613],{"class":54},"(chars)\n",[14,165615,165616],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[146,165618,165620],{"id":165619},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[27,165622,165624],{"className":29,"code":165623,"language":31,"meta":32,"style":32},"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",[34,165625,165626,165634,165654,165674,165694,165714,165718,165722,165730,165744,165753,165757,165767,165779,165783,165803,165812,165816,165832,165837,165841,165855,165859,165881,165917],{"__ignoreMap":32},[37,165627,165628,165630,165632],{"class":39,"line":40},[37,165629,159763],{"class":54},[37,165631,70],{"class":50},[37,165633,55515],{"class":54},[37,165635,165636,165638,165640,165642,165644,165646,165648,165650,165652],{"class":39,"line":47},[37,165637,148432],{"class":54},[37,165639,62747],{"class":309},[37,165641,51505],{"class":54},[37,165643,149935],{"class":309},[37,165645,12507],{"class":54},[37,165647,151519],{"class":309},[37,165649,51505],{"class":54},[37,165651,1192],{"class":82},[37,165653,5002],{"class":54},[37,165655,165656,165658,165660,165662,165664,165666,165668,165670,165672],{"class":39,"line":58},[37,165657,148432],{"class":54},[37,165659,62747],{"class":309},[37,165661,51505],{"class":54},[37,165663,150983],{"class":309},[37,165665,12507],{"class":54},[37,165667,151519],{"class":309},[37,165669,51505],{"class":54},[37,165671,1014],{"class":82},[37,165673,5002],{"class":54},[37,165675,165676,165678,165680,165682,165684,165686,165688,165690,165692],{"class":39,"line":64},[37,165677,148432],{"class":54},[37,165679,62747],{"class":309},[37,165681,51505],{"class":54},[37,165683,159778],{"class":309},[37,165685,12507],{"class":54},[37,165687,151519],{"class":309},[37,165689,51505],{"class":54},[37,165691,611],{"class":82},[37,165693,5002],{"class":54},[37,165695,165696,165698,165700,165702,165704,165706,165708,165710,165712],{"class":39,"line":76},[37,165697,148432],{"class":54},[37,165699,62747],{"class":309},[37,165701,51505],{"class":54},[37,165703,163357],{"class":309},[37,165705,12507],{"class":54},[37,165707,151519],{"class":309},[37,165709,51505],{"class":54},[37,165711,1085],{"class":82},[37,165713,5002],{"class":54},[37,165715,165716],{"class":39,"line":92},[37,165717,33315],{"class":54},[37,165719,165720],{"class":39,"line":97},[37,165721,2472],{"emptyLinePlaceholder":131},[37,165723,165724,165726,165728],{"class":39,"line":107},[37,165725,157307],{"class":54},[37,165727,70],{"class":50},[37,165729,47401],{"class":82},[37,165731,165732,165735,165737,165740,165742],{"class":39,"line":1390},[37,165733,165734],{"class":54},"max_student ",[37,165736,70],{"class":50},[37,165738,165739],{"class":54}," students[",[37,165741,396],{"class":82},[37,165743,33315],{"class":54},[37,165745,165746,165749,165751],{"class":39,"line":1402},[37,165747,165748],{"class":54},"passed ",[37,165750,70],{"class":50},[37,165752,51906],{"class":54},[37,165754,165755],{"class":39,"line":1684},[37,165756,2472],{"emptyLinePlaceholder":131},[37,165758,165759,165761,165763,165765],{"class":39,"line":1689},[37,165760,3097],{"class":50},[37,165762,152184],{"class":54},[37,165764,26116],{"class":50},[37,165766,152189],{"class":54},[37,165768,165769,165771,165773,165775,165777],{"class":39,"line":1695},[37,165770,159354],{"class":54},[37,165772,9549],{"class":50},[37,165774,152196],{"class":54},[37,165776,151519],{"class":309},[37,165778,33315],{"class":54},[37,165780,165781],{"class":39,"line":1700},[37,165782,2472],{"emptyLinePlaceholder":131},[37,165784,165785,165787,165789,165791,165793,165795,165798,165800],{"class":39,"line":1714},[37,165786,3173],{"class":50},[37,165788,152196],{"class":54},[37,165790,151519],{"class":309},[37,165792,4515],{"class":54},[37,165794,1163],{"class":50},[37,165796,165797],{"class":54}," max_student[",[37,165799,151519],{"class":309},[37,165801,165802],{"class":54},"]:\n",[37,165804,165805,165808,165810],{"class":39,"line":1719},[37,165806,165807],{"class":54},"        max_student ",[37,165809,70],{"class":50},[37,165811,152212],{"class":54},[37,165813,165814],{"class":39,"line":1725},[37,165815,2472],{"emptyLinePlaceholder":131},[37,165817,165818,165820,165822,165824,165826,165828,165830],{"class":39,"line":1746},[37,165819,3173],{"class":50},[37,165821,152196],{"class":54},[37,165823,151519],{"class":309},[37,165825,4515],{"class":54},[37,165827,1782],{"class":50},[37,165829,157884],{"class":82},[37,165831,3811],{"class":54},[37,165833,165834],{"class":39,"line":1751},[37,165835,165836],{"class":54},"        passed.append(student)\n",[37,165838,165839],{"class":39,"line":1765},[37,165840,2472],{"emptyLinePlaceholder":131},[37,165842,165843,165845,165847,165849,165851,165853],{"class":39,"line":1770},[37,165844,163821],{"class":54},[37,165846,70],{"class":50},[37,165848,163826],{"class":54},[37,165850,787],{"class":50},[37,165852,7403],{"class":82},[37,165854,165042],{"class":54},[37,165856,165857],{"class":39,"line":1799},[37,165858,2472],{"emptyLinePlaceholder":131},[37,165860,165861,165863,165865,165867,165869,165871,165873,165875,165877,165879],{"class":39,"line":1804},[37,165862,30485],{"class":82},[37,165864,208],{"class":54},[37,165866,258],{"class":50},[37,165868,163844],{"class":309},[37,165870,1099],{"class":82},[37,165872,163849],{"class":54},[37,165874,157206],{"class":50},[37,165876,1149],{"class":82},[37,165878,456],{"class":309},[37,165880,214],{"class":54},[37,165882,165883,165885,165887,165889,165892,165894,165897,165899,165901,165903,165905,165907,165909,165911,165913,165915],{"class":39,"line":1821},[37,165884,30485],{"class":82},[37,165886,208],{"class":54},[37,165888,258],{"class":50},[37,165890,165891],{"class":309},"\"最高分学生:",[37,165893,1099],{"class":82},[37,165895,165896],{"class":54},"max_student[",[37,165898,152929],{"class":309},[37,165900,1143],{"class":54},[37,165902,1149],{"class":82},[37,165904,4520],{"class":82},[37,165906,165896],{"class":54},[37,165908,152967],{"class":309},[37,165910,1143],{"class":54},[37,165912,1149],{"class":82},[37,165914,456],{"class":309},[37,165916,214],{"class":54},[37,165918,165919,165921,165923,165925,165928,165931,165934,165936,165938],{"class":39,"line":1826},[37,165920,30485],{"class":82},[37,165922,208],{"class":54},[37,165924,258],{"class":50},[37,165926,165927],{"class":309},"\"及格人数:",[37,165929,165930],{"class":82},"{len",[37,165932,165933],{"class":54},"(passed)",[37,165935,1149],{"class":82},[37,165937,456],{"class":309},[37,165939,214],{"class":54},[146,165941,165943],{"id":165942},"_616-易错点","6.16 易错点",[158,165945,165946,165949,165952,165955,165961,165970],{},[161,165947,165948],{},"列表可变，元组和字符串不可变。",[161,165950,165951],{},"切片结束位置不包含。",[161,165953,165954],{},"字典通过 key 取值，不是通过索引。",[161,165956,165957,165958,28458],{},"空集合要用 ",[34,165959,165960],{},"set()",[161,165962,104413,165963,165966,165967,28458],{},[34,165964,165965],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[34,165968,165969],{},"get()",[161,165971,165972],{},"嵌套容器要先看清楚每一层是什么类型。",[146,165974,165976],{"id":165975},"_617-本章练习","6.17 本章练习",[158,165978,165979,165982,165985,165988,165991],{},[161,165980,165981],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[161,165983,165984],{},"输入一句话，统计每个字符出现次数。",[161,165986,165987],{},"使用集合去除列表中的重复元素。",[161,165989,165990],{},"使用字典保存一个学生的信息，并实现修改成绩。",[161,165992,165993],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[123,165995,165996],{},"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":32,"searchDepth":47,"depth":47,"links":165998},[165999,166000,166001,166002,166003,166004,166005,166006,166007,166008,166009,166010,166011,166012,166013,166014,166015],{"id":162979,"depth":47,"text":162980},{"id":163096,"depth":47,"text":163097},{"id":163186,"depth":47,"text":163187},{"id":163310,"depth":47,"text":163311},{"id":163673,"depth":47,"text":163674},{"id":163860,"depth":47,"text":163861},{"id":163979,"depth":47,"text":163980},{"id":164121,"depth":47,"text":164122},{"id":164308,"depth":47,"text":164309},{"id":164552,"depth":47,"text":164553},{"id":164762,"depth":47,"text":164763},{"id":164847,"depth":47,"text":164848},{"id":165145,"depth":47,"text":165146},{"id":165427,"depth":47,"text":165428},{"id":165619,"depth":47,"text":165620},{"id":165942,"depth":47,"text":165943},{"id":165975,"depth":47,"text":165976},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162971,"description":128},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166022,"title":166023,"body":166024,"description":128,"extension":129,"meta":168196,"navigation":131,"path":168197,"seo":168198,"stem":168199,"__hash__":168200},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166025,"toc":168171},[166026,166029,166033,166036,166116,166119,166140,166143,166147,166150,166212,166215,166232,166236,166239,166284,166286,166294,166298,166301,166383,166386,166389,166414,166417,166440,166444,166447,166449,166511,166514,166516,166567,166571,166575,166581,166686,166690,166696,166767,166771,166774,166842,166845,166925,166929,166935,166971,166974,166977,167087,167093,167097,167100,167172,167175,167179,167183,167188,167250,167254,167259,167327,167331,167336,167452,167456,167459,167539,167542,167546,167549,167653,167655,167670,167673,167677,167815,167823,167827,167829,167840,167842,168100,168104,168136,168140,168168],[10,166027,166023],{"id":166028},"_7-函数进阶",[146,166030,166032],{"id":166031},"_71-多返回值","7.1 多返回值",[14,166034,166035],{},"Python 函数可以返回多个值，本质上返回的是元组。",[27,166037,166039],{"className":29,"code":166038,"language":31,"meta":32,"style":32},"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",[34,166040,166041,166050,166058,166066,166075,166082,166086,166090,166099,166105],{"__ignoreMap":32},[37,166042,166043,166045,166048],{"class":39,"line":40},[37,166044,32017],{"class":50},[37,166046,166047],{"class":2035}," get_info",[37,166049,32023],{"class":54},[37,166051,166052,166054,166056],{"class":39,"line":47},[37,166053,152417],{"class":54},[37,166055,70],{"class":50},[37,166057,149400],{"class":309},[37,166059,166060,166062,166064],{"class":39,"line":58},[37,166061,152433],{"class":54},[37,166063,70],{"class":50},[37,166065,146598],{"class":82},[37,166067,166068,166070,166072],{"class":39,"line":64},[37,166069,152448],{"class":54},[37,166071,70],{"class":50},[37,166073,166074],{"class":82}," 95\n",[37,166076,166077,166079],{"class":39,"line":76},[37,166078,4162],{"class":50},[37,166080,166081],{"class":54}," name, age, score\n",[37,166083,166084],{"class":39,"line":92},[37,166085,2472],{"emptyLinePlaceholder":131},[37,166087,166088],{"class":39,"line":97},[37,166089,2472],{"emptyLinePlaceholder":131},[37,166091,166092,166094,166096],{"class":39,"line":107},[37,166093,161353],{"class":54},[37,166095,70],{"class":50},[37,166097,166098],{"class":54}," get_info()\n",[37,166100,166101,166103],{"class":39,"line":1390},[37,166102,30485],{"class":82},[37,166104,76653],{"class":54},[37,166106,166107,166109,166111,166113],{"class":39,"line":1402},[37,166108,30485],{"class":82},[37,166110,208],{"class":54},[37,166112,103154],{"class":82},[37,166114,166115],{"class":54},"(result))\n",[14,166117,166118],{},"可以直接解包：",[27,166120,166122],{"className":29,"code":166121,"language":31,"meta":32,"style":32},"name, age, score = get_info()\nprint(name, age, score)\n",[34,166123,166124,166133],{"__ignoreMap":32},[37,166125,166126,166129,166131],{"class":39,"line":40},[37,166127,166128],{"class":54},"name, age, score ",[37,166130,70],{"class":50},[37,166132,166098],{"class":54},[37,166134,166135,166137],{"class":39,"line":47},[37,166136,30485],{"class":82},[37,166138,166139],{"class":54},"(name, age, score)\n",[14,166141,166142],{},"返回多个值适合函数需要同时给出多个结果时使用。",[146,166144,166146],{"id":166145},"_72-位置参数","7.2 位置参数",[14,166148,166149],{},"位置参数按顺序传递。",[27,166151,166153],{"className":29,"code":166152,"language":31,"meta":32,"style":32},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[34,166154,166155,166163,166191,166195,166199],{"__ignoreMap":32},[37,166156,166157,166159,166161],{"class":39,"line":40},[37,166158,32017],{"class":50},[37,166160,149419],{"class":2035},[37,166162,149422],{"class":54},[37,166164,166165,166167,166169,166171,166173,166175,166177,166179,166181,166183,166185,166187,166189],{"class":39,"line":47},[37,166166,31369],{"class":82},[37,166168,208],{"class":54},[37,166170,258],{"class":50},[37,166172,149433],{"class":309},[37,166174,1099],{"class":82},[37,166176,79878],{"class":54},[37,166178,1149],{"class":82},[37,166180,149442],{"class":309},[37,166182,1099],{"class":82},[37,166184,70289],{"class":54},[37,166186,1149],{"class":82},[37,166188,149451],{"class":309},[37,166190,214],{"class":54},[37,166192,166193],{"class":39,"line":58},[37,166194,2472],{"emptyLinePlaceholder":131},[37,166196,166197],{"class":39,"line":64},[37,166198,2472],{"emptyLinePlaceholder":131},[37,166200,166201,166204,166206,166208,166210],{"class":39,"line":76},[37,166202,166203],{"class":54},"introduce(",[37,166205,149935],{"class":309},[37,166207,12507],{"class":54},[37,166209,853],{"class":82},[37,166211,214],{"class":54},[14,166213,166214],{},"顺序错了就会得到错误含义：",[27,166216,166218],{"className":29,"code":166217,"language":31,"meta":32,"style":32},"introduce(18, \"小明\")\n",[34,166219,166220],{"__ignoreMap":32},[37,166221,166222,166224,166226,166228,166230],{"class":39,"line":40},[37,166223,166203],{"class":54},[37,166225,853],{"class":82},[37,166227,12507],{"class":54},[37,166229,149935],{"class":309},[37,166231,214],{"class":54},[146,166233,166235],{"id":166234},"_73-关键字参数","7.3 关键字参数",[14,166237,166238],{},"关键字参数按参数名传递。",[27,166240,166242],{"className":29,"code":166241,"language":31,"meta":32,"style":32},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[34,166243,166244,166264],{"__ignoreMap":32},[37,166245,166246,166248,166250,166252,166254,166256,166258,166260,166262],{"class":39,"line":40},[37,166247,166203],{"class":54},[37,166249,79878],{"class":5288},[37,166251,70],{"class":50},[37,166253,149935],{"class":309},[37,166255,12507],{"class":54},[37,166257,70289],{"class":5288},[37,166259,70],{"class":50},[37,166261,853],{"class":82},[37,166263,214],{"class":54},[37,166265,166266,166268,166270,166272,166274,166276,166278,166280,166282],{"class":39,"line":47},[37,166267,166203],{"class":54},[37,166269,70289],{"class":5288},[37,166271,70],{"class":50},[37,166273,853],{"class":82},[37,166275,12507],{"class":54},[37,166277,79878],{"class":5288},[37,166279,70],{"class":50},[37,166281,149935],{"class":309},[37,166283,214],{"class":54},[14,166285,117981],{},[158,166287,166288,166291],{},[161,166289,166290],{},"顺序不容易错。",[161,166292,166293],{},"调用时可读性更强。",[146,166295,166297],{"id":166296},"_74-默认参数","7.4 默认参数",[14,166299,166300],{},"默认参数给参数设置默认值。",[27,166302,166304],{"className":29,"code":166303,"language":31,"meta":32,"style":32},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[34,166305,166306,166322,166352,166356,166360,166370],{"__ignoreMap":32},[37,166307,166308,166310,166312,166315,166317,166320],{"class":39,"line":40},[37,166309,32017],{"class":50},[37,166311,122140],{"class":2035},[37,166313,166314],{"class":54},"(host, port",[37,166316,70],{"class":50},[37,166318,166319],{"class":82},"3306",[37,166321,30856],{"class":54},[37,166323,166324,166326,166328,166330,166333,166335,166337,166339,166341,166343,166346,166348,166350],{"class":39,"line":47},[37,166325,31369],{"class":82},[37,166327,208],{"class":54},[37,166329,258],{"class":50},[37,166331,166332],{"class":309},"\"连接",[37,166334,1099],{"class":82},[37,166336,27468],{"class":54},[37,166338,1149],{"class":82},[37,166340,1062],{"class":309},[37,166342,1099],{"class":82},[37,166344,166345],{"class":54},"port",[37,166347,1149],{"class":82},[37,166349,456],{"class":309},[37,166351,214],{"class":54},[37,166353,166354],{"class":39,"line":58},[37,166355,2472],{"emptyLinePlaceholder":131},[37,166357,166358],{"class":39,"line":64},[37,166359,2472],{"emptyLinePlaceholder":131},[37,166361,166362,166365,166368],{"class":39,"line":76},[37,166363,166364],{"class":54},"connect(",[37,166366,166367],{"class":309},"\"localhost\"",[37,166369,214],{"class":54},[37,166371,166372,166374,166376,166378,166381],{"class":39,"line":92},[37,166373,166364],{"class":54},[37,166375,166367],{"class":309},[37,166377,12507],{"class":54},[37,166379,166380],{"class":82},"6379",[37,166382,214],{"class":54},[14,166384,166385],{},"注意：默认参数必须放在非默认参数后面。",[14,166387,166388],{},"错误：",[27,166390,166392],{"className":29,"code":166391,"language":31,"meta":32,"style":32},"def connect(port=3306, host):\n    pass\n",[34,166393,166394,166410],{"__ignoreMap":32},[37,166395,166396,166398,166400,166403,166405,166407],{"class":39,"line":40},[37,166397,32017],{"class":50},[37,166399,122140],{"class":2035},[37,166401,166402],{"class":54},"(port",[37,166404,70],{"class":50},[37,166406,166319],{"class":82},[37,166408,166409],{"class":54},", host):\n",[37,166411,166412],{"class":39,"line":47},[37,166413,149584],{"class":50},[14,166415,166416],{},"正确：",[27,166418,166420],{"className":29,"code":166419,"language":31,"meta":32,"style":32},"def connect(host, port=3306):\n    pass\n",[34,166421,166422,166436],{"__ignoreMap":32},[37,166423,166424,166426,166428,166430,166432,166434],{"class":39,"line":40},[37,166425,32017],{"class":50},[37,166427,122140],{"class":2035},[37,166429,166314],{"class":54},[37,166431,70],{"class":50},[37,166433,166319],{"class":82},[37,166435,30856],{"class":54},[37,166437,166438],{"class":39,"line":47},[37,166439,149584],{"class":50},[146,166441,166443],{"id":166442},"_75-默认参数的坑","7.5 默认参数的坑",[14,166445,166446],{},"不要使用可变对象作为默认参数。",[14,166448,157670],{},[27,166450,166452],{"className":29,"code":166451,"language":31,"meta":32,"style":32},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[34,166453,166454,166469,166474,166481,166485,166489,166500],{"__ignoreMap":32},[37,166455,166456,166458,166461,166464,166466],{"class":39,"line":40},[37,166457,32017],{"class":50},[37,166459,166460],{"class":2035}," add_item",[37,166462,166463],{"class":54},"(item, items",[37,166465,70],{"class":50},[37,166467,166468],{"class":54},"[]):\n",[37,166470,166471],{"class":39,"line":47},[37,166472,166473],{"class":54},"    items.append(item)\n",[37,166475,166476,166478],{"class":39,"line":58},[37,166477,4162],{"class":50},[37,166479,166480],{"class":54}," items\n",[37,166482,166483],{"class":39,"line":64},[37,166484,2472],{"emptyLinePlaceholder":131},[37,166486,166487],{"class":39,"line":76},[37,166488,2472],{"emptyLinePlaceholder":131},[37,166490,166491,166493,166496,166498],{"class":39,"line":92},[37,166492,30485],{"class":82},[37,166494,166495],{"class":54},"(add_item(",[37,166497,165372],{"class":309},[37,166499,30567],{"class":54},[37,166501,166502,166504,166506,166509],{"class":39,"line":97},[37,166503,30485],{"class":82},[37,166505,166495],{"class":54},[37,166507,166508],{"class":309},"\"b\"",[37,166510,30567],{"class":54},[14,166512,166513],{},"第二次调用会复用第一次的列表。",[14,166515,155935],{},[27,166517,166519],{"className":29,"code":166518,"language":31,"meta":32,"style":32},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[34,166520,166521,166535,166548,166557,166561],{"__ignoreMap":32},[37,166522,166523,166525,166527,166529,166531,166533],{"class":39,"line":40},[37,166524,32017],{"class":50},[37,166526,166460],{"class":2035},[37,166528,166463],{"class":54},[37,166530,70],{"class":50},[37,166532,95733],{"class":82},[37,166534,30856],{"class":54},[37,166536,166537,166539,166542,166544,166546],{"class":39,"line":47},[37,166538,3173],{"class":50},[37,166540,166541],{"class":54}," items ",[37,166543,38996],{"class":50},[37,166545,39002],{"class":82},[37,166547,3811],{"class":54},[37,166549,166550,166553,166555],{"class":39,"line":58},[37,166551,166552],{"class":54},"        items ",[37,166554,70],{"class":50},[37,166556,51906],{"class":54},[37,166558,166559],{"class":39,"line":64},[37,166560,166473],{"class":54},[37,166562,166563,166565],{"class":39,"line":76},[37,166564,4162],{"class":50},[37,166566,166480],{"class":54},[146,166568,166570],{"id":166569},"_76-不定长参数","7.6 不定长参数",[175,166572,166574],{"id":166573},"_761-args","7.6.1 *args",[14,166576,166577,166580],{},[34,166578,166579],{},"*args"," 接收任意数量的位置参数，得到元组。",[27,166582,166584],{"className":29,"code":166583,"language":31,"meta":32,"style":32},"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",[34,166585,166586,166599,166607,166618,166627,166633,166637,166641,166660],{"__ignoreMap":32},[37,166587,166588,166590,166592,166594,166596],{"class":39,"line":40},[37,166589,32017],{"class":50},[37,166591,5281],{"class":2035},[37,166593,208],{"class":54},[37,166595,659],{"class":50},[37,166597,166598],{"class":54},"args):\n",[37,166600,166601,166603,166605],{"class":39,"line":47},[37,166602,159354],{"class":54},[37,166604,70],{"class":50},[37,166606,47401],{"class":82},[37,166608,166609,166611,166613,166615],{"class":39,"line":58},[37,166610,3273],{"class":50},[37,166612,156227],{"class":54},[37,166614,26116],{"class":50},[37,166616,166617],{"class":54}," args:\n",[37,166619,166620,166622,166624],{"class":39,"line":64},[37,166621,160029],{"class":54},[37,166623,9549],{"class":50},[37,166625,166626],{"class":54}," num\n",[37,166628,166629,166631],{"class":39,"line":76},[37,166630,4162],{"class":50},[37,166632,162334],{"class":54},[37,166634,166635],{"class":39,"line":92},[37,166636,2472],{"emptyLinePlaceholder":131},[37,166638,166639],{"class":39,"line":97},[37,166640,2472],{"emptyLinePlaceholder":131},[37,166642,166643,166645,166648,166650,166652,166654,166656,166658],{"class":39,"line":107},[37,166644,30485],{"class":82},[37,166646,166647],{"class":54},"(add(",[37,166649,422],{"class":82},[37,166651,12507],{"class":54},[37,166653,282],{"class":82},[37,166655,12507],{"class":54},[37,166657,276],{"class":82},[37,166659,30567],{"class":54},[37,166661,166662,166664,166666,166668,166670,166672,166674,166676,166678,166680,166682,166684],{"class":39,"line":1390},[37,166663,30485],{"class":82},[37,166665,166647],{"class":54},[37,166667,422],{"class":82},[37,166669,12507],{"class":54},[37,166671,282],{"class":82},[37,166673,12507],{"class":54},[37,166675,276],{"class":82},[37,166677,12507],{"class":54},[37,166679,498],{"class":82},[37,166681,12507],{"class":54},[37,166683,524],{"class":82},[37,166685,30567],{"class":54},[175,166687,166689],{"id":166688},"_762-kwargs","7.6.2 **kwargs",[14,166691,166692,166695],{},[34,166693,166694],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[27,166697,166699],{"className":29,"code":166698,"language":31,"meta":32,"style":32},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[34,166700,166701,166714,166725,166731,166735,166739],{"__ignoreMap":32},[37,166702,166703,166705,166707,166709,166711],{"class":39,"line":40},[37,166704,32017],{"class":50},[37,166706,161992],{"class":2035},[37,166708,208],{"class":54},[37,166710,10733],{"class":50},[37,166712,166713],{"class":54},"kwargs):\n",[37,166715,166716,166718,166720,166722],{"class":39,"line":47},[37,166717,3273],{"class":50},[37,166719,164832],{"class":54},[37,166721,26116],{"class":50},[37,166723,166724],{"class":54}," kwargs.items():\n",[37,166726,166727,166729],{"class":39,"line":58},[37,166728,32520],{"class":82},[37,166730,164844],{"class":54},[37,166732,166733],{"class":39,"line":64},[37,166734,2472],{"emptyLinePlaceholder":131},[37,166736,166737],{"class":39,"line":76},[37,166738,2472],{"emptyLinePlaceholder":131},[37,166740,166741,166743,166745,166747,166749,166751,166753,166755,166757,166759,166761,166763,166765],{"class":39,"line":92},[37,166742,162057],{"class":54},[37,166744,79878],{"class":5288},[37,166746,70],{"class":50},[37,166748,149935],{"class":309},[37,166750,12507],{"class":54},[37,166752,70289],{"class":5288},[37,166754,70],{"class":50},[37,166756,853],{"class":82},[37,166758,12507],{"class":54},[37,166760,70340],{"class":5288},[37,166762,70],{"class":50},[37,166764,69337],{"class":309},[37,166766,214],{"class":54},[146,166768,166770],{"id":166769},"_77-参数解包","7.7 参数解包",[14,166772,166773],{},"列表或元组解包为位置参数：",[27,166775,166777],{"className":29,"code":166776,"language":31,"meta":32,"style":32},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[34,166778,166779,166788,166803,166807,166811,166831],{"__ignoreMap":32},[37,166780,166781,166783,166785],{"class":39,"line":40},[37,166782,32017],{"class":50},[37,166784,5281],{"class":2035},[37,166786,166787],{"class":54},"(a, b, c):\n",[37,166789,166790,166792,166794,166796,166798,166800],{"class":39,"line":47},[37,166791,4162],{"class":50},[37,166793,10941],{"class":54},[37,166795,685],{"class":50},[37,166797,10954],{"class":54},[37,166799,685],{"class":50},[37,166801,166802],{"class":54}," c\n",[37,166804,166805],{"class":39,"line":58},[37,166806,2472],{"emptyLinePlaceholder":131},[37,166808,166809],{"class":39,"line":64},[37,166810,2472],{"emptyLinePlaceholder":131},[37,166812,166813,166815,166817,166819,166821,166823,166825,166827,166829],{"class":39,"line":76},[37,166814,164147],{"class":54},[37,166816,70],{"class":50},[37,166818,52294],{"class":54},[37,166820,422],{"class":82},[37,166822,12507],{"class":54},[37,166824,282],{"class":82},[37,166826,12507],{"class":54},[37,166828,276],{"class":82},[37,166830,33315],{"class":54},[37,166832,166833,166835,166837,166839],{"class":39,"line":92},[37,166834,30485],{"class":82},[37,166836,166647],{"class":54},[37,166838,659],{"class":50},[37,166840,166841],{"class":54},"nums))\n",[14,166843,166844],{},"字典解包为关键字参数：",[27,166846,166848],{"className":29,"code":166847,"language":31,"meta":32,"style":32},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[34,166849,166850,166858,166884,166888,166892,166916],{"__ignoreMap":32},[37,166851,166852,166854,166856],{"class":39,"line":40},[37,166853,32017],{"class":50},[37,166855,149419],{"class":2035},[37,166857,149422],{"class":54},[37,166859,166860,166862,166864,166866,166868,166870,166872,166874,166876,166878,166880,166882],{"class":39,"line":47},[37,166861,31369],{"class":82},[37,166863,208],{"class":54},[37,166865,258],{"class":50},[37,166867,456],{"class":309},[37,166869,1099],{"class":82},[37,166871,79878],{"class":54},[37,166873,1149],{"class":82},[37,166875,4520],{"class":82},[37,166877,70289],{"class":54},[37,166879,1149],{"class":82},[37,166881,456],{"class":309},[37,166883,214],{"class":54},[37,166885,166886],{"class":39,"line":58},[37,166887,2472],{"emptyLinePlaceholder":131},[37,166889,166890],{"class":39,"line":64},[37,166891,2472],{"emptyLinePlaceholder":131},[37,166893,166894,166896,166898,166900,166902,166904,166906,166908,166910,166912,166914],{"class":39,"line":76},[37,166895,116361],{"class":54},[37,166897,70],{"class":50},[37,166899,4520],{"class":54},[37,166901,62747],{"class":309},[37,166903,51505],{"class":54},[37,166905,149935],{"class":309},[37,166907,12507],{"class":54},[37,166909,69192],{"class":309},[37,166911,51505],{"class":54},[37,166913,853],{"class":82},[37,166915,1637],{"class":54},[37,166917,166918,166920,166922],{"class":39,"line":92},[37,166919,166203],{"class":54},[37,166921,10733],{"class":50},[37,166923,166924],{"class":54},"info)\n",[146,166926,166928],{"id":166927},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,166930,166931,166934],{},[34,166932,166933],{},"lambda"," 用于定义简单匿名函数。",[27,166936,166938],{"className":29,"code":166937,"language":31,"meta":32,"style":32},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[34,166939,166940,166957],{"__ignoreMap":32},[37,166941,166942,166945,166947,166950,166953,166955],{"class":39,"line":40},[37,166943,166944],{"class":54},"add ",[37,166946,70],{"class":50},[37,166948,166949],{"class":50}," lambda",[37,166951,166952],{"class":54}," a, b: a ",[37,166954,685],{"class":50},[37,166956,151151],{"class":54},[37,166958,166959,166961,166963,166965,166967,166969],{"class":39,"line":47},[37,166960,30485],{"class":82},[37,166962,166647],{"class":54},[37,166964,422],{"class":82},[37,166966,12507],{"class":54},[37,166968,282],{"class":82},[37,166970,30567],{"class":54},[14,166972,166973],{},"常和排序、过滤等函数一起使用。",[14,166975,166976],{},"按分数排序：",[27,166978,166980],{"className":29,"code":166979,"language":31,"meta":32,"style":32},"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",[34,166981,166982,166990,167010,167030,167050,167054,167058,167081],{"__ignoreMap":32},[37,166983,166984,166986,166988],{"class":39,"line":40},[37,166985,159763],{"class":54},[37,166987,70],{"class":50},[37,166989,55515],{"class":54},[37,166991,166992,166994,166996,166998,167000,167002,167004,167006,167008],{"class":39,"line":47},[37,166993,148432],{"class":54},[37,166995,62747],{"class":309},[37,166997,51505],{"class":54},[37,166999,149935],{"class":309},[37,167001,12507],{"class":54},[37,167003,151519],{"class":309},[37,167005,51505],{"class":54},[37,167007,1192],{"class":82},[37,167009,5002],{"class":54},[37,167011,167012,167014,167016,167018,167020,167022,167024,167026,167028],{"class":39,"line":58},[37,167013,148432],{"class":54},[37,167015,62747],{"class":309},[37,167017,51505],{"class":54},[37,167019,150983],{"class":309},[37,167021,12507],{"class":54},[37,167023,151519],{"class":309},[37,167025,51505],{"class":54},[37,167027,1014],{"class":82},[37,167029,5002],{"class":54},[37,167031,167032,167034,167036,167038,167040,167042,167044,167046,167048],{"class":39,"line":64},[37,167033,148432],{"class":54},[37,167035,62747],{"class":309},[37,167037,51505],{"class":54},[37,167039,159778],{"class":309},[37,167041,12507],{"class":54},[37,167043,151519],{"class":309},[37,167045,51505],{"class":54},[37,167047,611],{"class":82},[37,167049,5002],{"class":54},[37,167051,167052],{"class":39,"line":76},[37,167053,33315],{"class":54},[37,167055,167056],{"class":39,"line":92},[37,167057,2472],{"emptyLinePlaceholder":131},[37,167059,167060,167063,167065,167067,167069,167071,167073,167075,167077,167079],{"class":39,"line":97},[37,167061,167062],{"class":54},"students.sort(",[37,167064,153993],{"class":5288},[37,167066,153996],{"class":50},[37,167068,153999],{"class":54},[37,167070,151519],{"class":309},[37,167072,112249],{"class":54},[37,167074,163575],{"class":5288},[37,167076,70],{"class":50},[37,167078,31546],{"class":82},[37,167080,214],{"class":54},[37,167082,167083,167085],{"class":39,"line":107},[37,167084,30485],{"class":82},[37,167086,165042],{"class":54},[14,167088,167089,167090,167092],{},"如果逻辑复杂，不要硬写 ",[34,167091,166933],{},"，定义普通函数更清晰。",[146,167094,167096],{"id":167095},"_79-函数作为参数","7.9 函数作为参数",[14,167098,167099],{},"函数可以作为参数传给另一个函数。",[27,167101,167103],{"className":29,"code":167102,"language":31,"meta":32,"style":32},"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",[34,167104,167105,167113,167123,167127,167131,167141,167148,167152,167156],{"__ignoreMap":32},[37,167106,167107,167109,167111],{"class":39,"line":40},[37,167108,32017],{"class":50},[37,167110,5281],{"class":2035},[37,167112,151140],{"class":54},[37,167114,167115,167117,167119,167121],{"class":39,"line":47},[37,167116,4162],{"class":50},[37,167118,10941],{"class":54},[37,167120,685],{"class":50},[37,167122,151151],{"class":54},[37,167124,167125],{"class":39,"line":58},[37,167126,2472],{"emptyLinePlaceholder":131},[37,167128,167129],{"class":39,"line":64},[37,167130,2472],{"emptyLinePlaceholder":131},[37,167132,167133,167135,167138],{"class":39,"line":76},[37,167134,32017],{"class":50},[37,167136,167137],{"class":2035}," calculate",[37,167139,167140],{"class":54},"(a, b, func):\n",[37,167142,167143,167145],{"class":39,"line":92},[37,167144,4162],{"class":50},[37,167146,167147],{"class":54}," func(a, b)\n",[37,167149,167150],{"class":39,"line":97},[37,167151,2472],{"emptyLinePlaceholder":131},[37,167153,167154],{"class":39,"line":107},[37,167155,2472],{"emptyLinePlaceholder":131},[37,167157,167158,167160,167163,167165,167167,167169],{"class":39,"line":1390},[37,167159,30485],{"class":82},[37,167161,167162],{"class":54},"(calculate(",[37,167164,650],{"class":82},[37,167166,12507],{"class":54},[37,167168,903],{"class":82},[37,167170,167171],{"class":54},", add))\n",[14,167173,167174],{},"这种思想在排序、回调、框架中经常出现。",[146,167176,167178],{"id":167177},"_710-mapfiltersorted","7.10 map、filter、sorted",[175,167180,167182],{"id":167181},"_7101-map","7.10.1 map",[14,167184,167185,167187],{},[34,167186,74112],{}," 对每个元素执行函数。",[27,167189,167191],{"className":29,"code":167190,"language":31,"meta":32,"style":32},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[34,167192,167193,167217,167240],{"__ignoreMap":32},[37,167194,167195,167197,167199,167201,167203,167205,167207,167209,167211,167213,167215],{"class":39,"line":40},[37,167196,164147],{"class":54},[37,167198,70],{"class":50},[37,167200,52294],{"class":54},[37,167202,422],{"class":82},[37,167204,12507],{"class":54},[37,167206,282],{"class":82},[37,167208,12507],{"class":54},[37,167210,276],{"class":82},[37,167212,12507],{"class":54},[37,167214,498],{"class":82},[37,167216,33315],{"class":54},[37,167218,167219,167221,167223,167226,167228,167230,167233,167235,167237],{"class":39,"line":47},[37,167220,161353],{"class":54},[37,167222,70],{"class":50},[37,167224,167225],{"class":82}," map",[37,167227,208],{"class":54},[37,167229,166933],{"class":50},[37,167231,167232],{"class":54}," x: x ",[37,167234,659],{"class":50},[37,167236,14827],{"class":82},[37,167238,167239],{"class":54},", nums)\n",[37,167241,167242,167244,167246,167248],{"class":39,"line":58},[37,167243,30485],{"class":82},[37,167245,208],{"class":54},[37,167247,154117],{"class":82},[37,167249,166115],{"class":54},[175,167251,167253],{"id":167252},"_7102-filter","7.10.2 filter",[14,167255,167256,167258],{},[34,167257,80119],{}," 保留满足条件的元素。",[27,167260,167262],{"className":29,"code":167261,"language":31,"meta":32,"style":32},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[34,167263,167264,167292,167317],{"__ignoreMap":32},[37,167265,167266,167268,167270,167272,167274,167276,167278,167280,167282,167284,167286,167288,167290],{"class":39,"line":40},[37,167267,164147],{"class":54},[37,167269,70],{"class":50},[37,167271,52294],{"class":54},[37,167273,422],{"class":82},[37,167275,12507],{"class":54},[37,167277,282],{"class":82},[37,167279,12507],{"class":54},[37,167281,276],{"class":82},[37,167283,12507],{"class":54},[37,167285,498],{"class":82},[37,167287,12507],{"class":54},[37,167289,524],{"class":82},[37,167291,33315],{"class":54},[37,167293,167294,167296,167298,167301,167303,167305,167307,167309,167311,167313,167315],{"class":39,"line":47},[37,167295,161353],{"class":54},[37,167297,70],{"class":50},[37,167299,167300],{"class":82}," filter",[37,167302,208],{"class":54},[37,167304,166933],{"class":50},[37,167306,167232],{"class":54},[37,167308,533],{"class":50},[37,167310,14827],{"class":82},[37,167312,101606],{"class":50},[37,167314,4165],{"class":82},[37,167316,167239],{"class":54},[37,167318,167319,167321,167323,167325],{"class":39,"line":58},[37,167320,30485],{"class":82},[37,167322,208],{"class":54},[37,167324,154117],{"class":82},[37,167326,166115],{"class":54},[175,167328,167330],{"id":167329},"_7103-sorted","7.10.3 sorted",[14,167332,167333,167335],{},[34,167334,165283],{}," 返回排序后的新列表。",[27,167337,167339],{"className":29,"code":167338,"language":31,"meta":32,"style":32},"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",[34,167340,167341,167349,167369,167389,167409,167413,167417,167446],{"__ignoreMap":32},[37,167342,167343,167345,167347],{"class":39,"line":40},[37,167344,159763],{"class":54},[37,167346,70],{"class":50},[37,167348,55515],{"class":54},[37,167350,167351,167353,167355,167357,167359,167361,167363,167365,167367],{"class":39,"line":47},[37,167352,148432],{"class":54},[37,167354,62747],{"class":309},[37,167356,51505],{"class":54},[37,167358,149935],{"class":309},[37,167360,12507],{"class":54},[37,167362,151519],{"class":309},[37,167364,51505],{"class":54},[37,167366,1192],{"class":82},[37,167368,5002],{"class":54},[37,167370,167371,167373,167375,167377,167379,167381,167383,167385,167387],{"class":39,"line":58},[37,167372,148432],{"class":54},[37,167374,62747],{"class":309},[37,167376,51505],{"class":54},[37,167378,150983],{"class":309},[37,167380,12507],{"class":54},[37,167382,151519],{"class":309},[37,167384,51505],{"class":54},[37,167386,1014],{"class":82},[37,167388,5002],{"class":54},[37,167390,167391,167393,167395,167397,167399,167401,167403,167405,167407],{"class":39,"line":64},[37,167392,148432],{"class":54},[37,167394,62747],{"class":309},[37,167396,51505],{"class":54},[37,167398,159778],{"class":309},[37,167400,12507],{"class":54},[37,167402,151519],{"class":309},[37,167404,51505],{"class":54},[37,167406,611],{"class":82},[37,167408,5002],{"class":54},[37,167410,167411],{"class":39,"line":76},[37,167412,33315],{"class":54},[37,167414,167415],{"class":39,"line":92},[37,167416,2472],{"emptyLinePlaceholder":131},[37,167418,167419,167421,167423,167425,167428,167430,167432,167434,167436,167438,167440,167442,167444],{"class":39,"line":97},[37,167420,161353],{"class":54},[37,167422,70],{"class":50},[37,167424,163651],{"class":82},[37,167426,167427],{"class":54},"(students, ",[37,167429,153993],{"class":5288},[37,167431,153996],{"class":50},[37,167433,153999],{"class":54},[37,167435,151519],{"class":309},[37,167437,112249],{"class":54},[37,167439,163575],{"class":5288},[37,167441,70],{"class":50},[37,167443,31546],{"class":82},[37,167445,214],{"class":54},[37,167447,167448,167450],{"class":39,"line":107},[37,167449,30485],{"class":82},[37,167451,76653],{"class":54},[146,167453,167455],{"id":167454},"_711-闭包入门","7.11 闭包入门",[14,167457,167458],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[27,167460,167462],{"className":29,"code":167461,"language":31,"meta":32,"style":32},"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",[34,167463,167464,167474,167484,167495,167499,167506,167510,167514,167528],{"__ignoreMap":32},[37,167465,167466,167468,167471],{"class":39,"line":40},[37,167467,32017],{"class":50},[37,167469,167470],{"class":2035}," outer",[37,167472,167473],{"class":54},"(base):\n",[37,167475,167476,167478,167481],{"class":39,"line":47},[37,167477,30871],{"class":50},[37,167479,167480],{"class":2035}," inner",[37,167482,167483],{"class":54},"(num):\n",[37,167485,167486,167488,167491,167493],{"class":39,"line":58},[37,167487,14824],{"class":50},[37,167489,167490],{"class":54}," base ",[37,167492,685],{"class":50},[37,167494,166626],{"class":54},[37,167496,167497],{"class":39,"line":64},[37,167498,2472],{"emptyLinePlaceholder":131},[37,167500,167501,167503],{"class":39,"line":76},[37,167502,4162],{"class":50},[37,167504,167505],{"class":54}," inner\n",[37,167507,167508],{"class":39,"line":92},[37,167509,2472],{"emptyLinePlaceholder":131},[37,167511,167512],{"class":39,"line":97},[37,167513,2472],{"emptyLinePlaceholder":131},[37,167515,167516,167519,167521,167524,167526],{"class":39,"line":107},[37,167517,167518],{"class":54},"add_10 ",[37,167520,70],{"class":50},[37,167522,167523],{"class":54}," outer(",[37,167525,650],{"class":82},[37,167527,214],{"class":54},[37,167529,167530,167532,167535,167537],{"class":39,"line":1390},[37,167531,30485],{"class":82},[37,167533,167534],{"class":54},"(add_10(",[37,167536,524],{"class":82},[37,167538,30567],{"class":54},[14,167540,167541],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[146,167543,167545],{"id":167544},"_712-装饰器入门","7.12 装饰器入门",[14,167547,167548],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[27,167550,167552],{"className":29,"code":167551,"language":31,"meta":32,"style":32},"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",[34,167553,167554,167563,167572,167583,167588,167599,167603,167610,167614,167618,167623,167631,167641,167645,167649],{"__ignoreMap":32},[37,167555,167556,167558,167560],{"class":39,"line":40},[37,167557,32017],{"class":50},[37,167559,87259],{"class":2035},[37,167561,167562],{"class":54},"(func):\n",[37,167564,167565,167567,167570],{"class":39,"line":47},[37,167566,30871],{"class":50},[37,167568,167569],{"class":2035}," wrapper",[37,167571,32023],{"class":54},[37,167573,167574,167576,167578,167581],{"class":39,"line":58},[37,167575,32520],{"class":82},[37,167577,208],{"class":54},[37,167579,167580],{"class":309},"\"函数开始执行\"",[37,167582,214],{"class":54},[37,167584,167585],{"class":39,"line":64},[37,167586,167587],{"class":54},"        func()\n",[37,167589,167590,167592,167594,167597],{"class":39,"line":76},[37,167591,32520],{"class":82},[37,167593,208],{"class":54},[37,167595,167596],{"class":309},"\"函数执行结束\"",[37,167598,214],{"class":54},[37,167600,167601],{"class":39,"line":92},[37,167602,2472],{"emptyLinePlaceholder":131},[37,167604,167605,167607],{"class":39,"line":97},[37,167606,4162],{"class":50},[37,167608,167609],{"class":54}," wrapper\n",[37,167611,167612],{"class":39,"line":107},[37,167613,2472],{"emptyLinePlaceholder":131},[37,167615,167616],{"class":39,"line":1390},[37,167617,2472],{"emptyLinePlaceholder":131},[37,167619,167620],{"class":39,"line":1402},[37,167621,167622],{"class":2035},"@log\n",[37,167624,167625,167627,167629],{"class":39,"line":1684},[37,167626,32017],{"class":50},[37,167628,161043],{"class":2035},[37,167630,32023],{"class":54},[37,167632,167633,167635,167637,167639],{"class":39,"line":1689},[37,167634,31369],{"class":82},[37,167636,208],{"class":54},[37,167638,5916],{"class":309},[37,167640,214],{"class":54},[37,167642,167643],{"class":39,"line":1695},[37,167644,2472],{"emptyLinePlaceholder":131},[37,167646,167647],{"class":39,"line":1700},[37,167648,2472],{"emptyLinePlaceholder":131},[37,167650,167651],{"class":39,"line":1714},[37,167652,161078],{"class":54},[14,167654,158321],{},[27,167656,167658],{"className":29,"code":167657,"language":31,"meta":32,"style":32},"say_hello = log(say_hello)\n",[34,167659,167660],{"__ignoreMap":32},[37,167661,167662,167665,167667],{"class":39,"line":40},[37,167663,167664],{"class":54},"say_hello ",[37,167666,70],{"class":50},[37,167668,167669],{"class":54}," log(say_hello)\n",[14,167671,167672],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[146,167674,167676],{"id":167675},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[27,167678,167680],{"className":29,"code":167679,"language":31,"meta":32,"style":32},"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",[34,167681,167682,167690,167707,167717,167736,167746,167753,167757,167763,167767,167771,167775,167783,167793,167797,167801],{"__ignoreMap":32},[37,167683,167684,167686,167688],{"class":39,"line":40},[37,167685,32017],{"class":50},[37,167687,87259],{"class":2035},[37,167689,167562],{"class":54},[37,167691,167692,167694,167696,167698,167700,167703,167705],{"class":39,"line":47},[37,167693,30871],{"class":50},[37,167695,167569],{"class":2035},[37,167697,208],{"class":54},[37,167699,659],{"class":50},[37,167701,167702],{"class":54},"args, ",[37,167704,10733],{"class":50},[37,167706,166713],{"class":54},[37,167708,167709,167711,167713,167715],{"class":39,"line":58},[37,167710,32520],{"class":82},[37,167712,208],{"class":54},[37,167714,167580],{"class":309},[37,167716,214],{"class":54},[37,167718,167719,167722,167724,167727,167729,167731,167733],{"class":39,"line":64},[37,167720,167721],{"class":54},"        result ",[37,167723,70],{"class":50},[37,167725,167726],{"class":54}," func(",[37,167728,659],{"class":50},[37,167730,167702],{"class":54},[37,167732,10733],{"class":50},[37,167734,167735],{"class":54},"kwargs)\n",[37,167737,167738,167740,167742,167744],{"class":39,"line":76},[37,167739,32520],{"class":82},[37,167741,208],{"class":54},[37,167743,167596],{"class":309},[37,167745,214],{"class":54},[37,167747,167748,167750],{"class":39,"line":92},[37,167749,14824],{"class":50},[37,167751,167752],{"class":54}," result\n",[37,167754,167755],{"class":39,"line":97},[37,167756,2472],{"emptyLinePlaceholder":131},[37,167758,167759,167761],{"class":39,"line":107},[37,167760,4162],{"class":50},[37,167762,167609],{"class":54},[37,167764,167765],{"class":39,"line":1390},[37,167766,2472],{"emptyLinePlaceholder":131},[37,167768,167769],{"class":39,"line":1402},[37,167770,2472],{"emptyLinePlaceholder":131},[37,167772,167773],{"class":39,"line":1684},[37,167774,167622],{"class":2035},[37,167776,167777,167779,167781],{"class":39,"line":1689},[37,167778,32017],{"class":50},[37,167780,5281],{"class":2035},[37,167782,151140],{"class":54},[37,167784,167785,167787,167789,167791],{"class":39,"line":1695},[37,167786,4162],{"class":50},[37,167788,10941],{"class":54},[37,167790,685],{"class":50},[37,167792,151151],{"class":54},[37,167794,167795],{"class":39,"line":1700},[37,167796,2472],{"emptyLinePlaceholder":131},[37,167798,167799],{"class":39,"line":1714},[37,167800,2472],{"emptyLinePlaceholder":131},[37,167802,167803,167805,167807,167809,167811,167813],{"class":39,"line":1719},[37,167804,30485],{"class":82},[37,167806,166647],{"class":54},[37,167808,650],{"class":82},[37,167810,12507],{"class":54},[37,167812,903],{"class":82},[37,167814,30567],{"class":54},[14,167816,167817,167818,101065,167820,167822],{},"这个写法使用 ",[34,167819,166579],{},[34,167821,166694],{}," 接收原函数的所有参数。",[146,167824,167826],{"id":167825},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,167828,123339],{},[158,167830,167831,167834,167837],{},[161,167832,167833],{},"给定一组学生数据。",[161,167835,167836],{},"封装函数，根据传入规则筛选学生。",[161,167838,167839],{},"筛选及格、优秀、未成年学生。",[14,167841,10107],{},[27,167843,167845],{"className":29,"code":167844,"language":31,"meta":32,"style":32},"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",[34,167846,167847,167855,167883,167911,167939,167943,167947,167951,167961,167969,167979,167986,167991,167997,168001,168005,168029,168052,168075,168079,168086,168093],{"__ignoreMap":32},[37,167848,167849,167851,167853],{"class":39,"line":40},[37,167850,159763],{"class":54},[37,167852,70],{"class":50},[37,167854,55515],{"class":54},[37,167856,167857,167859,167861,167863,167865,167867,167869,167871,167873,167875,167877,167879,167881],{"class":39,"line":47},[37,167858,148432],{"class":54},[37,167860,62747],{"class":309},[37,167862,51505],{"class":54},[37,167864,149935],{"class":309},[37,167866,12507],{"class":54},[37,167868,69192],{"class":309},[37,167870,51505],{"class":54},[37,167872,853],{"class":82},[37,167874,12507],{"class":54},[37,167876,151519],{"class":309},[37,167878,51505],{"class":54},[37,167880,1192],{"class":82},[37,167882,5002],{"class":54},[37,167884,167885,167887,167889,167891,167893,167895,167897,167899,167901,167903,167905,167907,167909],{"class":39,"line":58},[37,167886,148432],{"class":54},[37,167888,62747],{"class":309},[37,167890,51505],{"class":54},[37,167892,150983],{"class":309},[37,167894,12507],{"class":54},[37,167896,69192],{"class":309},[37,167898,51505],{"class":54},[37,167900,828],{"class":82},[37,167902,12507],{"class":54},[37,167904,151519],{"class":309},[37,167906,51505],{"class":54},[37,167908,1014],{"class":82},[37,167910,5002],{"class":54},[37,167912,167913,167915,167917,167919,167921,167923,167925,167927,167929,167931,167933,167935,167937],{"class":39,"line":64},[37,167914,148432],{"class":54},[37,167916,62747],{"class":309},[37,167918,51505],{"class":54},[37,167920,159778],{"class":309},[37,167922,12507],{"class":54},[37,167924,69192],{"class":309},[37,167926,51505],{"class":54},[37,167928,878],{"class":82},[37,167930,12507],{"class":54},[37,167932,151519],{"class":309},[37,167934,51505],{"class":54},[37,167936,1085],{"class":82},[37,167938,5002],{"class":54},[37,167940,167941],{"class":39,"line":76},[37,167942,33315],{"class":54},[37,167944,167945],{"class":39,"line":92},[37,167946,2472],{"emptyLinePlaceholder":131},[37,167948,167949],{"class":39,"line":97},[37,167950,2472],{"emptyLinePlaceholder":131},[37,167952,167953,167955,167958],{"class":39,"line":107},[37,167954,32017],{"class":50},[37,167956,167957],{"class":2035}," filter_students",[37,167959,167960],{"class":54},"(students, condition):\n",[37,167962,167963,167965,167967],{"class":39,"line":1390},[37,167964,161270],{"class":54},[37,167966,70],{"class":50},[37,167968,51906],{"class":54},[37,167970,167971,167973,167975,167977],{"class":39,"line":1402},[37,167972,3273],{"class":50},[37,167974,152184],{"class":54},[37,167976,26116],{"class":50},[37,167978,152189],{"class":54},[37,167980,167981,167983],{"class":39,"line":1684},[37,167982,2569],{"class":50},[37,167984,167985],{"class":54}," condition(student):\n",[37,167987,167988],{"class":39,"line":1689},[37,167989,167990],{"class":54},"            result.append(student)\n",[37,167992,167993,167995],{"class":39,"line":1695},[37,167994,4162],{"class":50},[37,167996,167752],{"class":54},[37,167998,167999],{"class":39,"line":1700},[37,168000,2472],{"emptyLinePlaceholder":131},[37,168002,168003],{"class":39,"line":1714},[37,168004,2472],{"emptyLinePlaceholder":131},[37,168006,168007,168009,168011,168014,168016,168019,168021,168023,168025,168027],{"class":39,"line":1719},[37,168008,165748],{"class":54},[37,168010,70],{"class":50},[37,168012,168013],{"class":54}," filter_students(students, ",[37,168015,166933],{"class":50},[37,168017,168018],{"class":54}," s: s[",[37,168020,151519],{"class":309},[37,168022,4515],{"class":54},[37,168024,1782],{"class":50},[37,168026,157884],{"class":82},[37,168028,214],{"class":54},[37,168030,168031,168034,168036,168038,168040,168042,168044,168046,168048,168050],{"class":39,"line":1725},[37,168032,168033],{"class":54},"excellent ",[37,168035,70],{"class":50},[37,168037,168013],{"class":54},[37,168039,166933],{"class":50},[37,168041,168018],{"class":54},[37,168043,151519],{"class":309},[37,168045,4515],{"class":54},[37,168047,1782],{"class":50},[37,168049,157835],{"class":82},[37,168051,214],{"class":54},[37,168053,168054,168057,168059,168061,168063,168065,168067,168069,168071,168073],{"class":39,"line":1746},[37,168055,168056],{"class":54},"under_age ",[37,168058,70],{"class":50},[37,168060,168013],{"class":54},[37,168062,166933],{"class":50},[37,168064,168018],{"class":54},[37,168066,69192],{"class":309},[37,168068,4515],{"class":54},[37,168070,1113],{"class":50},[37,168072,156332],{"class":82},[37,168074,214],{"class":54},[37,168076,168077],{"class":39,"line":1751},[37,168078,2472],{"emptyLinePlaceholder":131},[37,168080,168081,168083],{"class":39,"line":1765},[37,168082,30485],{"class":82},[37,168084,168085],{"class":54},"(passed)\n",[37,168087,168088,168090],{"class":39,"line":1770},[37,168089,30485],{"class":82},[37,168091,168092],{"class":54},"(excellent)\n",[37,168094,168095,168097],{"class":39,"line":1799},[37,168096,30485],{"class":82},[37,168098,168099],{"class":54},"(under_age)\n",[146,168101,168103],{"id":168102},"_715-易错点","7.15 易错点",[158,168105,168106,168109,168117,168122,168133],{},[161,168107,168108],{},"默认参数不要写可变对象。",[161,168110,168111,168113,168114,168116],{},[34,168112,166579],{}," 是元组，",[34,168115,166694],{}," 是字典。",[161,168118,168119,168121],{},[34,168120,166933],{}," 只适合简单表达式。",[161,168123,168124,101065,168126,168128,168129,168132],{},[34,168125,74112],{},[34,168127,80119],{}," 的结果是迭代器，常用 ",[34,168130,168131],{},"list()"," 转换查看。",[161,168134,168135],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[146,168137,168139],{"id":168138},"_716-本章练习","7.16 本章练习",[158,168141,168142,168149,168155,168160,168165],{},[161,168143,168144,168145,168148],{},"写函数 ",[34,168146,168147],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[161,168150,168144,168151,168154],{},[34,168152,168153],{},"print_user(**kwargs)","，输出用户所有字段。",[161,168156,104413,168157,168159],{},[34,168158,166933],{}," 对学生列表按年龄排序。",[161,168161,104413,168162,168164],{},[34,168163,80119],{}," 找出成绩不及格的学生。",[161,168166,168167],{},"写一个装饰器，统计函数执行前后的提示信息。",[123,168169,168170],{},"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":32,"searchDepth":47,"depth":47,"links":168172},[168173,168174,168175,168176,168177,168178,168182,168183,168184,168185,168190,168191,168192,168193,168194,168195],{"id":166031,"depth":47,"text":166032},{"id":166145,"depth":47,"text":166146},{"id":166234,"depth":47,"text":166235},{"id":166296,"depth":47,"text":166297},{"id":166442,"depth":47,"text":166443},{"id":166569,"depth":47,"text":166570,"children":168179},[168180,168181],{"id":166573,"depth":58,"text":166574},{"id":166688,"depth":58,"text":166689},{"id":166769,"depth":47,"text":166770},{"id":166927,"depth":47,"text":166928},{"id":167095,"depth":47,"text":167096},{"id":167177,"depth":47,"text":167178,"children":168186},[168187,168188,168189],{"id":167181,"depth":58,"text":167182},{"id":167252,"depth":58,"text":167253},{"id":167329,"depth":58,"text":167330},{"id":167454,"depth":47,"text":167455},{"id":167544,"depth":47,"text":167545},{"id":167675,"depth":47,"text":167676},{"id":167825,"depth":47,"text":167826},{"id":168102,"depth":47,"text":168103},{"id":168138,"depth":47,"text":168139},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166023,"description":128},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168202,"title":168203,"body":168204,"description":128,"extension":129,"meta":170723,"navigation":131,"path":170724,"seo":170725,"stem":170726,"__hash__":170727},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168205,"toc":170698},[168206,168209,168213,168216,168219,168250,168254,168258,168261,168288,168292,168295,168346,168349,168364,168367,168402,168406,168408,168432,168435,168495,168499,168503,168506,168563,168566,168586,168590,168593,168656,168660,168663,168719,168726,168750,168754,168757,168820,168824,168829,168880,168883,168887,168892,168959,168962,169044,169048,169053,169104,169107,169111,169114,169117,169125,169128,169174,169177,169223,169227,169233,169277,169280,169326,169329,169369,169372,169433,169437,169440,169530,169533,169675,169678,169745,169749,169752,169755,169896,169899,169977,169980,170156,170160,170162,170173,170175,170374,170378,170622,170626,170660,170664,170695],[10,168207,168203],{"id":168208},"_8-文件操作",[146,168210,168212],{"id":168211},"_81-文件操作的意义","8.1 文件操作的意义",[14,168214,168215],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168217,168218],{},"常见文件类型：",[158,168220,168221,168227,168233,168239,168245],{},[161,168222,168223,168226],{},[34,168224,168225],{},".txt","：普通文本。",[161,168228,168229,168232],{},[34,168230,168231],{},".csv","：表格文本。",[161,168234,168235,168238],{},[34,168236,168237],{},".json","：结构化数据。",[161,168240,168241,168244],{},[34,168242,168243],{},".log","：日志文件。",[161,168246,168247,168249],{},[34,168248,146399],{},"：Python 源代码。",[146,168251,168253],{"id":168252},"_82-路径","8.2 路径",[175,168255,168257],{"id":168256},"_821-相对路径","8.2.1 相对路径",[14,168259,168260],{},"相对当前运行目录：",[27,168262,168264],{"className":29,"code":168263,"language":31,"meta":32,"style":32},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[34,168265,168266],{"__ignoreMap":32},[37,168267,168268,168270,168272,168274,168276,168278,168280,168282,168284,168286],{"class":39,"line":40},[37,168269,86983],{"class":82},[37,168271,208],{"class":54},[37,168273,146843],{"class":309},[37,168275,12507],{"class":54},[37,168277,146848],{"class":309},[37,168279,12507],{"class":54},[37,168281,146853],{"class":5288},[37,168283,70],{"class":50},[37,168285,146858],{"class":309},[37,168287,214],{"class":54},[175,168289,168291],{"id":168290},"_822-绝对路径","8.2.2 绝对路径",[14,168293,168294],{},"从根目录或盘符开始：",[27,168296,168298],{"className":29,"code":168297,"language":31,"meta":32,"style":32},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[34,168299,168300,168323],{"__ignoreMap":32},[37,168301,168302,168304,168306,168309,168311,168313,168315,168317,168319,168321],{"class":39,"line":40},[37,168303,86983],{"class":82},[37,168305,208],{"class":54},[37,168307,168308],{"class":309},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[37,168310,12507],{"class":54},[37,168312,146848],{"class":309},[37,168314,12507],{"class":54},[37,168316,146853],{"class":5288},[37,168318,70],{"class":50},[37,168320,146858],{"class":309},[37,168322,214],{"class":54},[37,168324,168325,168327,168329,168332,168334,168336,168338,168340,168342,168344],{"class":39,"line":47},[37,168326,86983],{"class":82},[37,168328,208],{"class":54},[37,168330,168331],{"class":309},"\"D:\u002Fdata\u002Fdata.txt\"",[37,168333,12507],{"class":54},[37,168335,146848],{"class":309},[37,168337,12507],{"class":54},[37,168339,146853],{"class":5288},[37,168341,70],{"class":50},[37,168343,146858],{"class":309},[37,168345,214],{"class":54},[14,168347,168348],{},"Windows 路径建议写成：",[27,168350,168352],{"className":29,"code":168351,"language":31,"meta":32,"style":32},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[34,168353,168354],{"__ignoreMap":32},[37,168355,168356,168359,168361],{"class":39,"line":40},[37,168357,168358],{"class":54},"path ",[37,168360,70],{"class":50},[37,168362,168363],{"class":309}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168365,168366],{},"或原始字符串：",[27,168368,168370],{"className":29,"code":168369,"language":31,"meta":32,"style":32},"path = r\"D:\\data\\data.txt\"\n",[34,168371,168372],{"__ignoreMap":32},[37,168373,168374,168376,168378,168380,168382,168385,168388,168391,168393,168395,168397,168400],{"class":39,"line":40},[37,168375,168358],{"class":54},[37,168377,70],{"class":50},[37,168379,17193],{"class":50},[37,168381,456],{"class":309},[37,168383,168384],{"class":48045},"D:",[37,168386,168387],{"class":82},"\\d",[37,168389,168390],{"class":48045},"ata",[37,168392,168387],{"class":82},[37,168394,168390],{"class":48045},[37,168396,761],{"class":82},[37,168398,168399],{"class":48045},"txt",[37,168401,25206],{"class":309},[146,168403,168405],{"id":168404},"_83-open函数","8.3 open函数",[14,168407,5253],{},[27,168409,168411],{"className":29,"code":168410,"language":31,"meta":32,"style":32},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[34,168412,168413],{"__ignoreMap":32},[37,168414,168415,168417,168419,168421,168424,168426,168428,168430],{"class":39,"line":40},[37,168416,45423],{"class":5288},[37,168418,13636],{"class":50},[37,168420,146838],{"class":82},[37,168422,168423],{"class":54},"(文件路径, 打开模式, ",[37,168425,146853],{"class":5288},[37,168427,70],{"class":50},[37,168429,146858],{"class":309},[37,168431,214],{"class":54},[14,168433,168434],{},"常见模式：",[342,168436,168437,168446],{},[345,168438,168439],{},[348,168440,168441,168444],{},[351,168442,168443],{},"模式",[351,168445,25942],{},[389,168447,168448,168457,168466,168475,168485],{},[348,168449,168450,168454],{},[394,168451,168452],{},[34,168453,873],{},[394,168455,168456],{},"只读，文件不存在会报错",[348,168458,168459,168463],{},[394,168460,168461],{},[34,168462,998],{},[394,168464,168465],{},"只写，文件不存在会创建，存在会清空",[348,168467,168468,168472],{},[394,168469,168470],{},[34,168471,443],{},[394,168473,168474],{},"追加，文件不存在会创建",[348,168476,168477,168482],{},[394,168478,168479],{},[34,168480,168481],{},"rb",[394,168483,168484],{},"二进制只读",[348,168486,168487,168492],{},[394,168488,168489],{},[34,168490,168491],{},"wb",[394,168493,168494],{},"二进制只写",[146,168496,168498],{"id":168497},"_84-读取文件","8.4 读取文件",[175,168500,168502],{"id":168501},"_841-read","8.4.1 read",[14,168504,168505],{},"一次读取全部内容：",[27,168507,168509],{"className":29,"code":168508,"language":31,"meta":32,"style":32},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[34,168510,168511,168537,168549,168556],{"__ignoreMap":32},[37,168512,168513,168515,168517,168519,168521,168523,168525,168527,168529,168531,168533,168535],{"class":39,"line":40},[37,168514,45423],{"class":5288},[37,168516,13636],{"class":50},[37,168518,146838],{"class":82},[37,168520,208],{"class":54},[37,168522,146843],{"class":309},[37,168524,12507],{"class":54},[37,168526,146848],{"class":309},[37,168528,12507],{"class":54},[37,168530,146853],{"class":5288},[37,168532,70],{"class":50},[37,168534,146858],{"class":309},[37,168536,214],{"class":54},[37,168538,168539,168542,168544,168546],{"class":39,"line":47},[37,168540,168541],{"class":54},"content ",[37,168543,70],{"class":50},[37,168545,148200],{"class":5288},[37,168547,168548],{"class":54},".read()\n",[37,168550,168551,168553],{"class":39,"line":58},[37,168552,30485],{"class":82},[37,168554,168555],{"class":54},"(content)\n",[37,168557,168558,168560],{"class":39,"line":64},[37,168559,45423],{"class":5288},[37,168561,168562],{"class":54},".close()\n",[14,168564,168565],{},"可以指定读取字符数：",[27,168567,168569],{"className":29,"code":168568,"language":31,"meta":32,"style":32},"content = file.read(10)\n",[34,168570,168571],{"__ignoreMap":32},[37,168572,168573,168575,168577,168579,168582,168584],{"class":39,"line":40},[37,168574,168541],{"class":54},[37,168576,70],{"class":50},[37,168578,148200],{"class":5288},[37,168580,168581],{"class":54},".read(",[37,168583,650],{"class":82},[37,168585,214],{"class":54},[175,168587,168589],{"id":168588},"_842-readline","8.4.2 readline",[14,168591,168592],{},"一次读取一行：",[27,168594,168596],{"className":29,"code":168595,"language":31,"meta":32,"style":32},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[34,168597,168598,168624,168628,168639,168646,168650],{"__ignoreMap":32},[37,168599,168600,168602,168604,168606,168608,168610,168612,168614,168616,168618,168620,168622],{"class":39,"line":40},[37,168601,45423],{"class":5288},[37,168603,13636],{"class":50},[37,168605,146838],{"class":82},[37,168607,208],{"class":54},[37,168609,146843],{"class":309},[37,168611,12507],{"class":54},[37,168613,146848],{"class":309},[37,168615,12507],{"class":54},[37,168617,146853],{"class":5288},[37,168619,70],{"class":50},[37,168621,146858],{"class":309},[37,168623,214],{"class":54},[37,168625,168626],{"class":39,"line":47},[37,168627,2472],{"emptyLinePlaceholder":131},[37,168629,168630,168632,168634,168636],{"class":39,"line":58},[37,168631,147299],{"class":54},[37,168633,70],{"class":50},[37,168635,148200],{"class":5288},[37,168637,168638],{"class":54},".readline()\n",[37,168640,168641,168643],{"class":39,"line":64},[37,168642,30485],{"class":82},[37,168644,168645],{"class":54},"(line)\n",[37,168647,168648],{"class":39,"line":76},[37,168649,2472],{"emptyLinePlaceholder":131},[37,168651,168652,168654],{"class":39,"line":92},[37,168653,45423],{"class":5288},[37,168655,168562],{"class":54},[175,168657,168659],{"id":168658},"_843-readlines","8.4.3 readlines",[14,168661,168662],{},"读取所有行，返回列表：",[27,168664,168666],{"className":29,"code":168665,"language":31,"meta":32,"style":32},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[34,168667,168668,168694,168706,168713],{"__ignoreMap":32},[37,168669,168670,168672,168674,168676,168678,168680,168682,168684,168686,168688,168690,168692],{"class":39,"line":40},[37,168671,45423],{"class":5288},[37,168673,13636],{"class":50},[37,168675,146838],{"class":82},[37,168677,208],{"class":54},[37,168679,146843],{"class":309},[37,168681,12507],{"class":54},[37,168683,146848],{"class":309},[37,168685,12507],{"class":54},[37,168687,146853],{"class":5288},[37,168689,70],{"class":50},[37,168691,146858],{"class":309},[37,168693,214],{"class":54},[37,168695,168696,168699,168701,168703],{"class":39,"line":47},[37,168697,168698],{"class":54},"lines ",[37,168700,70],{"class":50},[37,168702,148200],{"class":5288},[37,168704,168705],{"class":54},".readlines()\n",[37,168707,168708,168710],{"class":39,"line":58},[37,168709,30485],{"class":82},[37,168711,168712],{"class":54},"(lines)\n",[37,168714,168715,168717],{"class":39,"line":64},[37,168716,45423],{"class":5288},[37,168718,168562],{"class":54},[14,168720,168721,168722,168725],{},"每一行通常带有换行符，可以用 ",[34,168723,168724],{},"strip()"," 去掉：",[27,168727,168729],{"className":29,"code":168728,"language":31,"meta":32,"style":32},"for line in lines:\n    print(line.strip())\n",[34,168730,168731,168743],{"__ignoreMap":32},[37,168732,168733,168735,168738,168740],{"class":39,"line":40},[37,168734,3097],{"class":50},[37,168736,168737],{"class":54}," line ",[37,168739,26116],{"class":50},[37,168741,168742],{"class":54}," lines:\n",[37,168744,168745,168747],{"class":39,"line":47},[37,168746,31369],{"class":82},[37,168748,168749],{"class":54},"(line.strip())\n",[175,168751,168753],{"id":168752},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,168755,168756],{},"推荐读取大文件时使用：",[27,168758,168760],{"className":29,"code":168759,"language":31,"meta":32,"style":32},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[34,168761,168762,168788,168792,168804,168810,168814],{"__ignoreMap":32},[37,168763,168764,168766,168768,168770,168772,168774,168776,168778,168780,168782,168784,168786],{"class":39,"line":40},[37,168765,45423],{"class":5288},[37,168767,13636],{"class":50},[37,168769,146838],{"class":82},[37,168771,208],{"class":54},[37,168773,146843],{"class":309},[37,168775,12507],{"class":54},[37,168777,146848],{"class":309},[37,168779,12507],{"class":54},[37,168781,146853],{"class":5288},[37,168783,70],{"class":50},[37,168785,146858],{"class":309},[37,168787,214],{"class":54},[37,168789,168790],{"class":39,"line":47},[37,168791,2472],{"emptyLinePlaceholder":131},[37,168793,168794,168796,168798,168800,168802],{"class":39,"line":58},[37,168795,3097],{"class":50},[37,168797,168737],{"class":54},[37,168799,26116],{"class":50},[37,168801,148200],{"class":5288},[37,168803,3811],{"class":54},[37,168805,168806,168808],{"class":39,"line":64},[37,168807,31369],{"class":82},[37,168809,168749],{"class":54},[37,168811,168812],{"class":39,"line":76},[37,168813,2472],{"emptyLinePlaceholder":131},[37,168815,168816,168818],{"class":39,"line":92},[37,168817,45423],{"class":5288},[37,168819,168562],{"class":54},[146,168821,168823],{"id":168822},"_85-with语句","8.5 with语句",[14,168825,168826,168828],{},[34,168827,107880],{}," 会自动关闭文件，推荐使用。",[27,168830,168832],{"className":29,"code":168831,"language":31,"meta":32,"style":32},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[34,168833,168834,168864,168874],{"__ignoreMap":32},[37,168835,168836,168838,168840,168842,168844,168846,168848,168850,168852,168854,168856,168858,168860,168862],{"class":39,"line":40},[37,168837,107880],{"class":50},[37,168839,146838],{"class":82},[37,168841,208],{"class":54},[37,168843,146843],{"class":309},[37,168845,12507],{"class":54},[37,168847,146848],{"class":309},[37,168849,12507],{"class":54},[37,168851,146853],{"class":5288},[37,168853,70],{"class":50},[37,168855,146858],{"class":309},[37,168857,13786],{"class":54},[37,168859,31453],{"class":50},[37,168861,148200],{"class":5288},[37,168863,3811],{"class":54},[37,168865,168866,168868,168870,168872],{"class":39,"line":47},[37,168867,146870],{"class":54},[37,168869,70],{"class":50},[37,168871,148200],{"class":5288},[37,168873,168548],{"class":54},[37,168875,168876,168878],{"class":39,"line":58},[37,168877,31369],{"class":82},[37,168879,168555],{"class":54},[14,168881,168882],{},"等价于打开文件、读取、最后关闭，但更安全。",[146,168884,168886],{"id":168885},"_86-写入文件","8.6 写入文件",[14,168888,168889,168891],{},[34,168890,998],{}," 模式会清空原文件。",[27,168893,168895],{"className":29,"code":168894,"language":31,"meta":32,"style":32},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[34,168896,168897,168927,168944],{"__ignoreMap":32},[37,168898,168899,168901,168903,168905,168907,168909,168911,168913,168915,168917,168919,168921,168923,168925],{"class":39,"line":40},[37,168900,107880],{"class":50},[37,168902,146838],{"class":82},[37,168904,208],{"class":54},[37,168906,146843],{"class":309},[37,168908,12507],{"class":54},[37,168910,152023],{"class":309},[37,168912,12507],{"class":54},[37,168914,146853],{"class":5288},[37,168916,70],{"class":50},[37,168918,146858],{"class":309},[37,168920,13786],{"class":54},[37,168922,31453],{"class":50},[37,168924,148200],{"class":5288},[37,168926,3811],{"class":54},[37,168928,168929,168932,168935,168938,168940,168942],{"class":39,"line":47},[37,168930,168931],{"class":5288},"    file",[37,168933,168934],{"class":54},".write(",[37,168936,168937],{"class":309},"\"hello",[37,168939,156572],{"class":82},[37,168941,456],{"class":309},[37,168943,214],{"class":54},[37,168945,168946,168948,168950,168953,168955,168957],{"class":39,"line":58},[37,168947,168931],{"class":5288},[37,168949,168934],{"class":54},[37,168951,168952],{"class":309},"\"python",[37,168954,156572],{"class":82},[37,168956,456],{"class":309},[37,168958,214],{"class":54},[14,168960,168961],{},"写入多行：",[27,168963,168965],{"className":29,"code":168964,"language":31,"meta":32,"style":32},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[34,168966,168967,169002,169006,169037],{"__ignoreMap":32},[37,168968,168969,168971,168973,168975,168978,168980,168982,168984,168987,168989,168991,168993,168996,168998,169000],{"class":39,"line":40},[37,168970,168698],{"class":54},[37,168972,70],{"class":50},[37,168974,52294],{"class":54},[37,168976,168977],{"class":309},"\"小明,18",[37,168979,156572],{"class":82},[37,168981,456],{"class":309},[37,168983,12507],{"class":54},[37,168985,168986],{"class":309},"\"小红,17",[37,168988,156572],{"class":82},[37,168990,456],{"class":309},[37,168992,12507],{"class":54},[37,168994,168995],{"class":309},"\"小刚,19",[37,168997,156572],{"class":82},[37,168999,456],{"class":309},[37,169001,33315],{"class":54},[37,169003,169004],{"class":39,"line":47},[37,169005,2472],{"emptyLinePlaceholder":131},[37,169007,169008,169010,169012,169014,169017,169019,169021,169023,169025,169027,169029,169031,169033,169035],{"class":39,"line":58},[37,169009,107880],{"class":50},[37,169011,146838],{"class":82},[37,169013,208],{"class":54},[37,169015,169016],{"class":309},"\"students.txt\"",[37,169018,12507],{"class":54},[37,169020,152023],{"class":309},[37,169022,12507],{"class":54},[37,169024,146853],{"class":5288},[37,169026,70],{"class":50},[37,169028,146858],{"class":309},[37,169030,13786],{"class":54},[37,169032,31453],{"class":50},[37,169034,148200],{"class":5288},[37,169036,3811],{"class":54},[37,169038,169039,169041],{"class":39,"line":64},[37,169040,168931],{"class":5288},[37,169042,169043],{"class":54},".writelines(lines)\n",[146,169045,169047],{"id":169046},"_87-追加文件","8.7 追加文件",[14,169049,169050,169052],{},[34,169051,443],{}," 模式不会清空原内容，而是在末尾追加。",[27,169054,169056],{"className":29,"code":169055,"language":31,"meta":32,"style":32},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[34,169057,169058,169089],{"__ignoreMap":32},[37,169059,169060,169062,169064,169066,169069,169071,169073,169075,169077,169079,169081,169083,169085,169087],{"class":39,"line":40},[37,169061,107880],{"class":50},[37,169063,146838],{"class":82},[37,169065,208],{"class":54},[37,169067,169068],{"class":309},"\"log.txt\"",[37,169070,12507],{"class":54},[37,169072,165372],{"class":309},[37,169074,12507],{"class":54},[37,169076,146853],{"class":5288},[37,169078,70],{"class":50},[37,169080,146858],{"class":309},[37,169082,13786],{"class":54},[37,169084,31453],{"class":50},[37,169086,148200],{"class":5288},[37,169088,3811],{"class":54},[37,169090,169091,169093,169095,169098,169100,169102],{"class":39,"line":47},[37,169092,168931],{"class":5288},[37,169094,168934],{"class":54},[37,169096,169097],{"class":309},"\"程序启动",[37,169099,156572],{"class":82},[37,169101,456],{"class":309},[37,169103,214],{"class":54},[14,169105,169106],{},"日志类文件常用追加模式。",[146,169108,169110],{"id":169109},"_88-文件编码","8.8 文件编码",[14,169112,169113],{},"编码决定文字如何保存为字节。",[14,169115,169116],{},"常见编码：",[158,169118,169119,169122],{},[161,169120,169121],{},"UTF-8：推荐。",[161,169123,169124],{},"GBK：部分 Windows 中文文件常见。",[14,169126,169127],{},"读取文件乱码时，可以尝试：",[27,169129,169131],{"className":29,"code":169130,"language":31,"meta":32,"style":32},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[34,169132,169133,169164],{"__ignoreMap":32},[37,169134,169135,169137,169139,169141,169143,169145,169147,169149,169151,169153,169156,169158,169160,169162],{"class":39,"line":40},[37,169136,107880],{"class":50},[37,169138,146838],{"class":82},[37,169140,208],{"class":54},[37,169142,146843],{"class":309},[37,169144,12507],{"class":54},[37,169146,146848],{"class":309},[37,169148,12507],{"class":54},[37,169150,146853],{"class":5288},[37,169152,70],{"class":50},[37,169154,169155],{"class":309},"\"gbk\"",[37,169157,13786],{"class":54},[37,169159,31453],{"class":50},[37,169161,148200],{"class":5288},[37,169163,3811],{"class":54},[37,169165,169166,169168,169170,169172],{"class":39,"line":47},[37,169167,146870],{"class":54},[37,169169,70],{"class":50},[37,169171,148200],{"class":5288},[37,169173,168548],{"class":54},[14,169175,169176],{},"写文件时建议统一 UTF-8：",[27,169178,169180],{"className":29,"code":169179,"language":31,"meta":32,"style":32},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[34,169181,169182,169212],{"__ignoreMap":32},[37,169183,169184,169186,169188,169190,169192,169194,169196,169198,169200,169202,169204,169206,169208,169210],{"class":39,"line":40},[37,169185,107880],{"class":50},[37,169187,146838],{"class":82},[37,169189,208],{"class":54},[37,169191,146843],{"class":309},[37,169193,12507],{"class":54},[37,169195,152023],{"class":309},[37,169197,12507],{"class":54},[37,169199,146853],{"class":5288},[37,169201,70],{"class":50},[37,169203,146858],{"class":309},[37,169205,13786],{"class":54},[37,169207,31453],{"class":50},[37,169209,148200],{"class":5288},[37,169211,3811],{"class":54},[37,169213,169214,169216,169218,169221],{"class":39,"line":47},[37,169215,168931],{"class":5288},[37,169217,168934],{"class":54},[37,169219,169220],{"class":309},"\"中文内容\"",[37,169222,214],{"class":54},[146,169224,169226],{"id":169225},"_89-pathlib","8.9 pathlib",[14,169228,169229,169232],{},[34,169230,169231],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[27,169234,169236],{"className":29,"code":169235,"language":31,"meta":32,"style":32},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[34,169237,169238,169248,169252,169270],{"__ignoreMap":32},[37,169239,169240,169242,169244,169246],{"class":39,"line":40},[37,169241,30807],{"class":50},[37,169243,108358],{"class":54},[37,169245,51],{"class":50},[37,169247,108363],{"class":54},[37,169249,169250],{"class":39,"line":47},[37,169251,2472],{"emptyLinePlaceholder":131},[37,169253,169254,169256,169258,169260,169263,169265,169267],{"class":39,"line":58},[37,169255,168358],{"class":54},[37,169257,70],{"class":50},[37,169259,108592],{"class":54},[37,169261,169262],{"class":309},"\"data\"",[37,169264,13786],{"class":54},[37,169266,787],{"class":50},[37,169268,169269],{"class":309}," \"students.txt\"\n",[37,169271,169272,169274],{"class":39,"line":64},[37,169273,30485],{"class":82},[37,169275,169276],{"class":54},"(path)\n",[14,169278,169279],{},"创建目录：",[27,169281,169283],{"className":29,"code":169282,"language":31,"meta":32,"style":32},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[34,169284,169285,169295,169299,169312],{"__ignoreMap":32},[37,169286,169287,169289,169291,169293],{"class":39,"line":40},[37,169288,30807],{"class":50},[37,169290,108358],{"class":54},[37,169292,51],{"class":50},[37,169294,108363],{"class":54},[37,169296,169297],{"class":39,"line":47},[37,169298,2472],{"emptyLinePlaceholder":131},[37,169300,169301,169304,169306,169308,169310],{"class":39,"line":58},[37,169302,169303],{"class":54},"data_dir ",[37,169305,70],{"class":50},[37,169307,108592],{"class":54},[37,169309,169262],{"class":309},[37,169311,214],{"class":54},[37,169313,169314,169317,169320,169322,169324],{"class":39,"line":64},[37,169315,169316],{"class":54},"data_dir.mkdir(",[37,169318,169319],{"class":5288},"exist_ok",[37,169321,70],{"class":50},[37,169323,31546],{"class":82},[37,169325,214],{"class":54},[14,169327,169328],{},"判断文件是否存在：",[27,169330,169332],{"className":29,"code":169331,"language":31,"meta":32,"style":32},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[34,169333,169334,169347,169351,169358],{"__ignoreMap":32},[37,169335,169336,169338,169340,169342,169345],{"class":39,"line":40},[37,169337,168358],{"class":54},[37,169339,70],{"class":50},[37,169341,108592],{"class":54},[37,169343,169344],{"class":309},"\"data\u002Fstudents.txt\"",[37,169346,214],{"class":54},[37,169348,169349],{"class":39,"line":47},[37,169350,2472],{"emptyLinePlaceholder":131},[37,169352,169353,169355],{"class":39,"line":58},[37,169354,1603],{"class":50},[37,169356,169357],{"class":54}," path.exists():\n",[37,169359,169360,169362,169364,169367],{"class":39,"line":64},[37,169361,31369],{"class":82},[37,169363,208],{"class":54},[37,169365,169366],{"class":309},"\"文件存在\"",[37,169368,214],{"class":54},[14,169370,169371],{},"读写文本：",[27,169373,169375],{"className":29,"code":169374,"language":31,"meta":32,"style":32},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[34,169376,169377,169389,169393,169410,169427],{"__ignoreMap":32},[37,169378,169379,169381,169383,169385,169387],{"class":39,"line":40},[37,169380,168358],{"class":54},[37,169382,70],{"class":50},[37,169384,108592],{"class":54},[37,169386,146843],{"class":309},[37,169388,214],{"class":54},[37,169390,169391],{"class":39,"line":47},[37,169392,2472],{"emptyLinePlaceholder":131},[37,169394,169395,169398,169400,169402,169404,169406,169408],{"class":39,"line":58},[37,169396,169397],{"class":54},"path.write_text(",[37,169399,145923],{"class":309},[37,169401,12507],{"class":54},[37,169403,146853],{"class":5288},[37,169405,70],{"class":50},[37,169407,146858],{"class":309},[37,169409,214],{"class":54},[37,169411,169412,169414,169416,169419,169421,169423,169425],{"class":39,"line":64},[37,169413,168541],{"class":54},[37,169415,70],{"class":50},[37,169417,169418],{"class":54}," path.read_text(",[37,169420,146853],{"class":5288},[37,169422,70],{"class":50},[37,169424,146858],{"class":309},[37,169426,214],{"class":54},[37,169428,169429,169431],{"class":39,"line":76},[37,169430,30485],{"class":82},[37,169432,168555],{"class":54},[146,169434,169436],{"id":169435},"_810-json文件","8.10 JSON文件",[14,169438,169439],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[27,169441,169443],{"className":29,"code":169442,"language":31,"meta":32,"style":32},"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",[34,169444,169445,169451,169455,169463,169473,169483,169491,169495,169499,169524],{"__ignoreMap":32},[37,169446,169447,169449],{"class":39,"line":40},[37,169448,51],{"class":50},[37,169450,147138],{"class":54},[37,169452,169453],{"class":39,"line":47},[37,169454,2472],{"emptyLinePlaceholder":131},[37,169456,169457,169459,169461],{"class":39,"line":58},[37,169458,149528],{"class":54},[37,169460,70],{"class":50},[37,169462,15644],{"class":54},[37,169464,169465,169467,169469,169471],{"class":39,"line":64},[37,169466,147067],{"class":309},[37,169468,51505],{"class":54},[37,169470,149935],{"class":309},[37,169472,31536],{"class":54},[37,169474,169475,169477,169479,169481],{"class":39,"line":76},[37,169476,164584],{"class":309},[37,169478,51505],{"class":54},[37,169480,853],{"class":82},[37,169482,31536],{"class":54},[37,169484,169485,169487,169489],{"class":39,"line":92},[37,169486,164595],{"class":309},[37,169488,51505],{"class":54},[37,169490,164600],{"class":82},[37,169492,169493],{"class":39,"line":97},[37,169494,1637],{"class":54},[37,169496,169497],{"class":39,"line":107},[37,169498,2472],{"emptyLinePlaceholder":131},[37,169500,169501,169503,169505,169508,169510,169512,169514,169516,169518,169520,169522],{"class":39,"line":1390},[37,169502,156491],{"class":54},[37,169504,70],{"class":50},[37,169506,169507],{"class":54}," json.dumps(student, ",[37,169509,147184],{"class":5288},[37,169511,70],{"class":50},[37,169513,34056],{"class":82},[37,169515,12507],{"class":54},[37,169517,152059],{"class":5288},[37,169519,70],{"class":50},[37,169521,282],{"class":82},[37,169523,214],{"class":54},[37,169525,169526,169528],{"class":39,"line":1402},[37,169527,30485],{"class":82},[37,169529,164118],{"class":54},[14,169531,169532],{},"写入 JSON 文件：",[27,169534,169536],{"className":29,"code":169535,"language":31,"meta":32,"style":32},"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",[34,169537,169538,169544,169548,169556,169584,169612,169616,169620,169650],{"__ignoreMap":32},[37,169539,169540,169542],{"class":39,"line":40},[37,169541,51],{"class":50},[37,169543,147138],{"class":54},[37,169545,169546],{"class":39,"line":47},[37,169547,2472],{"emptyLinePlaceholder":131},[37,169549,169550,169552,169554],{"class":39,"line":58},[37,169551,159763],{"class":54},[37,169553,70],{"class":50},[37,169555,55515],{"class":54},[37,169557,169558,169560,169562,169564,169566,169568,169570,169572,169574,169576,169578,169580,169582],{"class":39,"line":64},[37,169559,148432],{"class":54},[37,169561,62747],{"class":309},[37,169563,51505],{"class":54},[37,169565,149935],{"class":309},[37,169567,12507],{"class":54},[37,169569,69192],{"class":309},[37,169571,51505],{"class":54},[37,169573,853],{"class":82},[37,169575,12507],{"class":54},[37,169577,151519],{"class":309},[37,169579,51505],{"class":54},[37,169581,1192],{"class":82},[37,169583,5002],{"class":54},[37,169585,169586,169588,169590,169592,169594,169596,169598,169600,169602,169604,169606,169608,169610],{"class":39,"line":76},[37,169587,148432],{"class":54},[37,169589,62747],{"class":309},[37,169591,51505],{"class":54},[37,169593,150983],{"class":309},[37,169595,12507],{"class":54},[37,169597,69192],{"class":309},[37,169599,51505],{"class":54},[37,169601,828],{"class":82},[37,169603,12507],{"class":54},[37,169605,151519],{"class":309},[37,169607,51505],{"class":54},[37,169609,1014],{"class":82},[37,169611,5002],{"class":54},[37,169613,169614],{"class":39,"line":92},[37,169615,33315],{"class":54},[37,169617,169618],{"class":39,"line":97},[37,169619,2472],{"emptyLinePlaceholder":131},[37,169621,169622,169624,169626,169628,169630,169632,169634,169636,169638,169640,169642,169644,169646,169648],{"class":39,"line":107},[37,169623,107880],{"class":50},[37,169625,146838],{"class":82},[37,169627,208],{"class":54},[37,169629,151878],{"class":309},[37,169631,12507],{"class":54},[37,169633,152023],{"class":309},[37,169635,12507],{"class":54},[37,169637,146853],{"class":5288},[37,169639,70],{"class":50},[37,169641,146858],{"class":309},[37,169643,13786],{"class":54},[37,169645,31453],{"class":50},[37,169647,148200],{"class":5288},[37,169649,3811],{"class":54},[37,169651,169652,169655,169657,169659,169661,169663,169665,169667,169669,169671,169673],{"class":39,"line":1390},[37,169653,169654],{"class":54},"    json.dump(students, ",[37,169656,45423],{"class":5288},[37,169658,12507],{"class":54},[37,169660,147184],{"class":5288},[37,169662,70],{"class":50},[37,169664,34056],{"class":82},[37,169666,12507],{"class":54},[37,169668,152059],{"class":5288},[37,169670,70],{"class":50},[37,169672,282],{"class":82},[37,169674,214],{"class":54},[14,169676,169677],{},"读取 JSON 文件：",[27,169679,169681],{"className":29,"code":169680,"language":31,"meta":32,"style":32},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[34,169682,169683,169689,169693,169723,169735,169739],{"__ignoreMap":32},[37,169684,169685,169687],{"class":39,"line":40},[37,169686,51],{"class":50},[37,169688,147138],{"class":54},[37,169690,169691],{"class":39,"line":47},[37,169692,2472],{"emptyLinePlaceholder":131},[37,169694,169695,169697,169699,169701,169703,169705,169707,169709,169711,169713,169715,169717,169719,169721],{"class":39,"line":58},[37,169696,107880],{"class":50},[37,169698,146838],{"class":82},[37,169700,208],{"class":54},[37,169702,151878],{"class":309},[37,169704,12507],{"class":54},[37,169706,146848],{"class":309},[37,169708,12507],{"class":54},[37,169710,146853],{"class":5288},[37,169712,70],{"class":50},[37,169714,146858],{"class":309},[37,169716,13786],{"class":54},[37,169718,31453],{"class":50},[37,169720,148200],{"class":5288},[37,169722,3811],{"class":54},[37,169724,169725,169727,169729,169731,169733],{"class":39,"line":64},[37,169726,153084],{"class":54},[37,169728,70],{"class":50},[37,169730,148211],{"class":54},[37,169732,45423],{"class":5288},[37,169734,214],{"class":54},[37,169736,169737],{"class":39,"line":76},[37,169738,2472],{"emptyLinePlaceholder":131},[37,169740,169741,169743],{"class":39,"line":92},[37,169742,30485],{"class":82},[37,169744,165042],{"class":54},[146,169746,169748],{"id":169747},"_811-csv文件","8.11 CSV文件",[14,169750,169751],{},"CSV 是逗号分隔值，常用于表格数据。",[14,169753,169754],{},"写入 CSV：",[27,169756,169758],{"className":29,"code":169757,"language":31,"meta":32,"style":32},"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",[34,169759,169760,169767,169771,169779,169797,169813,169829,169833,169837,169877,169891],{"__ignoreMap":32},[37,169761,169762,169764],{"class":39,"line":40},[37,169763,51],{"class":50},[37,169765,169766],{"class":54}," csv\n",[37,169768,169769],{"class":39,"line":47},[37,169770,2472],{"emptyLinePlaceholder":131},[37,169772,169773,169775,169777],{"class":39,"line":58},[37,169774,159763],{"class":54},[37,169776,70],{"class":50},[37,169778,55515],{"class":54},[37,169780,169781,169784,169786,169788,169790,169792,169795],{"class":39,"line":64},[37,169782,169783],{"class":54},"    [",[37,169785,73167],{"class":309},[37,169787,12507],{"class":54},[37,169789,73200],{"class":309},[37,169791,12507],{"class":54},[37,169793,169794],{"class":309},"\"成绩\"",[37,169796,87904],{"class":54},[37,169798,169799,169801,169803,169805,169807,169809,169811],{"class":39,"line":76},[37,169800,169783],{"class":54},[37,169802,149935],{"class":309},[37,169804,12507],{"class":54},[37,169806,853],{"class":82},[37,169808,12507],{"class":54},[37,169810,1192],{"class":82},[37,169812,87904],{"class":54},[37,169814,169815,169817,169819,169821,169823,169825,169827],{"class":39,"line":92},[37,169816,169783],{"class":54},[37,169818,150983],{"class":309},[37,169820,12507],{"class":54},[37,169822,828],{"class":82},[37,169824,12507],{"class":54},[37,169826,1014],{"class":82},[37,169828,87904],{"class":54},[37,169830,169831],{"class":39,"line":97},[37,169832,33315],{"class":54},[37,169834,169835],{"class":39,"line":107},[37,169836,2472],{"emptyLinePlaceholder":131},[37,169838,169839,169841,169843,169845,169848,169850,169852,169854,169856,169858,169860,169862,169865,169867,169869,169871,169873,169875],{"class":39,"line":1390},[37,169840,107880],{"class":50},[37,169842,146838],{"class":82},[37,169844,208],{"class":54},[37,169846,169847],{"class":309},"\"students.csv\"",[37,169849,12507],{"class":54},[37,169851,152023],{"class":309},[37,169853,12507],{"class":54},[37,169855,146853],{"class":5288},[37,169857,70],{"class":50},[37,169859,146858],{"class":309},[37,169861,12507],{"class":54},[37,169863,169864],{"class":5288},"newline",[37,169866,70],{"class":50},[37,169868,7724],{"class":309},[37,169870,13786],{"class":54},[37,169872,31453],{"class":50},[37,169874,148200],{"class":5288},[37,169876,3811],{"class":54},[37,169878,169879,169882,169884,169887,169889],{"class":39,"line":1402},[37,169880,169881],{"class":54},"    writer ",[37,169883,70],{"class":50},[37,169885,169886],{"class":54}," csv.writer(",[37,169888,45423],{"class":5288},[37,169890,214],{"class":54},[37,169892,169893],{"class":39,"line":1684},[37,169894,169895],{"class":54},"    writer.writerows(students)\n",[14,169897,169898],{},"读取 CSV：",[27,169900,169902],{"className":29,"code":169901,"language":31,"meta":32,"style":32},"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",[34,169903,169904,169910,169914,169944,169958,169970],{"__ignoreMap":32},[37,169905,169906,169908],{"class":39,"line":40},[37,169907,51],{"class":50},[37,169909,169766],{"class":54},[37,169911,169912],{"class":39,"line":47},[37,169913,2472],{"emptyLinePlaceholder":131},[37,169915,169916,169918,169920,169922,169924,169926,169928,169930,169932,169934,169936,169938,169940,169942],{"class":39,"line":58},[37,169917,107880],{"class":50},[37,169919,146838],{"class":82},[37,169921,208],{"class":54},[37,169923,169847],{"class":309},[37,169925,12507],{"class":54},[37,169927,146848],{"class":309},[37,169929,12507],{"class":54},[37,169931,146853],{"class":5288},[37,169933,70],{"class":50},[37,169935,146858],{"class":309},[37,169937,13786],{"class":54},[37,169939,31453],{"class":50},[37,169941,148200],{"class":5288},[37,169943,3811],{"class":54},[37,169945,169946,169949,169951,169954,169956],{"class":39,"line":64},[37,169947,169948],{"class":54},"    reader ",[37,169950,70],{"class":50},[37,169952,169953],{"class":54}," csv.reader(",[37,169955,45423],{"class":5288},[37,169957,214],{"class":54},[37,169959,169960,169962,169965,169967],{"class":39,"line":76},[37,169961,3273],{"class":50},[37,169963,169964],{"class":54}," row ",[37,169966,26116],{"class":50},[37,169968,169969],{"class":54}," reader:\n",[37,169971,169972,169974],{"class":39,"line":92},[37,169973,32520],{"class":82},[37,169975,169976],{"class":54},"(row)\n",[14,169978,169979],{},"使用字典写入：",[27,169981,169983],{"className":29,"code":169982,"language":31,"meta":32,"style":32},"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",[34,169984,169985,169991,169995,170003,170031,170059,170063,170067,170105,170126,170147,170152],{"__ignoreMap":32},[37,169986,169987,169989],{"class":39,"line":40},[37,169988,51],{"class":50},[37,169990,169766],{"class":54},[37,169992,169993],{"class":39,"line":47},[37,169994,2472],{"emptyLinePlaceholder":131},[37,169996,169997,169999,170001],{"class":39,"line":58},[37,169998,159763],{"class":54},[37,170000,70],{"class":50},[37,170002,55515],{"class":54},[37,170004,170005,170007,170009,170011,170013,170015,170017,170019,170021,170023,170025,170027,170029],{"class":39,"line":64},[37,170006,148432],{"class":54},[37,170008,62747],{"class":309},[37,170010,51505],{"class":54},[37,170012,149935],{"class":309},[37,170014,12507],{"class":54},[37,170016,69192],{"class":309},[37,170018,51505],{"class":54},[37,170020,853],{"class":82},[37,170022,12507],{"class":54},[37,170024,151519],{"class":309},[37,170026,51505],{"class":54},[37,170028,1192],{"class":82},[37,170030,5002],{"class":54},[37,170032,170033,170035,170037,170039,170041,170043,170045,170047,170049,170051,170053,170055,170057],{"class":39,"line":76},[37,170034,148432],{"class":54},[37,170036,62747],{"class":309},[37,170038,51505],{"class":54},[37,170040,150983],{"class":309},[37,170042,12507],{"class":54},[37,170044,69192],{"class":309},[37,170046,51505],{"class":54},[37,170048,828],{"class":82},[37,170050,12507],{"class":54},[37,170052,151519],{"class":309},[37,170054,51505],{"class":54},[37,170056,1014],{"class":82},[37,170058,5002],{"class":54},[37,170060,170061],{"class":39,"line":92},[37,170062,33315],{"class":54},[37,170064,170065],{"class":39,"line":97},[37,170066,2472],{"emptyLinePlaceholder":131},[37,170068,170069,170071,170073,170075,170077,170079,170081,170083,170085,170087,170089,170091,170093,170095,170097,170099,170101,170103],{"class":39,"line":107},[37,170070,107880],{"class":50},[37,170072,146838],{"class":82},[37,170074,208],{"class":54},[37,170076,169847],{"class":309},[37,170078,12507],{"class":54},[37,170080,152023],{"class":309},[37,170082,12507],{"class":54},[37,170084,146853],{"class":5288},[37,170086,70],{"class":50},[37,170088,146858],{"class":309},[37,170090,12507],{"class":54},[37,170092,169864],{"class":5288},[37,170094,70],{"class":50},[37,170096,7724],{"class":309},[37,170098,13786],{"class":54},[37,170100,31453],{"class":50},[37,170102,148200],{"class":5288},[37,170104,3811],{"class":54},[37,170106,170107,170110,170112,170114,170116,170118,170120,170122,170124],{"class":39,"line":1390},[37,170108,170109],{"class":54},"    fieldnames ",[37,170111,70],{"class":50},[37,170113,52294],{"class":54},[37,170115,62747],{"class":309},[37,170117,12507],{"class":54},[37,170119,69192],{"class":309},[37,170121,12507],{"class":54},[37,170123,151519],{"class":309},[37,170125,33315],{"class":54},[37,170127,170128,170130,170132,170135,170137,170139,170142,170144],{"class":39,"line":1402},[37,170129,169881],{"class":54},[37,170131,70],{"class":50},[37,170133,170134],{"class":54}," csv.DictWriter(",[37,170136,45423],{"class":5288},[37,170138,12507],{"class":54},[37,170140,170141],{"class":5288},"fieldnames",[37,170143,70],{"class":50},[37,170145,170146],{"class":54},"fieldnames)\n",[37,170148,170149],{"class":39,"line":1684},[37,170150,170151],{"class":54},"    writer.writeheader()\n",[37,170153,170154],{"class":39,"line":1689},[37,170155,169895],{"class":54},[146,170157,170159],{"id":170158},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170161,123339],{},[158,170163,170164,170167,170170],{},[161,170165,170166],{},"读取文本文件。",[161,170168,170169],{},"统计每个单词出现次数。",[161,170171,170172],{},"输出出现次数最多的前 10 个单词。",[14,170174,10107],{},[27,170176,170178],{"className":29,"code":170177,"language":31,"meta":32,"style":32},"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",[34,170179,170180,170190,170194,170207,170223,170227,170237,170246,170250,170262,170282,170291,170295,170313,170317,170347,170351,170367],{"__ignoreMap":32},[37,170181,170182,170184,170186,170188],{"class":39,"line":40},[37,170183,30807],{"class":50},[37,170185,108358],{"class":54},[37,170187,51],{"class":50},[37,170189,108363],{"class":54},[37,170191,170192],{"class":39,"line":47},[37,170193,2472],{"emptyLinePlaceholder":131},[37,170195,170196,170198,170200,170202,170205],{"class":39,"line":58},[37,170197,168358],{"class":54},[37,170199,70],{"class":50},[37,170201,108592],{"class":54},[37,170203,170204],{"class":309},"\"article.txt\"",[37,170206,214],{"class":54},[37,170208,170209,170211,170213,170215,170217,170219,170221],{"class":39,"line":64},[37,170210,168541],{"class":54},[37,170212,70],{"class":50},[37,170214,169418],{"class":54},[37,170216,146853],{"class":5288},[37,170218,70],{"class":50},[37,170220,146858],{"class":309},[37,170222,214],{"class":54},[37,170224,170225],{"class":39,"line":76},[37,170226,2472],{"emptyLinePlaceholder":131},[37,170228,170229,170232,170234],{"class":39,"line":92},[37,170230,170231],{"class":54},"words ",[37,170233,70],{"class":50},[37,170235,170236],{"class":54}," content.lower().split()\n",[37,170238,170239,170242,170244],{"class":39,"line":97},[37,170240,170241],{"class":54},"counter ",[37,170243,70],{"class":50},[37,170245,87936],{"class":54},[37,170247,170248],{"class":39,"line":107},[37,170249,2472],{"emptyLinePlaceholder":131},[37,170251,170252,170254,170257,170259],{"class":39,"line":1390},[37,170253,3097],{"class":50},[37,170255,170256],{"class":54}," word ",[37,170258,26116],{"class":50},[37,170260,170261],{"class":54}," words:\n",[37,170263,170264,170267,170269,170272,170275,170277,170280],{"class":39,"line":1402},[37,170265,170266],{"class":54},"    word ",[37,170268,70],{"class":50},[37,170270,170271],{"class":54}," word.strip(",[37,170273,170274],{"class":309},"\".,!?;:",[37,170276,156542],{"class":82},[37,170278,170279],{"class":309},"'()[]\"",[37,170281,214],{"class":54},[37,170283,170284,170286,170288],{"class":39,"line":1684},[37,170285,3173],{"class":50},[37,170287,38999],{"class":50},[37,170289,170290],{"class":54}," word:\n",[37,170292,170293],{"class":39,"line":1689},[37,170294,148559],{"class":50},[37,170296,170297,170300,170302,170305,170307,170309,170311],{"class":39,"line":1695},[37,170298,170299],{"class":54},"    counter[word] ",[37,170301,70],{"class":50},[37,170303,170304],{"class":54}," counter.get(word, ",[37,170306,396],{"class":82},[37,170308,13786],{"class":54},[37,170310,685],{"class":50},[37,170312,55767],{"class":82},[37,170314,170315],{"class":39,"line":1700},[37,170316,2472],{"emptyLinePlaceholder":131},[37,170318,170319,170322,170324,170326,170329,170331,170333,170335,170337,170339,170341,170343,170345],{"class":39,"line":1714},[37,170320,170321],{"class":54},"items ",[37,170323,70],{"class":50},[37,170325,163651],{"class":82},[37,170327,170328],{"class":54},"(counter.items(), ",[37,170330,153993],{"class":5288},[37,170332,153996],{"class":50},[37,170334,153999],{"class":54},[37,170336,422],{"class":82},[37,170338,112249],{"class":54},[37,170340,163575],{"class":5288},[37,170342,70],{"class":50},[37,170344,31546],{"class":82},[37,170346,214],{"class":54},[37,170348,170349],{"class":39,"line":1719},[37,170350,2472],{"emptyLinePlaceholder":131},[37,170352,170353,170355,170358,170360,170363,170365],{"class":39,"line":1725},[37,170354,3097],{"class":50},[37,170356,170357],{"class":54}," word, count ",[37,170359,26116],{"class":50},[37,170361,170362],{"class":54}," items[:",[37,170364,650],{"class":82},[37,170366,165802],{"class":54},[37,170368,170369,170371],{"class":39,"line":1746},[37,170370,31369],{"class":82},[37,170372,170373],{"class":54},"(word, count)\n",[146,170375,170377],{"id":170376},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[27,170379,170381],{"className":29,"code":170380,"language":31,"meta":32,"style":32},"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",[34,170382,170383,170389,170399,170403,170415,170419,170423,170431,170441,170447,170451,170481,170491,170495,170499,170507,170537,170561,170565,170569,170577,170606,170611],{"__ignoreMap":32},[37,170384,170385,170387],{"class":39,"line":40},[37,170386,51],{"class":50},[37,170388,147138],{"class":54},[37,170390,170391,170393,170395,170397],{"class":39,"line":47},[37,170392,30807],{"class":50},[37,170394,108358],{"class":54},[37,170396,51],{"class":50},[37,170398,108363],{"class":54},[37,170400,170401],{"class":39,"line":58},[37,170402,2472],{"emptyLinePlaceholder":131},[37,170404,170405,170407,170409,170411,170413],{"class":39,"line":64},[37,170406,151871],{"class":82},[37,170408,13636],{"class":50},[37,170410,108592],{"class":54},[37,170412,151878],{"class":309},[37,170414,214],{"class":54},[37,170416,170417],{"class":39,"line":76},[37,170418,2472],{"emptyLinePlaceholder":131},[37,170420,170421],{"class":39,"line":92},[37,170422,2472],{"emptyLinePlaceholder":131},[37,170424,170425,170427,170429],{"class":39,"line":97},[37,170426,32017],{"class":50},[37,170428,151895],{"class":2035},[37,170430,32023],{"class":54},[37,170432,170433,170435,170437,170439],{"class":39,"line":107},[37,170434,3173],{"class":50},[37,170436,38999],{"class":50},[37,170438,151906],{"class":82},[37,170440,151909],{"class":54},[37,170442,170443,170445],{"class":39,"line":1390},[37,170444,14824],{"class":50},[37,170446,51906],{"class":54},[37,170448,170449],{"class":39,"line":1402},[37,170450,2472],{"emptyLinePlaceholder":131},[37,170452,170453,170455,170457,170459,170461,170463,170465,170467,170469,170471,170473,170475,170477,170479],{"class":39,"line":1684},[37,170454,34247],{"class":50},[37,170456,146838],{"class":82},[37,170458,208],{"class":54},[37,170460,151871],{"class":82},[37,170462,12507],{"class":54},[37,170464,146848],{"class":309},[37,170466,12507],{"class":54},[37,170468,146853],{"class":5288},[37,170470,70],{"class":50},[37,170472,146858],{"class":309},[37,170474,13786],{"class":54},[37,170476,31453],{"class":50},[37,170478,148200],{"class":5288},[37,170480,3811],{"class":54},[37,170482,170483,170485,170487,170489],{"class":39,"line":1689},[37,170484,14824],{"class":50},[37,170486,148211],{"class":54},[37,170488,45423],{"class":5288},[37,170490,214],{"class":54},[37,170492,170493],{"class":39,"line":1695},[37,170494,2472],{"emptyLinePlaceholder":131},[37,170496,170497],{"class":39,"line":1700},[37,170498,2472],{"emptyLinePlaceholder":131},[37,170500,170501,170503,170505],{"class":39,"line":1714},[37,170502,32017],{"class":50},[37,170504,152005],{"class":2035},[37,170506,152008],{"class":54},[37,170508,170509,170511,170513,170515,170517,170519,170521,170523,170525,170527,170529,170531,170533,170535],{"class":39,"line":1719},[37,170510,34247],{"class":50},[37,170512,146838],{"class":82},[37,170514,208],{"class":54},[37,170516,151871],{"class":82},[37,170518,12507],{"class":54},[37,170520,152023],{"class":309},[37,170522,12507],{"class":54},[37,170524,146853],{"class":5288},[37,170526,70],{"class":50},[37,170528,146858],{"class":309},[37,170530,13786],{"class":54},[37,170532,31453],{"class":50},[37,170534,148200],{"class":5288},[37,170536,3811],{"class":54},[37,170538,170539,170541,170543,170545,170547,170549,170551,170553,170555,170557,170559],{"class":39,"line":1725},[37,170540,152044],{"class":54},[37,170542,45423],{"class":5288},[37,170544,12507],{"class":54},[37,170546,147184],{"class":5288},[37,170548,70],{"class":50},[37,170550,34056],{"class":82},[37,170552,12507],{"class":54},[37,170554,152059],{"class":5288},[37,170556,70],{"class":50},[37,170558,282],{"class":82},[37,170560,214],{"class":54},[37,170562,170563],{"class":39,"line":1746},[37,170564,2472],{"emptyLinePlaceholder":131},[37,170566,170567],{"class":39,"line":1751},[37,170568,2472],{"emptyLinePlaceholder":131},[37,170570,170571,170573,170575],{"class":39,"line":1765},[37,170572,159763],{"class":54},[37,170574,70],{"class":50},[37,170576,153089],{"class":54},[37,170578,170579,170582,170584,170586,170588,170590,170592,170594,170596,170598,170600,170602,170604],{"class":39,"line":1770},[37,170580,170581],{"class":54},"students.append({",[37,170583,62747],{"class":309},[37,170585,51505],{"class":54},[37,170587,149935],{"class":309},[37,170589,12507],{"class":54},[37,170591,69192],{"class":309},[37,170593,51505],{"class":54},[37,170595,853],{"class":82},[37,170597,12507],{"class":54},[37,170599,151519],{"class":309},[37,170601,51505],{"class":54},[37,170603,1192],{"class":82},[37,170605,165199],{"class":54},[37,170607,170608],{"class":39,"line":1799},[37,170609,170610],{"class":54},"save_students(students)\n",[37,170612,170613,170615,170617,170620],{"class":39,"line":1804},[37,170614,30485],{"class":82},[37,170616,208],{"class":54},[37,170618,170619],{"class":309},"\"保存成功\"",[37,170621,214],{"class":54},[146,170623,170625],{"id":170624},"_814-易错点","8.14 易错点",[158,170627,170628,170632,170638,170643,170650,170657],{},[161,170629,170630,168891],{},[34,170631,998],{},[161,170633,170634,170635,28458],{},"读写中文要指定 ",[34,170636,170637],{},"encoding=\"utf-8\"",[161,170639,170640,170641,28458],{},"打开文件后要关闭，推荐使用 ",[34,170642,107880],{},[161,170644,170645,170646,170649],{},"读取大文件不要直接 ",[34,170647,170648],{},"read()"," 全部内容。",[161,170651,170652,170653,170656],{},"Windows 写 CSV 时建议加 ",[34,170654,170655],{},"newline=\"\"","，避免空行。",[161,170658,170659],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[146,170661,170663],{"id":170662},"_815-本章练习","8.15 本章练习",[158,170665,170666,170673,170678,170681,170684],{},[161,170667,170668,170669,170672],{},"写入一个 ",[34,170670,170671],{},"students.txt","，每行保存一个学生姓名。",[161,170674,104402,170675,170677],{},[34,170676,170671],{}," 并输出所有学生。",[161,170679,170680],{},"把学生列表保存为 JSON 文件。",[161,170682,170683],{},"从 JSON 文件读取学生数据，计算平均分。",[161,170685,170686,170687,170690,170691,170694],{},"写一个日志函数 ",[34,170688,170689],{},"write_log(message)","，每次调用向 ",[34,170692,170693],{},"app.log"," 追加一行。",[123,170696,170697],{},"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":32,"searchDepth":47,"depth":47,"links":170699},[170700,170701,170705,170706,170712,170713,170714,170715,170716,170717,170718,170719,170720,170721,170722],{"id":168211,"depth":47,"text":168212},{"id":168252,"depth":47,"text":168253,"children":170702},[170703,170704],{"id":168256,"depth":58,"text":168257},{"id":168290,"depth":58,"text":168291},{"id":168404,"depth":47,"text":168405},{"id":168497,"depth":47,"text":168498,"children":170707},[170708,170709,170710,170711],{"id":168501,"depth":58,"text":168502},{"id":168588,"depth":58,"text":168589},{"id":168658,"depth":58,"text":168659},{"id":168752,"depth":58,"text":168753},{"id":168822,"depth":47,"text":168823},{"id":168885,"depth":47,"text":168886},{"id":169046,"depth":47,"text":169047},{"id":169109,"depth":47,"text":169110},{"id":169225,"depth":47,"text":169226},{"id":169435,"depth":47,"text":169436},{"id":169747,"depth":47,"text":169748},{"id":170158,"depth":47,"text":170159},{"id":170376,"depth":47,"text":170377},{"id":170624,"depth":47,"text":170625},{"id":170662,"depth":47,"text":170663},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168203,"description":128},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170729,"title":170730,"body":170731,"description":128,"extension":129,"meta":172917,"navigation":131,"path":172918,"seo":172919,"stem":172920,"__hash__":172921},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170732,"toc":172884},[170733,170736,170740,170743,170746,170838,170840,170859,170864,170868,170871,170874,170903,170910,170913,170917,170920,170949,170951,171003,171009,171062,171066,171164,171167,171234,171238,171295,171297,171303,171307,171312,171318,171409,171414,171418,171421,171499,171502,171540,171544,171662,171665,171669,171672,171717,171720,171724,171729,171735,171785,171788,171819,171823,171827,171857,171861,171896,171900,171935,171975,171979,171995,171998,172002,172006,172085,172089,172130,172134,172189,172193,172227,172231,172261,172270,172277,172283,172340,172343,172351,172354,172358,172365,172368,172374,172377,172394,172399,172403,172409,172422,172425,172462,172465,172476,172479,172493,172496,172510,172514,172521,172554,172557,172559,172565,172568,172572,172574,172580,172585,172758,172762,172825,172829,172853,172857,172881],[10,170734,170730],{"id":170735},"_9-异常模块与包",[146,170737,170739],{"id":170738},"_91-什么是异常","9.1 什么是异常",[14,170741,170742],{},"异常是程序运行过程中出现的错误。",[14,170744,170745],{},"常见异常：",[342,170747,170748,170757],{},[345,170749,170750],{},[348,170751,170752,170755],{},[351,170753,170754],{},"异常",[351,170756,25942],{},[389,170758,170759,170769,170779,170788,170798,170808,170818,170828],{},[348,170760,170761,170766],{},[394,170762,170763],{},[34,170764,170765],{},"NameError",[394,170767,170768],{},"使用了未定义变量",[348,170770,170771,170776],{},[394,170772,170773],{},[34,170774,170775],{},"TypeError",[394,170777,170778],{},"类型不匹配",[348,170780,170781,170785],{},[394,170782,170783],{},[34,170784,154881],{},[394,170786,170787],{},"值不合法",[348,170789,170790,170795],{},[394,170791,170792],{},[34,170793,170794],{},"IndexError",[394,170796,170797],{},"列表索引越界",[348,170799,170800,170805],{},[394,170801,170802],{},[34,170803,170804],{},"KeyError",[394,170806,170807],{},"字典 key 不存在",[348,170809,170810,170815],{},[394,170811,170812],{},[34,170813,170814],{},"FileNotFoundError",[394,170816,170817],{},"文件不存在",[348,170819,170820,170825],{},[394,170821,170822],{},[34,170823,170824],{},"ZeroDivisionError",[394,170826,170827],{},"除数为 0",[348,170829,170830,170835],{},[394,170831,170832],{},[34,170833,170834],{},"ImportError",[394,170836,170837],{},"导入失败",[14,170839,15207],{},[27,170841,170843],{"className":29,"code":170842,"language":31,"meta":32,"style":32},"num = int(\"abc\")\n",[34,170844,170845],{"__ignoreMap":32},[37,170846,170847,170849,170851,170853,170855,170857],{"class":39,"line":40},[37,170848,155834],{"class":54},[37,170850,70],{"class":50},[37,170852,2454],{"class":82},[37,170854,208],{"class":54},[37,170856,155927],{"class":309},[37,170858,214],{"class":54},[14,170860,170861,170862,28458],{},"会触发 ",[34,170863,154881],{},[146,170865,170867],{"id":170866},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,170869,170870],{},"如果不处理异常，程序会直接终止。",[14,170872,170873],{},"例如用户输入年龄：",[27,170875,170877],{"className":29,"code":170876,"language":31,"meta":32,"style":32},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[34,170878,170879,170897],{"__ignoreMap":32},[37,170880,170881,170883,170885,170887,170889,170891,170893,170895],{"class":39,"line":40},[37,170882,146593],{"class":54},[37,170884,70],{"class":50},[37,170886,2454],{"class":82},[37,170888,208],{"class":54},[37,170890,53889],{"class":82},[37,170892,208],{"class":54},[37,170894,152441],{"class":309},[37,170896,30567],{"class":54},[37,170898,170899,170901],{"class":39,"line":47},[37,170900,30485],{"class":82},[37,170902,155808],{"class":54},[14,170904,170905,170906,170909],{},"用户输入 ",[34,170907,170908],{},"abc","，程序就会报错退出。",[14,170911,170912],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[146,170914,170916],{"id":170915},"_93-try-except","9.3 try except",[14,170918,170919],{},"基础语法：",[27,170921,170923],{"className":29,"code":170922,"language":31,"meta":32,"style":32},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[34,170924,170925,170932,170937,170944],{"__ignoreMap":32},[37,170926,170927,170930],{"class":39,"line":40},[37,170928,170929],{"class":50},"try",[37,170931,3811],{"class":54},[37,170933,170934],{"class":39,"line":47},[37,170935,170936],{"class":54},"    可能出错的代码\n",[37,170938,170939,170942],{"class":39,"line":58},[37,170940,170941],{"class":50},"except",[37,170943,3811],{"class":54},[37,170945,170946],{"class":39,"line":64},[37,170947,170948],{"class":54},"    出错后的处理代码\n",[14,170950,15207],{},[27,170952,170954],{"className":29,"code":170953,"language":31,"meta":32,"style":32},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[34,170955,170956,170962,170980,170986,170992],{"__ignoreMap":32},[37,170957,170958,170960],{"class":39,"line":40},[37,170959,170929],{"class":50},[37,170961,3811],{"class":54},[37,170963,170964,170966,170968,170970,170972,170974,170976,170978],{"class":39,"line":47},[37,170965,152433],{"class":54},[37,170967,70],{"class":50},[37,170969,2454],{"class":82},[37,170971,208],{"class":54},[37,170973,53889],{"class":82},[37,170975,208],{"class":54},[37,170977,152441],{"class":309},[37,170979,30567],{"class":54},[37,170981,170982,170984],{"class":39,"line":58},[37,170983,31369],{"class":82},[37,170985,155808],{"class":54},[37,170987,170988,170990],{"class":39,"line":64},[37,170989,170941],{"class":50},[37,170991,3811],{"class":54},[37,170993,170994,170996,170998,171001],{"class":39,"line":76},[37,170995,31369],{"class":82},[37,170997,208],{"class":54},[37,170999,171000],{"class":309},"\"年龄必须是数字\"",[37,171002,214],{"class":54},[14,171004,171005,171006,171008],{},"不建议裸写 ",[34,171007,170941],{},"，最好指定异常类型。",[27,171010,171012],{"className":29,"code":171011,"language":31,"meta":32,"style":32},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[34,171013,171014,171020,171038,171044,171052],{"__ignoreMap":32},[37,171015,171016,171018],{"class":39,"line":40},[37,171017,170929],{"class":50},[37,171019,3811],{"class":54},[37,171021,171022,171024,171026,171028,171030,171032,171034,171036],{"class":39,"line":47},[37,171023,152433],{"class":54},[37,171025,70],{"class":50},[37,171027,2454],{"class":82},[37,171029,208],{"class":54},[37,171031,53889],{"class":82},[37,171033,208],{"class":54},[37,171035,152441],{"class":309},[37,171037,30567],{"class":54},[37,171039,171040,171042],{"class":39,"line":58},[37,171041,31369],{"class":82},[37,171043,155808],{"class":54},[37,171045,171046,171048,171050],{"class":39,"line":64},[37,171047,170941],{"class":50},[37,171049,152273],{"class":82},[37,171051,3811],{"class":54},[37,171053,171054,171056,171058,171060],{"class":39,"line":76},[37,171055,31369],{"class":82},[37,171057,208],{"class":54},[37,171059,171000],{"class":309},[37,171061,214],{"class":54},[146,171063,171065],{"id":171064},"_94-捕获多个异常","9.4 捕获多个异常",[27,171067,171069],{"className":29,"code":171068,"language":31,"meta":32,"style":32},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[34,171070,171071,171077,171098,171118,171125,171133,171144,171153],{"__ignoreMap":32},[37,171072,171073,171075],{"class":39,"line":40},[37,171074,170929],{"class":50},[37,171076,3811],{"class":54},[37,171078,171079,171082,171084,171086,171088,171090,171092,171094,171096],{"class":39,"line":47},[37,171080,171081],{"class":54},"    nums ",[37,171083,70],{"class":50},[37,171085,52294],{"class":54},[37,171087,422],{"class":82},[37,171089,12507],{"class":54},[37,171091,282],{"class":82},[37,171093,12507],{"class":54},[37,171095,276],{"class":82},[37,171097,33315],{"class":54},[37,171099,171100,171103,171105,171107,171109,171111,171113,171116],{"class":39,"line":58},[37,171101,171102],{"class":54},"    index ",[37,171104,70],{"class":50},[37,171106,2454],{"class":82},[37,171108,208],{"class":54},[37,171110,53889],{"class":82},[37,171112,208],{"class":54},[37,171114,171115],{"class":309},"\"请输入索引:\"",[37,171117,30567],{"class":54},[37,171119,171120,171122],{"class":39,"line":64},[37,171121,31369],{"class":82},[37,171123,171124],{"class":54},"(nums[index])\n",[37,171126,171127,171129,171131],{"class":39,"line":76},[37,171128,170941],{"class":50},[37,171130,152273],{"class":82},[37,171132,3811],{"class":54},[37,171134,171135,171137,171139,171142],{"class":39,"line":92},[37,171136,31369],{"class":82},[37,171138,208],{"class":54},[37,171140,171141],{"class":309},"\"索引必须是整数\"",[37,171143,214],{"class":54},[37,171145,171146,171148,171151],{"class":39,"line":97},[37,171147,170941],{"class":50},[37,171149,171150],{"class":82}," IndexError",[37,171152,3811],{"class":54},[37,171154,171155,171157,171159,171162],{"class":39,"line":107},[37,171156,31369],{"class":82},[37,171158,208],{"class":54},[37,171160,171161],{"class":309},"\"索引越界\"",[37,171163,214],{"class":54},[14,171165,171166],{},"多个异常使用相同处理逻辑：",[27,171168,171170],{"className":29,"code":171169,"language":31,"meta":32,"style":32},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[34,171171,171172,171178,171196,171209,171223],{"__ignoreMap":32},[37,171173,171174,171176],{"class":39,"line":40},[37,171175,170929],{"class":50},[37,171177,3811],{"class":54},[37,171179,171180,171182,171184,171186,171188,171190,171192,171194],{"class":39,"line":47},[37,171181,45662],{"class":54},[37,171183,70],{"class":50},[37,171185,2454],{"class":82},[37,171187,208],{"class":54},[37,171189,53889],{"class":82},[37,171191,208],{"class":54},[37,171193,155843],{"class":309},[37,171195,30567],{"class":54},[37,171197,171198,171200,171202,171204,171206],{"class":39,"line":58},[37,171199,31369],{"class":82},[37,171201,208],{"class":54},[37,171203,650],{"class":82},[37,171205,156093],{"class":50},[37,171207,171208],{"class":54}," num)\n",[37,171210,171211,171213,171215,171217,171219,171221],{"class":39,"line":64},[37,171212,170941],{"class":50},[37,171214,1730],{"class":54},[37,171216,154881],{"class":82},[37,171218,12507],{"class":54},[37,171220,170824],{"class":82},[37,171222,30856],{"class":54},[37,171224,171225,171227,171229,171232],{"class":39,"line":76},[37,171226,31369],{"class":82},[37,171228,208],{"class":54},[37,171230,171231],{"class":309},"\"输入不合法\"",[37,171233,214],{"class":54},[146,171235,171237],{"id":171236},"_95-获取异常信息","9.5 获取异常信息",[27,171239,171241],{"className":29,"code":171240,"language":31,"meta":32,"style":32},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[34,171242,171243,171249,171263,171274],{"__ignoreMap":32},[37,171244,171245,171247],{"class":39,"line":40},[37,171246,170929],{"class":50},[37,171248,3811],{"class":54},[37,171250,171251,171253,171255,171257,171259,171261],{"class":39,"line":47},[37,171252,45662],{"class":54},[37,171254,70],{"class":50},[37,171256,2454],{"class":82},[37,171258,208],{"class":54},[37,171260,155927],{"class":309},[37,171262,214],{"class":54},[37,171264,171265,171267,171269,171271],{"class":39,"line":58},[37,171266,170941],{"class":50},[37,171268,152273],{"class":82},[37,171270,64672],{"class":50},[37,171272,171273],{"class":54}," e:\n",[37,171275,171276,171278,171280,171282,171285,171287,171289,171291,171293],{"class":39,"line":64},[37,171277,31369],{"class":82},[37,171279,208],{"class":54},[37,171281,258],{"class":50},[37,171283,171284],{"class":309},"\"出错了:",[37,171286,1099],{"class":82},[37,171288,279],{"class":54},[37,171290,1149],{"class":82},[37,171292,456],{"class":309},[37,171294,214],{"class":54},[14,171296,146504],{},[27,171298,171301],{"className":171299,"code":171300,"language":5259,"meta":32},[5257],"出错了:invalid literal for int() with base 10: 'abc'\n",[34,171302,171300],{"__ignoreMap":32},[146,171304,171306],{"id":171305},"_96-else和finally","9.6 else和finally",[14,171308,171309,171311],{},[34,171310,1773],{},"：没有异常时执行。",[14,171313,171314,171317],{},[34,171315,171316],{},"finally","：无论是否异常都会执行。",[27,171319,171321],{"className":29,"code":171320,"language":31,"meta":32,"style":32},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[34,171322,171323,171329,171347,171355,171365,171371,171392,171398],{"__ignoreMap":32},[37,171324,171325,171327],{"class":39,"line":40},[37,171326,170929],{"class":50},[37,171328,3811],{"class":54},[37,171330,171331,171333,171335,171337,171339,171341,171343,171345],{"class":39,"line":47},[37,171332,45662],{"class":54},[37,171334,70],{"class":50},[37,171336,2454],{"class":82},[37,171338,208],{"class":54},[37,171340,53889],{"class":82},[37,171342,208],{"class":54},[37,171344,155843],{"class":309},[37,171346,30567],{"class":54},[37,171348,171349,171351,171353],{"class":39,"line":58},[37,171350,170941],{"class":50},[37,171352,152273],{"class":82},[37,171354,3811],{"class":54},[37,171356,171357,171359,171361,171363],{"class":39,"line":64},[37,171358,31369],{"class":82},[37,171360,208],{"class":54},[37,171362,153261],{"class":309},[37,171364,214],{"class":54},[37,171366,171367,171369],{"class":39,"line":76},[37,171368,1773],{"class":50},[37,171370,3811],{"class":54},[37,171372,171373,171375,171377,171379,171382,171384,171386,171388,171390],{"class":39,"line":92},[37,171374,31369],{"class":82},[37,171376,208],{"class":54},[37,171378,258],{"class":50},[37,171380,171381],{"class":309},"\"输入正确:",[37,171383,1099],{"class":82},[37,171385,1737],{"class":54},[37,171387,1149],{"class":82},[37,171389,456],{"class":309},[37,171391,214],{"class":54},[37,171393,171394,171396],{"class":39,"line":97},[37,171395,171316],{"class":50},[37,171397,3811],{"class":54},[37,171399,171400,171402,171404,171407],{"class":39,"line":107},[37,171401,31369],{"class":82},[37,171403,208],{"class":54},[37,171405,171406],{"class":309},"\"程序结束\"",[37,171408,214],{"class":54},[14,171410,171411,171413],{},[34,171412,171316],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[146,171415,171417],{"id":171416},"_97-抛出异常","9.7 抛出异常",[14,171419,171420],{},"程序可以主动抛出异常。",[27,171422,171424],{"className":29,"code":171423,"language":31,"meta":32,"style":32},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[34,171425,171426,171435,171447,171460,171480,171484,171488],{"__ignoreMap":32},[37,171427,171428,171430,171433],{"class":39,"line":40},[37,171429,32017],{"class":50},[37,171431,171432],{"class":2035}," set_age",[37,171434,161462],{"class":54},[37,171436,171437,171439,171441,171443,171445],{"class":39,"line":47},[37,171438,3173],{"class":50},[37,171440,15779],{"class":54},[37,171442,1113],{"class":50},[37,171444,4165],{"class":82},[37,171446,3811],{"class":54},[37,171448,171449,171451,171453,171455,171458],{"class":39,"line":58},[37,171450,103479],{"class":50},[37,171452,152273],{"class":82},[37,171454,208],{"class":54},[37,171456,171457],{"class":309},"\"年龄不能为负数\"",[37,171459,214],{"class":54},[37,171461,171462,171464,171466,171468,171470,171472,171474,171476,171478],{"class":39,"line":64},[37,171463,31369],{"class":82},[37,171465,208],{"class":54},[37,171467,258],{"class":50},[37,171469,162030],{"class":309},[37,171471,1099],{"class":82},[37,171473,70289],{"class":54},[37,171475,1149],{"class":82},[37,171477,456],{"class":309},[37,171479,214],{"class":54},[37,171481,171482],{"class":39,"line":76},[37,171483,2472],{"emptyLinePlaceholder":131},[37,171485,171486],{"class":39,"line":92},[37,171487,2472],{"emptyLinePlaceholder":131},[37,171489,171490,171493,171495,171497],{"class":39,"line":97},[37,171491,171492],{"class":54},"set_age(",[37,171494,112],{"class":50},[37,171496,422],{"class":82},[37,171498,214],{"class":54},[14,171500,171501],{},"调用者可以捕获：",[27,171503,171505],{"className":29,"code":171504,"language":31,"meta":32,"style":32},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[34,171506,171507,171513,171524,171534],{"__ignoreMap":32},[37,171508,171509,171511],{"class":39,"line":40},[37,171510,170929],{"class":50},[37,171512,3811],{"class":54},[37,171514,171515,171518,171520,171522],{"class":39,"line":47},[37,171516,171517],{"class":54},"    set_age(",[37,171519,112],{"class":50},[37,171521,422],{"class":82},[37,171523,214],{"class":54},[37,171525,171526,171528,171530,171532],{"class":39,"line":58},[37,171527,170941],{"class":50},[37,171529,152273],{"class":82},[37,171531,64672],{"class":50},[37,171533,171273],{"class":54},[37,171535,171536,171538],{"class":39,"line":64},[37,171537,31369],{"class":82},[37,171539,67067],{"class":54},[146,171541,171543],{"id":171542},"_98-自定义异常","9.8 自定义异常",[27,171545,171547],{"className":29,"code":171546,"language":31,"meta":32,"style":32},"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",[34,171548,171549,171563,171567,171571,171575,171583,171593,171604,171614,171618,171622,171628,171645,171656],{"__ignoreMap":32},[37,171550,171551,171553,171556,171558,171561],{"class":39,"line":40},[37,171552,14766],{"class":50},[37,171554,171555],{"class":2035}," BalanceNotEnoughError",[37,171557,208],{"class":54},[37,171559,171560],{"class":82},"Exception",[37,171562,30856],{"class":54},[37,171564,171565],{"class":39,"line":47},[37,171566,149584],{"class":50},[37,171568,171569],{"class":39,"line":58},[37,171570,2472],{"emptyLinePlaceholder":131},[37,171572,171573],{"class":39,"line":64},[37,171574,2472],{"emptyLinePlaceholder":131},[37,171576,171577,171579,171581],{"class":39,"line":76},[37,171578,32017],{"class":50},[37,171580,150233],{"class":2035},[37,171582,162859],{"class":54},[37,171584,171585,171587,171589,171591],{"class":39,"line":92},[37,171586,3173],{"class":50},[37,171588,150189],{"class":54},[37,171590,1163],{"class":50},[37,171592,162636],{"class":54},[37,171594,171595,171597,171600,171602],{"class":39,"line":97},[37,171596,103479],{"class":50},[37,171598,171599],{"class":54}," BalanceNotEnoughError(",[37,171601,150284],{"class":309},[37,171603,214],{"class":54},[37,171605,171606,171608,171610,171612],{"class":39,"line":107},[37,171607,4162],{"class":50},[37,171609,162866],{"class":54},[37,171611,112],{"class":50},[37,171613,150222],{"class":54},[37,171615,171616],{"class":39,"line":1390},[37,171617,2472],{"emptyLinePlaceholder":131},[37,171619,171620],{"class":39,"line":1402},[37,171621,2472],{"emptyLinePlaceholder":131},[37,171623,171624,171626],{"class":39,"line":1684},[37,171625,170929],{"class":50},[37,171627,3811],{"class":54},[37,171629,171630,171632,171634,171637,171639,171641,171643],{"class":39,"line":1689},[37,171631,162537],{"class":54},[37,171633,70],{"class":50},[37,171635,171636],{"class":54}," withdraw(",[37,171638,516],{"class":82},[37,171640,12507],{"class":54},[37,171642,1794],{"class":82},[37,171644,214],{"class":54},[37,171646,171647,171649,171652,171654],{"class":39,"line":1695},[37,171648,170941],{"class":50},[37,171650,171651],{"class":54}," BalanceNotEnoughError ",[37,171653,31453],{"class":50},[37,171655,171273],{"class":54},[37,171657,171658,171660],{"class":39,"line":1700},[37,171659,31369],{"class":82},[37,171661,67067],{"class":54},[14,171663,171664],{},"入门阶段大多数情况使用内置异常即可。",[146,171666,171668],{"id":171667},"_99-traceback","9.9 traceback",[14,171670,171671],{},"调试时可以输出完整异常堆栈。",[27,171673,171675],{"className":29,"code":171674,"language":31,"meta":32,"style":32},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[34,171676,171677,171684,171688,171694,171704,171712],{"__ignoreMap":32},[37,171678,171679,171681],{"class":39,"line":40},[37,171680,51],{"class":50},[37,171682,171683],{"class":54}," traceback\n",[37,171685,171686],{"class":39,"line":47},[37,171687,2472],{"emptyLinePlaceholder":131},[37,171689,171690,171692],{"class":39,"line":58},[37,171691,170929],{"class":50},[37,171693,3811],{"class":54},[37,171695,171696,171698,171700,171702],{"class":39,"line":64},[37,171697,2057],{"class":82},[37,171699,208],{"class":54},[37,171701,155927],{"class":309},[37,171703,214],{"class":54},[37,171705,171706,171708,171710],{"class":39,"line":76},[37,171707,170941],{"class":50},[37,171709,152273],{"class":82},[37,171711,3811],{"class":54},[37,171713,171714],{"class":39,"line":92},[37,171715,171716],{"class":54},"    traceback.print_exc()\n",[14,171718,171719],{},"日志系统中常把异常堆栈记录到文件。",[146,171721,171723],{"id":171722},"_910-什么是模块","9.10 什么是模块",[14,171725,171726,171727,126030],{},"模块就是一个 ",[34,171728,146399],{},[14,171730,171731,171732,24691],{},"例如创建 ",[34,171733,171734],{},"my_math.py",[27,171736,171738],{"className":29,"code":171737,"language":31,"meta":32,"style":32},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[34,171739,171740,171748,171758,171762,171766,171775],{"__ignoreMap":32},[37,171741,171742,171744,171746],{"class":39,"line":40},[37,171743,32017],{"class":50},[37,171745,5281],{"class":2035},[37,171747,151140],{"class":54},[37,171749,171750,171752,171754,171756],{"class":39,"line":47},[37,171751,4162],{"class":50},[37,171753,10941],{"class":54},[37,171755,685],{"class":50},[37,171757,151151],{"class":54},[37,171759,171760],{"class":39,"line":58},[37,171761,2472],{"emptyLinePlaceholder":131},[37,171763,171764],{"class":39,"line":64},[37,171765,2472],{"emptyLinePlaceholder":131},[37,171767,171768,171770,171773],{"class":39,"line":76},[37,171769,32017],{"class":50},[37,171771,171772],{"class":2035}," sub",[37,171774,151140],{"class":54},[37,171776,171777,171779,171781,171783],{"class":39,"line":92},[37,171778,4162],{"class":50},[37,171780,10941],{"class":54},[37,171782,112],{"class":50},[37,171784,151151],{"class":54},[14,171786,171787],{},"在另一个文件中导入：",[27,171789,171791],{"className":29,"code":171790,"language":31,"meta":32,"style":32},"import my_math\n\nprint(my_math.add(1, 2))\n",[34,171792,171793,171800,171804],{"__ignoreMap":32},[37,171794,171795,171797],{"class":39,"line":40},[37,171796,51],{"class":50},[37,171798,171799],{"class":54}," my_math\n",[37,171801,171802],{"class":39,"line":47},[37,171803,2472],{"emptyLinePlaceholder":131},[37,171805,171806,171808,171811,171813,171815,171817],{"class":39,"line":58},[37,171807,30485],{"class":82},[37,171809,171810],{"class":54},"(my_math.add(",[37,171812,422],{"class":82},[37,171814,12507],{"class":54},[37,171816,282],{"class":82},[37,171818,30567],{"class":54},[146,171820,171822],{"id":171821},"_911-import导入","9.11 import导入",[175,171824,171826],{"id":171825},"_9111-导入模块","9.11.1 导入模块",[27,171828,171830],{"className":29,"code":171829,"language":31,"meta":32,"style":32},"import random\n\nprint(random.randint(1, 10))\n",[34,171831,171832,171838,171842],{"__ignoreMap":32},[37,171833,171834,171836],{"class":39,"line":40},[37,171835,51],{"class":50},[37,171837,45397],{"class":54},[37,171839,171840],{"class":39,"line":47},[37,171841,2472],{"emptyLinePlaceholder":131},[37,171843,171844,171846,171849,171851,171853,171855],{"class":39,"line":58},[37,171845,30485],{"class":82},[37,171847,171848],{"class":54},"(random.randint(",[37,171850,422],{"class":82},[37,171852,12507],{"class":54},[37,171854,650],{"class":82},[37,171856,30567],{"class":54},[175,171858,171860],{"id":171859},"_9112-导入指定内容","9.11.2 导入指定内容",[27,171862,171864],{"className":29,"code":171863,"language":31,"meta":32,"style":32},"from random import randint\n\nprint(randint(1, 10))\n",[34,171865,171866,171877,171881],{"__ignoreMap":32},[37,171867,171868,171870,171872,171874],{"class":39,"line":40},[37,171869,30807],{"class":50},[37,171871,57864],{"class":54},[37,171873,51],{"class":50},[37,171875,171876],{"class":54}," randint\n",[37,171878,171879],{"class":39,"line":47},[37,171880,2472],{"emptyLinePlaceholder":131},[37,171882,171883,171885,171888,171890,171892,171894],{"class":39,"line":58},[37,171884,30485],{"class":82},[37,171886,171887],{"class":54},"(randint(",[37,171889,422],{"class":82},[37,171891,12507],{"class":54},[37,171893,650],{"class":82},[37,171895,30567],{"class":54},[175,171897,171899],{"id":171898},"_9113-起别名","9.11.3 起别名",[27,171901,171903],{"className":29,"code":171902,"language":31,"meta":32,"style":32},"import random as rd\n\nprint(rd.randint(1, 10))\n",[34,171904,171905,171916,171920],{"__ignoreMap":32},[37,171906,171907,171909,171911,171913],{"class":39,"line":40},[37,171908,51],{"class":50},[37,171910,57864],{"class":54},[37,171912,31453],{"class":50},[37,171914,171915],{"class":54}," rd\n",[37,171917,171918],{"class":39,"line":47},[37,171919,2472],{"emptyLinePlaceholder":131},[37,171921,171922,171924,171927,171929,171931,171933],{"class":39,"line":58},[37,171923,30485],{"class":82},[37,171925,171926],{"class":54},"(rd.randint(",[37,171928,422],{"class":82},[37,171930,12507],{"class":54},[37,171932,650],{"class":82},[37,171934,30567],{"class":54},[27,171936,171938],{"className":29,"code":171937,"language":31,"meta":32,"style":32},"from random import randint as rint\n\nprint(rint(1, 10))\n",[34,171939,171940,171956,171960],{"__ignoreMap":32},[37,171941,171942,171944,171946,171948,171951,171953],{"class":39,"line":40},[37,171943,30807],{"class":50},[37,171945,57864],{"class":54},[37,171947,51],{"class":50},[37,171949,171950],{"class":54}," randint ",[37,171952,31453],{"class":50},[37,171954,171955],{"class":54}," rint\n",[37,171957,171958],{"class":39,"line":47},[37,171959,2472],{"emptyLinePlaceholder":131},[37,171961,171962,171964,171967,171969,171971,171973],{"class":39,"line":58},[37,171963,30485],{"class":82},[37,171965,171966],{"class":54},"(rint(",[37,171968,422],{"class":82},[37,171970,12507],{"class":54},[37,171972,650],{"class":82},[37,171974,30567],{"class":54},[175,171976,171978],{"id":171977},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[27,171980,171982],{"className":29,"code":171981,"language":31,"meta":32,"style":32},"from random import *\n",[34,171983,171984],{"__ignoreMap":32},[37,171985,171986,171988,171990,171992],{"class":39,"line":40},[37,171987,30807],{"class":50},[37,171989,57864],{"class":54},[37,171991,51],{"class":50},[37,171993,171994],{"class":50}," *\n",[14,171996,171997],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[146,171999,172001],{"id":172000},"_912-常用内置模块","9.12 常用内置模块",[175,172003,172005],{"id":172004},"_9121-random","9.12.1 random",[27,172007,172009],{"className":29,"code":172008,"language":31,"meta":32,"style":32},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[34,172010,172011,172017,172021,172035,172054],{"__ignoreMap":32},[37,172012,172013,172015],{"class":39,"line":40},[37,172014,51],{"class":50},[37,172016,45397],{"class":54},[37,172018,172019],{"class":39,"line":47},[37,172020,2472],{"emptyLinePlaceholder":131},[37,172022,172023,172025,172027,172029,172031,172033],{"class":39,"line":58},[37,172024,30485],{"class":82},[37,172026,171848],{"class":54},[37,172028,422],{"class":82},[37,172030,12507],{"class":54},[37,172032,650],{"class":82},[37,172034,30567],{"class":54},[37,172036,172037,172039,172042,172044,172046,172048,172050,172052],{"class":39,"line":64},[37,172038,30485],{"class":82},[37,172040,172041],{"class":54},"(random.choice([",[37,172043,149935],{"class":309},[37,172045,12507],{"class":54},[37,172047,150983],{"class":309},[37,172049,12507],{"class":54},[37,172051,159778],{"class":309},[37,172053,33212],{"class":54},[37,172055,172056,172058,172061,172063,172065,172067,172069,172071,172073,172075,172077,172079,172081,172083],{"class":39,"line":76},[37,172057,30485],{"class":82},[37,172059,172060],{"class":54},"(random.sample([",[37,172062,422],{"class":82},[37,172064,12507],{"class":54},[37,172066,282],{"class":82},[37,172068,12507],{"class":54},[37,172070,276],{"class":82},[37,172072,12507],{"class":54},[37,172074,498],{"class":82},[37,172076,12507],{"class":54},[37,172078,524],{"class":82},[37,172080,112249],{"class":54},[37,172082,282],{"class":82},[37,172084,30567],{"class":54},[175,172086,172088],{"id":172087},"_9122-time","9.12.2 time",[27,172090,172092],{"className":29,"code":172091,"language":31,"meta":32,"style":32},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[34,172093,172094,172100,172104,172111,172119],{"__ignoreMap":32},[37,172095,172096,172098],{"class":39,"line":40},[37,172097,51],{"class":50},[37,172099,31899],{"class":54},[37,172101,172102],{"class":39,"line":47},[37,172103,2472],{"emptyLinePlaceholder":131},[37,172105,172106,172108],{"class":39,"line":58},[37,172107,30485],{"class":82},[37,172109,172110],{"class":54},"(time.time())\n",[37,172112,172113,172115,172117],{"class":39,"line":64},[37,172114,79],{"class":54},[37,172116,422],{"class":82},[37,172118,214],{"class":54},[37,172120,172121,172123,172125,172128],{"class":39,"line":76},[37,172122,30485],{"class":82},[37,172124,208],{"class":54},[37,172126,172127],{"class":309},"\"1秒后执行\"",[37,172129,214],{"class":54},[175,172131,172133],{"id":172132},"_9123-datetime","9.12.3 datetime",[27,172135,172137],{"className":29,"code":172136,"language":31,"meta":32,"style":32},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[34,172138,172139,172151,172155,172165,172172],{"__ignoreMap":32},[37,172140,172141,172143,172146,172148],{"class":39,"line":40},[37,172142,30807],{"class":50},[37,172144,172145],{"class":54}," datetime ",[37,172147,51],{"class":50},[37,172149,172150],{"class":54}," datetime\n",[37,172152,172153],{"class":39,"line":47},[37,172154,2472],{"emptyLinePlaceholder":131},[37,172156,172157,172160,172162],{"class":39,"line":58},[37,172158,172159],{"class":54},"now ",[37,172161,70],{"class":50},[37,172163,172164],{"class":54}," datetime.now()\n",[37,172166,172167,172169],{"class":39,"line":64},[37,172168,30485],{"class":82},[37,172170,172171],{"class":54},"(now)\n",[37,172173,172174,172176,172179,172182,172184,172187],{"class":39,"line":76},[37,172175,30485],{"class":82},[37,172177,172178],{"class":54},"(now.strftime(",[37,172180,172181],{"class":309},"\"%Y-%m-",[37,172183,156738],{"class":82},[37,172185,172186],{"class":309}," %H:%M:%S\"",[37,172188,30567],{"class":54},[175,172190,172192],{"id":172191},"_9124-os","9.12.4 os",[27,172194,172196],{"className":29,"code":172195,"language":31,"meta":32,"style":32},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[34,172197,172198,172204,172208,172215],{"__ignoreMap":32},[37,172199,172200,172202],{"class":39,"line":40},[37,172201,51],{"class":50},[37,172203,45374],{"class":54},[37,172205,172206],{"class":39,"line":47},[37,172207,2472],{"emptyLinePlaceholder":131},[37,172209,172210,172212],{"class":39,"line":58},[37,172211,30485],{"class":82},[37,172213,172214],{"class":54},"(os.getcwd())\n",[37,172216,172217,172219,172222,172225],{"class":39,"line":64},[37,172218,30485],{"class":82},[37,172220,172221],{"class":54},"(os.listdir(",[37,172223,172224],{"class":309},"\".\"",[37,172226,30567],{"class":54},[175,172228,172230],{"id":172229},"_9125-sys","9.12.5 sys",[27,172232,172234],{"className":29,"code":172233,"language":31,"meta":32,"style":32},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[34,172235,172236,172243,172247,172254],{"__ignoreMap":32},[37,172237,172238,172240],{"class":39,"line":40},[37,172239,51],{"class":50},[37,172241,172242],{"class":54}," sys\n",[37,172244,172245],{"class":39,"line":47},[37,172246,2472],{"emptyLinePlaceholder":131},[37,172248,172249,172251],{"class":39,"line":58},[37,172250,30485],{"class":82},[37,172252,172253],{"class":54},"(sys.version)\n",[37,172255,172256,172258],{"class":39,"line":64},[37,172257,30485],{"class":82},[37,172259,172260],{"class":54},"(sys.path)\n",[146,172262,172264,172265,172267,172268,456],{"id":172263},"_913-if-name-main","9.13 if ",[354,172266,79878],{}," == \"",[354,172269,102105],{},[14,172271,172272,172273,172276],{},"模块被直接运行和被导入时，",[34,172274,172275],{},"__name__"," 的值不同。",[14,172278,172279,172280,24691],{},"创建 ",[34,172281,172282],{},"my_module.py",[27,172284,172286],{"className":29,"code":172285,"language":31,"meta":32,"style":32},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[34,172287,172288,172296,172306,172310,172314,172326],{"__ignoreMap":32},[37,172289,172290,172292,172294],{"class":39,"line":40},[37,172291,32017],{"class":50},[37,172293,5281],{"class":2035},[37,172295,151140],{"class":54},[37,172297,172298,172300,172302,172304],{"class":39,"line":47},[37,172299,4162],{"class":50},[37,172301,10941],{"class":54},[37,172303,685],{"class":50},[37,172305,151151],{"class":54},[37,172307,172308],{"class":39,"line":58},[37,172309,2472],{"emptyLinePlaceholder":131},[37,172311,172312],{"class":39,"line":64},[37,172313,2472],{"emptyLinePlaceholder":131},[37,172315,172316,172318,172320,172322,172324],{"class":39,"line":76},[37,172317,1603],{"class":50},[37,172319,31290],{"class":82},[37,172321,101606],{"class":50},[37,172323,101609],{"class":309},[37,172325,3811],{"class":54},[37,172327,172328,172330,172332,172334,172336,172338],{"class":39,"line":92},[37,172329,31369],{"class":82},[37,172331,166647],{"class":54},[37,172333,422],{"class":82},[37,172335,12507],{"class":54},[37,172337,282],{"class":82},[37,172339,30567],{"class":54},[14,172341,172342],{},"作用：",[158,172344,172345,172348],{},[161,172346,172347],{},"直接运行该文件时，执行测试代码。",[161,172349,172350],{},"被其他文件导入时，不执行测试代码。",[14,172352,172353],{},"这是写模块时很常用的习惯。",[146,172355,172357],{"id":172356},"_914-包","9.14 包",[14,172359,172360,172361,172364],{},"包是包含 ",[34,172362,172363],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172366,172367],{},"目录结构：",[27,172369,172372],{"className":172370,"code":172371,"language":5259,"meta":32},[5257],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[34,172373,172371],{"__ignoreMap":32},[14,172375,172376],{},"导入：",[27,172378,172380],{"className":29,"code":172379,"language":31,"meta":32,"style":32},"from utils.file_utils import read_file\n",[34,172381,172382],{"__ignoreMap":32},[37,172383,172384,172386,172389,172391],{"class":39,"line":40},[37,172385,30807],{"class":50},[37,172387,172388],{"class":54}," utils.file_utils ",[37,172390,51],{"class":50},[37,172392,172393],{"class":54}," read_file\n",[14,172395,172396,172398],{},[34,172397,172363],{}," 可以为空，也可以写包初始化逻辑。",[146,172400,172402],{"id":172401},"_915-第三方包","9.15 第三方包",[14,172404,172405,172406,172408],{},"第三方包通过 ",[34,172407,23903],{}," 安装。",[27,172410,172412],{"className":23894,"code":172411,"language":23896,"meta":32,"style":32},"pip install requests\n",[34,172413,172414],{"__ignoreMap":32},[37,172415,172416,172418,172420],{"class":39,"line":40},[37,172417,23903],{"class":2035},[37,172419,23906],{"class":309},[37,172421,146145],{"class":309},[14,172423,172424],{},"使用：",[27,172426,172428],{"className":29,"code":172427,"language":31,"meta":32,"style":32},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[34,172429,172430,172436,172440,172455],{"__ignoreMap":32},[37,172431,172432,172434],{"class":39,"line":40},[37,172433,51],{"class":50},[37,172435,146145],{"class":54},[37,172437,172438],{"class":39,"line":47},[37,172439,2472],{"emptyLinePlaceholder":131},[37,172441,172442,172445,172447,172450,172453],{"class":39,"line":58},[37,172443,172444],{"class":54},"response ",[37,172446,70],{"class":50},[37,172448,172449],{"class":54}," requests.get(",[37,172451,172452],{"class":309},"\"https:\u002F\u002Fwww.example.com\"",[37,172454,214],{"class":54},[37,172456,172457,172459],{"class":39,"line":64},[37,172458,30485],{"class":82},[37,172460,172461],{"class":54},"(response.status_code)\n",[14,172463,172464],{},"查看已安装包：",[27,172466,172468],{"className":23894,"code":172467,"language":23896,"meta":32,"style":32},"pip list\n",[34,172469,172470],{"__ignoreMap":32},[37,172471,172472,172474],{"class":39,"line":40},[37,172473,23903],{"class":2035},[37,172475,119002],{"class":309},[14,172477,172478],{},"导出项目依赖：",[27,172480,172481],{"className":23894,"code":146340,"language":23896,"meta":32,"style":32},[34,172482,172483],{"__ignoreMap":32},[37,172484,172485,172487,172489,172491],{"class":39,"line":40},[37,172486,23903],{"class":2035},[37,172488,146349],{"class":309},[37,172490,26295],{"class":50},[37,172492,146354],{"class":309},[14,172494,172495],{},"安装项目依赖：",[27,172497,172498],{"className":23894,"code":146360,"language":23896,"meta":32,"style":32},[34,172499,172500],{"__ignoreMap":32},[37,172501,172502,172504,172506,172508],{"class":39,"line":40},[37,172503,23903],{"class":2035},[37,172505,23906],{"class":309},[37,172507,119686],{"class":82},[37,172509,146354],{"class":309},[146,172511,172513],{"id":172512},"_916-模块搜索路径","9.16 模块搜索路径",[14,172515,172516,172517,172520],{},"Python 导入模块时会在 ",[34,172518,172519],{},"sys.path"," 中查找。",[27,172522,172524],{"className":29,"code":172523,"language":31,"meta":32,"style":32},"import sys\n\nfor path in sys.path:\n    print(path)\n",[34,172525,172526,172532,172536,172548],{"__ignoreMap":32},[37,172527,172528,172530],{"class":39,"line":40},[37,172529,51],{"class":50},[37,172531,172242],{"class":54},[37,172533,172534],{"class":39,"line":47},[37,172535,2472],{"emptyLinePlaceholder":131},[37,172537,172538,172540,172543,172545],{"class":39,"line":58},[37,172539,3097],{"class":50},[37,172541,172542],{"class":54}," path ",[37,172544,26116],{"class":50},[37,172546,172547],{"class":54}," sys.path:\n",[37,172549,172550,172552],{"class":39,"line":64},[37,172551,31369],{"class":82},[37,172553,169276],{"class":54},[14,172555,172556],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,172558,157670],{},[27,172560,172563],{"className":172561,"code":172562,"language":5259,"meta":32},[5257],"random.py\njson.py\ntime.py\n",[34,172564,172562],{"__ignoreMap":32},[14,172566,172567],{},"这些文件名可能导致导入异常。",[146,172569,172571],{"id":172570},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,172573,172367],{},[27,172575,172578],{"className":172576,"code":172577,"language":5259,"meta":32},[5257],"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",[34,172579,172577],{"__ignoreMap":32},[14,172581,172582,24691],{},[34,172583,172584],{},"utils\u002Ffile_utils.py",[27,172586,172588],{"className":29,"code":172587,"language":31,"meta":32,"style":32},"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",[34,172589,172590,172596,172606,172610,172614,172624,172634,172642,172648,172652,172679,172689,172693,172697,172707,172733],{"__ignoreMap":32},[37,172591,172592,172594],{"class":39,"line":40},[37,172593,51],{"class":50},[37,172595,147138],{"class":54},[37,172597,172598,172600,172602,172604],{"class":39,"line":47},[37,172599,30807],{"class":50},[37,172601,108358],{"class":54},[37,172603,51],{"class":50},[37,172605,108363],{"class":54},[37,172607,172608],{"class":39,"line":58},[37,172609,2472],{"emptyLinePlaceholder":131},[37,172611,172612],{"class":39,"line":64},[37,172613,2472],{"emptyLinePlaceholder":131},[37,172615,172616,172618,172621],{"class":39,"line":76},[37,172617,32017],{"class":50},[37,172619,172620],{"class":2035}," read_json",[37,172622,172623],{"class":54},"(path):\n",[37,172625,172626,172629,172631],{"class":39,"line":92},[37,172627,172628],{"class":54},"    path ",[37,172630,70],{"class":50},[37,172632,172633],{"class":54}," Path(path)\n",[37,172635,172636,172638,172640],{"class":39,"line":97},[37,172637,3173],{"class":50},[37,172639,38999],{"class":50},[37,172641,169357],{"class":54},[37,172643,172644,172646],{"class":39,"line":107},[37,172645,14824],{"class":50},[37,172647,51906],{"class":54},[37,172649,172650],{"class":39,"line":1390},[37,172651,2472],{"emptyLinePlaceholder":131},[37,172653,172654,172656,172658,172661,172663,172665,172667,172669,172671,172673,172675,172677],{"class":39,"line":1402},[37,172655,34247],{"class":50},[37,172657,146838],{"class":82},[37,172659,172660],{"class":54},"(path, ",[37,172662,146848],{"class":309},[37,172664,12507],{"class":54},[37,172666,146853],{"class":5288},[37,172668,70],{"class":50},[37,172670,146858],{"class":309},[37,172672,13786],{"class":54},[37,172674,31453],{"class":50},[37,172676,148200],{"class":5288},[37,172678,3811],{"class":54},[37,172680,172681,172683,172685,172687],{"class":39,"line":1684},[37,172682,14824],{"class":50},[37,172684,148211],{"class":54},[37,172686,45423],{"class":5288},[37,172688,214],{"class":54},[37,172690,172691],{"class":39,"line":1689},[37,172692,2472],{"emptyLinePlaceholder":131},[37,172694,172695],{"class":39,"line":1695},[37,172696,2472],{"emptyLinePlaceholder":131},[37,172698,172699,172701,172704],{"class":39,"line":1700},[37,172700,32017],{"class":50},[37,172702,172703],{"class":2035}," write_json",[37,172705,172706],{"class":54},"(path, data):\n",[37,172708,172709,172711,172713,172715,172717,172719,172721,172723,172725,172727,172729,172731],{"class":39,"line":1714},[37,172710,34247],{"class":50},[37,172712,146838],{"class":82},[37,172714,172660],{"class":54},[37,172716,152023],{"class":309},[37,172718,12507],{"class":54},[37,172720,146853],{"class":5288},[37,172722,70],{"class":50},[37,172724,146858],{"class":309},[37,172726,13786],{"class":54},[37,172728,31453],{"class":50},[37,172730,148200],{"class":5288},[37,172732,3811],{"class":54},[37,172734,172735,172738,172740,172742,172744,172746,172748,172750,172752,172754,172756],{"class":39,"line":1719},[37,172736,172737],{"class":54},"        json.dump(data, ",[37,172739,45423],{"class":5288},[37,172741,12507],{"class":54},[37,172743,147184],{"class":5288},[37,172745,70],{"class":50},[37,172747,34056],{"class":82},[37,172749,12507],{"class":54},[37,172751,152059],{"class":5288},[37,172753,70],{"class":50},[37,172755,282],{"class":82},[37,172757,214],{"class":54},[14,172759,172760,24691],{},[34,172761,154654],{},[27,172763,172765],{"className":29,"code":172764,"language":31,"meta":32,"style":32},"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",[34,172766,172767,172778,172782,172795,172815],{"__ignoreMap":32},[37,172768,172769,172771,172773,172775],{"class":39,"line":40},[37,172770,30807],{"class":50},[37,172772,172388],{"class":54},[37,172774,51],{"class":50},[37,172776,172777],{"class":54}," read_json, write_json\n",[37,172779,172780],{"class":39,"line":47},[37,172781,2472],{"emptyLinePlaceholder":131},[37,172783,172784,172786,172788,172791,172793],{"class":39,"line":58},[37,172785,159763],{"class":54},[37,172787,70],{"class":50},[37,172789,172790],{"class":54}," read_json(",[37,172792,151878],{"class":309},[37,172794,214],{"class":54},[37,172796,172797,172799,172801,172803,172805,172807,172809,172811,172813],{"class":39,"line":64},[37,172798,170581],{"class":54},[37,172800,62747],{"class":309},[37,172802,51505],{"class":54},[37,172804,149935],{"class":309},[37,172806,12507],{"class":54},[37,172808,151519],{"class":309},[37,172810,51505],{"class":54},[37,172812,1192],{"class":82},[37,172814,165199],{"class":54},[37,172816,172817,172820,172822],{"class":39,"line":76},[37,172818,172819],{"class":54},"write_json(",[37,172821,151878],{"class":309},[37,172823,172824],{"class":54},", students)\n",[146,172826,172828],{"id":172827},"_918-易错点","9.18 易错点",[158,172830,172831,172834,172839,172844,172847,172850],{},[161,172832,172833],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[161,172835,172836,172837,28458],{},"能指定异常类型就不要裸写 ",[34,172838,170941],{},[161,172840,172841,172843],{},[34,172842,171316],{}," 无论是否出错都会执行。",[161,172845,172846],{},"模块文件名不要和标准库重名。",[161,172848,172849],{},"导入自己写的模块时，要注意运行目录。",[161,172851,172852],{},"第三方包要安装到当前解释器或虚拟环境中。",[146,172854,172856],{"id":172855},"_919-本章练习","9.19 本章练习",[158,172858,172859,172862,172865,172871,172878],{},[161,172860,172861],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[161,172863,172864],{},"写函数读取文件，如果文件不存在则返回空字符串。",[161,172866,172279,172867,172870],{},[34,172868,172869],{},"math_utils.py","，实现加减乘除函数并导入使用。",[161,172872,172873,172874,172877],{},"创建一个 ",[34,172875,172876],{},"utils"," 包，把 JSON 读写函数放进去。",[161,172879,172880],{},"写一个程序，捕获除零异常和输入格式异常。",[123,172882,172883],{},"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":32,"searchDepth":47,"depth":47,"links":172885},[172886,172887,172888,172889,172890,172891,172892,172893,172894,172895,172896,172902,172909,172911,172912,172913,172914,172915,172916],{"id":170738,"depth":47,"text":170739},{"id":170866,"depth":47,"text":170867},{"id":170915,"depth":47,"text":170916},{"id":171064,"depth":47,"text":171065},{"id":171236,"depth":47,"text":171237},{"id":171305,"depth":47,"text":171306},{"id":171416,"depth":47,"text":171417},{"id":171542,"depth":47,"text":171543},{"id":171667,"depth":47,"text":171668},{"id":171722,"depth":47,"text":171723},{"id":171821,"depth":47,"text":171822,"children":172897},[172898,172899,172900,172901],{"id":171825,"depth":58,"text":171826},{"id":171859,"depth":58,"text":171860},{"id":171898,"depth":58,"text":171899},{"id":171977,"depth":58,"text":171978},{"id":172000,"depth":47,"text":172001,"children":172903},[172904,172905,172906,172907,172908],{"id":172004,"depth":58,"text":172005},{"id":172087,"depth":58,"text":172088},{"id":172132,"depth":58,"text":172133},{"id":172191,"depth":58,"text":172192},{"id":172229,"depth":58,"text":172230},{"id":172263,"depth":47,"text":172910},"9.13 if name == \"main\"",{"id":172356,"depth":47,"text":172357},{"id":172401,"depth":47,"text":172402},{"id":172512,"depth":47,"text":172513},{"id":172570,"depth":47,"text":172571},{"id":172827,"depth":47,"text":172828},{"id":172855,"depth":47,"text":172856},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170730,"description":128},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172923,"title":172924,"body":172925,"description":173088,"extension":129,"meta":173089,"navigation":131,"path":173090,"seo":173091,"stem":173092,"__hash__":173093},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172926,"toc":173083},[172927,172930,172933,172936,172947,172949,173023,173026,173029,173032,173035,173038,173041,173044,173047,173050,173053],[10,172928,172924],{"id":172929},"python教程",[14,172931,172932],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,172934,172935],{},"建议学习环境：",[158,172937,172938,172941,172944],{},[161,172939,172940],{},"Python 版本：Python 3.10 及以上。",[161,172942,172943],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[161,172945,172946],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[146,172948,117125],{"id":117125},[158,172950,172951,172957,172963,172969,172975,172981,172987,172993,172999,173005,173011,173017],{},[161,172952,172953],{},[443,172954,172956],{"href":172955},".\u002Fch1-Python","Python环境与第一个程序",[161,172958,172959],{},[443,172960,172962],{"href":172961},".\u002Fch2","基础语法、变量与字符串",[161,172964,172965],{},[443,172966,172968],{"href":172967},".\u002Fch3","判断语句",[161,172970,172971],{},[443,172972,172974],{"href":172973},".\u002Fch4","循环语句",[161,172976,172977],{},[443,172978,172980],{"href":172979},".\u002Fch5","函数基础",[161,172982,172983],{},[443,172984,172986],{"href":172985},".\u002Fch6","数据容器",[161,172988,172989],{},[443,172990,172992],{"href":172991},".\u002Fch7","函数进阶",[161,172994,172995],{},[443,172996,172998],{"href":172997},".\u002Fch8","文件操作",[161,173000,173001],{},[443,173002,173004],{"href":173003},".\u002Fch9","异常、模块与包",[161,173006,173007],{},[443,173008,173010],{"href":173009},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[161,173012,173013],{},[443,173014,173016],{"href":173015},".\u002Fch11","面向对象基础",[161,173018,173019],{},[443,173020,173022],{"href":173021},".\u002Fch12","综合案例与复习路线",[146,173024,173025],{"id":173025},"学习路线",[14,173027,173028],{},"第一阶段：能运行程序。",[14,173030,173031],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,173033,173034],{},"第二阶段：能组织数据。",[14,173036,173037],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,173039,173040],{},"第三阶段：能封装逻辑。",[14,173042,173043],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,173045,173046],{},"第四阶段：能做小项目。",[14,173048,173049],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[146,173051,173052],{"id":173052},"参考资料",[158,173054,173055,173062,173069,173076],{},[161,173056,173057,173058],{},"黑马程序员 Python 入门教程推荐：",[443,173059,173060],{"href":173060,"rel":173061},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[23937],[161,173063,173064,173065],{},"Python 官方中文教程：",[443,173066,173067],{"href":173067,"rel":173068},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23937],[161,173070,173071,173072],{},"Python 标准库文档：",[443,173073,173074],{"href":173074,"rel":173075},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23937],[161,173077,173078,173079],{},"pyecharts 文档：",[443,173080,173081],{"href":173081,"rel":173082},"https:\u002F\u002Fpyecharts.org\u002F",[23937],{"title":32,"searchDepth":47,"depth":47,"links":173084},[173085,173086,173087],{"id":117125,"depth":47,"text":117125},{"id":173025,"depth":47,"text":173025},{"id":173052,"depth":47,"text":173052},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23450},"\u002Fwiki\u002F2024-10-10-python",{"title":172924,"description":173088},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331457049]