[{"data":1,"prerenderedAt":173060},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-12-04-qiang-hua-xue-xi\u002Fch5-alphago-suan-fa":3,"wiki-doc-nav":77},{"id":4,"title":5,"body":6,"description":16,"extension":70,"meta":71,"navigation":72,"path":73,"seo":74,"stem":75,"__hash__":76},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":8,"toc":65},"minimark",[9,13,17,22,25,32,36,39,44,47,52,57,60],[10,11,5],"h1",{"id":12},"_5alphago算法",[14,15,16],"p",{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[18,19,21],"h2",{"id":20},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,23,24],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,26,27],{},[28,29],"img",{"alt":30,"src":31},"","..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[18,33,35],{"id":34},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,37,38],{},"采用强化学习的方式训练策略网络",[14,40,41],{},[28,42],{"alt":30,"src":43},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,45,46],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,48,49],{},[28,50],{"alt":30,"src":51},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,53,54],{},[28,55],{"alt":30,"src":56},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,58,59],{},"强化学习训练策略网络的总结：",[14,61,62],{},[28,63],{"alt":30,"src":64},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":30,"searchDepth":66,"depth":66,"links":67},2,[68,69],{"id":20,"depth":66,"text":21},{"id":34,"depth":66,"text":35},"md",{},true,"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":5,"description":16},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",[78,5193,6301,7721,10710,12061,13550,14639,23402,23415,24014,24040,24164,24405,24450,24468,24481,24528,24652,24821,25020,25200,25405,25541,25636,25673,25686,25996,26737,27445,27466,28486,30117,30268,30281,30293,30594,50406,50421,50438,50471,53343,76691,92836,92857,92970,93091,93861,94524,94885,94923,95029,95129,95172,95198,95259,96913,97014,97039,97530,98030,99110,99393,100135,100637,100649,102665,104329,105832,107530,109447,111366,113388,116858,117290,117753,118502,121446,121794,121816,122172,125479,125491,125894,125917,126064,126231,126436,126737,127294,127951,129882,131480,132129,133623,135054,136289,137983,139735,142145,142261,143196,143407,144292,145527,145755,145768,146923,149335,151703,155024,157501,159145,160922,162935,165987,168167,170694,172888],{"id":79,"title":80,"body":81,"description":30,"extension":70,"meta":5188,"navigation":72,"path":5189,"seo":5190,"stem":5191,"__hash__":5192},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":82,"toc":5160},[83,86,90,93,97,110,114,119,122,125,128,131,134,169,173,176,179,182,185,238,242,261,263,277,280,288,291,1154,1161,1178,1182,1273,1277,1283,1372,1376,1414,1418,1482,1486,1490,1496,1507,1511,1516,1520,1525,1529,1534,1538,1542,1547,1817,1822,1960,1965,2222,2225,2233,2237,2242,2345,2348,2654,2663,2764,2767,2770,2773,2776,3036,3041,3181,3184,3363,3366,3494,3497,3649,3653,3658,3661,3672,3680,3683,3790,3794,3798,3803,3853,3858,3863,3887,3892,3945,3948,3953,4130,4135,4420,4425,4822,4826,4831,4888,4893,4901,4904,5044,5047,5156],[10,84,80],{"id":85},"_1基础入门",[18,87,89],{"id":88},"_11注释","1.1注释",[14,91,92],{},"\u002F\u002F或者\u002F* *\u002F",[18,94,96],{"id":95},"_12命名","1.2命名",[98,99,100,104,107],"ol",{},[101,102,103],"li",{},"字母数字下划线",[101,105,106],{},"开头必须是字母或_",[101,108,109],{},"不能使用关键词",[18,111,113],{"id":112},"_13数据类型","1.3数据类型",[115,116,118],"h3",{"id":117},"_131整形","1.3.1整形",[14,120,121],{},"short 短整形 2",[14,123,124],{},"int 整形 4",[14,126,127],{},"long 长整形 win4 linux32位4 linux64位8",[14,129,130],{},"long long 长长整形 8",[14,132,133],{},"利用sizeof可以求数据类型占用的内存空间大小",[135,136,140],"pre",{"className":137,"code":138,"language":139,"meta":30,"style":30},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[141,142,143,162],"code",{"__ignoreMap":30},[144,145,148,152,156,159],"span",{"class":146,"line":147},"line",1,[144,149,151],{"class":150},"szBVR","sizeof",[144,153,155],{"class":154},"sVt8B","(",[144,157,158],{"class":150},"int",[144,160,161],{"class":154},")\n",[144,163,164,166],{"class":146,"line":66},[144,165,151],{"class":150},[144,167,168],{"class":154},"(num)\n",[115,170,172],{"id":171},"_132浮点型","1.3.2浮点型",[14,174,175],{},"float 单精度 4节 7位有效数字",[14,177,178],{},"double 双精度 8节 15-16有效数字",[14,180,181],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,183,184],{},"注意点：",[135,186,188],{"className":137,"code":187,"language":139,"meta":30,"style":30},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[141,189,190,215],{"__ignoreMap":30},[144,191,192,195,198,201,205,208,211],{"class":146,"line":147},[144,193,194],{"class":150},"float",[144,196,197],{"class":154}," f1",[144,199,200],{"class":150},"=",[144,202,204],{"class":203},"sj4cs","3.14",[144,206,207],{"class":150},"f",[144,209,210],{"class":154},";",[144,212,214],{"class":213},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[144,216,217,219,222,224,227,230,233,235],{"class":146,"line":66},[144,218,194],{"class":150},[144,220,221],{"class":154}," f2",[144,223,200],{"class":150},[144,225,226],{"class":203},"3",[144,228,229],{"class":150},"e",[144,231,232],{"class":203},"2",[144,234,210],{"class":154},[144,236,237],{"class":213}," \u002F\u002F科学记数法\n",[115,239,241],{"id":240},"_133字符型","1.3.3字符型",[135,243,245],{"className":137,"code":244,"language":139,"meta":30,"style":30},"char ch='a'\n",[141,246,247],{"__ignoreMap":30},[144,248,249,252,255,257],{"class":146,"line":147},[144,250,251],{"class":150},"char",[144,253,254],{"class":154}," ch",[144,256,200],{"class":150},[144,258,260],{"class":259},"sZZnC","'a'\n",[14,262,184],{},[98,264,265,268,271,274],{},[101,266,267],{},"在显示字符型变量时，只能单引号，双引号x",[101,269,270],{},"单引号内只能一个字符，不能字符串",[101,272,273],{},"c和c++字符型变量只占用一个字符",[101,275,276],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,278,279],{},"ASCII码大致由以下两部分组成：",[98,281,282,285],{},[101,283,284],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[101,286,287],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,289,290],{},"ASCII码表格：",[292,293,294,338],"table",{},[295,296,297],"thead",{},[298,299,300,308,313,317,322,326,330,334],"tr",{},[301,302,303,307],"th",{},[304,305,306],"strong",{},"ASCII","值",[301,309,310],{},[304,311,312],{},"控制字符",[301,314,315,307],{},[304,316,306],{},[301,318,319],{},[304,320,321],{},"字符",[301,323,324,307],{},[304,325,306],{},[301,327,328],{},[304,329,321],{},[301,331,332,307],{},[304,333,306],{},[301,335,336],{},[304,337,321],{},[339,340,341,368,394,419,444,470,495,520,546,571,597,623,649,674,700,726,752,776,801,826,851,876,901,926,951,976,1001,1027,1052,1077,1102,1128],"tbody",{},[298,342,343,347,350,353,356,359,362,365],{},[344,345,346],"td",{},"0",[344,348,349],{},"NUT",[344,351,352],{},"32",[344,354,355],{},"(space)",[344,357,358],{},"64",[344,360,361],{},"@",[344,363,364],{},"96",[344,366,367],{},"、",[298,369,370,373,376,379,382,385,388,391],{},[344,371,372],{},"1",[344,374,375],{},"SOH",[344,377,378],{},"33",[344,380,381],{},"!",[344,383,384],{},"65",[344,386,387],{},"A",[344,389,390],{},"97",[344,392,393],{},"a",[298,395,396,398,401,404,407,410,413,416],{},[344,397,232],{},[344,399,400],{},"STX",[344,402,403],{},"34",[344,405,406],{},"\"",[344,408,409],{},"66",[344,411,412],{},"B",[344,414,415],{},"98",[344,417,418],{},"b",[298,420,421,423,426,429,432,435,438,441],{},[344,422,226],{},[344,424,425],{},"ETX",[344,427,428],{},"35",[344,430,431],{},"#",[344,433,434],{},"67",[344,436,437],{},"C",[344,439,440],{},"99",[344,442,443],{},"c",[298,445,446,449,452,455,458,461,464,467],{},[344,447,448],{},"4",[344,450,451],{},"EOT",[344,453,454],{},"36",[344,456,457],{},"$",[344,459,460],{},"68",[344,462,463],{},"D",[344,465,466],{},"100",[344,468,469],{},"d",[298,471,472,475,478,481,484,487,490,493],{},[344,473,474],{},"5",[344,476,477],{},"ENQ",[344,479,480],{},"37",[344,482,483],{},"%",[344,485,486],{},"69",[344,488,489],{},"E",[344,491,492],{},"101",[344,494,229],{},[298,496,497,500,503,506,509,512,515,518],{},[344,498,499],{},"6",[344,501,502],{},"ACK",[344,504,505],{},"38",[344,507,508],{},"&",[344,510,511],{},"70",[344,513,514],{},"F",[344,516,517],{},"102",[344,519,207],{},[298,521,522,525,528,531,534,537,540,543],{},[344,523,524],{},"7",[344,526,527],{},"BEL",[344,529,530],{},"39",[344,532,533],{},",",[344,535,536],{},"71",[344,538,539],{},"G",[344,541,542],{},"103",[344,544,545],{},"g",[298,547,548,551,554,557,559,562,565,568],{},[344,549,550],{},"8",[344,552,553],{},"BS",[344,555,556],{},"40",[344,558,155],{},[344,560,561],{},"72",[344,563,564],{},"H",[344,566,567],{},"104",[344,569,570],{},"h",[298,572,573,576,579,582,585,588,591,594],{},[344,574,575],{},"9",[344,577,578],{},"HT",[344,580,581],{},"41",[344,583,584],{},")",[344,586,587],{},"73",[344,589,590],{},"I",[344,592,593],{},"105",[344,595,596],{},"i",[298,598,599,602,605,608,611,614,617,620],{},[344,600,601],{},"10",[344,603,604],{},"LF",[344,606,607],{},"42",[344,609,610],{},"*",[344,612,613],{},"74",[344,615,616],{},"J",[344,618,619],{},"106",[344,621,622],{},"j",[298,624,625,628,631,634,637,640,643,646],{},[344,626,627],{},"11",[344,629,630],{},"VT",[344,632,633],{},"43",[344,635,636],{},"+",[344,638,639],{},"75",[344,641,642],{},"K",[344,644,645],{},"107",[344,647,648],{},"k",[298,650,651,654,657,660,662,665,668,671],{},[344,652,653],{},"12",[344,655,656],{},"FF",[344,658,659],{},"44",[344,661,533],{},[344,663,664],{},"76",[344,666,667],{},"L",[344,669,670],{},"108",[344,672,673],{},"l",[298,675,676,679,682,685,688,691,694,697],{},[344,677,678],{},"13",[344,680,681],{},"CR",[344,683,684],{},"45",[344,686,687],{},"-",[344,689,690],{},"77",[344,692,693],{},"M",[344,695,696],{},"109",[344,698,699],{},"m",[298,701,702,705,708,711,714,717,720,723],{},[344,703,704],{},"14",[344,706,707],{},"SO",[344,709,710],{},"46",[344,712,713],{},".",[344,715,716],{},"78",[344,718,719],{},"N",[344,721,722],{},"110",[344,724,725],{},"n",[298,727,728,731,734,737,740,743,746,749],{},[344,729,730],{},"15",[344,732,733],{},"SI",[344,735,736],{},"47",[344,738,739],{},"\u002F",[344,741,742],{},"79",[344,744,745],{},"O",[344,747,748],{},"111",[344,750,751],{},"o",[298,753,754,757,760,763,765,768,771,774],{},[344,755,756],{},"16",[344,758,759],{},"DLE",[344,761,762],{},"48",[344,764,346],{},[344,766,767],{},"80",[344,769,770],{},"P",[344,772,773],{},"112",[344,775,14],{},[298,777,778,781,784,787,789,792,795,798],{},[344,779,780],{},"17",[344,782,783],{},"DCI",[344,785,786],{},"49",[344,788,372],{},[344,790,791],{},"81",[344,793,794],{},"Q",[344,796,797],{},"113",[344,799,800],{},"q",[298,802,803,806,809,812,814,817,820,823],{},[344,804,805],{},"18",[344,807,808],{},"DC2",[344,810,811],{},"50",[344,813,232],{},[344,815,816],{},"82",[344,818,819],{},"R",[344,821,822],{},"114",[344,824,825],{},"r",[298,827,828,831,834,837,839,842,845,848],{},[344,829,830],{},"19",[344,832,833],{},"DC3",[344,835,836],{},"51",[344,838,226],{},[344,840,841],{},"83",[344,843,844],{},"S",[344,846,847],{},"115",[344,849,850],{},"s",[298,852,853,856,859,862,864,867,870,873],{},[344,854,855],{},"20",[344,857,858],{},"DC4",[344,860,861],{},"52",[344,863,448],{},[344,865,866],{},"84",[344,868,869],{},"T",[344,871,872],{},"116",[344,874,875],{},"t",[298,877,878,881,884,887,889,892,895,898],{},[344,879,880],{},"21",[344,882,883],{},"NAK",[344,885,886],{},"53",[344,888,474],{},[344,890,891],{},"85",[344,893,894],{},"U",[344,896,897],{},"117",[344,899,900],{},"u",[298,902,903,906,909,912,914,917,920,923],{},[344,904,905],{},"22",[344,907,908],{},"SYN",[344,910,911],{},"54",[344,913,499],{},[344,915,916],{},"86",[344,918,919],{},"V",[344,921,922],{},"118",[344,924,925],{},"v",[298,927,928,931,934,937,939,942,945,948],{},[344,929,930],{},"23",[344,932,933],{},"TB",[344,935,936],{},"55",[344,938,524],{},[344,940,941],{},"87",[344,943,944],{},"W",[344,946,947],{},"119",[344,949,950],{},"w",[298,952,953,956,959,962,964,967,970,973],{},[344,954,955],{},"24",[344,957,958],{},"CAN",[344,960,961],{},"56",[344,963,550],{},[344,965,966],{},"88",[344,968,969],{},"X",[344,971,972],{},"120",[344,974,975],{},"x",[298,977,978,981,984,987,989,992,995,998],{},[344,979,980],{},"25",[344,982,983],{},"EM",[344,985,986],{},"57",[344,988,575],{},[344,990,991],{},"89",[344,993,994],{},"Y",[344,996,997],{},"121",[344,999,1000],{},"y",[298,1002,1003,1006,1009,1012,1015,1018,1021,1024],{},[344,1004,1005],{},"26",[344,1007,1008],{},"SUB",[344,1010,1011],{},"58",[344,1013,1014],{},":",[344,1016,1017],{},"90",[344,1019,1020],{},"Z",[344,1022,1023],{},"122",[344,1025,1026],{},"z",[298,1028,1029,1032,1035,1038,1040,1043,1046,1049],{},[344,1030,1031],{},"27",[344,1033,1034],{},"ESC",[344,1036,1037],{},"59",[344,1039,210],{},[344,1041,1042],{},"91",[344,1044,1045],{},"[",[344,1047,1048],{},"123",[344,1050,1051],{},"{",[298,1053,1054,1057,1060,1063,1066,1069,1071,1074],{},[344,1055,1056],{},"28",[344,1058,1059],{},"FS",[344,1061,1062],{},"60",[344,1064,1065],{},"\u003C",[344,1067,1068],{},"92",[344,1070,739],{},[344,1072,1073],{},"124",[344,1075,1076],{},"|",[298,1078,1079,1082,1085,1088,1090,1093,1096,1099],{},[344,1080,1081],{},"29",[344,1083,1084],{},"GS",[344,1086,1087],{},"61",[344,1089,200],{},[344,1091,1092],{},"93",[344,1094,1095],{},"]",[344,1097,1098],{},"125",[344,1100,1101],{},"}",[298,1103,1104,1107,1110,1113,1116,1119,1122,1125],{},[344,1105,1106],{},"30",[344,1108,1109],{},"RS",[344,1111,1112],{},"62",[344,1114,1115],{},">",[344,1117,1118],{},"94",[344,1120,1121],{},"^",[344,1123,1124],{},"126",[344,1126,1127],{},"`",[298,1129,1130,1133,1136,1139,1142,1145,1148,1151],{},[344,1131,1132],{},"31",[344,1134,1135],{},"US",[344,1137,1138],{},"63",[344,1140,1141],{},"?",[344,1143,1144],{},"95",[344,1146,1147],{},"_",[344,1149,1150],{},"127",[344,1152,1153],{},"DEL",[14,1155,1156,1157,1160],{},"ASCII 码大致由以下",[304,1158,1159],{},"两部分组","成：",[1162,1163,1164,1171],"ul",{},[101,1165,1166,1167,1170],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[304,1168,1169],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[101,1172,1173,1174,1177],{},"ASCII 打印字符：数字 ",[304,1175,1176],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[115,1179,1181],{"id":1180},"_134转义字符","1.3.4转义字符",[135,1183,1185],{"className":137,"code":1184,"language":139,"meta":30,"style":30},"\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",[141,1186,1187,1192,1208,1223,1229,1243,1249],{"__ignoreMap":30},[144,1188,1189],{"class":146,"line":147},[144,1190,1191],{"class":213},"\u002F\u002F换行符\n",[144,1193,1194,1197,1200,1203,1205],{"class":146,"line":66},[144,1195,1196],{"class":154},"cout ",[144,1198,1199],{"class":150},"\u003C\u003C",[144,1201,1202],{"class":259},"\"hello world\u002Fn\"",[144,1204,210],{"class":154},[144,1206,1207],{"class":213}," \u002F\u002F就等同于如下：\n",[144,1209,1211,1213,1215,1218,1220],{"class":146,"line":1210},3,[144,1212,1196],{"class":154},[144,1214,1199],{"class":150},[144,1216,1217],{"class":259},"\"hello world\"",[144,1219,1199],{"class":150},[144,1221,1222],{"class":154},"endl;\n",[144,1224,1226],{"class":146,"line":1225},4,[144,1227,1228],{"class":213},"\u002F\u002F反斜杠\n",[144,1230,1232,1234,1236,1239,1241],{"class":146,"line":1231},5,[144,1233,1196],{"class":154},[144,1235,1199],{"class":150},[144,1237,1238],{"class":259},"\"\u002F\u002F\"",[144,1240,1199],{"class":150},[144,1242,1222],{"class":154},[144,1244,1246],{"class":146,"line":1245},6,[144,1247,1248],{"class":213},"\u002F\u002F水平制表符\n",[144,1250,1252,1254,1256,1259,1262,1265,1267,1270],{"class":146,"line":1251},7,[144,1253,1196],{"class":154},[144,1255,1199],{"class":150},[144,1257,1258],{"class":259},"\"aaaa",[144,1260,1261],{"class":203},"\\t",[144,1263,1264],{"class":259},"helloworld\"",[144,1266,1199],{"class":150},[144,1268,1269],{"class":154},"endl;",[144,1271,1272],{"class":213}," \u002F\u002F输出窗口时有对齐效果\n",[115,1274,1276],{"id":1275},"_135字符串型","1.3.5字符串型",[14,1278,1279,1280,1282],{},"char 变量名",[144,1281],{},"=\"字符串值\"",[135,1284,1286],{"className":137,"code":1285,"language":139,"meta":30,"style":30},"\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",[141,1287,1288,1293,1298,1303,1308,1322,1335,1340,1346,1358],{"__ignoreMap":30},[144,1289,1290],{"class":146,"line":147},[144,1291,1292],{"class":213},"\u002F\u002Fc风格字符串\n",[144,1294,1295],{"class":146,"line":66},[144,1296,1297],{"class":213},"\u002F\u002F注意事项：\n",[144,1299,1300],{"class":146,"line":1210},[144,1301,1302],{"class":213},"\u002F\u002F1.char字符串名[]\n",[144,1304,1305],{"class":146,"line":1225},[144,1306,1307],{"class":213},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[144,1309,1310,1312,1315,1317,1319],{"class":146,"line":1231},[144,1311,251],{"class":150},[144,1313,1314],{"class":154}," str[]",[144,1316,200],{"class":150},[144,1318,1217],{"class":259},[144,1320,1321],{"class":154},";\n",[144,1323,1324,1326,1328,1331,1333],{"class":146,"line":1245},[144,1325,1196],{"class":154},[144,1327,1199],{"class":150},[144,1329,1330],{"class":154},"str",[144,1332,1199],{"class":150},[144,1334,1222],{"class":154},[144,1336,1337],{"class":146,"line":1251},[144,1338,1339],{"class":213},"\u002F\u002Fc++风格字符串\n",[144,1341,1343],{"class":146,"line":1342},8,[144,1344,1345],{"class":213},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[144,1347,1349,1352,1354,1356],{"class":146,"line":1348},9,[144,1350,1351],{"class":154},"string str2",[144,1353,200],{"class":150},[144,1355,1217],{"class":259},[144,1357,1321],{"class":154},[144,1359,1361,1363,1365,1368,1370],{"class":146,"line":1360},10,[144,1362,1196],{"class":154},[144,1364,1199],{"class":150},[144,1366,1367],{"class":154},"str2",[144,1369,1199],{"class":150},[144,1371,1222],{"class":154},[115,1373,1375],{"id":1374},"_136布尔类型bool","1.3.6布尔类型bool",[135,1377,1379],{"className":137,"code":1378,"language":139,"meta":30,"style":30},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[141,1380,1381,1396],{"__ignoreMap":30},[144,1382,1383,1386,1389,1391,1394],{"class":146,"line":147},[144,1384,1385],{"class":150},"bool",[144,1387,1388],{"class":154}," flag",[144,1390,200],{"class":150},[144,1392,1393],{"class":203},"true",[144,1395,1321],{"class":154},[144,1397,1398,1401,1404,1407,1409,1411],{"class":146,"line":66},[144,1399,1400],{"class":154},"cout",[144,1402,1403],{"class":150},"\u003C\u003Csizeof",[144,1405,1406],{"class":154},"(flag)",[144,1408,1199],{"class":150},[144,1410,1269],{"class":154},[144,1412,1413],{"class":213}," \u002F\u002F查看布尔占内存空间\n",[18,1415,1417],{"id":1416},"_14键盘输入cin","1.4键盘输入cin",[135,1419,1421],{"className":137,"code":1420,"language":139,"meta":30,"style":30},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[141,1422,1423,1436,1453,1464],{"__ignoreMap":30},[144,1424,1425,1427,1430,1432,1434],{"class":146,"line":147},[144,1426,158],{"class":150},[144,1428,1429],{"class":154}," a",[144,1431,200],{"class":150},[144,1433,346],{"class":203},[144,1435,1321],{"class":154},[144,1437,1438,1440,1442,1445,1447,1449,1451],{"class":146,"line":66},[144,1439,1400],{"class":154},[144,1441,1199],{"class":150},[144,1443,1444],{"class":259},"\"请给整型变量a赋值\"",[144,1446,1199],{"class":150},[144,1448,393],{"class":154},[144,1450,1199],{"class":150},[144,1452,1222],{"class":154},[144,1454,1455,1458,1461],{"class":146,"line":1210},[144,1456,1457],{"class":154},"cin ",[144,1459,1460],{"class":150},">>",[144,1462,1463],{"class":154}," a;\n",[144,1465,1466,1468,1470,1473,1476,1478,1480],{"class":146,"line":1225},[144,1467,1196],{"class":154},[144,1469,1199],{"class":150},[144,1471,1472],{"class":259}," \"整型变量a=\"",[144,1474,1475],{"class":150}," \u003C\u003C",[144,1477,393],{"class":154},[144,1479,1199],{"class":150},[144,1481,1222],{"class":154},[18,1483,1485],{"id":1484},"_15运算符","1.5运算符",[115,1487,1489],{"id":1488},"_151算术运算符","1.5.1算术运算符",[14,1491,1492,1495],{},[28,1493],{"alt":30,"src":1494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[98,1497,1498,1501,1504],{},[101,1499,1500],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[101,1502,1503],{},"两个小数不可以做取模运算",[101,1505,1506],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[115,1508,1510],{"id":1509},"_152赋值运算符","1.5.2赋值运算符",[14,1512,1513],{},[28,1514],{"alt":30,"src":1515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[115,1517,1519],{"id":1518},"_153比较运算符","1.5.3比较运算符",[14,1521,1522],{},[28,1523],{"alt":30,"src":1524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[115,1526,1528],{"id":1527},"_154逻辑运算符","1.5.4逻辑运算符",[14,1530,1531],{},[28,1532],{"alt":30,"src":1533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[18,1535,1537],{"id":1536},"_16程序流程结构","1.6程序流程结构",[115,1539,1541],{"id":1540},"_161选择结构","1.6.1选择结构",[98,1543,1544],{},[101,1545,1546],{},"if语句\n单行、多行、多条件if语句",[135,1548,1550],{"className":137,"code":1549,"language":139,"meta":30,"style":30},"\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",[141,1551,1552,1557,1572,1577,1591,1596,1601,1610,1623,1627,1640,1645,1651,1656,1670,1675,1681,1702,1707,1721,1726,1755,1760,1777,1782,1787,1792,1806,1811],{"__ignoreMap":30},[144,1553,1554],{"class":146,"line":147},[144,1555,1556],{"class":213},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[144,1558,1559,1562,1565,1567,1570],{"class":146,"line":66},[144,1560,1561],{"class":150},"if",[144,1563,1564],{"class":154},"(score",[144,1566,1115],{"class":150},[144,1568,1569],{"class":203},"600",[144,1571,161],{"class":154},[144,1573,1574],{"class":146,"line":1210},[144,1575,1576],{"class":154},"{\n",[144,1578,1579,1582,1584,1587,1589],{"class":146,"line":1225},[144,1580,1581],{"class":154},"    cout",[144,1583,1199],{"class":150},[144,1585,1586],{"class":259},"'这是单行if语句'",[144,1588,1199],{"class":150},[144,1590,1222],{"class":154},[144,1592,1593],{"class":146,"line":1231},[144,1594,1595],{"class":154},"}\n",[144,1597,1598],{"class":146,"line":1245},[144,1599,1600],{"class":213},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[144,1602,1603,1605,1607],{"class":146,"line":1251},[144,1604,1457],{"class":154},[144,1606,1460],{"class":150},[144,1608,1609],{"class":154}," score\n",[144,1611,1612,1614,1616,1619,1621],{"class":146,"line":1342},[144,1613,1561],{"class":150},[144,1615,1564],{"class":154},[144,1617,1618],{"class":150},"\u003C=",[144,1620,1569],{"class":203},[144,1622,161],{"class":154},[144,1624,1625],{"class":146,"line":1348},[144,1626,1576],{"class":154},[144,1628,1629,1631,1633,1636,1638],{"class":146,"line":1360},[144,1630,1581],{"class":154},[144,1632,1460],{"class":150},[144,1634,1635],{"class":259},"\"小于等于600\"",[144,1637,1199],{"class":150},[144,1639,1222],{"class":154},[144,1641,1643],{"class":146,"line":1642},11,[144,1644,1595],{"class":154},[144,1646,1648],{"class":146,"line":1647},12,[144,1649,1650],{"class":150},"else\n",[144,1652,1654],{"class":146,"line":1653},13,[144,1655,1576],{"class":154},[144,1657,1659,1661,1663,1666,1668],{"class":146,"line":1658},14,[144,1660,1581],{"class":154},[144,1662,1460],{"class":150},[144,1664,1665],{"class":259},"\"大于600\"",[144,1667,1460],{"class":150},[144,1669,1222],{"class":154},[144,1671,1673],{"class":146,"line":1672},15,[144,1674,1595],{"class":154},[144,1676,1678],{"class":146,"line":1677},16,[144,1679,1680],{"class":213},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[144,1682,1684,1686,1689,1691,1693,1696,1698,1700],{"class":146,"line":1683},17,[144,1685,1561],{"class":150},[144,1687,1688],{"class":154}," (",[144,1690,346],{"class":203},[144,1692,1065],{"class":150},[144,1694,1695],{"class":154},"num",[144,1697,1065],{"class":150},[144,1699,466],{"class":203},[144,1701,161],{"class":154},[144,1703,1705],{"class":146,"line":1704},18,[144,1706,1576],{"class":154},[144,1708,1710,1712,1714,1717,1719],{"class":146,"line":1709},19,[144,1711,1581],{"class":154},[144,1713,1199],{"class":150},[144,1715,1716],{"class":259},"\"小于100\"",[144,1718,1199],{"class":150},[144,1720,1222],{"class":154},[144,1722,1724],{"class":146,"line":1723},20,[144,1725,1595],{"class":154},[144,1727,1729,1732,1735,1738,1741,1743,1746,1748,1750,1753],{"class":146,"line":1728},21,[144,1730,1731],{"class":150},"else",[144,1733,1734],{"class":150}," if",[144,1736,1737],{"class":154}," (nmu",[144,1739,1740],{"class":150},">=",[144,1742,466],{"class":203},[144,1744,1745],{"class":150},"&&",[144,1747,1695],{"class":154},[144,1749,1065],{"class":150},[144,1751,1752],{"class":203},"200",[144,1754,161],{"class":154},[144,1756,1758],{"class":146,"line":1757},22,[144,1759,1576],{"class":154},[144,1761,1763,1765,1767,1770,1772,1774],{"class":146,"line":1762},23,[144,1764,1581],{"class":154},[144,1766,1199],{"class":150},[144,1768,1769],{"class":259},"\"不小于100且小于200\"",[144,1771,1199],{"class":150},[144,1773,1269],{"class":154},[144,1775,1776],{"class":213}," \u002F\u002F可以无限else if,python中是elif：\n",[144,1778,1780],{"class":146,"line":1779},24,[144,1781,1595],{"class":154},[144,1783,1785],{"class":146,"line":1784},25,[144,1786,1650],{"class":150},[144,1788,1790],{"class":146,"line":1789},26,[144,1791,1576],{"class":154},[144,1793,1795,1797,1799,1802,1804],{"class":146,"line":1794},27,[144,1796,1581],{"class":154},[144,1798,1199],{"class":150},[144,1800,1801],{"class":259},"\"不小于200\"",[144,1803,1199],{"class":150},[144,1805,1222],{"class":154},[144,1807,1809],{"class":146,"line":1808},28,[144,1810,1595],{"class":154},[144,1812,1814],{"class":146,"line":1813},29,[144,1815,1816],{"class":213},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[98,1818,1819],{"start":66},[101,1820,1821],{},"三目运算符",[135,1823,1825],{"className":137,"code":1824,"language":139,"meta":30,"style":30},"\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",[141,1826,1827,1832,1837,1863,1885,1902,1907,1930,1945],{"__ignoreMap":30},[144,1828,1829],{"class":146,"line":147},[144,1830,1831],{"class":213},"\u002F\u002F创建三个变量a,b,c\n",[144,1833,1834],{"class":146,"line":66},[144,1835,1836],{"class":213},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[144,1838,1839,1841,1843,1845,1847,1850,1852,1854,1857,1859,1861],{"class":146,"line":1210},[144,1840,158],{"class":150},[144,1842,1429],{"class":154},[144,1844,200],{"class":150},[144,1846,855],{"class":203},[144,1848,1849],{"class":154},",b",[144,1851,200],{"class":150},[144,1853,601],{"class":203},[144,1855,1856],{"class":154},",c",[144,1858,200],{"class":150},[144,1860,346],{"class":203},[144,1862,1321],{"class":154},[144,1864,1865,1867,1869,1872,1874,1876,1878,1880,1882],{"class":146,"line":1225},[144,1866,443],{"class":154},[144,1868,200],{"class":150},[144,1870,1871],{"class":154},"(a",[144,1873,1115],{"class":150},[144,1875,418],{"class":154},[144,1877,1141],{"class":150},[144,1879,393],{"class":154},[144,1881,1014],{"class":150},[144,1883,1884],{"class":154},"b)\n",[144,1886,1887,1889,1891,1894,1896,1898,1900],{"class":146,"line":1231},[144,1888,1400],{"class":154},[144,1890,1199],{"class":150},[144,1892,1893],{"class":259},"\"c=\"",[144,1895,1199],{"class":150},[144,1897,443],{"class":154},[144,1899,1199],{"class":150},[144,1901,1222],{"class":154},[144,1903,1904],{"class":146,"line":1245},[144,1905,1906],{"class":213},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[144,1908,1909,1911,1913,1915,1917,1919,1921,1924,1926,1928],{"class":146,"line":1251},[144,1910,1871],{"class":154},[144,1912,1115],{"class":150},[144,1914,418],{"class":154},[144,1916,1141],{"class":150},[144,1918,393],{"class":154},[144,1920,1014],{"class":150},[144,1922,1923],{"class":154},"b)",[144,1925,200],{"class":150},[144,1927,466],{"class":203},[144,1929,1321],{"class":154},[144,1931,1932,1934,1936,1938,1940,1942],{"class":146,"line":1342},[144,1933,1400],{"class":154},[144,1935,1199],{"class":150},[144,1937,393],{"class":154},[144,1939,1199],{"class":150},[144,1941,1269],{"class":154},[144,1943,1944],{"class":213}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[144,1946,1947,1949,1951,1953,1955,1957],{"class":146,"line":1348},[144,1948,1400],{"class":154},[144,1950,1199],{"class":150},[144,1952,418],{"class":154},[144,1954,1199],{"class":150},[144,1956,1269],{"class":154},[144,1958,1959],{"class":213}," \u002F\u002F10   a>b,b还是原值\n",[98,1961,1962],{"start":1210},[101,1963,1964],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[135,1966,1968],{"className":137,"code":1967,"language":139,"meta":30,"style":30},"\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",[141,1969,1970,1975,1983,1997,2007,2011,2025,2038,2048,2056,2061,2086,2107,2129,2150,2172,2193,2213,2218],{"__ignoreMap":30},[144,1971,1972],{"class":146,"line":147},[144,1973,1974],{"class":213},"\u002F\u002F案例-电影打分\n",[144,1976,1977,1980],{"class":146,"line":66},[144,1978,1979],{"class":150},"#include",[144,1981,1982],{"class":259},"\u003Ciostream>\n",[144,1984,1985,1988,1991,1995],{"class":146,"line":1210},[144,1986,1987],{"class":150},"using",[144,1989,1990],{"class":150}," namespace",[144,1992,1994],{"class":1993},"sScJk"," std",[144,1996,1321],{"class":154},[144,1998,1999,2001,2004],{"class":146,"line":1225},[144,2000,158],{"class":150},[144,2002,2003],{"class":1993}," main",[144,2005,2006],{"class":154},"()\n",[144,2008,2009],{"class":146,"line":1231},[144,2010,1576],{"class":154},[144,2012,2013,2016,2019,2021,2023],{"class":146,"line":1245},[144,2014,2015],{"class":150},"    int",[144,2017,2018],{"class":154}," score",[144,2020,200],{"class":150},[144,2022,346],{"class":203},[144,2024,1321],{"class":154},[144,2026,2027,2029,2031,2034,2036],{"class":146,"line":1251},[144,2028,1581],{"class":154},[144,2030,1199],{"class":150},[144,2032,2033],{"class":259},"\"电影打分：\"",[144,2035,1199],{"class":150},[144,2037,1222],{"class":154},[144,2039,2040,2043,2045],{"class":146,"line":1342},[144,2041,2042],{"class":154},"    cin",[144,2044,1460],{"class":150},[144,2046,2047],{"class":154},"score;\n",[144,2049,2050,2053],{"class":146,"line":1348},[144,2051,2052],{"class":150},"    switch",[144,2054,2055],{"class":154},"(score)\n",[144,2057,2058],{"class":146,"line":1360},[144,2059,2060],{"class":154},"    {\n",[144,2062,2063,2066,2069,2072,2074,2077,2079,2081,2084],{"class":146,"line":1642},[144,2064,2065],{"class":150},"        case",[144,2067,2068],{"class":203}," 10",[144,2070,2071],{"class":154},":cout",[144,2073,1199],{"class":150},[144,2075,2076],{"class":259},"\"经典\"",[144,2078,1199],{"class":150},[144,2080,1269],{"class":154},[144,2082,2083],{"class":150},"break",[144,2085,1321],{"class":154},[144,2087,2088,2090,2093,2095,2097,2099,2101,2103,2105],{"class":146,"line":1647},[144,2089,2065],{"class":150},[144,2091,2092],{"class":203}," 9",[144,2094,2071],{"class":154},[144,2096,1199],{"class":150},[144,2098,2076],{"class":259},[144,2100,1199],{"class":150},[144,2102,1269],{"class":154},[144,2104,2083],{"class":150},[144,2106,1321],{"class":154},[144,2108,2109,2111,2114,2116,2118,2121,2123,2125,2127],{"class":146,"line":1653},[144,2110,2065],{"class":150},[144,2112,2113],{"class":203}," 8",[144,2115,2071],{"class":154},[144,2117,1199],{"class":150},[144,2119,2120],{"class":259},"\"非常好\"",[144,2122,1199],{"class":150},[144,2124,1269],{"class":154},[144,2126,2083],{"class":150},[144,2128,1321],{"class":154},[144,2130,2131,2133,2136,2138,2140,2142,2144,2146,2148],{"class":146,"line":1658},[144,2132,2065],{"class":150},[144,2134,2135],{"class":203}," 7",[144,2137,2071],{"class":154},[144,2139,1199],{"class":150},[144,2141,2120],{"class":259},[144,2143,1199],{"class":150},[144,2145,1269],{"class":154},[144,2147,2083],{"class":150},[144,2149,1321],{"class":154},[144,2151,2152,2154,2157,2159,2161,2164,2166,2168,2170],{"class":146,"line":1672},[144,2153,2065],{"class":150},[144,2155,2156],{"class":203}," 6",[144,2158,2071],{"class":154},[144,2160,1199],{"class":150},[144,2162,2163],{"class":259},"\"一般\"",[144,2165,1199],{"class":150},[144,2167,1269],{"class":154},[144,2169,2083],{"class":150},[144,2171,1321],{"class":154},[144,2173,2174,2176,2179,2181,2183,2185,2187,2189,2191],{"class":146,"line":1677},[144,2175,2065],{"class":150},[144,2177,2178],{"class":203}," 5",[144,2180,2071],{"class":154},[144,2182,1199],{"class":150},[144,2184,2163],{"class":259},[144,2186,1199],{"class":150},[144,2188,1269],{"class":154},[144,2190,2083],{"class":150},[144,2192,1321],{"class":154},[144,2194,2195,2198,2200,2202,2205,2207,2209,2211],{"class":146,"line":1683},[144,2196,2197],{"class":150},"        default",[144,2199,2071],{"class":154},[144,2201,1199],{"class":150},[144,2203,2204],{"class":259},"\"烂片\"",[144,2206,1199],{"class":150},[144,2208,1269],{"class":154},[144,2210,2083],{"class":150},[144,2212,1321],{"class":154},[144,2214,2215],{"class":146,"line":1704},[144,2216,2217],{"class":154},"    }\n",[144,2219,2220],{"class":146,"line":1709},[144,2221,1595],{"class":154},[14,2223,2224],{},"if和switch区别：",[1162,2226,2227,2230],{},[101,2228,2229],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[101,2231,2232],{},"switch优点：结构清晰，执行效率高",[115,2234,2236],{"id":2235},"_162循环结构","1.6.2循环结构",[98,2238,2239],{},[101,2240,2241],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[135,2243,2245],{"className":137,"code":2244,"language":139,"meta":30,"style":30},"\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",[141,2246,2247,2252,2260,2264,2277,2291,2295,2315,2325,2329,2341],{"__ignoreMap":30},[144,2248,2249],{"class":146,"line":147},[144,2250,2251],{"class":213},"\u002F\u002F打印0-9数字\n",[144,2253,2254,2256,2258],{"class":146,"line":66},[144,2255,158],{"class":150},[144,2257,2003],{"class":1993},[144,2259,2006],{"class":154},[144,2261,2262],{"class":146,"line":1210},[144,2263,1576],{"class":154},[144,2265,2266,2268,2271,2273,2275],{"class":146,"line":1225},[144,2267,2015],{"class":150},[144,2269,2270],{"class":154}," num",[144,2272,200],{"class":150},[144,2274,346],{"class":203},[144,2276,1321],{"class":154},[144,2278,2279,2282,2285,2287,2289],{"class":146,"line":1231},[144,2280,2281],{"class":150},"    while",[144,2283,2284],{"class":154},"(num",[144,2286,1065],{"class":150},[144,2288,601],{"class":203},[144,2290,161],{"class":154},[144,2292,2293],{"class":146,"line":1245},[144,2294,2060],{"class":154},[144,2296,2297,2300,2303,2305,2307,2309,2312],{"class":146,"line":1251},[144,2298,2299],{"class":1993},"       std",[144,2301,2302],{"class":154},"::cout",[144,2304,1199],{"class":150},[144,2306,1695],{"class":154},[144,2308,1199],{"class":150},[144,2310,2311],{"class":1993},"std",[144,2313,2314],{"class":154},"::endl;\n",[144,2316,2317,2320,2323],{"class":146,"line":1342},[144,2318,2319],{"class":154},"        num",[144,2321,2322],{"class":150},"++",[144,2324,1321],{"class":154},[144,2326,2327],{"class":146,"line":1348},[144,2328,2217],{"class":154},[144,2330,2331,2334,2336,2339],{"class":146,"line":1360},[144,2332,2333],{"class":1993},"    system",[144,2335,155],{"class":154},[144,2337,2338],{"class":259},"\"pause\"",[144,2340,161],{"class":154},[144,2342,2343],{"class":146,"line":1642},[144,2344,1595],{"class":154},[14,2346,2347],{},"注意：写好循环条件，避免死循环情况",[135,2349,2351],{"className":137,"code":2350,"language":139,"meta":30,"style":30},"\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",[141,2352,2353,2358,2365,2372,2382,2390,2394,2399,2426,2431,2436,2444,2471,2476,2481,2494,2504,2508,2518,2523,2536,2541,2555,2560,2575,2579,2592,2596,2601,2605,2619,2627,2632,2638,2644,2649],{"__ignoreMap":30},[144,2354,2355],{"class":146,"line":147},[144,2356,2357],{"class":213},"\u002F\u002F循环结构-猜数字\n",[144,2359,2360,2362],{"class":146,"line":66},[144,2361,1979],{"class":150},[144,2363,2364],{"class":259}," \u003Ciostream>\n",[144,2366,2367,2369],{"class":146,"line":1210},[144,2368,1979],{"class":150},[144,2370,2371],{"class":259}," \u003Cctime>\n",[144,2373,2374,2376,2378,2380],{"class":146,"line":1225},[144,2375,1987],{"class":150},[144,2377,1990],{"class":150},[144,2379,1994],{"class":1993},[144,2381,1321],{"class":154},[144,2383,2384,2386,2388],{"class":146,"line":1231},[144,2385,158],{"class":150},[144,2387,2003],{"class":1993},[144,2389,2006],{"class":154},[144,2391,2392],{"class":146,"line":1245},[144,2393,1576],{"class":154},[144,2395,2396],{"class":146,"line":1251},[144,2397,2398],{"class":213},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[144,2400,2401,2404,2407,2410,2413,2415,2418,2420,2423],{"class":146,"line":1342},[144,2402,2403],{"class":1993},"    srand",[144,2405,2406],{"class":154},"((",[144,2408,2409],{"class":150},"unsigned",[144,2411,2412],{"class":150}," int",[144,2414,584],{"class":154},[144,2416,2417],{"class":1993},"time",[144,2419,155],{"class":154},[144,2421,2422],{"class":203},"NULL",[144,2424,2425],{"class":154},"));\n",[144,2427,2428],{"class":146,"line":1348},[144,2429,2430],{"emptyLinePlaceholder":72},"\n",[144,2432,2433],{"class":146,"line":1360},[144,2434,2435],{"class":213},"    \u002F\u002F1.系统生成随机数\n",[144,2437,2438,2441],{"class":146,"line":1642},[144,2439,2440],{"class":213},"    \u002F\u002Frand()%100",[144,2442,2443],{"class":213}," \u002F\u002F生成0-99的随机数\n",[144,2445,2446,2448,2450,2452,2455,2458,2460,2462,2464,2466,2468],{"class":146,"line":1647},[144,2447,2015],{"class":150},[144,2449,2270],{"class":154},[144,2451,200],{"class":150},[144,2453,2454],{"class":1993},"rand",[144,2456,2457],{"class":154},"()",[144,2459,483],{"class":150},[144,2461,466],{"class":203},[144,2463,636],{"class":150},[144,2465,372],{"class":203},[144,2467,210],{"class":154},[144,2469,2470],{"class":213}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[144,2472,2473],{"class":146,"line":1653},[144,2474,2475],{"class":213},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[144,2477,2478],{"class":146,"line":1658},[144,2479,2480],{"class":213},"    \u002F\u002F2.玩家猜测\n",[144,2482,2483,2485,2488,2490,2492],{"class":146,"line":1672},[144,2484,2015],{"class":150},[144,2486,2487],{"class":154}," val",[144,2489,200],{"class":150},[144,2491,346],{"class":203},[144,2493,1321],{"class":154},[144,2495,2496,2498,2500,2502],{"class":146,"line":1677},[144,2497,2281],{"class":150},[144,2499,1688],{"class":154},[144,2501,372],{"class":203},[144,2503,161],{"class":154},[144,2505,2506],{"class":146,"line":1683},[144,2507,2060],{"class":154},[144,2509,2510,2513,2515],{"class":146,"line":1704},[144,2511,2512],{"class":154},"        cin",[144,2514,1460],{"class":150},[144,2516,2517],{"class":154},"val;\n",[144,2519,2520],{"class":146,"line":1709},[144,2521,2522],{"class":213},"        \u002F\u002F3.判断玩家猜测\n",[144,2524,2525,2528,2531,2533],{"class":146,"line":1723},[144,2526,2527],{"class":150},"        if",[144,2529,2530],{"class":154},"(val",[144,2532,1065],{"class":150},[144,2534,2535],{"class":154},"num) \n",[144,2537,2538],{"class":146,"line":1728},[144,2539,2540],{"class":154},"        {\n",[144,2542,2543,2546,2548,2551,2553],{"class":146,"line":1757},[144,2544,2545],{"class":154},"            cout",[144,2547,1199],{"class":150},[144,2549,2550],{"class":259},"\"猜小了！\"",[144,2552,1199],{"class":150},[144,2554,1222],{"class":154},[144,2556,2557],{"class":146,"line":1762},[144,2558,2559],{"class":154},"        }\n",[144,2561,2562,2565,2567,2570,2572],{"class":146,"line":1779},[144,2563,2564],{"class":150},"        else",[144,2566,1734],{"class":150},[144,2568,2569],{"class":154}," (val",[144,2571,1115],{"class":150},[144,2573,2574],{"class":154},"num)\n",[144,2576,2577],{"class":146,"line":1784},[144,2578,2540],{"class":154},[144,2580,2581,2583,2585,2588,2590],{"class":146,"line":1789},[144,2582,2545],{"class":154},[144,2584,1199],{"class":150},[144,2586,2587],{"class":259},"\"猜大了！\"",[144,2589,1199],{"class":150},[144,2591,1222],{"class":154},[144,2593,2594],{"class":146,"line":1794},[144,2595,2559],{"class":154},[144,2597,2598],{"class":146,"line":1808},[144,2599,2600],{"class":150},"        else\n",[144,2602,2603],{"class":146,"line":1813},[144,2604,2540],{"class":154},[144,2606,2608,2610,2612,2615,2617],{"class":146,"line":2607},30,[144,2609,2545],{"class":154},[144,2611,1199],{"class":150},[144,2613,2614],{"class":259},"\"猜对了！\"",[144,2616,1199],{"class":150},[144,2618,1222],{"class":154},[144,2620,2622,2625],{"class":146,"line":2621},31,[144,2623,2624],{"class":150},"            break",[144,2626,1321],{"class":154},[144,2628,2630],{"class":146,"line":2629},32,[144,2631,2559],{"class":154},[144,2633,2635],{"class":146,"line":2634},33,[144,2636,2637],{"class":213},"        \u002F\u002F猜对 退出游戏\n",[144,2639,2641],{"class":146,"line":2640},34,[144,2642,2643],{"class":213},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[144,2645,2647],{"class":146,"line":2646},35,[144,2648,2217],{"class":154},[144,2650,2652],{"class":146,"line":2651},36,[144,2653,1595],{"class":154},[98,2655,2656],{"start":66},[101,2657,2658,2659,2662],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[304,2660,2661],{},"do...while会先执行一次循环语句","，在判断循环语句",[135,2664,2666],{"className":137,"code":2665,"language":139,"meta":30,"style":30},"\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",[141,2667,2668,2673,2681,2685,2697,2705,2709,2726,2733,2737,2750,2760],{"__ignoreMap":30},[144,2669,2670],{"class":146,"line":147},[144,2671,2672],{"class":213},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[144,2674,2675,2677,2679],{"class":146,"line":66},[144,2676,158],{"class":150},[144,2678,2003],{"class":1993},[144,2680,2006],{"class":154},[144,2682,2683],{"class":146,"line":1210},[144,2684,1576],{"class":154},[144,2686,2687,2689,2691,2693,2695],{"class":146,"line":1225},[144,2688,2015],{"class":150},[144,2690,2270],{"class":154},[144,2692,200],{"class":150},[144,2694,346],{"class":203},[144,2696,1321],{"class":154},[144,2698,2699,2702],{"class":146,"line":1231},[144,2700,2701],{"class":150},"    do",[144,2703,2704],{"class":154}," \n",[144,2706,2707],{"class":146,"line":1245},[144,2708,2060],{"class":154},[144,2710,2711,2714,2716,2718,2720,2722,2724],{"class":146,"line":1251},[144,2712,2713],{"class":1993},"        std",[144,2715,2302],{"class":154},[144,2717,1199],{"class":150},[144,2719,1695],{"class":154},[144,2721,1199],{"class":150},[144,2723,2311],{"class":1993},[144,2725,2314],{"class":154},[144,2727,2728,2730],{"class":146,"line":1342},[144,2729,2319],{"class":154},[144,2731,2732],{"class":150},"++\n",[144,2734,2735],{"class":146,"line":1348},[144,2736,2217],{"class":154},[144,2738,2739,2741,2743,2745,2747],{"class":146,"line":1360},[144,2740,2281],{"class":150},[144,2742,2284],{"class":154},[144,2744,1065],{"class":150},[144,2746,601],{"class":203},[144,2748,2749],{"class":154},");\n",[144,2751,2752,2754,2756,2758],{"class":146,"line":1642},[144,2753,2333],{"class":1993},[144,2755,155],{"class":154},[144,2757,2338],{"class":259},[144,2759,2749],{"class":154},[144,2761,2762],{"class":146,"line":1647},[144,2763,1595],{"class":154},[14,2765,2766],{},"案例-水仙花数",[14,2768,2769],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,2771,2772],{},"例如：1^3+5^3+3^3=153",[14,2774,2775],{},"请用do...while语句，求出所有3位数的水仙花数",[135,2777,2779],{"className":137,"code":2778,"language":139,"meta":30,"style":30},"#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",[141,2780,2781,2787,2797,2805,2809,2814,2826,2832,2836,2841,2857,2873,2889,2904,2923,2938,2986,2990,3002,3006,3014,3018,3032],{"__ignoreMap":30},[144,2782,2783,2785],{"class":146,"line":147},[144,2784,1979],{"class":150},[144,2786,2364],{"class":259},[144,2788,2789,2791,2793,2795],{"class":146,"line":66},[144,2790,1987],{"class":150},[144,2792,1990],{"class":150},[144,2794,1994],{"class":1993},[144,2796,1321],{"class":154},[144,2798,2799,2801,2803],{"class":146,"line":1210},[144,2800,158],{"class":150},[144,2802,2003],{"class":1993},[144,2804,2006],{"class":154},[144,2806,2807],{"class":146,"line":1225},[144,2808,1576],{"class":154},[144,2810,2811],{"class":146,"line":1231},[144,2812,2813],{"class":213},"    \u002F\u002F1.先打印所有三位数字\n",[144,2815,2816,2818,2820,2822,2824],{"class":146,"line":1245},[144,2817,2015],{"class":150},[144,2819,2270],{"class":154},[144,2821,200],{"class":150},[144,2823,466],{"class":203},[144,2825,1321],{"class":154},[144,2827,2828,2830],{"class":146,"line":1251},[144,2829,2701],{"class":150},[144,2831,2704],{"class":154},[144,2833,2834],{"class":146,"line":1342},[144,2835,2060],{"class":154},[144,2837,2838],{"class":146,"line":1348},[144,2839,2840],{"class":213},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[144,2842,2843,2846,2848,2850,2852,2854],{"class":146,"line":1360},[144,2844,2845],{"class":150},"        int",[144,2847,1429],{"class":154},[144,2849,200],{"class":150},[144,2851,346],{"class":203},[144,2853,210],{"class":154},[144,2855,2856],{"class":213}," \u002F\u002F个位\n",[144,2858,2859,2861,2864,2866,2868,2870],{"class":146,"line":1642},[144,2860,2845],{"class":150},[144,2862,2863],{"class":154}," b",[144,2865,200],{"class":150},[144,2867,346],{"class":203},[144,2869,210],{"class":154},[144,2871,2872],{"class":213}," \u002F\u002F十位\n",[144,2874,2875,2877,2880,2882,2884,2886],{"class":146,"line":1647},[144,2876,2845],{"class":150},[144,2878,2879],{"class":154}," c",[144,2881,200],{"class":150},[144,2883,346],{"class":203},[144,2885,210],{"class":154},[144,2887,2888],{"class":213}," \u002F\u002F百位\n",[144,2890,2891,2894,2896,2898,2900,2902],{"class":146,"line":1653},[144,2892,2893],{"class":154},"        a",[144,2895,200],{"class":150},[144,2897,1695],{"class":154},[144,2899,483],{"class":150},[144,2901,601],{"class":203},[144,2903,1321],{"class":154},[144,2905,2906,2909,2911,2913,2915,2917,2919,2921],{"class":146,"line":1658},[144,2907,2908],{"class":154},"        b",[144,2910,200],{"class":150},[144,2912,1695],{"class":154},[144,2914,739],{"class":150},[144,2916,601],{"class":203},[144,2918,483],{"class":150},[144,2920,601],{"class":203},[144,2922,1321],{"class":154},[144,2924,2925,2928,2930,2932,2934,2936],{"class":146,"line":1672},[144,2926,2927],{"class":154},"        c",[144,2929,200],{"class":150},[144,2931,1695],{"class":154},[144,2933,739],{"class":150},[144,2935,466],{"class":203},[144,2937,1321],{"class":154},[144,2939,2940,2942,2944,2946,2948,2950,2952,2954,2956,2958,2960,2962,2964,2966,2968,2970,2972,2974,2977,2980,2983],{"class":146,"line":1677},[144,2941,2527],{"class":150},[144,2943,1871],{"class":154},[144,2945,610],{"class":150},[144,2947,393],{"class":154},[144,2949,610],{"class":150},[144,2951,393],{"class":154},[144,2953,636],{"class":150},[144,2955,418],{"class":154},[144,2957,610],{"class":150},[144,2959,418],{"class":154},[144,2961,610],{"class":150},[144,2963,418],{"class":154},[144,2965,636],{"class":150},[144,2967,443],{"class":154},[144,2969,610],{"class":150},[144,2971,443],{"class":154},[144,2973,610],{"class":150},[144,2975,2976],{"class":154},"c ",[144,2978,2979],{"class":150},"==",[144,2981,2982],{"class":154}," num)",[144,2984,2985],{"class":213}," \u002F\u002F如果是水仙花数，才打印\n",[144,2987,2988],{"class":146,"line":1683},[144,2989,2540],{"class":154},[144,2991,2992,2994,2996,2998,3000],{"class":146,"line":1704},[144,2993,2545],{"class":154},[144,2995,1199],{"class":150},[144,2997,1695],{"class":154},[144,2999,1199],{"class":150},[144,3001,1222],{"class":154},[144,3003,3004],{"class":146,"line":1709},[144,3005,2559],{"class":154},[144,3007,3008,3010,3012],{"class":146,"line":1723},[144,3009,2319],{"class":154},[144,3011,2322],{"class":150},[144,3013,1321],{"class":154},[144,3015,3016],{"class":146,"line":1728},[144,3017,2217],{"class":154},[144,3019,3020,3022,3025,3027,3030],{"class":146,"line":1757},[144,3021,2281],{"class":150},[144,3023,3024],{"class":154}," (num ",[144,3026,1065],{"class":150},[144,3028,3029],{"class":203}," 1000",[144,3031,2749],{"class":154},[144,3033,3034],{"class":146,"line":1762},[144,3035,1595],{"class":154},[98,3037,3038],{"start":1210},[101,3039,3040],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[135,3042,3044],{"className":137,"code":3043,"language":139,"meta":30,"style":30},"\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",[141,3045,3046,3051,3080,3084,3096,3100,3105,3116,3123,3127,3141,3145,3152,3156,3168,3177],{"__ignoreMap":30},[144,3047,3048],{"class":146,"line":147},[144,3049,3050],{"class":213},"\u002F\u002F从数字0-9打印\n",[144,3052,3053,3056,3058,3060,3063,3065,3067,3070,3072,3074,3076,3078],{"class":146,"line":66},[144,3054,3055],{"class":150},"for",[144,3057,155],{"class":154},[144,3059,158],{"class":150},[144,3061,3062],{"class":154}," i",[144,3064,200],{"class":150},[144,3066,346],{"class":203},[144,3068,3069],{"class":154},";i",[144,3071,1065],{"class":150},[144,3073,601],{"class":203},[144,3075,3069],{"class":154},[144,3077,2322],{"class":150},[144,3079,161],{"class":154},[144,3081,3082],{"class":146,"line":1210},[144,3083,1576],{"class":154},[144,3085,3086,3088,3090,3092,3094],{"class":146,"line":1225},[144,3087,1581],{"class":154},[144,3089,1199],{"class":150},[144,3091,596],{"class":154},[144,3093,1199],{"class":150},[144,3095,1222],{"class":154},[144,3097,3098],{"class":146,"line":1231},[144,3099,1595],{"class":154},[144,3101,3102],{"class":146,"line":1245},[144,3103,3104],{"class":213},"\u002F\u002F上式可以进行拆分\n",[144,3106,3107,3109,3111,3113],{"class":146,"line":1251},[144,3108,158],{"class":150},[144,3110,3062],{"class":154},[144,3112,200],{"class":150},[144,3114,3115],{"class":203},"0\n",[144,3117,3118,3120],{"class":146,"line":1342},[144,3119,3055],{"class":150},[144,3121,3122],{"class":154},"(;;;)\n",[144,3124,3125],{"class":146,"line":1348},[144,3126,1576],{"class":154},[144,3128,3129,3132,3135,3137,3139],{"class":146,"line":1360},[144,3130,3131],{"class":150},"    if",[144,3133,3134],{"class":154},"(i",[144,3136,1740],{"class":150},[144,3138,601],{"class":203},[144,3140,161],{"class":154},[144,3142,3143],{"class":146,"line":1642},[144,3144,2060],{"class":154},[144,3146,3147,3150],{"class":146,"line":1647},[144,3148,3149],{"class":150},"        break",[144,3151,1321],{"class":154},[144,3153,3154],{"class":146,"line":1653},[144,3155,2217],{"class":154},[144,3157,3158,3160,3162,3164,3166],{"class":146,"line":1658},[144,3159,1581],{"class":154},[144,3161,1199],{"class":150},[144,3163,596],{"class":154},[144,3165,1199],{"class":150},[144,3167,1222],{"class":154},[144,3169,3170,3173,3175],{"class":146,"line":1672},[144,3171,3172],{"class":154},"    i",[144,3174,2322],{"class":150},[144,3176,1321],{"class":154},[144,3178,3179],{"class":146,"line":1677},[144,3180,1595],{"class":154},[14,3182,3183],{},"小练习",[135,3185,3187],{"className":137,"code":3186,"language":139,"meta":30,"style":30},"#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",[141,3188,3189,3195,3205,3213,3217,3222,3227,3255,3259,3264,3269,3310,3314,3327,3331,3335,3339,3351,3355,3359],{"__ignoreMap":30},[144,3190,3191,3193],{"class":146,"line":147},[144,3192,1979],{"class":150},[144,3194,1982],{"class":259},[144,3196,3197,3199,3201,3203],{"class":146,"line":66},[144,3198,1987],{"class":150},[144,3200,1990],{"class":150},[144,3202,1994],{"class":1993},[144,3204,1321],{"class":154},[144,3206,3207,3209,3211],{"class":146,"line":1210},[144,3208,158],{"class":150},[144,3210,2003],{"class":1993},[144,3212,2006],{"class":154},[144,3214,3215],{"class":146,"line":1225},[144,3216,1576],{"class":154},[144,3218,3219],{"class":146,"line":1231},[144,3220,3221],{"class":213},"    \u002F\u002F敲桌子案例\n",[144,3223,3224],{"class":146,"line":1245},[144,3225,3226],{"class":213},"    \u002F\u002F1.先输出1-100的数字\n",[144,3228,3229,3232,3234,3236,3238,3240,3242,3245,3247,3249,3251,3253],{"class":146,"line":1251},[144,3230,3231],{"class":150},"    for",[144,3233,155],{"class":154},[144,3235,158],{"class":150},[144,3237,3062],{"class":154},[144,3239,200],{"class":150},[144,3241,372],{"class":203},[144,3243,3244],{"class":154},"; i",[144,3246,1618],{"class":150},[144,3248,466],{"class":203},[144,3250,3244],{"class":154},[144,3252,2322],{"class":150},[144,3254,161],{"class":154},[144,3256,3257],{"class":146,"line":1342},[144,3258,2060],{"class":154},[144,3260,3261],{"class":146,"line":1348},[144,3262,3263],{"class":213},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[144,3265,3266],{"class":146,"line":1360},[144,3267,3268],{"class":213},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[144,3270,3271,3273,3275,3277,3279,3281,3283,3286,3288,3290,3292,3294,3296,3298,3300,3302,3304,3306,3308],{"class":146,"line":1642},[144,3272,2527],{"class":150},[144,3274,3134],{"class":154},[144,3276,483],{"class":150},[144,3278,524],{"class":203},[144,3280,2979],{"class":150},[144,3282,346],{"class":203},[144,3284,3285],{"class":150}," ||",[144,3287,3062],{"class":154},[144,3289,483],{"class":150},[144,3291,601],{"class":203},[144,3293,2979],{"class":150},[144,3295,524],{"class":203},[144,3297,3285],{"class":150},[144,3299,3062],{"class":154},[144,3301,739],{"class":150},[144,3303,601],{"class":203},[144,3305,2979],{"class":150},[144,3307,524],{"class":203},[144,3309,161],{"class":154},[144,3311,3312],{"class":146,"line":1647},[144,3313,2540],{"class":154},[144,3315,3316,3318,3320,3323,3325],{"class":146,"line":1653},[144,3317,2545],{"class":154},[144,3319,1199],{"class":150},[144,3321,3322],{"class":259},"\"敲桌子\"",[144,3324,1199],{"class":150},[144,3326,1222],{"class":154},[144,3328,3329],{"class":146,"line":1658},[144,3330,2559],{"class":154},[144,3332,3333],{"class":146,"line":1672},[144,3334,2600],{"class":150},[144,3336,3337],{"class":146,"line":1677},[144,3338,2540],{"class":154},[144,3340,3341,3343,3345,3347,3349],{"class":146,"line":1683},[144,3342,2545],{"class":154},[144,3344,1199],{"class":150},[144,3346,596],{"class":154},[144,3348,1199],{"class":150},[144,3350,1222],{"class":154},[144,3352,3353],{"class":146,"line":1704},[144,3354,2559],{"class":154},[144,3356,3357],{"class":146,"line":1709},[144,3358,2217],{"class":154},[144,3360,3361],{"class":146,"line":1723},[144,3362,1595],{"class":154},[14,3364,3365],{},"嵌套实现星图",[135,3367,3369],{"className":137,"code":3368,"language":139,"meta":30,"style":30},"#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",[141,3370,3371,3377,3387,3395,3399,3425,3429,3458,3462,3473,3477,3486,3490],{"__ignoreMap":30},[144,3372,3373,3375],{"class":146,"line":147},[144,3374,1979],{"class":150},[144,3376,1982],{"class":259},[144,3378,3379,3381,3383,3385],{"class":146,"line":66},[144,3380,1987],{"class":150},[144,3382,1990],{"class":150},[144,3384,1994],{"class":1993},[144,3386,1321],{"class":154},[144,3388,3389,3391,3393],{"class":146,"line":1210},[144,3390,158],{"class":150},[144,3392,2003],{"class":1993},[144,3394,2006],{"class":154},[144,3396,3397],{"class":146,"line":1225},[144,3398,1576],{"class":154},[144,3400,3401,3403,3405,3407,3409,3411,3413,3415,3417,3419,3421,3423],{"class":146,"line":1231},[144,3402,3231],{"class":150},[144,3404,1688],{"class":154},[144,3406,158],{"class":150},[144,3408,3062],{"class":154},[144,3410,200],{"class":150},[144,3412,346],{"class":203},[144,3414,3069],{"class":154},[144,3416,1065],{"class":150},[144,3418,601],{"class":203},[144,3420,3069],{"class":154},[144,3422,2322],{"class":150},[144,3424,161],{"class":154},[144,3426,3427],{"class":146,"line":1245},[144,3428,2060],{"class":154},[144,3430,3431,3434,3436,3438,3441,3443,3445,3448,3450,3452,3454,3456],{"class":146,"line":1251},[144,3432,3433],{"class":150},"        for",[144,3435,1688],{"class":154},[144,3437,158],{"class":150},[144,3439,3440],{"class":154}," j",[144,3442,200],{"class":150},[144,3444,346],{"class":203},[144,3446,3447],{"class":154},";j",[144,3449,1065],{"class":150},[144,3451,601],{"class":203},[144,3453,3447],{"class":154},[144,3455,2322],{"class":150},[144,3457,161],{"class":154},[144,3459,3460],{"class":146,"line":1342},[144,3461,2540],{"class":154},[144,3463,3464,3466,3468,3471],{"class":146,"line":1348},[144,3465,2545],{"class":154},[144,3467,1199],{"class":150},[144,3469,3470],{"class":259},"\"*\"",[144,3472,1321],{"class":154},[144,3474,3475],{"class":146,"line":1360},[144,3476,2559],{"class":154},[144,3478,3479,3482,3484],{"class":146,"line":1642},[144,3480,3481],{"class":154},"        cout",[144,3483,1199],{"class":150},[144,3485,1222],{"class":154},[144,3487,3488],{"class":146,"line":1647},[144,3489,2217],{"class":154},[144,3491,3492],{"class":146,"line":1653},[144,3493,1595],{"class":154},[14,3495,3496],{},"乘法口诀表",[135,3498,3500],{"className":137,"code":3499,"language":139,"meta":30,"style":30},"#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",[141,3501,3502,3508,3518,3526,3530,3556,3560,3585,3589,3629,3633,3641,3645],{"__ignoreMap":30},[144,3503,3504,3506],{"class":146,"line":147},[144,3505,1979],{"class":150},[144,3507,2364],{"class":259},[144,3509,3510,3512,3514,3516],{"class":146,"line":66},[144,3511,1987],{"class":150},[144,3513,1990],{"class":150},[144,3515,1994],{"class":1993},[144,3517,1321],{"class":154},[144,3519,3520,3522,3524],{"class":146,"line":1210},[144,3521,158],{"class":150},[144,3523,2003],{"class":1993},[144,3525,2006],{"class":154},[144,3527,3528],{"class":146,"line":1225},[144,3529,1576],{"class":154},[144,3531,3532,3534,3536,3538,3540,3542,3544,3546,3548,3550,3552,3554],{"class":146,"line":1231},[144,3533,3231],{"class":150},[144,3535,155],{"class":154},[144,3537,158],{"class":150},[144,3539,3062],{"class":154},[144,3541,200],{"class":150},[144,3543,372],{"class":203},[144,3545,3069],{"class":154},[144,3547,1065],{"class":150},[144,3549,601],{"class":203},[144,3551,3069],{"class":154},[144,3553,2322],{"class":150},[144,3555,161],{"class":154},[144,3557,3558],{"class":146,"line":1245},[144,3559,2060],{"class":154},[144,3561,3562,3564,3566,3568,3570,3572,3574,3576,3578,3581,3583],{"class":146,"line":1251},[144,3563,3433],{"class":150},[144,3565,155],{"class":154},[144,3567,158],{"class":150},[144,3569,3440],{"class":154},[144,3571,200],{"class":150},[144,3573,372],{"class":203},[144,3575,3447],{"class":154},[144,3577,1618],{"class":150},[144,3579,3580],{"class":154},"i;j",[144,3582,2322],{"class":150},[144,3584,161],{"class":154},[144,3586,3587],{"class":146,"line":1342},[144,3588,2540],{"class":154},[144,3590,3591,3593,3595,3597,3599,3601,3603,3605,3607,3610,3612,3614,3616,3618,3620,3623,3625,3627],{"class":146,"line":1348},[144,3592,2545],{"class":154},[144,3594,1199],{"class":150},[144,3596,622],{"class":154},[144,3598,1199],{"class":150},[144,3600,3470],{"class":259},[144,3602,1199],{"class":150},[144,3604,596],{"class":154},[144,3606,1199],{"class":150},[144,3608,3609],{"class":259},"\"=\"",[144,3611,1199],{"class":150},[144,3613,596],{"class":154},[144,3615,610],{"class":150},[144,3617,622],{"class":154},[144,3619,1199],{"class":150},[144,3621,3622],{"class":259},"'",[144,3624,1261],{"class":203},[144,3626,3622],{"class":259},[144,3628,1321],{"class":154},[144,3630,3631],{"class":146,"line":1360},[144,3632,2559],{"class":154},[144,3634,3635,3637,3639],{"class":146,"line":1642},[144,3636,3481],{"class":154},[144,3638,1199],{"class":150},[144,3640,1222],{"class":154},[144,3642,3643],{"class":146,"line":1647},[144,3644,2217],{"class":154},[144,3646,3647],{"class":146,"line":1653},[144,3648,1595],{"class":154},[115,3650,3652],{"id":3651},"_163跳出语句","1.6.3跳出语句",[98,3654,3655],{},[101,3656,3657],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,3659,3660],{},"break使用时机：",[1162,3662,3663,3666,3669],{},[101,3664,3665],{},"出现在switch条件语句中，作用是终止case并跳出switch",[101,3667,3668],{},"出现在循环结构中，作用是跳出当前的循环结构",[101,3670,3671],{},"出现在嵌套循环中，跳出最近的内层循环语句",[98,3673,3674,3677],{"start":66},[101,3675,3676],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[101,3678,3679],{},"goto语句\n语法：goto 标记;",[14,3681,3682],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[135,3684,3686],{"className":137,"code":3685,"language":139,"meta":30,"style":30},"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",[141,3687,3688,3696,3700,3713,3723,3736,3749,3762,3770,3786],{"__ignoreMap":30},[144,3689,3690,3692,3694],{"class":146,"line":147},[144,3691,158],{"class":150},[144,3693,2003],{"class":1993},[144,3695,2006],{"class":154},[144,3697,3698],{"class":146,"line":66},[144,3699,1576],{"class":154},[144,3701,3702,3704,3706,3709,3711],{"class":146,"line":1210},[144,3703,1581],{"class":154},[144,3705,1199],{"class":150},[144,3707,3708],{"class":259},"\"1\"",[144,3710,1199],{"class":150},[144,3712,1222],{"class":154},[144,3714,3715,3718,3721],{"class":146,"line":1225},[144,3716,3717],{"class":150},"    goto",[144,3719,3720],{"class":1993}," FLAG",[144,3722,1321],{"class":154},[144,3724,3725,3727,3729,3732,3734],{"class":146,"line":1231},[144,3726,1581],{"class":154},[144,3728,1199],{"class":150},[144,3730,3731],{"class":259},"\"2\"",[144,3733,1199],{"class":150},[144,3735,1222],{"class":154},[144,3737,3738,3740,3742,3745,3747],{"class":146,"line":1245},[144,3739,1581],{"class":154},[144,3741,1199],{"class":150},[144,3743,3744],{"class":259},"\"3\"",[144,3746,1199],{"class":150},[144,3748,1222],{"class":154},[144,3750,3751,3753,3755,3758,3760],{"class":146,"line":1251},[144,3752,1581],{"class":154},[144,3754,1199],{"class":150},[144,3756,3757],{"class":259},"\"4\"",[144,3759,1199],{"class":150},[144,3761,1222],{"class":154},[144,3763,3764,3767],{"class":146,"line":1342},[144,3765,3766],{"class":1993},"    FLAG",[144,3768,3769],{"class":154},":\n",[144,3771,3772,3774,3776,3779,3781,3783],{"class":146,"line":1348},[144,3773,1581],{"class":154},[144,3775,1199],{"class":150},[144,3777,3778],{"class":259},"\"5\"",[144,3780,1199],{"class":150},[144,3782,1269],{"class":154},[144,3784,3785],{"class":213},"\u002F\u002F跳过了2,3,4,直接到5\n",[144,3787,3788],{"class":146,"line":1360},[144,3789,1595],{"class":154},[18,3791,3793],{"id":3792},"_17数组","1.7数组",[115,3795,3797],{"id":3796},"_171一维数组","1.7.1一维数组",[98,3799,3800],{},[101,3801,3802],{},"一维数组定义方式",[292,3804,3805,3815],{},[295,3806,3807],{},[298,3808,3809,3812],{},[301,3810,3811],{},"方式",[301,3813,3814],{},"注意事项",[339,3816,3817,3831,3841],{},[298,3818,3819,3825],{},[344,3820,3821,3822,210],{},"数据类型 数组名",[144,3823,3824],{},"数组长度",[344,3826,3827,3828,3830],{},"这种方式是先定义再arr",[144,3829,596],{},"赋值",[298,3832,3833,3838],{},[344,3834,3821,3835,3837],{},[144,3836,3824],{},"={值1,值2....};",[344,3839,3840],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[298,3842,3843,3847],{},[344,3844,3821,3845,3837],{},[144,3846],{},[344,3848,3849,3850,3852],{},"int arr",[144,3851],{},";这是不正确的，按照这样的方式定义必须有初始长度",[98,3854,3855],{"start":66},[101,3856,3857],{},"一维数组数组名\n用途：",[1162,3859,3860],{},[101,3861,3862],{},"1.可以统计整个数组在内存中的长度：",[135,3864,3866],{"className":137,"code":3865,"language":139,"meta":30,"style":30},"sizeof(arr);\nsizeof(arr[0]);\n",[141,3867,3868,3875],{"__ignoreMap":30},[144,3869,3870,3872],{"class":146,"line":147},[144,3871,151],{"class":150},[144,3873,3874],{"class":154},"(arr);\n",[144,3876,3877,3879,3882,3884],{"class":146,"line":66},[144,3878,151],{"class":150},[144,3880,3881],{"class":154},"(arr[",[144,3883,346],{"class":203},[144,3885,3886],{"class":154},"]);\n",[1162,3888,3889],{},[101,3890,3891],{},"2.可以获取数组在内存中的首地址:",[135,3893,3895],{"className":137,"code":3894,"language":139,"meta":30,"style":30},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[141,3896,3897,3902,3915,3920],{"__ignoreMap":30},[144,3898,3899],{"class":146,"line":147},[144,3900,3901],{"class":213},"\u002F\u002F查看16进制的首地址\n",[144,3903,3904,3906,3908,3911,3913],{"class":146,"line":66},[144,3905,1400],{"class":154},[144,3907,1199],{"class":150},[144,3909,3910],{"class":154},"arr",[144,3912,1199],{"class":150},[144,3914,1222],{"class":154},[144,3916,3917],{"class":146,"line":1210},[144,3918,3919],{"class":213},"\u002F\u002F看10进制数\n",[144,3921,3922,3924,3926,3928,3930,3932,3934,3937,3939,3941,3943],{"class":146,"line":1225},[144,3923,1400],{"class":154},[144,3925,1199],{"class":150},[144,3927,155],{"class":154},[144,3929,158],{"class":150},[144,3931,584],{"class":154},[144,3933,508],{"class":150},[144,3935,3936],{"class":154},"arr[",[144,3938,346],{"class":203},[144,3940,1095],{"class":154},[144,3942,1199],{"class":150},[144,3944,1222],{"class":154},[14,3946,3947],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1162,3949,3950],{},[101,3951,3952],{},"1️⃣五只小猪称体重",[135,3954,3956],{"className":137,"code":3955,"language":139,"meta":30,"style":30},"#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",[141,3957,3958,3964,3974,3982,3986,4026,4039,4065,4069,4081,4085,4095,4099,4103,4116,4126],{"__ignoreMap":30},[144,3959,3960,3962],{"class":146,"line":147},[144,3961,1979],{"class":150},[144,3963,1982],{"class":259},[144,3965,3966,3968,3970,3972],{"class":146,"line":66},[144,3967,1987],{"class":150},[144,3969,1990],{"class":150},[144,3971,1994],{"class":1993},[144,3973,1321],{"class":154},[144,3975,3976,3978,3980],{"class":146,"line":1210},[144,3977,158],{"class":150},[144,3979,2003],{"class":1993},[144,3981,2006],{"class":154},[144,3983,3984],{"class":146,"line":1225},[144,3985,1576],{"class":154},[144,3987,3988,3990,3993,3995,3997,3999,4001,4004,4006,4009,4011,4013,4015,4018,4020,4023],{"class":146,"line":1231},[144,3989,2015],{"class":150},[144,3991,3992],{"class":154}," arr[",[144,3994,474],{"class":203},[144,3996,1095],{"class":154},[144,3998,200],{"class":150},[144,4000,1051],{"class":154},[144,4002,4003],{"class":203},"300",[144,4005,533],{"class":154},[144,4007,4008],{"class":203},"350",[144,4010,533],{"class":154},[144,4012,1752],{"class":203},[144,4014,533],{"class":154},[144,4016,4017],{"class":203},"400",[144,4019,533],{"class":154},[144,4021,4022],{"class":203},"250",[144,4024,4025],{"class":154},"};\n",[144,4027,4028,4030,4033,4035,4037],{"class":146,"line":1245},[144,4029,2015],{"class":150},[144,4031,4032],{"class":154}," tmp",[144,4034,200],{"class":150},[144,4036,346],{"class":203},[144,4038,1321],{"class":154},[144,4040,4041,4043,4045,4047,4049,4051,4053,4055,4057,4059,4061,4063],{"class":146,"line":1251},[144,4042,3231],{"class":150},[144,4044,1688],{"class":154},[144,4046,158],{"class":150},[144,4048,3062],{"class":154},[144,4050,200],{"class":150},[144,4052,346],{"class":203},[144,4054,3069],{"class":154},[144,4056,1065],{"class":150},[144,4058,474],{"class":203},[144,4060,3069],{"class":154},[144,4062,2322],{"class":150},[144,4064,161],{"class":154},[144,4066,4067],{"class":146,"line":1342},[144,4068,2060],{"class":154},[144,4070,4071,4073,4076,4078],{"class":146,"line":1348},[144,4072,2527],{"class":150},[144,4074,4075],{"class":154},"(tmp",[144,4077,1065],{"class":150},[144,4079,4080],{"class":154},"arr[i])\n",[144,4082,4083],{"class":146,"line":1360},[144,4084,2540],{"class":154},[144,4086,4087,4090,4092],{"class":146,"line":1642},[144,4088,4089],{"class":154},"            tmp",[144,4091,200],{"class":150},[144,4093,4094],{"class":154},"arr[i];\n",[144,4096,4097],{"class":146,"line":1647},[144,4098,2559],{"class":154},[144,4100,4101],{"class":146,"line":1653},[144,4102,2217],{"class":154},[144,4104,4105,4107,4109,4112,4114],{"class":146,"line":1658},[144,4106,1581],{"class":154},[144,4108,1199],{"class":150},[144,4110,4111],{"class":154},"tmp",[144,4113,1199],{"class":150},[144,4115,1222],{"class":154},[144,4117,4118,4121,4124],{"class":146,"line":1672},[144,4119,4120],{"class":150},"    return",[144,4122,4123],{"class":203}," 0",[144,4125,1321],{"class":154},[144,4127,4128],{"class":146,"line":1677},[144,4129,1595],{"class":154},[1162,4131,4132],{},[101,4133,4134],{},"2️⃣数组元素逆置",[135,4136,4138],{"className":137,"code":4137,"language":139,"meta":30,"style":30},"\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",[141,4139,4140,4145,4151,4161,4169,4173,4208,4224,4256,4269,4274,4279,4291,4301,4311,4316,4325,4335,4340,4345,4372,4376,4392,4396,4407,4416],{"__ignoreMap":30},[144,4141,4142],{"class":146,"line":147},[144,4143,4144],{"class":213},"\u002F\u002F元素逆置\n",[144,4146,4147,4149],{"class":146,"line":66},[144,4148,1979],{"class":150},[144,4150,1982],{"class":259},[144,4152,4153,4155,4157,4159],{"class":146,"line":1210},[144,4154,1987],{"class":150},[144,4156,1990],{"class":150},[144,4158,1994],{"class":1993},[144,4160,1321],{"class":154},[144,4162,4163,4165,4167],{"class":146,"line":1225},[144,4164,158],{"class":150},[144,4166,2003],{"class":1993},[144,4168,2006],{"class":154},[144,4170,4171],{"class":146,"line":1231},[144,4172,1576],{"class":154},[144,4174,4175,4178,4180,4182,4184,4186,4188,4190,4192,4194,4196,4198,4200,4202,4204,4206],{"class":146,"line":1245},[144,4176,4177],{"class":150},"   int",[144,4179,3992],{"class":154},[144,4181,474],{"class":203},[144,4183,1095],{"class":154},[144,4185,200],{"class":150},[144,4187,1051],{"class":154},[144,4189,372],{"class":203},[144,4191,533],{"class":154},[144,4193,232],{"class":203},[144,4195,533],{"class":154},[144,4197,226],{"class":203},[144,4199,533],{"class":154},[144,4201,448],{"class":203},[144,4203,533],{"class":154},[144,4205,474],{"class":203},[144,4207,4025],{"class":154},[144,4209,4210,4212,4215,4217,4219,4221],{"class":146,"line":1251},[144,4211,4177],{"class":150},[144,4213,4214],{"class":154}," start",[144,4216,200],{"class":150},[144,4218,346],{"class":203},[144,4220,210],{"class":154},[144,4222,4223],{"class":213},"\u002F\u002F起始下标\n",[144,4225,4226,4228,4231,4234,4237,4240,4242,4244,4247,4249,4251,4253],{"class":146,"line":1342},[144,4227,4177],{"class":150},[144,4229,4230],{"class":154}," end",[144,4232,4233],{"class":150},"=sizeof",[144,4235,4236],{"class":154},"(arr)",[144,4238,4239],{"class":150},"\u002Fsizeof",[144,4241,3881],{"class":154},[144,4243,346],{"class":203},[144,4245,4246],{"class":154},"])",[144,4248,687],{"class":150},[144,4250,372],{"class":203},[144,4252,210],{"class":154},[144,4254,4255],{"class":213},"\u002F\u002F结束下标\n",[144,4257,4258,4261,4264,4266],{"class":146,"line":1348},[144,4259,4260],{"class":150},"   while",[144,4262,4263],{"class":154}," (start",[144,4265,1065],{"class":150},[144,4267,4268],{"class":154},"end)\n",[144,4270,4271],{"class":146,"line":1360},[144,4272,4273],{"class":154},"   {\n",[144,4275,4276],{"class":146,"line":1642},[144,4277,4278],{"class":213},"    \u002F\u002F实现元素互换代码\n",[144,4280,4281,4283,4286,4288],{"class":146,"line":1647},[144,4282,2015],{"class":150},[144,4284,4285],{"class":154}," temp",[144,4287,200],{"class":150},[144,4289,4290],{"class":154},"arr[start];\n",[144,4292,4293,4296,4298],{"class":146,"line":1653},[144,4294,4295],{"class":154},"    arr[start]",[144,4297,200],{"class":150},[144,4299,4300],{"class":154},"arr[end];\n",[144,4302,4303,4306,4308],{"class":146,"line":1658},[144,4304,4305],{"class":154},"    arr[end]",[144,4307,200],{"class":150},[144,4309,4310],{"class":154},"temp;\n",[144,4312,4313],{"class":146,"line":1672},[144,4314,4315],{"class":213},"    \u002F\u002F下标更新\n",[144,4317,4318,4321,4323],{"class":146,"line":1677},[144,4319,4320],{"class":154},"    start",[144,4322,2322],{"class":150},[144,4324,1321],{"class":154},[144,4326,4327,4330,4333],{"class":146,"line":1683},[144,4328,4329],{"class":154},"    end",[144,4331,4332],{"class":150},"--",[144,4334,1321],{"class":154},[144,4336,4337],{"class":146,"line":1704},[144,4338,4339],{"class":154},"   }\n",[144,4341,4342],{"class":146,"line":1709},[144,4343,4344],{"class":213},"   \u002F\u002F输出逆置后的数组\n",[144,4346,4347,4350,4352,4354,4356,4358,4360,4362,4364,4366,4368,4370],{"class":146,"line":1723},[144,4348,4349],{"class":150},"   for",[144,4351,1688],{"class":154},[144,4353,158],{"class":150},[144,4355,3062],{"class":154},[144,4357,200],{"class":150},[144,4359,346],{"class":203},[144,4361,3069],{"class":154},[144,4363,1065],{"class":150},[144,4365,474],{"class":203},[144,4367,3069],{"class":154},[144,4369,2322],{"class":150},[144,4371,161],{"class":154},[144,4373,4374],{"class":146,"line":1728},[144,4375,4273],{"class":154},[144,4377,4378,4380,4382,4385,4387,4390],{"class":146,"line":1757},[144,4379,1581],{"class":154},[144,4381,1199],{"class":150},[144,4383,4384],{"class":154},"arr[i]",[144,4386,1199],{"class":150},[144,4388,4389],{"class":259},"\" \"",[144,4391,1321],{"class":154},[144,4393,4394],{"class":146,"line":1762},[144,4395,4339],{"class":154},[144,4397,4398,4401,4403,4405],{"class":146,"line":1779},[144,4399,4400],{"class":1993},"   system",[144,4402,155],{"class":154},[144,4404,2338],{"class":259},[144,4406,2749],{"class":154},[144,4408,4409,4412,4414],{"class":146,"line":1784},[144,4410,4411],{"class":150},"   return",[144,4413,4123],{"class":203},[144,4415,1321],{"class":154},[144,4417,4418],{"class":146,"line":1789},[144,4419,1595],{"class":154},[1162,4421,4422],{},[101,4423,4424],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[135,4426,4428],{"className":137,"code":4427,"language":139,"meta":30,"style":30},"\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",[141,4429,4430,4435,4441,4451,4459,4463,4515,4528,4554,4558,4572,4576,4581,4586,4616,4620,4625,4659,4663,4668,4688,4693,4705,4721,4736,4741,4745,4749,4762,4788,4792,4806,4810,4818],{"__ignoreMap":30},[144,4431,4432],{"class":146,"line":147},[144,4433,4434],{"class":213},"\u002F\u002F冒泡排序,升序\n",[144,4436,4437,4439],{"class":146,"line":66},[144,4438,1979],{"class":150},[144,4440,1982],{"class":259},[144,4442,4443,4445,4447,4449],{"class":146,"line":1210},[144,4444,1987],{"class":150},[144,4446,1990],{"class":150},[144,4448,1994],{"class":1993},[144,4450,1321],{"class":154},[144,4452,4453,4455,4457],{"class":146,"line":1225},[144,4454,158],{"class":150},[144,4456,2003],{"class":1993},[144,4458,2006],{"class":154},[144,4460,4461],{"class":146,"line":1231},[144,4462,1576],{"class":154},[144,4464,4465,4467,4469,4471,4474,4476,4479,4481,4483,4485,4487,4489,4491,4493,4495,4497,4499,4501,4503,4505,4507,4509,4511,4513],{"class":146,"line":1245},[144,4466,2015],{"class":150},[144,4468,3992],{"class":154},[144,4470,575],{"class":203},[144,4472,4473],{"class":154},"] ",[144,4475,200],{"class":150},[144,4477,4478],{"class":154}," {",[144,4480,448],{"class":203},[144,4482,533],{"class":154},[144,4484,232],{"class":203},[144,4486,533],{"class":154},[144,4488,550],{"class":203},[144,4490,533],{"class":154},[144,4492,346],{"class":203},[144,4494,533],{"class":154},[144,4496,474],{"class":203},[144,4498,533],{"class":154},[144,4500,524],{"class":203},[144,4502,533],{"class":154},[144,4504,372],{"class":203},[144,4506,533],{"class":154},[144,4508,226],{"class":203},[144,4510,533],{"class":154},[144,4512,575],{"class":203},[144,4514,4025],{"class":154},[144,4516,4517,4519,4521,4524,4526],{"class":146,"line":1251},[144,4518,1581],{"class":154},[144,4520,1199],{"class":150},[144,4522,4523],{"class":259},"\"排序前：\"",[144,4525,1199],{"class":150},[144,4527,1222],{"class":154},[144,4529,4530,4532,4534,4536,4538,4540,4542,4544,4546,4548,4550,4552],{"class":146,"line":1342},[144,4531,3231],{"class":150},[144,4533,1688],{"class":154},[144,4535,158],{"class":150},[144,4537,3062],{"class":154},[144,4539,200],{"class":150},[144,4541,346],{"class":203},[144,4543,3069],{"class":154},[144,4545,1065],{"class":150},[144,4547,575],{"class":203},[144,4549,3069],{"class":154},[144,4551,2322],{"class":150},[144,4553,161],{"class":154},[144,4555,4556],{"class":146,"line":1348},[144,4557,2060],{"class":154},[144,4559,4560,4562,4564,4566,4568,4570],{"class":146,"line":1360},[144,4561,3481],{"class":154},[144,4563,1199],{"class":150},[144,4565,4384],{"class":154},[144,4567,1199],{"class":150},[144,4569,4389],{"class":259},[144,4571,1321],{"class":154},[144,4573,4574],{"class":146,"line":1642},[144,4575,2217],{"class":154},[144,4577,4578],{"class":146,"line":1647},[144,4579,4580],{"class":213},"    \u002F\u002F开始冒泡排序\n",[144,4582,4583],{"class":146,"line":1653},[144,4584,4585],{"class":213},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[144,4587,4588,4590,4592,4594,4596,4598,4600,4602,4604,4606,4608,4610,4612,4614],{"class":146,"line":1658},[144,4589,3231],{"class":150},[144,4591,1688],{"class":154},[144,4593,158],{"class":150},[144,4595,3062],{"class":154},[144,4597,200],{"class":150},[144,4599,346],{"class":203},[144,4601,3069],{"class":154},[144,4603,1065],{"class":150},[144,4605,575],{"class":203},[144,4607,687],{"class":150},[144,4609,372],{"class":203},[144,4611,3069],{"class":154},[144,4613,2322],{"class":150},[144,4615,161],{"class":154},[144,4617,4618],{"class":146,"line":1672},[144,4619,2060],{"class":154},[144,4621,4622],{"class":146,"line":1677},[144,4623,4624],{"class":213},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[144,4626,4627,4629,4631,4633,4635,4637,4639,4641,4643,4645,4647,4649,4651,4653,4655,4657],{"class":146,"line":1683},[144,4628,3433],{"class":150},[144,4630,1688],{"class":154},[144,4632,158],{"class":150},[144,4634,3440],{"class":154},[144,4636,200],{"class":150},[144,4638,346],{"class":203},[144,4640,3447],{"class":154},[144,4642,1065],{"class":150},[144,4644,575],{"class":203},[144,4646,687],{"class":150},[144,4648,596],{"class":154},[144,4650,687],{"class":150},[144,4652,372],{"class":203},[144,4654,3447],{"class":154},[144,4656,2322],{"class":150},[144,4658,161],{"class":154},[144,4660,4661],{"class":146,"line":1704},[144,4662,2540],{"class":154},[144,4664,4665],{"class":146,"line":1709},[144,4666,4667],{"class":213},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[144,4669,4670,4673,4676,4678,4681,4683,4685],{"class":146,"line":1723},[144,4671,4672],{"class":150},"            if",[144,4674,4675],{"class":154},"(arr[j]",[144,4677,1115],{"class":150},[144,4679,4680],{"class":154},"arr[j",[144,4682,636],{"class":150},[144,4684,372],{"class":203},[144,4686,4687],{"class":154},"])\n",[144,4689,4690],{"class":146,"line":1728},[144,4691,4692],{"class":154},"            {\n",[144,4694,4695,4698,4700,4702],{"class":146,"line":1757},[144,4696,4697],{"class":150},"                int",[144,4699,4285],{"class":154},[144,4701,200],{"class":150},[144,4703,4704],{"class":154},"arr[j];\n",[144,4706,4707,4710,4712,4714,4716,4718],{"class":146,"line":1762},[144,4708,4709],{"class":154},"                arr[j]",[144,4711,200],{"class":150},[144,4713,4680],{"class":154},[144,4715,636],{"class":150},[144,4717,372],{"class":203},[144,4719,4720],{"class":154},"];\n",[144,4722,4723,4726,4728,4730,4732,4734],{"class":146,"line":1779},[144,4724,4725],{"class":154},"                arr[j",[144,4727,636],{"class":150},[144,4729,372],{"class":203},[144,4731,1095],{"class":154},[144,4733,200],{"class":150},[144,4735,4310],{"class":154},[144,4737,4738],{"class":146,"line":1784},[144,4739,4740],{"class":154},"            }\n",[144,4742,4743],{"class":146,"line":1789},[144,4744,2559],{"class":154},[144,4746,4747],{"class":146,"line":1794},[144,4748,2217],{"class":154},[144,4750,4751,4753,4755,4758,4760],{"class":146,"line":1808},[144,4752,1581],{"class":154},[144,4754,1199],{"class":150},[144,4756,4757],{"class":259},"\"排序后：\"",[144,4759,1199],{"class":150},[144,4761,1222],{"class":154},[144,4763,4764,4766,4768,4770,4772,4774,4776,4778,4780,4782,4784,4786],{"class":146,"line":1813},[144,4765,3231],{"class":150},[144,4767,1688],{"class":154},[144,4769,158],{"class":150},[144,4771,3062],{"class":154},[144,4773,200],{"class":150},[144,4775,346],{"class":203},[144,4777,3069],{"class":154},[144,4779,1065],{"class":150},[144,4781,575],{"class":203},[144,4783,3069],{"class":154},[144,4785,2322],{"class":150},[144,4787,161],{"class":154},[144,4789,4790],{"class":146,"line":2607},[144,4791,2060],{"class":154},[144,4793,4794,4796,4798,4800,4802,4804],{"class":146,"line":2621},[144,4795,3481],{"class":154},[144,4797,1199],{"class":150},[144,4799,4384],{"class":154},[144,4801,1199],{"class":150},[144,4803,4389],{"class":259},[144,4805,1321],{"class":154},[144,4807,4808],{"class":146,"line":2629},[144,4809,2217],{"class":154},[144,4811,4812,4814,4816],{"class":146,"line":2634},[144,4813,4120],{"class":150},[144,4815,4123],{"class":203},[144,4817,1321],{"class":154},[144,4819,4820],{"class":146,"line":2640},[144,4821,1595],{"class":154},[115,4823,4825],{"id":4824},"_172二维数组","1.7.2二维数组",[98,4827,4828],{},[101,4829,4830],{},"二维数组的四种定义方式",[292,4832,4833,4842],{},[295,4834,4835],{},[298,4836,4837,4840],{},[301,4838,4839],{},"序号",[301,4841,3811],{},[339,4843,4844,4854,4863,4872,4881],{},[298,4845,4846,4848],{},[344,4847,372],{},[344,4849,4850,4851,210],{},"数据类型 数组名[行数]",[144,4852,4853],{},"列数",[298,4855,4856,4858],{},[344,4857,232],{},[344,4859,4850,4860,4862],{},[144,4861,4853],{},"={ {数据1,数据2}，{数据3，数据4}... }",[298,4864,4865,4867],{},[344,4866,226],{},[344,4868,4850,4869,4871],{},[144,4870,4853],{},"={数据1,数据2,数据3...}",[298,4873,4874,4876],{},[344,4875,448],{},[344,4877,4878,4879,4871],{},"数据类型 数组名[]",[144,4880,4853],{},[298,4882,4883,4886],{},[344,4884,4885],{},"注意：不能只省略列数",[344,4887],{},[98,4889,4890],{"start":66},[101,4891,4892],{},"二维数组数组名",[1162,4894,4895,4898],{},[101,4896,4897],{},"1.查看二维数组所占内存空间",[101,4899,4900],{},"2.获取二维数组首地址",[14,4902,4903],{},"已知二维数组，求二维数组的行数与列数",[135,4905,4907],{"className":137,"code":4906,"language":139,"meta":30,"style":30},"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",[141,4908,4909,4917,4921,4939,4943,4961,4977,4982,5007,5040],{"__ignoreMap":30},[144,4910,4911,4913,4915],{"class":146,"line":147},[144,4912,158],{"class":150},[144,4914,2003],{"class":1993},[144,4916,2006],{"class":154},[144,4918,4919],{"class":146,"line":66},[144,4920,1576],{"class":154},[144,4922,4923,4925,4927,4929,4932,4934,4936],{"class":146,"line":1210},[144,4924,2015],{"class":150},[144,4926,3992],{"class":154},[144,4928,232],{"class":203},[144,4930,4931],{"class":154},"][",[144,4933,226],{"class":203},[144,4935,1095],{"class":154},[144,4937,4938],{"class":150},"=\n",[144,4940,4941],{"class":146,"line":1225},[144,4942,2060],{"class":154},[144,4944,4945,4948,4950,4952,4954,4956,4958],{"class":146,"line":1231},[144,4946,4947],{"class":154},"        {",[144,4949,372],{"class":203},[144,4951,533],{"class":154},[144,4953,232],{"class":203},[144,4955,533],{"class":154},[144,4957,226],{"class":203},[144,4959,4960],{"class":154},"},\n",[144,4962,4963,4965,4967,4969,4971,4973,4975],{"class":146,"line":1245},[144,4964,4947],{"class":154},[144,4966,448],{"class":203},[144,4968,533],{"class":154},[144,4970,474],{"class":203},[144,4972,533],{"class":154},[144,4974,499],{"class":203},[144,4976,1595],{"class":154},[144,4978,4979],{"class":146,"line":1251},[144,4980,4981],{"class":154},"    };\n",[144,4983,4984,4986,4988,4991,4993,4995,4997,4999,5001,5003,5005],{"class":146,"line":1342},[144,4985,1581],{"class":154},[144,4987,1199],{"class":150},[144,4989,4990],{"class":259},"\"二维数组的行数\"",[144,4992,1403],{"class":150},[144,4994,4236],{"class":154},[144,4996,4239],{"class":150},[144,4998,3881],{"class":154},[144,5000,346],{"class":203},[144,5002,4246],{"class":154},[144,5004,1199],{"class":150},[144,5006,1222],{"class":154},[144,5008,5009,5011,5013,5016,5018,5020,5022,5024,5026,5028,5030,5032,5034,5036,5038],{"class":146,"line":1348},[144,5010,1581],{"class":154},[144,5012,1199],{"class":150},[144,5014,5015],{"class":259},"\"二维数组的列数\"",[144,5017,1403],{"class":150},[144,5019,3881],{"class":154},[144,5021,346],{"class":203},[144,5023,4246],{"class":154},[144,5025,4239],{"class":150},[144,5027,3881],{"class":154},[144,5029,346],{"class":203},[144,5031,4931],{"class":154},[144,5033,346],{"class":203},[144,5035,4246],{"class":154},[144,5037,1199],{"class":150},[144,5039,1222],{"class":154},[144,5041,5042],{"class":146,"line":1360},[144,5043,1595],{"class":154},[14,5045,5046],{},"查看二维数组首地址",[135,5048,5050],{"className":137,"code":5049,"language":139,"meta":30,"style":30},"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",[141,5051,5052,5069,5095,5120],{"__ignoreMap":30},[144,5053,5054,5056,5058,5061,5063,5065,5067],{"class":146,"line":147},[144,5055,1400],{"class":154},[144,5057,1199],{"class":150},[144,5059,5060],{"class":259},"\"二维数组首地址：\"",[144,5062,1199],{"class":150},[144,5064,3910],{"class":154},[144,5066,1199],{"class":150},[144,5068,1222],{"class":154},[144,5070,5071,5073,5075,5078,5080,5082,5084,5087,5089,5091,5093],{"class":146,"line":66},[144,5072,1400],{"class":154},[144,5074,1199],{"class":150},[144,5076,5077],{"class":259},"\"二维数组第一行的首地址：\"",[144,5079,1199],{"class":150},[144,5081,155],{"class":154},[144,5083,158],{"class":150},[144,5085,5086],{"class":154},")arr[",[144,5088,346],{"class":203},[144,5090,1095],{"class":154},[144,5092,1199],{"class":150},[144,5094,1222],{"class":154},[144,5096,5097,5099,5101,5104,5106,5108,5110,5112,5114,5116,5118],{"class":146,"line":1210},[144,5098,1400],{"class":154},[144,5100,1199],{"class":150},[144,5102,5103],{"class":259},"\"二维数组第二行的首地址：\"",[144,5105,1199],{"class":150},[144,5107,155],{"class":154},[144,5109,158],{"class":150},[144,5111,5086],{"class":154},[144,5113,372],{"class":203},[144,5115,1095],{"class":154},[144,5117,1199],{"class":150},[144,5119,1222],{"class":154},[144,5121,5122,5124,5126,5129,5131,5133,5135,5137,5139,5141,5143,5145,5147,5149,5151,5153],{"class":146,"line":1225},[144,5123,1400],{"class":154},[144,5125,1199],{"class":150},[144,5127,5128],{"class":259},"\"二维数组第一个元素的首地址:\"",[144,5130,1199],{"class":150},[144,5132,155],{"class":154},[144,5134,158],{"class":150},[144,5136,584],{"class":154},[144,5138,508],{"class":150},[144,5140,3936],{"class":154},[144,5142,346],{"class":203},[144,5144,4931],{"class":154},[144,5146,346],{"class":203},[144,5148,1095],{"class":154},[144,5150,1199],{"class":150},[144,5152,1269],{"class":154},[144,5154,5155],{"class":213},"\u002F\u002F对于数，要加取址符\n",[5157,5158,5159],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":30,"searchDepth":66,"depth":66,"links":5161},[5162,5163,5164,5172,5173,5179,5184],{"id":88,"depth":66,"text":89},{"id":95,"depth":66,"text":96},{"id":112,"depth":66,"text":113,"children":5165},[5166,5167,5168,5169,5170,5171],{"id":117,"depth":1210,"text":118},{"id":171,"depth":1210,"text":172},{"id":240,"depth":1210,"text":241},{"id":1180,"depth":1210,"text":1181},{"id":1275,"depth":1210,"text":1276},{"id":1374,"depth":1210,"text":1375},{"id":1416,"depth":66,"text":1417},{"id":1484,"depth":66,"text":1485,"children":5174},[5175,5176,5177,5178],{"id":1488,"depth":1210,"text":1489},{"id":1509,"depth":1210,"text":1510},{"id":1518,"depth":1210,"text":1519},{"id":1527,"depth":1210,"text":1528},{"id":1536,"depth":66,"text":1537,"children":5180},[5181,5182,5183],{"id":1540,"depth":1210,"text":1541},{"id":2235,"depth":1210,"text":2236},{"id":3651,"depth":1210,"text":3652},{"id":3792,"depth":66,"text":3793,"children":5185},[5186,5187],{"id":3796,"depth":1210,"text":3797},{"id":4824,"depth":1210,"text":4825},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":80,"description":30},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5194,"title":5195,"body":5196,"description":30,"extension":70,"meta":6296,"navigation":72,"path":6297,"seo":6298,"stem":6299,"__hash__":6300},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5197,"toc":6288},[5198,5201,5205,5213,5221,5224,5290,5294,5297,5373,5377,5380,5383,5386,5599,5603,5608,5672,5677,5744,5749,5840,5843,5948,5952,5955,5961,6105,6109,6112,6126,6129,6174,6177,6285],[10,5199,5195],{"id":5200},"_2函数",[18,5202,5204],{"id":5203},"_21函数概述","2.1函数概述",[98,5206,5207,5210],{},[101,5208,5209],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[101,5211,5212],{},"语法：",[135,5214,5219],{"className":5215,"code":5217,"language":5218,"meta":30},[5216],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[141,5220,5217],{"__ignoreMap":30},[14,5222,5223],{},"小案例",[135,5225,5227],{"className":137,"code":5226,"language":139,"meta":30,"style":30},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[141,5228,5229,5234,5258,5262,5279,5286],{"__ignoreMap":30},[144,5230,5231],{"class":146,"line":147},[144,5232,5233],{"class":213},"\u002F\u002Fnum1,num2形参\n",[144,5235,5236,5238,5241,5243,5245,5249,5251,5253,5256],{"class":146,"line":66},[144,5237,158],{"class":150},[144,5239,5240],{"class":1993}," add",[144,5242,155],{"class":154},[144,5244,158],{"class":150},[144,5246,5248],{"class":5247},"s4XuR"," num1",[144,5250,533],{"class":154},[144,5252,158],{"class":150},[144,5254,5255],{"class":5247}," num2",[144,5257,161],{"class":154},[144,5259,5260],{"class":146,"line":1210},[144,5261,1576],{"class":154},[144,5263,5264,5266,5269,5271,5274,5276],{"class":146,"line":1225},[144,5265,2015],{"class":150},[144,5267,5268],{"class":154}," sum",[144,5270,200],{"class":150},[144,5272,5273],{"class":154},"num1",[144,5275,636],{"class":150},[144,5277,5278],{"class":154},"num2;\n",[144,5280,5281,5283],{"class":146,"line":1231},[144,5282,4120],{"class":150},[144,5284,5285],{"class":154}," sum;\n",[144,5287,5288],{"class":146,"line":1245},[144,5289,1595],{"class":154},[18,5291,5293],{"id":5292},"_22函数调用","2.2函数调用",[14,5295,5296],{},"调用刚刚写的求和函数",[135,5298,5300],{"className":137,"code":5299,"language":139,"meta":30,"style":30},"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",[141,5301,5302,5310,5314,5319,5331,5343,5352,5357,5369],{"__ignoreMap":30},[144,5303,5304,5306,5308],{"class":146,"line":147},[144,5305,158],{"class":150},[144,5307,2003],{"class":1993},[144,5309,2006],{"class":154},[144,5311,5312],{"class":146,"line":66},[144,5313,1576],{"class":154},[144,5315,5316],{"class":146,"line":1210},[144,5317,5318],{"class":213},"    \u002F\u002Fa,b实参\n",[144,5320,5321,5323,5325,5327,5329],{"class":146,"line":1225},[144,5322,2015],{"class":150},[144,5324,1429],{"class":154},[144,5326,200],{"class":150},[144,5328,346],{"class":203},[144,5330,1321],{"class":154},[144,5332,5333,5335,5337,5339,5341],{"class":146,"line":1231},[144,5334,2015],{"class":150},[144,5336,2863],{"class":154},[144,5338,200],{"class":150},[144,5340,346],{"class":203},[144,5342,1321],{"class":154},[144,5344,5345,5347,5349],{"class":146,"line":1245},[144,5346,2042],{"class":154},[144,5348,1460],{"class":150},[144,5350,5351],{"class":154},"a,b;\n",[144,5353,5354],{"class":146,"line":1251},[144,5355,5356],{"class":213},"    \u002F\u002F调用函数时，实参值传给了形参\n",[144,5358,5359,5361,5363,5366],{"class":146,"line":1342},[144,5360,1581],{"class":154},[144,5362,1199],{"class":150},[144,5364,5365],{"class":1993},"add",[144,5367,5368],{"class":154},"(a,b);\n",[144,5370,5371],{"class":146,"line":1348},[144,5372,1595],{"class":154},[18,5374,5376],{"id":5375},"_23值传递","2.3值传递",[14,5378,5379],{},"值传递就是函数调用时实参将数值传给形参",[14,5381,5382],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,5384,5385],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[135,5387,5389],{"className":137,"code":5388,"language":139,"meta":30,"style":30},"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",[141,5390,5391,5413,5417,5430,5447,5465,5476,5485,5494,5507,5523,5539,5548,5552,5560,5564,5576,5588,5595],{"__ignoreMap":30},[144,5392,5393,5396,5399,5401,5403,5405,5407,5409,5411],{"class":146,"line":147},[144,5394,5395],{"class":150},"void",[144,5397,5398],{"class":1993}," swap",[144,5400,155],{"class":154},[144,5402,158],{"class":150},[144,5404,5248],{"class":5247},[144,5406,533],{"class":154},[144,5408,158],{"class":150},[144,5410,5255],{"class":5247},[144,5412,161],{"class":154},[144,5414,5415],{"class":146,"line":66},[144,5416,1576],{"class":154},[144,5418,5419,5421,5423,5426,5428],{"class":146,"line":1210},[144,5420,1581],{"class":154},[144,5422,1199],{"class":150},[144,5424,5425],{"class":259},"\"交换前：\"",[144,5427,1199],{"class":150},[144,5429,1222],{"class":154},[144,5431,5432,5434,5436,5439,5441,5443,5445],{"class":146,"line":1225},[144,5433,1581],{"class":154},[144,5435,1199],{"class":150},[144,5437,5438],{"class":259},"\"num1=\"",[144,5440,1199],{"class":150},[144,5442,5273],{"class":154},[144,5444,1199],{"class":150},[144,5446,1222],{"class":154},[144,5448,5449,5451,5453,5456,5458,5461,5463],{"class":146,"line":1231},[144,5450,1581],{"class":154},[144,5452,1199],{"class":150},[144,5454,5455],{"class":259},"\"num2=\"",[144,5457,1199],{"class":150},[144,5459,5460],{"class":154},"num2",[144,5462,1199],{"class":150},[144,5464,1222],{"class":154},[144,5466,5467,5469,5471,5473],{"class":146,"line":1245},[144,5468,2015],{"class":150},[144,5470,4285],{"class":154},[144,5472,200],{"class":150},[144,5474,5475],{"class":154},"num1;\n",[144,5477,5478,5481,5483],{"class":146,"line":1251},[144,5479,5480],{"class":154},"    num1",[144,5482,200],{"class":150},[144,5484,5278],{"class":154},[144,5486,5487,5490,5492],{"class":146,"line":1342},[144,5488,5489],{"class":154},"    num2",[144,5491,200],{"class":150},[144,5493,4310],{"class":154},[144,5495,5496,5498,5500,5503,5505],{"class":146,"line":1348},[144,5497,1581],{"class":154},[144,5499,1199],{"class":150},[144,5501,5502],{"class":259},"\"交换后：\"",[144,5504,1199],{"class":150},[144,5506,1222],{"class":154},[144,5508,5509,5511,5513,5515,5517,5519,5521],{"class":146,"line":1360},[144,5510,1581],{"class":154},[144,5512,1199],{"class":150},[144,5514,5438],{"class":259},[144,5516,1199],{"class":150},[144,5518,5273],{"class":154},[144,5520,1199],{"class":150},[144,5522,1222],{"class":154},[144,5524,5525,5527,5529,5531,5533,5535,5537],{"class":146,"line":1642},[144,5526,1581],{"class":154},[144,5528,1199],{"class":150},[144,5530,5455],{"class":259},[144,5532,1199],{"class":150},[144,5534,5460],{"class":154},[144,5536,1199],{"class":150},[144,5538,1222],{"class":154},[144,5540,5541,5543,5545],{"class":146,"line":1647},[144,5542,4120],{"class":150},[144,5544,210],{"class":154},[144,5546,5547],{"class":213},"\u002F\u002F或者不写\n",[144,5549,5550],{"class":146,"line":1653},[144,5551,1595],{"class":154},[144,5553,5554,5556,5558],{"class":146,"line":1658},[144,5555,158],{"class":150},[144,5557,2003],{"class":1993},[144,5559,2006],{"class":154},[144,5561,5562],{"class":146,"line":1672},[144,5563,1576],{"class":154},[144,5565,5566,5568,5570,5572,5574],{"class":146,"line":1677},[144,5567,2015],{"class":150},[144,5569,1429],{"class":154},[144,5571,200],{"class":150},[144,5573,601],{"class":203},[144,5575,1321],{"class":154},[144,5577,5578,5580,5582,5584,5586],{"class":146,"line":1683},[144,5579,2015],{"class":150},[144,5581,2863],{"class":154},[144,5583,200],{"class":150},[144,5585,855],{"class":203},[144,5587,1321],{"class":154},[144,5589,5590,5593],{"class":146,"line":1704},[144,5591,5592],{"class":1993},"    swap",[144,5594,5368],{"class":154},[144,5596,5597],{"class":146,"line":1709},[144,5598,1595],{"class":154},[18,5600,5602],{"id":5601},"_24函数的常见形式","2.4函数的常见形式",[98,5604,5605],{},[101,5606,5607],{},"无参无返",[135,5609,5611],{"className":137,"code":5610,"language":139,"meta":30,"style":30},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[141,5612,5613,5622,5626,5639,5643,5651,5655,5660,5668],{"__ignoreMap":30},[144,5614,5615,5617,5620],{"class":146,"line":147},[144,5616,5395],{"class":150},[144,5618,5619],{"class":1993}," test01",[144,5621,2006],{"class":154},[144,5623,5624],{"class":146,"line":66},[144,5625,1576],{"class":154},[144,5627,5628,5630,5632,5635,5637],{"class":146,"line":1210},[144,5629,1581],{"class":154},[144,5631,1199],{"class":150},[144,5633,5634],{"class":259},"\"你好\"",[144,5636,1199],{"class":150},[144,5638,1222],{"class":154},[144,5640,5641],{"class":146,"line":1225},[144,5642,1595],{"class":154},[144,5644,5645,5647,5649],{"class":146,"line":1231},[144,5646,158],{"class":150},[144,5648,2003],{"class":1993},[144,5650,2006],{"class":154},[144,5652,5653],{"class":146,"line":1245},[144,5654,1576],{"class":154},[144,5656,5657],{"class":146,"line":1251},[144,5658,5659],{"class":213},"    \u002F\u002F函数调用\n",[144,5661,5662,5665],{"class":146,"line":1342},[144,5663,5664],{"class":1993},"    test01",[144,5666,5667],{"class":154},"();\n",[144,5669,5670],{"class":146,"line":1348},[144,5671,1595],{"class":154},[98,5673,5674],{"start":66},[101,5675,5676],{},"有参无返",[135,5678,5680],{"className":137,"code":5679,"language":139,"meta":30,"style":30},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[141,5681,5682,5697,5701,5713,5717,5725,5729,5740],{"__ignoreMap":30},[144,5683,5684,5686,5689,5691,5693,5695],{"class":146,"line":147},[144,5685,5395],{"class":150},[144,5687,5688],{"class":1993}," test02",[144,5690,155],{"class":154},[144,5692,158],{"class":150},[144,5694,1429],{"class":5247},[144,5696,161],{"class":154},[144,5698,5699],{"class":146,"line":66},[144,5700,1576],{"class":154},[144,5702,5703,5705,5707,5709,5711],{"class":146,"line":1210},[144,5704,1581],{"class":154},[144,5706,1199],{"class":150},[144,5708,5634],{"class":259},[144,5710,1199],{"class":150},[144,5712,1222],{"class":154},[144,5714,5715],{"class":146,"line":1225},[144,5716,1595],{"class":154},[144,5718,5719,5721,5723],{"class":146,"line":1231},[144,5720,158],{"class":150},[144,5722,2003],{"class":1993},[144,5724,2006],{"class":154},[144,5726,5727],{"class":146,"line":1245},[144,5728,1576],{"class":154},[144,5730,5731,5734,5736,5738],{"class":146,"line":1251},[144,5732,5733],{"class":1993},"    test02",[144,5735,155],{"class":154},[144,5737,466],{"class":203},[144,5739,2749],{"class":154},[144,5741,5742],{"class":146,"line":1342},[144,5743,1595],{"class":154},[98,5745,5746],{"start":1210},[101,5747,5748],{},"无参有返",[135,5750,5752],{"className":137,"code":5751,"language":139,"meta":30,"style":30},"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",[141,5753,5754,5763,5767,5779,5788,5792,5800,5804,5817,5836],{"__ignoreMap":30},[144,5755,5756,5758,5761],{"class":146,"line":147},[144,5757,158],{"class":150},[144,5759,5760],{"class":1993}," test03",[144,5762,2006],{"class":154},[144,5764,5765],{"class":146,"line":66},[144,5766,1576],{"class":154},[144,5768,5769,5771,5773,5775,5777],{"class":146,"line":1210},[144,5770,1581],{"class":154},[144,5772,1199],{"class":150},[144,5774,5634],{"class":259},[144,5776,1199],{"class":150},[144,5778,1222],{"class":154},[144,5780,5781,5783,5786],{"class":146,"line":1225},[144,5782,4120],{"class":150},[144,5784,5785],{"class":203}," 100",[144,5787,1321],{"class":154},[144,5789,5790],{"class":146,"line":1231},[144,5791,1595],{"class":154},[144,5793,5794,5796,5798],{"class":146,"line":1245},[144,5795,158],{"class":150},[144,5797,2003],{"class":1993},[144,5799,2006],{"class":154},[144,5801,5802],{"class":146,"line":1251},[144,5803,1576],{"class":154},[144,5805,5806,5808,5810,5812,5815],{"class":146,"line":1342},[144,5807,2015],{"class":150},[144,5809,5248],{"class":154},[144,5811,200],{"class":150},[144,5813,5814],{"class":1993},"test03",[144,5816,5667],{"class":154},[144,5818,5819,5821,5823,5825,5827,5829,5831,5833],{"class":146,"line":1348},[144,5820,1581],{"class":154},[144,5822,1199],{"class":150},[144,5824,5438],{"class":259},[144,5826,1199],{"class":150},[144,5828,5273],{"class":154},[144,5830,1199],{"class":150},[144,5832,1269],{"class":154},[144,5834,5835],{"class":213}," \u002F\u002F100\n",[144,5837,5838],{"class":146,"line":1360},[144,5839,1595],{"class":154},[14,5841,5842],{},"4.有参有返",[135,5844,5846],{"className":137,"code":5845,"language":139,"meta":30,"style":30},"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",[141,5847,5848,5863,5867,5880,5886,5890,5899,5903,5915,5929,5944],{"__ignoreMap":30},[144,5849,5850,5852,5855,5857,5859,5861],{"class":146,"line":147},[144,5851,158],{"class":150},[144,5853,5854],{"class":1993}," test04",[144,5856,155],{"class":154},[144,5858,158],{"class":150},[144,5860,1429],{"class":5247},[144,5862,161],{"class":154},[144,5864,5865],{"class":146,"line":66},[144,5866,1576],{"class":154},[144,5868,5869,5871,5873,5876,5878],{"class":146,"line":1210},[144,5870,1581],{"class":154},[144,5872,1199],{"class":150},[144,5874,5875],{"class":259},"\"hello\"",[144,5877,1199],{"class":150},[144,5879,1222],{"class":154},[144,5881,5882,5884],{"class":146,"line":1225},[144,5883,4120],{"class":150},[144,5885,1463],{"class":154},[144,5887,5888],{"class":146,"line":1231},[144,5889,1595],{"class":154},[144,5891,5892,5894,5897],{"class":146,"line":1245},[144,5893,158],{"class":150},[144,5895,5896],{"class":1993}," mian",[144,5898,2006],{"class":154},[144,5900,5901],{"class":146,"line":1251},[144,5902,1576],{"class":154},[144,5904,5905,5907,5909,5911,5913],{"class":146,"line":1342},[144,5906,2015],{"class":150},[144,5908,2863],{"class":154},[144,5910,200],{"class":150},[144,5912,372],{"class":203},[144,5914,1321],{"class":154},[144,5916,5917,5919,5921,5923,5926],{"class":146,"line":1348},[144,5918,2015],{"class":150},[144,5920,2879],{"class":154},[144,5922,200],{"class":150},[144,5924,5925],{"class":1993},"test04",[144,5927,5928],{"class":154},"(b);\n",[144,5930,5931,5933,5935,5937,5939,5941],{"class":146,"line":1360},[144,5932,1581],{"class":154},[144,5934,1199],{"class":150},[144,5936,443],{"class":154},[144,5938,1199],{"class":150},[144,5940,1269],{"class":154},[144,5942,5943],{"class":213}," \u002F\u002F1\n",[144,5945,5946],{"class":146,"line":1642},[144,5947,1595],{"class":154},[18,5949,5951],{"id":5950},"_25函数的声明","2.5函数的声明",[14,5953,5954],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,5956,5957,5958],{},"函数的",[304,5959,5960],{},"声明可以多次，但是函数的定义只能有一次",[135,5962,5964],{"className":137,"code":5963,"language":139,"meta":30,"style":30},"\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",[141,5965,5966,5971,5976,6001,6010,6014,6026,6038,6054,6058,6078,6082,6101],{"__ignoreMap":30},[144,5967,5968],{"class":146,"line":147},[144,5969,5970],{"class":213},"\u002F\u002F函数声明\n",[144,5972,5973],{"class":146,"line":66},[144,5974,5975],{"class":213},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[144,5977,5978,5980,5983,5985,5987,5989,5991,5993,5995,5998],{"class":146,"line":1210},[144,5979,158],{"class":150},[144,5981,5982],{"class":1993}," max",[144,5984,155],{"class":154},[144,5986,158],{"class":150},[144,5988,1429],{"class":5247},[144,5990,533],{"class":154},[144,5992,158],{"class":150},[144,5994,2863],{"class":5247},[144,5996,5997],{"class":154},");",[144,5999,6000],{"class":213},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[144,6002,6003,6005,6007],{"class":146,"line":1225},[144,6004,158],{"class":150},[144,6006,2003],{"class":1993},[144,6008,6009],{"class":154},"() \n",[144,6011,6012],{"class":146,"line":1231},[144,6013,1576],{"class":154},[144,6015,6016,6018,6020,6022,6024],{"class":146,"line":1245},[144,6017,2015],{"class":150},[144,6019,1429],{"class":154},[144,6021,200],{"class":150},[144,6023,601],{"class":203},[144,6025,1321],{"class":154},[144,6027,6028,6030,6032,6034,6036],{"class":146,"line":1251},[144,6029,2015],{"class":150},[144,6031,2863],{"class":154},[144,6033,200],{"class":150},[144,6035,855],{"class":203},[144,6037,1321],{"class":154},[144,6039,6040,6042,6044,6047,6050,6052],{"class":146,"line":1342},[144,6041,1581],{"class":154},[144,6043,1199],{"class":150},[144,6045,6046],{"class":1993},"max",[144,6048,6049],{"class":154},"(a,b)",[144,6051,1199],{"class":150},[144,6053,1222],{"class":154},[144,6055,6056],{"class":146,"line":1348},[144,6057,1595],{"class":154},[144,6059,6060,6062,6064,6066,6068,6070,6072,6074,6076],{"class":146,"line":1360},[144,6061,158],{"class":150},[144,6063,5982],{"class":1993},[144,6065,155],{"class":154},[144,6067,158],{"class":150},[144,6069,1429],{"class":5247},[144,6071,533],{"class":154},[144,6073,158],{"class":150},[144,6075,2863],{"class":5247},[144,6077,161],{"class":154},[144,6079,6080],{"class":146,"line":1642},[144,6081,1576],{"class":154},[144,6083,6084,6086,6088,6090,6092,6094,6096,6098],{"class":146,"line":1647},[144,6085,4120],{"class":150},[144,6087,1429],{"class":154},[144,6089,1115],{"class":150},[144,6091,418],{"class":154},[144,6093,1141],{"class":150},[144,6095,393],{"class":154},[144,6097,1014],{"class":150},[144,6099,6100],{"class":154},"b;\n",[144,6102,6103],{"class":146,"line":1653},[144,6104,1595],{"class":154},[18,6106,6108],{"id":6107},"_26函数的分文件编写","2.6函数的分文件编写",[14,6110,6111],{},"4个步骤：",[1162,6113,6114,6117,6120,6123],{},[101,6115,6116],{},"1.创建后缀名为.h的头文件",[101,6118,6119],{},"2.创建后缀名为.cpp的源文件",[101,6121,6122],{},"3.在头文件中写函数的定义",[101,6124,6125],{},"4.在源文件中写函数的定义\n示例：",[14,6127,6128],{},"头文件：swap.h",[135,6130,6132],{"className":137,"code":6131,"language":139,"meta":30,"style":30},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[141,6133,6134,6140,6150,6154],{"__ignoreMap":30},[144,6135,6136,6138],{"class":146,"line":147},[144,6137,1979],{"class":150},[144,6139,1982],{"class":259},[144,6141,6142,6144,6146,6148],{"class":146,"line":66},[144,6143,1987],{"class":150},[144,6145,1990],{"class":150},[144,6147,1994],{"class":1993},[144,6149,1321],{"class":154},[144,6151,6152],{"class":146,"line":1210},[144,6153,5970],{"class":213},[144,6155,6156,6158,6160,6162,6164,6166,6168,6170,6172],{"class":146,"line":1225},[144,6157,5395],{"class":150},[144,6159,5398],{"class":1993},[144,6161,155],{"class":154},[144,6163,158],{"class":150},[144,6165,1429],{"class":5247},[144,6167,533],{"class":154},[144,6169,158],{"class":150},[144,6171,2863],{"class":5247},[144,6173,2749],{"class":154},[14,6175,6176],{},"源文件：swap.cpp",[135,6178,6180],{"className":137,"code":6179,"language":139,"meta":30,"style":30},"#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",[141,6181,6182,6189,6194,6214,6218,6229,6238,6247,6264,6281],{"__ignoreMap":30},[144,6183,6184,6186],{"class":146,"line":147},[144,6185,1979],{"class":150},[144,6187,6188],{"class":259}," \"swap.h\"\n",[144,6190,6191],{"class":146,"line":66},[144,6192,6193],{"class":213},"\u002F\u002F函数的定义\n",[144,6195,6196,6198,6200,6202,6204,6206,6208,6210,6212],{"class":146,"line":1210},[144,6197,5395],{"class":150},[144,6199,5398],{"class":1993},[144,6201,155],{"class":154},[144,6203,158],{"class":150},[144,6205,1429],{"class":5247},[144,6207,533],{"class":154},[144,6209,158],{"class":150},[144,6211,2863],{"class":5247},[144,6213,161],{"class":154},[144,6215,6216],{"class":146,"line":1225},[144,6217,1576],{"class":154},[144,6219,6220,6222,6224,6226],{"class":146,"line":1231},[144,6221,2015],{"class":150},[144,6223,4285],{"class":154},[144,6225,200],{"class":150},[144,6227,6228],{"class":154},"a;\n",[144,6230,6231,6234,6236],{"class":146,"line":1245},[144,6232,6233],{"class":154},"    a",[144,6235,200],{"class":150},[144,6237,6100],{"class":154},[144,6239,6240,6243,6245],{"class":146,"line":1251},[144,6241,6242],{"class":154},"    b",[144,6244,200],{"class":150},[144,6246,4310],{"class":154},[144,6248,6249,6251,6253,6256,6258,6260,6262],{"class":146,"line":1342},[144,6250,1581],{"class":154},[144,6252,1199],{"class":150},[144,6254,6255],{"class":259},"\"a=\"",[144,6257,1199],{"class":150},[144,6259,393],{"class":154},[144,6261,1199],{"class":150},[144,6263,1222],{"class":154},[144,6265,6266,6268,6270,6273,6275,6277,6279],{"class":146,"line":1348},[144,6267,1581],{"class":154},[144,6269,1199],{"class":150},[144,6271,6272],{"class":259},"\"b=\"",[144,6274,1199],{"class":150},[144,6276,418],{"class":154},[144,6278,1199],{"class":150},[144,6280,1222],{"class":154},[144,6282,6283],{"class":146,"line":1360},[144,6284,1595],{"class":154},[5157,6286,6287],{},"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":30,"searchDepth":66,"depth":66,"links":6289},[6290,6291,6292,6293,6294,6295],{"id":5203,"depth":66,"text":5204},{"id":5292,"depth":66,"text":5293},{"id":5375,"depth":66,"text":5376},{"id":5601,"depth":66,"text":5602},{"id":5950,"depth":66,"text":5951},{"id":6107,"depth":66,"text":6108},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5195,"description":30},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6302,"title":6303,"body":6304,"description":6311,"extension":70,"meta":7716,"navigation":72,"path":7717,"seo":7718,"stem":7719,"__hash__":7720},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6305,"toc":7706},[6306,6309,6312,6316,6478,6482,6485,6488,6491,6494,6634,6638,6641,6644,6647,6712,6716,6721,6788,6791,6795,6798,6809,6814,6834,6837,6842,6861,6864,6868,6887,6890,6894,7129,7133,7136,7139,7142,7304,7307,7311,7314,7320,7703],[10,6307,6303],{"id":6308},"_3指针",[14,6310,6311],{},"通过指针保存一个地址，指针就是个地址",[18,6313,6315],{"id":6314},"_31定义指针","3.1定义指针",[135,6317,6319],{"className":137,"code":6318,"language":139,"meta":30,"style":30},"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",[141,6320,6321,6329,6333,6338,6350,6355,6363,6373,6391,6411,6415,6420,6425,6430,6444,6460,6474],{"__ignoreMap":30},[144,6322,6323,6325,6327],{"class":146,"line":147},[144,6324,158],{"class":150},[144,6326,2003],{"class":1993},[144,6328,2006],{"class":154},[144,6330,6331],{"class":146,"line":66},[144,6332,1576],{"class":154},[144,6334,6335],{"class":146,"line":1210},[144,6336,6337],{"class":213},"    \u002F\u002F1.定义指针\n",[144,6339,6340,6342,6344,6346,6348],{"class":146,"line":1225},[144,6341,2015],{"class":150},[144,6343,1429],{"class":154},[144,6345,200],{"class":150},[144,6347,601],{"class":203},[144,6349,1321],{"class":154},[144,6351,6352],{"class":146,"line":1231},[144,6353,6354],{"class":213},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[144,6356,6357,6360],{"class":146,"line":1245},[144,6358,6359],{"class":150},"    int*",[144,6361,6362],{"class":154},"p;\n",[144,6364,6365,6368,6371],{"class":146,"line":1251},[144,6366,6367],{"class":154},"    p",[144,6369,6370],{"class":150},"=&",[144,6372,6228],{"class":154},[144,6374,6375,6377,6379,6382,6385,6387,6389],{"class":146,"line":1342},[144,6376,1581],{"class":154},[144,6378,1199],{"class":150},[144,6380,6381],{"class":259},"\"a的地址为：\"",[144,6383,6384],{"class":150},"\u003C\u003C&",[144,6386,393],{"class":154},[144,6388,1199],{"class":150},[144,6390,1222],{"class":154},[144,6392,6393,6395,6397,6400,6402,6404,6406,6408],{"class":146,"line":1348},[144,6394,1581],{"class":154},[144,6396,1199],{"class":150},[144,6398,6399],{"class":259},"\"指针p为：\"",[144,6401,1199],{"class":150},[144,6403,14],{"class":154},[144,6405,1199],{"class":150},[144,6407,1269],{"class":154},[144,6409,6410],{"class":213},"\u002F\u002F指针p表示的就是a的地址\n",[144,6412,6413],{"class":146,"line":1360},[144,6414,2430],{"emptyLinePlaceholder":72},[144,6416,6417],{"class":146,"line":1642},[144,6418,6419],{"class":213},"    \u002F\u002F2.使用指针\n",[144,6421,6422],{"class":146,"line":1647},[144,6423,6424],{"class":213},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[144,6426,6427],{"class":146,"line":1653},[144,6428,6429],{"class":213},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[144,6431,6432,6435,6437,6439,6442],{"class":146,"line":1658},[144,6433,6434],{"class":150},"    *",[144,6436,14],{"class":154},[144,6438,200],{"class":150},[144,6440,6441],{"class":203},"1000",[144,6443,1321],{"class":154},[144,6445,6446,6448,6451,6453,6455,6457],{"class":146,"line":1672},[144,6447,1581],{"class":154},[144,6449,6450],{"class":150},"\u003C\u003C*",[144,6452,14],{"class":154},[144,6454,1199],{"class":150},[144,6456,1269],{"class":154},[144,6458,6459],{"class":213},"\u002F\u002F1000\n",[144,6461,6462,6464,6466,6468,6470,6472],{"class":146,"line":1677},[144,6463,1581],{"class":154},[144,6465,1199],{"class":150},[144,6467,393],{"class":154},[144,6469,1199],{"class":150},[144,6471,1269],{"class":154},[144,6473,6459],{"class":213},[144,6475,6476],{"class":146,"line":1683},[144,6477,1595],{"class":154},[18,6479,6481],{"id":6480},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,6483,6484],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,6486,6487],{},"在32位操作系统下：占用4个字节空间",[14,6489,6490],{},"在64位操作系统下：占用8个字节空间",[14,6492,6493],{},"上方是不管啥数据类型的",[135,6495,6497],{"className":137,"code":6496,"language":139,"meta":30,"style":30},"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",[141,6498,6499,6507,6511,6516,6528,6533,6538,6543,6556,6578,6604,6630],{"__ignoreMap":30},[144,6500,6501,6503,6505],{"class":146,"line":147},[144,6502,158],{"class":150},[144,6504,2003],{"class":1993},[144,6506,2006],{"class":154},[144,6508,6509],{"class":146,"line":66},[144,6510,1576],{"class":154},[144,6512,6513],{"class":146,"line":1210},[144,6514,6515],{"class":213},"    \u002F\u002F指针所占内存空间\n",[144,6517,6518,6520,6522,6524,6526],{"class":146,"line":1225},[144,6519,2015],{"class":150},[144,6521,1429],{"class":154},[144,6523,200],{"class":150},[144,6525,601],{"class":203},[144,6527,1321],{"class":154},[144,6529,6530],{"class":146,"line":1231},[144,6531,6532],{"class":213},"    \u002F\u002Fint *p;\n",[144,6534,6535],{"class":146,"line":1245},[144,6536,6537],{"class":213},"    \u002F\u002Fp=&a;\n",[144,6539,6540],{"class":146,"line":1251},[144,6541,6542],{"class":213},"    \u002F\u002F上述可以写为以下：\n",[144,6544,6545,6547,6550,6552,6554],{"class":146,"line":1342},[144,6546,2015],{"class":150},[144,6548,6549],{"class":150}," *",[144,6551,14],{"class":154},[144,6553,6370],{"class":150},[144,6555,6228],{"class":154},[144,6557,6558,6561,6563,6566,6568,6571,6573,6575],{"class":146,"line":1348},[144,6559,6560],{"class":154},"    cout ",[144,6562,1199],{"class":150},[144,6564,6565],{"class":259},"\"sizeof(int *)\"",[144,6567,1403],{"class":150},[144,6569,6570],{"class":154},"(p)",[144,6572,1199],{"class":150},[144,6574,1269],{"class":154},[144,6576,6577],{"class":213},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[144,6579,6580,6582,6584,6586,6588,6590,6592,6594,6596,6598,6601],{"class":146,"line":1360},[144,6581,6560],{"class":154},[144,6583,1199],{"class":150},[144,6585,6565],{"class":259},[144,6587,1403],{"class":150},[144,6589,155],{"class":154},[144,6591,158],{"class":150},[144,6593,6549],{"class":150},[144,6595,584],{"class":154},[144,6597,1199],{"class":150},[144,6599,6600],{"class":154},"endl",[144,6602,6603],{"class":213},"  \u002F\u002F4字节(32位的话)\n",[144,6605,6606,6608,6610,6613,6615,6617,6619,6621,6623,6625,6627],{"class":146,"line":1642},[144,6607,6560],{"class":154},[144,6609,1199],{"class":150},[144,6611,6612],{"class":259},"\"sizeof(char *)\"",[144,6614,1403],{"class":150},[144,6616,155],{"class":154},[144,6618,251],{"class":150},[144,6620,6549],{"class":150},[144,6622,584],{"class":154},[144,6624,1199],{"class":150},[144,6626,1269],{"class":154},[144,6628,6629],{"class":213}," \u002F\u002F4字节(32位的话)\n",[144,6631,6632],{"class":146,"line":1647},[144,6633,1595],{"class":154},[18,6635,6637],{"id":6636},"_33空指针","3.3空指针",[14,6639,6640],{},"空指针：指针变量指向内存中编号为0的空间",[14,6642,6643],{},"用途：初始化指针变量",[14,6645,6646],{},"注意：空指针指向的内存是不可以访问的",[135,6648,6650],{"className":137,"code":6649,"language":139,"meta":30,"style":30},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[141,6651,6652,6660,6664,6669,6683,6688,6703,6708],{"__ignoreMap":30},[144,6653,6654,6656,6658],{"class":146,"line":147},[144,6655,158],{"class":150},[144,6657,2003],{"class":1993},[144,6659,2006],{"class":154},[144,6661,6662],{"class":146,"line":66},[144,6663,1576],{"class":154},[144,6665,6666],{"class":146,"line":1210},[144,6667,6668],{"class":213},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[144,6670,6671,6673,6675,6677,6679,6681],{"class":146,"line":1225},[144,6672,2015],{"class":150},[144,6674,6549],{"class":150},[144,6676,14],{"class":154},[144,6678,200],{"class":150},[144,6680,2422],{"class":203},[144,6682,1321],{"class":154},[144,6684,6685],{"class":146,"line":1231},[144,6686,6687],{"class":213},"    \u002F\u002F2.空指针不能进行访问\n",[144,6689,6690,6692,6694,6696,6698,6700],{"class":146,"line":1245},[144,6691,6434],{"class":150},[144,6693,14],{"class":154},[144,6695,200],{"class":150},[144,6697,466],{"class":203},[144,6699,210],{"class":154},[144,6701,6702],{"class":213},"\u002F\u002F直接报错，压根不能访问\n",[144,6704,6705],{"class":146,"line":1251},[144,6706,6707],{"class":213},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[144,6709,6710],{"class":146,"line":1342},[144,6711,1595],{"class":154},[18,6713,6715],{"id":6714},"_34野指针","3.4野指针",[14,6717,6718],{},[304,6719,6720],{},"指针变量指向非法的内存空间",[135,6722,6724],{"className":137,"code":6723,"language":139,"meta":30,"style":30},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[141,6725,6726,6734,6738,6767,6772,6784],{"__ignoreMap":30},[144,6727,6728,6730,6732],{"class":146,"line":147},[144,6729,158],{"class":150},[144,6731,2003],{"class":1993},[144,6733,2006],{"class":154},[144,6735,6736],{"class":146,"line":66},[144,6737,1576],{"class":154},[144,6739,6740,6742,6744,6746,6748,6750,6752,6754,6756,6759,6762,6764],{"class":146,"line":1210},[144,6741,2015],{"class":150},[144,6743,6549],{"class":150},[144,6745,14],{"class":154},[144,6747,200],{"class":150},[144,6749,155],{"class":154},[144,6751,158],{"class":150},[144,6753,6549],{"class":150},[144,6755,584],{"class":154},[144,6757,6758],{"class":150},"0x",[144,6760,6761],{"class":203},"1100",[144,6763,210],{"class":154},[144,6765,6766],{"class":213}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[144,6768,6769],{"class":146,"line":1225},[144,6770,6771],{"class":213},"    \u002F\u002F访问野指针报错\n",[144,6773,6774,6776,6778,6780,6782],{"class":146,"line":1231},[144,6775,1581],{"class":154},[144,6777,6450],{"class":150},[144,6779,14],{"class":154},[144,6781,1199],{"class":150},[144,6783,1222],{"class":154},[144,6785,6786],{"class":146,"line":1245},[144,6787,1595],{"class":154},[14,6789,6790],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[18,6792,6794],{"id":6793},"_35const修饰指针","3.5const修饰指针",[14,6796,6797],{},"三种情况：",[1162,6799,6800,6803,6806],{},[101,6801,6802],{},"const修饰指针 常量指针",[101,6804,6805],{},"const修饰常量 指针常量",[101,6807,6808],{},"const即修饰指针，又修饰常量",[98,6810,6811],{},[101,6812,6813],{},"常量指针",[135,6815,6817],{"className":137,"code":6816,"language":139,"meta":30,"style":30},"const int *p=&a;\n",[141,6818,6819],{"__ignoreMap":30},[144,6820,6821,6824,6826,6828,6830,6832],{"class":146,"line":147},[144,6822,6823],{"class":150},"const",[144,6825,2412],{"class":150},[144,6827,6549],{"class":150},[144,6829,14],{"class":154},[144,6831,6370],{"class":150},[144,6833,6228],{"class":154},[14,6835,6836],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[98,6838,6839],{"start":66},[101,6840,6841],{},"指针常量",[135,6843,6845],{"className":137,"code":6844,"language":139,"meta":30,"style":30},"int *const p=&a;\n",[141,6846,6847],{"__ignoreMap":30},[144,6848,6849,6851,6854,6857,6859],{"class":146,"line":147},[144,6850,158],{"class":150},[144,6852,6853],{"class":150}," *const",[144,6855,6856],{"class":154}," p",[144,6858,6370],{"class":150},[144,6860,6228],{"class":154},[14,6862,6863],{},"指针的指向不可以改，指针指向的值可以改",[98,6865,6866],{"start":1210},[101,6867,6808],{},[135,6869,6871],{"className":137,"code":6870,"language":139,"meta":30,"style":30},"const int *const p=&a;\n",[141,6872,6873],{"__ignoreMap":30},[144,6874,6875,6877,6879,6881,6883,6885],{"class":146,"line":147},[144,6876,6823],{"class":150},[144,6878,2412],{"class":150},[144,6880,6853],{"class":150},[144,6882,6856],{"class":154},[144,6884,6370],{"class":150},[144,6886,6228],{"class":154},[14,6888,6889],{},"指针的指向和指针指向的值都不可以改变",[18,6891,6893],{"id":6892},"_36指针和数组","3.6指针和数组",[135,6895,6897],{"className":137,"code":6896,"language":139,"meta":30,"style":30},"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",[141,6898,6899,6907,6911,6916,6970,6991,7007,7023,7034,7051,7056,7070,7096,7100,7112,7121,7125],{"__ignoreMap":30},[144,6900,6901,6903,6905],{"class":146,"line":147},[144,6902,158],{"class":150},[144,6904,2003],{"class":1993},[144,6906,2006],{"class":154},[144,6908,6909],{"class":146,"line":66},[144,6910,1576],{"class":154},[144,6912,6913],{"class":146,"line":1210},[144,6914,6915],{"class":213},"    \u002F\u002F利用指针访问数组中的元素\n",[144,6917,6918,6920,6922,6924,6926,6928,6930,6932,6934,6936,6938,6940,6942,6944,6946,6948,6950,6952,6954,6956,6958,6960,6962,6964,6966,6968],{"class":146,"line":1225},[144,6919,2015],{"class":150},[144,6921,3992],{"class":154},[144,6923,601],{"class":203},[144,6925,1095],{"class":154},[144,6927,200],{"class":150},[144,6929,1051],{"class":154},[144,6931,372],{"class":203},[144,6933,533],{"class":154},[144,6935,232],{"class":203},[144,6937,533],{"class":154},[144,6939,226],{"class":203},[144,6941,533],{"class":154},[144,6943,448],{"class":203},[144,6945,533],{"class":154},[144,6947,474],{"class":203},[144,6949,533],{"class":154},[144,6951,499],{"class":203},[144,6953,533],{"class":154},[144,6955,524],{"class":203},[144,6957,533],{"class":154},[144,6959,550],{"class":203},[144,6961,533],{"class":154},[144,6963,575],{"class":203},[144,6965,533],{"class":154},[144,6967,601],{"class":203},[144,6969,4025],{"class":154},[144,6971,6972,6974,6976,6979,6981,6983,6985,6987,6989],{"class":146,"line":1231},[144,6973,1581],{"class":154},[144,6975,1199],{"class":150},[144,6977,6978],{"class":259},"\"数组的第一个元素为：\"",[144,6980,1199],{"class":150},[144,6982,3936],{"class":154},[144,6984,346],{"class":203},[144,6986,1095],{"class":154},[144,6988,1199],{"class":150},[144,6990,1222],{"class":154},[144,6992,6993,6995,6997,6999,7001,7004],{"class":146,"line":1245},[144,6994,2015],{"class":150},[144,6996,6549],{"class":150},[144,6998,14],{"class":154},[144,7000,200],{"class":150},[144,7002,7003],{"class":154},"arr;",[144,7005,7006],{"class":213},"\u002F\u002F注意数才要加取地址符号&\n",[144,7008,7009,7011,7013,7015,7017,7019,7021],{"class":146,"line":1251},[144,7010,1581],{"class":154},[144,7012,1199],{"class":150},[144,7014,6978],{"class":259},[144,7016,6450],{"class":150},[144,7018,14],{"class":154},[144,7020,1199],{"class":150},[144,7022,1222],{"class":154},[144,7024,7025,7027,7029,7031],{"class":146,"line":1342},[144,7026,6367],{"class":154},[144,7028,2322],{"class":150},[144,7030,210],{"class":154},[144,7032,7033],{"class":213}," \u002F\u002F让指针向后偏移4个字节\n",[144,7035,7036,7038,7040,7043,7045,7047,7049],{"class":146,"line":1348},[144,7037,1581],{"class":154},[144,7039,1199],{"class":150},[144,7041,7042],{"class":259},"\"数组的第二个元素为：\"",[144,7044,6450],{"class":150},[144,7046,14],{"class":154},[144,7048,1199],{"class":150},[144,7050,1222],{"class":154},[144,7052,7053],{"class":146,"line":1360},[144,7054,7055],{"class":213},"    \u002F\u002F利用指针遍历数组\n",[144,7057,7058,7060,7062,7065,7067],{"class":146,"line":1642},[144,7059,2015],{"class":150},[144,7061,6549],{"class":150},[144,7063,7064],{"class":154},"p2",[144,7066,200],{"class":150},[144,7068,7069],{"class":154},"arr;\n",[144,7071,7072,7074,7076,7078,7080,7082,7084,7086,7088,7090,7092,7094],{"class":146,"line":1647},[144,7073,3231],{"class":150},[144,7075,1688],{"class":154},[144,7077,158],{"class":150},[144,7079,3062],{"class":154},[144,7081,200],{"class":150},[144,7083,346],{"class":203},[144,7085,3069],{"class":154},[144,7087,1065],{"class":150},[144,7089,601],{"class":203},[144,7091,3069],{"class":154},[144,7093,2322],{"class":150},[144,7095,161],{"class":154},[144,7097,7098],{"class":146,"line":1653},[144,7099,2060],{"class":154},[144,7101,7102,7104,7106,7108,7110],{"class":146,"line":1658},[144,7103,3481],{"class":154},[144,7105,6450],{"class":150},[144,7107,7064],{"class":154},[144,7109,1199],{"class":150},[144,7111,1222],{"class":154},[144,7113,7114,7117,7119],{"class":146,"line":1672},[144,7115,7116],{"class":154},"        p2",[144,7118,2322],{"class":150},[144,7120,1321],{"class":154},[144,7122,7123],{"class":146,"line":1677},[144,7124,2217],{"class":154},[144,7126,7127],{"class":146,"line":1683},[144,7128,1595],{"class":154},[18,7130,7132],{"id":7131},"_37指针和函数","3.7指针和函数",[14,7134,7135],{},"利用指针做函数参数，可以修改实参的值",[14,7137,7138],{},"值传递：只改变形参，不改变实参",[14,7140,7141],{},"地址传递：",[135,7143,7145],{"className":137,"code":7144,"language":139,"meta":30,"style":30},"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",[141,7146,7147,7172,7176,7188,7199,7209,7213,7221,7225,7237,7249,7254,7270,7285,7300],{"__ignoreMap":30},[144,7148,7149,7151,7153,7155,7157,7159,7162,7164,7166,7168,7170],{"class":146,"line":147},[144,7150,5395],{"class":150},[144,7152,5398],{"class":1993},[144,7154,155],{"class":154},[144,7156,158],{"class":150},[144,7158,6549],{"class":150},[144,7160,7161],{"class":5247},"p1",[144,7163,533],{"class":154},[144,7165,158],{"class":150},[144,7167,6549],{"class":150},[144,7169,7064],{"class":5247},[144,7171,161],{"class":154},[144,7173,7174],{"class":146,"line":66},[144,7175,1576],{"class":154},[144,7177,7178,7180,7182,7185],{"class":146,"line":1210},[144,7179,2015],{"class":150},[144,7181,4285],{"class":154},[144,7183,7184],{"class":150},"=*",[144,7186,7187],{"class":154},"p1;\n",[144,7189,7190,7192,7194,7196],{"class":146,"line":1225},[144,7191,6434],{"class":150},[144,7193,7161],{"class":154},[144,7195,7184],{"class":150},[144,7197,7198],{"class":154},"p2;\n",[144,7200,7201,7203,7205,7207],{"class":146,"line":1231},[144,7202,6434],{"class":150},[144,7204,7064],{"class":154},[144,7206,200],{"class":150},[144,7208,4310],{"class":154},[144,7210,7211],{"class":146,"line":1245},[144,7212,1595],{"class":154},[144,7214,7215,7217,7219],{"class":146,"line":1251},[144,7216,158],{"class":150},[144,7218,2003],{"class":1993},[144,7220,2006],{"class":154},[144,7222,7223],{"class":146,"line":1342},[144,7224,1576],{"class":154},[144,7226,7227,7229,7231,7233,7235],{"class":146,"line":1348},[144,7228,2015],{"class":150},[144,7230,1429],{"class":154},[144,7232,200],{"class":150},[144,7234,601],{"class":203},[144,7236,1321],{"class":154},[144,7238,7239,7241,7243,7245,7247],{"class":146,"line":1360},[144,7240,2015],{"class":150},[144,7242,2863],{"class":154},[144,7244,200],{"class":150},[144,7246,855],{"class":203},[144,7248,1321],{"class":154},[144,7250,7251],{"class":146,"line":1642},[144,7252,7253],{"class":213},"    \u002F\u002F地址传递\n",[144,7255,7256,7258,7260,7262,7265,7267],{"class":146,"line":1647},[144,7257,5592],{"class":1993},[144,7259,155],{"class":154},[144,7261,508],{"class":150},[144,7263,7264],{"class":154},"a,",[144,7266,508],{"class":150},[144,7268,7269],{"class":154},"b);\n",[144,7271,7272,7274,7276,7278,7280,7282],{"class":146,"line":1653},[144,7273,1581],{"class":154},[144,7275,1199],{"class":150},[144,7277,393],{"class":154},[144,7279,1199],{"class":150},[144,7281,1269],{"class":154},[144,7283,7284],{"class":213},"\u002F\u002F20\n",[144,7286,7287,7289,7291,7293,7295,7297],{"class":146,"line":1658},[144,7288,1581],{"class":154},[144,7290,1199],{"class":150},[144,7292,418],{"class":154},[144,7294,1199],{"class":150},[144,7296,1269],{"class":154},[144,7298,7299],{"class":213},"\u002F\u002F10\n",[144,7301,7302],{"class":146,"line":1672},[144,7303,1595],{"class":154},[14,7305,7306],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[18,7308,7310],{"id":7309},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,7312,7313],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,7315,7316,7317,7319],{},"例如数组：int arr",[144,7318,601],{},"={4,3,6,9,1,2,10,8,7,5}",[135,7321,7323],{"className":137,"code":7322,"language":139,"meta":30,"style":30},"#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",[141,7324,7325,7331,7341,7365,7369,7400,7404,7438,7442,7460,7464,7475,7490,7505,7509,7513,7517,7521,7525,7533,7537,7542,7596,7608,7620,7625,7633,7637,7642,7667,7671,7686,7695,7699],{"__ignoreMap":30},[144,7326,7327,7329],{"class":146,"line":147},[144,7328,1979],{"class":150},[144,7330,1982],{"class":259},[144,7332,7333,7335,7337,7339],{"class":146,"line":66},[144,7334,1987],{"class":150},[144,7336,1990],{"class":150},[144,7338,1994],{"class":1993},[144,7340,1321],{"class":154},[144,7342,7343,7345,7348,7350,7352,7354,7356,7358,7360,7363],{"class":146,"line":1210},[144,7344,5395],{"class":150},[144,7346,7347],{"class":1993}," bubbleSort",[144,7349,155],{"class":154},[144,7351,158],{"class":150},[144,7353,6549],{"class":150},[144,7355,14],{"class":5247},[144,7357,533],{"class":154},[144,7359,158],{"class":150},[144,7361,7362],{"class":5247}," len",[144,7364,161],{"class":154},[144,7366,7367],{"class":146,"line":1225},[144,7368,1576],{"class":154},[144,7370,7371,7373,7375,7377,7379,7381,7383,7385,7387,7390,7392,7394,7396,7398],{"class":146,"line":1231},[144,7372,3231],{"class":150},[144,7374,155],{"class":154},[144,7376,158],{"class":150},[144,7378,3062],{"class":154},[144,7380,200],{"class":150},[144,7382,346],{"class":203},[144,7384,3069],{"class":154},[144,7386,1065],{"class":150},[144,7388,7389],{"class":154},"len",[144,7391,687],{"class":150},[144,7393,372],{"class":203},[144,7395,3069],{"class":154},[144,7397,2322],{"class":150},[144,7399,161],{"class":154},[144,7401,7402],{"class":146,"line":1245},[144,7403,2060],{"class":154},[144,7405,7406,7408,7410,7412,7414,7416,7418,7420,7422,7424,7426,7428,7430,7432,7434,7436],{"class":146,"line":1251},[144,7407,3433],{"class":150},[144,7409,155],{"class":154},[144,7411,158],{"class":150},[144,7413,3440],{"class":154},[144,7415,200],{"class":150},[144,7417,346],{"class":203},[144,7419,3447],{"class":154},[144,7421,1065],{"class":150},[144,7423,7389],{"class":154},[144,7425,687],{"class":150},[144,7427,596],{"class":154},[144,7429,687],{"class":150},[144,7431,372],{"class":203},[144,7433,3447],{"class":154},[144,7435,2322],{"class":150},[144,7437,161],{"class":154},[144,7439,7440],{"class":146,"line":1342},[144,7441,2540],{"class":154},[144,7443,7444,7446,7449,7451,7454,7456,7458],{"class":146,"line":1348},[144,7445,4672],{"class":150},[144,7447,7448],{"class":154},"(p[j]",[144,7450,1115],{"class":150},[144,7452,7453],{"class":154},"p[j",[144,7455,636],{"class":150},[144,7457,372],{"class":203},[144,7459,4687],{"class":154},[144,7461,7462],{"class":146,"line":1360},[144,7463,4692],{"class":154},[144,7465,7466,7468,7470,7472],{"class":146,"line":1642},[144,7467,4697],{"class":150},[144,7469,4285],{"class":154},[144,7471,200],{"class":150},[144,7473,7474],{"class":154},"p[j];\n",[144,7476,7477,7480,7482,7484,7486,7488],{"class":146,"line":1647},[144,7478,7479],{"class":154},"                p[j]",[144,7481,200],{"class":150},[144,7483,7453],{"class":154},[144,7485,636],{"class":150},[144,7487,372],{"class":203},[144,7489,4720],{"class":154},[144,7491,7492,7495,7497,7499,7501,7503],{"class":146,"line":1653},[144,7493,7494],{"class":154},"                p[j",[144,7496,636],{"class":150},[144,7498,372],{"class":203},[144,7500,1095],{"class":154},[144,7502,200],{"class":150},[144,7504,4310],{"class":154},[144,7506,7507],{"class":146,"line":1658},[144,7508,4740],{"class":154},[144,7510,7511],{"class":146,"line":1672},[144,7512,2559],{"class":154},[144,7514,7515],{"class":146,"line":1677},[144,7516,2217],{"class":154},[144,7518,7519],{"class":146,"line":1683},[144,7520,1595],{"class":154},[144,7522,7523],{"class":146,"line":1704},[144,7524,2430],{"emptyLinePlaceholder":72},[144,7526,7527,7529,7531],{"class":146,"line":1709},[144,7528,158],{"class":150},[144,7530,2003],{"class":1993},[144,7532,2006],{"class":154},[144,7534,7535],{"class":146,"line":1723},[144,7536,1576],{"class":154},[144,7538,7539],{"class":146,"line":1728},[144,7540,7541],{"class":213},"    \u002F\u002F 1.创建数组\n",[144,7543,7544,7546,7548,7550,7552,7554,7556,7558,7560,7562,7564,7566,7568,7570,7572,7574,7576,7578,7580,7582,7584,7586,7588,7590,7592,7594],{"class":146,"line":1757},[144,7545,2015],{"class":150},[144,7547,3992],{"class":154},[144,7549,601],{"class":203},[144,7551,1095],{"class":154},[144,7553,200],{"class":150},[144,7555,1051],{"class":154},[144,7557,448],{"class":203},[144,7559,533],{"class":154},[144,7561,226],{"class":203},[144,7563,533],{"class":154},[144,7565,499],{"class":203},[144,7567,533],{"class":154},[144,7569,575],{"class":203},[144,7571,533],{"class":154},[144,7573,372],{"class":203},[144,7575,533],{"class":154},[144,7577,232],{"class":203},[144,7579,533],{"class":154},[144,7581,601],{"class":203},[144,7583,533],{"class":154},[144,7585,550],{"class":203},[144,7587,533],{"class":154},[144,7589,524],{"class":203},[144,7591,533],{"class":154},[144,7593,474],{"class":203},[144,7595,4025],{"class":154},[144,7597,7598,7600,7602,7604,7606],{"class":146,"line":1762},[144,7599,2015],{"class":150},[144,7601,7362],{"class":154},[144,7603,200],{"class":150},[144,7605,601],{"class":203},[144,7607,1321],{"class":154},[144,7609,7610,7612,7614,7616,7618],{"class":146,"line":1779},[144,7611,2015],{"class":150},[144,7613,6549],{"class":150},[144,7615,14],{"class":154},[144,7617,200],{"class":150},[144,7619,7069],{"class":154},[144,7621,7622],{"class":146,"line":1784},[144,7623,7624],{"class":213},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[144,7626,7627,7630],{"class":146,"line":1789},[144,7628,7629],{"class":1993},"    bubbleSort",[144,7631,7632],{"class":154},"(p,len);\n",[144,7634,7635],{"class":146,"line":1794},[144,7636,2430],{"emptyLinePlaceholder":72},[144,7638,7639],{"class":146,"line":1808},[144,7640,7641],{"class":213},"    \u002F\u002F 3.打印排序后的数组\n",[144,7643,7644,7646,7648,7650,7652,7654,7656,7658,7660,7663,7665],{"class":146,"line":1813},[144,7645,3231],{"class":150},[144,7647,1688],{"class":154},[144,7649,158],{"class":150},[144,7651,3062],{"class":154},[144,7653,200],{"class":150},[144,7655,346],{"class":203},[144,7657,3244],{"class":154},[144,7659,1065],{"class":150},[144,7661,7662],{"class":154},"len; i",[144,7664,2322],{"class":150},[144,7666,161],{"class":154},[144,7668,7669],{"class":146,"line":2607},[144,7670,2060],{"class":154},[144,7672,7673,7675,7677,7679,7681,7684],{"class":146,"line":2621},[144,7674,3481],{"class":154},[144,7676,6450],{"class":150},[144,7678,14],{"class":154},[144,7680,1199],{"class":150},[144,7682,7683],{"class":259},"\"\"",[144,7685,1321],{"class":154},[144,7687,7688,7691,7693],{"class":146,"line":2629},[144,7689,7690],{"class":154},"        p",[144,7692,2322],{"class":150},[144,7694,1321],{"class":154},[144,7696,7697],{"class":146,"line":2634},[144,7698,2217],{"class":154},[144,7700,7701],{"class":146,"line":2640},[144,7702,1595],{"class":154},[5157,7704,7705],{},"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":30,"searchDepth":66,"depth":66,"links":7707},[7708,7709,7710,7711,7712,7713,7714,7715],{"id":6314,"depth":66,"text":6315},{"id":6480,"depth":66,"text":6481},{"id":6636,"depth":66,"text":6637},{"id":6714,"depth":66,"text":6715},{"id":6793,"depth":66,"text":6794},{"id":6892,"depth":66,"text":6893},{"id":7131,"depth":66,"text":7132},{"id":7309,"depth":66,"text":7310},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6303,"description":6311},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7722,"title":7723,"body":7724,"description":7731,"extension":70,"meta":10705,"navigation":72,"path":10706,"seo":10707,"stem":10708,"__hash__":10709},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7725,"toc":10696},[7726,7729,7732,7736,7739,7742,7753,8091,8094,8098,8101,8108,8363,8367,8370,8373,8528,8532,8535,8538,8744,8748,8751,9054,9057,9065,9069,9072,9223,9225,9236,9293,9297,9302,9959,9967,9970,10064,10067,10687,10693],[10,7727,7723],{"id":7728},"_4结构体",[14,7730,7731],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[18,7733,7735],{"id":7734},"_41结构体定义与使用","4.1结构体定义与使用",[14,7737,7738],{},"语法：struct 结构体名 {结构体成员列表}；",[14,7740,7741],{},"通过结构体创建变量的方式：",[1162,7743,7744,7747,7750],{},[101,7745,7746],{},"struct 结构体名 变量名",[101,7748,7749],{},"struct 结构体名 变量名={成员1值，成员2值...}",[101,7751,7752],{},"定义结构体时顺便创建变量",[135,7754,7756],{"className":137,"code":7755,"language":139,"meta":30,"style":30},"#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",[141,7757,7758,7764,7774,7781,7786,7794,7798,7803,7807,7812,7817,7822,7829,7834,7841,7845,7852,7856,7860,7864,7868,7872,7876,7882,7886,7892,7900,7908,7912,7917,7922,7933,7938,7950,7961,7972,7977,8001,8006,8012,8039,8044,8050,8062,8074,8086],{"__ignoreMap":30},[144,7759,7760,7762],{"class":146,"line":147},[144,7761,1979],{"class":150},[144,7763,1982],{"class":259},[144,7765,7766,7768,7770,7772],{"class":146,"line":66},[144,7767,1987],{"class":150},[144,7769,1990],{"class":150},[144,7771,1994],{"class":1993},[144,7773,1321],{"class":154},[144,7775,7776,7778],{"class":146,"line":1210},[144,7777,1979],{"class":150},[144,7779,7780],{"class":259},"\u003Cstring>\n",[144,7782,7783],{"class":146,"line":1225},[144,7784,7785],{"class":213},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[144,7787,7788,7791],{"class":146,"line":1231},[144,7789,7790],{"class":150},"struct",[144,7792,7793],{"class":1993}," Student\n",[144,7795,7796],{"class":146,"line":1245},[144,7797,1576],{"class":154},[144,7799,7800],{"class":146,"line":1251},[144,7801,7802],{"class":213},"    \u002F\u002F成员列表\n",[144,7804,7805],{"class":146,"line":1342},[144,7806,2430],{"emptyLinePlaceholder":72},[144,7808,7809],{"class":146,"line":1348},[144,7810,7811],{"class":213},"    \u002F\u002F姓名\n",[144,7813,7814],{"class":146,"line":1360},[144,7815,7816],{"class":154},"    string name;\n",[144,7818,7819],{"class":146,"line":1642},[144,7820,7821],{"class":213},"    \u002F\u002F年龄\n",[144,7823,7824,7826],{"class":146,"line":1647},[144,7825,2015],{"class":150},[144,7827,7828],{"class":154}," age;\n",[144,7830,7831],{"class":146,"line":1653},[144,7832,7833],{"class":213},"    \u002F\u002F分数\n",[144,7835,7836,7838],{"class":146,"line":1658},[144,7837,2015],{"class":150},[144,7839,7840],{"class":154}," score;\n",[144,7842,7843],{"class":146,"line":1672},[144,7844,4025],{"class":154},[144,7846,7847,7849],{"class":146,"line":1677},[144,7848,7790],{"class":150},[144,7850,7851],{"class":1993}," School\n",[144,7853,7854],{"class":146,"line":1683},[144,7855,1576],{"class":154},[144,7857,7858],{"class":146,"line":1704},[144,7859,7802],{"class":213},[144,7861,7862],{"class":146,"line":1709},[144,7863,2430],{"emptyLinePlaceholder":72},[144,7865,7866],{"class":146,"line":1723},[144,7867,7811],{"class":213},[144,7869,7870],{"class":146,"line":1728},[144,7871,7816],{"class":154},[144,7873,7874],{"class":146,"line":1757},[144,7875,7821],{"class":213},[144,7877,7878,7880],{"class":146,"line":1762},[144,7879,2015],{"class":150},[144,7881,7828],{"class":154},[144,7883,7884],{"class":146,"line":1779},[144,7885,7833],{"class":213},[144,7887,7888,7890],{"class":146,"line":1784},[144,7889,2015],{"class":150},[144,7891,7840],{"class":154},[144,7893,7894,7897],{"class":146,"line":1789},[144,7895,7896],{"class":154},"} s3;",[144,7898,7899],{"class":213}," \u002F\u002F创建结构体时就创建了变量\n",[144,7901,7902,7904,7906],{"class":146,"line":1794},[144,7903,158],{"class":150},[144,7905,2003],{"class":1993},[144,7907,2006],{"class":154},[144,7909,7910],{"class":146,"line":1808},[144,7911,1576],{"class":154},[144,7913,7914],{"class":146,"line":1813},[144,7915,7916],{"class":213},"    \u002F\u002F2.通过学生类型创建具体学生\n",[144,7918,7919],{"class":146,"line":2607},[144,7920,7921],{"class":213},"    \u002F\u002F2.1 struct Student s1;\n",[144,7923,7924,7927,7930],{"class":146,"line":2621},[144,7925,7926],{"class":150},"    struct",[144,7928,7929],{"class":1993}," Student",[144,7931,7932],{"class":154}," s1;\n",[144,7934,7935],{"class":146,"line":2629},[144,7936,7937],{"class":213},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[144,7939,7940,7943,7945,7948],{"class":146,"line":2634},[144,7941,7942],{"class":154},"    s1.name",[144,7944,200],{"class":150},[144,7946,7947],{"class":259},"\"张三\"",[144,7949,1321],{"class":154},[144,7951,7952,7955,7957,7959],{"class":146,"line":2640},[144,7953,7954],{"class":154},"    s1.age",[144,7956,200],{"class":150},[144,7958,805],{"class":203},[144,7960,1321],{"class":154},[144,7962,7963,7966,7968,7970],{"class":146,"line":2646},[144,7964,7965],{"class":154},"    s1.score",[144,7967,200],{"class":150},[144,7969,409],{"class":203},[144,7971,1321],{"class":154},[144,7973,7974],{"class":146,"line":2651},[144,7975,7976],{"class":213},"    \u002F\u002F输出结果\n",[144,7978,7980,7982,7984,7987,7989,7992,7994,7997,7999],{"class":146,"line":7979},37,[144,7981,1581],{"class":154},[144,7983,1199],{"class":150},[144,7985,7986],{"class":154},"s1.name",[144,7988,1199],{"class":150},[144,7990,7991],{"class":154},"s1.age",[144,7993,1199],{"class":150},[144,7995,7996],{"class":154},"s1.score",[144,7998,1199],{"class":150},[144,8000,1222],{"class":154},[144,8002,8004],{"class":146,"line":8003},38,[144,8005,2430],{"emptyLinePlaceholder":72},[144,8007,8009],{"class":146,"line":8008},39,[144,8010,8011],{"class":213},"    \u002F\u002F2.2 struct Student s2={...}\n",[144,8013,8015,8017,8019,8022,8024,8026,8029,8031,8033,8035,8037],{"class":146,"line":8014},40,[144,8016,7926],{"class":150},[144,8018,7929],{"class":1993},[144,8020,8021],{"class":154}," s2",[144,8023,200],{"class":150},[144,8025,1051],{"class":154},[144,8027,8028],{"class":259},"\"王五\"",[144,8030,533],{"class":154},[144,8032,805],{"class":203},[144,8034,533],{"class":154},[144,8036,409],{"class":203},[144,8038,4025],{"class":154},[144,8040,8042],{"class":146,"line":8041},41,[144,8043,2430],{"emptyLinePlaceholder":72},[144,8045,8047],{"class":146,"line":8046},42,[144,8048,8049],{"class":213},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[144,8051,8053,8056,8058,8060],{"class":146,"line":8052},43,[144,8054,8055],{"class":154},"    s3.name",[144,8057,200],{"class":150},[144,8059,3708],{"class":259},[144,8061,1321],{"class":154},[144,8063,8065,8068,8070,8072],{"class":146,"line":8064},44,[144,8066,8067],{"class":154},"    s3.age",[144,8069,200],{"class":150},[144,8071,805],{"class":203},[144,8073,1321],{"class":154},[144,8075,8077,8080,8082,8084],{"class":146,"line":8076},45,[144,8078,8079],{"class":154},"    s3.score",[144,8081,200],{"class":150},[144,8083,855],{"class":203},[144,8085,1321],{"class":154},[144,8087,8089],{"class":146,"line":8088},46,[144,8090,1595],{"class":154},[14,8092,8093],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[18,8095,8097],{"id":8096},"_42结构体数组","4.2结构体数组",[14,8099,8100],{},"将自定义的结构体放入到数组中方便维护",[14,8102,8103,8104,8107],{},"语法：struct 结构体名 数组名",[144,8105,8106],{},"元素个数","={ {}，{},...{} };",[135,8109,8111],{"className":137,"code":8110,"language":139,"meta":30,"style":30},"#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",[141,8112,8113,8119,8129,8135,8140,8146,8150,8154,8160,8166,8170,8174,8182,8186,8191,8206,8210,8226,8242,8246,8251,8267,8282,8297,8302,8328,8332,8355,8359],{"__ignoreMap":30},[144,8114,8115,8117],{"class":146,"line":147},[144,8116,1979],{"class":150},[144,8118,1982],{"class":259},[144,8120,8121,8123,8125,8127],{"class":146,"line":66},[144,8122,1987],{"class":150},[144,8124,1990],{"class":150},[144,8126,1994],{"class":1993},[144,8128,1321],{"class":154},[144,8130,8131,8133],{"class":146,"line":1210},[144,8132,1979],{"class":150},[144,8134,7780],{"class":259},[144,8136,8137],{"class":146,"line":1225},[144,8138,8139],{"class":213},"\u002F\u002F1.定义结构体\n",[144,8141,8142,8144],{"class":146,"line":1231},[144,8143,7790],{"class":150},[144,8145,7793],{"class":1993},[144,8147,8148],{"class":146,"line":1245},[144,8149,1576],{"class":154},[144,8151,8152],{"class":146,"line":1251},[144,8153,7816],{"class":154},[144,8155,8156,8158],{"class":146,"line":1342},[144,8157,2015],{"class":150},[144,8159,7828],{"class":154},[144,8161,8162,8164],{"class":146,"line":1348},[144,8163,2015],{"class":150},[144,8165,7840],{"class":154},[144,8167,8168],{"class":146,"line":1360},[144,8169,2430],{"emptyLinePlaceholder":72},[144,8171,8172],{"class":146,"line":1642},[144,8173,4025],{"class":154},[144,8175,8176,8178,8180],{"class":146,"line":1647},[144,8177,158],{"class":150},[144,8179,2003],{"class":1993},[144,8181,2006],{"class":154},[144,8183,8184],{"class":146,"line":1653},[144,8185,1576],{"class":154},[144,8187,8188],{"class":146,"line":1658},[144,8189,8190],{"class":213},"    \u002F\u002F2.创建结构体数组\n",[144,8192,8193,8195,8197,8200,8202,8204],{"class":146,"line":1672},[144,8194,7926],{"class":150},[144,8196,7929],{"class":1993},[144,8198,8199],{"class":154}," stuArray[",[144,8201,232],{"class":203},[144,8203,1095],{"class":154},[144,8205,4938],{"class":150},[144,8207,8208],{"class":146,"line":1677},[144,8209,2060],{"class":154},[144,8211,8212,8214,8216,8218,8220,8222,8224],{"class":146,"line":1683},[144,8213,4947],{"class":154},[144,8215,7947],{"class":259},[144,8217,533],{"class":154},[144,8219,805],{"class":203},[144,8221,533],{"class":154},[144,8223,466],{"class":203},[144,8225,4960],{"class":154},[144,8227,8228,8230,8232,8234,8236,8238,8240],{"class":146,"line":1704},[144,8229,4947],{"class":154},[144,8231,3708],{"class":259},[144,8233,533],{"class":154},[144,8235,730],{"class":203},[144,8237,533],{"class":154},[144,8239,730],{"class":203},[144,8241,1595],{"class":154},[144,8243,8244],{"class":146,"line":1709},[144,8245,2217],{"class":154},[144,8247,8248],{"class":146,"line":1723},[144,8249,8250],{"class":213},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[144,8252,8253,8256,8258,8261,8263,8265],{"class":146,"line":1728},[144,8254,8255],{"class":154},"    stuArray[",[144,8257,372],{"class":203},[144,8259,8260],{"class":154},"].name",[144,8262,200],{"class":150},[144,8264,3731],{"class":259},[144,8266,1321],{"class":154},[144,8268,8269,8271,8273,8276,8278,8280],{"class":146,"line":1757},[144,8270,8255],{"class":154},[144,8272,372],{"class":203},[144,8274,8275],{"class":154},"].age",[144,8277,200],{"class":150},[144,8279,232],{"class":203},[144,8281,1321],{"class":154},[144,8283,8284,8286,8288,8291,8293,8295],{"class":146,"line":1762},[144,8285,8255],{"class":154},[144,8287,372],{"class":203},[144,8289,8290],{"class":154},"].score",[144,8292,200],{"class":150},[144,8294,232],{"class":203},[144,8296,1321],{"class":154},[144,8298,8299],{"class":146,"line":1779},[144,8300,8301],{"class":213},"    \u002F\u002F4.遍历结构体数组\n",[144,8303,8304,8306,8308,8310,8312,8314,8316,8318,8320,8322,8324,8326],{"class":146,"line":1784},[144,8305,3231],{"class":150},[144,8307,1688],{"class":154},[144,8309,158],{"class":150},[144,8311,3062],{"class":154},[144,8313,200],{"class":150},[144,8315,346],{"class":203},[144,8317,3069],{"class":154},[144,8319,1065],{"class":150},[144,8321,232],{"class":203},[144,8323,3069],{"class":154},[144,8325,2322],{"class":150},[144,8327,161],{"class":154},[144,8329,8330],{"class":146,"line":1789},[144,8331,2060],{"class":154},[144,8333,8334,8336,8338,8341,8343,8346,8348,8351,8353],{"class":146,"line":1794},[144,8335,3481],{"class":154},[144,8337,1199],{"class":150},[144,8339,8340],{"class":154},"stuArray[i].name",[144,8342,1199],{"class":150},[144,8344,8345],{"class":154},"stuArray[i].age",[144,8347,1199],{"class":150},[144,8349,8350],{"class":154},"stuArray[i].score",[144,8352,1199],{"class":150},[144,8354,1222],{"class":154},[144,8356,8357],{"class":146,"line":1808},[144,8358,2217],{"class":154},[144,8360,8361],{"class":146,"line":1813},[144,8362,1595],{"class":154},[18,8364,8366],{"id":8365},"_43结构体指针","4.3结构体指针",[14,8368,8369],{},"作用：通过指针访问结构体中的成员",[14,8371,8372],{},"利用操作符->可以通过结构体指针访问结构体属性",[135,8374,8376],{"className":137,"code":8375,"language":139,"meta":30,"style":30},"#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",[141,8377,8378,8384,8394,8400,8404,8410,8414,8418,8424,8430,8434,8442,8446,8451,8476,8481,8496,8501,8524],{"__ignoreMap":30},[144,8379,8380,8382],{"class":146,"line":147},[144,8381,1979],{"class":150},[144,8383,1982],{"class":259},[144,8385,8386,8388,8390,8392],{"class":146,"line":66},[144,8387,1987],{"class":150},[144,8389,1990],{"class":150},[144,8391,1994],{"class":1993},[144,8393,1321],{"class":154},[144,8395,8396,8398],{"class":146,"line":1210},[144,8397,1979],{"class":150},[144,8399,7780],{"class":259},[144,8401,8402],{"class":146,"line":1225},[144,8403,8139],{"class":213},[144,8405,8406,8408],{"class":146,"line":1231},[144,8407,7790],{"class":150},[144,8409,7793],{"class":1993},[144,8411,8412],{"class":146,"line":1245},[144,8413,1576],{"class":154},[144,8415,8416],{"class":146,"line":1251},[144,8417,7816],{"class":154},[144,8419,8420,8422],{"class":146,"line":1342},[144,8421,2015],{"class":150},[144,8423,7828],{"class":154},[144,8425,8426,8428],{"class":146,"line":1348},[144,8427,2015],{"class":150},[144,8429,7840],{"class":154},[144,8431,8432],{"class":146,"line":1360},[144,8433,4025],{"class":154},[144,8435,8436,8438,8440],{"class":146,"line":1642},[144,8437,158],{"class":150},[144,8439,2003],{"class":1993},[144,8441,2006],{"class":154},[144,8443,8444],{"class":146,"line":1647},[144,8445,1576],{"class":154},[144,8447,8448],{"class":146,"line":1653},[144,8449,8450],{"class":213},"    \u002F\u002F创建学生结构体变量\n",[144,8452,8453,8455,8457,8460,8462,8464,8466,8468,8470,8472,8474],{"class":146,"line":1658},[144,8454,7926],{"class":150},[144,8456,7929],{"class":1993},[144,8458,8459],{"class":154}," s",[144,8461,200],{"class":150},[144,8463,1051],{"class":154},[144,8465,7947],{"class":259},[144,8467,533],{"class":154},[144,8469,805],{"class":203},[144,8471,533],{"class":154},[144,8473,1752],{"class":203},[144,8475,4025],{"class":154},[144,8477,8478],{"class":146,"line":1672},[144,8479,8480],{"class":213},"    \u002F\u002F通过指针指向结构体变量\n",[144,8482,8483,8485,8487,8489,8491,8493],{"class":146,"line":1677},[144,8484,7926],{"class":150},[144,8486,7929],{"class":1993},[144,8488,6549],{"class":150},[144,8490,14],{"class":154},[144,8492,6370],{"class":150},[144,8494,8495],{"class":154},"s\n",[144,8497,8498],{"class":146,"line":1683},[144,8499,8500],{"class":213},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[144,8502,8503,8505,8507,8510,8512,8515,8517,8520,8522],{"class":146,"line":1704},[144,8504,1581],{"class":154},[144,8506,1199],{"class":150},[144,8508,8509],{"class":154},"p->name",[144,8511,1199],{"class":150},[144,8513,8514],{"class":154},"p->age",[144,8516,1199],{"class":150},[144,8518,8519],{"class":154},"p->score",[144,8521,1199],{"class":150},[144,8523,1222],{"class":154},[144,8525,8526],{"class":146,"line":1709},[144,8527,1595],{"class":154},[18,8529,8531],{"id":8530},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,8533,8534],{},"作用：结构体中的成员可以是另一个结构体",[14,8536,8537],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[135,8539,8541],{"className":137,"code":8540,"language":139,"meta":30,"style":30},"#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",[141,8542,8543,8549,8559,8565,8570,8578,8582,8586,8592,8598,8602,8607,8614,8618,8625,8629,8635,8640,8644,8652,8656,8661,8666,8671,8682,8694,8705,8718,8729,8740],{"__ignoreMap":30},[144,8544,8545,8547],{"class":146,"line":147},[144,8546,1979],{"class":150},[144,8548,1982],{"class":259},[144,8550,8551,8553,8555,8557],{"class":146,"line":66},[144,8552,1987],{"class":150},[144,8554,1990],{"class":150},[144,8556,1994],{"class":1993},[144,8558,1321],{"class":154},[144,8560,8561,8563],{"class":146,"line":1210},[144,8562,1979],{"class":150},[144,8564,7780],{"class":259},[144,8566,8567],{"class":146,"line":1225},[144,8568,8569],{"class":213},"\u002F\u002F定义学生结构体\n",[144,8571,8572,8574,8576],{"class":146,"line":1231},[144,8573,7790],{"class":150},[144,8575,7929],{"class":1993},[144,8577,2704],{"class":154},[144,8579,8580],{"class":146,"line":1245},[144,8581,1576],{"class":154},[144,8583,8584],{"class":146,"line":1251},[144,8585,7816],{"class":154},[144,8587,8588,8590],{"class":146,"line":1342},[144,8589,2015],{"class":150},[144,8591,7828],{"class":154},[144,8593,8594,8596],{"class":146,"line":1348},[144,8595,2015],{"class":150},[144,8597,7840],{"class":154},[144,8599,8600],{"class":146,"line":1360},[144,8601,1595],{"class":154},[144,8603,8604],{"class":146,"line":1642},[144,8605,8606],{"class":213},"\u002F\u002F定义老师结构体\n",[144,8608,8609,8611],{"class":146,"line":1647},[144,8610,7790],{"class":150},[144,8612,8613],{"class":1993}," Teacher\n",[144,8615,8616],{"class":146,"line":1653},[144,8617,1576],{"class":154},[144,8619,8620,8622],{"class":146,"line":1658},[144,8621,2015],{"class":150},[144,8623,8624],{"class":154}," id;\n",[144,8626,8627],{"class":146,"line":1672},[144,8628,7816],{"class":154},[144,8630,8631,8633],{"class":146,"line":1677},[144,8632,2015],{"class":150},[144,8634,7828],{"class":154},[144,8636,8637],{"class":146,"line":1683},[144,8638,8639],{"class":154},"    Student stu;\n",[144,8641,8642],{"class":146,"line":1704},[144,8643,1595],{"class":154},[144,8645,8646,8648,8650],{"class":146,"line":1709},[144,8647,158],{"class":150},[144,8649,2003],{"class":1993},[144,8651,6009],{"class":154},[144,8653,8654],{"class":146,"line":1723},[144,8655,1576],{"class":154},[144,8657,8658],{"class":146,"line":1728},[144,8659,8660],{"class":213},"    \u002F\u002F结构体嵌套结构体\n",[144,8662,8663],{"class":146,"line":1757},[144,8664,8665],{"class":213},"    \u002F\u002F创建老师\n",[144,8667,8668],{"class":146,"line":1762},[144,8669,8670],{"class":154},"    Teacher t;\n",[144,8672,8673,8676,8678,8680],{"class":146,"line":1779},[144,8674,8675],{"class":154},"    t.id",[144,8677,200],{"class":150},[144,8679,466],{"class":203},[144,8681,1321],{"class":154},[144,8683,8684,8687,8689,8692],{"class":146,"line":1784},[144,8685,8686],{"class":154},"    t.name",[144,8688,200],{"class":150},[144,8690,8691],{"class":259},"\"老王\"",[144,8693,1321],{"class":154},[144,8695,8696,8699,8701,8703],{"class":146,"line":1789},[144,8697,8698],{"class":154},"    t.age",[144,8700,200],{"class":150},[144,8702,805],{"class":203},[144,8704,1321],{"class":154},[144,8706,8707,8710,8712,8715],{"class":146,"line":1794},[144,8708,8709],{"class":154},"    t.stu.name",[144,8711,200],{"class":150},[144,8713,8714],{"class":259},"\"小王\"",[144,8716,8717],{"class":154},"；\n",[144,8719,8720,8723,8725,8727],{"class":146,"line":1808},[144,8721,8722],{"class":154},"    t.stu.age",[144,8724,200],{"class":150},[144,8726,855],{"class":203},[144,8728,1321],{"class":154},[144,8730,8731,8734,8736,8738],{"class":146,"line":1813},[144,8732,8733],{"class":154},"    t.stu.score",[144,8735,200],{"class":150},[144,8737,499],{"class":203},[144,8739,1321],{"class":154},[144,8741,8742],{"class":146,"line":2607},[144,8743,1595],{"class":154},[18,8745,8747],{"id":8746},"_45结构体做函数参数","4.5结构体做函数参数",[14,8749,8750],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[135,8752,8754],{"className":137,"code":8753,"language":139,"meta":30,"style":30},"#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",[141,8755,8756,8762,8772,8778,8784,8788,8792,8798,8804,8808,8813,8818,8835,8839,8872,8876,8881,8900,8904,8935,8939,8947,8951,8960,8972,8984,8996,9009,9017,9030,9042,9050],{"__ignoreMap":30},[144,8757,8758,8760],{"class":146,"line":147},[144,8759,1979],{"class":150},[144,8761,1982],{"class":259},[144,8763,8764,8766,8768,8770],{"class":146,"line":66},[144,8765,1987],{"class":150},[144,8767,1990],{"class":150},[144,8769,1994],{"class":1993},[144,8771,1321],{"class":154},[144,8773,8774,8776],{"class":146,"line":1210},[144,8775,1979],{"class":150},[144,8777,7780],{"class":259},[144,8779,8780,8782],{"class":146,"line":1225},[144,8781,7790],{"class":150},[144,8783,7793],{"class":1993},[144,8785,8786],{"class":146,"line":1231},[144,8787,1576],{"class":154},[144,8789,8790],{"class":146,"line":1245},[144,8791,7816],{"class":154},[144,8793,8794,8796],{"class":146,"line":1251},[144,8795,2015],{"class":150},[144,8797,7828],{"class":154},[144,8799,8800,8802],{"class":146,"line":1342},[144,8801,2015],{"class":150},[144,8803,7840],{"class":154},[144,8805,8806],{"class":146,"line":1348},[144,8807,4025],{"class":154},[144,8809,8810],{"class":146,"line":1360},[144,8811,8812],{"class":213},"\u002F\u002F打印学生信息的函数\n",[144,8814,8815],{"class":146,"line":1642},[144,8816,8817],{"class":213},"\u002F\u002F值传递\n",[144,8819,8820,8822,8825,8827,8829,8831,8833],{"class":146,"line":1647},[144,8821,5395],{"class":150},[144,8823,8824],{"class":1993}," printStudent1",[144,8826,155],{"class":154},[144,8828,7790],{"class":150},[144,8830,7929],{"class":1993},[144,8832,8459],{"class":5247},[144,8834,161],{"class":154},[144,8836,8837],{"class":146,"line":1653},[144,8838,1576],{"class":154},[144,8840,8841,8843,8845,8848,8850,8853,8855,8858,8860,8862,8864,8867,8869],{"class":146,"line":1658},[144,8842,6560],{"class":154},[144,8844,1199],{"class":150},[144,8846,8847],{"class":154}," s.name ",[144,8849,1199],{"class":150},[144,8851,8852],{"class":259}," \" \"",[144,8854,1475],{"class":150},[144,8856,8857],{"class":154}," s.age ",[144,8859,1199],{"class":150},[144,8861,8852],{"class":259},[144,8863,1475],{"class":150},[144,8865,8866],{"class":154}," s.score ",[144,8868,1199],{"class":150},[144,8870,8871],{"class":154}," endl;\n",[144,8873,8874],{"class":146,"line":1672},[144,8875,1595],{"class":154},[144,8877,8878],{"class":146,"line":1677},[144,8879,8880],{"class":213},"\u002F\u002F地址传递\n",[144,8882,8883,8885,8888,8890,8892,8894,8896,8898],{"class":146,"line":1683},[144,8884,5395],{"class":150},[144,8886,8887],{"class":1993}," printStudent2",[144,8889,155],{"class":154},[144,8891,7790],{"class":150},[144,8893,7929],{"class":1993},[144,8895,6549],{"class":150},[144,8897,850],{"class":5247},[144,8899,161],{"class":154},[144,8901,8902],{"class":146,"line":1704},[144,8903,1576],{"class":154},[144,8905,8906,8908,8910,8913,8915,8917,8919,8922,8924,8926,8928,8931,8933],{"class":146,"line":1709},[144,8907,6560],{"class":154},[144,8909,1199],{"class":150},[144,8911,8912],{"class":154}," s->name ",[144,8914,1199],{"class":150},[144,8916,8852],{"class":259},[144,8918,1475],{"class":150},[144,8920,8921],{"class":154}," s->age ",[144,8923,1199],{"class":150},[144,8925,8852],{"class":259},[144,8927,1475],{"class":150},[144,8929,8930],{"class":154}," s->score ",[144,8932,1199],{"class":150},[144,8934,8871],{"class":154},[144,8936,8937],{"class":146,"line":1723},[144,8938,1595],{"class":154},[144,8940,8941,8943,8945],{"class":146,"line":1728},[144,8942,158],{"class":150},[144,8944,2003],{"class":1993},[144,8946,2006],{"class":154},[144,8948,8949],{"class":146,"line":1757},[144,8950,1576],{"class":154},[144,8952,8953,8955,8957],{"class":146,"line":1762},[144,8954,7926],{"class":150},[144,8956,7929],{"class":1993},[144,8958,8959],{"class":154}," s;\n",[144,8961,8962,8965,8967,8970],{"class":146,"line":1779},[144,8963,8964],{"class":154},"    s.name ",[144,8966,200],{"class":150},[144,8968,8969],{"class":259}," \"张三\"",[144,8971,1321],{"class":154},[144,8973,8974,8977,8979,8982],{"class":146,"line":1784},[144,8975,8976],{"class":154},"    s.age ",[144,8978,200],{"class":150},[144,8980,8981],{"class":203}," 20",[144,8983,1321],{"class":154},[144,8985,8986,8989,8991,8994],{"class":146,"line":1789},[144,8987,8988],{"class":154},"    s.score ",[144,8990,200],{"class":150},[144,8992,8993],{"class":203}," 85",[144,8995,1321],{"class":154},[144,8997,8998,9000,9002,9005,9007],{"class":146,"line":1794},[144,8999,1581],{"class":154},[144,9001,1199],{"class":150},[144,9003,9004],{"class":259},"\"值传递:\"",[144,9006,1199],{"class":150},[144,9008,1222],{"class":154},[144,9010,9011,9014],{"class":146,"line":1808},[144,9012,9013],{"class":1993},"    printStudent1",[144,9015,9016],{"class":154},"(s);\n",[144,9018,9019,9021,9023,9026,9028],{"class":146,"line":1813},[144,9020,1581],{"class":154},[144,9022,1199],{"class":150},[144,9024,9025],{"class":259},"\"地址传递:\"",[144,9027,1199],{"class":150},[144,9029,1222],{"class":154},[144,9031,9032,9035,9037,9039],{"class":146,"line":2607},[144,9033,9034],{"class":1993},"    printStudent2",[144,9036,155],{"class":154},[144,9038,508],{"class":150},[144,9040,9041],{"class":154},"s); \n",[144,9043,9044,9046,9048],{"class":146,"line":2621},[144,9045,4120],{"class":150},[144,9047,4123],{"class":203},[144,9049,1321],{"class":154},[144,9051,9052],{"class":146,"line":2629},[144,9053,1595],{"class":154},[14,9055,9056],{},"注意：",[1162,9058,9059,9062],{},[101,9060,9061],{},"1.先定义结构体，不要在函数中写结构体的定义",[101,9063,9064],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[18,9066,9068],{"id":9067},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9070,9071],{},"用const防止误操作",[135,9073,9075],{"className":137,"code":9074,"language":139,"meta":30,"style":30},"#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",[141,9076,9077,9083,9093,9099,9104,9108,9112,9118,9124,9128,9144,9148,9171,9175,9183,9187,9208,9215,9219],{"__ignoreMap":30},[144,9078,9079,9081],{"class":146,"line":147},[144,9080,1979],{"class":150},[144,9082,1982],{"class":259},[144,9084,9085,9087,9089,9091],{"class":146,"line":66},[144,9086,1987],{"class":150},[144,9088,1990],{"class":150},[144,9090,1994],{"class":1993},[144,9092,1321],{"class":154},[144,9094,9095,9097],{"class":146,"line":1210},[144,9096,1979],{"class":150},[144,9098,7780],{"class":259},[144,9100,9101],{"class":146,"line":1225},[144,9102,9103],{"class":154},"sctuct Student\n",[144,9105,9106],{"class":146,"line":1231},[144,9107,1576],{"class":154},[144,9109,9110],{"class":146,"line":1245},[144,9111,7816],{"class":154},[144,9113,9114,9116],{"class":146,"line":1251},[144,9115,2015],{"class":150},[144,9117,7828],{"class":154},[144,9119,9120,9122],{"class":146,"line":1342},[144,9121,2015],{"class":150},[144,9123,7840],{"class":154},[144,9125,9126],{"class":146,"line":1348},[144,9127,4025],{"class":154},[144,9129,9130,9132,9135,9137,9140,9142],{"class":146,"line":1360},[144,9131,5395],{"class":150},[144,9133,9134],{"class":1993}," printStudents",[144,9136,155],{"class":154},[144,9138,9139],{"class":1993},"student",[144,9141,8459],{"class":5247},[144,9143,161],{"class":154},[144,9145,9146],{"class":146,"line":1642},[144,9147,1576],{"class":154},[144,9149,9150,9152,9154,9157,9159,9162,9164,9167,9169],{"class":146,"line":1647},[144,9151,1581],{"class":154},[144,9153,1199],{"class":150},[144,9155,9156],{"class":154},"s.name",[144,9158,1199],{"class":150},[144,9160,9161],{"class":154},"s.age",[144,9163,1199],{"class":150},[144,9165,9166],{"class":154},"s.score",[144,9168,1199],{"class":150},[144,9170,1222],{"class":154},[144,9172,9173],{"class":146,"line":1653},[144,9174,1595],{"class":154},[144,9176,9177,9179,9181],{"class":146,"line":1658},[144,9178,158],{"class":150},[144,9180,2003],{"class":1993},[144,9182,6009],{"class":154},[144,9184,9185],{"class":146,"line":1672},[144,9186,1576],{"class":154},[144,9188,9189,9192,9194,9196,9198,9200,9202,9204,9206],{"class":146,"line":1677},[144,9190,9191],{"class":154},"    Student s",[144,9193,200],{"class":150},[144,9195,1051],{"class":154},[144,9197,7947],{"class":259},[144,9199,533],{"class":154},[144,9201,805],{"class":203},[144,9203,533],{"class":154},[144,9205,805],{"class":203},[144,9207,4025],{"class":154},[144,9209,9210,9213],{"class":146,"line":1683},[144,9211,9212],{"class":1993},"    printStudent",[144,9214,9016],{"class":154},[144,9216,9217],{"class":146,"line":1704},[144,9218,2430],{"emptyLinePlaceholder":72},[144,9220,9221],{"class":146,"line":1709},[144,9222,1595],{"class":154},[14,9224,9056],{},[1162,9226,9227,9230,9233],{},[101,9228,9229],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[101,9231,9232],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[101,9234,9235],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[135,9237,9239],{"className":137,"code":9238,"language":139,"meta":30,"style":30},"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",[141,9240,9241,9260,9264,9269,9289],{"__ignoreMap":30},[144,9242,9243,9245,9247,9249,9251,9254,9256,9258],{"class":146,"line":147},[144,9244,5395],{"class":150},[144,9246,9134],{"class":1993},[144,9248,155],{"class":154},[144,9250,6823],{"class":150},[144,9252,9253],{"class":1993}," student",[144,9255,6549],{"class":150},[144,9257,850],{"class":5247},[144,9259,161],{"class":154},[144,9261,9262],{"class":146,"line":66},[144,9263,1576],{"class":154},[144,9265,9266],{"class":146,"line":1210},[144,9267,9268],{"class":213},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[144,9270,9271,9273,9275,9277,9279,9281,9283,9285,9287],{"class":146,"line":1225},[144,9272,1581],{"class":154},[144,9274,1199],{"class":150},[144,9276,9156],{"class":154},[144,9278,1199],{"class":150},[144,9280,9161],{"class":154},[144,9282,1199],{"class":150},[144,9284,9166],{"class":154},[144,9286,1199],{"class":150},[144,9288,1222],{"class":154},[144,9290,9291],{"class":146,"line":1231},[144,9292,1595],{"class":154},[18,9294,9296],{"id":9295},"_47案例","4.7案例",[98,9298,9299],{},[101,9300,9301],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[135,9303,9305],{"className":137,"code":9304,"language":139,"meta":30,"style":30},"#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",[141,9306,9307,9313,9323,9329,9336,9340,9346,9350,9355,9361,9367,9371,9375,9381,9385,9390,9395,9408,9412,9417,9443,9447,9459,9486,9490,9502,9512,9516,9521,9550,9554,9566,9575,9602,9613,9623,9627,9631,9635,9640,9664,9668,9692,9696,9715,9741,9745,9770,9793,9817,9822,9827,9832,9841,9846,9852,9873,9879,9893,9899,9926,9935,9941,9949,9954],{"__ignoreMap":30},[144,9308,9309,9311],{"class":146,"line":147},[144,9310,1979],{"class":150},[144,9312,1982],{"class":259},[144,9314,9315,9317,9319,9321],{"class":146,"line":66},[144,9316,1987],{"class":150},[144,9318,1990],{"class":150},[144,9320,1994],{"class":1993},[144,9322,1321],{"class":154},[144,9324,9325,9327],{"class":146,"line":1210},[144,9326,1979],{"class":150},[144,9328,7780],{"class":259},[144,9330,9331,9333],{"class":146,"line":1225},[144,9332,1979],{"class":150},[144,9334,9335],{"class":259},"\u003Cctime>\n",[144,9337,9338],{"class":146,"line":1231},[144,9339,8569],{"class":213},[144,9341,9342,9344],{"class":146,"line":1245},[144,9343,7790],{"class":150},[144,9345,7793],{"class":1993},[144,9347,9348],{"class":146,"line":1251},[144,9349,1576],{"class":154},[144,9351,9352],{"class":146,"line":1342},[144,9353,9354],{"class":154},"    string sName;\n",[144,9356,9357,9359],{"class":146,"line":1348},[144,9358,2015],{"class":150},[144,9360,7828],{"class":154},[144,9362,9363,9365],{"class":146,"line":1360},[144,9364,2015],{"class":150},[144,9366,7840],{"class":154},[144,9368,9369],{"class":146,"line":1642},[144,9370,4025],{"class":154},[144,9372,9373],{"class":146,"line":1647},[144,9374,8606],{"class":213},[144,9376,9377,9379],{"class":146,"line":1653},[144,9378,7790],{"class":150},[144,9380,8613],{"class":1993},[144,9382,9383],{"class":146,"line":1658},[144,9384,1576],{"class":154},[144,9386,9387],{"class":146,"line":1672},[144,9388,9389],{"class":154},"    string tName;\n",[144,9391,9392],{"class":146,"line":1677},[144,9393,9394],{"class":213},"    \u002F\u002F学生数组\n",[144,9396,9397,9399,9401,9404,9406],{"class":146,"line":1683},[144,9398,7926],{"class":150},[144,9400,7929],{"class":1993},[144,9402,9403],{"class":154}," sArray[",[144,9405,474],{"class":203},[144,9407,4720],{"class":154},[144,9409,9410],{"class":146,"line":1704},[144,9411,4025],{"class":154},[144,9413,9414],{"class":146,"line":1709},[144,9415,9416],{"class":213},"\u002F\u002F给老师和学生赋值的函数\n",[144,9418,9419,9421,9424,9426,9428,9431,9434,9437,9439,9441],{"class":146,"line":1723},[144,9420,5395],{"class":150},[144,9422,9423],{"class":1993}," allocateSpace",[144,9425,155],{"class":154},[144,9427,7790],{"class":150},[144,9429,9430],{"class":1993}," Teacher",[144,9432,9433],{"class":5247}," tArray",[144,9435,9436],{"class":154},"[],",[144,9438,158],{"class":150},[144,9440,7362],{"class":5247},[144,9442,161],{"class":154},[144,9444,9445],{"class":146,"line":1728},[144,9446,1576],{"class":154},[144,9448,9449,9452,9454,9457],{"class":146,"line":1757},[144,9450,9451],{"class":154},"    string nameSeed",[144,9453,200],{"class":150},[144,9455,9456],{"class":259},"\"ABCDE\"",[144,9458,1321],{"class":154},[144,9460,9461,9463,9465,9467,9470,9472,9474,9477,9479,9482,9484],{"class":146,"line":1762},[144,9462,3231],{"class":150},[144,9464,1688],{"class":154},[144,9466,158],{"class":150},[144,9468,9469],{"class":154}," i ",[144,9471,200],{"class":150},[144,9473,4123],{"class":203},[144,9475,9476],{"class":154},"; i ",[144,9478,1065],{"class":150},[144,9480,9481],{"class":154}," len; i",[144,9483,2322],{"class":150},[144,9485,161],{"class":154},[144,9487,9488],{"class":146,"line":1779},[144,9489,2060],{"class":154},[144,9491,9492,9495,9497,9500],{"class":146,"line":1784},[144,9493,9494],{"class":154},"        tArray[i].tName ",[144,9496,200],{"class":150},[144,9498,9499],{"class":259}," \"Teacher_\"",[144,9501,1321],{"class":154},[144,9503,9504,9506,9509],{"class":146,"line":1789},[144,9505,9494],{"class":154},[144,9507,9508],{"class":150},"+=",[144,9510,9511],{"class":154},"nameSeed[i];\n",[144,9513,9514],{"class":146,"line":1794},[144,9515,2430],{"emptyLinePlaceholder":72},[144,9517,9518],{"class":146,"line":1808},[144,9519,9520],{"class":213},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[144,9522,9523,9525,9527,9529,9532,9534,9536,9539,9541,9543,9546,9548],{"class":146,"line":1813},[144,9524,3433],{"class":150},[144,9526,1688],{"class":154},[144,9528,158],{"class":150},[144,9530,9531],{"class":154}," j ",[144,9533,200],{"class":150},[144,9535,4123],{"class":203},[144,9537,9538],{"class":154},"; j ",[144,9540,1065],{"class":150},[144,9542,2178],{"class":203},[144,9544,9545],{"class":154},"; j",[144,9547,2322],{"class":150},[144,9549,161],{"class":154},[144,9551,9552],{"class":146,"line":2607},[144,9553,2540],{"class":154},[144,9555,9556,9559,9561,9564],{"class":146,"line":2621},[144,9557,9558],{"class":154},"            tArray[i].sArray[j].sName ",[144,9560,200],{"class":150},[144,9562,9563],{"class":259}," \"Student_\"",[144,9565,1321],{"class":154},[144,9567,9568,9570,9572],{"class":146,"line":2629},[144,9569,9558],{"class":154},[144,9571,9508],{"class":150},[144,9573,9574],{"class":154}," nameSeed[j];\n",[144,9576,9577,9580,9583,9585,9587,9589,9591,9593,9595,9597,9599],{"class":146,"line":2634},[144,9578,9579],{"class":150},"            int",[144,9581,9582],{"class":154}," random",[144,9584,200],{"class":150},[144,9586,2454],{"class":1993},[144,9588,2457],{"class":154},[144,9590,483],{"class":150},[144,9592,1062],{"class":203},[144,9594,636],{"class":150},[144,9596,556],{"class":203},[144,9598,210],{"class":154},[144,9600,9601],{"class":213},"\u002F\u002F40~99\n",[144,9603,9604,9607,9609,9611],{"class":146,"line":2640},[144,9605,9606],{"class":154},"            tArray[i].sArray[j].age ",[144,9608,200],{"class":150},[144,9610,8981],{"class":203},[144,9612,1321],{"class":154},[144,9614,9615,9618,9620],{"class":146,"line":2646},[144,9616,9617],{"class":154},"            tArray[i].sArray[j].score ",[144,9619,200],{"class":150},[144,9621,9622],{"class":154}," random;\n",[144,9624,9625],{"class":146,"line":2651},[144,9626,2559],{"class":154},[144,9628,9629],{"class":146,"line":7979},[144,9630,2217],{"class":154},[144,9632,9633],{"class":146,"line":8003},[144,9634,1595],{"class":154},[144,9636,9637],{"class":146,"line":8008},[144,9638,9639],{"class":213},"\u002F\u002F打印所有信息的函数\n",[144,9641,9642,9644,9647,9649,9651,9653,9655,9658,9660,9662],{"class":146,"line":8014},[144,9643,5395],{"class":150},[144,9645,9646],{"class":1993}," printInfo",[144,9648,155],{"class":154},[144,9650,7790],{"class":150},[144,9652,9430],{"class":1993},[144,9654,9433],{"class":5247},[144,9656,9657],{"class":154},"[], ",[144,9659,158],{"class":150},[144,9661,7362],{"class":5247},[144,9663,161],{"class":154},[144,9665,9666],{"class":146,"line":8041},[144,9667,1576],{"class":154},[144,9669,9670,9672,9674,9676,9678,9680,9682,9684,9686,9688,9690],{"class":146,"line":8046},[144,9671,3231],{"class":150},[144,9673,1688],{"class":154},[144,9675,158],{"class":150},[144,9677,9469],{"class":154},[144,9679,200],{"class":150},[144,9681,4123],{"class":203},[144,9683,9476],{"class":154},[144,9685,1065],{"class":150},[144,9687,9481],{"class":154},[144,9689,2322],{"class":150},[144,9691,161],{"class":154},[144,9693,9694],{"class":146,"line":8052},[144,9695,2060],{"class":154},[144,9697,9698,9701,9703,9706,9708,9711,9713],{"class":146,"line":8064},[144,9699,9700],{"class":154},"        cout ",[144,9702,1199],{"class":150},[144,9704,9705],{"class":259}," \"Teacher: \"",[144,9707,1475],{"class":150},[144,9709,9710],{"class":154}," tArray[i].tName ",[144,9712,1199],{"class":150},[144,9714,8871],{"class":154},[144,9716,9717,9719,9721,9723,9725,9727,9729,9731,9733,9735,9737,9739],{"class":146,"line":8076},[144,9718,3433],{"class":150},[144,9720,1688],{"class":154},[144,9722,158],{"class":150},[144,9724,9531],{"class":154},[144,9726,200],{"class":150},[144,9728,4123],{"class":203},[144,9730,9538],{"class":154},[144,9732,1065],{"class":150},[144,9734,2178],{"class":203},[144,9736,9545],{"class":154},[144,9738,2322],{"class":150},[144,9740,161],{"class":154},[144,9742,9743],{"class":146,"line":8088},[144,9744,2540],{"class":154},[144,9746,9748,9751,9753,9756,9758,9761,9763,9766,9768],{"class":146,"line":9747},47,[144,9749,9750],{"class":154},"            cout ",[144,9752,1199],{"class":150},[144,9754,9755],{"class":259}," \"",[144,9757,1261],{"class":203},[144,9759,9760],{"class":259},"Student: \"",[144,9762,1475],{"class":150},[144,9764,9765],{"class":154}," tArray[i].sArray[j].sName",[144,9767,1199],{"class":150},[144,9769,1222],{"class":154},[144,9771,9773,9775,9777,9779,9781,9784,9786,9789,9791],{"class":146,"line":9772},48,[144,9774,9750],{"class":154},[144,9776,1199],{"class":150},[144,9778,9755],{"class":259},[144,9780,1261],{"class":203},[144,9782,9783],{"class":259},"Age: \"",[144,9785,1475],{"class":150},[144,9787,9788],{"class":154}," tArray[i].sArray[j].age ",[144,9790,1199],{"class":150},[144,9792,8871],{"class":154},[144,9794,9796,9798,9800,9802,9804,9807,9809,9812,9814],{"class":146,"line":9795},49,[144,9797,9750],{"class":154},[144,9799,1199],{"class":150},[144,9801,9755],{"class":259},[144,9803,1261],{"class":203},[144,9805,9806],{"class":259},"Score: \"",[144,9808,1475],{"class":150},[144,9810,9811],{"class":154}," tArray[i].sArray[j].score ",[144,9813,1199],{"class":150},[144,9815,9816],{"class":154}," endl;   \n",[144,9818,9820],{"class":146,"line":9819},50,[144,9821,2559],{"class":154},[144,9823,9825],{"class":146,"line":9824},51,[144,9826,2217],{"class":154},[144,9828,9830],{"class":146,"line":9829},52,[144,9831,1595],{"class":154},[144,9833,9835,9837,9839],{"class":146,"line":9834},53,[144,9836,158],{"class":150},[144,9838,2003],{"class":1993},[144,9840,2006],{"class":154},[144,9842,9844],{"class":146,"line":9843},54,[144,9845,1576],{"class":154},[144,9847,9849],{"class":146,"line":9848},55,[144,9850,9851],{"class":213},"    \u002F\u002F随机数种子\n",[144,9853,9855,9857,9859,9861,9863,9865,9867,9869,9871],{"class":146,"line":9854},56,[144,9856,2403],{"class":1993},[144,9858,2406],{"class":154},[144,9860,2409],{"class":150},[144,9862,2412],{"class":150},[144,9864,584],{"class":154},[144,9866,2417],{"class":1993},[144,9868,155],{"class":154},[144,9870,2422],{"class":203},[144,9872,2425],{"class":154},[144,9874,9876],{"class":146,"line":9875},57,[144,9877,9878],{"class":213},"    \u002F\u002F1.创建3名老师的数组\n",[144,9880,9882,9884,9886,9889,9891],{"class":146,"line":9881},58,[144,9883,7926],{"class":150},[144,9885,9430],{"class":1993},[144,9887,9888],{"class":154}," tArray[",[144,9890,226],{"class":203},[144,9892,4720],{"class":154},[144,9894,9896],{"class":146,"line":9895},59,[144,9897,9898],{"class":213},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[144,9900,9902,9904,9907,9909,9912,9915,9917,9919,9922,9924],{"class":146,"line":9901},60,[144,9903,2015],{"class":150},[144,9905,9906],{"class":154}," len ",[144,9908,200],{"class":150},[144,9910,9911],{"class":150}," sizeof",[144,9913,9914],{"class":154},"(tArray) ",[144,9916,739],{"class":150},[144,9918,9911],{"class":150},[144,9920,9921],{"class":154},"(tArray[",[144,9923,346],{"class":203},[144,9925,3886],{"class":154},[144,9927,9929,9932],{"class":146,"line":9928},61,[144,9930,9931],{"class":1993},"    allocateSpace",[144,9933,9934],{"class":154},"(tArray, len);\n",[144,9936,9938],{"class":146,"line":9937},62,[144,9939,9940],{"class":213},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[144,9942,9944,9947],{"class":146,"line":9943},63,[144,9945,9946],{"class":1993},"    printInfo",[144,9948,9934],{"class":154},[144,9950,9952],{"class":146,"line":9951},64,[144,9953,2430],{"emptyLinePlaceholder":72},[144,9955,9957],{"class":146,"line":9956},65,[144,9958,1595],{"class":154},[98,9960,9961],{"start":66},[101,9962,9963,9966],{},[304,9964,9965],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,9968,9969],{},"五名英雄信息如下：",[135,9971,9975],{"className":9972,"code":9973,"language":9974,"meta":30,"style":30},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[141,9976,9977,9995,10012,10029,10046],{"__ignoreMap":30},[144,9978,9979,9981,9984,9986,9988,9990,9993],{"class":146,"line":147},[144,9980,4947],{"class":154},[144,9982,9983],{"class":259},"\"刘备\"",[144,9985,533],{"class":154},[144,9987,930],{"class":203},[144,9989,533],{"class":154},[144,9991,9992],{"class":259},"\"男\"",[144,9994,4960],{"class":154},[144,9996,9997,9999,10002,10004,10006,10008,10010],{"class":146,"line":66},[144,9998,4947],{"class":154},[144,10000,10001],{"class":259},"\"关羽\"",[144,10003,533],{"class":154},[144,10005,905],{"class":203},[144,10007,533],{"class":154},[144,10009,9992],{"class":259},[144,10011,4960],{"class":154},[144,10013,10014,10016,10019,10021,10023,10025,10027],{"class":146,"line":1210},[144,10015,4947],{"class":154},[144,10017,10018],{"class":259},"\"张飞\"",[144,10020,533],{"class":154},[144,10022,855],{"class":203},[144,10024,533],{"class":154},[144,10026,9992],{"class":259},[144,10028,4960],{"class":154},[144,10030,10031,10033,10036,10038,10040,10042,10044],{"class":146,"line":1225},[144,10032,4947],{"class":154},[144,10034,10035],{"class":259},"\"赵云\"",[144,10037,533],{"class":154},[144,10039,880],{"class":203},[144,10041,533],{"class":154},[144,10043,9992],{"class":259},[144,10045,4960],{"class":154},[144,10047,10048,10050,10053,10055,10057,10059,10062],{"class":146,"line":1231},[144,10049,4947],{"class":154},[144,10051,10052],{"class":259},"\"貂蝉\"",[144,10054,533],{"class":154},[144,10056,830],{"class":203},[144,10058,533],{"class":154},[144,10060,10061],{"class":259},"\"女\"",[144,10063,4960],{"class":154},[14,10065,10066],{},"代码：",[135,10068,10070],{"className":137,"code":10069,"language":139,"meta":30,"style":30},"#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",[141,10071,10072,10078,10088,10094,10101,10105,10109,10115,10120,10124,10129,10152,10156,10181,10185,10218,10223,10252,10257,10272,10298,10318,10323,10328,10332,10336,10341,10363,10367,10391,10395,10457,10461,10465,10473,10477,10482,10493,10497,10513,10529,10545,10561,10577,10581,10601,10623,10628,10641,10648,10653,10659,10664,10677,10683],{"__ignoreMap":30},[144,10073,10074,10076],{"class":146,"line":147},[144,10075,1979],{"class":150},[144,10077,1982],{"class":259},[144,10079,10080,10082,10084,10086],{"class":146,"line":66},[144,10081,1987],{"class":150},[144,10083,1990],{"class":150},[144,10085,1994],{"class":1993},[144,10087,1321],{"class":154},[144,10089,10090,10092],{"class":146,"line":1210},[144,10091,1979],{"class":150},[144,10093,7780],{"class":259},[144,10095,10096,10098],{"class":146,"line":1225},[144,10097,7790],{"class":150},[144,10099,10100],{"class":1993}," Sanguo\n",[144,10102,10103],{"class":146,"line":1231},[144,10104,1576],{"class":154},[144,10106,10107],{"class":146,"line":1245},[144,10108,7816],{"class":154},[144,10110,10111,10113],{"class":146,"line":1251},[144,10112,2015],{"class":150},[144,10114,7828],{"class":154},[144,10116,10117],{"class":146,"line":1342},[144,10118,10119],{"class":154},"    string gender;\n",[144,10121,10122],{"class":146,"line":1348},[144,10123,4025],{"class":154},[144,10125,10126],{"class":146,"line":1360},[144,10127,10128],{"class":213},"\u002F\u002F定义排序函数\n",[144,10130,10131,10133,10135,10137,10140,10142,10144,10146,10148,10150],{"class":146,"line":1642},[144,10132,5395],{"class":150},[144,10134,7347],{"class":1993},[144,10136,155],{"class":154},[144,10138,10139],{"class":1993},"Sanguo",[144,10141,6549],{"class":150},[144,10143,850],{"class":5247},[144,10145,533],{"class":154},[144,10147,158],{"class":150},[144,10149,7362],{"class":5247},[144,10151,161],{"class":154},[144,10153,10154],{"class":146,"line":1647},[144,10155,1576],{"class":154},[144,10157,10158,10160,10162,10164,10166,10168,10170,10172,10174,10177,10179],{"class":146,"line":1653},[144,10159,3231],{"class":150},[144,10161,155],{"class":154},[144,10163,158],{"class":150},[144,10165,3062],{"class":154},[144,10167,200],{"class":150},[144,10169,346],{"class":203},[144,10171,3069],{"class":154},[144,10173,1065],{"class":150},[144,10175,10176],{"class":154},"len;i",[144,10178,2322],{"class":150},[144,10180,161],{"class":154},[144,10182,10183],{"class":146,"line":1658},[144,10184,2060],{"class":154},[144,10186,10187,10190,10192,10194,10196,10198,10200,10202,10204,10206,10208,10210,10212,10214,10216],{"class":146,"line":1672},[144,10188,10189],{"class":150},"     for",[144,10191,1688],{"class":154},[144,10193,158],{"class":150},[144,10195,3440],{"class":154},[144,10197,200],{"class":150},[144,10199,346],{"class":203},[144,10201,3447],{"class":154},[144,10203,1065],{"class":150},[144,10205,7389],{"class":154},[144,10207,687],{"class":150},[144,10209,372],{"class":203},[144,10211,687],{"class":150},[144,10213,3580],{"class":154},[144,10215,2322],{"class":150},[144,10217,161],{"class":154},[144,10219,10220],{"class":146,"line":1677},[144,10221,10222],{"class":154},"     {\n",[144,10224,10225,10228,10231,10233,10236,10238,10241,10243,10245,10247,10249],{"class":146,"line":1683},[144,10226,10227],{"class":150},"         if",[144,10229,10230],{"class":154}," ((s",[144,10232,636],{"class":150},[144,10234,10235],{"class":154},"j)->age ",[144,10237,1115],{"class":150},[144,10239,10240],{"class":154}," (s",[144,10242,636],{"class":150},[144,10244,622],{"class":154},[144,10246,636],{"class":150},[144,10248,372],{"class":203},[144,10250,10251],{"class":154},")->age)\n",[144,10253,10254],{"class":146,"line":1704},[144,10255,10256],{"class":154},"         {\n",[144,10258,10259,10262,10264,10267,10269],{"class":146,"line":1709},[144,10260,10261],{"class":154},"             Sanguo temp",[144,10263,7184],{"class":150},[144,10265,10266],{"class":154},"(s",[144,10268,636],{"class":150},[144,10270,10271],{"class":154},"j);\n",[144,10273,10274,10277,10279,10281,10284,10286,10288,10290,10292,10294,10296],{"class":146,"line":1723},[144,10275,10276],{"class":150},"             *",[144,10278,10266],{"class":154},[144,10280,636],{"class":150},[144,10282,10283],{"class":154},"j)",[144,10285,7184],{"class":150},[144,10287,10266],{"class":154},[144,10289,636],{"class":150},[144,10291,622],{"class":154},[144,10293,636],{"class":150},[144,10295,372],{"class":203},[144,10297,2749],{"class":154},[144,10299,10300,10302,10304,10306,10308,10310,10312,10314,10316],{"class":146,"line":1728},[144,10301,10276],{"class":150},[144,10303,10266],{"class":154},[144,10305,636],{"class":150},[144,10307,622],{"class":154},[144,10309,636],{"class":150},[144,10311,372],{"class":203},[144,10313,584],{"class":154},[144,10315,200],{"class":150},[144,10317,4310],{"class":154},[144,10319,10320],{"class":146,"line":1757},[144,10321,10322],{"class":154},"         }\n",[144,10324,10325],{"class":146,"line":1762},[144,10326,10327],{"class":154},"     }\n",[144,10329,10330],{"class":146,"line":1779},[144,10331,2217],{"class":154},[144,10333,10334],{"class":146,"line":1784},[144,10335,1595],{"class":154},[144,10337,10338],{"class":146,"line":1789},[144,10339,10340],{"class":213},"\u002F\u002F定义打印函数\n",[144,10342,10343,10345,10347,10349,10351,10353,10355,10357,10359,10361],{"class":146,"line":1794},[144,10344,5395],{"class":150},[144,10346,9646],{"class":1993},[144,10348,155],{"class":154},[144,10350,10139],{"class":1993},[144,10352,6549],{"class":150},[144,10354,850],{"class":5247},[144,10356,533],{"class":154},[144,10358,158],{"class":150},[144,10360,7362],{"class":5247},[144,10362,161],{"class":154},[144,10364,10365],{"class":146,"line":1808},[144,10366,1576],{"class":154},[144,10368,10369,10371,10373,10375,10377,10379,10381,10383,10385,10387,10389],{"class":146,"line":1813},[144,10370,3231],{"class":150},[144,10372,1688],{"class":154},[144,10374,158],{"class":150},[144,10376,3062],{"class":154},[144,10378,200],{"class":150},[144,10380,346],{"class":203},[144,10382,3069],{"class":154},[144,10384,1065],{"class":150},[144,10386,10176],{"class":154},[144,10388,2322],{"class":150},[144,10390,161],{"class":154},[144,10392,10393],{"class":146,"line":2607},[144,10394,2060],{"class":154},[144,10396,10397,10399,10401,10403,10405,10408,10410,10412,10414,10417,10419,10421,10423,10426,10428,10430,10432,10435,10437,10439,10441,10444,10446,10448,10450,10453,10455],{"class":146,"line":2621},[144,10398,3481],{"class":154},[144,10400,1199],{"class":150},[144,10402,406],{"class":259},[144,10404,1261],{"class":203},[144,10406,10407],{"class":259},"姓名：\"",[144,10409,1199],{"class":150},[144,10411,10266],{"class":154},[144,10413,636],{"class":150},[144,10415,10416],{"class":154},"i)->name",[144,10418,1199],{"class":150},[144,10420,406],{"class":259},[144,10422,1261],{"class":203},[144,10424,10425],{"class":259},"年龄：\"",[144,10427,1199],{"class":150},[144,10429,10266],{"class":154},[144,10431,636],{"class":150},[144,10433,10434],{"class":154},"i)->age",[144,10436,1199],{"class":150},[144,10438,406],{"class":259},[144,10440,1261],{"class":203},[144,10442,10443],{"class":259},"性别：\"",[144,10445,1199],{"class":150},[144,10447,10266],{"class":154},[144,10449,636],{"class":150},[144,10451,10452],{"class":154},"i)->gender",[144,10454,1199],{"class":150},[144,10456,1222],{"class":154},[144,10458,10459],{"class":146,"line":2629},[144,10460,2217],{"class":154},[144,10462,10463],{"class":146,"line":2634},[144,10464,1595],{"class":154},[144,10466,10467,10469,10471],{"class":146,"line":2640},[144,10468,158],{"class":150},[144,10470,2003],{"class":1993},[144,10472,2006],{"class":154},[144,10474,10475],{"class":146,"line":2646},[144,10476,1576],{"class":154},[144,10478,10479],{"class":146,"line":2651},[144,10480,10481],{"class":213},"    \u002F\u002F定义结构体变量\n",[144,10483,10484,10487,10489,10491],{"class":146,"line":7979},[144,10485,10486],{"class":154},"    Sanguo s1[",[144,10488,474],{"class":203},[144,10490,1095],{"class":154},[144,10492,4938],{"class":150},[144,10494,10495],{"class":146,"line":8003},[144,10496,2060],{"class":154},[144,10498,10499,10501,10503,10505,10507,10509,10511],{"class":146,"line":8008},[144,10500,4947],{"class":154},[144,10502,9983],{"class":259},[144,10504,533],{"class":154},[144,10506,930],{"class":203},[144,10508,533],{"class":154},[144,10510,9992],{"class":259},[144,10512,4960],{"class":154},[144,10514,10515,10517,10519,10521,10523,10525,10527],{"class":146,"line":8014},[144,10516,4947],{"class":154},[144,10518,10001],{"class":259},[144,10520,533],{"class":154},[144,10522,905],{"class":203},[144,10524,533],{"class":154},[144,10526,9992],{"class":259},[144,10528,4960],{"class":154},[144,10530,10531,10533,10535,10537,10539,10541,10543],{"class":146,"line":8041},[144,10532,4947],{"class":154},[144,10534,10018],{"class":259},[144,10536,533],{"class":154},[144,10538,855],{"class":203},[144,10540,533],{"class":154},[144,10542,9992],{"class":259},[144,10544,4960],{"class":154},[144,10546,10547,10549,10551,10553,10555,10557,10559],{"class":146,"line":8046},[144,10548,4947],{"class":154},[144,10550,10035],{"class":259},[144,10552,533],{"class":154},[144,10554,880],{"class":203},[144,10556,533],{"class":154},[144,10558,9992],{"class":259},[144,10560,4960],{"class":154},[144,10562,10563,10565,10567,10569,10571,10573,10575],{"class":146,"line":8052},[144,10564,4947],{"class":154},[144,10566,10052],{"class":259},[144,10568,533],{"class":154},[144,10570,830],{"class":203},[144,10572,533],{"class":154},[144,10574,10061],{"class":259},[144,10576,4960],{"class":154},[144,10578,10579],{"class":146,"line":8064},[144,10580,4981],{"class":154},[144,10582,10583,10585,10587,10589,10592,10594,10597,10599],{"class":146,"line":8076},[144,10584,2015],{"class":150},[144,10586,7362],{"class":154},[144,10588,4233],{"class":150},[144,10590,10591],{"class":154},"(s1)",[144,10593,4239],{"class":150},[144,10595,10596],{"class":154},"(s1[",[144,10598,346],{"class":203},[144,10600,3886],{"class":154},[144,10602,10603,10606,10608,10611,10613,10616,10619,10621],{"class":146,"line":8088},[144,10604,10605],{"class":154},"    Sanguo ",[144,10607,610],{"class":150},[144,10609,10610],{"class":154},"s ",[144,10612,200],{"class":150},[144,10614,10615],{"class":150}," &",[144,10617,10618],{"class":154},"s1[",[144,10620,346],{"class":203},[144,10622,4720],{"class":154},[144,10624,10625],{"class":146,"line":9747},[144,10626,10627],{"class":213},"    \u002F\u002F排序前：\n",[144,10629,10630,10632,10634,10637,10639],{"class":146,"line":9772},[144,10631,6560],{"class":154},[144,10633,1199],{"class":150},[144,10635,10636],{"class":259}," \"排序前：\"",[144,10638,1475],{"class":150},[144,10640,8871],{"class":154},[144,10642,10643,10645],{"class":146,"line":9795},[144,10644,9946],{"class":1993},[144,10646,10647],{"class":154},"(s,len);\n",[144,10649,10650],{"class":146,"line":9819},[144,10651,10652],{"class":213},"    \u002F\u002F调用排序函数\n",[144,10654,10655,10657],{"class":146,"line":9824},[144,10656,7629],{"class":1993},[144,10658,10647],{"class":154},[144,10660,10661],{"class":146,"line":9829},[144,10662,10663],{"class":213},"    \u002F\u002F排序后\n",[144,10665,10666,10668,10670,10673,10675],{"class":146,"line":9834},[144,10667,6560],{"class":154},[144,10669,1199],{"class":150},[144,10671,10672],{"class":259}," \"排序后：\"",[144,10674,1475],{"class":150},[144,10676,8871],{"class":154},[144,10678,10679,10681],{"class":146,"line":9843},[144,10680,9946],{"class":1993},[144,10682,10647],{"class":154},[144,10684,10685],{"class":146,"line":9848},[144,10686,1595],{"class":154},[14,10688,10689,10690,10692],{},"注意：使用指针时直接用传首地址**&s",[144,10691,346],{},"**",[5157,10694,10695],{},"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":30,"searchDepth":66,"depth":66,"links":10697},[10698,10699,10700,10701,10702,10703,10704],{"id":7734,"depth":66,"text":7735},{"id":8096,"depth":66,"text":8097},{"id":8365,"depth":66,"text":8366},{"id":8530,"depth":66,"text":8531},{"id":8746,"depth":66,"text":8747},{"id":9067,"depth":66,"text":9068},{"id":9295,"depth":66,"text":9296},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7723,"description":7731},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10711,"title":10712,"body":10713,"description":30,"extension":70,"meta":12056,"navigation":72,"path":12057,"seo":12058,"stem":12059,"__hash__":12060},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10714,"toc":12050},[10715,10718,10722,10728,10742,10747,10750,10754,10761,10767,10770,10777,10783,10788,10791,10794,10797,11361,11364,11378,11382,11387,11403,11543,11546,11552,11555,11560,11568,11676,11679,11684,11687,11692,11695,11701,11704,12047],[10,10716,10712],{"id":10717},"_5程序内存模型",[18,10719,10721],{"id":10720},"_51内存分区模型","5.1内存分区模型",[14,10723,10724,10725],{},"C++程序在执行时，将内存大方向划分为",[304,10726,10727],{},"4个区域",[1162,10729,10730,10733,10736,10739],{},[101,10731,10732],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[101,10734,10735],{},"全局区：存放全局变量和静态变量以及常量",[101,10737,10738],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[101,10740,10741],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,10743,10744],{},[304,10745,10746],{},"内存四区意义：",[14,10748,10749],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[115,10751,10753],{"id":10752},"_511程序运行前","5.1.1程序运行前",[14,10755,10756,10757,10760],{},"​\t在程序编译后，生成了exe可执行程序，",[304,10758,10759],{},"未执行该程序前","分为两个区域",[14,10762,10763,10764],{},"​\t",[304,10765,10766],{},"代码区：",[14,10768,10769],{},"​\t\t存放 CPU 执行的机器指令",[14,10771,10772,10773,10776],{},"​\t\t代码区是",[304,10774,10775],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,10778,10772,10779,10782],{},[304,10780,10781],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,10784,10763,10785],{},[304,10786,10787],{},"全局区：",[14,10789,10790],{},"​\t\t全局变量和静态变量存放在此.",[14,10792,10793],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,10795,10796],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[135,10798,10800],{"className":137,"code":10799,"language":139,"meta":30,"style":30},"\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",[141,10801,10802,10807,10820,10833,10837,10842,10857,10872,10876,10885,10889,10894,10907,10920,10924,10929,10955,10981,10985,11012,11038,11042,11047,11063,11078,11082,11108,11134,11138,11163,11188,11192,11218,11244,11248,11264,11279,11305,11331,11335,11345,11349,11357],{"__ignoreMap":30},[144,10803,10804],{"class":146,"line":147},[144,10805,10806],{"class":213},"\u002F\u002F全局变量\n",[144,10808,10809,10811,10814,10816,10818],{"class":146,"line":66},[144,10810,158],{"class":150},[144,10812,10813],{"class":154}," g_a ",[144,10815,200],{"class":150},[144,10817,2068],{"class":203},[144,10819,1321],{"class":154},[144,10821,10822,10824,10827,10829,10831],{"class":146,"line":1210},[144,10823,158],{"class":150},[144,10825,10826],{"class":154}," g_b ",[144,10828,200],{"class":150},[144,10830,2068],{"class":203},[144,10832,1321],{"class":154},[144,10834,10835],{"class":146,"line":1225},[144,10836,2430],{"emptyLinePlaceholder":72},[144,10838,10839],{"class":146,"line":1231},[144,10840,10841],{"class":213},"\u002F\u002F全局常量\n",[144,10843,10844,10846,10848,10851,10853,10855],{"class":146,"line":1245},[144,10845,6823],{"class":150},[144,10847,2412],{"class":150},[144,10849,10850],{"class":154}," c_g_a ",[144,10852,200],{"class":150},[144,10854,2068],{"class":203},[144,10856,1321],{"class":154},[144,10858,10859,10861,10863,10866,10868,10870],{"class":146,"line":1251},[144,10860,6823],{"class":150},[144,10862,2412],{"class":150},[144,10864,10865],{"class":154}," c_g_b ",[144,10867,200],{"class":150},[144,10869,2068],{"class":203},[144,10871,1321],{"class":154},[144,10873,10874],{"class":146,"line":1342},[144,10875,2430],{"emptyLinePlaceholder":72},[144,10877,10878,10880,10882],{"class":146,"line":1348},[144,10879,158],{"class":150},[144,10881,2003],{"class":1993},[144,10883,10884],{"class":154},"() {\n",[144,10886,10887],{"class":146,"line":1360},[144,10888,2430],{"emptyLinePlaceholder":72},[144,10890,10891],{"class":146,"line":1642},[144,10892,10893],{"class":213},"    \u002F\u002F局部变量\n",[144,10895,10896,10898,10901,10903,10905],{"class":146,"line":1647},[144,10897,2015],{"class":150},[144,10899,10900],{"class":154}," a ",[144,10902,200],{"class":150},[144,10904,2068],{"class":203},[144,10906,1321],{"class":154},[144,10908,10909,10911,10914,10916,10918],{"class":146,"line":1653},[144,10910,2015],{"class":150},[144,10912,10913],{"class":154}," b ",[144,10915,200],{"class":150},[144,10917,2068],{"class":203},[144,10919,1321],{"class":154},[144,10921,10922],{"class":146,"line":1658},[144,10923,2430],{"emptyLinePlaceholder":72},[144,10925,10926],{"class":146,"line":1672},[144,10927,10928],{"class":213},"    \u002F\u002F打印地址\n",[144,10930,10931,10933,10935,10938,10940,10942,10944,10946,10948,10951,10953],{"class":146,"line":1677},[144,10932,6560],{"class":154},[144,10934,1199],{"class":150},[144,10936,10937],{"class":259}," \"局部变量a地址为： \"",[144,10939,1475],{"class":150},[144,10941,1688],{"class":154},[144,10943,158],{"class":150},[144,10945,584],{"class":154},[144,10947,508],{"class":150},[144,10949,10950],{"class":154},"a ",[144,10952,1199],{"class":150},[144,10954,8871],{"class":154},[144,10956,10957,10959,10961,10964,10966,10968,10970,10972,10974,10977,10979],{"class":146,"line":1683},[144,10958,6560],{"class":154},[144,10960,1199],{"class":150},[144,10962,10963],{"class":259}," \"局部变量b地址为： \"",[144,10965,1475],{"class":150},[144,10967,1688],{"class":154},[144,10969,158],{"class":150},[144,10971,584],{"class":154},[144,10973,508],{"class":150},[144,10975,10976],{"class":154},"b ",[144,10978,1199],{"class":150},[144,10980,8871],{"class":154},[144,10982,10983],{"class":146,"line":1704},[144,10984,2430],{"emptyLinePlaceholder":72},[144,10986,10987,10989,10991,10994,10996,10999,11001,11003,11005,11008,11010],{"class":146,"line":1709},[144,10988,6560],{"class":154},[144,10990,1199],{"class":150},[144,10992,10993],{"class":259}," \"全局变量g_a地址为： \"",[144,10995,1475],{"class":150},[144,10997,10998],{"class":154},"  (",[144,11000,158],{"class":150},[144,11002,584],{"class":154},[144,11004,508],{"class":150},[144,11006,11007],{"class":154},"g_a ",[144,11009,1199],{"class":150},[144,11011,8871],{"class":154},[144,11013,11014,11016,11018,11021,11023,11025,11027,11029,11031,11034,11036],{"class":146,"line":1723},[144,11015,6560],{"class":154},[144,11017,1199],{"class":150},[144,11019,11020],{"class":259}," \"全局变量g_b地址为： \"",[144,11022,1475],{"class":150},[144,11024,10998],{"class":154},[144,11026,158],{"class":150},[144,11028,584],{"class":154},[144,11030,508],{"class":150},[144,11032,11033],{"class":154},"g_b ",[144,11035,1199],{"class":150},[144,11037,8871],{"class":154},[144,11039,11040],{"class":146,"line":1728},[144,11041,2430],{"emptyLinePlaceholder":72},[144,11043,11044],{"class":146,"line":1757},[144,11045,11046],{"class":213},"    \u002F\u002F静态变量\n",[144,11048,11049,11052,11054,11057,11059,11061],{"class":146,"line":1762},[144,11050,11051],{"class":150},"    static",[144,11053,2412],{"class":150},[144,11055,11056],{"class":154}," s_a ",[144,11058,200],{"class":150},[144,11060,2068],{"class":203},[144,11062,1321],{"class":154},[144,11064,11065,11067,11069,11072,11074,11076],{"class":146,"line":1779},[144,11066,11051],{"class":150},[144,11068,2412],{"class":150},[144,11070,11071],{"class":154}," s_b ",[144,11073,200],{"class":150},[144,11075,2068],{"class":203},[144,11077,1321],{"class":154},[144,11079,11080],{"class":146,"line":1784},[144,11081,2430],{"emptyLinePlaceholder":72},[144,11083,11084,11086,11088,11091,11093,11095,11097,11099,11101,11104,11106],{"class":146,"line":1789},[144,11085,6560],{"class":154},[144,11087,1199],{"class":150},[144,11089,11090],{"class":259}," \"静态变量s_a地址为： \"",[144,11092,1475],{"class":150},[144,11094,1688],{"class":154},[144,11096,158],{"class":150},[144,11098,584],{"class":154},[144,11100,508],{"class":150},[144,11102,11103],{"class":154},"s_a ",[144,11105,1199],{"class":150},[144,11107,8871],{"class":154},[144,11109,11110,11112,11114,11117,11119,11121,11123,11125,11127,11130,11132],{"class":146,"line":1794},[144,11111,6560],{"class":154},[144,11113,1199],{"class":150},[144,11115,11116],{"class":259}," \"静态变量s_b地址为： \"",[144,11118,1475],{"class":150},[144,11120,1688],{"class":154},[144,11122,158],{"class":150},[144,11124,584],{"class":154},[144,11126,508],{"class":150},[144,11128,11129],{"class":154},"s_b ",[144,11131,1199],{"class":150},[144,11133,8871],{"class":154},[144,11135,11136],{"class":146,"line":1808},[144,11137,2430],{"emptyLinePlaceholder":72},[144,11139,11140,11142,11144,11147,11149,11151,11153,11155,11157,11159,11161],{"class":146,"line":1813},[144,11141,6560],{"class":154},[144,11143,1199],{"class":150},[144,11145,11146],{"class":259}," \"字符串常量地址为： \"",[144,11148,1475],{"class":150},[144,11150,1688],{"class":154},[144,11152,158],{"class":150},[144,11154,584],{"class":154},[144,11156,508],{"class":150},[144,11158,1217],{"class":259},[144,11160,1475],{"class":150},[144,11162,8871],{"class":154},[144,11164,11165,11167,11169,11171,11173,11175,11177,11179,11181,11184,11186],{"class":146,"line":2607},[144,11166,6560],{"class":154},[144,11168,1199],{"class":150},[144,11170,11146],{"class":259},[144,11172,1475],{"class":150},[144,11174,1688],{"class":154},[144,11176,158],{"class":150},[144,11178,584],{"class":154},[144,11180,508],{"class":150},[144,11182,11183],{"class":259},"\"hello world1\"",[144,11185,1475],{"class":150},[144,11187,8871],{"class":154},[144,11189,11190],{"class":146,"line":2621},[144,11191,2430],{"emptyLinePlaceholder":72},[144,11193,11194,11196,11198,11201,11203,11205,11207,11209,11211,11214,11216],{"class":146,"line":2629},[144,11195,6560],{"class":154},[144,11197,1199],{"class":150},[144,11199,11200],{"class":259}," \"全局常量c_g_a地址为： \"",[144,11202,1475],{"class":150},[144,11204,1688],{"class":154},[144,11206,158],{"class":150},[144,11208,584],{"class":154},[144,11210,508],{"class":150},[144,11212,11213],{"class":154},"c_g_a ",[144,11215,1199],{"class":150},[144,11217,8871],{"class":154},[144,11219,11220,11222,11224,11227,11229,11231,11233,11235,11237,11240,11242],{"class":146,"line":2634},[144,11221,6560],{"class":154},[144,11223,1199],{"class":150},[144,11225,11226],{"class":259}," \"全局常量c_g_b地址为： \"",[144,11228,1475],{"class":150},[144,11230,1688],{"class":154},[144,11232,158],{"class":150},[144,11234,584],{"class":154},[144,11236,508],{"class":150},[144,11238,11239],{"class":154},"c_g_b ",[144,11241,1199],{"class":150},[144,11243,8871],{"class":154},[144,11245,11246],{"class":146,"line":2640},[144,11247,2430],{"emptyLinePlaceholder":72},[144,11249,11250,11253,11255,11258,11260,11262],{"class":146,"line":2646},[144,11251,11252],{"class":150},"    const",[144,11254,2412],{"class":150},[144,11256,11257],{"class":154}," c_l_a ",[144,11259,200],{"class":150},[144,11261,2068],{"class":203},[144,11263,1321],{"class":154},[144,11265,11266,11268,11270,11273,11275,11277],{"class":146,"line":2651},[144,11267,11252],{"class":150},[144,11269,2412],{"class":150},[144,11271,11272],{"class":154}," c_l_b ",[144,11274,200],{"class":150},[144,11276,2068],{"class":203},[144,11278,1321],{"class":154},[144,11280,11281,11283,11285,11288,11290,11292,11294,11296,11298,11301,11303],{"class":146,"line":7979},[144,11282,6560],{"class":154},[144,11284,1199],{"class":150},[144,11286,11287],{"class":259}," \"局部常量c_l_a地址为： \"",[144,11289,1475],{"class":150},[144,11291,1688],{"class":154},[144,11293,158],{"class":150},[144,11295,584],{"class":154},[144,11297,508],{"class":150},[144,11299,11300],{"class":154},"c_l_a ",[144,11302,1199],{"class":150},[144,11304,8871],{"class":154},[144,11306,11307,11309,11311,11314,11316,11318,11320,11322,11324,11327,11329],{"class":146,"line":8003},[144,11308,6560],{"class":154},[144,11310,1199],{"class":150},[144,11312,11313],{"class":259}," \"局部常量c_l_b地址为： \"",[144,11315,1475],{"class":150},[144,11317,1688],{"class":154},[144,11319,158],{"class":150},[144,11321,584],{"class":154},[144,11323,508],{"class":150},[144,11325,11326],{"class":154},"c_l_b ",[144,11328,1199],{"class":150},[144,11330,8871],{"class":154},[144,11332,11333],{"class":146,"line":8008},[144,11334,2430],{"emptyLinePlaceholder":72},[144,11336,11337,11339,11341,11343],{"class":146,"line":8014},[144,11338,2333],{"class":1993},[144,11340,155],{"class":154},[144,11342,2338],{"class":259},[144,11344,2749],{"class":154},[144,11346,11347],{"class":146,"line":8041},[144,11348,2430],{"emptyLinePlaceholder":72},[144,11350,11351,11353,11355],{"class":146,"line":8046},[144,11352,4120],{"class":150},[144,11354,4123],{"class":203},[144,11356,1321],{"class":154},[144,11358,11359],{"class":146,"line":8052},[144,11360,1595],{"class":154},[14,11362,11363],{},"总结：",[1162,11365,11366,11369,11372,11375],{},[101,11367,11368],{},"c++中程序运行前分为全局区和代码区",[101,11370,11371],{},"代码区特点是共享和只读",[101,11373,11374],{},"全局区中存放全局变量、静态变量、常量",[101,11376,11377],{},"常量区中存放const修饰的全局常量和字符串常量",[115,11379,11381],{"id":11380},"_512程序运行后","5.1.2程序运行后",[98,11383,11384],{},[101,11385,11386],{},"栈区：",[1162,11388,11389,11396],{},[101,11390,11391,11392,11395],{},"由编译器自动分配释放, 存放",[304,11393,11394],{},"函数的参数值,局部变量","等",[101,11397,11398,11399,11402],{},"注意事项：",[304,11400,11401],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[135,11404,11406],{"className":137,"code":11405,"language":139,"meta":30,"style":30},"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",[141,11407,11408,11419,11423,11438,11450,11454,11458,11466,11471,11486,11504,11521,11531,11539],{"__ignoreMap":30},[144,11409,11410,11412,11414,11417],{"class":146,"line":147},[144,11411,158],{"class":150},[144,11413,6549],{"class":150},[144,11415,11416],{"class":1993}," func",[144,11418,2006],{"class":154},[144,11420,11421],{"class":146,"line":66},[144,11422,1576],{"class":154},[144,11424,11425,11427,11429,11431,11433,11435],{"class":146,"line":1210},[144,11426,2015],{"class":150},[144,11428,10900],{"class":154},[144,11430,200],{"class":150},[144,11432,2068],{"class":203},[144,11434,210],{"class":154},[144,11436,11437],{"class":213}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[144,11439,11440,11442,11444,11447],{"class":146,"line":1225},[144,11441,4120],{"class":150},[144,11443,10615],{"class":150},[144,11445,11446],{"class":154},"a;",[144,11448,11449],{"class":213}," \u002F\u002F放回局部变量的地址\n",[144,11451,11452],{"class":146,"line":1231},[144,11453,1595],{"class":154},[144,11455,11456],{"class":146,"line":1245},[144,11457,2430],{"emptyLinePlaceholder":72},[144,11459,11460,11462,11464],{"class":146,"line":1251},[144,11461,158],{"class":150},[144,11463,2003],{"class":1993},[144,11465,10884],{"class":154},[144,11467,11468],{"class":146,"line":1342},[144,11469,11470],{"class":213},"    \u002F\u002F接受func的返回值\n",[144,11472,11473,11475,11477,11480,11482,11484],{"class":146,"line":1348},[144,11474,2015],{"class":150},[144,11476,6549],{"class":150},[144,11478,11479],{"class":154},"p ",[144,11481,200],{"class":150},[144,11483,11416],{"class":1993},[144,11485,5667],{"class":154},[144,11487,11488,11490,11492,11494,11496,11498,11501],{"class":146,"line":1360},[144,11489,6560],{"class":154},[144,11491,1199],{"class":150},[144,11493,6549],{"class":150},[144,11495,11479],{"class":154},[144,11497,1199],{"class":150},[144,11499,11500],{"class":154}," endl;",[144,11502,11503],{"class":213}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[144,11505,11506,11508,11510,11512,11514,11516,11518],{"class":146,"line":1642},[144,11507,6560],{"class":154},[144,11509,1199],{"class":150},[144,11511,6549],{"class":150},[144,11513,11479],{"class":154},[144,11515,1199],{"class":150},[144,11517,11500],{"class":154},[144,11519,11520],{"class":213}," \u002F\u002F第二次这个数据不再保留\n",[144,11522,11523,11525,11527,11529],{"class":146,"line":1647},[144,11524,2333],{"class":1993},[144,11526,155],{"class":154},[144,11528,2338],{"class":259},[144,11530,2749],{"class":154},[144,11532,11533,11535,11537],{"class":146,"line":1653},[144,11534,4120],{"class":150},[144,11536,4123],{"class":203},[144,11538,1321],{"class":154},[144,11540,11541],{"class":146,"line":1658},[144,11542,1595],{"class":154},[14,11544,11545],{},"输出结果：",[14,11547,11548],{},[28,11549],{"alt":11550,"src":11551},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,11553,11554],{},"总结：不要返回局部变量的地址",[98,11556,11557],{"start":66},[101,11558,11559],{},"堆区",[1162,11561,11562,11565],{},[101,11563,11564],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[101,11566,11567],{},"在c++中主要利用new在堆区开辟内存",[135,11569,11571],{"className":137,"code":11570,"language":139,"meta":30,"style":30},"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",[141,11572,11573,11588,11592,11597,11618,11625,11629,11637,11641,11646,11660,11672],{"__ignoreMap":30},[144,11574,11575,11577,11580,11583,11585],{"class":146,"line":147},[144,11576,158],{"class":150},[144,11578,11579],{"class":150},"  *",[144,11581,11582],{"class":1993},"func",[144,11584,2457],{"class":154},[144,11586,11587],{"class":213},"  \u002F\u002F函数返回指针\n",[144,11589,11590],{"class":146,"line":66},[144,11591,1576],{"class":154},[144,11593,11594],{"class":146,"line":1210},[144,11595,11596],{"class":213},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[144,11598,11599,11601,11603,11605,11607,11610,11612,11614,11616],{"class":146,"line":1225},[144,11600,4177],{"class":150},[144,11602,6549],{"class":150},[144,11604,14],{"class":154},[144,11606,200],{"class":150},[144,11608,11609],{"class":150}," new",[144,11611,2412],{"class":150},[144,11613,155],{"class":154},[144,11615,601],{"class":203},[144,11617,2749],{"class":154},[144,11619,11620,11622],{"class":146,"line":1231},[144,11621,4411],{"class":150},[144,11623,11624],{"class":154}," p;\n",[144,11626,11627],{"class":146,"line":1245},[144,11628,1595],{"class":154},[144,11630,11631,11633,11635],{"class":146,"line":1251},[144,11632,158],{"class":150},[144,11634,2003],{"class":1993},[144,11636,2006],{"class":154},[144,11638,11639],{"class":146,"line":1342},[144,11640,1576],{"class":154},[144,11642,11643],{"class":146,"line":1348},[144,11644,11645],{"class":213},"    \u002F\u002F在堆区开辟数据\n",[144,11647,11648,11650,11652,11654,11656,11658],{"class":146,"line":1360},[144,11649,2015],{"class":150},[144,11651,6549],{"class":150},[144,11653,14],{"class":154},[144,11655,200],{"class":150},[144,11657,11582],{"class":1993},[144,11659,5667],{"class":154},[144,11661,11662,11664,11666,11668,11670],{"class":146,"line":1642},[144,11663,1581],{"class":154},[144,11665,6450],{"class":150},[144,11667,14],{"class":154},[144,11669,1199],{"class":150},[144,11671,1222],{"class":154},[144,11673,11674],{"class":146,"line":1647},[144,11675,1595],{"class":154},[14,11677,11678],{},"图片展示：",[14,11680,11681],{},[28,11682],{"alt":11550,"src":11683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,11685,11686],{},"堆区内存由程序员管生死！！！",[98,11688,11689],{"start":1210},[101,11690,11691],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,11693,11694],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,11696,11697,11698],{},"​语法：",[141,11699,11700],{}," new 数据类型",[14,11702,11703],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[135,11705,11707],{"className":137,"code":11706,"language":139,"meta":30,"style":30},"\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",[141,11708,11709,11714,11724,11728,11733,11738,11760,11764,11772,11776,11790,11802,11814,11826,11831,11836,11847,11851,11856,11864,11868,11873,11895,11921,11925,11943,11947,11973,11977,11989,11993,11998,12003,12011,12015,12019,12027,12031,12037,12043],{"__ignoreMap":30},[144,11710,11711],{"class":146,"line":147},[144,11712,11713],{"class":213},"\u002F\u002F1.new的基本语法\n",[144,11715,11716,11718,11720,11722],{"class":146,"line":66},[144,11717,158],{"class":150},[144,11719,6549],{"class":150},[144,11721,11582],{"class":1993},[144,11723,2006],{"class":154},[144,11725,11726],{"class":146,"line":1210},[144,11727,1576],{"class":154},[144,11729,11730],{"class":146,"line":1225},[144,11731,11732],{"class":213},"    \u002F\u002F在堆区创建整型数据\n",[144,11734,11735],{"class":146,"line":1231},[144,11736,11737],{"class":213},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[144,11739,11740,11742,11744,11746,11749,11751,11753,11755,11757],{"class":146,"line":1245},[144,11741,2015],{"class":150},[144,11743,6549],{"class":150},[144,11745,14],{"class":154},[144,11747,11748],{"class":150},"=new",[144,11750,2412],{"class":150},[144,11752,155],{"class":154},[144,11754,601],{"class":203},[144,11756,5997],{"class":154},[144,11758,11759],{"class":213},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[144,11761,11762],{"class":146,"line":1251},[144,11763,1595],{"class":154},[144,11765,11766,11768,11770],{"class":146,"line":1342},[144,11767,5395],{"class":150},[144,11769,5619],{"class":1993},[144,11771,2006],{"class":154},[144,11773,11774],{"class":146,"line":1348},[144,11775,1576],{"class":154},[144,11777,11778,11780,11782,11784,11786,11788],{"class":146,"line":1360},[144,11779,2015],{"class":150},[144,11781,6549],{"class":150},[144,11783,14],{"class":154},[144,11785,200],{"class":150},[144,11787,11582],{"class":1993},[144,11789,5667],{"class":154},[144,11791,11792,11794,11796,11798,11800],{"class":146,"line":1642},[144,11793,1581],{"class":154},[144,11795,6450],{"class":150},[144,11797,14],{"class":154},[144,11799,1199],{"class":150},[144,11801,1222],{"class":154},[144,11803,11804,11806,11808,11810,11812],{"class":146,"line":1647},[144,11805,1581],{"class":154},[144,11807,6450],{"class":150},[144,11809,14],{"class":154},[144,11811,1199],{"class":150},[144,11813,1222],{"class":154},[144,11815,11816,11818,11820,11822,11824],{"class":146,"line":1653},[144,11817,1581],{"class":154},[144,11819,6450],{"class":150},[144,11821,14],{"class":154},[144,11823,1199],{"class":150},[144,11825,1222],{"class":154},[144,11827,11828],{"class":146,"line":1658},[144,11829,11830],{"class":213},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[144,11832,11833],{"class":146,"line":1672},[144,11834,11835],{"class":213},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[144,11837,11838,11841,11844],{"class":146,"line":1677},[144,11839,11840],{"class":150},"    delete",[144,11842,11843],{"class":154}," p;",[144,11845,11846],{"class":213},"\u002F\u002F删除这块地址\n",[144,11848,11849],{"class":146,"line":1683},[144,11850,1595],{"class":154},[144,11852,11853],{"class":146,"line":1704},[144,11854,11855],{"class":213},"\u002F\u002F2.在堆区利用new开辟数组\n",[144,11857,11858,11860,11862],{"class":146,"line":1709},[144,11859,5395],{"class":150},[144,11861,5688],{"class":1993},[144,11863,2006],{"class":154},[144,11865,11866],{"class":146,"line":1723},[144,11867,1576],{"class":154},[144,11869,11870],{"class":146,"line":1728},[144,11871,11872],{"class":213},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[144,11874,11875,11877,11879,11881,11883,11885,11887,11889,11892],{"class":146,"line":1757},[144,11876,2015],{"class":150},[144,11878,6549],{"class":150},[144,11880,3910],{"class":154},[144,11882,11748],{"class":150},[144,11884,2412],{"class":150},[144,11886,1045],{"class":154},[144,11888,601],{"class":203},[144,11890,11891],{"class":154},"];",[144,11893,11894],{"class":213},"\u002F\u002F10代表数组有10个元素\n",[144,11896,11897,11899,11901,11903,11905,11907,11909,11911,11913,11915,11917,11919],{"class":146,"line":1762},[144,11898,3231],{"class":150},[144,11900,1688],{"class":154},[144,11902,158],{"class":150},[144,11904,3062],{"class":154},[144,11906,200],{"class":150},[144,11908,346],{"class":203},[144,11910,3069],{"class":154},[144,11912,1065],{"class":150},[144,11914,601],{"class":203},[144,11916,3069],{"class":154},[144,11918,2322],{"class":150},[144,11920,161],{"class":154},[144,11922,11923],{"class":146,"line":1779},[144,11924,2060],{"class":154},[144,11926,11927,11930,11932,11934,11936,11938,11940],{"class":146,"line":1784},[144,11928,11929],{"class":154},"        arr[i]",[144,11931,200],{"class":150},[144,11933,596],{"class":154},[144,11935,636],{"class":150},[144,11937,466],{"class":203},[144,11939,210],{"class":154},[144,11941,11942],{"class":213},"\u002F\u002F给10个元素赋值100～109\n",[144,11944,11945],{"class":146,"line":1789},[144,11946,2217],{"class":154},[144,11948,11949,11951,11953,11955,11957,11959,11961,11963,11965,11967,11969,11971],{"class":146,"line":1794},[144,11950,3231],{"class":150},[144,11952,1688],{"class":154},[144,11954,158],{"class":150},[144,11956,3062],{"class":154},[144,11958,200],{"class":150},[144,11960,346],{"class":203},[144,11962,3069],{"class":154},[144,11964,1065],{"class":150},[144,11966,601],{"class":203},[144,11968,3069],{"class":154},[144,11970,2322],{"class":150},[144,11972,161],{"class":154},[144,11974,11975],{"class":146,"line":1808},[144,11976,2060],{"class":154},[144,11978,11979,11981,11983,11985,11987],{"class":146,"line":1813},[144,11980,3481],{"class":154},[144,11982,1199],{"class":150},[144,11984,4384],{"class":154},[144,11986,1199],{"class":150},[144,11988,1222],{"class":154},[144,11990,11991],{"class":146,"line":2607},[144,11992,2217],{"class":154},[144,11994,11995],{"class":146,"line":2621},[144,11996,11997],{"class":213},"    \u002F\u002F释放堆区数组\n",[144,11999,12000],{"class":146,"line":2629},[144,12001,12002],{"class":213},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[144,12004,12005,12008],{"class":146,"line":2634},[144,12006,12007],{"class":150},"    delete[]",[144,12009,12010],{"class":154}," arr;\n",[144,12012,12013],{"class":146,"line":2640},[144,12014,1595],{"class":154},[144,12016,12017],{"class":146,"line":2646},[144,12018,2430],{"emptyLinePlaceholder":72},[144,12020,12021,12023,12025],{"class":146,"line":2651},[144,12022,158],{"class":150},[144,12024,2003],{"class":1993},[144,12026,2006],{"class":154},[144,12028,12029],{"class":146,"line":7979},[144,12030,1576],{"class":154},[144,12032,12033,12035],{"class":146,"line":8003},[144,12034,5664],{"class":1993},[144,12036,5667],{"class":154},[144,12038,12039,12041],{"class":146,"line":8008},[144,12040,5733],{"class":1993},[144,12042,5667],{"class":154},[144,12044,12045],{"class":146,"line":8014},[144,12046,1595],{"class":154},[5157,12048,12049],{},"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":30,"searchDepth":66,"depth":66,"links":12051},[12052],{"id":10720,"depth":66,"text":10721,"children":12053},[12054,12055],{"id":10752,"depth":1210,"text":10753},{"id":11380,"depth":1210,"text":11381},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10712,"description":30},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12062,"title":12063,"body":12064,"description":30,"extension":70,"meta":13545,"navigation":72,"path":13546,"seo":13547,"stem":13548,"__hash__":13549},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12065,"toc":13537},[12066,12069,12073,12076,12079,12248,12252,12257,12274,12279,12431,12435,12438,12441,12835,12839,12842,12847,12850,13162,13166,13172,13332,13334,13342,13346,13349,13356,13534],[10,12067,12063],{"id":12068},"_6引用",[18,12070,12072],{"id":12071},"_61引用基本用法","6.1引用基本用法",[14,12074,12075],{},"引用的本质：给变量起别名",[14,12077,12078],{},"语法：数据类型 &别名=原名",[135,12080,12082],{"className":137,"code":12081,"language":139,"meta":30,"style":30},"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",[141,12083,12084,12092,12096,12108,12120,12124,12143,12162,12166,12177,12181,12200,12218,12222,12232,12236,12244],{"__ignoreMap":30},[144,12085,12086,12088,12090],{"class":146,"line":147},[144,12087,158],{"class":150},[144,12089,2003],{"class":1993},[144,12091,10884],{"class":154},[144,12093,12094],{"class":146,"line":66},[144,12095,2430],{"emptyLinePlaceholder":72},[144,12097,12098,12100,12102,12104,12106],{"class":146,"line":1210},[144,12099,2015],{"class":150},[144,12101,10900],{"class":154},[144,12103,200],{"class":150},[144,12105,2068],{"class":203},[144,12107,1321],{"class":154},[144,12109,12110,12112,12114,12116,12118],{"class":146,"line":1225},[144,12111,2015],{"class":150},[144,12113,10615],{"class":150},[144,12115,10976],{"class":154},[144,12117,200],{"class":150},[144,12119,1463],{"class":154},[144,12121,12122],{"class":146,"line":1231},[144,12123,2430],{"emptyLinePlaceholder":72},[144,12125,12126,12128,12130,12133,12135,12137,12139,12141],{"class":146,"line":1245},[144,12127,6560],{"class":154},[144,12129,1199],{"class":150},[144,12131,12132],{"class":259}," \"a = \"",[144,12134,1475],{"class":150},[144,12136,10900],{"class":154},[144,12138,1199],{"class":150},[144,12140,11500],{"class":154},[144,12142,7299],{"class":213},[144,12144,12145,12147,12149,12152,12154,12156,12158,12160],{"class":146,"line":1251},[144,12146,6560],{"class":154},[144,12148,1199],{"class":150},[144,12150,12151],{"class":259}," \"b = \"",[144,12153,1475],{"class":150},[144,12155,10913],{"class":154},[144,12157,1199],{"class":150},[144,12159,11500],{"class":154},[144,12161,7299],{"class":213},[144,12163,12164],{"class":146,"line":1342},[144,12165,2430],{"emptyLinePlaceholder":72},[144,12167,12168,12171,12173,12175],{"class":146,"line":1348},[144,12169,12170],{"class":154},"    b ",[144,12172,200],{"class":150},[144,12174,5785],{"class":203},[144,12176,1321],{"class":154},[144,12178,12179],{"class":146,"line":1360},[144,12180,2430],{"emptyLinePlaceholder":72},[144,12182,12183,12185,12187,12189,12191,12193,12195,12197],{"class":146,"line":1642},[144,12184,6560],{"class":154},[144,12186,1199],{"class":150},[144,12188,12132],{"class":259},[144,12190,1475],{"class":150},[144,12192,10900],{"class":154},[144,12194,1199],{"class":150},[144,12196,11500],{"class":154},[144,12198,12199],{"class":213},"\u002F\u002F100\n",[144,12201,12202,12204,12206,12208,12210,12212,12214,12216],{"class":146,"line":1647},[144,12203,6560],{"class":154},[144,12205,1199],{"class":150},[144,12207,12151],{"class":259},[144,12209,1475],{"class":150},[144,12211,10913],{"class":154},[144,12213,1199],{"class":150},[144,12215,11500],{"class":154},[144,12217,12199],{"class":213},[144,12219,12220],{"class":146,"line":1653},[144,12221,2430],{"emptyLinePlaceholder":72},[144,12223,12224,12226,12228,12230],{"class":146,"line":1658},[144,12225,2333],{"class":1993},[144,12227,155],{"class":154},[144,12229,2338],{"class":259},[144,12231,2749],{"class":154},[144,12233,12234],{"class":146,"line":1672},[144,12235,2430],{"emptyLinePlaceholder":72},[144,12237,12238,12240,12242],{"class":146,"line":1677},[144,12239,4120],{"class":150},[144,12241,4123],{"class":203},[144,12243,1321],{"class":154},[144,12245,12246],{"class":146,"line":1683},[144,12247,1595],{"class":154},[18,12249,12251],{"id":12250},"_62引用的注意事项","6.2引用的注意事项",[98,12253,12254],{},[101,12255,12256],{},"引用必须要初始化",[135,12258,12260],{"className":137,"code":12259,"language":139,"meta":30,"style":30},"int &b;\u002F\u002F非常错误！\n",[141,12261,12262],{"__ignoreMap":30},[144,12263,12264,12266,12268,12271],{"class":146,"line":147},[144,12265,158],{"class":150},[144,12267,10615],{"class":150},[144,12269,12270],{"class":154},"b;",[144,12272,12273],{"class":213},"\u002F\u002F非常错误！\n",[98,12275,12276],{"start":66},[101,12277,12278],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[135,12280,12282],{"className":137,"code":12281,"language":139,"meta":30,"style":30},"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",[141,12283,12284,12292,12304,12316,12324,12340,12353,12371,12389,12409,12419,12427],{"__ignoreMap":30},[144,12285,12286,12288,12290],{"class":146,"line":147},[144,12287,158],{"class":150},[144,12289,2003],{"class":1993},[144,12291,10884],{"class":154},[144,12293,12294,12296,12298,12300,12302],{"class":146,"line":66},[144,12295,2015],{"class":150},[144,12297,10900],{"class":154},[144,12299,200],{"class":150},[144,12301,2068],{"class":203},[144,12303,1321],{"class":154},[144,12305,12306,12308,12310,12312,12314],{"class":146,"line":1210},[144,12307,2015],{"class":150},[144,12309,10913],{"class":154},[144,12311,200],{"class":150},[144,12313,8981],{"class":203},[144,12315,1321],{"class":154},[144,12317,12318,12321],{"class":146,"line":1225},[144,12319,12320],{"class":213},"    \u002F\u002Fint &c;",[144,12322,12323],{"class":213}," \u002F\u002F错误，引用必须初始化\n",[144,12325,12326,12328,12330,12332,12334,12337],{"class":146,"line":1231},[144,12327,2015],{"class":150},[144,12329,10615],{"class":150},[144,12331,2976],{"class":154},[144,12333,200],{"class":150},[144,12335,12336],{"class":154}," a;",[144,12338,12339],{"class":213}," \u002F\u002F一旦初始化后，就不可以更改\n",[144,12341,12342,12345,12347,12350],{"class":146,"line":1245},[144,12343,12344],{"class":154},"    c ",[144,12346,200],{"class":150},[144,12348,12349],{"class":154}," b;",[144,12351,12352],{"class":213}," \u002F\u002F这是赋值操作，不是更改引用\n",[144,12354,12355,12357,12359,12361,12363,12365,12367,12369],{"class":146,"line":1251},[144,12356,6560],{"class":154},[144,12358,1199],{"class":150},[144,12360,12132],{"class":259},[144,12362,1475],{"class":150},[144,12364,10900],{"class":154},[144,12366,1199],{"class":150},[144,12368,11500],{"class":154},[144,12370,7284],{"class":213},[144,12372,12373,12375,12377,12379,12381,12383,12385,12387],{"class":146,"line":1342},[144,12374,6560],{"class":154},[144,12376,1199],{"class":150},[144,12378,12151],{"class":259},[144,12380,1475],{"class":150},[144,12382,10913],{"class":154},[144,12384,1199],{"class":150},[144,12386,11500],{"class":154},[144,12388,7284],{"class":213},[144,12390,12391,12393,12395,12398,12400,12403,12405,12407],{"class":146,"line":1348},[144,12392,6560],{"class":154},[144,12394,1199],{"class":150},[144,12396,12397],{"class":259}," \"c = \"",[144,12399,1475],{"class":150},[144,12401,12402],{"class":154}," c ",[144,12404,1199],{"class":150},[144,12406,11500],{"class":154},[144,12408,7284],{"class":213},[144,12410,12411,12413,12415,12417],{"class":146,"line":1360},[144,12412,2333],{"class":1993},[144,12414,155],{"class":154},[144,12416,2338],{"class":259},[144,12418,2749],{"class":154},[144,12420,12421,12423,12425],{"class":146,"line":1642},[144,12422,4120],{"class":150},[144,12424,4123],{"class":203},[144,12426,1321],{"class":154},[144,12428,12429],{"class":146,"line":1647},[144,12430,1595],{"class":154},[18,12432,12434],{"id":12433},"_63引用做函数参数","6.3引用做函数参数",[14,12436,12437],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,12439,12440],{},"优点：可以简化指针修改实参",[135,12442,12444],{"className":137,"code":12443,"language":139,"meta":30,"style":30},"\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",[141,12445,12446,12451,12474,12485,12495,12504,12508,12512,12517,12539,12551,12563,12573,12577,12581,12586,12608,12618,12626,12634,12638,12642,12650,12654,12666,12678,12682,12693,12719,12723,12743,12767,12771,12781,12805,12809,12819,12823,12831],{"__ignoreMap":30},[144,12447,12448],{"class":146,"line":147},[144,12449,12450],{"class":213},"\u002F\u002F1. 值传递\n",[144,12452,12453,12455,12458,12460,12462,12464,12467,12469,12471],{"class":146,"line":66},[144,12454,5395],{"class":150},[144,12456,12457],{"class":1993}," mySwap01",[144,12459,155],{"class":154},[144,12461,158],{"class":150},[144,12463,1429],{"class":5247},[144,12465,12466],{"class":154},", ",[144,12468,158],{"class":150},[144,12470,2863],{"class":5247},[144,12472,12473],{"class":154},") {\n",[144,12475,12476,12478,12481,12483],{"class":146,"line":1210},[144,12477,2015],{"class":150},[144,12479,12480],{"class":154}," temp ",[144,12482,200],{"class":150},[144,12484,1463],{"class":154},[144,12486,12487,12490,12492],{"class":146,"line":1225},[144,12488,12489],{"class":154},"    a ",[144,12491,200],{"class":150},[144,12493,12494],{"class":154}," b;\n",[144,12496,12497,12499,12501],{"class":146,"line":1231},[144,12498,12170],{"class":154},[144,12500,200],{"class":150},[144,12502,12503],{"class":154}," temp;\n",[144,12505,12506],{"class":146,"line":1245},[144,12507,1595],{"class":154},[144,12509,12510],{"class":146,"line":1251},[144,12511,2430],{"emptyLinePlaceholder":72},[144,12513,12514],{"class":146,"line":1342},[144,12515,12516],{"class":213},"\u002F\u002F2. 地址传递\n",[144,12518,12519,12521,12524,12526,12529,12531,12533,12535,12537],{"class":146,"line":1348},[144,12520,5395],{"class":150},[144,12522,12523],{"class":1993}," mySwap02",[144,12525,155],{"class":154},[144,12527,12528],{"class":150},"int*",[144,12530,1429],{"class":5247},[144,12532,12466],{"class":154},[144,12534,12528],{"class":150},[144,12536,2863],{"class":5247},[144,12538,12473],{"class":154},[144,12540,12541,12543,12545,12547,12549],{"class":146,"line":1360},[144,12542,2015],{"class":150},[144,12544,12480],{"class":154},[144,12546,200],{"class":150},[144,12548,6549],{"class":150},[144,12550,6228],{"class":154},[144,12552,12553,12555,12557,12559,12561],{"class":146,"line":1642},[144,12554,6434],{"class":150},[144,12556,10950],{"class":154},[144,12558,200],{"class":150},[144,12560,6549],{"class":150},[144,12562,6100],{"class":154},[144,12564,12565,12567,12569,12571],{"class":146,"line":1647},[144,12566,6434],{"class":150},[144,12568,10976],{"class":154},[144,12570,200],{"class":150},[144,12572,12503],{"class":154},[144,12574,12575],{"class":146,"line":1653},[144,12576,1595],{"class":154},[144,12578,12579],{"class":146,"line":1658},[144,12580,2430],{"emptyLinePlaceholder":72},[144,12582,12583],{"class":146,"line":1672},[144,12584,12585],{"class":213},"\u002F\u002F3. 引用传递\n",[144,12587,12588,12590,12593,12595,12598,12600,12602,12604,12606],{"class":146,"line":1677},[144,12589,5395],{"class":150},[144,12591,12592],{"class":1993}," mySwap03",[144,12594,155],{"class":154},[144,12596,12597],{"class":150},"int&",[144,12599,1429],{"class":5247},[144,12601,12466],{"class":154},[144,12603,12597],{"class":150},[144,12605,2863],{"class":5247},[144,12607,12473],{"class":154},[144,12609,12610,12612,12614,12616],{"class":146,"line":1683},[144,12611,2015],{"class":150},[144,12613,12480],{"class":154},[144,12615,200],{"class":150},[144,12617,1463],{"class":154},[144,12619,12620,12622,12624],{"class":146,"line":1704},[144,12621,12489],{"class":154},[144,12623,200],{"class":150},[144,12625,12494],{"class":154},[144,12627,12628,12630,12632],{"class":146,"line":1709},[144,12629,12170],{"class":154},[144,12631,200],{"class":150},[144,12633,12503],{"class":154},[144,12635,12636],{"class":146,"line":1723},[144,12637,1595],{"class":154},[144,12639,12640],{"class":146,"line":1728},[144,12641,2430],{"emptyLinePlaceholder":72},[144,12643,12644,12646,12648],{"class":146,"line":1757},[144,12645,158],{"class":150},[144,12647,2003],{"class":1993},[144,12649,10884],{"class":154},[144,12651,12652],{"class":146,"line":1762},[144,12653,2430],{"emptyLinePlaceholder":72},[144,12655,12656,12658,12660,12662,12664],{"class":146,"line":1779},[144,12657,2015],{"class":150},[144,12659,10900],{"class":154},[144,12661,200],{"class":150},[144,12663,2068],{"class":203},[144,12665,1321],{"class":154},[144,12667,12668,12670,12672,12674,12676],{"class":146,"line":1784},[144,12669,2015],{"class":150},[144,12671,10913],{"class":154},[144,12673,200],{"class":150},[144,12675,8981],{"class":203},[144,12677,1321],{"class":154},[144,12679,12680],{"class":146,"line":1789},[144,12681,2430],{"emptyLinePlaceholder":72},[144,12683,12684,12687,12690],{"class":146,"line":1794},[144,12685,12686],{"class":1993},"    mySwap01",[144,12688,12689],{"class":154},"(a, b);",[144,12691,12692],{"class":213},"\u002F\u002F值传递，形参不会修饰实参\n",[144,12694,12695,12697,12699,12702,12704,12706,12708,12711,12713,12715,12717],{"class":146,"line":1808},[144,12696,6560],{"class":154},[144,12698,1199],{"class":150},[144,12700,12701],{"class":259}," \"a:\"",[144,12703,1475],{"class":150},[144,12705,10900],{"class":154},[144,12707,1199],{"class":150},[144,12709,12710],{"class":259}," \" b:\"",[144,12712,1475],{"class":150},[144,12714,10913],{"class":154},[144,12716,1199],{"class":150},[144,12718,8871],{"class":154},[144,12720,12721],{"class":146,"line":1813},[144,12722,2430],{"emptyLinePlaceholder":72},[144,12724,12725,12728,12730,12732,12735,12737,12740],{"class":146,"line":2607},[144,12726,12727],{"class":1993},"    mySwap02",[144,12729,155],{"class":154},[144,12731,508],{"class":150},[144,12733,12734],{"class":154},"a, ",[144,12736,508],{"class":150},[144,12738,12739],{"class":154},"b);",[144,12741,12742],{"class":213},"\u002F\u002F地址传递，形参会修饰实参\n",[144,12744,12745,12747,12749,12751,12753,12755,12757,12759,12761,12763,12765],{"class":146,"line":2621},[144,12746,6560],{"class":154},[144,12748,1199],{"class":150},[144,12750,12701],{"class":259},[144,12752,1475],{"class":150},[144,12754,10900],{"class":154},[144,12756,1199],{"class":150},[144,12758,12710],{"class":259},[144,12760,1475],{"class":150},[144,12762,10913],{"class":154},[144,12764,1199],{"class":150},[144,12766,8871],{"class":154},[144,12768,12769],{"class":146,"line":2629},[144,12770,2430],{"emptyLinePlaceholder":72},[144,12772,12773,12776,12778],{"class":146,"line":2634},[144,12774,12775],{"class":1993},"    mySwap03",[144,12777,12689],{"class":154},[144,12779,12780],{"class":213},"\u002F\u002F引用传递，形参会修饰实参\n",[144,12782,12783,12785,12787,12789,12791,12793,12795,12797,12799,12801,12803],{"class":146,"line":2640},[144,12784,6560],{"class":154},[144,12786,1199],{"class":150},[144,12788,12701],{"class":259},[144,12790,1475],{"class":150},[144,12792,10900],{"class":154},[144,12794,1199],{"class":150},[144,12796,12710],{"class":259},[144,12798,1475],{"class":150},[144,12800,10913],{"class":154},[144,12802,1199],{"class":150},[144,12804,8871],{"class":154},[144,12806,12807],{"class":146,"line":2646},[144,12808,2430],{"emptyLinePlaceholder":72},[144,12810,12811,12813,12815,12817],{"class":146,"line":2651},[144,12812,2333],{"class":1993},[144,12814,155],{"class":154},[144,12816,2338],{"class":259},[144,12818,2749],{"class":154},[144,12820,12821],{"class":146,"line":7979},[144,12822,2430],{"emptyLinePlaceholder":72},[144,12824,12825,12827,12829],{"class":146,"line":8003},[144,12826,4120],{"class":150},[144,12828,4123],{"class":203},[144,12830,1321],{"class":154},[144,12832,12833],{"class":146,"line":8008},[144,12834,1595],{"class":154},[18,12836,12838],{"id":12837},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,12840,12841],{},"作用：引用是可以作为函数的返回值存在的",[14,12843,9056,12844],{},[304,12845,12846],{},"不要返回局部变量引用",[14,12848,12849],{},"用法：函数调用作为左值",[135,12851,12853],{"className":9972,"code":12852,"language":9974,"meta":30,"style":30},"\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",[141,12854,12855,12860,12868,12883,12889,12893,12897,12902,12910,12927,12933,12937,12941,12949,12953,12958,12972,12992,13011,13015,13020,13033,13053,13071,13075,13091,13095,13114,13132,13136,13146,13150,13158],{"__ignoreMap":30},[144,12856,12857],{"class":146,"line":147},[144,12858,12859],{"class":213},"\u002F\u002F返回局部变量引用\n",[144,12861,12862,12864,12866],{"class":146,"line":66},[144,12863,12597],{"class":150},[144,12865,5619],{"class":1993},[144,12867,10884],{"class":154},[144,12869,12870,12872,12874,12876,12878,12880],{"class":146,"line":1210},[144,12871,2015],{"class":150},[144,12873,10900],{"class":154},[144,12875,200],{"class":150},[144,12877,2068],{"class":203},[144,12879,210],{"class":154},[144,12881,12882],{"class":213}," \u002F\u002F局部变量\n",[144,12884,12885,12887],{"class":146,"line":1225},[144,12886,4120],{"class":150},[144,12888,1463],{"class":154},[144,12890,12891],{"class":146,"line":1231},[144,12892,1595],{"class":154},[144,12894,12895],{"class":146,"line":1245},[144,12896,2430],{"emptyLinePlaceholder":72},[144,12898,12899],{"class":146,"line":1251},[144,12900,12901],{"class":213},"\u002F\u002F返回静态变量引用\n",[144,12903,12904,12906,12908],{"class":146,"line":1342},[144,12905,12597],{"class":150},[144,12907,5688],{"class":1993},[144,12909,10884],{"class":154},[144,12911,12912,12914,12916,12918,12920,12922,12924],{"class":146,"line":1348},[144,12913,11051],{"class":150},[144,12915,2412],{"class":150},[144,12917,10900],{"class":154},[144,12919,200],{"class":150},[144,12921,8981],{"class":203},[144,12923,210],{"class":154},[144,12925,12926],{"class":213},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[144,12928,12929,12931],{"class":146,"line":1360},[144,12930,4120],{"class":150},[144,12932,1463],{"class":154},[144,12934,12935],{"class":146,"line":1642},[144,12936,1595],{"class":154},[144,12938,12939],{"class":146,"line":1647},[144,12940,2430],{"emptyLinePlaceholder":72},[144,12942,12943,12945,12947],{"class":146,"line":1653},[144,12944,158],{"class":150},[144,12946,2003],{"class":1993},[144,12948,10884],{"class":154},[144,12950,12951],{"class":146,"line":1658},[144,12952,2430],{"emptyLinePlaceholder":72},[144,12954,12955],{"class":146,"line":1672},[144,12956,12957],{"class":213},"    \u002F\u002F不能返回局部变量的引用\n",[144,12959,12960,12963,12966,12968,12970],{"class":146,"line":1677},[144,12961,12962],{"class":150},"    int&",[144,12964,12965],{"class":154}," ref ",[144,12967,200],{"class":150},[144,12969,5619],{"class":1993},[144,12971,5667],{"class":154},[144,12973,12974,12976,12978,12981,12983,12985,12987,12989],{"class":146,"line":1683},[144,12975,6560],{"class":154},[144,12977,1199],{"class":150},[144,12979,12980],{"class":259}," \"ref = \"",[144,12982,1475],{"class":150},[144,12984,12965],{"class":154},[144,12986,1199],{"class":150},[144,12988,11500],{"class":154},[144,12990,12991],{"class":213},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[144,12993,12994,12996,12998,13000,13002,13004,13006,13008],{"class":146,"line":1704},[144,12995,6560],{"class":154},[144,12997,1199],{"class":150},[144,12999,12980],{"class":259},[144,13001,1475],{"class":150},[144,13003,12965],{"class":154},[144,13005,1199],{"class":150},[144,13007,11500],{"class":154},[144,13009,13010],{"class":213},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[144,13012,13013],{"class":146,"line":1709},[144,13014,2430],{"emptyLinePlaceholder":72},[144,13016,13017],{"class":146,"line":1723},[144,13018,13019],{"class":213},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[144,13021,13022,13024,13027,13029,13031],{"class":146,"line":1728},[144,13023,12962],{"class":150},[144,13025,13026],{"class":154}," ref2 ",[144,13028,200],{"class":150},[144,13030,5688],{"class":1993},[144,13032,5667],{"class":154},[144,13034,13035,13037,13039,13042,13044,13046,13048,13050],{"class":146,"line":1757},[144,13036,6560],{"class":154},[144,13038,1199],{"class":150},[144,13040,13041],{"class":259}," \"ref2 = \"",[144,13043,1475],{"class":150},[144,13045,13026],{"class":154},[144,13047,1199],{"class":150},[144,13049,11500],{"class":154},[144,13051,13052],{"class":213}," \u002F\u002F20\n",[144,13054,13055,13057,13059,13061,13063,13065,13067,13069],{"class":146,"line":1762},[144,13056,6560],{"class":154},[144,13058,1199],{"class":150},[144,13060,13041],{"class":259},[144,13062,1475],{"class":150},[144,13064,13026],{"class":154},[144,13066,1199],{"class":150},[144,13068,11500],{"class":154},[144,13070,13052],{"class":213},[144,13072,13073],{"class":146,"line":1779},[144,13074,2430],{"emptyLinePlaceholder":72},[144,13076,13077,13079,13082,13084,13086,13088],{"class":146,"line":1784},[144,13078,5733],{"class":1993},[144,13080,13081],{"class":154},"() ",[144,13083,200],{"class":150},[144,13085,3029],{"class":203},[144,13087,210],{"class":154},[144,13089,13090],{"class":213},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[144,13092,13093],{"class":146,"line":1789},[144,13094,2430],{"emptyLinePlaceholder":72},[144,13096,13097,13099,13101,13103,13105,13107,13109,13111],{"class":146,"line":1794},[144,13098,6560],{"class":154},[144,13100,1199],{"class":150},[144,13102,13041],{"class":259},[144,13104,1475],{"class":150},[144,13106,13026],{"class":154},[144,13108,1199],{"class":150},[144,13110,11500],{"class":154},[144,13112,13113],{"class":213}," \u002F\u002F1000\n",[144,13115,13116,13118,13120,13122,13124,13126,13128,13130],{"class":146,"line":1808},[144,13117,6560],{"class":154},[144,13119,1199],{"class":150},[144,13121,13041],{"class":259},[144,13123,1475],{"class":150},[144,13125,13026],{"class":154},[144,13127,1199],{"class":150},[144,13129,11500],{"class":154},[144,13131,13113],{"class":213},[144,13133,13134],{"class":146,"line":1813},[144,13135,2430],{"emptyLinePlaceholder":72},[144,13137,13138,13140,13142,13144],{"class":146,"line":2607},[144,13139,2333],{"class":1993},[144,13141,155],{"class":154},[144,13143,2338],{"class":259},[144,13145,2749],{"class":154},[144,13147,13148],{"class":146,"line":2621},[144,13149,2430],{"emptyLinePlaceholder":72},[144,13151,13152,13154,13156],{"class":146,"line":2629},[144,13153,4120],{"class":150},[144,13155,4123],{"class":203},[144,13157,1321],{"class":154},[144,13159,13160],{"class":146,"line":2634},[144,13161,1595],{"class":154},[18,13163,13165],{"id":13164},"_65引用的本质","6.5引用的本质",[14,13167,13168,13169],{},"本质：",[304,13170,13171],{},"引用的本质在c++内部实现是一个指针常量.",[135,13173,13175],{"className":137,"code":13174,"language":139,"meta":30,"style":30},"\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",[141,13176,13177,13182,13198,13212,13216,13225,13237,13242,13247,13258,13271,13275,13291,13308,13312,13320,13328],{"__ignoreMap":30},[144,13178,13179],{"class":146,"line":147},[144,13180,13181],{"class":213},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[144,13183,13184,13186,13188,13190,13192,13195],{"class":146,"line":66},[144,13185,5395],{"class":150},[144,13187,11416],{"class":1993},[144,13189,155],{"class":154},[144,13191,12597],{"class":150},[144,13193,13194],{"class":5247}," ref",[144,13196,13197],{"class":154},"){\n",[144,13199,13200,13203,13205,13207,13209],{"class":146,"line":1210},[144,13201,13202],{"class":154},"    ref ",[144,13204,200],{"class":150},[144,13206,5785],{"class":203},[144,13208,210],{"class":154},[144,13210,13211],{"class":213}," \u002F\u002F ref是引用，转换为*ref = 100\n",[144,13213,13214],{"class":146,"line":1225},[144,13215,1595],{"class":154},[144,13217,13218,13220,13222],{"class":146,"line":1231},[144,13219,158],{"class":150},[144,13221,2003],{"class":1993},[144,13223,13224],{"class":154},"(){\n",[144,13226,13227,13229,13231,13233,13235],{"class":146,"line":1245},[144,13228,2015],{"class":150},[144,13230,10900],{"class":154},[144,13232,200],{"class":150},[144,13234,2068],{"class":203},[144,13236,1321],{"class":154},[144,13238,13239],{"class":146,"line":1251},[144,13240,13241],{"class":154},"    \n",[144,13243,13244],{"class":146,"line":1342},[144,13245,13246],{"class":213},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[144,13248,13249,13251,13253,13255],{"class":146,"line":1348},[144,13250,12962],{"class":150},[144,13252,12965],{"class":154},[144,13254,200],{"class":150},[144,13256,13257],{"class":154}," a; \n",[144,13259,13260,13262,13264,13266,13268],{"class":146,"line":1360},[144,13261,13202],{"class":154},[144,13263,200],{"class":150},[144,13265,8981],{"class":203},[144,13267,210],{"class":154},[144,13269,13270],{"class":213}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[144,13272,13273],{"class":146,"line":1642},[144,13274,13241],{"class":154},[144,13276,13277,13279,13281,13283,13285,13287,13289],{"class":146,"line":1647},[144,13278,6560],{"class":154},[144,13280,1199],{"class":150},[144,13282,12701],{"class":259},[144,13284,1475],{"class":150},[144,13286,10900],{"class":154},[144,13288,1199],{"class":150},[144,13290,8871],{"class":154},[144,13292,13293,13295,13297,13300,13302,13304,13306],{"class":146,"line":1653},[144,13294,6560],{"class":154},[144,13296,1199],{"class":150},[144,13298,13299],{"class":259}," \"ref:\"",[144,13301,1475],{"class":150},[144,13303,12965],{"class":154},[144,13305,1199],{"class":150},[144,13307,8871],{"class":154},[144,13309,13310],{"class":146,"line":1658},[144,13311,13241],{"class":154},[144,13313,13314,13317],{"class":146,"line":1672},[144,13315,13316],{"class":1993},"    func",[144,13318,13319],{"class":154},"(a);\n",[144,13321,13322,13324,13326],{"class":146,"line":1677},[144,13323,4120],{"class":150},[144,13325,4123],{"class":203},[144,13327,1321],{"class":154},[144,13329,13330],{"class":146,"line":1683},[144,13331,1595],{"class":154},[14,13333,11363],{},[98,13335,13336,13339],{},[101,13337,13338],{},"引用的本质，就是一个指针常量",[101,13340,13341],{},"引用一旦初始化，就不可以发生改变",[18,13343,13345],{"id":13344},"_66常量引用","6.6常量引用",[14,13347,13348],{},"作用：常量引用主要用来修饰形参",[14,13350,13351,13352,13355],{},"在函数形参列表中，可以加",[304,13353,13354],{},"const修饰形参","，防止形参改变实参",[135,13357,13359],{"className":137,"code":13358,"language":139,"meta":30,"style":30},"\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",[141,13360,13361,13366,13371,13390,13395,13408,13412,13416,13424,13428,13433,13438,13452,13456,13464,13476,13480,13485,13497,13504,13508,13518,13522,13530],{"__ignoreMap":30},[144,13362,13363],{"class":146,"line":147},[144,13364,13365],{"class":213},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[144,13367,13368],{"class":146,"line":66},[144,13369,13370],{"class":213},"\u002F\u002F加上const就不能修改实参的\n",[144,13372,13373,13375,13378,13380,13382,13385,13388],{"class":146,"line":1210},[144,13374,5395],{"class":150},[144,13376,13377],{"class":1993}," showValue",[144,13379,155],{"class":154},[144,13381,6823],{"class":150},[144,13383,13384],{"class":150}," int&",[144,13386,13387],{"class":5247}," v",[144,13389,12473],{"class":154},[144,13391,13392],{"class":146,"line":1225},[144,13393,13394],{"class":213},"    \u002F\u002Fv += 100;\n",[144,13396,13397,13399,13401,13404,13406],{"class":146,"line":1231},[144,13398,6560],{"class":154},[144,13400,1199],{"class":150},[144,13402,13403],{"class":154}," v ",[144,13405,1199],{"class":150},[144,13407,8871],{"class":154},[144,13409,13410],{"class":146,"line":1245},[144,13411,1595],{"class":154},[144,13413,13414],{"class":146,"line":1251},[144,13415,2430],{"emptyLinePlaceholder":72},[144,13417,13418,13420,13422],{"class":146,"line":1342},[144,13419,158],{"class":150},[144,13421,2003],{"class":1993},[144,13423,10884],{"class":154},[144,13425,13426],{"class":146,"line":1348},[144,13427,2430],{"emptyLinePlaceholder":72},[144,13429,13430],{"class":146,"line":1360},[144,13431,13432],{"class":213},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[144,13434,13435],{"class":146,"line":1642},[144,13436,13437],{"class":213},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[144,13439,13440,13442,13444,13446,13448,13450],{"class":146,"line":1647},[144,13441,11252],{"class":150},[144,13443,13384],{"class":150},[144,13445,12965],{"class":154},[144,13447,200],{"class":150},[144,13449,2068],{"class":203},[144,13451,1321],{"class":154},[144,13453,13454],{"class":146,"line":1653},[144,13455,2430],{"emptyLinePlaceholder":72},[144,13457,13458,13461],{"class":146,"line":1658},[144,13459,13460],{"class":213},"    \u002F\u002Fref = 100;",[144,13462,13463],{"class":213},"  \u002F\u002F加入const后不可以修改变量\n",[144,13465,13466,13468,13470,13472,13474],{"class":146,"line":1672},[144,13467,6560],{"class":154},[144,13469,1199],{"class":150},[144,13471,12965],{"class":154},[144,13473,1199],{"class":150},[144,13475,8871],{"class":154},[144,13477,13478],{"class":146,"line":1677},[144,13479,2430],{"emptyLinePlaceholder":72},[144,13481,13482],{"class":146,"line":1683},[144,13483,13484],{"class":213},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[144,13486,13487,13489,13491,13493,13495],{"class":146,"line":1704},[144,13488,2015],{"class":150},[144,13490,10900],{"class":154},[144,13492,200],{"class":150},[144,13494,2068],{"class":203},[144,13496,1321],{"class":154},[144,13498,13499,13502],{"class":146,"line":1709},[144,13500,13501],{"class":1993},"    showValue",[144,13503,13319],{"class":154},[144,13505,13506],{"class":146,"line":1723},[144,13507,2430],{"emptyLinePlaceholder":72},[144,13509,13510,13512,13514,13516],{"class":146,"line":1728},[144,13511,2333],{"class":1993},[144,13513,155],{"class":154},[144,13515,2338],{"class":259},[144,13517,2749],{"class":154},[144,13519,13520],{"class":146,"line":1757},[144,13521,2430],{"emptyLinePlaceholder":72},[144,13523,13524,13526,13528],{"class":146,"line":1762},[144,13525,4120],{"class":150},[144,13527,4123],{"class":203},[144,13529,1321],{"class":154},[144,13531,13532],{"class":146,"line":1779},[144,13533,1595],{"class":154},[5157,13535,13536],{},"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":30,"searchDepth":66,"depth":66,"links":13538},[13539,13540,13541,13542,13543,13544],{"id":12071,"depth":66,"text":12072},{"id":12250,"depth":66,"text":12251},{"id":12433,"depth":66,"text":12434},{"id":12837,"depth":66,"text":12838},{"id":13164,"depth":66,"text":13165},{"id":13344,"depth":66,"text":13345},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12063,"description":30},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13551,"title":13552,"body":13553,"description":30,"extension":70,"meta":14634,"navigation":72,"path":14635,"seo":14636,"stem":14637,"__hash__":14638},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13554,"toc":14626},[13555,13558,13562,13565,13570,13802,13804,13815,13819,13822,13830,13934,13937,13941,13944,13948,13951,13956,13978,13984,14311,14314,14318,14326,14623],[10,13556,13552],{"id":13557},"_7函数高级部分",[18,13559,13561],{"id":13560},"_71函数默认参数","7.1函数默认参数",[14,13563,13564],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,13566,5212,13567],{},[141,13568,13569],{}," 返回值类型  函数名 （参数= 默认值）{}",[135,13571,13573],{"className":137,"code":13572,"language":139,"meta":30,"style":30},"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",[141,13574,13575,13610,13625,13629,13633,13638,13643,13672,13692,13702,13706,13710,13718,13722,13750,13772,13776,13786,13790,13798],{"__ignoreMap":30},[144,13576,13577,13579,13581,13583,13585,13587,13589,13591,13593,13596,13598,13600,13602,13604,13606,13608],{"class":146,"line":147},[144,13578,158],{"class":150},[144,13580,11416],{"class":1993},[144,13582,155],{"class":154},[144,13584,158],{"class":150},[144,13586,1429],{"class":5247},[144,13588,12466],{"class":154},[144,13590,158],{"class":150},[144,13592,2863],{"class":5247},[144,13594,13595],{"class":150}," =",[144,13597,2068],{"class":203},[144,13599,12466],{"class":154},[144,13601,158],{"class":150},[144,13603,2879],{"class":5247},[144,13605,13595],{"class":150},[144,13607,2068],{"class":203},[144,13609,12473],{"class":154},[144,13611,13612,13614,13616,13618,13620,13622],{"class":146,"line":66},[144,13613,4120],{"class":150},[144,13615,10900],{"class":154},[144,13617,636],{"class":150},[144,13619,10913],{"class":154},[144,13621,636],{"class":150},[144,13623,13624],{"class":154}," c;\n",[144,13626,13627],{"class":146,"line":1210},[144,13628,1595],{"class":154},[144,13630,13631],{"class":146,"line":1225},[144,13632,2430],{"emptyLinePlaceholder":72},[144,13634,13635],{"class":146,"line":1231},[144,13636,13637],{"class":213},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[144,13639,13640],{"class":146,"line":1245},[144,13641,13642],{"class":213},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[144,13644,13645,13647,13650,13652,13654,13656,13658,13660,13662,13664,13666,13668,13670],{"class":146,"line":1251},[144,13646,158],{"class":150},[144,13648,13649],{"class":1993}," func2",[144,13651,155],{"class":154},[144,13653,158],{"class":150},[144,13655,1429],{"class":5247},[144,13657,13595],{"class":150},[144,13659,2068],{"class":203},[144,13661,12466],{"class":154},[144,13663,158],{"class":150},[144,13665,2863],{"class":5247},[144,13667,13595],{"class":150},[144,13669,2068],{"class":203},[144,13671,2749],{"class":154},[144,13673,13674,13676,13678,13680,13682,13684,13686,13688,13690],{"class":146,"line":1342},[144,13675,158],{"class":150},[144,13677,13649],{"class":1993},[144,13679,155],{"class":154},[144,13681,158],{"class":150},[144,13683,1429],{"class":5247},[144,13685,12466],{"class":154},[144,13687,158],{"class":150},[144,13689,2863],{"class":5247},[144,13691,12473],{"class":154},[144,13693,13694,13696,13698,13700],{"class":146,"line":1348},[144,13695,4120],{"class":150},[144,13697,10900],{"class":154},[144,13699,636],{"class":150},[144,13701,12494],{"class":154},[144,13703,13704],{"class":146,"line":1360},[144,13705,1595],{"class":154},[144,13707,13708],{"class":146,"line":1642},[144,13709,2430],{"emptyLinePlaceholder":72},[144,13711,13712,13714,13716],{"class":146,"line":1647},[144,13713,158],{"class":150},[144,13715,2003],{"class":1993},[144,13717,10884],{"class":154},[144,13719,13720],{"class":146,"line":1653},[144,13721,2430],{"emptyLinePlaceholder":72},[144,13723,13724,13726,13728,13731,13733,13735,13737,13739,13741,13743,13746,13748],{"class":146,"line":1658},[144,13725,6560],{"class":154},[144,13727,1199],{"class":150},[144,13729,13730],{"class":259}," \"ret = \"",[144,13732,1475],{"class":150},[144,13734,11416],{"class":1993},[144,13736,155],{"class":154},[144,13738,855],{"class":203},[144,13740,12466],{"class":154},[144,13742,855],{"class":203},[144,13744,13745],{"class":154},") ",[144,13747,1199],{"class":150},[144,13749,8871],{"class":154},[144,13751,13752,13754,13756,13758,13760,13762,13764,13766,13768,13770],{"class":146,"line":1672},[144,13753,6560],{"class":154},[144,13755,1199],{"class":150},[144,13757,13730],{"class":259},[144,13759,1475],{"class":150},[144,13761,11416],{"class":1993},[144,13763,155],{"class":154},[144,13765,466],{"class":203},[144,13767,13745],{"class":154},[144,13769,1199],{"class":150},[144,13771,8871],{"class":154},[144,13773,13774],{"class":146,"line":1677},[144,13775,2430],{"emptyLinePlaceholder":72},[144,13777,13778,13780,13782,13784],{"class":146,"line":1683},[144,13779,2333],{"class":1993},[144,13781,155],{"class":154},[144,13783,2338],{"class":259},[144,13785,2749],{"class":154},[144,13787,13788],{"class":146,"line":1704},[144,13789,2430],{"emptyLinePlaceholder":72},[144,13791,13792,13794,13796],{"class":146,"line":1709},[144,13793,4120],{"class":150},[144,13795,4123],{"class":203},[144,13797,1321],{"class":154},[144,13799,13800],{"class":146,"line":1723},[144,13801,1595],{"class":154},[14,13803,11363],{},[98,13805,13806,13809,13812],{},[101,13807,13808],{},"我传就用我；没传就用你",[101,13810,13811],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[101,13813,13814],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[18,13816,13818],{"id":13817},"_72函数的占位参数","7.2函数的占位参数",[14,13820,13821],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,13823,13824,13826,13827],{},[304,13825,5212],{}," ",[141,13828,13829],{},"返回值类型 函数名 (数据类型){}",[135,13831,13833],{"className":137,"code":13832,"language":139,"meta":30,"style":30},"\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",[141,13834,13835,13840,13858,13871,13875,13883,13887,13904,13908,13918,13922,13930],{"__ignoreMap":30},[144,13836,13837],{"class":146,"line":147},[144,13838,13839],{"class":213},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[144,13841,13842,13844,13846,13848,13850,13852,13854,13856],{"class":146,"line":66},[144,13843,5395],{"class":150},[144,13845,11416],{"class":1993},[144,13847,155],{"class":154},[144,13849,158],{"class":150},[144,13851,1429],{"class":5247},[144,13853,12466],{"class":154},[144,13855,158],{"class":150},[144,13857,12473],{"class":154},[144,13859,13860,13862,13864,13867,13869],{"class":146,"line":1210},[144,13861,6560],{"class":154},[144,13863,1199],{"class":150},[144,13865,13866],{"class":259}," \"this is func\"",[144,13868,1475],{"class":150},[144,13870,8871],{"class":154},[144,13872,13873],{"class":146,"line":1225},[144,13874,1595],{"class":154},[144,13876,13877,13879,13881],{"class":146,"line":1231},[144,13878,158],{"class":150},[144,13880,2003],{"class":1993},[144,13882,10884],{"class":154},[144,13884,13885],{"class":146,"line":1245},[144,13886,2430],{"emptyLinePlaceholder":72},[144,13888,13889,13891,13893,13895,13897,13899,13901],{"class":146,"line":1251},[144,13890,13316],{"class":1993},[144,13892,155],{"class":154},[144,13894,601],{"class":203},[144,13896,533],{"class":154},[144,13898,601],{"class":203},[144,13900,5997],{"class":154},[144,13902,13903],{"class":213}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[144,13905,13906],{"class":146,"line":1342},[144,13907,2430],{"emptyLinePlaceholder":72},[144,13909,13910,13912,13914,13916],{"class":146,"line":1348},[144,13911,2333],{"class":1993},[144,13913,155],{"class":154},[144,13915,2338],{"class":259},[144,13917,2749],{"class":154},[144,13919,13920],{"class":146,"line":1360},[144,13921,2430],{"emptyLinePlaceholder":72},[144,13923,13924,13926,13928],{"class":146,"line":1642},[144,13925,4120],{"class":150},[144,13927,4123],{"class":203},[144,13929,1321],{"class":154},[144,13931,13932],{"class":146,"line":1647},[144,13933,1595],{"class":154},[14,13935,13936],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[18,13938,13940],{"id":13939},"_73函数重载","7.3函数重载",[14,13942,13943],{},"意思是函数名是可以相同的",[115,13945,13947],{"id":13946},"_731基本语法","7.3.1基本语法",[14,13949,13950],{},"作用：函数名可以相同，提高复用性",[14,13952,13953],{},[304,13954,13955],{},"函数重载满足条件：",[1162,13957,13958,13961,13964],{},[101,13959,13960],{},"同一个作用域下",[101,13962,13963],{},"函数名称相同",[101,13965,13966,13967,13970,13971,13974,13975],{},"函数参数",[304,13968,13969],{},"类型不同","  或者 ",[304,13972,13973],{},"个数不同"," 或者 ",[304,13976,13977],{},"顺序不同",[14,13979,13980,13983],{},[304,13981,13982],{},"注意:","  函数的返回值不可以作为函数重载的条件",[135,13985,13987],{"className":9972,"code":13986,"language":9974,"meta":30,"style":30},"\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",[141,13988,13989,13994,14002,14006,14019,14023,14037,14041,14054,14058,14073,14077,14090,14094,14115,14119,14132,14136,14156,14160,14173,14177,14181,14186,14191,14196,14201,14206,14210,14214,14222,14226,14232,14242,14252,14266,14281,14285,14295,14299,14307],{"__ignoreMap":30},[144,13990,13991],{"class":146,"line":147},[144,13992,13993],{"class":213},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[144,13995,13996,13998,14000],{"class":146,"line":66},[144,13997,5395],{"class":150},[144,13999,11416],{"class":1993},[144,14001,2006],{"class":154},[144,14003,14004],{"class":146,"line":1210},[144,14005,1576],{"class":154},[144,14007,14008,14010,14012,14015,14017],{"class":146,"line":1225},[144,14009,6560],{"class":154},[144,14011,1199],{"class":150},[144,14013,14014],{"class":259}," \"func 的调用！\"",[144,14016,1475],{"class":150},[144,14018,8871],{"class":154},[144,14020,14021],{"class":146,"line":1231},[144,14022,1595],{"class":154},[144,14024,14025,14027,14029,14031,14033,14035],{"class":146,"line":1245},[144,14026,5395],{"class":150},[144,14028,11416],{"class":1993},[144,14030,155],{"class":154},[144,14032,158],{"class":150},[144,14034,1429],{"class":5247},[144,14036,161],{"class":154},[144,14038,14039],{"class":146,"line":1251},[144,14040,1576],{"class":154},[144,14042,14043,14045,14047,14050,14052],{"class":146,"line":1342},[144,14044,6560],{"class":154},[144,14046,1199],{"class":150},[144,14048,14049],{"class":259}," \"func (int a) 的调用！\"",[144,14051,1475],{"class":150},[144,14053,8871],{"class":154},[144,14055,14056],{"class":146,"line":1348},[144,14057,1595],{"class":154},[144,14059,14060,14062,14064,14066,14069,14071],{"class":146,"line":1360},[144,14061,5395],{"class":150},[144,14063,11416],{"class":1993},[144,14065,155],{"class":154},[144,14067,14068],{"class":150},"double",[144,14070,1429],{"class":5247},[144,14072,161],{"class":154},[144,14074,14075],{"class":146,"line":1642},[144,14076,1576],{"class":154},[144,14078,14079,14081,14083,14086,14088],{"class":146,"line":1647},[144,14080,6560],{"class":154},[144,14082,1199],{"class":150},[144,14084,14085],{"class":259}," \"func (double a)的调用！\"",[144,14087,1475],{"class":150},[144,14089,8871],{"class":154},[144,14091,14092],{"class":146,"line":1653},[144,14093,1595],{"class":154},[144,14095,14096,14098,14100,14102,14104,14106,14109,14111,14113],{"class":146,"line":1658},[144,14097,5395],{"class":150},[144,14099,11416],{"class":1993},[144,14101,155],{"class":154},[144,14103,158],{"class":150},[144,14105,1429],{"class":5247},[144,14107,14108],{"class":154}," ,",[144,14110,14068],{"class":150},[144,14112,2863],{"class":5247},[144,14114,161],{"class":154},[144,14116,14117],{"class":146,"line":1672},[144,14118,1576],{"class":154},[144,14120,14121,14123,14125,14128,14130],{"class":146,"line":1677},[144,14122,6560],{"class":154},[144,14124,1199],{"class":150},[144,14126,14127],{"class":259}," \"func (int a ,double b) 的调用！\"",[144,14129,1475],{"class":150},[144,14131,8871],{"class":154},[144,14133,14134],{"class":146,"line":1683},[144,14135,1595],{"class":154},[144,14137,14138,14140,14142,14144,14146,14148,14150,14152,14154],{"class":146,"line":1704},[144,14139,5395],{"class":150},[144,14141,11416],{"class":1993},[144,14143,155],{"class":154},[144,14145,14068],{"class":150},[144,14147,1429],{"class":5247},[144,14149,14108],{"class":154},[144,14151,158],{"class":150},[144,14153,2863],{"class":5247},[144,14155,161],{"class":154},[144,14157,14158],{"class":146,"line":1709},[144,14159,1576],{"class":154},[144,14161,14162,14164,14166,14169,14171],{"class":146,"line":1723},[144,14163,6560],{"class":154},[144,14165,1199],{"class":150},[144,14167,14168],{"class":259}," \"func (double a ,int b)的调用！\"",[144,14170,1475],{"class":150},[144,14172,8871],{"class":154},[144,14174,14175],{"class":146,"line":1728},[144,14176,1595],{"class":154},[144,14178,14179],{"class":146,"line":1757},[144,14180,2430],{"emptyLinePlaceholder":72},[144,14182,14183],{"class":146,"line":1762},[144,14184,14185],{"class":213},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[144,14187,14188],{"class":146,"line":1779},[144,14189,14190],{"class":213},"\u002F\u002Fint func(double a, int b)\n",[144,14192,14193],{"class":146,"line":1784},[144,14194,14195],{"class":213},"\u002F\u002F{\n",[144,14197,14198],{"class":146,"line":1789},[144,14199,14200],{"class":213},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[144,14202,14203],{"class":146,"line":1794},[144,14204,14205],{"class":213},"\u002F\u002F}\n",[144,14207,14208],{"class":146,"line":1808},[144,14209,2430],{"emptyLinePlaceholder":72},[144,14211,14212],{"class":146,"line":1813},[144,14213,2430],{"emptyLinePlaceholder":72},[144,14215,14216,14218,14220],{"class":146,"line":2607},[144,14217,158],{"class":150},[144,14219,2003],{"class":1993},[144,14221,10884],{"class":154},[144,14223,14224],{"class":146,"line":2621},[144,14225,2430],{"emptyLinePlaceholder":72},[144,14227,14228,14230],{"class":146,"line":2629},[144,14229,13316],{"class":1993},[144,14231,5667],{"class":154},[144,14233,14234,14236,14238,14240],{"class":146,"line":2634},[144,14235,13316],{"class":1993},[144,14237,155],{"class":154},[144,14239,601],{"class":203},[144,14241,2749],{"class":154},[144,14243,14244,14246,14248,14250],{"class":146,"line":2640},[144,14245,13316],{"class":1993},[144,14247,155],{"class":154},[144,14249,204],{"class":203},[144,14251,2749],{"class":154},[144,14253,14254,14256,14258,14260,14262,14264],{"class":146,"line":2646},[144,14255,13316],{"class":1993},[144,14257,155],{"class":154},[144,14259,601],{"class":203},[144,14261,533],{"class":154},[144,14263,204],{"class":203},[144,14265,2749],{"class":154},[144,14267,14268,14270,14272,14274,14277,14279],{"class":146,"line":2651},[144,14269,13316],{"class":1993},[144,14271,155],{"class":154},[144,14273,204],{"class":203},[144,14275,14276],{"class":154}," , ",[144,14278,601],{"class":203},[144,14280,2749],{"class":154},[144,14282,14283],{"class":146,"line":7979},[144,14284,13241],{"class":154},[144,14286,14287,14289,14291,14293],{"class":146,"line":8003},[144,14288,2333],{"class":1993},[144,14290,155],{"class":154},[144,14292,2338],{"class":259},[144,14294,2749],{"class":154},[144,14296,14297],{"class":146,"line":8008},[144,14298,2430],{"emptyLinePlaceholder":72},[144,14300,14301,14303,14305],{"class":146,"line":8014},[144,14302,4120],{"class":150},[144,14304,4123],{"class":203},[144,14306,1321],{"class":154},[144,14308,14309],{"class":146,"line":8041},[144,14310,1595],{"class":154},[14,14312,14313],{},"重点：函数返回值不可以作为函数重载条件！",[115,14315,14317],{"id":14316},"_732注意事项","7.3.2注意事项",[1162,14319,14320,14323],{},[101,14321,14322],{},"引用作为重载条件!!!",[101,14324,14325],{},"函数重载碰到函数默认参数",[135,14327,14329],{"className":137,"code":14328,"language":139,"meta":30,"style":30},"\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",[141,14330,14331,14336,14341,14345,14361,14365,14378,14382,14386,14404,14408,14421,14425,14429,14433,14438,14442,14466,14470,14483,14487,14491,14505,14509,14522,14526,14530,14538,14542,14554,14564,14577,14581,14585,14593,14597,14607,14611,14619],{"__ignoreMap":30},[144,14332,14333],{"class":146,"line":147},[144,14334,14335],{"class":213},"\u002F\u002F函数重载注意事项\n",[144,14337,14338],{"class":146,"line":66},[144,14339,14340],{"class":213},"\u002F\u002F1、引用作为重载条件\n",[144,14342,14343],{"class":146,"line":1210},[144,14344,2430],{"emptyLinePlaceholder":72},[144,14346,14347,14349,14351,14353,14355,14357,14359],{"class":146,"line":1225},[144,14348,5395],{"class":150},[144,14350,11416],{"class":1993},[144,14352,155],{"class":154},[144,14354,158],{"class":150},[144,14356,10615],{"class":150},[144,14358,393],{"class":5247},[144,14360,161],{"class":154},[144,14362,14363],{"class":146,"line":1231},[144,14364,1576],{"class":154},[144,14366,14367,14369,14371,14374,14376],{"class":146,"line":1245},[144,14368,6560],{"class":154},[144,14370,1199],{"class":150},[144,14372,14373],{"class":259}," \"func (int &a) 调用 \"",[144,14375,1475],{"class":150},[144,14377,8871],{"class":154},[144,14379,14380],{"class":146,"line":1251},[144,14381,1595],{"class":154},[144,14383,14384],{"class":146,"line":1342},[144,14385,2430],{"emptyLinePlaceholder":72},[144,14387,14388,14390,14392,14394,14396,14398,14400,14402],{"class":146,"line":1348},[144,14389,5395],{"class":150},[144,14391,11416],{"class":1993},[144,14393,155],{"class":154},[144,14395,6823],{"class":150},[144,14397,2412],{"class":150},[144,14399,10615],{"class":150},[144,14401,393],{"class":5247},[144,14403,161],{"class":154},[144,14405,14406],{"class":146,"line":1360},[144,14407,1576],{"class":154},[144,14409,14410,14412,14414,14417,14419],{"class":146,"line":1642},[144,14411,6560],{"class":154},[144,14413,1199],{"class":150},[144,14415,14416],{"class":259}," \"func (const int &a) 调用 \"",[144,14418,1475],{"class":150},[144,14420,8871],{"class":154},[144,14422,14423],{"class":146,"line":1647},[144,14424,1595],{"class":154},[144,14426,14427],{"class":146,"line":1653},[144,14428,2430],{"emptyLinePlaceholder":72},[144,14430,14431],{"class":146,"line":1658},[144,14432,2430],{"emptyLinePlaceholder":72},[144,14434,14435],{"class":146,"line":1672},[144,14436,14437],{"class":213},"\u002F\u002F2、函数重载碰到函数默认参数\n",[144,14439,14440],{"class":146,"line":1677},[144,14441,2430],{"emptyLinePlaceholder":72},[144,14443,14444,14446,14448,14450,14452,14454,14456,14458,14460,14462,14464],{"class":146,"line":1683},[144,14445,5395],{"class":150},[144,14447,13649],{"class":1993},[144,14449,155],{"class":154},[144,14451,158],{"class":150},[144,14453,1429],{"class":5247},[144,14455,12466],{"class":154},[144,14457,158],{"class":150},[144,14459,2863],{"class":5247},[144,14461,13595],{"class":150},[144,14463,2068],{"class":203},[144,14465,161],{"class":154},[144,14467,14468],{"class":146,"line":1704},[144,14469,1576],{"class":154},[144,14471,14472,14474,14476,14479,14481],{"class":146,"line":1709},[144,14473,6560],{"class":154},[144,14475,1199],{"class":150},[144,14477,14478],{"class":259}," \"func2(int a, int b = 10) 调用\"",[144,14480,1475],{"class":150},[144,14482,8871],{"class":154},[144,14484,14485],{"class":146,"line":1723},[144,14486,1595],{"class":154},[144,14488,14489],{"class":146,"line":1728},[144,14490,2430],{"emptyLinePlaceholder":72},[144,14492,14493,14495,14497,14499,14501,14503],{"class":146,"line":1757},[144,14494,5395],{"class":150},[144,14496,13649],{"class":1993},[144,14498,155],{"class":154},[144,14500,158],{"class":150},[144,14502,1429],{"class":5247},[144,14504,161],{"class":154},[144,14506,14507],{"class":146,"line":1762},[144,14508,1576],{"class":154},[144,14510,14511,14513,14515,14518,14520],{"class":146,"line":1779},[144,14512,6560],{"class":154},[144,14514,1199],{"class":150},[144,14516,14517],{"class":259}," \"func2(int a) 调用\"",[144,14519,1475],{"class":150},[144,14521,8871],{"class":154},[144,14523,14524],{"class":146,"line":1784},[144,14525,1595],{"class":154},[144,14527,14528],{"class":146,"line":1789},[144,14529,2430],{"emptyLinePlaceholder":72},[144,14531,14532,14534,14536],{"class":146,"line":1794},[144,14533,158],{"class":150},[144,14535,2003],{"class":1993},[144,14537,10884],{"class":154},[144,14539,14540],{"class":146,"line":1808},[144,14541,13241],{"class":154},[144,14543,14544,14546,14548,14550,14552],{"class":146,"line":1813},[144,14545,2015],{"class":150},[144,14547,10900],{"class":154},[144,14549,200],{"class":150},[144,14551,2068],{"class":203},[144,14553,1321],{"class":154},[144,14555,14556,14558,14561],{"class":146,"line":2607},[144,14557,13316],{"class":1993},[144,14559,14560],{"class":154},"(a);",[144,14562,14563],{"class":213}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[144,14565,14566,14568,14570,14572,14574],{"class":146,"line":2621},[144,14567,13316],{"class":1993},[144,14569,155],{"class":154},[144,14571,601],{"class":203},[144,14573,5997],{"class":154},[144,14575,14576],{"class":213},"\u002F\u002F调用有const   10是个常量\n",[144,14578,14579],{"class":146,"line":2629},[144,14580,2430],{"emptyLinePlaceholder":72},[144,14582,14583],{"class":146,"line":2634},[144,14584,2430],{"emptyLinePlaceholder":72},[144,14586,14587,14590],{"class":146,"line":2640},[144,14588,14589],{"class":213},"    \u002F\u002Ffunc2(10);",[144,14591,14592],{"class":213}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[144,14594,14595],{"class":146,"line":2646},[144,14596,2430],{"emptyLinePlaceholder":72},[144,14598,14599,14601,14603,14605],{"class":146,"line":2651},[144,14600,2333],{"class":1993},[144,14602,155],{"class":154},[144,14604,2338],{"class":259},[144,14606,2749],{"class":154},[144,14608,14609],{"class":146,"line":7979},[144,14610,2430],{"emptyLinePlaceholder":72},[144,14612,14613,14615,14617],{"class":146,"line":8003},[144,14614,4120],{"class":150},[144,14616,4123],{"class":203},[144,14618,1321],{"class":154},[144,14620,14621],{"class":146,"line":8008},[144,14622,1595],{"class":154},[5157,14624,14625],{},"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":30,"searchDepth":66,"depth":66,"links":14627},[14628,14629,14630],{"id":13560,"depth":66,"text":13561},{"id":13817,"depth":66,"text":13818},{"id":13939,"depth":66,"text":13940,"children":14631},[14632,14633],{"id":13946,"depth":1210,"text":13947},{"id":14316,"depth":1210,"text":14317},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13552,"description":30},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14640,"title":14641,"body":14642,"description":23396,"extension":70,"meta":23397,"navigation":72,"path":23398,"seo":23399,"stem":23400,"__hash__":23401},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14643,"toc":23377},[14644,14647,14653,14660,14665,14668,14671,14674,14678,14682,14685,14688,14696,14701,14704,14711,14716,14875,14878,15131,15134,15137,15140,15145,15148,15151,15162,15167,15403,15407,15417,15420,15428,15575,15579,15582,15585,15589,16034,16038,16046,16054,16966,16973,16978,17606,17609,17612,17615,17734,17737,17824,17827,17953,17956,18050,18053,18406,18410,18418,18422,18429,18432,18435,18446,18452,18457,18469,18477,18497,18505,18522,18708,18711,18715,18718,18721,18724,18727,18730,18733,18736,19196,19202,19206,19209,19220,19807,19810,20299,20303,20306,20309,20312,20315,20318,20326,20722,20726,20729,20732,21179,21182,21185,21190,21193,21198,21201,21205,21208,21210,21216,21219,21525,21535,21576,21580,21583,21585,21618,21621,21928,21930,21945,21948,21971,21980,21986,21989,21993,21996,21999,22004,22015,22020,22028,22033,22163,22166,22169,22344,22349,22561,22565,22568,22682,22687,22926,22930,22934,22937,22940,22945,23050,23053,23056,23059,23063,23174,23177,23180,23185,23237,23240,23243,23248,23294,23297,23302,23370,23372,23375],[10,14645,14641],{"id":14646},"_8类和对象",[14,14648,14649,14650],{},"C++面向对象的三大特性为",[304,14651,14652],{},"封装、继承、多态",[14,14654,14655,14656,14659],{},"C++认为",[304,14657,14658],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,14661,14662],{},[304,14663,14664],{},"例如：",[14,14666,14667],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,14669,14670],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,14672,14673],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[18,14675,14677],{"id":14676},"_81封装","8.1封装",[115,14679,14681],{"id":14680},"_811封装的意义","8.1.1封装的意义",[14,14683,14684],{},"封装是C++面向对象三大特性之一",[14,14686,14687],{},"封装的意义：",[1162,14689,14690,14693],{},[101,14691,14692],{},"将属性和行为作为一个整体，表现生活中的事物",[101,14694,14695],{},"将属性和行为加以权限控制",[14,14697,14698],{},[304,14699,14700],{},"封装意义一：",[14,14702,14703],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,14705,14706,13826,14708],{},[304,14707,5212],{},[141,14709,14710],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[98,14712,14713],{},[101,14714,14715],{},"**示例1：**设计一个圆类，求圆的周长",[135,14717,14719],{"className":137,"code":14718,"language":139,"meta":30,"style":30},"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",[141,14720,14721,14729,14733,14738,14743,14748,14753,14760,14765,14775,14779,14797,14801,14805,14813,14817,14822,14827,14832,14837,14848,14871],{"__ignoreMap":30},[144,14722,14723,14726],{"class":146,"line":147},[144,14724,14725],{"class":150},"class",[144,14727,14728],{"class":1993}," Circle\n",[144,14730,14731],{"class":146,"line":66},[144,14732,1576],{"class":154},[144,14734,14735],{"class":146,"line":1210},[144,14736,14737],{"class":213},"    \u002F\u002F访问权限\n",[144,14739,14740],{"class":146,"line":1225},[144,14741,14742],{"class":213},"    \u002F\u002F公共权限\n",[144,14744,14745],{"class":146,"line":1231},[144,14746,14747],{"class":150},"public:\n",[144,14749,14750],{"class":146,"line":1245},[144,14751,14752],{"class":213},"    \u002F\u002F属性\n",[144,14754,14755,14757],{"class":146,"line":1251},[144,14756,2015],{"class":150},[144,14758,14759],{"class":154}," m_r;\n",[144,14761,14762],{"class":146,"line":1342},[144,14763,14764],{"class":213},"    \u002F\u002F行为\n",[144,14766,14767,14770,14773],{"class":146,"line":1348},[144,14768,14769],{"class":150},"    double",[144,14771,14772],{"class":1993}," calculateZC",[144,14774,2006],{"class":154},[144,14776,14777],{"class":146,"line":1360},[144,14778,2060],{"class":154},[144,14780,14781,14784,14787,14789,14792,14794],{"class":146,"line":1642},[144,14782,14783],{"class":150},"        return",[144,14785,14786],{"class":203}," 2",[144,14788,610],{"class":150},[144,14790,14791],{"class":154},"PI",[144,14793,610],{"class":150},[144,14795,14796],{"class":154},"m_r;\n",[144,14798,14799],{"class":146,"line":1647},[144,14800,2217],{"class":154},[144,14802,14803],{"class":146,"line":1653},[144,14804,4025],{"class":154},[144,14806,14807,14809,14811],{"class":146,"line":1658},[144,14808,158],{"class":150},[144,14810,2003],{"class":1993},[144,14812,2006],{"class":154},[144,14814,14815],{"class":146,"line":1672},[144,14816,1576],{"class":154},[144,14818,14819],{"class":146,"line":1677},[144,14820,14821],{"class":213},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[144,14823,14824],{"class":146,"line":1683},[144,14825,14826],{"class":213},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[144,14828,14829],{"class":146,"line":1704},[144,14830,14831],{"class":154},"    Circle c1;\n",[144,14833,14834],{"class":146,"line":1709},[144,14835,14836],{"class":213},"    \u002F\u002F给圆对象 的属性进行赋值\n",[144,14838,14839,14842,14844,14846],{"class":146,"line":1723},[144,14840,14841],{"class":154},"    c1.m_r",[144,14843,200],{"class":150},[144,14845,601],{"class":203},[144,14847,1321],{"class":154},[144,14849,14850,14852,14854,14857,14859,14862,14865,14867,14869],{"class":146,"line":1728},[144,14851,1581],{"class":154},[144,14853,1199],{"class":150},[144,14855,14856],{"class":259},"\"圆的周长\"",[144,14858,1199],{"class":150},[144,14860,14861],{"class":154},"c1.",[144,14863,14864],{"class":1993},"calculateZC",[144,14866,2457],{"class":154},[144,14868,1199],{"class":150},[144,14870,1222],{"class":154},[144,14872,14873],{"class":146,"line":1757},[144,14874,1595],{"class":154},[14,14876,14877],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[135,14879,14881],{"className":137,"code":14880,"language":139,"meta":30,"style":30},"#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",[141,14882,14883,14889,14899,14905,14911,14915,14919,14924,14931,14936,14954,14958,14968,14972,14977,14993,14997,15007,15011,15016,15024,15028,15060,15064,15068,15076,15080,15085,15090,15104,15118,15127],{"__ignoreMap":30},[144,14884,14885,14887],{"class":146,"line":147},[144,14886,1979],{"class":150},[144,14888,1982],{"class":259},[144,14890,14891,14893,14895,14897],{"class":146,"line":66},[144,14892,1987],{"class":150},[144,14894,1990],{"class":150},[144,14896,1994],{"class":1993},[144,14898,1321],{"class":154},[144,14900,14901,14903],{"class":146,"line":1210},[144,14902,1979],{"class":150},[144,14904,7780],{"class":259},[144,14906,14907,14909],{"class":146,"line":1225},[144,14908,14725],{"class":150},[144,14910,7793],{"class":1993},[144,14912,14913],{"class":146,"line":1231},[144,14914,1576],{"class":154},[144,14916,14917],{"class":146,"line":1245},[144,14918,14747],{"class":150},[144,14920,14921],{"class":146,"line":1251},[144,14922,14923],{"class":154},"    string m_name;\n",[144,14925,14926,14928],{"class":146,"line":1342},[144,14927,2015],{"class":150},[144,14929,14930],{"class":154}," m_id;\n",[144,14932,14933],{"class":146,"line":1348},[144,14934,14935],{"class":213},"    \u002F\u002F赋值姓名\n",[144,14937,14938,14941,14944,14946,14949,14952],{"class":146,"line":1360},[144,14939,14940],{"class":150},"    void",[144,14942,14943],{"class":1993}," setName",[144,14945,155],{"class":154},[144,14947,14948],{"class":1993},"string",[144,14950,14951],{"class":5247}," name",[144,14953,161],{"class":154},[144,14955,14956],{"class":146,"line":1642},[144,14957,2060],{"class":154},[144,14959,14960,14963,14965],{"class":146,"line":1647},[144,14961,14962],{"class":154},"        m_name",[144,14964,200],{"class":150},[144,14966,14967],{"class":154},"name;\n",[144,14969,14970],{"class":146,"line":1653},[144,14971,2217],{"class":154},[144,14973,14974],{"class":146,"line":1658},[144,14975,14976],{"class":213},"    \u002F\u002F赋值学号\n",[144,14978,14979,14981,14984,14986,14988,14991],{"class":146,"line":1672},[144,14980,14940],{"class":150},[144,14982,14983],{"class":1993}," setId",[144,14985,155],{"class":154},[144,14987,158],{"class":150},[144,14989,14990],{"class":5247}," id",[144,14992,161],{"class":154},[144,14994,14995],{"class":146,"line":1677},[144,14996,2060],{"class":154},[144,14998,14999,15002,15004],{"class":146,"line":1683},[144,15000,15001],{"class":154},"        m_id",[144,15003,200],{"class":150},[144,15005,15006],{"class":154},"id;\n",[144,15008,15009],{"class":146,"line":1704},[144,15010,2217],{"class":154},[144,15012,15013],{"class":146,"line":1709},[144,15014,15015],{"class":213},"    \u002F\u002F打印学生信息\n",[144,15017,15018,15020,15022],{"class":146,"line":1723},[144,15019,14940],{"class":150},[144,15021,9646],{"class":1993},[144,15023,2006],{"class":154},[144,15025,15026],{"class":146,"line":1728},[144,15027,2060],{"class":154},[144,15029,15030,15032,15034,15037,15039,15042,15044,15046,15048,15051,15053,15056,15058],{"class":146,"line":1757},[144,15031,3481],{"class":154},[144,15033,1199],{"class":150},[144,15035,15036],{"class":259},"\"姓名：\"",[144,15038,1199],{"class":150},[144,15040,15041],{"class":154},"m_name",[144,15043,1199],{"class":150},[144,15045,4389],{"class":259},[144,15047,1199],{"class":150},[144,15049,15050],{"class":259},"\"学号：\"",[144,15052,1199],{"class":150},[144,15054,15055],{"class":154},"m_id",[144,15057,1199],{"class":150},[144,15059,1222],{"class":154},[144,15061,15062],{"class":146,"line":1762},[144,15063,2217],{"class":154},[144,15065,15066],{"class":146,"line":1779},[144,15067,4025],{"class":154},[144,15069,15070,15072,15074],{"class":146,"line":1784},[144,15071,158],{"class":150},[144,15073,2003],{"class":1993},[144,15075,2006],{"class":154},[144,15077,15078],{"class":146,"line":1789},[144,15079,1576],{"class":154},[144,15081,15082],{"class":146,"line":1794},[144,15083,15084],{"class":213},"    \u002F\u002F实例化\n",[144,15086,15087],{"class":146,"line":1808},[144,15088,15089],{"class":154},"    Student s1;\n",[144,15091,15092,15095,15098,15100,15102],{"class":146,"line":1813},[144,15093,15094],{"class":154},"    s1.",[144,15096,15097],{"class":1993},"setName",[144,15099,155],{"class":154},[144,15101,7947],{"class":259},[144,15103,2749],{"class":154},[144,15105,15106,15108,15111,15113,15116],{"class":146,"line":2607},[144,15107,15094],{"class":154},[144,15109,15110],{"class":1993},"setId",[144,15112,155],{"class":154},[144,15114,15115],{"class":203},"123456",[144,15117,2749],{"class":154},[144,15119,15120,15122,15125],{"class":146,"line":2621},[144,15121,15094],{"class":154},[144,15123,15124],{"class":1993},"printInfo",[144,15126,5667],{"class":154},[144,15128,15129],{"class":146,"line":2629},[144,15130,1595],{"class":154},[14,15132,15133],{},"类中的属性和行为统称为成员",[14,15135,15136],{},"属性：成员属性(成员变量)",[14,15138,15139],{},"方法：成员函数(成员方法)",[14,15141,15142],{},[304,15143,15144],{},"封装意义二：",[14,15146,15147],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15149,15150],{},"访问权限有三种：",[98,15152,15153,15156,15159],{},[101,15154,15155],{},"public        公共权限",[101,15157,15158],{},"protected 保护权限",[101,15160,15161],{},"private      私有权限",[14,15163,15164],{},[304,15165,15166],{},"示例：",[135,15168,15170],{"className":9972,"code":15169,"language":9974,"meta":30,"style":30},"\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",[141,15171,15172,15177,15182,15187,15192,15196,15203,15207,15212,15216,15221,15225,15230,15235,15240,15244,15249,15254,15261,15265,15269,15277,15281,15292,15304,15316,15320,15324,15328,15336,15340,15345,15357,15365,15373,15377,15387,15391,15399],{"__ignoreMap":30},[144,15173,15174],{"class":146,"line":147},[144,15175,15176],{"class":213},"\u002F\u002F三种权限\n",[144,15178,15179],{"class":146,"line":66},[144,15180,15181],{"class":213},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[144,15183,15184],{"class":146,"line":1210},[144,15185,15186],{"class":213},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[144,15188,15189],{"class":146,"line":1225},[144,15190,15191],{"class":213},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[144,15193,15194],{"class":146,"line":1231},[144,15195,2430],{"emptyLinePlaceholder":72},[144,15197,15198,15200],{"class":146,"line":1245},[144,15199,14725],{"class":150},[144,15201,15202],{"class":1993}," Person\n",[144,15204,15205],{"class":146,"line":1251},[144,15206,1576],{"class":154},[144,15208,15209],{"class":146,"line":1342},[144,15210,15211],{"class":213},"    \u002F\u002F姓名  公共权限\n",[144,15213,15214],{"class":146,"line":1348},[144,15215,14747],{"class":150},[144,15217,15218],{"class":146,"line":1360},[144,15219,15220],{"class":154},"    string m_Name;\n",[144,15222,15223],{"class":146,"line":1642},[144,15224,2430],{"emptyLinePlaceholder":72},[144,15226,15227],{"class":146,"line":1647},[144,15228,15229],{"class":213},"    \u002F\u002F汽车  保护权限\n",[144,15231,15232],{"class":146,"line":1653},[144,15233,15234],{"class":150},"protected:\n",[144,15236,15237],{"class":146,"line":1658},[144,15238,15239],{"class":154},"    string m_Car;\n",[144,15241,15242],{"class":146,"line":1672},[144,15243,2430],{"emptyLinePlaceholder":72},[144,15245,15246],{"class":146,"line":1677},[144,15247,15248],{"class":213},"    \u002F\u002F银行卡密码  私有权限\n",[144,15250,15251],{"class":146,"line":1683},[144,15252,15253],{"class":150},"private:\n",[144,15255,15256,15258],{"class":146,"line":1704},[144,15257,2015],{"class":150},[144,15259,15260],{"class":154}," m_Password;\n",[144,15262,15263],{"class":146,"line":1709},[144,15264,2430],{"emptyLinePlaceholder":72},[144,15266,15267],{"class":146,"line":1723},[144,15268,14747],{"class":150},[144,15270,15271,15273,15275],{"class":146,"line":1728},[144,15272,14940],{"class":150},[144,15274,11416],{"class":1993},[144,15276,2006],{"class":154},[144,15278,15279],{"class":146,"line":1757},[144,15280,2060],{"class":154},[144,15282,15283,15286,15288,15290],{"class":146,"line":1762},[144,15284,15285],{"class":154},"        m_Name ",[144,15287,200],{"class":150},[144,15289,8969],{"class":259},[144,15291,1321],{"class":154},[144,15293,15294,15297,15299,15302],{"class":146,"line":1779},[144,15295,15296],{"class":154},"        m_Car ",[144,15298,200],{"class":150},[144,15300,15301],{"class":259}," \"拖拉机\"",[144,15303,1321],{"class":154},[144,15305,15306,15309,15311,15314],{"class":146,"line":1784},[144,15307,15308],{"class":154},"        m_Password ",[144,15310,200],{"class":150},[144,15312,15313],{"class":203}," 123456",[144,15315,1321],{"class":154},[144,15317,15318],{"class":146,"line":1789},[144,15319,2217],{"class":154},[144,15321,15322],{"class":146,"line":1794},[144,15323,4025],{"class":154},[144,15325,15326],{"class":146,"line":1808},[144,15327,2430],{"emptyLinePlaceholder":72},[144,15329,15330,15332,15334],{"class":146,"line":1813},[144,15331,158],{"class":150},[144,15333,2003],{"class":1993},[144,15335,10884],{"class":154},[144,15337,15338],{"class":146,"line":2607},[144,15339,2430],{"emptyLinePlaceholder":72},[144,15341,15342],{"class":146,"line":2621},[144,15343,15344],{"class":154},"    Person p;\n",[144,15346,15347,15350,15352,15355],{"class":146,"line":2629},[144,15348,15349],{"class":154},"    p.m_Name ",[144,15351,200],{"class":150},[144,15353,15354],{"class":259}," \"李四\"",[144,15356,1321],{"class":154},[144,15358,15359,15362],{"class":146,"line":2634},[144,15360,15361],{"class":213},"    \u002F\u002Fp.m_Car = \"奔驰\";",[144,15363,15364],{"class":213},"  \u002F\u002F保护权限类外访问不到\n",[144,15366,15367,15370],{"class":146,"line":2640},[144,15368,15369],{"class":213},"    \u002F\u002Fp.m_Password = 123;",[144,15371,15372],{"class":213}," \u002F\u002F私有权限类外访问不到\n",[144,15374,15375],{"class":146,"line":2646},[144,15376,2430],{"emptyLinePlaceholder":72},[144,15378,15379,15381,15383,15385],{"class":146,"line":2651},[144,15380,2333],{"class":1993},[144,15382,155],{"class":154},[144,15384,2338],{"class":259},[144,15386,2749],{"class":154},[144,15388,15389],{"class":146,"line":7979},[144,15390,2430],{"emptyLinePlaceholder":72},[144,15392,15393,15395,15397],{"class":146,"line":8003},[144,15394,4120],{"class":150},[144,15396,4123],{"class":203},[144,15398,1321],{"class":154},[144,15400,15401],{"class":146,"line":8008},[144,15402,1595],{"class":154},[115,15404,15406],{"id":15405},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,15408,15409,15410,15413,15414],{},"在C++中 struct和class唯一的",[304,15411,15412],{},"区别","就在于 ",[304,15415,15416],{},"默认的访问权限不同",[14,15418,15419],{},"区别：",[1162,15421,15422,15425],{},[101,15423,15424],{},"struct 默认权限为公共",[101,15426,15427],{},"class   默认权限为私有",[135,15429,15431],{"className":9972,"code":15430,"language":9974,"meta":30,"style":30},"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",[141,15432,15433,15440,15444,15454,15458,15462,15469,15473,15483,15487,15491,15499,15503,15508,15522,15526,15531,15545,15549,15559,15563,15571],{"__ignoreMap":30},[144,15434,15435,15437],{"class":146,"line":147},[144,15436,14725],{"class":150},[144,15438,15439],{"class":1993}," C1\n",[144,15441,15442],{"class":146,"line":66},[144,15443,1576],{"class":154},[144,15445,15446,15448,15451],{"class":146,"line":1210},[144,15447,2015],{"class":150},[144,15449,15450],{"class":154},"  m_A;",[144,15452,15453],{"class":213}," \u002F\u002F默认是私有权限\n",[144,15455,15456],{"class":146,"line":1225},[144,15457,4025],{"class":154},[144,15459,15460],{"class":146,"line":1231},[144,15461,2430],{"emptyLinePlaceholder":72},[144,15463,15464,15466],{"class":146,"line":1245},[144,15465,7790],{"class":150},[144,15467,15468],{"class":1993}," C2\n",[144,15470,15471],{"class":146,"line":1251},[144,15472,1576],{"class":154},[144,15474,15475,15477,15480],{"class":146,"line":1342},[144,15476,2015],{"class":150},[144,15478,15479],{"class":154}," m_A;",[144,15481,15482],{"class":213},"  \u002F\u002F默认是公共权限\n",[144,15484,15485],{"class":146,"line":1348},[144,15486,4025],{"class":154},[144,15488,15489],{"class":146,"line":1360},[144,15490,2430],{"emptyLinePlaceholder":72},[144,15492,15493,15495,15497],{"class":146,"line":1642},[144,15494,158],{"class":150},[144,15496,2003],{"class":1993},[144,15498,10884],{"class":154},[144,15500,15501],{"class":146,"line":1647},[144,15502,2430],{"emptyLinePlaceholder":72},[144,15504,15505],{"class":146,"line":1653},[144,15506,15507],{"class":154},"    C1 c1;\n",[144,15509,15510,15513,15515,15517,15519],{"class":146,"line":1658},[144,15511,15512],{"class":154},"    c1.m_A ",[144,15514,200],{"class":150},[144,15516,2068],{"class":203},[144,15518,210],{"class":154},[144,15520,15521],{"class":213}," \u002F\u002F错误，访问权限是私有\n",[144,15523,15524],{"class":146,"line":1672},[144,15525,2430],{"emptyLinePlaceholder":72},[144,15527,15528],{"class":146,"line":1677},[144,15529,15530],{"class":154},"    C2 c2;\n",[144,15532,15533,15536,15538,15540,15542],{"class":146,"line":1683},[144,15534,15535],{"class":154},"    c2.m_A ",[144,15537,200],{"class":150},[144,15539,2068],{"class":203},[144,15541,210],{"class":154},[144,15543,15544],{"class":213}," \u002F\u002F正确，访问权限是公共\n",[144,15546,15547],{"class":146,"line":1704},[144,15548,2430],{"emptyLinePlaceholder":72},[144,15550,15551,15553,15555,15557],{"class":146,"line":1709},[144,15552,2333],{"class":1993},[144,15554,155],{"class":154},[144,15556,2338],{"class":259},[144,15558,2749],{"class":154},[144,15560,15561],{"class":146,"line":1723},[144,15562,2430],{"emptyLinePlaceholder":72},[144,15564,15565,15567,15569],{"class":146,"line":1728},[144,15566,4120],{"class":150},[144,15568,4123],{"class":203},[144,15570,1321],{"class":154},[144,15572,15573],{"class":146,"line":1757},[144,15574,1595],{"class":154},[115,15576,15578],{"id":15577},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,15580,15581],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,15583,15584],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,15586,15587],{},[304,15588,15166],{},[135,15590,15592],{"className":9972,"code":15591,"language":9974,"meta":30,"style":30},"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",[141,15593,15594,15604,15608,15612,15617,15631,15640,15644,15654,15658,15665,15669,15673,15677,15682,15691,15698,15702,15707,15723,15746,15759,15766,15770,15779,15783,15787,15792,15808,15818,15822,15826,15830,15838,15842,15852,15856,15864,15868,15872,15880,15884,15888,15893,15906,15929,15933,15938,15951,15973,15977,15982,15996,16004,16008,16018,16022,16030],{"__ignoreMap":30},[144,15595,15596,15598,15601],{"class":146,"line":147},[144,15597,14725],{"class":150},[144,15599,15600],{"class":1993}," Person",[144,15602,15603],{"class":154}," {\n",[144,15605,15606],{"class":146,"line":66},[144,15607,14747],{"class":150},[144,15609,15610],{"class":146,"line":1210},[144,15611,2430],{"emptyLinePlaceholder":72},[144,15613,15614],{"class":146,"line":1225},[144,15615,15616],{"class":213},"    \u002F\u002F姓名设置可读可写\n",[144,15618,15619,15621,15623,15625,15627,15629],{"class":146,"line":1231},[144,15620,14940],{"class":150},[144,15622,14943],{"class":1993},[144,15624,155],{"class":154},[144,15626,14948],{"class":1993},[144,15628,14951],{"class":5247},[144,15630,12473],{"class":154},[144,15632,15633,15635,15637],{"class":146,"line":1245},[144,15634,15285],{"class":154},[144,15636,200],{"class":150},[144,15638,15639],{"class":154}," name;\n",[144,15641,15642],{"class":146,"line":1251},[144,15643,2217],{"class":154},[144,15645,15646,15649,15652],{"class":146,"line":1342},[144,15647,15648],{"class":1993},"    string",[144,15650,15651],{"class":1993}," getName",[144,15653,2006],{"class":154},[144,15655,15656],{"class":146,"line":1348},[144,15657,2060],{"class":154},[144,15659,15660,15662],{"class":146,"line":1360},[144,15661,14783],{"class":150},[144,15663,15664],{"class":154}," m_Name;\n",[144,15666,15667],{"class":146,"line":1642},[144,15668,2217],{"class":154},[144,15670,15671],{"class":146,"line":1647},[144,15672,2430],{"emptyLinePlaceholder":72},[144,15674,15675],{"class":146,"line":1653},[144,15676,2430],{"emptyLinePlaceholder":72},[144,15678,15679],{"class":146,"line":1658},[144,15680,15681],{"class":213},"    \u002F\u002F获取年龄 \n",[144,15683,15684,15686,15689],{"class":146,"line":1672},[144,15685,2015],{"class":150},[144,15687,15688],{"class":1993}," getAge",[144,15690,10884],{"class":154},[144,15692,15693,15695],{"class":146,"line":1677},[144,15694,14783],{"class":150},[144,15696,15697],{"class":154}," m_Age;\n",[144,15699,15700],{"class":146,"line":1683},[144,15701,2217],{"class":154},[144,15703,15704],{"class":146,"line":1704},[144,15705,15706],{"class":213},"    \u002F\u002F设置年龄\n",[144,15708,15709,15711,15714,15716,15718,15721],{"class":146,"line":1709},[144,15710,14940],{"class":150},[144,15712,15713],{"class":1993}," setAge",[144,15715,155],{"class":154},[144,15717,158],{"class":150},[144,15719,15720],{"class":5247}," age",[144,15722,12473],{"class":154},[144,15724,15725,15727,15730,15732,15734,15736,15739,15741,15744],{"class":146,"line":1723},[144,15726,2527],{"class":150},[144,15728,15729],{"class":154}," (age ",[144,15731,1065],{"class":150},[144,15733,4123],{"class":203},[144,15735,3285],{"class":150},[144,15737,15738],{"class":154}," age ",[144,15740,1115],{"class":150},[144,15742,15743],{"class":203}," 150",[144,15745,12473],{"class":154},[144,15747,15748,15750,15752,15755,15757],{"class":146,"line":1728},[144,15749,9750],{"class":154},[144,15751,1199],{"class":150},[144,15753,15754],{"class":259}," \"你个老妖精!\"",[144,15756,1475],{"class":150},[144,15758,8871],{"class":154},[144,15760,15761,15764],{"class":146,"line":1757},[144,15762,15763],{"class":150},"            return",[144,15765,1321],{"class":154},[144,15767,15768],{"class":146,"line":1762},[144,15769,2559],{"class":154},[144,15771,15772,15775,15777],{"class":146,"line":1779},[144,15773,15774],{"class":154},"        m_Age ",[144,15776,200],{"class":150},[144,15778,7828],{"class":154},[144,15780,15781],{"class":146,"line":1784},[144,15782,2217],{"class":154},[144,15784,15785],{"class":146,"line":1789},[144,15786,2430],{"emptyLinePlaceholder":72},[144,15788,15789],{"class":146,"line":1794},[144,15790,15791],{"class":213},"    \u002F\u002F情人设置为只写\n",[144,15793,15794,15796,15799,15801,15803,15806],{"class":146,"line":1808},[144,15795,14940],{"class":150},[144,15797,15798],{"class":1993}," setLover",[144,15800,155],{"class":154},[144,15802,14948],{"class":1993},[144,15804,15805],{"class":5247}," lover",[144,15807,12473],{"class":154},[144,15809,15810,15813,15815],{"class":146,"line":1813},[144,15811,15812],{"class":154},"        m_Lover ",[144,15814,200],{"class":150},[144,15816,15817],{"class":154}," lover;\n",[144,15819,15820],{"class":146,"line":2607},[144,15821,2217],{"class":154},[144,15823,15824],{"class":146,"line":2621},[144,15825,2430],{"emptyLinePlaceholder":72},[144,15827,15828],{"class":146,"line":2629},[144,15829,15253],{"class":150},[144,15831,15832,15835],{"class":146,"line":2634},[144,15833,15834],{"class":154},"    string m_Name;",[144,15836,15837],{"class":213}," \u002F\u002F可读可写  姓名\n",[144,15839,15840],{"class":146,"line":2640},[144,15841,13241],{"class":154},[144,15843,15844,15846,15849],{"class":146,"line":2646},[144,15845,2015],{"class":150},[144,15847,15848],{"class":154}," m_Age;",[144,15850,15851],{"class":213}," \u002F\u002F只读  年龄\n",[144,15853,15854],{"class":146,"line":2651},[144,15855,2430],{"emptyLinePlaceholder":72},[144,15857,15858,15861],{"class":146,"line":7979},[144,15859,15860],{"class":154},"    string m_Lover;",[144,15862,15863],{"class":213}," \u002F\u002F只写  情人\n",[144,15865,15866],{"class":146,"line":8003},[144,15867,4025],{"class":154},[144,15869,15870],{"class":146,"line":8008},[144,15871,2430],{"emptyLinePlaceholder":72},[144,15873,15874,15876,15878],{"class":146,"line":8014},[144,15875,158],{"class":150},[144,15877,2003],{"class":1993},[144,15879,10884],{"class":154},[144,15881,15882],{"class":146,"line":8041},[144,15883,2430],{"emptyLinePlaceholder":72},[144,15885,15886],{"class":146,"line":8046},[144,15887,15344],{"class":154},[144,15889,15890],{"class":146,"line":8052},[144,15891,15892],{"class":213},"    \u002F\u002F姓名设置\n",[144,15894,15895,15898,15900,15902,15904],{"class":146,"line":8064},[144,15896,15897],{"class":154},"    p.",[144,15899,15097],{"class":1993},[144,15901,155],{"class":154},[144,15903,7947],{"class":259},[144,15905,2749],{"class":154},[144,15907,15908,15910,15912,15915,15917,15920,15923,15925,15927],{"class":146,"line":8076},[144,15909,6560],{"class":154},[144,15911,1199],{"class":150},[144,15913,15914],{"class":259}," \"姓名： \"",[144,15916,1475],{"class":150},[144,15918,15919],{"class":154}," p.",[144,15921,15922],{"class":1993},"getName",[144,15924,13081],{"class":154},[144,15926,1199],{"class":150},[144,15928,8871],{"class":154},[144,15930,15931],{"class":146,"line":8088},[144,15932,2430],{"emptyLinePlaceholder":72},[144,15934,15935],{"class":146,"line":9747},[144,15936,15937],{"class":213},"    \u002F\u002F年龄设置\n",[144,15939,15940,15942,15945,15947,15949],{"class":146,"line":9772},[144,15941,15897],{"class":154},[144,15943,15944],{"class":1993},"setAge",[144,15946,155],{"class":154},[144,15948,811],{"class":203},[144,15950,2749],{"class":154},[144,15952,15953,15955,15957,15960,15962,15964,15967,15969,15971],{"class":146,"line":9795},[144,15954,6560],{"class":154},[144,15956,1199],{"class":150},[144,15958,15959],{"class":259}," \"年龄： \"",[144,15961,1475],{"class":150},[144,15963,15919],{"class":154},[144,15965,15966],{"class":1993},"getAge",[144,15968,13081],{"class":154},[144,15970,1199],{"class":150},[144,15972,8871],{"class":154},[144,15974,15975],{"class":146,"line":9819},[144,15976,2430],{"emptyLinePlaceholder":72},[144,15978,15979],{"class":146,"line":9824},[144,15980,15981],{"class":213},"    \u002F\u002F情人设置\n",[144,15983,15984,15986,15989,15991,15994],{"class":146,"line":9829},[144,15985,15897],{"class":154},[144,15987,15988],{"class":1993},"setLover",[144,15990,155],{"class":154},[144,15992,15993],{"class":259},"\"苍井\"",[144,15995,2749],{"class":154},[144,15997,15998,16001],{"class":146,"line":9834},[144,15999,16000],{"class":213},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[144,16002,16003],{"class":213},"  \u002F\u002F只写属性，不可以读取\n",[144,16005,16006],{"class":146,"line":9843},[144,16007,2430],{"emptyLinePlaceholder":72},[144,16009,16010,16012,16014,16016],{"class":146,"line":9848},[144,16011,2333],{"class":1993},[144,16013,155],{"class":154},[144,16015,2338],{"class":259},[144,16017,2749],{"class":154},[144,16019,16020],{"class":146,"line":9854},[144,16021,2430],{"emptyLinePlaceholder":72},[144,16023,16024,16026,16028],{"class":146,"line":9875},[144,16025,4120],{"class":150},[144,16027,4123],{"class":203},[144,16029,1321],{"class":154},[144,16031,16032],{"class":146,"line":9881},[144,16033,1595],{"class":154},[115,16035,16037],{"id":16036},"_814封装案例","8.1.4封装案例",[98,16039,16040],{},[101,16041,16042,16045],{},[304,16043,16044],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1162,16047,16048,16051],{},[101,16049,16050],{},"求出立方体的面积和体积",[101,16052,16053],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[135,16055,16057],{"className":137,"code":16056,"language":139,"meta":30,"style":30},"#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",[141,16058,16059,16065,16075,16082,16086,16090,16095,16125,16129,16139,16149,16159,16163,16172,16176,16212,16216,16225,16229,16245,16249,16254,16263,16267,16274,16278,16287,16291,16298,16302,16311,16315,16322,16326,16331,16348,16352,16398,16402,16411,16415,16419,16423,16432,16436,16440,16445,16449,16455,16461,16467,16471,16475,16480,16502,16506,16560,16564,16572,16576,16581,16586,16599,16606,16622,16633,16639,16662,16668,16691,16705,16725,16731,16742,16765,16787,16792,16798,16812,16825,16830,16844,16849,16855,16860,16874,16879,16884,16898,16910,16915,16928,16933,16938,16943,16956,16961],{"__ignoreMap":30},[144,16060,16061,16063],{"class":146,"line":147},[144,16062,1979],{"class":150},[144,16064,1982],{"class":259},[144,16066,16067,16069,16071,16073],{"class":146,"line":66},[144,16068,1987],{"class":150},[144,16070,1990],{"class":150},[144,16072,1994],{"class":1993},[144,16074,1321],{"class":154},[144,16076,16077,16079],{"class":146,"line":1210},[144,16078,14725],{"class":150},[144,16080,16081],{"class":1993}," Cube\n",[144,16083,16084],{"class":146,"line":1225},[144,16085,1576],{"class":154},[144,16087,16088],{"class":146,"line":1231},[144,16089,14747],{"class":150},[144,16091,16092],{"class":146,"line":1245},[144,16093,16094],{"class":213},"    \u002F\u002F输入长宽高\n",[144,16096,16097,16099,16102,16104,16106,16109,16111,16113,16116,16118,16120,16123],{"class":146,"line":1251},[144,16098,14940],{"class":150},[144,16100,16101],{"class":1993}," setLwh",[144,16103,155],{"class":154},[144,16105,158],{"class":150},[144,16107,16108],{"class":5247}," l",[144,16110,533],{"class":154},[144,16112,158],{"class":150},[144,16114,16115],{"class":5247}," w",[144,16117,533],{"class":154},[144,16119,158],{"class":150},[144,16121,16122],{"class":5247}," h",[144,16124,161],{"class":154},[144,16126,16127],{"class":146,"line":1342},[144,16128,2060],{"class":154},[144,16130,16131,16134,16136],{"class":146,"line":1348},[144,16132,16133],{"class":154},"        m_L",[144,16135,200],{"class":150},[144,16137,16138],{"class":154},"l;\n",[144,16140,16141,16144,16146],{"class":146,"line":1360},[144,16142,16143],{"class":154},"        m_W",[144,16145,200],{"class":150},[144,16147,16148],{"class":154},"w;\n",[144,16150,16151,16154,16156],{"class":146,"line":1642},[144,16152,16153],{"class":154},"        m_H",[144,16155,200],{"class":150},[144,16157,16158],{"class":154},"h;\n",[144,16160,16161],{"class":146,"line":1647},[144,16162,2217],{"class":154},[144,16164,16165,16167,16170],{"class":146,"line":1653},[144,16166,2015],{"class":150},[144,16168,16169],{"class":1993}," mianji",[144,16171,2006],{"class":154},[144,16173,16174],{"class":146,"line":1658},[144,16175,2060],{"class":154},[144,16177,16178,16180,16182,16184,16187,16189,16192,16194,16197,16199,16202,16204,16207,16209],{"class":146,"line":1672},[144,16179,14783],{"class":150},[144,16181,14786],{"class":203},[144,16183,610],{"class":150},[144,16185,16186],{"class":154},"(m_L",[144,16188,610],{"class":150},[144,16190,16191],{"class":154},"m_W ",[144,16193,636],{"class":150},[144,16195,16196],{"class":154}," m_L",[144,16198,610],{"class":150},[144,16200,16201],{"class":154},"m_H ",[144,16203,636],{"class":150},[144,16205,16206],{"class":154}," m_W",[144,16208,610],{"class":150},[144,16210,16211],{"class":154},"m_H);\n",[144,16213,16214],{"class":146,"line":1677},[144,16215,2217],{"class":154},[144,16217,16218,16220,16223],{"class":146,"line":1683},[144,16219,2015],{"class":150},[144,16221,16222],{"class":1993}," tiji",[144,16224,2006],{"class":154},[144,16226,16227],{"class":146,"line":1704},[144,16228,2060],{"class":154},[144,16230,16231,16233,16235,16237,16240,16242],{"class":146,"line":1709},[144,16232,14783],{"class":150},[144,16234,16196],{"class":154},[144,16236,610],{"class":150},[144,16238,16239],{"class":154},"m_W",[144,16241,610],{"class":150},[144,16243,16244],{"class":154},"m_H;\n",[144,16246,16247],{"class":146,"line":1723},[144,16248,2217],{"class":154},[144,16250,16251],{"class":146,"line":1728},[144,16252,16253],{"class":213},"    \u002F\u002F获取长宽高\n",[144,16255,16256,16258,16261],{"class":146,"line":1757},[144,16257,2015],{"class":150},[144,16259,16260],{"class":1993}," getLength",[144,16262,2006],{"class":154},[144,16264,16265],{"class":146,"line":1762},[144,16266,2060],{"class":154},[144,16268,16269,16271],{"class":146,"line":1779},[144,16270,14783],{"class":150},[144,16272,16273],{"class":154}," m_L;\n",[144,16275,16276],{"class":146,"line":1784},[144,16277,2217],{"class":154},[144,16279,16280,16282,16285],{"class":146,"line":1789},[144,16281,2015],{"class":150},[144,16283,16284],{"class":1993}," getWidth",[144,16286,2006],{"class":154},[144,16288,16289],{"class":146,"line":1794},[144,16290,2060],{"class":154},[144,16292,16293,16295],{"class":146,"line":1808},[144,16294,14783],{"class":150},[144,16296,16297],{"class":154}," m_W;\n",[144,16299,16300],{"class":146,"line":1813},[144,16301,2217],{"class":154},[144,16303,16304,16306,16309],{"class":146,"line":2607},[144,16305,2015],{"class":150},[144,16307,16308],{"class":1993}," getHeight",[144,16310,2006],{"class":154},[144,16312,16313],{"class":146,"line":2621},[144,16314,2060],{"class":154},[144,16316,16317,16319],{"class":146,"line":2629},[144,16318,14783],{"class":150},[144,16320,16321],{"class":154}," m_H;\n",[144,16323,16324],{"class":146,"line":2634},[144,16325,2217],{"class":154},[144,16327,16328],{"class":146,"line":2640},[144,16329,16330],{"class":213},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[144,16332,16333,16336,16339,16341,16344,16346],{"class":146,"line":2646},[144,16334,16335],{"class":150},"    bool",[144,16337,16338],{"class":1993}," isEqual",[144,16340,155],{"class":154},[144,16342,16343],{"class":1993},"Cube",[144,16345,2879],{"class":5247},[144,16347,161],{"class":154},[144,16349,16350],{"class":146,"line":2651},[144,16351,2060],{"class":154},[144,16353,16354,16356,16359,16362,16364,16366,16369,16371,16374,16377,16379,16381,16384,16386,16388,16391,16393,16395],{"class":146,"line":7979},[144,16355,2527],{"class":150},[144,16357,16358],{"class":154}," (c.",[144,16360,16361],{"class":1993},"getLength",[144,16363,13081],{"class":154},[144,16365,2979],{"class":150},[144,16367,16368],{"class":154}," m_L ",[144,16370,1745],{"class":150},[144,16372,16373],{"class":154}," c.",[144,16375,16376],{"class":1993},"getWidth",[144,16378,13081],{"class":154},[144,16380,2979],{"class":150},[144,16382,16383],{"class":154}," m_W ",[144,16385,1745],{"class":150},[144,16387,16373],{"class":154},[144,16389,16390],{"class":1993},"getHeight",[144,16392,13081],{"class":154},[144,16394,2979],{"class":150},[144,16396,16397],{"class":154}," m_H)\n",[144,16399,16400],{"class":146,"line":8003},[144,16401,2540],{"class":154},[144,16403,16404,16406,16409],{"class":146,"line":8008},[144,16405,15763],{"class":150},[144,16407,16408],{"class":203}," true",[144,16410,1321],{"class":154},[144,16412,16413],{"class":146,"line":8014},[144,16414,2559],{"class":154},[144,16416,16417],{"class":146,"line":8041},[144,16418,2600],{"class":150},[144,16420,16421],{"class":146,"line":8046},[144,16422,2540],{"class":154},[144,16424,16425,16427,16430],{"class":146,"line":8052},[144,16426,15763],{"class":150},[144,16428,16429],{"class":203}," false",[144,16431,1321],{"class":154},[144,16433,16434],{"class":146,"line":8064},[144,16435,2559],{"class":154},[144,16437,16438],{"class":146,"line":8076},[144,16439,2217],{"class":154},[144,16441,16442],{"class":146,"line":8088},[144,16443,16444],{"class":213},"    \u002F\u002F私有属性\n",[144,16446,16447],{"class":146,"line":9747},[144,16448,15253],{"class":150},[144,16450,16451,16453],{"class":146,"line":9772},[144,16452,2015],{"class":150},[144,16454,16273],{"class":154},[144,16456,16457,16459],{"class":146,"line":9795},[144,16458,2015],{"class":150},[144,16460,16297],{"class":154},[144,16462,16463,16465],{"class":146,"line":9819},[144,16464,2015],{"class":150},[144,16466,16321],{"class":154},[144,16468,16469],{"class":146,"line":9824},[144,16470,2430],{"emptyLinePlaceholder":72},[144,16472,16473],{"class":146,"line":9829},[144,16474,4025],{"class":154},[144,16476,16477],{"class":146,"line":9834},[144,16478,16479],{"class":213},"\u002F\u002F全局函数判断两个立方体是否相等\n",[144,16481,16482,16484,16486,16488,16490,16493,16495,16497,16500],{"class":146,"line":9843},[144,16483,1385],{"class":150},[144,16485,16338],{"class":1993},[144,16487,155],{"class":154},[144,16489,16343],{"class":1993},[144,16491,16492],{"class":5247}," c1",[144,16494,533],{"class":154},[144,16496,16343],{"class":1993},[144,16498,16499],{"class":5247}," c2",[144,16501,161],{"class":154},[144,16503,16504],{"class":146,"line":9848},[144,16505,1576],{"class":154},[144,16507,16508,16510,16513,16515,16517,16519,16522,16524,16527,16529,16531,16533,16535,16537,16539,16541,16543,16545,16547,16549,16551,16553,16555,16557],{"class":146,"line":9854},[144,16509,4120],{"class":150},[144,16511,16512],{"class":154}," (c1.",[144,16514,16361],{"class":1993},[144,16516,13081],{"class":154},[144,16518,2979],{"class":150},[144,16520,16521],{"class":154}," c2.",[144,16523,16361],{"class":1993},[144,16525,16526],{"class":154},"()) ",[144,16528,1745],{"class":150},[144,16530,16512],{"class":154},[144,16532,16376],{"class":1993},[144,16534,13081],{"class":154},[144,16536,2979],{"class":150},[144,16538,16521],{"class":154},[144,16540,16376],{"class":1993},[144,16542,16526],{"class":154},[144,16544,1745],{"class":150},[144,16546,16512],{"class":154},[144,16548,16390],{"class":1993},[144,16550,13081],{"class":154},[144,16552,2979],{"class":150},[144,16554,16521],{"class":154},[144,16556,16390],{"class":1993},[144,16558,16559],{"class":154},"());\n",[144,16561,16562],{"class":146,"line":9875},[144,16563,1595],{"class":154},[144,16565,16566,16568,16570],{"class":146,"line":9881},[144,16567,158],{"class":150},[144,16569,2003],{"class":1993},[144,16571,2006],{"class":154},[144,16573,16574],{"class":146,"line":9895},[144,16575,1576],{"class":154},[144,16577,16578],{"class":146,"line":9901},[144,16579,16580],{"class":154},"    Cube c1;\n",[144,16582,16583],{"class":146,"line":9928},[144,16584,16585],{"class":213},"    \u002F\u002F输入立方体的长宽高\n",[144,16587,16588,16590,16592,16595,16597],{"class":146,"line":9937},[144,16589,1581],{"class":154},[144,16591,1199],{"class":150},[144,16593,16594],{"class":259},"\"请输入第一个立方体的长、宽、高：\"",[144,16596,1199],{"class":150},[144,16598,1222],{"class":154},[144,16600,16601,16603],{"class":146,"line":9943},[144,16602,2015],{"class":150},[144,16604,16605],{"class":154}," l,w,h,l1,w1,h1;\n",[144,16607,16608,16610,16612,16614,16616,16618,16620],{"class":146,"line":9951},[144,16609,2042],{"class":154},[144,16611,1460],{"class":150},[144,16613,673],{"class":154},[144,16615,1460],{"class":150},[144,16617,950],{"class":154},[144,16619,1460],{"class":150},[144,16621,16158],{"class":154},[144,16623,16624,16627,16630],{"class":146,"line":9956},[144,16625,16626],{"class":154},"    c1.",[144,16628,16629],{"class":1993},"setLwh",[144,16631,16632],{"class":154},"(l,w,h);\n",[144,16634,16636],{"class":146,"line":16635},66,[144,16637,16638],{"class":213},"    \u002F\u002F面积\n",[144,16640,16642,16644,16646,16649,16651,16653,16656,16658,16660],{"class":146,"line":16641},67,[144,16643,1581],{"class":154},[144,16645,1199],{"class":150},[144,16647,16648],{"class":259},"\"立方体的表面积为：\"",[144,16650,1199],{"class":150},[144,16652,14861],{"class":154},[144,16654,16655],{"class":1993},"mianji",[144,16657,2457],{"class":154},[144,16659,1199],{"class":150},[144,16661,1222],{"class":154},[144,16663,16665],{"class":146,"line":16664},68,[144,16666,16667],{"class":213},"    \u002F\u002F体积\n",[144,16669,16671,16673,16675,16678,16680,16682,16685,16687,16689],{"class":146,"line":16670},69,[144,16672,1581],{"class":154},[144,16674,1199],{"class":150},[144,16676,16677],{"class":259},"\"立方体的体积为：\"",[144,16679,1199],{"class":150},[144,16681,14861],{"class":154},[144,16683,16684],{"class":1993},"tiji",[144,16686,2457],{"class":154},[144,16688,1199],{"class":150},[144,16690,1222],{"class":154},[144,16692,16694,16696,16698,16701,16703],{"class":146,"line":16693},70,[144,16695,1581],{"class":154},[144,16697,1199],{"class":150},[144,16699,16700],{"class":259},"\"请输入第二个立方体的长、宽、高：\"",[144,16702,1199],{"class":150},[144,16704,1222],{"class":154},[144,16706,16708,16710,16712,16715,16717,16720,16722],{"class":146,"line":16707},71,[144,16709,2042],{"class":154},[144,16711,1460],{"class":150},[144,16713,16714],{"class":154},"l1",[144,16716,1460],{"class":150},[144,16718,16719],{"class":154},"w1",[144,16721,1460],{"class":150},[144,16723,16724],{"class":154},"h1;\n",[144,16726,16728],{"class":146,"line":16727},72,[144,16729,16730],{"class":154},"    Cube c2;\n",[144,16732,16734,16737,16739],{"class":146,"line":16733},73,[144,16735,16736],{"class":154},"    c2.",[144,16738,16629],{"class":1993},[144,16740,16741],{"class":154},"(l1,w1,h1);\n",[144,16743,16745,16747,16749,16752,16754,16757,16759,16761,16763],{"class":146,"line":16744},74,[144,16746,1581],{"class":154},[144,16748,1199],{"class":150},[144,16750,16751],{"class":259},"\"第二个立方体的表面积为：\"",[144,16753,1199],{"class":150},[144,16755,16756],{"class":154},"c2.",[144,16758,16655],{"class":1993},[144,16760,2457],{"class":154},[144,16762,1199],{"class":150},[144,16764,1222],{"class":154},[144,16766,16768,16770,16772,16775,16777,16779,16781,16783,16785],{"class":146,"line":16767},75,[144,16769,1581],{"class":154},[144,16771,1199],{"class":150},[144,16773,16774],{"class":259},"\"第二个立方体的体积为：\"",[144,16776,1199],{"class":150},[144,16778,16756],{"class":154},[144,16780,16684],{"class":1993},[144,16782,2457],{"class":154},[144,16784,1199],{"class":150},[144,16786,1222],{"class":154},[144,16788,16790],{"class":146,"line":16789},76,[144,16791,2430],{"emptyLinePlaceholder":72},[144,16793,16795],{"class":146,"line":16794},77,[144,16796,16797],{"class":213},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[144,16799,16801,16803,16805,16808,16810],{"class":146,"line":16800},78,[144,16802,1581],{"class":154},[144,16804,1199],{"class":150},[144,16806,16807],{"class":259},"\"内部函数判断结果：\"",[144,16809,1199],{"class":150},[144,16811,1222],{"class":154},[144,16813,16815,16817,16819,16822],{"class":146,"line":16814},79,[144,16816,3131],{"class":150},[144,16818,16512],{"class":154},[144,16820,16821],{"class":1993},"isEqual",[144,16823,16824],{"class":154},"(c2))\n",[144,16826,16828],{"class":146,"line":16827},80,[144,16829,2060],{"class":154},[144,16831,16833,16835,16837,16840,16842],{"class":146,"line":16832},81,[144,16834,3481],{"class":154},[144,16836,1199],{"class":150},[144,16838,16839],{"class":259},"\"两个立方体相等\"",[144,16841,1199],{"class":150},[144,16843,1222],{"class":154},[144,16845,16847],{"class":146,"line":16846},82,[144,16848,2217],{"class":154},[144,16850,16852],{"class":146,"line":16851},83,[144,16853,16854],{"class":150},"    else\n",[144,16856,16858],{"class":146,"line":16857},84,[144,16859,2060],{"class":154},[144,16861,16863,16865,16867,16870,16872],{"class":146,"line":16862},85,[144,16864,3481],{"class":154},[144,16866,1199],{"class":150},[144,16868,16869],{"class":259},"\"两个立方体不相等\"",[144,16871,1199],{"class":150},[144,16873,1222],{"class":154},[144,16875,16877],{"class":146,"line":16876},86,[144,16878,2217],{"class":154},[144,16880,16882],{"class":146,"line":16881},87,[144,16883,2430],{"emptyLinePlaceholder":72},[144,16885,16887,16889,16891,16894,16896],{"class":146,"line":16886},88,[144,16888,1581],{"class":154},[144,16890,1199],{"class":150},[144,16892,16893],{"class":259},"\"全局函数判断结果：\"",[144,16895,1199],{"class":150},[144,16897,1222],{"class":154},[144,16899,16901,16903,16905,16907],{"class":146,"line":16900},89,[144,16902,3131],{"class":150},[144,16904,1688],{"class":154},[144,16906,16821],{"class":1993},[144,16908,16909],{"class":154},"(c1, c2))\n",[144,16911,16913],{"class":146,"line":16912},90,[144,16914,2060],{"class":154},[144,16916,16918,16920,16922,16924,16926],{"class":146,"line":16917},91,[144,16919,3481],{"class":154},[144,16921,1199],{"class":150},[144,16923,16839],{"class":259},[144,16925,1199],{"class":150},[144,16927,1222],{"class":154},[144,16929,16931],{"class":146,"line":16930},92,[144,16932,2217],{"class":154},[144,16934,16936],{"class":146,"line":16935},93,[144,16937,16854],{"class":150},[144,16939,16941],{"class":146,"line":16940},94,[144,16942,2060],{"class":154},[144,16944,16946,16948,16950,16952,16954],{"class":146,"line":16945},95,[144,16947,3481],{"class":154},[144,16949,1199],{"class":150},[144,16951,16869],{"class":259},[144,16953,1199],{"class":150},[144,16955,1222],{"class":154},[144,16957,16959],{"class":146,"line":16958},96,[144,16960,2217],{"class":154},[144,16962,16964],{"class":146,"line":16963},97,[144,16965,1595],{"class":154},[98,16967,16968],{"start":66},[101,16969,16970],{},[304,16971,16972],{},"练习案例2：点和圆的关系",[1162,16974,16975],{},[101,16976,16977],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[135,16979,16981],{"className":137,"code":16980,"language":139,"meta":30,"style":30},"#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",[141,16982,16983,16989,16999,17006,17013,17017,17021,17026,17060,17065,17081,17095,17099,17103,17110,17117,17121,17127,17131,17135,17139,17161,17184,17189,17203,17218,17222,17226,17232,17237,17242,17246,17272,17276,17306,17334,17362,17379,17383,17396,17400,17404,17408,17421,17425,17429,17437,17441,17445,17449,17454,17458,17469,17476,17485,17495,17506,17513,17526,17537,17547,17558,17565,17579,17584,17594,17602],{"__ignoreMap":30},[144,16984,16985,16987],{"class":146,"line":147},[144,16986,1979],{"class":150},[144,16988,1982],{"class":259},[144,16990,16991,16993,16995,16997],{"class":146,"line":66},[144,16992,1987],{"class":150},[144,16994,1990],{"class":150},[144,16996,1994],{"class":1993},[144,16998,1321],{"class":154},[144,17000,17001,17003],{"class":146,"line":1210},[144,17002,1979],{"class":150},[144,17004,17005],{"class":259},"\u003Ccmath>\n",[144,17007,17008,17010],{"class":146,"line":1225},[144,17009,14725],{"class":150},[144,17011,17012],{"class":1993}," Point\n",[144,17014,17015],{"class":146,"line":1231},[144,17016,1576],{"class":154},[144,17018,17019],{"class":146,"line":1245},[144,17020,14747],{"class":150},[144,17022,17023],{"class":146,"line":1251},[144,17024,17025],{"class":213},"    \u002F\u002F赋值\n",[144,17027,17028,17030,17033,17035,17037,17040,17042,17044,17047,17050,17052,17055,17057],{"class":146,"line":1342},[144,17029,14940],{"class":150},[144,17031,17032],{"class":1993}," setPoint",[144,17034,155],{"class":154},[144,17036,14068],{"class":150},[144,17038,17039],{"class":5247}," x",[144,17041,12466],{"class":154},[144,17043,14068],{"class":150},[144,17045,17046],{"class":5247}," y",[144,17048,17049],{"class":154},") { m_x ",[144,17051,200],{"class":150},[144,17053,17054],{"class":154}," x; m_y ",[144,17056,200],{"class":150},[144,17058,17059],{"class":154}," y; }\n",[144,17061,17062],{"class":146,"line":1348},[144,17063,17064],{"class":213},"    \u002F\u002F获取坐标\n",[144,17066,17067,17069,17072,17075,17078],{"class":146,"line":1360},[144,17068,14769],{"class":150},[144,17070,17071],{"class":1993}," getX",[144,17073,17074],{"class":154},"() { ",[144,17076,17077],{"class":150},"return",[144,17079,17080],{"class":154}," m_x; }\n",[144,17082,17083,17085,17088,17090,17092],{"class":146,"line":1642},[144,17084,14769],{"class":150},[144,17086,17087],{"class":1993}," getY",[144,17089,17074],{"class":154},[144,17091,17077],{"class":150},[144,17093,17094],{"class":154}," m_y; }\n",[144,17096,17097],{"class":146,"line":1647},[144,17098,2430],{"emptyLinePlaceholder":72},[144,17100,17101],{"class":146,"line":1653},[144,17102,15253],{"class":150},[144,17104,17105,17107],{"class":146,"line":1658},[144,17106,14769],{"class":150},[144,17108,17109],{"class":154}," m_x;\n",[144,17111,17112,17114],{"class":146,"line":1672},[144,17113,14769],{"class":150},[144,17115,17116],{"class":154}," m_y;\n",[144,17118,17119],{"class":146,"line":1677},[144,17120,4025],{"class":154},[144,17122,17123,17125],{"class":146,"line":1683},[144,17124,14725],{"class":150},[144,17126,14728],{"class":1993},[144,17128,17129],{"class":146,"line":1704},[144,17130,1576],{"class":154},[144,17132,17133],{"class":146,"line":1709},[144,17134,14747],{"class":150},[144,17136,17137],{"class":146,"line":1723},[144,17138,17025],{"class":213},[144,17140,17141,17143,17146,17148,17150,17153,17156,17158],{"class":146,"line":1728},[144,17142,14940],{"class":150},[144,17144,17145],{"class":1993}," setRadius",[144,17147,155],{"class":154},[144,17149,14068],{"class":150},[144,17151,17152],{"class":5247}," r",[144,17154,17155],{"class":154},") { m_r ",[144,17157,200],{"class":150},[144,17159,17160],{"class":154}," r; }\n",[144,17162,17163,17165,17168,17170,17173,17176,17179,17181],{"class":146,"line":1757},[144,17164,14940],{"class":150},[144,17166,17167],{"class":1993}," setCenter",[144,17169,155],{"class":154},[144,17171,17172],{"class":1993},"Point",[144,17174,17175],{"class":5247}," center",[144,17177,17178],{"class":154},") { m_center ",[144,17180,200],{"class":150},[144,17182,17183],{"class":154}," center; }\n",[144,17185,17186],{"class":146,"line":1762},[144,17187,17188],{"class":213},"    \u002F\u002F获取属性\n",[144,17190,17191,17193,17196,17198,17200],{"class":146,"line":1779},[144,17192,14769],{"class":150},[144,17194,17195],{"class":1993}," getRadius",[144,17197,17074],{"class":154},[144,17199,17077],{"class":150},[144,17201,17202],{"class":154}," m_r; }\n",[144,17204,17205,17208,17211,17213,17215],{"class":146,"line":1784},[144,17206,17207],{"class":1993},"    Point",[144,17209,17210],{"class":1993}," getCenter",[144,17212,17074],{"class":154},[144,17214,17077],{"class":150},[144,17216,17217],{"class":154}," m_center; }\n",[144,17219,17220],{"class":146,"line":1789},[144,17221,2430],{"emptyLinePlaceholder":72},[144,17223,17224],{"class":146,"line":1794},[144,17225,15253],{"class":150},[144,17227,17228,17230],{"class":146,"line":1808},[144,17229,14769],{"class":150},[144,17231,14759],{"class":154},[144,17233,17234],{"class":146,"line":1813},[144,17235,17236],{"class":213},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[144,17238,17239],{"class":146,"line":2607},[144,17240,17241],{"class":154},"    Point m_center;\n",[144,17243,17244],{"class":146,"line":2621},[144,17245,4025],{"class":154},[144,17247,17248,17250,17253,17255,17258,17260,17262,17264,17266,17268,17270],{"class":146,"line":2629},[144,17249,5395],{"class":150},[144,17251,17252],{"class":1993}," isInCircle",[144,17254,155],{"class":154},[144,17256,17257],{"class":1993},"Circle",[144,17259,10615],{"class":150},[144,17261,443],{"class":5247},[144,17263,533],{"class":154},[144,17265,17172],{"class":1993},[144,17267,10615],{"class":150},[144,17269,14],{"class":5247},[144,17271,161],{"class":154},[144,17273,17274],{"class":146,"line":2634},[144,17275,1576],{"class":154},[144,17277,17278,17280,17283,17285,17287,17290,17293,17296,17298,17300,17302,17304],{"class":146,"line":2640},[144,17279,14769],{"class":150},[144,17281,17282],{"class":154}," dx ",[144,17284,200],{"class":150},[144,17286,16373],{"class":154},[144,17288,17289],{"class":1993},"getCenter",[144,17291,17292],{"class":154},"().",[144,17294,17295],{"class":1993},"getX",[144,17297,13081],{"class":154},[144,17299,687],{"class":150},[144,17301,15919],{"class":154},[144,17303,17295],{"class":1993},[144,17305,5667],{"class":154},[144,17307,17308,17310,17313,17315,17317,17319,17321,17324,17326,17328,17330,17332],{"class":146,"line":2646},[144,17309,14769],{"class":150},[144,17311,17312],{"class":154}," dy ",[144,17314,200],{"class":150},[144,17316,16373],{"class":154},[144,17318,17289],{"class":1993},[144,17320,17292],{"class":154},[144,17322,17323],{"class":1993},"getY",[144,17325,13081],{"class":154},[144,17327,687],{"class":150},[144,17329,15919],{"class":154},[144,17331,17323],{"class":1993},[144,17333,5667],{"class":154},[144,17335,17336,17338,17341,17343,17346,17349,17351,17353,17355,17357,17359],{"class":146,"line":2651},[144,17337,14769],{"class":150},[144,17339,17340],{"class":154}," distance ",[144,17342,200],{"class":150},[144,17344,17345],{"class":1993}," sqrt",[144,17347,17348],{"class":154},"(dx ",[144,17350,610],{"class":150},[144,17352,17282],{"class":154},[144,17354,636],{"class":150},[144,17356,17312],{"class":154},[144,17358,610],{"class":150},[144,17360,17361],{"class":154}," dy);\n",[144,17363,17364,17366,17369,17371,17373,17376],{"class":146,"line":7979},[144,17365,3131],{"class":150},[144,17367,17368],{"class":154}," (distance ",[144,17370,1065],{"class":150},[144,17372,16373],{"class":154},[144,17374,17375],{"class":1993},"getRadius",[144,17377,17378],{"class":154},"())\n",[144,17380,17381],{"class":146,"line":8003},[144,17382,2060],{"class":154},[144,17384,17385,17387,17389,17392,17394],{"class":146,"line":8008},[144,17386,9700],{"class":154},[144,17388,1199],{"class":150},[144,17390,17391],{"class":259}," \"点在圆内\"",[144,17393,1475],{"class":150},[144,17395,8871],{"class":154},[144,17397,17398],{"class":146,"line":8014},[144,17399,2217],{"class":154},[144,17401,17402],{"class":146,"line":8041},[144,17403,16854],{"class":150},[144,17405,17406],{"class":146,"line":8046},[144,17407,2060],{"class":154},[144,17409,17410,17412,17414,17417,17419],{"class":146,"line":8052},[144,17411,9700],{"class":154},[144,17413,1199],{"class":150},[144,17415,17416],{"class":259}," \"点在圆外\"",[144,17418,1475],{"class":150},[144,17420,8871],{"class":154},[144,17422,17423],{"class":146,"line":8064},[144,17424,2217],{"class":154},[144,17426,17427],{"class":146,"line":8076},[144,17428,1595],{"class":154},[144,17430,17431,17433,17435],{"class":146,"line":8088},[144,17432,158],{"class":150},[144,17434,2003],{"class":1993},[144,17436,2006],{"class":154},[144,17438,17439],{"class":146,"line":9747},[144,17440,1576],{"class":154},[144,17442,17443],{"class":146,"line":9772},[144,17444,15084],{"class":213},[144,17446,17447],{"class":146,"line":9795},[144,17448,14831],{"class":154},[144,17450,17451],{"class":146,"line":9819},[144,17452,17453],{"class":154},"    Point p1;\n",[144,17455,17456],{"class":146,"line":9824},[144,17457,17025],{"class":213},[144,17459,17460,17462,17464,17467],{"class":146,"line":9829},[144,17461,1581],{"class":154},[144,17463,1199],{"class":150},[144,17465,17466],{"class":259},"\"请输入圆的半径：\"",[144,17468,1321],{"class":154},[144,17470,17471,17473],{"class":146,"line":9834},[144,17472,14769],{"class":150},[144,17474,17475],{"class":154}," r;\n",[144,17477,17478,17480,17482],{"class":146,"line":9843},[144,17479,2042],{"class":154},[144,17481,1460],{"class":150},[144,17483,17484],{"class":154},"r;\n",[144,17486,17487,17489,17492],{"class":146,"line":9848},[144,17488,16626],{"class":154},[144,17490,17491],{"class":1993},"setRadius",[144,17493,17494],{"class":154},"(r);\n",[144,17496,17497,17499,17501,17504],{"class":146,"line":9854},[144,17498,1581],{"class":154},[144,17500,1199],{"class":150},[144,17502,17503],{"class":259},"\"请输入圆心坐标：\"",[144,17505,1321],{"class":154},[144,17507,17508,17510],{"class":146,"line":9875},[144,17509,14769],{"class":150},[144,17511,17512],{"class":154}," x, y;\n",[144,17514,17515,17517,17519,17521,17523],{"class":146,"line":9881},[144,17516,2042],{"class":154},[144,17518,1460],{"class":150},[144,17520,975],{"class":154},[144,17522,1460],{"class":150},[144,17524,17525],{"class":154},"y;\n",[144,17527,17528,17531,17534],{"class":146,"line":9895},[144,17529,17530],{"class":154},"    p1.",[144,17532,17533],{"class":1993},"setPoint",[144,17535,17536],{"class":154},"(x, y);\n",[144,17538,17539,17541,17544],{"class":146,"line":9901},[144,17540,16626],{"class":154},[144,17542,17543],{"class":1993},"setCenter",[144,17545,17546],{"class":154},"(p1);\n",[144,17548,17549,17551,17553,17556],{"class":146,"line":9928},[144,17550,1581],{"class":154},[144,17552,1199],{"class":150},[144,17554,17555],{"class":259},"\"请输入测试点坐标：\"",[144,17557,1321],{"class":154},[144,17559,17560,17562],{"class":146,"line":9937},[144,17561,14769],{"class":150},[144,17563,17564],{"class":154}," x1, y1;\n",[144,17566,17567,17569,17571,17574,17576],{"class":146,"line":9943},[144,17568,2042],{"class":154},[144,17570,1460],{"class":150},[144,17572,17573],{"class":154},"x1",[144,17575,1460],{"class":150},[144,17577,17578],{"class":154},"y1;\n",[144,17580,17581],{"class":146,"line":9951},[144,17582,17583],{"class":154},"    Point p2;\n",[144,17585,17586,17589,17591],{"class":146,"line":9956},[144,17587,17588],{"class":154},"    p2.",[144,17590,17533],{"class":1993},[144,17592,17593],{"class":154},"(x1, y1);\n",[144,17595,17596,17599],{"class":146,"line":16635},[144,17597,17598],{"class":1993},"    isInCircle",[144,17600,17601],{"class":154},"(c1, p2);\n",[144,17603,17604],{"class":146,"line":16641},[144,17605,1595],{"class":154},[14,17607,17608],{},"在类中可以让另一个类作为本来的成员",[14,17610,17611],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,17613,17614],{},"创建point.h",[135,17616,17618],{"className":137,"code":17617,"language":139,"meta":30,"style":30},"#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",[141,17619,17620,17631,17637,17647,17653,17657,17662,17666,17670,17690,17694,17702,17710,17714,17718,17724,17730],{"__ignoreMap":30},[144,17621,17622,17625,17628],{"class":146,"line":147},[144,17623,17624],{"class":150},"#pragma",[144,17626,17627],{"class":1993}," once",[144,17629,17630],{"class":213}," \u002F\u002F防止头文件重复包含\n",[144,17632,17633,17635],{"class":146,"line":66},[144,17634,1979],{"class":150},[144,17636,1982],{"class":259},[144,17638,17639,17641,17643,17645],{"class":146,"line":1210},[144,17640,1987],{"class":150},[144,17642,1990],{"class":150},[144,17644,1994],{"class":1993},[144,17646,1321],{"class":154},[144,17648,17649,17651],{"class":146,"line":1225},[144,17650,14725],{"class":150},[144,17652,17012],{"class":1993},[144,17654,17655],{"class":146,"line":1231},[144,17656,1576],{"class":154},[144,17658,17659],{"class":146,"line":1245},[144,17660,17661],{"class":213},"\u002F\u002F做好声明与变量定义就可以\n",[144,17663,17664],{"class":146,"line":1251},[144,17665,14747],{"class":150},[144,17667,17668],{"class":146,"line":1342},[144,17669,17025],{"class":213},[144,17671,17672,17674,17676,17678,17680,17682,17684,17686,17688],{"class":146,"line":1348},[144,17673,14940],{"class":150},[144,17675,17032],{"class":1993},[144,17677,155],{"class":154},[144,17679,14068],{"class":150},[144,17681,17039],{"class":5247},[144,17683,12466],{"class":154},[144,17685,14068],{"class":150},[144,17687,17046],{"class":5247},[144,17689,2749],{"class":154},[144,17691,17692],{"class":146,"line":1360},[144,17693,17064],{"class":213},[144,17695,17696,17698,17700],{"class":146,"line":1642},[144,17697,14769],{"class":150},[144,17699,17071],{"class":1993},[144,17701,5667],{"class":154},[144,17703,17704,17706,17708],{"class":146,"line":1647},[144,17705,14769],{"class":150},[144,17707,17087],{"class":1993},[144,17709,5667],{"class":154},[144,17711,17712],{"class":146,"line":1653},[144,17713,2430],{"emptyLinePlaceholder":72},[144,17715,17716],{"class":146,"line":1658},[144,17717,15253],{"class":150},[144,17719,17720,17722],{"class":146,"line":1672},[144,17721,14769],{"class":150},[144,17723,17109],{"class":154},[144,17725,17726,17728],{"class":146,"line":1677},[144,17727,14769],{"class":150},[144,17729,17116],{"class":154},[144,17731,17732],{"class":146,"line":1683},[144,17733,4025],{"class":154},[14,17735,17736],{},"创建point.cpp",[135,17738,17740],{"className":137,"code":17739,"language":139,"meta":30,"style":30},"#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",[141,17741,17742,17749,17754,17788,17792,17808],{"__ignoreMap":30},[144,17743,17744,17746],{"class":146,"line":147},[144,17745,1979],{"class":150},[144,17747,17748],{"class":259},"\u003Cpoint.h>\n",[144,17750,17751],{"class":146,"line":66},[144,17752,17753],{"class":213},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[144,17755,17756,17758,17761,17764,17766,17768,17770,17772,17774,17776,17778,17780,17782,17784,17786],{"class":146,"line":1210},[144,17757,14940],{"class":150},[144,17759,17760],{"class":1993}," Point",[144,17762,17763],{"class":154},"::",[144,17765,17533],{"class":1993},[144,17767,155],{"class":154},[144,17769,14068],{"class":150},[144,17771,17039],{"class":5247},[144,17773,12466],{"class":154},[144,17775,14068],{"class":150},[144,17777,17046],{"class":5247},[144,17779,17049],{"class":154},[144,17781,200],{"class":150},[144,17783,17054],{"class":154},[144,17785,200],{"class":150},[144,17787,17059],{"class":154},[144,17789,17790],{"class":146,"line":1225},[144,17791,17064],{"class":213},[144,17793,17794,17796,17798,17800,17802,17804,17806],{"class":146,"line":1231},[144,17795,14769],{"class":150},[144,17797,17760],{"class":1993},[144,17799,17763],{"class":154},[144,17801,17295],{"class":1993},[144,17803,17074],{"class":154},[144,17805,17077],{"class":150},[144,17807,17080],{"class":154},[144,17809,17810,17812,17814,17816,17818,17820,17822],{"class":146,"line":1245},[144,17811,14769],{"class":150},[144,17813,17760],{"class":1993},[144,17815,17763],{"class":154},[144,17817,17323],{"class":1993},[144,17819,17074],{"class":154},[144,17821,17077],{"class":150},[144,17823,17094],{"class":154},[14,17825,17826],{},"创建circle.h",[135,17828,17830],{"className":137,"code":17829,"language":139,"meta":30,"style":30},"#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",[141,17831,17832,17839,17845,17855,17861,17867,17871,17875,17879,17893,17907,17911,17919,17927,17931,17935,17941,17945,17949],{"__ignoreMap":30},[144,17833,17834,17836],{"class":146,"line":147},[144,17835,17624],{"class":150},[144,17837,17838],{"class":1993}," once\n",[144,17840,17841,17843],{"class":146,"line":66},[144,17842,1979],{"class":150},[144,17844,1982],{"class":259},[144,17846,17847,17849,17851,17853],{"class":146,"line":1210},[144,17848,1987],{"class":150},[144,17850,1990],{"class":150},[144,17852,1994],{"class":1993},[144,17854,1321],{"class":154},[144,17856,17857,17859],{"class":146,"line":1225},[144,17858,1979],{"class":150},[144,17860,17748],{"class":259},[144,17862,17863,17865],{"class":146,"line":1231},[144,17864,14725],{"class":150},[144,17866,14728],{"class":1993},[144,17868,17869],{"class":146,"line":1245},[144,17870,1576],{"class":154},[144,17872,17873],{"class":146,"line":1251},[144,17874,14747],{"class":150},[144,17876,17877],{"class":146,"line":1342},[144,17878,17025],{"class":213},[144,17880,17881,17883,17885,17887,17889,17891],{"class":146,"line":1348},[144,17882,14940],{"class":150},[144,17884,17145],{"class":1993},[144,17886,155],{"class":154},[144,17888,14068],{"class":150},[144,17890,17152],{"class":5247},[144,17892,2749],{"class":154},[144,17894,17895,17897,17899,17901,17903,17905],{"class":146,"line":1360},[144,17896,14940],{"class":150},[144,17898,17167],{"class":1993},[144,17900,155],{"class":154},[144,17902,17172],{"class":1993},[144,17904,17175],{"class":5247},[144,17906,2749],{"class":154},[144,17908,17909],{"class":146,"line":1642},[144,17910,17188],{"class":213},[144,17912,17913,17915,17917],{"class":146,"line":1647},[144,17914,14769],{"class":150},[144,17916,17195],{"class":1993},[144,17918,5667],{"class":154},[144,17920,17921,17923,17925],{"class":146,"line":1653},[144,17922,17207],{"class":1993},[144,17924,17210],{"class":1993},[144,17926,5667],{"class":154},[144,17928,17929],{"class":146,"line":1658},[144,17930,2430],{"emptyLinePlaceholder":72},[144,17932,17933],{"class":146,"line":1672},[144,17934,15253],{"class":150},[144,17936,17937,17939],{"class":146,"line":1677},[144,17938,14769],{"class":150},[144,17940,14759],{"class":154},[144,17942,17943],{"class":146,"line":1683},[144,17944,17236],{"class":213},[144,17946,17947],{"class":146,"line":1704},[144,17948,17241],{"class":154},[144,17950,17951],{"class":146,"line":1709},[144,17952,4025],{"class":154},[14,17954,17955],{},"创建circle.cpp",[135,17957,17959],{"className":137,"code":17958,"language":139,"meta":30,"style":30},"#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",[141,17960,17961,17968,17991,18013,18018,18034],{"__ignoreMap":30},[144,17962,17963,17965],{"class":146,"line":147},[144,17964,1979],{"class":150},[144,17966,17967],{"class":259},"\u003Ccircle.h>\n",[144,17969,17970,17972,17975,17977,17979,17981,17983,17985,17987,17989],{"class":146,"line":66},[144,17971,5395],{"class":150},[144,17973,17974],{"class":1993}," Circle",[144,17976,17763],{"class":154},[144,17978,17491],{"class":1993},[144,17980,155],{"class":154},[144,17982,14068],{"class":150},[144,17984,17152],{"class":5247},[144,17986,17155],{"class":154},[144,17988,200],{"class":150},[144,17990,17160],{"class":154},[144,17992,17993,17995,17997,17999,18001,18003,18005,18007,18009,18011],{"class":146,"line":1210},[144,17994,5395],{"class":150},[144,17996,17974],{"class":1993},[144,17998,17763],{"class":154},[144,18000,17543],{"class":1993},[144,18002,155],{"class":154},[144,18004,17172],{"class":1993},[144,18006,17175],{"class":5247},[144,18008,17178],{"class":154},[144,18010,200],{"class":150},[144,18012,17183],{"class":154},[144,18014,18015],{"class":146,"line":1225},[144,18016,18017],{"class":213},"\u002F\u002F获取属性\n",[144,18019,18020,18022,18024,18026,18028,18030,18032],{"class":146,"line":1231},[144,18021,14068],{"class":150},[144,18023,17974],{"class":1993},[144,18025,17763],{"class":154},[144,18027,17375],{"class":1993},[144,18029,17074],{"class":154},[144,18031,17077],{"class":150},[144,18033,17202],{"class":154},[144,18035,18036,18038,18040,18042,18044,18046,18048],{"class":146,"line":1245},[144,18037,17172],{"class":1993},[144,18039,17974],{"class":1993},[144,18041,17763],{"class":154},[144,18043,17289],{"class":1993},[144,18045,17074],{"class":154},[144,18047,17077],{"class":150},[144,18049,17217],{"class":154},[14,18051,18052],{},"使用封装的类",[135,18054,18056],{"className":137,"code":18055,"language":139,"meta":30,"style":30},"#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",[141,18057,18058,18064,18074,18080,18086,18110,18114,18140,18166,18190,18204,18208,18220,18224,18228,18232,18244,18248,18252,18260,18264,18268,18272,18276,18280,18290,18296,18304,18312,18322,18328,18340,18348,18356,18366,18372,18384,18388,18396,18402],{"__ignoreMap":30},[144,18059,18060,18062],{"class":146,"line":147},[144,18061,1979],{"class":150},[144,18063,1982],{"class":259},[144,18065,18066,18068,18070,18072],{"class":146,"line":66},[144,18067,1987],{"class":150},[144,18069,1990],{"class":150},[144,18071,1994],{"class":1993},[144,18073,1321],{"class":154},[144,18075,18076,18078],{"class":146,"line":1210},[144,18077,1979],{"class":150},[144,18079,17967],{"class":259},[144,18081,18082,18084],{"class":146,"line":1225},[144,18083,1979],{"class":150},[144,18085,17748],{"class":259},[144,18087,18088,18090,18092,18094,18096,18098,18100,18102,18104,18106,18108],{"class":146,"line":1231},[144,18089,5395],{"class":150},[144,18091,17252],{"class":1993},[144,18093,155],{"class":154},[144,18095,17257],{"class":1993},[144,18097,10615],{"class":150},[144,18099,443],{"class":5247},[144,18101,533],{"class":154},[144,18103,17172],{"class":1993},[144,18105,10615],{"class":150},[144,18107,14],{"class":5247},[144,18109,161],{"class":154},[144,18111,18112],{"class":146,"line":1245},[144,18113,1576],{"class":154},[144,18115,18116,18118,18120,18122,18124,18126,18128,18130,18132,18134,18136,18138],{"class":146,"line":1251},[144,18117,14769],{"class":150},[144,18119,17282],{"class":154},[144,18121,200],{"class":150},[144,18123,16373],{"class":154},[144,18125,17289],{"class":1993},[144,18127,17292],{"class":154},[144,18129,17295],{"class":1993},[144,18131,13081],{"class":154},[144,18133,687],{"class":150},[144,18135,15919],{"class":154},[144,18137,17295],{"class":1993},[144,18139,5667],{"class":154},[144,18141,18142,18144,18146,18148,18150,18152,18154,18156,18158,18160,18162,18164],{"class":146,"line":1342},[144,18143,14769],{"class":150},[144,18145,17312],{"class":154},[144,18147,200],{"class":150},[144,18149,16373],{"class":154},[144,18151,17289],{"class":1993},[144,18153,17292],{"class":154},[144,18155,17323],{"class":1993},[144,18157,13081],{"class":154},[144,18159,687],{"class":150},[144,18161,15919],{"class":154},[144,18163,17323],{"class":1993},[144,18165,5667],{"class":154},[144,18167,18168,18170,18172,18174,18176,18178,18180,18182,18184,18186,18188],{"class":146,"line":1348},[144,18169,14769],{"class":150},[144,18171,17340],{"class":154},[144,18173,200],{"class":150},[144,18175,17345],{"class":1993},[144,18177,17348],{"class":154},[144,18179,610],{"class":150},[144,18181,17282],{"class":154},[144,18183,636],{"class":150},[144,18185,17312],{"class":154},[144,18187,610],{"class":150},[144,18189,17361],{"class":154},[144,18191,18192,18194,18196,18198,18200,18202],{"class":146,"line":1360},[144,18193,3131],{"class":150},[144,18195,17368],{"class":154},[144,18197,1065],{"class":150},[144,18199,16373],{"class":154},[144,18201,17375],{"class":1993},[144,18203,17378],{"class":154},[144,18205,18206],{"class":146,"line":1642},[144,18207,2060],{"class":154},[144,18209,18210,18212,18214,18216,18218],{"class":146,"line":1647},[144,18211,9700],{"class":154},[144,18213,1199],{"class":150},[144,18215,17391],{"class":259},[144,18217,1475],{"class":150},[144,18219,8871],{"class":154},[144,18221,18222],{"class":146,"line":1653},[144,18223,2217],{"class":154},[144,18225,18226],{"class":146,"line":1658},[144,18227,16854],{"class":150},[144,18229,18230],{"class":146,"line":1672},[144,18231,2060],{"class":154},[144,18233,18234,18236,18238,18240,18242],{"class":146,"line":1677},[144,18235,9700],{"class":154},[144,18237,1199],{"class":150},[144,18239,17416],{"class":259},[144,18241,1475],{"class":150},[144,18243,8871],{"class":154},[144,18245,18246],{"class":146,"line":1683},[144,18247,2217],{"class":154},[144,18249,18250],{"class":146,"line":1704},[144,18251,1595],{"class":154},[144,18253,18254,18256,18258],{"class":146,"line":1709},[144,18255,158],{"class":150},[144,18257,2003],{"class":1993},[144,18259,2006],{"class":154},[144,18261,18262],{"class":146,"line":1723},[144,18263,1576],{"class":154},[144,18265,18266],{"class":146,"line":1728},[144,18267,15084],{"class":213},[144,18269,18270],{"class":146,"line":1757},[144,18271,14831],{"class":154},[144,18273,18274],{"class":146,"line":1762},[144,18275,17453],{"class":154},[144,18277,18278],{"class":146,"line":1779},[144,18279,17025],{"class":213},[144,18281,18282,18284,18286,18288],{"class":146,"line":1784},[144,18283,1581],{"class":154},[144,18285,1199],{"class":150},[144,18287,17466],{"class":259},[144,18289,1321],{"class":154},[144,18291,18292,18294],{"class":146,"line":1789},[144,18293,14769],{"class":150},[144,18295,17475],{"class":154},[144,18297,18298,18300,18302],{"class":146,"line":1794},[144,18299,2042],{"class":154},[144,18301,1460],{"class":150},[144,18303,17484],{"class":154},[144,18305,18306,18308,18310],{"class":146,"line":1808},[144,18307,16626],{"class":154},[144,18309,17491],{"class":1993},[144,18311,17494],{"class":154},[144,18313,18314,18316,18318,18320],{"class":146,"line":1813},[144,18315,1581],{"class":154},[144,18317,1199],{"class":150},[144,18319,17503],{"class":259},[144,18321,1321],{"class":154},[144,18323,18324,18326],{"class":146,"line":2607},[144,18325,14769],{"class":150},[144,18327,17512],{"class":154},[144,18329,18330,18332,18334,18336,18338],{"class":146,"line":2621},[144,18331,2042],{"class":154},[144,18333,1460],{"class":150},[144,18335,975],{"class":154},[144,18337,1460],{"class":150},[144,18339,17525],{"class":154},[144,18341,18342,18344,18346],{"class":146,"line":2629},[144,18343,17530],{"class":154},[144,18345,17533],{"class":1993},[144,18347,17536],{"class":154},[144,18349,18350,18352,18354],{"class":146,"line":2634},[144,18351,16626],{"class":154},[144,18353,17543],{"class":1993},[144,18355,17546],{"class":154},[144,18357,18358,18360,18362,18364],{"class":146,"line":2640},[144,18359,1581],{"class":154},[144,18361,1199],{"class":150},[144,18363,17555],{"class":259},[144,18365,1321],{"class":154},[144,18367,18368,18370],{"class":146,"line":2646},[144,18369,14769],{"class":150},[144,18371,17564],{"class":154},[144,18373,18374,18376,18378,18380,18382],{"class":146,"line":2651},[144,18375,2042],{"class":154},[144,18377,1460],{"class":150},[144,18379,17573],{"class":154},[144,18381,1460],{"class":150},[144,18383,17578],{"class":154},[144,18385,18386],{"class":146,"line":7979},[144,18387,17583],{"class":154},[144,18389,18390,18392,18394],{"class":146,"line":8003},[144,18391,17588],{"class":154},[144,18393,17533],{"class":1993},[144,18395,17593],{"class":154},[144,18397,18398,18400],{"class":146,"line":8008},[144,18399,17598],{"class":1993},[144,18401,17601],{"class":154},[144,18403,18404],{"class":146,"line":8014},[144,18405,1595],{"class":154},[18,18407,18409],{"id":18408},"_82对象的初始化清理","8.2对象的初始化清理",[1162,18411,18412,18415],{},[101,18413,18414],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[101,18416,18417],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[115,18419,18421],{"id":18420},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,18423,18424,18425,18428],{},"对象的",[304,18426,18427],{},"初始化和清理","也是两个非常重要的安全问题",[14,18430,18431],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,18433,18434],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,18436,18437,18438,18441,18442,18445],{},"c++利用了",[304,18439,18440],{},"构造函数","和",[304,18443,18444],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,18447,18448,18449],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[304,18450,18451],{},"我们不提供构造和析构，编译器会提供",[14,18453,18454],{},[304,18455,18456],{},"编译器提供的构造函数和析构函数是空实现。",[1162,18458,18459,18462],{},[101,18460,18461],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[101,18463,18464,18465,18468],{},"析构函数：主要作用在于对象",[304,18466,18467],{},"销毁前","系统自动调用，执行一些清理工作。",[14,18470,18471,18474],{},[304,18472,18473],{},"构造函数语法：",[141,18475,18476],{},"类名(){}",[98,18478,18479,18482,18485,18488,18491],{},[101,18480,18481],{},"构造函数，没有返回值也不写void",[101,18483,18484],{},"函数名称与类名相同",[101,18486,18487],{},"构造函数可以有参数，因此可以发生重载",[101,18489,18490],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[101,18492,18493,18494,584],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[141,18495,18496],{},"Person(){}",[14,18498,18499,13826,18502],{},[304,18500,18501],{},"析构函数语法：",[141,18503,18504],{},"~类名(){}",[98,18506,18507,18510,18513,18519],{},[101,18508,18509],{},"析构函数，没有返回值也不写void",[101,18511,18512],{},"函数名称与类名相同,在名称前加上符号  ~",[101,18514,18515,18516],{},"析构函数不可以有参数，因此",[304,18517,18518],{},"不可以发生重载",[101,18520,18521],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[135,18523,18525],{"className":137,"code":18524,"language":139,"meta":30,"style":30},"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",[141,18526,18527,18533,18537,18541,18546,18553,18557,18570,18574,18579,18586,18590,18603,18607,18611,18615,18619,18627,18631,18639,18643,18647,18655,18659,18664,18668,18675,18679,18692,18696,18704],{"__ignoreMap":30},[144,18528,18529,18531],{"class":146,"line":147},[144,18530,14725],{"class":150},[144,18532,15202],{"class":1993},[144,18534,18535],{"class":146,"line":66},[144,18536,1576],{"class":154},[144,18538,18539],{"class":146,"line":1210},[144,18540,14747],{"class":150},[144,18542,18543],{"class":146,"line":1225},[144,18544,18545],{"class":213},"    \u002F\u002F构造函数\n",[144,18547,18548,18551],{"class":146,"line":1231},[144,18549,18550],{"class":1993},"    Person",[144,18552,2006],{"class":154},[144,18554,18555],{"class":146,"line":1245},[144,18556,2060],{"class":154},[144,18558,18559,18561,18563,18566,18568],{"class":146,"line":1251},[144,18560,9700],{"class":154},[144,18562,1199],{"class":150},[144,18564,18565],{"class":259}," \"Person的构造函数调用\"",[144,18567,1475],{"class":150},[144,18569,8871],{"class":154},[144,18571,18572],{"class":146,"line":1342},[144,18573,2217],{"class":154},[144,18575,18576],{"class":146,"line":1348},[144,18577,18578],{"class":213},"    \u002F\u002F析构函数\n",[144,18580,18581,18584],{"class":146,"line":1360},[144,18582,18583],{"class":1993},"    ~Person",[144,18585,2006],{"class":154},[144,18587,18588],{"class":146,"line":1642},[144,18589,2060],{"class":154},[144,18591,18592,18594,18596,18599,18601],{"class":146,"line":1647},[144,18593,9700],{"class":154},[144,18595,1199],{"class":150},[144,18597,18598],{"class":259}," \"Person的析构函数调用\"",[144,18600,1475],{"class":150},[144,18602,8871],{"class":154},[144,18604,18605],{"class":146,"line":1653},[144,18606,2217],{"class":154},[144,18608,18609],{"class":146,"line":1658},[144,18610,2430],{"emptyLinePlaceholder":72},[144,18612,18613],{"class":146,"line":1672},[144,18614,4025],{"class":154},[144,18616,18617],{"class":146,"line":1677},[144,18618,2430],{"emptyLinePlaceholder":72},[144,18620,18621,18623,18625],{"class":146,"line":1683},[144,18622,5395],{"class":150},[144,18624,5619],{"class":1993},[144,18626,2006],{"class":154},[144,18628,18629],{"class":146,"line":1704},[144,18630,1576],{"class":154},[144,18632,18633,18636],{"class":146,"line":1709},[144,18634,18635],{"class":154},"    Person p;",[144,18637,18638],{"class":213},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[144,18640,18641],{"class":146,"line":1723},[144,18642,1595],{"class":154},[144,18644,18645],{"class":146,"line":1728},[144,18646,2430],{"emptyLinePlaceholder":72},[144,18648,18649,18651,18653],{"class":146,"line":1757},[144,18650,158],{"class":150},[144,18652,2003],{"class":1993},[144,18654,10884],{"class":154},[144,18656,18657],{"class":146,"line":1762},[144,18658,13241],{"class":154},[144,18660,18661],{"class":146,"line":1779},[144,18662,18663],{"class":213},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[144,18665,18666],{"class":146,"line":1784},[144,18667,2430],{"emptyLinePlaceholder":72},[144,18669,18670,18672],{"class":146,"line":1789},[144,18671,18635],{"class":154},[144,18673,18674],{"class":213},"\u002F\u002F只有构造函数\n",[144,18676,18677],{"class":146,"line":1794},[144,18678,2430],{"emptyLinePlaceholder":72},[144,18680,18681,18683,18685,18687,18689],{"class":146,"line":1808},[144,18682,2333],{"class":1993},[144,18684,155],{"class":154},[144,18686,2338],{"class":259},[144,18688,5997],{"class":154},[144,18690,18691],{"class":213},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[144,18693,18694],{"class":146,"line":1813},[144,18695,2430],{"emptyLinePlaceholder":72},[144,18697,18698,18700,18702],{"class":146,"line":2607},[144,18699,4120],{"class":150},[144,18701,4123],{"class":203},[144,18703,1321],{"class":154},[144,18705,18706],{"class":146,"line":2621},[144,18707,1595],{"class":154},[14,18709,18710],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[115,18712,18714],{"id":18713},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,18716,18717],{},"两种分类方式：",[14,18719,18720],{},"​\t按参数分为： 有参构造和无参构造",[14,18722,18723],{},"​\t按类型分为： 普通构造和拷贝构造",[14,18725,18726],{},"三种调用方式：",[14,18728,18729],{},"​\t括号法",[14,18731,18732],{},"​\t显示法",[14,18734,18735],{},"​\t隐式转换法",[135,18737,18739],{"className":137,"code":18738,"language":139,"meta":30,"style":30},"#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",[141,18740,18741,18747,18757,18762,18767,18772,18777,18781,18789,18793,18797,18801,18807,18811,18824,18828,18840,18844,18853,18866,18870,18874,18880,18884,18897,18901,18906,18922,18926,18931,18940,18953,18957,18963,18967,18972,18980,18984,18989,18993,19001,19005,19010,19015,19020,19025,19030,19034,19039,19044,19049,19054,19058,19063,19068,19084,19096,19101,19105,19110,19115,19120,19124,19129,19143,19156,19160,19168,19172,19178,19184,19192],{"__ignoreMap":30},[144,18742,18743,18745],{"class":146,"line":147},[144,18744,1979],{"class":150},[144,18746,1982],{"class":259},[144,18748,18749,18751,18753,18755],{"class":146,"line":66},[144,18750,1987],{"class":150},[144,18752,1990],{"class":150},[144,18754,1994],{"class":1993},[144,18756,1321],{"class":154},[144,18758,18759],{"class":146,"line":1210},[144,18760,18761],{"class":213},"\u002F\u002F1.构造函数的分类及调用\n",[144,18763,18764],{"class":146,"line":1225},[144,18765,18766],{"class":213},"\u002F\u002F分类\n",[144,18768,18769],{"class":146,"line":1231},[144,18770,18771],{"class":213},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[144,18773,18774],{"class":146,"line":1245},[144,18775,18776],{"class":213},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[144,18778,18779],{"class":146,"line":1251},[144,18780,2430],{"emptyLinePlaceholder":72},[144,18782,18783,18785,18787],{"class":146,"line":1342},[144,18784,14725],{"class":150},[144,18786,15600],{"class":1993},[144,18788,2704],{"class":154},[144,18790,18791],{"class":146,"line":1348},[144,18792,1576],{"class":154},[144,18794,18795],{"class":146,"line":1360},[144,18796,14747],{"class":150},[144,18798,18799],{"class":146,"line":1642},[144,18800,18545],{"class":213},[144,18802,18803,18805],{"class":146,"line":1647},[144,18804,18550],{"class":1993},[144,18806,2006],{"class":154},[144,18808,18809],{"class":146,"line":1653},[144,18810,2060],{"class":154},[144,18812,18813,18815,18817,18820,18822],{"class":146,"line":1658},[144,18814,3481],{"class":154},[144,18816,1199],{"class":150},[144,18818,18819],{"class":259},"\"Person构造函数无参构造\"",[144,18821,1199],{"class":150},[144,18823,1222],{"class":154},[144,18825,18826],{"class":146,"line":1672},[144,18827,2217],{"class":154},[144,18829,18830,18832,18834,18836,18838],{"class":146,"line":1677},[144,18831,18550],{"class":1993},[144,18833,155],{"class":154},[144,18835,158],{"class":150},[144,18837,1429],{"class":5247},[144,18839,161],{"class":154},[144,18841,18842],{"class":146,"line":1683},[144,18843,2060],{"class":154},[144,18845,18846,18849,18851],{"class":146,"line":1704},[144,18847,18848],{"class":154},"        age",[144,18850,200],{"class":150},[144,18852,6228],{"class":154},[144,18854,18855,18857,18859,18862,18864],{"class":146,"line":1709},[144,18856,3481],{"class":154},[144,18858,1199],{"class":150},[144,18860,18861],{"class":259},"\"Person构造函数有参构造\"",[144,18863,1199],{"class":150},[144,18865,1222],{"class":154},[144,18867,18868],{"class":146,"line":1723},[144,18869,2217],{"class":154},[144,18871,18872],{"class":146,"line":1728},[144,18873,18578],{"class":213},[144,18875,18876,18878],{"class":146,"line":1757},[144,18877,18583],{"class":1993},[144,18879,2006],{"class":154},[144,18881,18882],{"class":146,"line":1762},[144,18883,2060],{"class":154},[144,18885,18886,18888,18890,18893,18895],{"class":146,"line":1779},[144,18887,3481],{"class":154},[144,18889,1199],{"class":150},[144,18891,18892],{"class":259},"\"Person析构函数被调用\"",[144,18894,1199],{"class":150},[144,18896,1222],{"class":154},[144,18898,18899],{"class":146,"line":1784},[144,18900,2217],{"class":154},[144,18902,18903],{"class":146,"line":1789},[144,18904,18905],{"class":213},"    \u002F\u002F拷贝构造函数\n",[144,18907,18908,18910,18912,18914,18916,18918,18920],{"class":146,"line":1794},[144,18909,18550],{"class":1993},[144,18911,155],{"class":154},[144,18913,6823],{"class":150},[144,18915,15600],{"class":1993},[144,18917,10615],{"class":150},[144,18919,14],{"class":5247},[144,18921,161],{"class":154},[144,18923,18924],{"class":146,"line":1808},[144,18925,2060],{"class":154},[144,18927,18928],{"class":146,"line":1813},[144,18929,18930],{"class":213},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[144,18932,18933,18935,18937],{"class":146,"line":2607},[144,18934,18848],{"class":154},[144,18936,200],{"class":150},[144,18938,18939],{"class":154},"p.age;\n",[144,18941,18942,18944,18946,18949,18951],{"class":146,"line":2621},[144,18943,3481],{"class":154},[144,18945,1199],{"class":150},[144,18947,18948],{"class":259},"\"Person拷贝构造函数被调用\"",[144,18950,1199],{"class":150},[144,18952,1222],{"class":154},[144,18954,18955],{"class":146,"line":2629},[144,18956,2217],{"class":154},[144,18958,18959,18961],{"class":146,"line":2634},[144,18960,2015],{"class":150},[144,18962,7828],{"class":154},[144,18964,18965],{"class":146,"line":2640},[144,18966,4025],{"class":154},[144,18968,18969],{"class":146,"line":2646},[144,18970,18971],{"class":213},"\u002F\u002F调用\n",[144,18973,18974,18976,18978],{"class":146,"line":2651},[144,18975,5395],{"class":150},[144,18977,5619],{"class":1993},[144,18979,2006],{"class":154},[144,18981,18982],{"class":146,"line":7979},[144,18983,1576],{"class":154},[144,18985,18986],{"class":146,"line":8003},[144,18987,18988],{"class":213},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[144,18990,18991],{"class":146,"line":8008},[144,18992,1595],{"class":154},[144,18994,18995,18997,18999],{"class":146,"line":8014},[144,18996,5395],{"class":150},[144,18998,5688],{"class":1993},[144,19000,2006],{"class":154},[144,19002,19003],{"class":146,"line":8041},[144,19004,1576],{"class":154},[144,19006,19007],{"class":146,"line":8046},[144,19008,19009],{"class":213},"    \u002F\u002F1.括号法\n",[144,19011,19012],{"class":146,"line":8052},[144,19013,19014],{"class":213},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[144,19016,19017],{"class":146,"line":8064},[144,19018,19019],{"class":213},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[144,19021,19022],{"class":146,"line":8076},[144,19023,19024],{"class":213},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[144,19026,19027],{"class":146,"line":8088},[144,19028,19029],{"class":213},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[144,19031,19032],{"class":146,"line":9747},[144,19033,2430],{"emptyLinePlaceholder":72},[144,19035,19036],{"class":146,"line":9772},[144,19037,19038],{"class":213},"    \u002F\u002F注意事项\n",[144,19040,19041],{"class":146,"line":9795},[144,19042,19043],{"class":213},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[144,19045,19046],{"class":146,"line":9819},[144,19047,19048],{"class":213},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[144,19050,19051],{"class":146,"line":9824},[144,19052,19053],{"class":213},"    \u002F\u002F Person p4();\n",[144,19055,19056],{"class":146,"line":9829},[144,19057,2430],{"emptyLinePlaceholder":72},[144,19059,19060],{"class":146,"line":9834},[144,19061,19062],{"class":213},"    \u002F\u002F2.显示法\n",[144,19064,19065],{"class":146,"line":9843},[144,19066,19067],{"class":154},"    Person p1;\n",[144,19069,19070,19073,19075,19078,19080,19082],{"class":146,"line":9848},[144,19071,19072],{"class":154},"    Person p2",[144,19074,200],{"class":150},[144,19076,19077],{"class":1993},"Person",[144,19079,155],{"class":154},[144,19081,601],{"class":203},[144,19083,2749],{"class":154},[144,19085,19086,19089,19091,19093],{"class":146,"line":9854},[144,19087,19088],{"class":154},"    Person p3",[144,19090,200],{"class":150},[144,19092,19077],{"class":1993},[144,19094,19095],{"class":154},"(p2);\n",[144,19097,19098],{"class":146,"line":9875},[144,19099,19100],{"class":213},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[144,19102,19103],{"class":146,"line":9881},[144,19104,2430],{"emptyLinePlaceholder":72},[144,19106,19107],{"class":146,"line":9895},[144,19108,19109],{"class":213},"    \u002F\u002F 注意事项2\n",[144,19111,19112],{"class":146,"line":9901},[144,19113,19114],{"class":213},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[144,19116,19117],{"class":146,"line":9928},[144,19118,19119],{"class":213},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[144,19121,19122],{"class":146,"line":9937},[144,19123,2430],{"emptyLinePlaceholder":72},[144,19125,19126],{"class":146,"line":9943},[144,19127,19128],{"class":213},"    \u002F\u002F3.隐士转换法\n",[144,19130,19131,19134,19136,19138,19140],{"class":146,"line":9951},[144,19132,19133],{"class":154},"    Person p4",[144,19135,200],{"class":150},[144,19137,601],{"class":203},[144,19139,210],{"class":154},[144,19141,19142],{"class":213},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[144,19144,19145,19148,19150,19153],{"class":146,"line":9956},[144,19146,19147],{"class":154},"    Person p5",[144,19149,200],{"class":150},[144,19151,19152],{"class":154},"p4;",[144,19154,19155],{"class":213}," \u002F\u002F 这里会调用拷贝构造函数\n",[144,19157,19158],{"class":146,"line":16635},[144,19159,1595],{"class":154},[144,19161,19162,19164,19166],{"class":146,"line":16641},[144,19163,158],{"class":150},[144,19165,2003],{"class":1993},[144,19167,2006],{"class":154},[144,19169,19170],{"class":146,"line":16664},[144,19171,1576],{"class":154},[144,19173,19174,19176],{"class":146,"line":16670},[144,19175,5664],{"class":1993},[144,19177,5667],{"class":154},[144,19179,19180,19182],{"class":146,"line":16693},[144,19181,5733],{"class":1993},[144,19183,5667],{"class":154},[144,19185,19186,19188,19190],{"class":146,"line":16707},[144,19187,4120],{"class":150},[144,19189,4123],{"class":203},[144,19191,1321],{"class":154},[144,19193,19194],{"class":146,"line":16727},[144,19195,1595],{"class":154},[14,19197,19198,19201],{},[304,19199,19200],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[115,19203,19205],{"id":19204},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19207,19208],{},"C++中拷贝构造函数调用时机通常有三种情况",[1162,19210,19211,19214,19217],{},[101,19212,19213],{},"使用一个已经创建完毕的对象来初始化一个新对象",[101,19215,19216],{},"值传递的方式给函数参数传值",[101,19218,19219],{},"以值方式返回局部对象",[135,19221,19223],{"className":137,"code":19222,"language":139,"meta":30,"style":30},"#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",[141,19224,19225,19231,19241,19245,19250,19254,19259,19264,19269,19275,19279,19283,19289,19293,19306,19310,19315,19327,19331,19339,19352,19356,19360,19376,19380,19389,19402,19406,19412,19416,19428,19432,19438,19442,19446,19454,19458,19471,19479,19497,19501,19506,19511,19526,19530,19543,19547,19555,19559,19563,19571,19575,19580,19589,19593,19597,19622,19632,19636,19644,19648,19659,19684,19688,19692,19696,19704,19708,19713,19718,19725,19730,19735,19740,19745,19749,19754,19758,19763,19767,19772,19777,19781,19785,19790,19795,19803],{"__ignoreMap":30},[144,19226,19227,19229],{"class":146,"line":147},[144,19228,1979],{"class":150},[144,19230,1982],{"class":259},[144,19232,19233,19235,19237,19239],{"class":146,"line":66},[144,19234,1987],{"class":150},[144,19236,1990],{"class":150},[144,19238,1994],{"class":1993},[144,19240,1321],{"class":154},[144,19242,19243],{"class":146,"line":1210},[144,19244,2430],{"emptyLinePlaceholder":72},[144,19246,19247],{"class":146,"line":1225},[144,19248,19249],{"class":213},"\u002F\u002F拷贝构造函数调用时机\n",[144,19251,19252],{"class":146,"line":1231},[144,19253,2430],{"emptyLinePlaceholder":72},[144,19255,19256],{"class":146,"line":1245},[144,19257,19258],{"class":213},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[144,19260,19261],{"class":146,"line":1251},[144,19262,19263],{"class":213},"\u002F\u002F2.值传递的方式给函数参数传值\n",[144,19265,19266],{"class":146,"line":1342},[144,19267,19268],{"class":213},"\u002F\u002F3.以值方式返回局部对象\n",[144,19270,19271,19273],{"class":146,"line":1348},[144,19272,14725],{"class":150},[144,19274,15202],{"class":1993},[144,19276,19277],{"class":146,"line":1360},[144,19278,1576],{"class":154},[144,19280,19281],{"class":146,"line":1642},[144,19282,14747],{"class":150},[144,19284,19285,19287],{"class":146,"line":1647},[144,19286,18550],{"class":1993},[144,19288,2006],{"class":154},[144,19290,19291],{"class":146,"line":1653},[144,19292,2060],{"class":154},[144,19294,19295,19297,19299,19302,19304],{"class":146,"line":1658},[144,19296,9700],{"class":154},[144,19298,1199],{"class":150},[144,19300,19301],{"class":259}," \"Person的默认构造函数调用\"",[144,19303,1475],{"class":150},[144,19305,8871],{"class":154},[144,19307,19308],{"class":146,"line":1672},[144,19309,2217],{"class":154},[144,19311,19312],{"class":146,"line":1677},[144,19313,19314],{"class":213},"    \u002F\u002F有参构造\n",[144,19316,19317,19319,19321,19323,19325],{"class":146,"line":1683},[144,19318,18550],{"class":1993},[144,19320,155],{"class":154},[144,19322,158],{"class":150},[144,19324,15720],{"class":5247},[144,19326,161],{"class":154},[144,19328,19329],{"class":146,"line":1704},[144,19330,2060],{"class":154},[144,19332,19333,19335,19337],{"class":146,"line":1709},[144,19334,15774],{"class":154},[144,19336,200],{"class":150},[144,19338,7828],{"class":154},[144,19340,19341,19343,19345,19348,19350],{"class":146,"line":1723},[144,19342,9700],{"class":154},[144,19344,1199],{"class":150},[144,19346,19347],{"class":259}," \"Person的有参构造函数调用\"",[144,19349,1475],{"class":150},[144,19351,8871],{"class":154},[144,19353,19354],{"class":146,"line":1728},[144,19355,2217],{"class":154},[144,19357,19358],{"class":146,"line":1757},[144,19359,18905],{"class":213},[144,19361,19362,19364,19366,19368,19370,19372,19374],{"class":146,"line":1762},[144,19363,18550],{"class":1993},[144,19365,155],{"class":154},[144,19367,6823],{"class":150},[144,19369,15600],{"class":1993},[144,19371,10615],{"class":150},[144,19373,14],{"class":5247},[144,19375,161],{"class":154},[144,19377,19378],{"class":146,"line":1779},[144,19379,2060],{"class":154},[144,19381,19382,19384,19386],{"class":146,"line":1784},[144,19383,15774],{"class":154},[144,19385,200],{"class":150},[144,19387,19388],{"class":154}," p.m_Age;\n",[144,19390,19391,19393,19395,19398,19400],{"class":146,"line":1789},[144,19392,9700],{"class":154},[144,19394,1199],{"class":150},[144,19396,19397],{"class":259}," \"Person的拷贝构造函数调用\"",[144,19399,1475],{"class":150},[144,19401,8871],{"class":154},[144,19403,19404],{"class":146,"line":1794},[144,19405,2217],{"class":154},[144,19407,19408,19410],{"class":146,"line":1808},[144,19409,18583],{"class":1993},[144,19411,2006],{"class":154},[144,19413,19414],{"class":146,"line":1813},[144,19415,2060],{"class":154},[144,19417,19418,19420,19422,19424,19426],{"class":146,"line":2607},[144,19419,9700],{"class":154},[144,19421,1199],{"class":150},[144,19423,18598],{"class":259},[144,19425,1475],{"class":150},[144,19427,8871],{"class":154},[144,19429,19430],{"class":146,"line":2621},[144,19431,2217],{"class":154},[144,19433,19434,19436],{"class":146,"line":2629},[144,19435,2015],{"class":150},[144,19437,15697],{"class":154},[144,19439,19440],{"class":146,"line":2634},[144,19441,4025],{"class":154},[144,19443,19444],{"class":146,"line":2640},[144,19445,19258],{"class":213},[144,19447,19448,19450,19452],{"class":146,"line":2646},[144,19449,5395],{"class":150},[144,19451,5619],{"class":1993},[144,19453,2006],{"class":154},[144,19455,19456],{"class":146,"line":2651},[144,19457,1576],{"class":154},[144,19459,19460,19463,19465,19467,19469],{"class":146,"line":7979},[144,19461,19462],{"class":154},"    Person ",[144,19464,7161],{"class":1993},[144,19466,155],{"class":154},[144,19468,855],{"class":203},[144,19470,2749],{"class":154},[144,19472,19473,19475,19477],{"class":146,"line":8003},[144,19474,19462],{"class":154},[144,19476,7064],{"class":1993},[144,19478,17546],{"class":154},[144,19480,19481,19483,19485,19488,19490,19493,19495],{"class":146,"line":8008},[144,19482,1581],{"class":154},[144,19484,1199],{"class":150},[144,19486,19487],{"class":259},"\"P2的年龄为：\"",[144,19489,1199],{"class":150},[144,19491,19492],{"class":154},"p2.m_Age",[144,19494,1199],{"class":150},[144,19496,1222],{"class":154},[144,19498,19499],{"class":146,"line":8014},[144,19500,1595],{"class":154},[144,19502,19503],{"class":146,"line":8041},[144,19504,19505],{"class":213},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[144,19507,19508],{"class":146,"line":8046},[144,19509,19510],{"class":213},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[144,19512,19513,19515,19518,19520,19522,19524],{"class":146,"line":8052},[144,19514,5395],{"class":150},[144,19516,19517],{"class":1993}," doWork",[144,19519,155],{"class":154},[144,19521,19077],{"class":1993},[144,19523,6856],{"class":5247},[144,19525,161],{"class":154},[144,19527,19528],{"class":146,"line":8064},[144,19529,1576],{"class":154},[144,19531,19532,19534,19536,19539,19541],{"class":146,"line":8076},[144,19533,6560],{"class":154},[144,19535,1199],{"class":150},[144,19537,19538],{"class":259}," \"doWork函数调用\"",[144,19540,1475],{"class":150},[144,19542,8871],{"class":154},[144,19544,19545],{"class":146,"line":8088},[144,19546,1595],{"class":154},[144,19548,19549,19551,19553],{"class":146,"line":9747},[144,19550,5395],{"class":150},[144,19552,5688],{"class":1993},[144,19554,2006],{"class":154},[144,19556,19557],{"class":146,"line":9772},[144,19558,1576],{"class":154},[144,19560,19561],{"class":146,"line":9795},[144,19562,15344],{"class":154},[144,19564,19565,19568],{"class":146,"line":9819},[144,19566,19567],{"class":1993},"    doWork",[144,19569,19570],{"class":154},"(p);\n",[144,19572,19573],{"class":146,"line":9824},[144,19574,1595],{"class":154},[144,19576,19577],{"class":146,"line":9829},[144,19578,19579],{"class":213},"\u002F\u002F 3.以值方式返回局部对象\n",[144,19581,19582,19584,19587],{"class":146,"line":9834},[144,19583,19077],{"class":1993},[144,19585,19586],{"class":1993}," doWork2",[144,19588,2006],{"class":154},[144,19590,19591],{"class":146,"line":9843},[144,19592,1576],{"class":154},[144,19594,19595],{"class":146,"line":9848},[144,19596,19067],{"class":154},[144,19598,19599,19601,19603,19605,19607,19609,19611,19613,19615,19617,19619],{"class":146,"line":9854},[144,19600,1581],{"class":154},[144,19602,1199],{"class":150},[144,19604,155],{"class":154},[144,19606,158],{"class":150},[144,19608,6549],{"class":150},[144,19610,584],{"class":154},[144,19612,508],{"class":150},[144,19614,7161],{"class":154},[144,19616,1199],{"class":150},[144,19618,1269],{"class":154},[144,19620,19621],{"class":213},"\u002F\u002F打印p1的地址\n",[144,19623,19624,19626,19629],{"class":146,"line":9875},[144,19625,4120],{"class":150},[144,19627,19628],{"class":154}," p1;",[144,19630,19631],{"class":213},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[144,19633,19634],{"class":146,"line":9881},[144,19635,1595],{"class":154},[144,19637,19638,19640,19642],{"class":146,"line":9895},[144,19639,5395],{"class":150},[144,19641,5760],{"class":1993},[144,19643,2006],{"class":154},[144,19645,19646],{"class":146,"line":9901},[144,19647,1576],{"class":154},[144,19649,19650,19653,19655,19657],{"class":146,"line":9928},[144,19651,19652],{"class":154},"    Person p ",[144,19654,200],{"class":150},[144,19656,19586],{"class":1993},[144,19658,5667],{"class":154},[144,19660,19661,19663,19665,19667,19669,19671,19673,19675,19677,19679,19681],{"class":146,"line":9937},[144,19662,1581],{"class":154},[144,19664,1199],{"class":150},[144,19666,155],{"class":154},[144,19668,158],{"class":150},[144,19670,6549],{"class":150},[144,19672,584],{"class":154},[144,19674,508],{"class":150},[144,19676,14],{"class":154},[144,19678,1199],{"class":150},[144,19680,1269],{"class":154},[144,19682,19683],{"class":213},"\u002F\u002F打印p的地址\n",[144,19685,19686],{"class":146,"line":9943},[144,19687,1595],{"class":154},[144,19689,19690],{"class":146,"line":9951},[144,19691,2430],{"emptyLinePlaceholder":72},[144,19693,19694],{"class":146,"line":9956},[144,19695,2430],{"emptyLinePlaceholder":72},[144,19697,19698,19700,19702],{"class":146,"line":16635},[144,19699,158],{"class":150},[144,19701,2003],{"class":1993},[144,19703,2006],{"class":154},[144,19705,19706],{"class":146,"line":16641},[144,19707,1576],{"class":154},[144,19709,19710],{"class":146,"line":16664},[144,19711,19712],{"class":213},"    \u002F\u002F test01();\n",[144,19714,19715],{"class":146,"line":16670},[144,19716,19717],{"class":213},"    \u002F\u002F test02();\n",[144,19719,19720,19723],{"class":146,"line":16693},[144,19721,19722],{"class":1993},"    test03",[144,19724,5667],{"class":154},[144,19726,19727],{"class":146,"line":16707},[144,19728,19729],{"class":213},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[144,19731,19732],{"class":146,"line":16727},[144,19733,19734],{"class":213},"\u002F\u002F 输出结果如下：\n",[144,19736,19737],{"class":146,"line":16733},[144,19738,19739],{"class":213},"\u002F\u002F Person的默认构造函数调用\n",[144,19741,19742],{"class":146,"line":16744},[144,19743,19744],{"class":213},"\u002F\u002F 0x7fffffffceec\n",[144,19746,19747],{"class":146,"line":16767},[144,19748,19744],{"class":213},[144,19750,19751],{"class":146,"line":16789},[144,19752,19753],{"class":213},"\u002F\u002F Person的析构函数调用\n",[144,19755,19756],{"class":146,"line":16794},[144,19757,2430],{"emptyLinePlaceholder":72},[144,19759,19760],{"class":146,"line":16800},[144,19761,19762],{"class":213},"\u002F\u002F 之前的输出结果如下：\n",[144,19764,19765],{"class":146,"line":16814},[144,19766,19739],{"class":213},[144,19768,19769],{"class":146,"line":16827},[144,19770,19771],{"class":213},"\u002F\u002F 地址\n",[144,19773,19774],{"class":146,"line":16832},[144,19775,19776],{"class":213},"\u002F\u002F Person的拷贝构造函数调用\n",[144,19778,19779],{"class":146,"line":16846},[144,19780,19753],{"class":213},[144,19782,19783],{"class":146,"line":16851},[144,19784,19771],{"class":213},[144,19786,19787],{"class":146,"line":16857},[144,19788,19789],{"class":213},"\u002F\u002F (这两次输出的地址也是不同的) \n",[144,19791,19792],{"class":146,"line":16862},[144,19793,19794],{"class":213},"\u002F\u002F Person的析构函数调用     \n",[144,19796,19797,19799,19801],{"class":146,"line":16876},[144,19798,4120],{"class":150},[144,19800,4123],{"class":203},[144,19802,1321],{"class":154},[144,19804,19805],{"class":146,"line":16881},[144,19806,1595],{"class":154},[14,19808,19809],{},"简化版理解",[135,19811,19813],{"className":137,"code":19812,"language":139,"meta":30,"style":30},"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",[141,19814,19815,19823,19827,19833,19846,19857,19861,19873,19886,19894,19898,19914,19927,19936,19940,19945,19951,19964,19968,19972,19979,19983,19987,19992,20000,20004,20020,20033,20046,20050,20055,20063,20067,20071,20076,20081,20097,20105,20112,20118,20122,20126,20131,20139,20143,20147,20170,20177,20181,20185,20193,20197,20207,20229,20233,20237,20241,20249,20253,20258,20263,20269,20273,20283,20287,20295],{"__ignoreMap":30},[144,19816,19817,19819,19821],{"class":146,"line":147},[144,19818,14725],{"class":150},[144,19820,15600],{"class":1993},[144,19822,15603],{"class":154},[144,19824,19825],{"class":146,"line":66},[144,19826,14747],{"class":150},[144,19828,19829,19831],{"class":146,"line":1210},[144,19830,18550],{"class":1993},[144,19832,10884],{"class":154},[144,19834,19835,19837,19839,19842,19844],{"class":146,"line":1225},[144,19836,9700],{"class":154},[144,19838,1199],{"class":150},[144,19840,19841],{"class":259}," \"无参构造函数!\"",[144,19843,1475],{"class":150},[144,19845,8871],{"class":154},[144,19847,19848,19851,19853,19855],{"class":146,"line":1231},[144,19849,19850],{"class":154},"        mAge ",[144,19852,200],{"class":150},[144,19854,4123],{"class":203},[144,19856,1321],{"class":154},[144,19858,19859],{"class":146,"line":1245},[144,19860,2217],{"class":154},[144,19862,19863,19865,19867,19869,19871],{"class":146,"line":1251},[144,19864,18550],{"class":1993},[144,19866,155],{"class":154},[144,19868,158],{"class":150},[144,19870,15720],{"class":5247},[144,19872,12473],{"class":154},[144,19874,19875,19877,19879,19882,19884],{"class":146,"line":1342},[144,19876,9700],{"class":154},[144,19878,1199],{"class":150},[144,19880,19881],{"class":259}," \"有参构造函数!\"",[144,19883,1475],{"class":150},[144,19885,8871],{"class":154},[144,19887,19888,19890,19892],{"class":146,"line":1348},[144,19889,19850],{"class":154},[144,19891,200],{"class":150},[144,19893,7828],{"class":154},[144,19895,19896],{"class":146,"line":1360},[144,19897,2217],{"class":154},[144,19899,19900,19902,19904,19906,19908,19910,19912],{"class":146,"line":1642},[144,19901,18550],{"class":1993},[144,19903,155],{"class":154},[144,19905,6823],{"class":150},[144,19907,15600],{"class":1993},[144,19909,508],{"class":150},[144,19911,6856],{"class":5247},[144,19913,12473],{"class":154},[144,19915,19916,19918,19920,19923,19925],{"class":146,"line":1647},[144,19917,9700],{"class":154},[144,19919,1199],{"class":150},[144,19921,19922],{"class":259}," \"拷贝构造函数!\"",[144,19924,1475],{"class":150},[144,19926,8871],{"class":154},[144,19928,19929,19931,19933],{"class":146,"line":1653},[144,19930,19850],{"class":154},[144,19932,200],{"class":150},[144,19934,19935],{"class":154}," p.mAge;\n",[144,19937,19938],{"class":146,"line":1658},[144,19939,2217],{"class":154},[144,19941,19942],{"class":146,"line":1672},[144,19943,19944],{"class":213},"    \u002F\u002F析构函数在释放内存之前调用\n",[144,19946,19947,19949],{"class":146,"line":1677},[144,19948,18583],{"class":1993},[144,19950,10884],{"class":154},[144,19952,19953,19955,19957,19960,19962],{"class":146,"line":1683},[144,19954,9700],{"class":154},[144,19956,1199],{"class":150},[144,19958,19959],{"class":259}," \"析构函数!\"",[144,19961,1475],{"class":150},[144,19963,8871],{"class":154},[144,19965,19966],{"class":146,"line":1704},[144,19967,2217],{"class":154},[144,19969,19970],{"class":146,"line":1709},[144,19971,14747],{"class":150},[144,19973,19974,19976],{"class":146,"line":1723},[144,19975,2015],{"class":150},[144,19977,19978],{"class":154}," mAge;\n",[144,19980,19981],{"class":146,"line":1728},[144,19982,4025],{"class":154},[144,19984,19985],{"class":146,"line":1757},[144,19986,2430],{"emptyLinePlaceholder":72},[144,19988,19989],{"class":146,"line":1762},[144,19990,19991],{"class":213},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[144,19993,19994,19996,19998],{"class":146,"line":1779},[144,19995,5395],{"class":150},[144,19997,5619],{"class":1993},[144,19999,10884],{"class":154},[144,20001,20002],{"class":146,"line":1784},[144,20003,2430],{"emptyLinePlaceholder":72},[144,20005,20006,20008,20011,20013,20015,20017],{"class":146,"line":1789},[144,20007,19462],{"class":154},[144,20009,20010],{"class":1993},"man",[144,20012,155],{"class":154},[144,20014,466],{"class":203},[144,20016,5997],{"class":154},[144,20018,20019],{"class":213}," \u002F\u002Fp对象已经创建完毕\n",[144,20021,20022,20024,20027,20030],{"class":146,"line":1794},[144,20023,19462],{"class":154},[144,20025,20026],{"class":1993},"newman",[144,20028,20029],{"class":154},"(man);",[144,20031,20032],{"class":213}," \u002F\u002F调用拷贝构造函数\n",[144,20034,20035,20038,20040,20043],{"class":146,"line":1808},[144,20036,20037],{"class":154},"    Person newman2 ",[144,20039,200],{"class":150},[144,20041,20042],{"class":154}," man;",[144,20044,20045],{"class":213}," \u002F\u002F拷贝构造\n",[144,20047,20048],{"class":146,"line":1813},[144,20049,2430],{"emptyLinePlaceholder":72},[144,20051,20052],{"class":146,"line":2607},[144,20053,20054],{"class":213},"    \u002F\u002FPerson newman3;\n",[144,20056,20057,20060],{"class":146,"line":2621},[144,20058,20059],{"class":213},"    \u002F\u002Fnewman3 = man;",[144,20061,20062],{"class":213}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[144,20064,20065],{"class":146,"line":2629},[144,20066,1595],{"class":154},[144,20068,20069],{"class":146,"line":2634},[144,20070,2430],{"emptyLinePlaceholder":72},[144,20072,20073],{"class":146,"line":2640},[144,20074,20075],{"class":213},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[144,20077,20078],{"class":146,"line":2646},[144,20079,20080],{"class":213},"\u002F\u002F相当于Person p1 = p;\n",[144,20082,20083,20085,20087,20089,20091,20094],{"class":146,"line":2651},[144,20084,5395],{"class":150},[144,20086,19517],{"class":1993},[144,20088,155],{"class":154},[144,20090,19077],{"class":1993},[144,20092,20093],{"class":5247}," p1",[144,20095,20096],{"class":154},") {}\n",[144,20098,20099,20101,20103],{"class":146,"line":7979},[144,20100,5395],{"class":150},[144,20102,5688],{"class":1993},[144,20104,10884],{"class":154},[144,20106,20107,20109],{"class":146,"line":8003},[144,20108,18635],{"class":154},[144,20110,20111],{"class":213}," \u002F\u002F无参构造函数\n",[144,20113,20114,20116],{"class":146,"line":8008},[144,20115,19567],{"class":1993},[144,20117,19570],{"class":154},[144,20119,20120],{"class":146,"line":8014},[144,20121,1595],{"class":154},[144,20123,20124],{"class":146,"line":8041},[144,20125,2430],{"emptyLinePlaceholder":72},[144,20127,20128],{"class":146,"line":8046},[144,20129,20130],{"class":213},"\u002F\u002F3. 以值方式返回局部对象\n",[144,20132,20133,20135,20137],{"class":146,"line":8052},[144,20134,19077],{"class":1993},[144,20136,19586],{"class":1993},[144,20138,2006],{"class":154},[144,20140,20141],{"class":146,"line":8064},[144,20142,1576],{"class":154},[144,20144,20145],{"class":146,"line":8076},[144,20146,19067],{"class":154},[144,20148,20149,20151,20153,20155,20157,20159,20161,20163,20166,20168],{"class":146,"line":8088},[144,20150,6560],{"class":154},[144,20152,1199],{"class":150},[144,20154,1688],{"class":154},[144,20156,158],{"class":150},[144,20158,6549],{"class":150},[144,20160,584],{"class":154},[144,20162,508],{"class":150},[144,20164,20165],{"class":154},"p1 ",[144,20167,1199],{"class":150},[144,20169,8871],{"class":154},[144,20171,20172,20174],{"class":146,"line":9747},[144,20173,4120],{"class":150},[144,20175,20176],{"class":154}," p1;\n",[144,20178,20179],{"class":146,"line":9772},[144,20180,1595],{"class":154},[144,20182,20183],{"class":146,"line":9795},[144,20184,2430],{"emptyLinePlaceholder":72},[144,20186,20187,20189,20191],{"class":146,"line":9819},[144,20188,5395],{"class":150},[144,20190,5760],{"class":1993},[144,20192,2006],{"class":154},[144,20194,20195],{"class":146,"line":9824},[144,20196,1576],{"class":154},[144,20198,20199,20201,20203,20205],{"class":146,"line":9829},[144,20200,19652],{"class":154},[144,20202,200],{"class":150},[144,20204,19586],{"class":1993},[144,20206,5667],{"class":154},[144,20208,20209,20211,20213,20215,20217,20219,20221,20223,20225,20227],{"class":146,"line":9834},[144,20210,6560],{"class":154},[144,20212,1199],{"class":150},[144,20214,1688],{"class":154},[144,20216,158],{"class":150},[144,20218,6549],{"class":150},[144,20220,584],{"class":154},[144,20222,508],{"class":150},[144,20224,11479],{"class":154},[144,20226,1199],{"class":150},[144,20228,8871],{"class":154},[144,20230,20231],{"class":146,"line":9843},[144,20232,1595],{"class":154},[144,20234,20235],{"class":146,"line":9848},[144,20236,2430],{"emptyLinePlaceholder":72},[144,20238,20239],{"class":146,"line":9854},[144,20240,2430],{"emptyLinePlaceholder":72},[144,20242,20243,20245,20247],{"class":146,"line":9875},[144,20244,158],{"class":150},[144,20246,2003],{"class":1993},[144,20248,10884],{"class":154},[144,20250,20251],{"class":146,"line":9881},[144,20252,2430],{"emptyLinePlaceholder":72},[144,20254,20255],{"class":146,"line":9895},[144,20256,20257],{"class":213},"    \u002F\u002Ftest01();\n",[144,20259,20260],{"class":146,"line":9901},[144,20261,20262],{"class":213},"    \u002F\u002Ftest02();\n",[144,20264,20265,20267],{"class":146,"line":9928},[144,20266,19722],{"class":1993},[144,20268,5667],{"class":154},[144,20270,20271],{"class":146,"line":9937},[144,20272,2430],{"emptyLinePlaceholder":72},[144,20274,20275,20277,20279,20281],{"class":146,"line":9943},[144,20276,2333],{"class":1993},[144,20278,155],{"class":154},[144,20280,2338],{"class":259},[144,20282,2749],{"class":154},[144,20284,20285],{"class":146,"line":9951},[144,20286,2430],{"emptyLinePlaceholder":72},[144,20288,20289,20291,20293],{"class":146,"line":9956},[144,20290,4120],{"class":150},[144,20292,4123],{"class":203},[144,20294,1321],{"class":154},[144,20296,20297],{"class":146,"line":16635},[144,20298,1595],{"class":154},[115,20300,20302],{"id":20301},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,20304,20305],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,20307,20308],{},"1．默认构造函数(无参，函数体为空)",[14,20310,20311],{},"2．默认析构函数(无参，函数体为空)",[14,20313,20314],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,20316,20317],{},"构造函数调用规则如下：",[1162,20319,20320,20323],{},[101,20321,20322],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[101,20324,20325],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[135,20327,20329],{"className":137,"code":20328,"language":139,"meta":30,"style":30},"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",[141,20330,20331,20339,20343,20348,20354,20366,20370,20375,20387,20396,20408,20412,20416,20432,20441,20453,20457,20461,20467,20479,20483,20487,20493,20497,20501,20509,20513,20525,20530,20538,20542,20560,20564,20568,20576,20580,20585,20593,20608,20621,20625,20630,20637,20653,20666,20670,20674,20682,20686,20692,20696,20706,20710,20718],{"__ignoreMap":30},[144,20332,20333,20335,20337],{"class":146,"line":147},[144,20334,14725],{"class":150},[144,20336,15600],{"class":1993},[144,20338,15603],{"class":154},[144,20340,20341],{"class":146,"line":66},[144,20342,14747],{"class":150},[144,20344,20345],{"class":146,"line":1210},[144,20346,20347],{"class":213},"    \u002F\u002F无参（默认）构造函数\n",[144,20349,20350,20352],{"class":146,"line":1225},[144,20351,18550],{"class":1993},[144,20353,10884],{"class":154},[144,20355,20356,20358,20360,20362,20364],{"class":146,"line":1231},[144,20357,9700],{"class":154},[144,20359,1199],{"class":150},[144,20361,19841],{"class":259},[144,20363,1475],{"class":150},[144,20365,8871],{"class":154},[144,20367,20368],{"class":146,"line":1245},[144,20369,2217],{"class":154},[144,20371,20372],{"class":146,"line":1251},[144,20373,20374],{"class":213},"    \u002F\u002F有参构造函数\n",[144,20376,20377,20379,20381,20383,20385],{"class":146,"line":1342},[144,20378,18550],{"class":1993},[144,20380,155],{"class":154},[144,20382,158],{"class":150},[144,20384,1429],{"class":5247},[144,20386,12473],{"class":154},[144,20388,20389,20392,20394],{"class":146,"line":1348},[144,20390,20391],{"class":154},"        age ",[144,20393,200],{"class":150},[144,20395,1463],{"class":154},[144,20397,20398,20400,20402,20404,20406],{"class":146,"line":1360},[144,20399,9700],{"class":154},[144,20401,1199],{"class":150},[144,20403,19881],{"class":259},[144,20405,1475],{"class":150},[144,20407,8871],{"class":154},[144,20409,20410],{"class":146,"line":1642},[144,20411,2217],{"class":154},[144,20413,20414],{"class":146,"line":1647},[144,20415,18905],{"class":213},[144,20417,20418,20420,20422,20424,20426,20428,20430],{"class":146,"line":1653},[144,20419,18550],{"class":1993},[144,20421,155],{"class":154},[144,20423,6823],{"class":150},[144,20425,15600],{"class":1993},[144,20427,508],{"class":150},[144,20429,6856],{"class":5247},[144,20431,12473],{"class":154},[144,20433,20434,20436,20438],{"class":146,"line":1658},[144,20435,20391],{"class":154},[144,20437,200],{"class":150},[144,20439,20440],{"class":154}," p.age;\n",[144,20442,20443,20445,20447,20449,20451],{"class":146,"line":1672},[144,20444,9700],{"class":154},[144,20446,1199],{"class":150},[144,20448,19922],{"class":259},[144,20450,1475],{"class":150},[144,20452,8871],{"class":154},[144,20454,20455],{"class":146,"line":1677},[144,20456,2217],{"class":154},[144,20458,20459],{"class":146,"line":1683},[144,20460,18578],{"class":213},[144,20462,20463,20465],{"class":146,"line":1704},[144,20464,18583],{"class":1993},[144,20466,10884],{"class":154},[144,20468,20469,20471,20473,20475,20477],{"class":146,"line":1709},[144,20470,9700],{"class":154},[144,20472,1199],{"class":150},[144,20474,19959],{"class":259},[144,20476,1475],{"class":150},[144,20478,8871],{"class":154},[144,20480,20481],{"class":146,"line":1723},[144,20482,2217],{"class":154},[144,20484,20485],{"class":146,"line":1728},[144,20486,14747],{"class":150},[144,20488,20489,20491],{"class":146,"line":1757},[144,20490,2015],{"class":150},[144,20492,7828],{"class":154},[144,20494,20495],{"class":146,"line":1762},[144,20496,4025],{"class":154},[144,20498,20499],{"class":146,"line":1779},[144,20500,2430],{"emptyLinePlaceholder":72},[144,20502,20503,20505,20507],{"class":146,"line":1784},[144,20504,5395],{"class":150},[144,20506,5619],{"class":1993},[144,20508,2006],{"class":154},[144,20510,20511],{"class":146,"line":1789},[144,20512,1576],{"class":154},[144,20514,20515,20517,20519,20521,20523],{"class":146,"line":1794},[144,20516,19462],{"class":154},[144,20518,7161],{"class":1993},[144,20520,155],{"class":154},[144,20522,805],{"class":203},[144,20524,2749],{"class":154},[144,20526,20527],{"class":146,"line":1808},[144,20528,20529],{"class":213},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[144,20531,20532,20534,20536],{"class":146,"line":1813},[144,20533,19462],{"class":154},[144,20535,7064],{"class":1993},[144,20537,17546],{"class":154},[144,20539,20540],{"class":146,"line":2607},[144,20541,2430],{"emptyLinePlaceholder":72},[144,20543,20544,20546,20548,20551,20553,20556,20558],{"class":146,"line":2621},[144,20545,6560],{"class":154},[144,20547,1199],{"class":150},[144,20549,20550],{"class":259}," \"p2的年龄为： \"",[144,20552,1475],{"class":150},[144,20554,20555],{"class":154}," p2.age ",[144,20557,1199],{"class":150},[144,20559,8871],{"class":154},[144,20561,20562],{"class":146,"line":2629},[144,20563,1595],{"class":154},[144,20565,20566],{"class":146,"line":2634},[144,20567,2430],{"emptyLinePlaceholder":72},[144,20569,20570,20572,20574],{"class":146,"line":2640},[144,20571,5395],{"class":150},[144,20573,5688],{"class":1993},[144,20575,2006],{"class":154},[144,20577,20578],{"class":146,"line":2646},[144,20579,1576],{"class":154},[144,20581,20582],{"class":146,"line":2651},[144,20583,20584],{"class":213},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[144,20586,20587,20590],{"class":146,"line":7979},[144,20588,20589],{"class":154},"    Person p1;",[144,20591,20592],{"class":213}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[144,20594,20595,20597,20599,20601,20603,20605],{"class":146,"line":8003},[144,20596,19462],{"class":154},[144,20598,7064],{"class":1993},[144,20600,155],{"class":154},[144,20602,601],{"class":203},[144,20604,5997],{"class":154},[144,20606,20607],{"class":213}," \u002F\u002F用户提供的有参\n",[144,20609,20610,20612,20615,20618],{"class":146,"line":8008},[144,20611,19462],{"class":154},[144,20613,20614],{"class":1993},"p3",[144,20616,20617],{"class":154},"(p2);",[144,20619,20620],{"class":213}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[144,20622,20623],{"class":146,"line":8014},[144,20624,2430],{"emptyLinePlaceholder":72},[144,20626,20627],{"class":146,"line":8041},[144,20628,20629],{"class":213},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[144,20631,20632,20635],{"class":146,"line":8046},[144,20633,20634],{"class":154},"    Person p4;",[144,20636,20592],{"class":213},[144,20638,20639,20641,20644,20646,20648,20650],{"class":146,"line":8052},[144,20640,19462],{"class":154},[144,20642,20643],{"class":1993},"p5",[144,20645,155],{"class":154},[144,20647,601],{"class":203},[144,20649,5997],{"class":154},[144,20651,20652],{"class":213}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[144,20654,20655,20657,20660,20663],{"class":146,"line":8064},[144,20656,19462],{"class":154},[144,20658,20659],{"class":1993},"p6",[144,20661,20662],{"class":154},"(p5);",[144,20664,20665],{"class":213}," \u002F\u002F用户自己提供拷贝构造\n",[144,20667,20668],{"class":146,"line":8076},[144,20669,1595],{"class":154},[144,20671,20672],{"class":146,"line":8088},[144,20673,2430],{"emptyLinePlaceholder":72},[144,20675,20676,20678,20680],{"class":146,"line":9747},[144,20677,158],{"class":150},[144,20679,2003],{"class":1993},[144,20681,10884],{"class":154},[144,20683,20684],{"class":146,"line":9772},[144,20685,2430],{"emptyLinePlaceholder":72},[144,20687,20688,20690],{"class":146,"line":9795},[144,20689,5664],{"class":1993},[144,20691,5667],{"class":154},[144,20693,20694],{"class":146,"line":9819},[144,20695,2430],{"emptyLinePlaceholder":72},[144,20697,20698,20700,20702,20704],{"class":146,"line":9824},[144,20699,2333],{"class":1993},[144,20701,155],{"class":154},[144,20703,2338],{"class":259},[144,20705,2749],{"class":154},[144,20707,20708],{"class":146,"line":9829},[144,20709,2430],{"emptyLinePlaceholder":72},[144,20711,20712,20714,20716],{"class":146,"line":9834},[144,20713,4120],{"class":150},[144,20715,4123],{"class":203},[144,20717,1321],{"class":154},[144,20719,20720],{"class":146,"line":9843},[144,20721,1595],{"class":154},[115,20723,20725],{"id":20724},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,20727,20728],{},"浅拷贝：简单的赋值拷贝操作",[14,20730,20731],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[135,20733,20735],{"className":137,"code":20734,"language":139,"meta":30,"style":30},"#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",[141,20736,20737,20743,20753,20759,20763,20767,20772,20778,20782,20795,20799,20803,20810,20814,20824,20839,20852,20856,20861,20866,20882,20886,20899,20904,20909,20914,20923,20928,20943,20947,20951,20955,20961,20965,20970,20985,20989,21000,21014,21018,21027,21031,21037,21049,21053,21061,21065,21082,21113,21121,21149,21153,21157,21165,21169,21175],{"__ignoreMap":30},[144,20738,20739,20741],{"class":146,"line":147},[144,20740,1979],{"class":150},[144,20742,1982],{"class":259},[144,20744,20745,20747,20749,20751],{"class":146,"line":66},[144,20746,1987],{"class":150},[144,20748,1990],{"class":150},[144,20750,1994],{"class":1993},[144,20752,1321],{"class":154},[144,20754,20755,20757],{"class":146,"line":1210},[144,20756,14725],{"class":150},[144,20758,15202],{"class":1993},[144,20760,20761],{"class":146,"line":1225},[144,20762,1576],{"class":154},[144,20764,20765],{"class":146,"line":1231},[144,20766,14747],{"class":150},[144,20768,20769],{"class":146,"line":1245},[144,20770,20771],{"class":213},"    \u002F\u002F默认构造函数\n",[144,20773,20774,20776],{"class":146,"line":1251},[144,20775,18550],{"class":1993},[144,20777,2006],{"class":154},[144,20779,20780],{"class":146,"line":1342},[144,20781,2060],{"class":154},[144,20783,20784,20786,20788,20791,20793],{"class":146,"line":1348},[144,20785,3481],{"class":154},[144,20787,1199],{"class":150},[144,20789,20790],{"class":259},"\"默认构造函数\"",[144,20792,1199],{"class":150},[144,20794,1222],{"class":154},[144,20796,20797],{"class":146,"line":1360},[144,20798,2217],{"class":154},[144,20800,20801],{"class":146,"line":1642},[144,20802,20374],{"class":213},[144,20804,20805,20807],{"class":146,"line":1647},[144,20806,18583],{"class":1993},[144,20808,20809],{"class":154},"(int age,int height)\n",[144,20811,20812],{"class":146,"line":1653},[144,20813,2060],{"class":154},[144,20815,20816,20819,20821],{"class":146,"line":1658},[144,20817,20818],{"class":154},"        m_Age",[144,20820,200],{"class":150},[144,20822,20823],{"class":154},"age;\n",[144,20825,20826,20829,20831,20833,20836],{"class":146,"line":1672},[144,20827,20828],{"class":154},"        m_Height",[144,20830,11748],{"class":150},[144,20832,2412],{"class":150},[144,20834,20835],{"class":154},"(height);",[144,20837,20838],{"class":213},"\u002F\u002F放到堆区\n",[144,20840,20841,20843,20845,20848,20850],{"class":146,"line":1677},[144,20842,3481],{"class":154},[144,20844,1199],{"class":150},[144,20846,20847],{"class":259},"\"有参构造函数\"",[144,20849,1199],{"class":150},[144,20851,1222],{"class":154},[144,20853,20854],{"class":146,"line":1683},[144,20855,2217],{"class":154},[144,20857,20858],{"class":146,"line":1704},[144,20859,20860],{"class":213},"    \u002F\u002F深拷贝解决上述问题\n",[144,20862,20863],{"class":146,"line":1709},[144,20864,20865],{"class":213},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[144,20867,20868,20870,20872,20874,20876,20878,20880],{"class":146,"line":1723},[144,20869,18550],{"class":1993},[144,20871,155],{"class":154},[144,20873,6823],{"class":150},[144,20875,15600],{"class":1993},[144,20877,10615],{"class":150},[144,20879,14],{"class":5247},[144,20881,161],{"class":154},[144,20883,20884],{"class":146,"line":1728},[144,20885,2060],{"class":154},[144,20887,20888,20890,20892,20895,20897],{"class":146,"line":1757},[144,20889,3481],{"class":154},[144,20891,1199],{"class":150},[144,20893,20894],{"class":259},"\"拷贝构造函数\"",[144,20896,1199],{"class":150},[144,20898,1222],{"class":154},[144,20900,20901],{"class":146,"line":1762},[144,20902,20903],{"class":213},"        \u002F\u002F编译器默认的写如下注释部分\n",[144,20905,20906],{"class":146,"line":1779},[144,20907,20908],{"class":213},"        \u002F\u002Fm_Age=p.m_Age;\n",[144,20910,20911],{"class":146,"line":1784},[144,20912,20913],{"class":213},"        \u002F\u002Fm_Height=p.m_Height;\n",[144,20915,20916,20918,20920],{"class":146,"line":1789},[144,20917,20818],{"class":154},[144,20919,200],{"class":150},[144,20921,20922],{"class":154},"p.m_Age;\n",[144,20924,20925],{"class":146,"line":1794},[144,20926,20927],{"class":213},"        \u002F\u002F深拷贝操作\n",[144,20929,20930,20932,20934,20936,20938,20940],{"class":146,"line":1808},[144,20931,20828],{"class":154},[144,20933,11748],{"class":150},[144,20935,2412],{"class":150},[144,20937,155],{"class":154},[144,20939,610],{"class":150},[144,20941,20942],{"class":154},"p.m_Height);\n",[144,20944,20945],{"class":146,"line":1813},[144,20946,2217],{"class":154},[144,20948,20949],{"class":146,"line":2607},[144,20950,2430],{"emptyLinePlaceholder":72},[144,20952,20953],{"class":146,"line":2621},[144,20954,18578],{"class":213},[144,20956,20957,20959],{"class":146,"line":2629},[144,20958,18583],{"class":1993},[144,20960,2006],{"class":154},[144,20962,20963],{"class":146,"line":2634},[144,20964,2060],{"class":154},[144,20966,20967],{"class":146,"line":2640},[144,20968,20969],{"class":213},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[144,20971,20972,20974,20977,20980,20983],{"class":146,"line":2646},[144,20973,2527],{"class":150},[144,20975,20976],{"class":154},"(m_Height ",[144,20978,20979],{"class":150},"!=",[144,20981,20982],{"class":203}," NULL",[144,20984,161],{"class":154},[144,20986,20987],{"class":146,"line":2651},[144,20988,2540],{"class":154},[144,20990,20991,20994,20997],{"class":146,"line":7979},[144,20992,20993],{"class":150},"            delete",[144,20995,20996],{"class":154}," m_Height;",[144,20998,20999],{"class":213}," \u002F\u002F释放堆区内存\n",[144,21001,21002,21005,21007,21009,21011],{"class":146,"line":8003},[144,21003,21004],{"class":154},"            m_Height",[144,21006,200],{"class":150},[144,21008,2422],{"class":203},[144,21010,210],{"class":154},[144,21012,21013],{"class":213}," \u002F\u002F防止野指针\n",[144,21015,21016],{"class":146,"line":8008},[144,21017,2559],{"class":154},[144,21019,21020,21022,21024],{"class":146,"line":8014},[144,21021,3481],{"class":154},[144,21023,1199],{"class":150},[144,21025,21026],{"class":259},"\"Person的析构函数调用\"\n",[144,21028,21029],{"class":146,"line":8041},[144,21030,2217],{"class":154},[144,21032,21033,21035],{"class":146,"line":8046},[144,21034,2015],{"class":150},[144,21036,15697],{"class":154},[144,21038,21039,21041,21043,21046],{"class":146,"line":8052},[144,21040,2015],{"class":150},[144,21042,6549],{"class":150},[144,21044,21045],{"class":154},"m_Height;",[144,21047,21048],{"class":213}," \u002F\u002F定义一个指针，指向身高\n",[144,21050,21051],{"class":146,"line":8064},[144,21052,4025],{"class":154},[144,21054,21055,21057,21059],{"class":146,"line":8076},[144,21056,5395],{"class":150},[144,21058,5619],{"class":1993},[144,21060,2006],{"class":154},[144,21062,21063],{"class":146,"line":8088},[144,21064,1576],{"class":154},[144,21066,21067,21069,21071,21073,21075,21077,21080],{"class":146,"line":9747},[144,21068,19462],{"class":154},[144,21070,7161],{"class":1993},[144,21072,155],{"class":154},[144,21074,805],{"class":203},[144,21076,533],{"class":154},[144,21078,21079],{"class":203},"160",[144,21081,2749],{"class":154},[144,21083,21084,21086,21088,21091,21093,21096,21098,21101,21103,21106,21108,21110],{"class":146,"line":9772},[144,21085,1581],{"class":154},[144,21087,1199],{"class":150},[144,21089,21090],{"class":259},"\"p1的年龄为:\"",[144,21092,1199],{"class":150},[144,21094,21095],{"class":154},"p1.m_Age",[144,21097,1199],{"class":150},[144,21099,21100],{"class":259},"\"身高为：\"",[144,21102,6450],{"class":150},[144,21104,21105],{"class":154},"p1.m_Height",[144,21107,1199],{"class":150},[144,21109,1269],{"class":154},[144,21111,21112],{"class":213},"  \u002F\u002F18\n",[144,21114,21115,21117,21119],{"class":146,"line":9795},[144,21116,19462],{"class":154},[144,21118,7064],{"class":1993},[144,21120,17546],{"class":154},[144,21122,21123,21125,21127,21130,21132,21134,21136,21138,21140,21143,21145,21147],{"class":146,"line":9819},[144,21124,1581],{"class":154},[144,21126,1199],{"class":150},[144,21128,21129],{"class":259},"\"p2的年龄为：\"",[144,21131,1199],{"class":150},[144,21133,19492],{"class":154},[144,21135,1199],{"class":150},[144,21137,21100],{"class":259},[144,21139,6450],{"class":150},[144,21141,21142],{"class":154},"p2.m_Height",[144,21144,1199],{"class":150},[144,21146,1269],{"class":154},[144,21148,21112],{"class":213},[144,21150,21151],{"class":146,"line":9824},[144,21152,13241],{"class":154},[144,21154,21155],{"class":146,"line":9829},[144,21156,1595],{"class":154},[144,21158,21159,21161,21163],{"class":146,"line":9834},[144,21160,158],{"class":150},[144,21162,2003],{"class":1993},[144,21164,2006],{"class":154},[144,21166,21167],{"class":146,"line":9843},[144,21168,1576],{"class":154},[144,21170,21171,21173],{"class":146,"line":9848},[144,21172,5664],{"class":1993},[144,21174,5667],{"class":154},[144,21176,21177],{"class":146,"line":9854},[144,21178,1595],{"class":154},[14,21180,21181],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21183,21184],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21186,21187],{},[28,21188],{"alt":30,"src":21189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21191,21192],{},"浅拷贝问题要使用深拷贝来解决",[14,21194,21195],{},[28,21196],{"alt":30,"src":21197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21199,21200],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[115,21202,21204],{"id":21203},"_826初始化列表","8.2.6初始化列表",[14,21206,21207],{},"作用：初始化属性",[14,21209,5212],{},[135,21211,21214],{"className":21212,"code":21213,"language":5218},[5216],"构造函数():属性1(值1),属性2(值2).....{}\n",[141,21215,21213],{"__ignoreMap":30},[14,21217,21218],{},"例子",[135,21220,21222],{"className":137,"code":21221,"language":139,"meta":30,"style":30},"#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",[141,21223,21224,21230,21240,21246,21250,21255,21259,21264,21269,21274,21279,21284,21289,21293,21298,21303,21346,21355,21373,21391,21409,21413,21417,21424,21431,21438,21442,21446,21454,21458,21462,21482,21491,21495,21499,21509,21513,21521],{"__ignoreMap":30},[144,21225,21226,21228],{"class":146,"line":147},[144,21227,1979],{"class":150},[144,21229,1982],{"class":259},[144,21231,21232,21234,21236,21238],{"class":146,"line":66},[144,21233,1987],{"class":150},[144,21235,1990],{"class":150},[144,21237,1994],{"class":1993},[144,21239,1321],{"class":154},[144,21241,21242,21244],{"class":146,"line":1210},[144,21243,14725],{"class":150},[144,21245,15202],{"class":1993},[144,21247,21248],{"class":146,"line":1225},[144,21249,1576],{"class":154},[144,21251,21252],{"class":146,"line":1231},[144,21253,21254],{"class":150},"    public:\n",[144,21256,21257],{"class":146,"line":1245},[144,21258,2430],{"emptyLinePlaceholder":72},[144,21260,21261],{"class":146,"line":1251},[144,21262,21263],{"class":213},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[144,21265,21266],{"class":146,"line":1342},[144,21267,21268],{"class":213},"    \u002F\u002FPerson(int a, int b, int c) {\n",[144,21270,21271],{"class":146,"line":1348},[144,21272,21273],{"class":213},"    \u002F\u002F  m_A = a;\n",[144,21275,21276],{"class":146,"line":1360},[144,21277,21278],{"class":213},"    \u002F\u002F  m_B = b;\n",[144,21280,21281],{"class":146,"line":1642},[144,21282,21283],{"class":213},"    \u002F\u002F  m_C = c;\n",[144,21285,21286],{"class":146,"line":1647},[144,21287,21288],{"class":213},"    \u002F\u002F}\n",[144,21290,21291],{"class":146,"line":1653},[144,21292,2430],{"emptyLinePlaceholder":72},[144,21294,21295],{"class":146,"line":1658},[144,21296,21297],{"class":213},"    \u002F\u002F初始化列表方式初始化\n",[144,21299,21300],{"class":146,"line":1672},[144,21301,21302],{"class":213},"    \u002F\u002F使用有参构造函数\n",[144,21304,21305,21307,21309,21311,21313,21315,21317,21319,21321,21323,21325,21328,21331,21334,21337,21340,21343],{"class":146,"line":1677},[144,21306,18550],{"class":1993},[144,21308,155],{"class":154},[144,21310,158],{"class":150},[144,21312,1429],{"class":5247},[144,21314,12466],{"class":154},[144,21316,158],{"class":150},[144,21318,2863],{"class":5247},[144,21320,12466],{"class":154},[144,21322,158],{"class":150},[144,21324,2879],{"class":5247},[144,21326,21327],{"class":154},") :",[144,21329,21330],{"class":1993},"m_A",[144,21332,21333],{"class":154},"(a), ",[144,21335,21336],{"class":1993},"m_B",[144,21338,21339],{"class":154},"(b), ",[144,21341,21342],{"class":1993},"m_C",[144,21344,21345],{"class":154},"(c) {}\n",[144,21347,21348,21350,21353],{"class":146,"line":1683},[144,21349,14940],{"class":150},[144,21351,21352],{"class":1993}," PrintPerson",[144,21354,10884],{"class":154},[144,21356,21357,21359,21361,21364,21366,21369,21371],{"class":146,"line":1704},[144,21358,9700],{"class":154},[144,21360,1199],{"class":150},[144,21362,21363],{"class":259}," \"mA:\"",[144,21365,1475],{"class":150},[144,21367,21368],{"class":154}," m_A ",[144,21370,1199],{"class":150},[144,21372,8871],{"class":154},[144,21374,21375,21377,21379,21382,21384,21387,21389],{"class":146,"line":1709},[144,21376,9700],{"class":154},[144,21378,1199],{"class":150},[144,21380,21381],{"class":259}," \"mB:\"",[144,21383,1475],{"class":150},[144,21385,21386],{"class":154}," m_B ",[144,21388,1199],{"class":150},[144,21390,8871],{"class":154},[144,21392,21393,21395,21397,21400,21402,21405,21407],{"class":146,"line":1723},[144,21394,9700],{"class":154},[144,21396,1199],{"class":150},[144,21398,21399],{"class":259}," \"mC:\"",[144,21401,1475],{"class":150},[144,21403,21404],{"class":154}," m_C ",[144,21406,1199],{"class":150},[144,21408,8871],{"class":154},[144,21410,21411],{"class":146,"line":1728},[144,21412,2217],{"class":154},[144,21414,21415],{"class":146,"line":1757},[144,21416,15253],{"class":150},[144,21418,21419,21421],{"class":146,"line":1762},[144,21420,2015],{"class":150},[144,21422,21423],{"class":154}," m_A;\n",[144,21425,21426,21428],{"class":146,"line":1779},[144,21427,2015],{"class":150},[144,21429,21430],{"class":154}," m_B;\n",[144,21432,21433,21435],{"class":146,"line":1784},[144,21434,2015],{"class":150},[144,21436,21437],{"class":154}," m_C;\n",[144,21439,21440],{"class":146,"line":1789},[144,21441,4025],{"class":154},[144,21443,21444],{"class":146,"line":1794},[144,21445,2430],{"emptyLinePlaceholder":72},[144,21447,21448,21450,21452],{"class":146,"line":1808},[144,21449,158],{"class":150},[144,21451,2003],{"class":1993},[144,21453,6009],{"class":154},[144,21455,21456],{"class":146,"line":1813},[144,21457,1576],{"class":154},[144,21459,21460],{"class":146,"line":2607},[144,21461,2430],{"emptyLinePlaceholder":72},[144,21463,21464,21466,21468,21470,21472,21474,21476,21478,21480],{"class":146,"line":2621},[144,21465,19462],{"class":154},[144,21467,14],{"class":1993},[144,21469,155],{"class":154},[144,21471,372],{"class":203},[144,21473,12466],{"class":154},[144,21475,232],{"class":203},[144,21477,12466],{"class":154},[144,21479,226],{"class":203},[144,21481,2749],{"class":154},[144,21483,21484,21486,21489],{"class":146,"line":2629},[144,21485,15897],{"class":154},[144,21487,21488],{"class":1993},"PrintPerson",[144,21490,5667],{"class":154},[144,21492,21493],{"class":146,"line":2634},[144,21494,2430],{"emptyLinePlaceholder":72},[144,21496,21497],{"class":146,"line":2640},[144,21498,2430],{"emptyLinePlaceholder":72},[144,21500,21501,21503,21505,21507],{"class":146,"line":2646},[144,21502,2333],{"class":1993},[144,21504,155],{"class":154},[144,21506,2338],{"class":259},[144,21508,2749],{"class":154},[144,21510,21511],{"class":146,"line":2651},[144,21512,2430],{"emptyLinePlaceholder":72},[144,21514,21515,21517,21519],{"class":146,"line":7979},[144,21516,4120],{"class":150},[144,21518,4123],{"class":203},[144,21520,1321],{"class":154},[144,21522,21523],{"class":146,"line":8003},[144,21524,1595],{"class":154},[14,21526,21527,21528,21531,21532],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[304,21529,21530],{},"参数名就是定义的对象属性","，",[304,21533,21534],{},"属性后面的值为有参构造函数的形参",[135,21536,21538],{"className":137,"code":21537,"language":139,"meta":30,"style":30},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[141,21539,21540],{"__ignoreMap":30},[144,21541,21542,21544,21546,21548,21551,21553,21556,21558,21561,21563,21566,21568,21571,21573],{"class":146,"line":147},[144,21543,19077],{"class":1993},[144,21545,155],{"class":154},[144,21547,158],{"class":150},[144,21549,21550],{"class":154}," a.",[144,21552,158],{"class":150},[144,21554,21555],{"class":154}," b,",[144,21557,158],{"class":150},[144,21559,21560],{"class":154}," b):",[144,21562,21330],{"class":1993},[144,21564,21565],{"class":154},"(a),",[144,21567,21336],{"class":1993},[144,21569,21570],{"class":154},"(c),",[144,21572,21342],{"class":1993},[144,21574,21575],{"class":154},"(b) {}\n",[115,21577,21579],{"id":21578},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,21581,21582],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,21584,14664],{},[135,21586,21588],{"className":137,"code":21587,"language":139,"meta":30,"style":30},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[141,21589,21590,21595,21600,21604,21609,21613],{"__ignoreMap":30},[144,21591,21592],{"class":146,"line":147},[144,21593,21594],{"class":154},"A{};\n",[144,21596,21597],{"class":146,"line":66},[144,21598,21599],{"class":154},"B\n",[144,21601,21602],{"class":146,"line":1210},[144,21603,1576],{"class":154},[144,21605,21606],{"class":146,"line":1225},[144,21607,21608],{"class":154},"    A a;\n",[144,21610,21611],{"class":146,"line":1231},[144,21612,1595],{"class":154},[144,21614,21615],{"class":146,"line":1245},[144,21616,21617],{"class":213},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,21619,21620],{},"案例",[135,21622,21624],{"className":137,"code":21623,"language":139,"meta":30,"style":30},"\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",[141,21625,21626,21631,21638,21642,21647,21652,21666,21670,21680,21691,21695,21702,21706,21719,21723,21728,21733,21737,21743,21747,21751,21755,21786,21790,21801,21805,21811,21815,21828,21832,21836,21840,21845,21850,21854,21862,21866,21883,21902,21906,21914,21918,21924],{"__ignoreMap":30},[144,21627,21628],{"class":146,"line":147},[144,21629,21630],{"class":213},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[144,21632,21633,21635],{"class":146,"line":66},[144,21634,14725],{"class":150},[144,21636,21637],{"class":1993}," Phone\n",[144,21639,21640],{"class":146,"line":1210},[144,21641,1576],{"class":154},[144,21643,21644],{"class":146,"line":1225},[144,21645,21646],{"class":154},"public：\n",[144,21648,21649],{"class":146,"line":1231},[144,21650,21651],{"class":213},"    \u002F\u002F 赋值(构造函数)\n",[144,21653,21654,21657,21659,21661,21664],{"class":146,"line":1245},[144,21655,21656],{"class":1993},"    Phone",[144,21658,155],{"class":154},[144,21660,14948],{"class":1993},[144,21662,21663],{"class":5247}," pName",[144,21665,161],{"class":154},[144,21667,21668],{"class":146,"line":1251},[144,21669,2060],{"class":154},[144,21671,21672,21675,21677],{"class":146,"line":1342},[144,21673,21674],{"class":154},"        m_pName",[144,21676,200],{"class":150},[144,21678,21679],{"class":154},"pName;\n",[144,21681,21682,21684,21686,21689],{"class":146,"line":1348},[144,21683,3481],{"class":154},[144,21685,1199],{"class":150},[144,21687,21688],{"class":259},"\"Phone的构造函数调用\"",[144,21690,1321],{"class":154},[144,21692,21693],{"class":146,"line":1360},[144,21694,2217],{"class":154},[144,21696,21697,21700],{"class":146,"line":1642},[144,21698,21699],{"class":1993},"    ~Phone",[144,21701,2006],{"class":154},[144,21703,21704],{"class":146,"line":1647},[144,21705,2060],{"class":154},[144,21707,21708,21710,21712,21715,21717],{"class":146,"line":1653},[144,21709,3481],{"class":154},[144,21711,1199],{"class":150},[144,21713,21714],{"class":259},"\"Phone析构函数调用\"",[144,21716,1199],{"class":150},[144,21718,1222],{"class":154},[144,21720,21721],{"class":146,"line":1658},[144,21722,2217],{"class":154},[144,21724,21725],{"class":146,"line":1672},[144,21726,21727],{"class":213},"    \u002F\u002F\n",[144,21729,21730],{"class":146,"line":1677},[144,21731,21732],{"class":154},"    string m_PName;\n",[144,21734,21735],{"class":146,"line":1683},[144,21736,4025],{"class":154},[144,21738,21739,21741],{"class":146,"line":1704},[144,21740,14725],{"class":150},[144,21742,15202],{"class":1993},[144,21744,21745],{"class":146,"line":1709},[144,21746,1576],{"class":154},[144,21748,21749],{"class":146,"line":1723},[144,21750,14747],{"class":150},[144,21752,21753],{"class":146,"line":1728},[144,21754,17025],{"class":213},[144,21756,21757,21759,21761,21763,21765,21767,21769,21772,21775,21777,21780,21783],{"class":146,"line":1757},[144,21758,18550],{"class":1993},[144,21760,155],{"class":154},[144,21762,14948],{"class":1993},[144,21764,14951],{"class":5247},[144,21766,533],{"class":154},[144,21768,14948],{"class":1993},[144,21770,21771],{"class":5247}," pname",[144,21773,21774],{"class":154},"):",[144,21776,15041],{"class":1993},[144,21778,21779],{"class":154},"(name),m_phone.",[144,21781,21782],{"class":1993},"m_PName",[144,21784,21785],{"class":154},"(pname) \n",[144,21787,21788],{"class":146,"line":1762},[144,21789,2060],{"class":154},[144,21791,21792,21794,21796,21799],{"class":146,"line":1779},[144,21793,3481],{"class":154},[144,21795,1199],{"class":150},[144,21797,21798],{"class":259},"\"Person的构造函数调用\"",[144,21800,1321],{"class":154},[144,21802,21803],{"class":146,"line":1784},[144,21804,2217],{"class":154},[144,21806,21807,21809],{"class":146,"line":1789},[144,21808,18583],{"class":1993},[144,21810,2006],{"class":154},[144,21812,21813],{"class":146,"line":1794},[144,21814,2060],{"class":154},[144,21816,21817,21819,21821,21824,21826],{"class":146,"line":1808},[144,21818,3481],{"class":154},[144,21820,1199],{"class":150},[144,21822,21823],{"class":259},"\"Person析构函数调用\"",[144,21825,1199],{"class":150},[144,21827,1222],{"class":154},[144,21829,21830],{"class":146,"line":1813},[144,21831,2217],{"class":154},[144,21833,21834],{"class":146,"line":2607},[144,21835,7811],{"class":213},[144,21837,21838],{"class":146,"line":2621},[144,21839,14923],{"class":154},[144,21841,21842],{"class":146,"line":2629},[144,21843,21844],{"class":213},"    \u002F\u002F手机\n",[144,21846,21847],{"class":146,"line":2634},[144,21848,21849],{"class":154},"    Phone m_Phone;\n",[144,21851,21852],{"class":146,"line":2640},[144,21853,4025],{"class":154},[144,21855,21856,21858,21860],{"class":146,"line":2646},[144,21857,5395],{"class":150},[144,21859,5619],{"class":1993},[144,21861,2006],{"class":154},[144,21863,21864],{"class":146,"line":2651},[144,21865,1576],{"class":154},[144,21867,21868,21870,21872,21874,21876,21878,21881],{"class":146,"line":7979},[144,21869,19462],{"class":154},[144,21871,14],{"class":1993},[144,21873,155],{"class":154},[144,21875,7947],{"class":259},[144,21877,533],{"class":154},[144,21879,21880],{"class":259},"\"安卓\"",[144,21882,2749],{"class":154},[144,21884,21885,21887,21889,21892,21894,21897,21899],{"class":146,"line":8003},[144,21886,1581],{"class":154},[144,21888,1199],{"class":150},[144,21890,21891],{"class":154},"p.Name",[144,21893,1199],{"class":150},[144,21895,21896],{"class":259},"\"拿着：\"",[144,21898,1199],{"class":150},[144,21900,21901],{"class":154},"p.m_phone.m_PName;\n",[144,21903,21904],{"class":146,"line":8008},[144,21905,1595],{"class":154},[144,21907,21908,21910,21912],{"class":146,"line":8014},[144,21909,158],{"class":150},[144,21911,2003],{"class":1993},[144,21913,2006],{"class":154},[144,21915,21916],{"class":146,"line":8041},[144,21917,1576],{"class":154},[144,21919,21920,21922],{"class":146,"line":8046},[144,21921,5664],{"class":1993},[144,21923,5667],{"class":154},[144,21925,21926],{"class":146,"line":8052},[144,21927,1595],{"class":154},[14,21929,9056],{},[135,21931,21933],{"className":137,"code":21932,"language":139,"meta":30,"style":30},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[141,21934,21935,21940],{"__ignoreMap":30},[144,21936,21937],{"class":146,"line":147},[144,21938,21939],{"class":213},"    \u002F\u002F不需要写这个：\n",[144,21941,21942],{"class":146,"line":66},[144,21943,21944],{"class":213},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,21946,21947],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[135,21949,21951],{"className":137,"code":21950,"language":139,"meta":30,"style":30},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[141,21952,21953],{"__ignoreMap":30},[144,21954,21955,21957,21960,21962,21965,21968],{"class":146,"line":147},[144,21956,19077],{"class":1993},[144,21958,21959],{"class":154},"(string name.string pname):",[144,21961,15041],{"class":1993},[144,21963,21964],{"class":154},"(name),",[144,21966,21967],{"class":1993},"m_phone",[144,21969,21970],{"class":154},"(pname) {}\n",[14,21972,21973,21974,200,21977],{},"采用的是隐式转换法，实际为如下：\n",[141,21975,21976],{},"m_phone(pname)",[141,21978,21979],{},"Phone m_phone=pname",[14,21981,21982,21985],{},[304,21983,21984],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,21987,21988],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[115,21990,21992],{"id":21991},"_828静态对象","8.2.8静态对象",[14,21994,21995],{},"静态对象在成员对象前static，称为静态对象",[14,21997,21998],{},"静态对象分为两类：",[98,22000,22001],{},[101,22002,22003],{},"静态成员变量",[1162,22005,22006,22009,22012],{},[101,22007,22008],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[101,22010,22011],{},"②在编译阶段分配内存",[101,22013,22014],{},"③类内声明，类外初始化",[98,22016,22017],{"start":66},[101,22018,22019],{},"静态成员函数",[1162,22021,22022,22025],{},[101,22023,22024],{},"①所有对象共享同一个函数",[101,22026,22027],{},"②静态成员函数只能访问静态成员变量",[22029,22030,22032],"h4",{"id":22031},"_8281静态成员变量","8.2.8.1静态成员变量",[135,22034,22036],{"className":137,"code":22035,"language":139,"meta":30,"style":30},"#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",[141,22037,22038,22044,22054,22060,22064,22068,22073,22078,22083,22091,22095,22099,22103,22111,22115,22119,22124,22137,22141,22149,22153,22159],{"__ignoreMap":30},[144,22039,22040,22042],{"class":146,"line":147},[144,22041,1979],{"class":150},[144,22043,1982],{"class":259},[144,22045,22046,22048,22050,22052],{"class":146,"line":66},[144,22047,1987],{"class":150},[144,22049,1990],{"class":150},[144,22051,1994],{"class":1993},[144,22053,1321],{"class":154},[144,22055,22056,22058],{"class":146,"line":1210},[144,22057,14725],{"class":150},[144,22059,15202],{"class":1993},[144,22061,22062],{"class":146,"line":1225},[144,22063,1576],{"class":154},[144,22065,22066],{"class":146,"line":1231},[144,22067,14747],{"class":150},[144,22069,22070],{"class":146,"line":1245},[144,22071,22072],{"class":213},"    \u002F\u002F非静态成员变量\n",[144,22074,22075],{"class":146,"line":1251},[144,22076,22077],{"class":213},"    \u002F\u002F int m_A;\n",[144,22079,22080],{"class":146,"line":1342},[144,22081,22082],{"class":213},"    \u002F\u002F定义静态成员变量\n",[144,22084,22085,22087,22089],{"class":146,"line":1348},[144,22086,11051],{"class":150},[144,22088,2412],{"class":150},[144,22090,21423],{"class":154},[144,22092,22093],{"class":146,"line":1360},[144,22094,2430],{"emptyLinePlaceholder":72},[144,22096,22097],{"class":146,"line":1642},[144,22098,2430],{"emptyLinePlaceholder":72},[144,22100,22101],{"class":146,"line":1647},[144,22102,4025],{"class":154},[144,22104,22105,22107,22109],{"class":146,"line":1653},[144,22106,5395],{"class":150},[144,22108,5619],{"class":1993},[144,22110,2006],{"class":154},[144,22112,22113],{"class":146,"line":1658},[144,22114,1576],{"class":154},[144,22116,22117],{"class":146,"line":1672},[144,22118,15344],{"class":154},[144,22120,22121],{"class":146,"line":1677},[144,22122,22123],{"class":213},"    \u002F\u002F输出类成员变量这块内存\n",[144,22125,22126,22128,22130,22133,22135],{"class":146,"line":1683},[144,22127,1581],{"class":154},[144,22129,1199],{"class":150},[144,22131,22132],{"class":154},"p.m_A",[144,22134,1199],{"class":150},[144,22136,1222],{"class":154},[144,22138,22139],{"class":146,"line":1704},[144,22140,1595],{"class":154},[144,22142,22143,22145,22147],{"class":146,"line":1709},[144,22144,158],{"class":150},[144,22146,2003],{"class":1993},[144,22148,2006],{"class":154},[144,22150,22151],{"class":146,"line":1723},[144,22152,1576],{"class":154},[144,22154,22155,22157],{"class":146,"line":1728},[144,22156,5664],{"class":1993},[144,22158,2006],{"class":154},[144,22160,22161],{"class":146,"line":1757},[144,22162,1595],{"class":154},[14,22164,22165],{},"此时输出是报错的：无法解析外部命令",[14,22167,22168],{},"解决这一问题：必须用到类内声明，类外初始化操作",[135,22170,22172],{"className":137,"code":22171,"language":139,"meta":30,"style":30},"#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",[141,22173,22174,22180,22190,22196,22200,22204,22209,22217,22221,22226,22241,22249,22253,22257,22262,22267,22279,22284,22295,22300,22305,22318,22322,22330,22334,22340],{"__ignoreMap":30},[144,22175,22176,22178],{"class":146,"line":147},[144,22177,1979],{"class":150},[144,22179,1982],{"class":259},[144,22181,22182,22184,22186,22188],{"class":146,"line":66},[144,22183,1987],{"class":150},[144,22185,1990],{"class":150},[144,22187,1994],{"class":1993},[144,22189,1321],{"class":154},[144,22191,22192,22194],{"class":146,"line":1210},[144,22193,14725],{"class":150},[144,22195,15202],{"class":1993},[144,22197,22198],{"class":146,"line":1225},[144,22199,1576],{"class":154},[144,22201,22202],{"class":146,"line":1231},[144,22203,14747],{"class":150},[144,22205,22206],{"class":146,"line":1245},[144,22207,22208],{"class":213},"    \u002F\u002F类内声明\n",[144,22210,22211,22213,22215],{"class":146,"line":1251},[144,22212,11051],{"class":150},[144,22214,2412],{"class":150},[144,22216,21423],{"class":154},[144,22218,22219],{"class":146,"line":1342},[144,22220,4025],{"class":154},[144,22222,22223],{"class":146,"line":1348},[144,22224,22225],{"class":213},"\u002F\u002F类外初始化\n",[144,22227,22228,22230,22232,22235,22237,22239],{"class":146,"line":1360},[144,22229,158],{"class":150},[144,22231,15600],{"class":1993},[144,22233,22234],{"class":154},"::m_A",[144,22236,200],{"class":150},[144,22238,601],{"class":203},[144,22240,1321],{"class":154},[144,22242,22243,22245,22247],{"class":146,"line":1642},[144,22244,5395],{"class":150},[144,22246,5619],{"class":1993},[144,22248,2006],{"class":154},[144,22250,22251],{"class":146,"line":1647},[144,22252,1576],{"class":154},[144,22254,22255],{"class":146,"line":1653},[144,22256,15344],{"class":154},[144,22258,22259],{"class":146,"line":1658},[144,22260,22261],{"class":213},"    \u002F\u002F访问变量的原内存空间\n",[144,22263,22264],{"class":146,"line":1672},[144,22265,22266],{"class":213},"    \u002F\u002F100\n",[144,22268,22269,22271,22273,22275,22277],{"class":146,"line":1677},[144,22270,1581],{"class":154},[144,22272,1199],{"class":150},[144,22274,22132],{"class":154},[144,22276,1199],{"class":150},[144,22278,1222],{"class":154},[144,22280,22281],{"class":146,"line":1683},[144,22282,22283],{"class":154},"    Person p2;\n",[144,22285,22286,22289,22291,22293],{"class":146,"line":1704},[144,22287,22288],{"class":154},"    p2.m_A",[144,22290,200],{"class":150},[144,22292,1752],{"class":203},[144,22294,1321],{"class":154},[144,22296,22297],{"class":146,"line":1709},[144,22298,22299],{"class":213},"    \u002F\u002F继续访问这片空间\n",[144,22301,22302],{"class":146,"line":1723},[144,22303,22304],{"class":213},"    \u002F\u002F200\n",[144,22306,22307,22309,22311,22314,22316],{"class":146,"line":1728},[144,22308,1581],{"class":154},[144,22310,1199],{"class":150},[144,22312,22313],{"class":154},"p2.m_A",[144,22315,1199],{"class":150},[144,22317,1222],{"class":154},[144,22319,22320],{"class":146,"line":1757},[144,22321,1595],{"class":154},[144,22323,22324,22326,22328],{"class":146,"line":1762},[144,22325,158],{"class":150},[144,22327,2003],{"class":1993},[144,22329,2006],{"class":154},[144,22331,22332],{"class":146,"line":1779},[144,22333,1576],{"class":154},[144,22335,22336,22338],{"class":146,"line":1784},[144,22337,5664],{"class":1993},[144,22339,5667],{"class":154},[144,22341,22342],{"class":146,"line":1789},[144,22343,1595],{"class":154},[14,22345,22346],{},[304,22347,22348],{},"静态变量的访问",[135,22350,22352],{"className":137,"code":22351,"language":139,"meta":30,"style":30},"#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",[141,22353,22354,22360,22370,22376,22380,22384,22388,22396,22400,22405,22413,22417,22421,22435,22450,22458,22462,22467,22472,22477,22482,22494,22499,22504,22518,22535,22539,22547,22551,22557],{"__ignoreMap":30},[144,22355,22356,22358],{"class":146,"line":147},[144,22357,1979],{"class":150},[144,22359,1982],{"class":259},[144,22361,22362,22364,22366,22368],{"class":146,"line":66},[144,22363,1987],{"class":150},[144,22365,1990],{"class":150},[144,22367,1994],{"class":1993},[144,22369,1321],{"class":154},[144,22371,22372,22374],{"class":146,"line":1210},[144,22373,14725],{"class":150},[144,22375,15202],{"class":1993},[144,22377,22378],{"class":146,"line":1225},[144,22379,1576],{"class":154},[144,22381,22382],{"class":146,"line":1231},[144,22383,14747],{"class":150},[144,22385,22386],{"class":146,"line":1245},[144,22387,22208],{"class":213},[144,22389,22390,22392,22394],{"class":146,"line":1251},[144,22391,11051],{"class":150},[144,22393,2412],{"class":150},[144,22395,21423],{"class":154},[144,22397,22398],{"class":146,"line":1342},[144,22399,15253],{"class":150},[144,22401,22402],{"class":146,"line":1348},[144,22403,22404],{"class":213},"    \u002F\u002F静态成员变量也是有访问权限的\n",[144,22406,22407,22409,22411],{"class":146,"line":1360},[144,22408,11051],{"class":150},[144,22410,2412],{"class":150},[144,22412,21430],{"class":154},[144,22414,22415],{"class":146,"line":1642},[144,22416,4025],{"class":154},[144,22418,22419],{"class":146,"line":1647},[144,22420,22225],{"class":213},[144,22422,22423,22425,22427,22429,22431,22433],{"class":146,"line":1653},[144,22424,158],{"class":150},[144,22426,15600],{"class":1993},[144,22428,22234],{"class":154},[144,22430,200],{"class":150},[144,22432,601],{"class":203},[144,22434,1321],{"class":154},[144,22436,22437,22439,22441,22444,22446,22448],{"class":146,"line":1658},[144,22438,158],{"class":150},[144,22440,15600],{"class":1993},[144,22442,22443],{"class":154},"::m_B",[144,22445,200],{"class":150},[144,22447,855],{"class":203},[144,22449,1321],{"class":154},[144,22451,22452,22454,22456],{"class":146,"line":1672},[144,22453,5395],{"class":150},[144,22455,5688],{"class":1993},[144,22457,2006],{"class":154},[144,22459,22460],{"class":146,"line":1677},[144,22461,1576],{"class":154},[144,22463,22464],{"class":146,"line":1683},[144,22465,22466],{"class":213},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[144,22468,22469],{"class":146,"line":1704},[144,22470,22471],{"class":213},"    \u002F\u002F静态成员变量有两种访问方式：\n",[144,22473,22474],{"class":146,"line":1709},[144,22475,22476],{"class":213},"    \u002F\u002F1.通过对象进行访问\n",[144,22478,22479],{"class":146,"line":1723},[144,22480,22481],{"class":154},"    Person p;  \n",[144,22483,22484,22486,22488,22490,22492],{"class":146,"line":1728},[144,22485,1581],{"class":154},[144,22487,1199],{"class":150},[144,22489,22132],{"class":154},[144,22491,1199],{"class":150},[144,22493,1222],{"class":154},[144,22495,22496],{"class":146,"line":1757},[144,22497,22498],{"class":213},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[144,22500,22501],{"class":146,"line":1762},[144,22502,22503],{"class":213},"    \u002F\u002F2.通过类名进行访问\n",[144,22505,22506,22508,22510,22512,22514,22516],{"class":146,"line":1779},[144,22507,1581],{"class":154},[144,22509,1199],{"class":150},[144,22511,19077],{"class":1993},[144,22513,22234],{"class":154},[144,22515,1199],{"class":150},[144,22517,1222],{"class":154},[144,22519,22520,22522,22524,22526,22528,22530,22532],{"class":146,"line":1784},[144,22521,1581],{"class":154},[144,22523,1199],{"class":150},[144,22525,19077],{"class":1993},[144,22527,22443],{"class":154},[144,22529,1199],{"class":150},[144,22531,1269],{"class":154},[144,22533,22534],{"class":213}," \u002F\u002F没有访问权限，报错\n",[144,22536,22537],{"class":146,"line":1789},[144,22538,1595],{"class":154},[144,22540,22541,22543,22545],{"class":146,"line":1794},[144,22542,158],{"class":150},[144,22544,2003],{"class":1993},[144,22546,2006],{"class":154},[144,22548,22549],{"class":146,"line":1808},[144,22550,1576],{"class":154},[144,22552,22553,22555],{"class":146,"line":1813},[144,22554,5733],{"class":1993},[144,22556,5667],{"class":154},[144,22558,22559],{"class":146,"line":2607},[144,22560,1595],{"class":154},[22029,22562,22564],{"id":22563},"_8282静态成员函数","8.2.8.2静态成员函数",[14,22566,22567],{},"1.静态成员函数定义与访问",[135,22569,22571],{"className":137,"code":22570,"language":139,"meta":30,"style":30},"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",[141,22572,22573,22579,22583,22587,22592,22603,22607,22621,22625,22629,22637,22641,22646,22651,22655,22663,22668,22678],{"__ignoreMap":30},[144,22574,22575,22577],{"class":146,"line":147},[144,22576,14725],{"class":150},[144,22578,15202],{"class":1993},[144,22580,22581],{"class":146,"line":66},[144,22582,1576],{"class":154},[144,22584,22585],{"class":146,"line":1210},[144,22586,14747],{"class":150},[144,22588,22589],{"class":146,"line":1225},[144,22590,22591],{"class":213},"    \u002F\u002F在公共权限下定义静态成员函数\n",[144,22593,22594,22596,22599,22601],{"class":146,"line":1231},[144,22595,11051],{"class":150},[144,22597,22598],{"class":150}," void",[144,22600,11416],{"class":1993},[144,22602,2006],{"class":154},[144,22604,22605],{"class":146,"line":1245},[144,22606,2060],{"class":154},[144,22608,22609,22612,22614,22617,22619],{"class":146,"line":1251},[144,22610,22611],{"class":154},"        coout",[144,22613,1199],{"class":150},[144,22615,22616],{"class":259},"\"静态成员函数的调用\"",[144,22618,1199],{"class":150},[144,22620,1222],{"class":154},[144,22622,22623],{"class":146,"line":1342},[144,22624,2217],{"class":154},[144,22626,22627],{"class":146,"line":1348},[144,22628,4025],{"class":154},[144,22630,22631,22633,22635],{"class":146,"line":1360},[144,22632,5395],{"class":150},[144,22634,5619],{"class":1993},[144,22636,2006],{"class":154},[144,22638,22639],{"class":146,"line":1642},[144,22640,1576],{"class":154},[144,22642,22643],{"class":146,"line":1647},[144,22644,22645],{"class":213},"    \u002F\u002F静态成员函数的调用方式:\n",[144,22647,22648],{"class":146,"line":1653},[144,22649,22650],{"class":213},"    \u002F\u002F1.通过对象访问\n",[144,22652,22653],{"class":146,"line":1658},[144,22654,15344],{"class":154},[144,22656,22657,22659,22661],{"class":146,"line":1672},[144,22658,15897],{"class":154},[144,22660,11582],{"class":1993},[144,22662,5667],{"class":154},[144,22664,22665],{"class":146,"line":1677},[144,22666,22667],{"class":213},"    \u002F\u002F2.通过类名访问\n",[144,22669,22670,22672,22674,22676],{"class":146,"line":1683},[144,22671,18550],{"class":1993},[144,22673,17763],{"class":154},[144,22675,11582],{"class":1993},[144,22677,5667],{"class":154},[144,22679,22680],{"class":146,"line":1704},[144,22681,1595],{"class":154},[98,22683,22684],{"start":66},[101,22685,22686],{},"静态成员函数只能访问静态成员变量",[135,22688,22690],{"className":137,"code":22689,"language":139,"meta":30,"style":30},"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",[141,22691,22692,22698,22702,22706,22710,22720,22724,22738,22743,22755,22759,22770,22780,22784,22788,22792,22802,22806,22819,22823,22827,22831,22835,22849,22857,22861,22865,22869,22873,22881,22885,22895,22900,22904,22912,22916,22922],{"__ignoreMap":30},[144,22693,22694,22696],{"class":146,"line":147},[144,22695,14725],{"class":150},[144,22697,15202],{"class":1993},[144,22699,22700],{"class":146,"line":66},[144,22701,1576],{"class":154},[144,22703,22704],{"class":146,"line":1210},[144,22705,14747],{"class":150},[144,22707,22708],{"class":146,"line":1225},[144,22709,22591],{"class":213},[144,22711,22712,22714,22716,22718],{"class":146,"line":1231},[144,22713,11051],{"class":150},[144,22715,22598],{"class":150},[144,22717,11416],{"class":1993},[144,22719,2006],{"class":154},[144,22721,22722],{"class":146,"line":1245},[144,22723,2060],{"class":154},[144,22725,22726,22729,22731,22733,22735],{"class":146,"line":1251},[144,22727,22728],{"class":154},"        m_A",[144,22730,200],{"class":150},[144,22732,466],{"class":203},[144,22734,210],{"class":154},[144,22736,22737],{"class":213}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[144,22739,22740],{"class":146,"line":1342},[144,22741,22742],{"class":213},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[144,22744,22745,22747,22749,22751,22753],{"class":146,"line":1348},[144,22746,22611],{"class":154},[144,22748,1199],{"class":150},[144,22750,22616],{"class":259},[144,22752,1199],{"class":150},[144,22754,1222],{"class":154},[144,22756,22757],{"class":146,"line":1360},[144,22758,2217],{"class":154},[144,22760,22761,22763,22765,22767],{"class":146,"line":1642},[144,22762,11051],{"class":150},[144,22764,2412],{"class":150},[144,22766,15479],{"class":154},[144,22768,22769],{"class":213}," \u002F\u002F静态成员变量\n",[144,22771,22772,22774,22777],{"class":146,"line":1647},[144,22773,2015],{"class":150},[144,22775,22776],{"class":154}," m_B;",[144,22778,22779],{"class":213}," \u002F\u002F非静态成员变量\n",[144,22781,22782],{"class":146,"line":1653},[144,22783,2430],{"emptyLinePlaceholder":72},[144,22785,22786],{"class":146,"line":1658},[144,22787,15253],{"class":150},[144,22789,22790],{"class":146,"line":1672},[144,22791,22404],{"class":213},[144,22793,22794,22796,22798,22800],{"class":146,"line":1677},[144,22795,11051],{"class":150},[144,22797,22598],{"class":150},[144,22799,13649],{"class":1993},[144,22801,2006],{"class":154},[144,22803,22804],{"class":146,"line":1683},[144,22805,2060],{"class":154},[144,22807,22808,22810,22812,22815,22817],{"class":146,"line":1704},[144,22809,3481],{"class":154},[144,22811,1199],{"class":150},[144,22813,22814],{"class":259},"\"这是私有权限下的静态函数调用\"",[144,22816,1199],{"class":150},[144,22818,1222],{"class":154},[144,22820,22821],{"class":146,"line":1709},[144,22822,2217],{"class":154},[144,22824,22825],{"class":146,"line":1723},[144,22826,2430],{"emptyLinePlaceholder":72},[144,22828,22829],{"class":146,"line":1728},[144,22830,2430],{"emptyLinePlaceholder":72},[144,22832,22833],{"class":146,"line":1757},[144,22834,4025],{"class":154},[144,22836,22837,22839,22841,22843,22845,22847],{"class":146,"line":1762},[144,22838,158],{"class":150},[144,22840,15600],{"class":1993},[144,22842,22234],{"class":154},[144,22844,200],{"class":150},[144,22846,346],{"class":203},[144,22848,1321],{"class":154},[144,22850,22851,22853,22855],{"class":146,"line":1779},[144,22852,5395],{"class":150},[144,22854,5619],{"class":1993},[144,22856,2006],{"class":154},[144,22858,22859],{"class":146,"line":1784},[144,22860,1576],{"class":154},[144,22862,22863],{"class":146,"line":1789},[144,22864,22645],{"class":213},[144,22866,22867],{"class":146,"line":1794},[144,22868,22650],{"class":213},[144,22870,22871],{"class":146,"line":1808},[144,22872,15344],{"class":154},[144,22874,22875,22877,22879],{"class":146,"line":1813},[144,22876,15897],{"class":154},[144,22878,11582],{"class":1993},[144,22880,5667],{"class":154},[144,22882,22883],{"class":146,"line":2607},[144,22884,22667],{"class":213},[144,22886,22887,22889,22891,22893],{"class":146,"line":2621},[144,22888,18550],{"class":1993},[144,22890,17763],{"class":154},[144,22892,11582],{"class":1993},[144,22894,5667],{"class":154},[144,22896,22897],{"class":146,"line":2629},[144,22898,22899],{"class":213},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[144,22901,22902],{"class":146,"line":2634},[144,22903,1595],{"class":154},[144,22905,22906,22908,22910],{"class":146,"line":2640},[144,22907,158],{"class":150},[144,22909,2003],{"class":1993},[144,22911,2006],{"class":154},[144,22913,22914],{"class":146,"line":2646},[144,22915,1576],{"class":154},[144,22917,22918,22920],{"class":146,"line":2651},[144,22919,5664],{"class":1993},[144,22921,5667],{"class":154},[144,22923,22924],{"class":146,"line":7979},[144,22925,1595],{"class":154},[115,22927,22929],{"id":22928},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22029,22931,22933],{"id":22932},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,22935,22936],{},"在c++中，类内的成员变量和成员函数分开存储",[14,22938,22939],{},"只有非静态成员变量才属于类的对象上",[22941,22942,22944],"h5",{"id":22943},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[135,22946,22948],{"className":137,"code":22947,"language":139,"meta":30,"style":30},"#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",[141,22949,22950,22957,22967,22973,22977,22981,22985,22993,22997,23001,23024,23028,23036,23040,23046],{"__ignoreMap":30},[144,22951,22952,22954],{"class":146,"line":147},[144,22953,1979],{"class":150},[144,22955,22956],{"class":259},"\u003Ciostraem>\n",[144,22958,22959,22961,22963,22965],{"class":146,"line":66},[144,22960,1987],{"class":150},[144,22962,1990],{"class":150},[144,22964,1994],{"class":1993},[144,22966,1321],{"class":154},[144,22968,22969,22971],{"class":146,"line":1210},[144,22970,14725],{"class":150},[144,22972,15202],{"class":1993},[144,22974,22975],{"class":146,"line":1225},[144,22976,1576],{"class":154},[144,22978,22979],{"class":146,"line":1231},[144,22980,2430],{"emptyLinePlaceholder":72},[144,22982,22983],{"class":146,"line":1245},[144,22984,4025],{"class":154},[144,22986,22987,22989,22991],{"class":146,"line":1251},[144,22988,5395],{"class":150},[144,22990,5619],{"class":1993},[144,22992,2006],{"class":154},[144,22994,22995],{"class":146,"line":1342},[144,22996,1576],{"class":154},[144,22998,22999],{"class":146,"line":1348},[144,23000,15344],{"class":154},[144,23002,23003,23005,23007,23010,23012,23015,23017,23019,23021],{"class":146,"line":1360},[144,23004,1581],{"class":154},[144,23006,1199],{"class":150},[144,23008,23009],{"class":259},"\"size of p=\"",[144,23011,1199],{"class":150},[144,23013,23014],{"class":1993},"sizeoif",[144,23016,6570],{"class":154},[144,23018,1199],{"class":150},[144,23020,1269],{"class":154},[144,23022,23023],{"class":213}," \u002F\u002F查看这个空类的占用的内存空间\n",[144,23025,23026],{"class":146,"line":1642},[144,23027,1595],{"class":154},[144,23029,23030,23032,23034],{"class":146,"line":1647},[144,23031,158],{"class":150},[144,23033,2003],{"class":1993},[144,23035,2006],{"class":154},[144,23037,23038],{"class":146,"line":1653},[144,23039,1576],{"class":154},[144,23041,23042,23044],{"class":146,"line":1658},[144,23043,5664],{"class":1993},[144,23045,5667],{"class":154},[144,23047,23048],{"class":146,"line":1672},[144,23049,1595],{"class":154},[14,23051,23052],{},"输出结果为：size of p=1",[14,23054,23055],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23057,23058],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22941,23060,23062],{"id":23061},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[135,23064,23066],{"className":137,"code":23065,"language":139,"meta":30,"style":30},"#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",[141,23067,23068,23074,23084,23092,23096,23105,23109,23117,23121,23125,23144,23148,23152,23160,23164,23170],{"__ignoreMap":30},[144,23069,23070,23072],{"class":146,"line":147},[144,23071,1979],{"class":150},[144,23073,1982],{"class":259},[144,23075,23076,23078,23080,23082],{"class":146,"line":66},[144,23077,1987],{"class":150},[144,23079,1990],{"class":150},[144,23081,1994],{"class":1993},[144,23083,1321],{"class":154},[144,23085,23086,23088,23090],{"class":146,"line":1210},[144,23087,14725],{"class":150},[144,23089,15600],{"class":1993},[144,23091,2704],{"class":154},[144,23093,23094],{"class":146,"line":1225},[144,23095,1576],{"class":154},[144,23097,23098,23100,23102],{"class":146,"line":1231},[144,23099,2015],{"class":150},[144,23101,15479],{"class":154},[144,23103,23104],{"class":213},"\u002F\u002F非静态成员变量\n",[144,23106,23107],{"class":146,"line":1245},[144,23108,4025],{"class":154},[144,23110,23111,23113,23115],{"class":146,"line":1251},[144,23112,5395],{"class":150},[144,23114,5619],{"class":1993},[144,23116,2006],{"class":154},[144,23118,23119],{"class":146,"line":1342},[144,23120,1576],{"class":154},[144,23122,23123],{"class":146,"line":1348},[144,23124,15344],{"class":154},[144,23126,23127,23129,23131,23133,23135,23137,23139,23141],{"class":146,"line":1360},[144,23128,1581],{"class":154},[144,23130,1199],{"class":150},[144,23132,23009],{"class":259},[144,23134,1403],{"class":150},[144,23136,6570],{"class":154},[144,23138,1199],{"class":150},[144,23140,1269],{"class":154},[144,23142,23143],{"class":213}," \u002F\u002F查看不是空对象时占用多少内存\n",[144,23145,23146],{"class":146,"line":1642},[144,23147,2430],{"emptyLinePlaceholder":72},[144,23149,23150],{"class":146,"line":1647},[144,23151,1595],{"class":154},[144,23153,23154,23156,23158],{"class":146,"line":1653},[144,23155,158],{"class":150},[144,23157,2003],{"class":1993},[144,23159,2006],{"class":154},[144,23161,23162],{"class":146,"line":1658},[144,23163,1576],{"class":154},[144,23165,23166,23168],{"class":146,"line":1672},[144,23167,5664],{"class":1993},[144,23169,5667],{"class":154},[144,23171,23172],{"class":146,"line":1677},[144,23173,1595],{"class":154},[14,23175,23176],{},"输出结果：size of p=4",[14,23178,23179],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[98,23181,23182],{},[101,23183,23184],{},"如果加上非静态成员变量，Person类修改如下",[135,23186,23188],{"className":137,"code":23187,"language":139,"meta":30,"style":30},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[141,23189,23190,23196,23200,23206,23214,23218,23223],{"__ignoreMap":30},[144,23191,23192,23194],{"class":146,"line":147},[144,23193,14725],{"class":150},[144,23195,15202],{"class":1993},[144,23197,23198],{"class":146,"line":66},[144,23199,1576],{"class":154},[144,23201,23202,23204],{"class":146,"line":1210},[144,23203,2015],{"class":150},[144,23205,21423],{"class":154},[144,23207,23208,23210,23212],{"class":146,"line":1225},[144,23209,11051],{"class":150},[144,23211,2412],{"class":150},[144,23213,21430],{"class":154},[144,23215,23216],{"class":146,"line":1231},[144,23217,4025],{"class":154},[144,23219,23220],{"class":146,"line":1245},[144,23221,23222],{"class":213},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[144,23224,23225,23227,23229,23231,23233,23235],{"class":146,"line":1251},[144,23226,158],{"class":150},[144,23228,15600],{"class":1993},[144,23230,22443],{"class":154},[144,23232,200],{"class":150},[144,23234,346],{"class":203},[144,23236,1321],{"class":154},[14,23238,23239],{},"输出结果：4",[14,23241,23242],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[98,23244,23245],{"start":66},[101,23246,23247],{},"加上非静态成员函数",[135,23249,23251],{"className":137,"code":23250,"language":139,"meta":30,"style":30},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[141,23252,23253,23260,23264,23270,23278,23282,23286,23290],{"__ignoreMap":30},[144,23254,23255,23257],{"class":146,"line":147},[144,23256,14725],{"class":150},[144,23258,23259],{"class":1993},"  Person\n",[144,23261,23262],{"class":146,"line":66},[144,23263,1576],{"class":154},[144,23265,23266,23268],{"class":146,"line":1210},[144,23267,2015],{"class":150},[144,23269,21423],{"class":154},[144,23271,23272,23274,23276],{"class":146,"line":1225},[144,23273,14940],{"class":150},[144,23275,11416],{"class":1993},[144,23277,2006],{"class":154},[144,23279,23280],{"class":146,"line":1231},[144,23281,2060],{"class":154},[144,23283,23284],{"class":146,"line":1245},[144,23285,2430],{"emptyLinePlaceholder":72},[144,23287,23288],{"class":146,"line":1251},[144,23289,2217],{"class":154},[144,23291,23292],{"class":146,"line":1342},[144,23293,4025],{"class":154},[14,23295,23296],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[98,23298,23299],{"start":1210},[101,23300,23301],{},"加上静态成员函数",[135,23303,23305],{"className":137,"code":23304,"language":139,"meta":30,"style":30},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[141,23306,23307,23313,23317,23323,23331,23335,23339,23343,23354,23358,23362,23366],{"__ignoreMap":30},[144,23308,23309,23311],{"class":146,"line":147},[144,23310,14725],{"class":150},[144,23312,23259],{"class":1993},[144,23314,23315],{"class":146,"line":66},[144,23316,1576],{"class":154},[144,23318,23319,23321],{"class":146,"line":1210},[144,23320,2015],{"class":150},[144,23322,21423],{"class":154},[144,23324,23325,23327,23329],{"class":146,"line":1225},[144,23326,14940],{"class":150},[144,23328,11416],{"class":1993},[144,23330,2006],{"class":154},[144,23332,23333],{"class":146,"line":1231},[144,23334,2060],{"class":154},[144,23336,23337],{"class":146,"line":1245},[144,23338,2430],{"emptyLinePlaceholder":72},[144,23340,23341],{"class":146,"line":1251},[144,23342,2217],{"class":154},[144,23344,23345,23347,23349,23352],{"class":146,"line":1342},[144,23346,11051],{"class":150},[144,23348,22598],{"class":150},[144,23350,23351],{"class":1993}," func1",[144,23353,2006],{"class":154},[144,23355,23356],{"class":146,"line":1348},[144,23357,2060],{"class":154},[144,23359,23360],{"class":146,"line":1360},[144,23361,2430],{"emptyLinePlaceholder":72},[144,23363,23364],{"class":146,"line":1642},[144,23365,2217],{"class":154},[144,23367,23368],{"class":146,"line":1647},[144,23369,4025],{"class":154},[14,23371,23239],{},[14,23373,23374],{},"解释：静态成员函数也不属于类上",[5157,23376,7705],{},{"title":30,"searchDepth":66,"depth":66,"links":23378},[23379,23385],{"id":14676,"depth":66,"text":14677,"children":23380},[23381,23382,23383,23384],{"id":14680,"depth":1210,"text":14681},{"id":15405,"depth":1210,"text":15406},{"id":15577,"depth":1210,"text":15578},{"id":16036,"depth":1210,"text":16037},{"id":18408,"depth":66,"text":18409,"children":23386},[23387,23388,23389,23390,23391,23392,23393,23394,23395],{"id":18420,"depth":1210,"text":18421},{"id":18713,"depth":1210,"text":18714},{"id":19204,"depth":1210,"text":19205},{"id":20301,"depth":1210,"text":20302},{"id":20724,"depth":1210,"text":20725},{"id":21203,"depth":1210,"text":21204},{"id":21578,"depth":1210,"text":21579},{"id":21991,"depth":1210,"text":21992},{"id":22928,"depth":1210,"text":22929},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14641,"description":23396},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23403,"title":139,"body":23404,"description":23408,"extension":70,"meta":23409,"navigation":72,"path":23411,"seo":23412,"stem":23413,"__hash__":23414},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23405,"toc":23406},[],{"title":30,"searchDepth":66,"depth":66,"links":23407},[],null,{"category":23410},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":139,"description":23408},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23416,"title":23417,"body":23418,"description":30,"extension":70,"meta":24009,"navigation":72,"path":24010,"seo":24011,"stem":24012,"__hash__":24013},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23419,"toc":23991},[23420,23423,23427,23430,23433,23436,23454,23459,23462,23465,23468,23471,23476,23479,23484,23487,23490,23494,23497,23500,23506,23509,23527,23531,23535,23538,23543,23546,23550,23553,23566,23569,23573,23576,23579,23582,23607,23610,23619,23630,23645,23677,23681,23688,23696,23700,23703,23706,23711,23715,23718,23721,23726,23729,23733,23736,23739,23744,23747,23751,23756,23760,23827,23831,23834,23837,23840,23843,23846,23852,23873,23876,23890,23899,23903,23906,23909,23914,23917,23922,23927,23930,23933,23938,23943,23946,23951,23956,23959,23964,23969,23972,23975,23980,23983,23988],[10,23421,23417],{"id":23422},"_1强化学习基本认识",[18,23424,23426],{"id":23425},"_11什么是强化学习","1.1.什么是强化学习",[14,23428,23429],{},"强化学习有两部分组成：智能体和环境；",[14,23431,23432],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,23434,23435],{},"强化学习与监督学习的区别:",[98,23437,23438,23441,23444,23447],{},[101,23439,23440],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[101,23442,23443],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[101,23445,23446],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[101,23448,23449,23450,23453],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[304,23451,23452],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,23455,23456],{},[28,23457],{"alt":30,"src":23458},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,23460,23461],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,23463,23464],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,23466,23467],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,23469,23470],{},"获取奖励",[14,23472,23473],{},[28,23474],{"alt":30,"src":23475},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,23477,23478],{},"强化学习可以分成标准强化学习和深度强化学习",[14,23480,23481],{},[28,23482],{"alt":30,"src":23483},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,23485,23486],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,23488,23489],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[18,23491,23493],{"id":23492},"_12强化学习应用场景","1.2.强化学习应用场景",[14,23495,23496],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,23498,23499],{},"具身智能中的应用",[14,23501,23502,23505],{},[304,23503,23504],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,23507,23508],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,23510,23511,23512,23515,23516,23519,23520,23523,23524],{},"机器人是",[304,23513,23514],{},"躯体","，深度学习是",[304,23517,23518],{},"神经元****网络","，VLA是",[304,23521,23522],{},"通用的行为逻辑","，而强化学习是",[304,23525,23526],{},"教练",[18,23528,23530],{"id":23529},"_13序列决策","1.3.序列决策",[115,23532,23534],{"id":23533},"_131智能体与环境","1.3.1.智能体与环境",[14,23536,23537],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,23539,23540],{},[28,23541],{"alt":30,"src":23542},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,23544,23545],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[115,23547,23549],{"id":23548},"_132奖励","1.3.2.奖励",[14,23551,23552],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,23554,23555,23556,23565],{},"取某个策略的表现如何。强化学习的目的就是",[304,23557,23558,23559,23564],{},"最大化",[304,23560,23561],{},[304,23562,23563],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,23567,23568],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[115,23570,23572],{"id":23571},"_133序列决策","1.3.3.序列决策",[14,23574,23575],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,23577,23578],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,23580,23581],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,23583,23584,23588,23589,23591,23592,23594,23595,23597,23598,13826,23601,13826,23604],{},[23585,23586,23587],"em",{},"Ht"," = ",[23585,23590,751],{},"1*, a",[23585,23593,372],{},", r",[23585,23596,372],{},", . . . ,* ",[23585,23599,23600],{},"ot",[23585,23602,23603],{},", at ,",[23585,23605,23606],{},"rt",[14,23608,23609],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,23611,23612,23588,23615,1688,23617,584],{},[23585,23613,23614],{},"st",[23585,23616,207],{},[23585,23618,23587],{},[14,23620,23621,23622,23625,23626,23629],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[304,23623,23624],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[304,23627,23628],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,23631,23632,23633,23636,23637,23640,23641,23644],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[304,23634,23635],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[304,23638,23639],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23585,23642,23643],{},"S, A, T, R, Ω, O, γ",")。",[14,23646,23647,23648,23650,23651,23653,23654,155,23656,23659,23660,23662,23663,155,23666,23669,23670,23672,23673,23676],{},"其中 ",[23585,23649,844],{}," 表示状态空间，为隐变量，",[23585,23652,387],{}," 为动作空间，",[23585,23655,869],{},[23585,23657,23658],{},"s ′ |s, a",") 为状态转移概率，",[23585,23661,819],{}," 为奖励函数，",[23585,23664,23665],{},"Ω",[23585,23667,23668],{},"o|s, a",") 为观测概率，",[23585,23671,745],{}," 为观测空间，",[23585,23674,23675],{},"γ"," 为折扣因子。",[18,23678,23680],{"id":23679},"_14动作空间","1.4.动作空间",[14,23682,23683,23684,23687],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[304,23685,23686],{},"动作空间"," ，动作空间分为:",[98,23689,23690,23693],{},[101,23691,23692],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[101,23694,23695],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[18,23697,23699],{"id":23698},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,23701,23702],{},"由策略、价值函数、模型三部分组成",[14,23704,23705],{},"这三者组成马尔可夫决策过程",[14,23707,23708],{},[28,23709],{"alt":30,"src":23710},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[115,23712,23714],{"id":23713},"_151策略","1.5.1.策略",[14,23716,23717],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,23719,23720],{},"策略可分为两种：",[14,23722,23723],{},[28,23724],{"alt":30,"src":23725},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,23727,23728],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[115,23730,23732],{"id":23731},"_152价值函数","1.5.2.价值函数",[14,23734,23735],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,23737,23738],{},"价值函数中有一个折扣因子，类似于存款利息",[14,23740,23741],{},[28,23742],{"alt":30,"src":23743},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,23745,23746],{},"进入某个状态采取的最优动作可以通过Q函数得到",[115,23748,23750],{"id":23749},"_153模型","1.5.3.模型",[14,23752,23753],{},[28,23754],{"alt":30,"src":23755},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[18,23757,23759],{"id":23758},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[292,23761,23762,23773],{},[295,23763,23764],{},[298,23765,23766,23770],{},[301,23767,23769],{"align":23768},"left","类型",[301,23771,23772],{"align":23768},"特点",[339,23774,23775,23785,23795,23805,23817],{},[298,23776,23777,23782],{},[344,23778,23779],{"align":23768},[304,23780,23781],{},"基于价值的智能体",[344,23783,23784],{"align":23768},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[298,23786,23787,23792],{},[344,23788,23789],{"align":23768},[304,23790,23791],{},"基于策略的智能体",[344,23793,23794],{"align":23768},"直接学习策略，没有学习价值函数",[298,23796,23797,23802],{},[344,23798,23799],{"align":23768},[304,23800,23801],{},"演员-评论员智能体",[344,23803,23804],{"align":23768},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[298,23806,23807,23812],{},[344,23808,23809],{"align":23768},[304,23810,23811],{},"有模型强化学习智能体",[344,23813,23814],{"align":23768},[28,23815],{"alt":30,"src":23816},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[298,23818,23819,23824],{},[344,23820,23821],{"align":23768},[304,23822,23823],{},"免模型强化学习智能体",[344,23825,23826],{"align":23768},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[18,23828,23830],{"id":23829},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,23832,23833],{},"学习和规划是序列决策的两个基本问题",[14,23835,23836],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,23838,23839],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,23841,23842],{},"强化学习用到的库：Gym",[14,23844,23845],{},"Gym可以检验强化学习算法的优劣",[14,23847,23848,23851],{},[304,23849,23850],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[135,23853,23857],{"className":23854,"code":23855,"language":23856,"meta":30,"style":30},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[141,23858,23859],{"__ignoreMap":30},[144,23860,23861,23864,23867,23870],{"class":146,"line":147},[144,23862,23863],{"class":1993},"pip",[144,23865,23866],{"class":259}," install",[144,23868,23869],{"class":259}," gym==",[144,23871,23872],{"class":203},"0.25.2\n",[14,23874,23875],{},"显示图形界面需要",[135,23877,23879],{"className":23854,"code":23878,"language":23856,"meta":30,"style":30},"pip install pygame\n",[141,23880,23881],{"__ignoreMap":30},[144,23882,23883,23885,23887],{"class":146,"line":147},[144,23884,23863],{"class":1993},[144,23886,23866],{"class":259},[144,23888,23889],{"class":259}," pygame\n",[14,23891,23892,23893],{},"有关Gym库的相关文档介绍：",[393,23894,23898],{"href":23895,"rel":23896},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23897],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[18,23900,23902],{"id":23901},"_18一些补充基础概念","1.8.一些补充基础概念",[14,23904,23905],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,23907,23908],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,23910,23911],{},[28,23912],{"alt":30,"src":23913},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,23915,23916],{},"折扣率需要自己来设定",[14,23918,23919],{},[28,23920],{"alt":30,"src":23921},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[98,23923,23924],{},[101,23925,23926],{},"状态转移函数：",[14,23928,23929],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,23931,23932],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,23934,23935],{},[28,23936],{"alt":30,"src":23937},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[98,23939,23940],{"start":66},[101,23941,23942],{},"动作价值函数：",[14,23944,23945],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,23947,23948],{},[28,23949],{"alt":30,"src":23950},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[98,23952,23953],{"start":1210},[101,23954,23955],{},"最优动作价值函数：",[14,23957,23958],{},"这个函数是对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,23960,23961],{},[28,23962],{"alt":30,"src":23963},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[98,23965,23966],{"start":1225},[101,23967,23968],{},"状态价值函数:",[14,23970,23971],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,23973,23974],{},"它衡量的是“一个具体动作”的长期价值",[14,23976,23977],{},[28,23978],{"alt":30,"src":23979},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,23981,23982],{},"几个价值函数之间的比较：",[14,23984,23985],{},[28,23986],{"alt":30,"src":23987},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5157,23989,23990],{},"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":30,"searchDepth":66,"depth":66,"links":23992},[23993,23994,23995,24000,24001,24006,24007,24008],{"id":23425,"depth":66,"text":23426},{"id":23492,"depth":66,"text":23493},{"id":23529,"depth":66,"text":23530,"children":23996},[23997,23998,23999],{"id":23533,"depth":1210,"text":23534},{"id":23548,"depth":1210,"text":23549},{"id":23571,"depth":1210,"text":23572},{"id":23679,"depth":66,"text":23680},{"id":23698,"depth":66,"text":23699,"children":24002},[24003,24004,24005],{"id":23713,"depth":1210,"text":23714},{"id":23731,"depth":1210,"text":23732},{"id":23749,"depth":1210,"text":23750},{"id":23758,"depth":66,"text":23759},{"id":23829,"depth":66,"text":23830},{"id":23901,"depth":66,"text":23902},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23417,"description":30},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24015,"title":24016,"body":24017,"description":24024,"extension":70,"meta":24035,"navigation":72,"path":24036,"seo":24037,"stem":24038,"__hash__":24039},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24018,"toc":24033},[24019,24022,24025,24030],[10,24020,24016],{"id":24021},"_2马尔可夫决策过程",[14,24023,24024],{},"这是强化学习的基本框架",[14,24026,24027],{},[28,24028],{"alt":30,"src":24029},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,24031,24032],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":30,"searchDepth":66,"depth":66,"links":24034},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24016,"description":24024},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24041,"title":24042,"body":24043,"description":30,"extension":70,"meta":24159,"navigation":72,"path":24160,"seo":24161,"stem":24162,"__hash__":24163},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24044,"toc":24154},[24045,24048,24052,24055,24060,24065,24068,24073,24076,24081,24084,24088,24093,24096,24101,24106,24111,24114,24118,24123,24126,24131,24136,24141,24146,24149],[10,24046,24042],{"id":24047},"_3动作价值函数",[18,24049,24051],{"id":24050},"_31dqn","3.1.DQN",[14,24053,24054],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24056,24057],{},[28,24058],{"alt":30,"src":24059},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24061,24062],{},[28,24063],{"alt":30,"src":24064},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24066,24067],{},"DQN算法的描述：",[14,24069,24070],{},[28,24071],{"alt":30,"src":24072},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24074,24075],{},"这里的Dense指的是全连接层",[14,24077,24078],{},[28,24079],{"alt":30,"src":24080},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24082,24083],{},"当前观测的状态为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算法",[18,24085,24087],{"id":24086},"_32dqn的举例","3.2.DQN的举例",[14,24089,24090],{},[28,24091],{"alt":30,"src":24092},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24094,24095],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24097,24098],{},[28,24099],{"alt":30,"src":24100},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24102,24103],{},[28,24104],{"alt":30,"src":24105},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24107,24108],{},[28,24109],{"alt":30,"src":24110},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24112,24113],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[18,24115,24117],{"id":24116},"_33td算法","3.3.TD算法",[14,24119,24120],{},[28,24121],{"alt":30,"src":24122},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24124,24125],{},"强化学习TD算法公式的粗略解释：",[14,24127,24128],{},[28,24129],{"alt":30,"src":24130},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24132,24133],{},[28,24134],{"alt":30,"src":24135},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24137,24138],{},[28,24139],{"alt":30,"src":24140},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24142,24143],{},[28,24144],{"alt":30,"src":24145},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24147,24148],{},"TD算法总结：",[14,24150,24151],{},[28,24152],{"alt":30,"src":24153},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":30,"searchDepth":66,"depth":66,"links":24155},[24156,24157,24158],{"id":24050,"depth":66,"text":24051},{"id":24086,"depth":66,"text":24087},{"id":24116,"depth":66,"text":24117},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24042,"description":30},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24165,"title":24166,"body":24167,"description":30,"extension":70,"meta":24400,"navigation":72,"path":24401,"seo":24402,"stem":24403,"__hash__":24404},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24168,"toc":24396},[24169,24172,24176,24179,24182,24187,24192,24195,24200,24205,24208,24213,24216,24221,24224,24229,24232,24237,24240,24245,24250,24253,24258,24261,24264,24269,24272,24277,24282,24286,24289,24292,24297,24302,24305,24310,24315,24318,24323,24326,24329,24334,24337,24342,24345,24350,24355,24358,24363,24368,24371,24376,24379,24384,24387],[10,24170,24166],{"id":24171},"_4策略学习",[18,24173,24175],{"id":24174},"_41概念描述","4.1.概念描述",[14,24177,24178],{},"用神经网络（策略网络）近似策略函数",[14,24180,24181],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24183,24184],{},[28,24185],{"alt":30,"src":24186},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24188,24189],{},[28,24190],{"alt":30,"src":24191},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24193,24194],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24196,24197],{},[28,24198],{"alt":30,"src":24199},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24201,24202],{},[28,24203],{"alt":30,"src":24204},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24206,24207],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24209,24210],{},[28,24211],{"alt":30,"src":24212},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24214,24215],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24217,24218],{},[28,24219],{"alt":30,"src":24220},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24222,24223],{},"改进theta要用到策略梯度算法",[14,24225,24226],{},[28,24227],{"alt":30,"src":24228},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24230,24231],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24233,24234],{},[28,24235],{"alt":30,"src":24236},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24238,24239],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24241,24242],{},[28,24243],{"alt":30,"src":24244},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24246,24247],{},[28,24248],{"alt":30,"src":24249},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24251,24252],{},"梯度公式总结：",[14,24254,24255],{},[28,24256],{"alt":30,"src":24257},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24259,24260],{},"两个公式的分别应用场景：",[14,24262,24263],{},"对于离散的动作：",[14,24265,24266],{},[28,24267],{"alt":30,"src":24268},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24270,24271],{},"对于连续的动作：",[14,24273,24274],{},[28,24275],{"alt":30,"src":24276},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24278,24279],{},[28,24280],{"alt":30,"src":24281},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[18,24283,24285],{"id":24284},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24287,24288],{},"使用蒙特卡洛来近似计算策略梯度",[14,24290,24291],{},"蒙特卡洛法的解释如下：",[14,24293,24294],{},[28,24295],{"alt":30,"src":24296},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,24298,24299],{},[28,24300],{"alt":30,"src":24301},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,24303,24304],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[98,24306,24307],{},[101,24308,24309],{},"方法一：reinforce算法",[14,24311,24312],{},[28,24313],{"alt":30,"src":24314},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,24316,24317],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[98,24319,24320],{"start":66},[101,24321,24322],{},"方法二：actor-critic算法",[14,24324,24325],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,24327,24328],{},"两个网络的构建：",[14,24330,24331],{},[28,24332],{"alt":30,"src":24333},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,24335,24336],{},"actor网路：",[14,24338,24339],{},[28,24340],{"alt":30,"src":24341},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,24343,24344],{},"critic网络",[14,24346,24347],{},[28,24348],{"alt":30,"src":24349},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[98,24351,24352],{"start":1210},[101,24353,24354],{},"网络的训练",[14,24356,24357],{},"网络描述",[14,24359,24360],{},[28,24361],{"alt":30,"src":24362},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,24364,24365],{},[28,24366],{"alt":30,"src":24367},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,24369,24370],{},"TD算法更新梯度：",[14,24372,24373],{},[28,24374],{"alt":30,"src":24375},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,24377,24378],{},"策略网络更新梯度：",[14,24380,24381],{},[28,24382],{"alt":30,"src":24383},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,24385,24386],{},"训练整个流程的具体描述：",[14,24388,24389,24392,24393],{},[28,24390],{"alt":30,"src":24391},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[28,24394],{"alt":30,"src":24395},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":30,"searchDepth":66,"depth":66,"links":24397},[24398,24399],{"id":24174,"depth":66,"text":24175},{"id":24284,"depth":66,"text":24285},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24166,"description":30},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":4,"title":5,"body":24406,"description":16,"extension":70,"meta":24448,"navigation":72,"path":73,"seo":24449,"stem":75,"__hash__":76},{"type":7,"value":24407,"toc":24444},[24408,24410,24412,24414,24416,24420,24422,24424,24428,24430,24434,24438,24440],[10,24409,5],{"id":12},[14,24411,16],{},[18,24413,21],{"id":20},[14,24415,24],{},[14,24417,24418],{},[28,24419],{"alt":30,"src":31},[18,24421,35],{"id":34},[14,24423,38],{},[14,24425,24426],{},[28,24427],{"alt":30,"src":43},[14,24429,46],{},[14,24431,24432],{},[28,24433],{"alt":30,"src":51},[14,24435,24436],{},[28,24437],{"alt":30,"src":56},[14,24439,59],{},[14,24441,24442],{},[28,24443],{"alt":30,"src":64},{"title":30,"searchDepth":66,"depth":66,"links":24445},[24446,24447],{"id":20,"depth":66,"text":21},{"id":34,"depth":66,"text":35},{},{"title":5,"description":16},{"id":24451,"title":24452,"body":24453,"description":24460,"extension":70,"meta":24463,"navigation":72,"path":24464,"seo":24465,"stem":24466,"__hash__":24467},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24454,"toc":24461},[24455,24458],[10,24456,24452],{"id":24457},"_6价值网络",[14,24459,24460],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":30,"searchDepth":66,"depth":66,"links":24462},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24452,"description":24460},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24469,"title":24470,"body":24471,"description":24475,"extension":70,"meta":24476,"navigation":72,"path":24477,"seo":24478,"stem":24479,"__hash__":24480},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24472,"toc":24473},[],{"title":30,"searchDepth":66,"depth":66,"links":24474},[],"记录自己的强化学习笔记。",{"category":23410},"\u002Fwiki\u002F2025-12-04",{"title":24470,"description":24475},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24482,"title":24483,"body":24484,"description":23408,"extension":70,"meta":24523,"navigation":72,"path":24524,"seo":24525,"stem":24526,"__hash__":24527},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24485,"toc":24521},[24486,24489,24492,24498,24501,24507,24510,24515,24518],[10,24487,24483],{"id":24488},"_1-项目概览与官方资源",[14,24490,24491],{},"官方文档：",[14,24493,24494],{},[393,24495,24496],{"href":24496,"rel":24497},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23897],[14,24499,24500],{},"官方代码仓库：",[14,24502,24503],{},[393,24504,24505],{"href":24505,"rel":24506},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23897],[14,24508,24509],{},"复现大体流程：",[14,24511,24512],{},[28,24513],{"alt":30,"src":24514},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,24516,24517],{},"本教程的目标是打通这条链路：",[14,24519,24520],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":30,"searchDepth":66,"depth":66,"links":24522},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24483,"description":23408},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24529,"title":24530,"body":24531,"description":23408,"extension":70,"meta":24647,"navigation":72,"path":24648,"seo":24649,"stem":24650,"__hash__":24651},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24532,"toc":24642},[24533,24536,24540,24543,24550,24554,24557,24566,24576,24580,24610,24613,24639],[10,24534,24530],{"id":24535},"_2-环境准备与设备连接",[18,24537,24539],{"id":24538},"_21-系统与环境","2.1 系统与环境",[14,24541,24542],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,24544,24545,24546,24549],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[141,24547,24548],{},"lerobot"," 依赖。",[18,24551,24553],{"id":24552},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,24555,24556],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[135,24558,24560],{"className":23854,"code":24559,"language":23856,"meta":30,"style":30},"lerobot-find-out\n",[141,24561,24562],{"__ignoreMap":30},[144,24563,24564],{"class":146,"line":147},[144,24565,24559],{"class":1993},[14,24567,24568,24569,367,24572,24575],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[141,24570,24571],{},"\u002Fdev\u002FttyACM0",[141,24573,24574],{},"\u002Fdev\u002FttyACM1","）。",[18,24577,24579],{"id":24578},"_23-串口授权","2.3 串口授权",[135,24581,24583],{"className":23854,"code":24582,"language":23856,"meta":30,"style":30},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[141,24584,24585,24599],{"__ignoreMap":30},[144,24586,24587,24590,24593,24596],{"class":146,"line":147},[144,24588,24589],{"class":1993},"sudo",[144,24591,24592],{"class":259}," chmod",[144,24594,24595],{"class":203}," 666",[144,24597,24598],{"class":259}," \u002Fdev\u002FttyACM0\n",[144,24600,24601,24603,24605,24607],{"class":146,"line":66},[144,24602,24589],{"class":1993},[144,24604,24592],{"class":259},[144,24606,24595],{"class":203},[144,24608,24609],{"class":259}," \u002Fdev\u002FttyACM1\n",[14,24611,24612],{},"说明：",[1162,24614,24615,24620,24626,24636],{},[101,24616,24617,24619],{},[141,24618,24589],{},"：以 root 权限执行命令。",[101,24621,24622,24625],{},[141,24623,24624],{},"chmod","：修改设备节点权限。",[101,24627,24628,24631,24632,24635],{},[141,24629,24630],{},"666","：",[141,24633,24634],{},"rw-rw-rw-","，所有用户可读写。",[101,24637,24638],{},"串口号必须替换为你机器上的真实端口。",[5157,24640,24641],{},"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":30,"searchDepth":66,"depth":66,"links":24643},[24644,24645,24646],{"id":24538,"depth":66,"text":24539},{"id":24552,"depth":66,"text":24553},{"id":24578,"depth":66,"text":24579},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24530,"description":23408},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24653,"title":24654,"body":24655,"description":23408,"extension":70,"meta":24816,"navigation":72,"path":24817,"seo":24818,"stem":24819,"__hash__":24820},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24656,"toc":24812},[24657,24661,24665,24671,24674,24731,24734,24738,24741,24809],[10,24658,24660],{"id":24659},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[18,24662,24664],{"id":24663},"_31-配置电机-id","3.1 配置电机 ID",[14,24666,24667,24668,24670],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[141,24669,372],{},"，需要改成机械臂链路里不冲突的编号。",[14,24672,24673],{},"方式一：用 LeRobot 命令逐步写入。",[135,24675,24677],{"className":23854,"code":24676,"language":23856,"meta":30,"style":30},"# 主臂舵机配置 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",[141,24678,24679,24684,24692,24699,24704,24708,24713,24719,24726],{"__ignoreMap":30},[144,24680,24681],{"class":146,"line":147},[144,24682,24683],{"class":213},"# 主臂舵机配置 ID\n",[144,24685,24686,24689],{"class":146,"line":66},[144,24687,24688],{"class":1993},"lerobot-setup-motors",[144,24690,24691],{"class":203}," \\\n",[144,24693,24694,24697],{"class":146,"line":1210},[144,24695,24696],{"class":203},"  --teleop.type=so101_leader",[144,24698,24691],{"class":203},[144,24700,24701],{"class":146,"line":1225},[144,24702,24703],{"class":203},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[144,24705,24706],{"class":146,"line":1231},[144,24707,2430],{"emptyLinePlaceholder":72},[144,24709,24710],{"class":146,"line":1245},[144,24711,24712],{"class":213},"# 从臂舵机配置 ID\n",[144,24714,24715,24717],{"class":146,"line":1251},[144,24716,24688],{"class":1993},[144,24718,24691],{"class":203},[144,24720,24721,24724],{"class":146,"line":1342},[144,24722,24723],{"class":203},"  --robot.type=so101_follower",[144,24725,24691],{"class":203},[144,24727,24728],{"class":146,"line":1348},[144,24729,24730],{"class":203},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,24732,24733],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[18,24735,24737],{"id":24736},"_32-机械臂校准","3.2 机械臂校准",[14,24739,24740],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[135,24742,24744],{"className":23854,"code":24743,"language":23856,"meta":30,"style":30},"# 主臂校准\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",[141,24745,24746,24751,24758,24764,24771,24776,24780,24785,24791,24797,24804],{"__ignoreMap":30},[144,24747,24748],{"class":146,"line":147},[144,24749,24750],{"class":213},"# 主臂校准\n",[144,24752,24753,24756],{"class":146,"line":66},[144,24754,24755],{"class":1993},"lerobot-calibrate",[144,24757,24691],{"class":203},[144,24759,24760,24762],{"class":146,"line":1210},[144,24761,24696],{"class":203},[144,24763,24691],{"class":203},[144,24765,24766,24769],{"class":146,"line":1225},[144,24767,24768],{"class":203},"  --teleop.port=\u002Fdev\u002FttyACM0",[144,24770,24691],{"class":203},[144,24772,24773],{"class":146,"line":1231},[144,24774,24775],{"class":203},"  --teleop.id=my_awesome_leader_arm\n",[144,24777,24778],{"class":146,"line":1245},[144,24779,2430],{"emptyLinePlaceholder":72},[144,24781,24782],{"class":146,"line":1251},[144,24783,24784],{"class":213},"# 从臂校准\n",[144,24786,24787,24789],{"class":146,"line":1342},[144,24788,24755],{"class":1993},[144,24790,24691],{"class":203},[144,24792,24793,24795],{"class":146,"line":1348},[144,24794,24723],{"class":203},[144,24796,24691],{"class":203},[144,24798,24799,24802],{"class":146,"line":1360},[144,24800,24801],{"class":203},"  --robot.port=\u002Fdev\u002FttyACM1",[144,24803,24691],{"class":203},[144,24805,24806],{"class":146,"line":1642},[144,24807,24808],{"class":203},"  --robot.id=my_awesome_follower_arm\n",[5157,24810,24811],{},"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":30,"searchDepth":66,"depth":66,"links":24813},[24814,24815],{"id":24663,"depth":66,"text":24664},{"id":24736,"depth":66,"text":24737},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24654,"description":23408},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24822,"title":24823,"body":24824,"description":23408,"extension":70,"meta":25015,"navigation":72,"path":25016,"seo":25017,"stem":25018,"__hash__":25019},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24825,"toc":25011},[24826,24829,24833,24880,24884,24897,24960,24963,25008],[10,24827,24823],{"id":24828},"_4-遥操与相机接入",[18,24830,24832],{"id":24831},"_41-不带相机遥操","4.1 不带相机遥操",[135,24834,24836],{"className":23854,"code":24835,"language":23856,"meta":30,"style":30},"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",[141,24837,24838,24845,24851,24857,24864,24870,24876],{"__ignoreMap":30},[144,24839,24840,24843],{"class":146,"line":147},[144,24841,24842],{"class":1993},"lerobot-teleoperate",[144,24844,24691],{"class":203},[144,24846,24847,24849],{"class":146,"line":66},[144,24848,24723],{"class":203},[144,24850,24691],{"class":203},[144,24852,24853,24855],{"class":146,"line":1210},[144,24854,24801],{"class":203},[144,24856,24691],{"class":203},[144,24858,24859,24862],{"class":146,"line":1225},[144,24860,24861],{"class":203},"  --robot.id=my_awesome_follower_arm",[144,24863,24691],{"class":203},[144,24865,24866,24868],{"class":146,"line":1231},[144,24867,24696],{"class":203},[144,24869,24691],{"class":203},[144,24871,24872,24874],{"class":146,"line":1245},[144,24873,24768],{"class":203},[144,24875,24691],{"class":203},[144,24877,24878],{"class":146,"line":1251},[144,24879,24775],{"class":203},[18,24881,24883],{"id":24882},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[135,24885,24887],{"className":23854,"code":24886,"language":23856,"meta":30,"style":30},"lerobot-find-cameras opencv\n",[141,24888,24889],{"__ignoreMap":30},[144,24890,24891,24894],{"class":146,"line":147},[144,24892,24893],{"class":1993},"lerobot-find-cameras",[144,24895,24896],{"class":259}," opencv\n",[135,24898,24900],{"className":23854,"code":24899,"language":23856,"meta":30,"style":30},"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",[141,24901,24902,24908,24914,24920,24926,24936,24942,24948,24955],{"__ignoreMap":30},[144,24903,24904,24906],{"class":146,"line":147},[144,24905,24842],{"class":1993},[144,24907,24691],{"class":203},[144,24909,24910,24912],{"class":146,"line":66},[144,24911,24723],{"class":203},[144,24913,24691],{"class":203},[144,24915,24916,24918],{"class":146,"line":1210},[144,24917,24801],{"class":203},[144,24919,24691],{"class":203},[144,24921,24922,24924],{"class":146,"line":1225},[144,24923,24861],{"class":203},[144,24925,24691],{"class":203},[144,24927,24928,24931,24934],{"class":146,"line":1231},[144,24929,24930],{"class":203},"  --robot.cameras=",[144,24932,24933],{"class":259},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[144,24935,24691],{"class":203},[144,24937,24938,24940],{"class":146,"line":1245},[144,24939,24696],{"class":203},[144,24941,24691],{"class":203},[144,24943,24944,24946],{"class":146,"line":1251},[144,24945,24768],{"class":203},[144,24947,24691],{"class":203},[144,24949,24950,24953],{"class":146,"line":1342},[144,24951,24952],{"class":203},"  --teleop.id=my_awesome_leader_arm",[144,24954,24691],{"class":203},[144,24956,24957],{"class":146,"line":1348},[144,24958,24959],{"class":203},"  --display_data=true\n",[14,24961,24962],{},"相机参数说明：",[1162,24964,24965,24971,24977,24986,24996,25002],{},[101,24966,24967,24970],{},[141,24968,24969],{},"front","：相机名称。",[101,24972,24973,24976],{},[141,24974,24975],{},"type: opencv","：相机驱动类型。",[101,24978,24979,24982,24983,24575],{},[141,24980,24981],{},"index_or_path","：设备编号或设备路径（如 ",[141,24984,24985],{},"\u002Fdev\u002Fvideo4",[101,24987,24988,24991,24992,24995],{},[141,24989,24990],{},"width"," \u002F ",[141,24993,24994],{},"height","：图像分辨率。",[101,24997,24998,25001],{},[141,24999,25000],{},"fps","：采样帧率。",[101,25003,25004,25007],{},[141,25005,25006],{},"--display_data=true","：启用实时可视化。",[5157,25009,25010],{},"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":30,"searchDepth":66,"depth":66,"links":25012},[25013,25014],{"id":24831,"depth":66,"text":24832},{"id":24882,"depth":66,"text":24883},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24823,"description":23408},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25021,"title":25022,"body":25023,"description":23408,"extension":70,"meta":25195,"navigation":72,"path":25196,"seo":25197,"stem":25198,"__hash__":25199},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25024,"toc":25190},[25025,25029,25033,25038,25043,25046,25088,25094,25098,25147,25152,25156,25159,25167,25172,25177,25182,25187],[10,25026,25028],{"id":25027},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[18,25030,25032],{"id":25031},"_51-生成访问令牌","5.1 生成访问令牌",[14,25034,25035],{},[28,25036],{"alt":30,"src":25037},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25039,25040],{},[28,25041],{"alt":30,"src":25042},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25044,25045],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[135,25047,25049],{"className":23854,"code":25048,"language":23856,"meta":30,"style":30},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[141,25050,25051,25064],{"__ignoreMap":30},[144,25052,25053,25056,25059,25061],{"class":146,"line":147},[144,25054,25055],{"class":150},"export",[144,25057,25058],{"class":154}," HF_TOKEN",[144,25060,200],{"class":150},[144,25062,25063],{"class":259},"\"your_huggingface_token\"\n",[144,25065,25066,25069,25072,25075,25078,25080,25083,25085],{"class":146,"line":66},[144,25067,25068],{"class":1993},"hf",[144,25070,25071],{"class":259}," auth",[144,25073,25074],{"class":259}," login",[144,25076,25077],{"class":203}," --token",[144,25079,9755],{"class":259},[144,25081,25082],{"class":154},"$HF_TOKEN",[144,25084,406],{"class":259},[144,25086,25087],{"class":203}," --add-to-git-credential\n",[14,25089,25090,25093],{},[141,25091,25092],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[18,25095,25097],{"id":25096},"_52-验证登录","5.2 验证登录",[135,25099,25101],{"className":23854,"code":25100,"language":23856,"meta":30,"style":30},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[141,25102,25103,25134],{"__ignoreMap":30},[144,25104,25105,25108,25110,25113,25115,25117,25120,25123,25126,25129,25132],{"class":146,"line":147},[144,25106,25107],{"class":154},"HF_USER",[144,25109,200],{"class":150},[144,25111,25112],{"class":154},"$(",[144,25114,25068],{"class":1993},[144,25116,25071],{"class":259},[144,25118,25119],{"class":259}," whoami",[144,25121,25122],{"class":150}," |",[144,25124,25125],{"class":1993}," head",[144,25127,25128],{"class":203}," -n",[144,25130,25131],{"class":203}," 1",[144,25133,161],{"class":154},[144,25135,25136,25139,25141,25144],{"class":146,"line":66},[144,25137,25138],{"class":203},"echo",[144,25140,9755],{"class":259},[144,25142,25143],{"class":154},"$HF_USER",[144,25145,25146],{"class":259},"\"\n",[14,25148,25149],{},[28,25150],{"alt":30,"src":25151},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[18,25153,25155],{"id":25154},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25157,25158],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1162,25160,25161,25164],{},[101,25162,25163],{},"Dataset Repo（用于上传演示数据）",[101,25165,25166],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25168,25169],{},[28,25170],{"alt":30,"src":25171},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25173,25174],{},[28,25175],{"alt":30,"src":25176},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25178,25179],{},[28,25180],{"alt":30,"src":25181},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25183,25184],{},[28,25185],{"alt":30,"src":25186},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5157,25188,25189],{},"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":30,"searchDepth":66,"depth":66,"links":25191},[25192,25193,25194],{"id":25031,"depth":66,"text":25032},{"id":25096,"depth":66,"text":25097},{"id":25154,"depth":66,"text":25155},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25022,"description":23408},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25201,"title":25202,"body":25203,"description":23408,"extension":70,"meta":25400,"navigation":72,"path":25401,"seo":25402,"stem":25403,"__hash__":25404},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25204,"toc":25395},[25205,25209,25213,25309,25317,25322,25326,25342,25345,25349,25392],[10,25206,25208],{"id":25207},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[18,25210,25212],{"id":25211},"_61-录制示教数据","6.1 录制示教数据",[135,25214,25216],{"className":23854,"code":25215,"language":23856,"meta":30,"style":30},"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",[141,25217,25218,25225,25231,25237,25243,25252,25258,25264,25270,25277,25287,25294,25304],{"__ignoreMap":30},[144,25219,25220,25223],{"class":146,"line":147},[144,25221,25222],{"class":1993},"lerobot-record",[144,25224,24691],{"class":203},[144,25226,25227,25229],{"class":146,"line":66},[144,25228,24723],{"class":203},[144,25230,24691],{"class":203},[144,25232,25233,25235],{"class":146,"line":1210},[144,25234,24801],{"class":203},[144,25236,24691],{"class":203},[144,25238,25239,25241],{"class":146,"line":1225},[144,25240,24861],{"class":203},[144,25242,24691],{"class":203},[144,25244,25245,25247,25250],{"class":146,"line":1231},[144,25246,24930],{"class":203},[144,25248,25249],{"class":259},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[144,25251,24691],{"class":203},[144,25253,25254,25256],{"class":146,"line":1245},[144,25255,24696],{"class":203},[144,25257,24691],{"class":203},[144,25259,25260,25262],{"class":146,"line":1251},[144,25261,24768],{"class":203},[144,25263,24691],{"class":203},[144,25265,25266,25268],{"class":146,"line":1342},[144,25267,24952],{"class":203},[144,25269,24691],{"class":203},[144,25271,25272,25275],{"class":146,"line":1348},[144,25273,25274],{"class":203},"  --display_data=true",[144,25276,24691],{"class":203},[144,25278,25279,25282,25285],{"class":146,"line":1360},[144,25280,25281],{"class":203},"  --dataset.repo_id=",[144,25283,25284],{"class":259},"\"Embodied-AI-6\u002Fso101_test\"",[144,25286,24691],{"class":203},[144,25288,25289,25292],{"class":146,"line":1642},[144,25290,25291],{"class":203},"  --dataset.num_episodes=10",[144,25293,24691],{"class":203},[144,25295,25296,25299,25302],{"class":146,"line":1647},[144,25297,25298],{"class":203},"  --dataset.single_task=",[144,25300,25301],{"class":259},"\"Grab the green cube\"",[144,25303,24691],{"class":203},[144,25305,25306],{"class":146,"line":1653},[144,25307,25308],{"class":203},"  --resume=true\n",[1162,25310,25311],{},[101,25312,25313,25316],{},[141,25314,25315],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,25318,25319],{},[28,25320],{"alt":30,"src":25321},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[18,25323,25325],{"id":25324},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[135,25327,25329],{"className":23854,"code":25328,"language":23856,"meta":30,"style":30},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[141,25330,25331],{"__ignoreMap":30},[144,25332,25333,25336,25339],{"class":146,"line":147},[144,25334,25335],{"class":1993},"rm",[144,25337,25338],{"class":203}," -rf",[144,25340,25341],{"class":259}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,25343,25344],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[18,25346,25348],{"id":25347},"_63-回放指定-episode","6.3 回放指定 episode",[135,25350,25352],{"className":23854,"code":25351,"language":23856,"meta":30,"style":30},"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",[141,25353,25354,25361,25367,25373,25379,25387],{"__ignoreMap":30},[144,25355,25356,25359],{"class":146,"line":147},[144,25357,25358],{"class":1993},"lerobot-replay",[144,25360,24691],{"class":203},[144,25362,25363,25365],{"class":146,"line":66},[144,25364,24723],{"class":203},[144,25366,24691],{"class":203},[144,25368,25369,25371],{"class":146,"line":1210},[144,25370,24801],{"class":203},[144,25372,24691],{"class":203},[144,25374,25375,25377],{"class":146,"line":1225},[144,25376,24861],{"class":203},[144,25378,24691],{"class":203},[144,25380,25381,25383,25385],{"class":146,"line":1231},[144,25382,25281],{"class":203},[144,25384,25284],{"class":259},[144,25386,24691],{"class":203},[144,25388,25389],{"class":146,"line":1245},[144,25390,25391],{"class":203},"  --dataset.episode=0\n",[5157,25393,25394],{},"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":30,"searchDepth":66,"depth":66,"links":25396},[25397,25398,25399],{"id":25211,"depth":66,"text":25212},{"id":25324,"depth":66,"text":25325},{"id":25347,"depth":66,"text":25348},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25202,"description":23408},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25406,"title":25407,"body":25408,"description":23408,"extension":70,"meta":25536,"navigation":72,"path":25537,"seo":25538,"stem":25539,"__hash__":25540},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25409,"toc":25534},[25410,25414,25477,25480,25527,25532],[10,25411,25413],{"id":25412},"_7-act-模型训练","7. ACT 模型训练",[135,25415,25417],{"className":23854,"code":25416,"language":23856,"meta":30,"style":30},"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",[141,25418,25419,25426,25434,25441,25448,25455,25462,25469],{"__ignoreMap":30},[144,25420,25421,25424],{"class":146,"line":147},[144,25422,25423],{"class":1993},"lerobot-train",[144,25425,24691],{"class":203},[144,25427,25428,25430,25432],{"class":146,"line":66},[144,25429,25281],{"class":203},[144,25431,25284],{"class":259},[144,25433,24691],{"class":203},[144,25435,25436,25439],{"class":146,"line":1210},[144,25437,25438],{"class":203},"  --policy.type=act",[144,25440,24691],{"class":203},[144,25442,25443,25446],{"class":146,"line":1225},[144,25444,25445],{"class":203},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[144,25447,24691],{"class":203},[144,25449,25450,25453],{"class":146,"line":1231},[144,25451,25452],{"class":203},"  --job_name=act_so101_test",[144,25454,24691],{"class":203},[144,25456,25457,25460],{"class":146,"line":1245},[144,25458,25459],{"class":203},"  --policy.device=cuda",[144,25461,24691],{"class":203},[144,25463,25464,25467],{"class":146,"line":1251},[144,25465,25466],{"class":203},"  --wandb.enable=false",[144,25468,24691],{"class":203},[144,25470,25471,25474],{"class":146,"line":1342},[144,25472,25473],{"class":203},"  --policy.repo_id=",[144,25475,25476],{"class":259},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,25478,25479],{},"参数说明：",[1162,25481,25482,25488,25494,25500,25506,25515,25521],{},[101,25483,25484,25487],{},[141,25485,25486],{},"--dataset.repo_id","：训练数据集仓库。",[101,25489,25490,25493],{},[141,25491,25492],{},"--policy.type=act","：策略模型类型为 ACT。",[101,25495,25496,25499],{},[141,25497,25498],{},"--output_dir","：本地训练输出目录。",[101,25501,25502,25505],{},[141,25503,25504],{},"--job_name","：训练任务名称。",[101,25507,25508,25511,25512,24575],{},[141,25509,25510],{},"--policy.device","：训练设备（如 ",[141,25513,25514],{},"cuda",[101,25516,25517,25520],{},[141,25518,25519],{},"--wandb.enable","：是否启用 WandB 可视化。",[101,25522,25523,25526],{},[141,25524,25525],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,25528,25529],{},[28,25530],{"alt":30,"src":25531},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5157,25533,25394],{},{"title":30,"searchDepth":66,"depth":66,"links":25535},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25407,"description":23408},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25542,"title":25543,"body":25544,"description":23408,"extension":70,"meta":25631,"navigation":72,"path":25632,"seo":25633,"stem":25634,"__hash__":25635},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25545,"toc":25629},[25546,25549,25552,25619,25627],[10,25547,25543],{"id":25548},"_8-策略部署与自动采集",[14,25550,25551],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[135,25553,25555],{"className":23854,"code":25554,"language":23856,"meta":30,"style":30},"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",[141,25556,25557,25563,25569,25575,25583,25589,25596,25604,25612],{"__ignoreMap":30},[144,25558,25559,25561],{"class":146,"line":147},[144,25560,25222],{"class":1993},[144,25562,24691],{"class":203},[144,25564,25565,25567],{"class":146,"line":66},[144,25566,24723],{"class":203},[144,25568,24691],{"class":203},[144,25570,25571,25573],{"class":146,"line":1210},[144,25572,24801],{"class":203},[144,25574,24691],{"class":203},[144,25576,25577,25579,25581],{"class":146,"line":1225},[144,25578,24930],{"class":203},[144,25580,25249],{"class":259},[144,25582,24691],{"class":203},[144,25584,25585,25587],{"class":146,"line":1231},[144,25586,24861],{"class":203},[144,25588,24691],{"class":203},[144,25590,25591,25594],{"class":146,"line":1245},[144,25592,25593],{"class":203},"  --display_data=false",[144,25595,24691],{"class":203},[144,25597,25598,25600,25602],{"class":146,"line":1251},[144,25599,25281],{"class":203},[144,25601,25284],{"class":259},[144,25603,24691],{"class":203},[144,25605,25606,25608,25610],{"class":146,"line":1342},[144,25607,25298],{"class":203},[144,25609,25301],{"class":259},[144,25611,24691],{"class":203},[144,25613,25614,25617],{"class":146,"line":1348},[144,25615,25616],{"class":203},"  --policy.path=",[144,25618,25476],{"class":259},[1162,25620,25621],{},[101,25622,25623,25626],{},[141,25624,25625],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5157,25628,25394],{},{"title":30,"searchDepth":66,"depth":66,"links":25630},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25543,"description":23408},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25637,"title":25638,"body":25639,"description":23408,"extension":70,"meta":25668,"navigation":72,"path":25669,"seo":25670,"stem":25671,"__hash__":25672},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25640,"toc":25666},[25641,25645,25648,25654,25657,25663],[10,25642,25644],{"id":25643},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,25646,25647],{},"项目地址：",[14,25649,25650],{},[393,25651,25652],{"href":25652,"rel":25653},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23897],[14,25655,25656],{},"参考教程：",[14,25658,25659],{},[393,25660,25661],{"href":25661,"rel":25662},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23897],[14,25664,25665],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":30,"searchDepth":66,"depth":66,"links":25667},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25638,"description":23408},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25674,"title":25675,"body":25676,"description":25680,"extension":70,"meta":25681,"navigation":72,"path":25682,"seo":25683,"stem":25684,"__hash__":25685},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25677,"toc":25678},[],{"title":30,"searchDepth":66,"depth":66,"links":25679},[],"act复现",{"category":23410},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25675,"description":25680},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25687,"title":25688,"body":25689,"description":30,"extension":70,"meta":25991,"navigation":72,"path":25992,"seo":25993,"stem":25994,"__hash__":25995},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25690,"toc":25983},[25691,25694,25698,25708,25715,25722,25725,25732,25735,25738,25742,25754,25758,25804,25807,25810,25813,25816,25819,25823,25861,25867,25871,25925,25930,25933,25936,25941,25944,25949,25952,25955,25959,25962,25965,25969],[10,25692,25688],{"id":25693},"_1简介",[115,25695,25697],{"id":25696},"_11什么是-docker","1.1什么是 Docker？",[14,25699,25700,25701,25704,25705],{},"Docker 是一个开源的 ",[304,25702,25703],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[304,25706,25707],{},"一次构建，到处运行。",[14,25709,25710,25711,25714],{},"“ ",[304,25712,25713],{},"一次构建，到处运行"," ”也就是说：",[98,25716,25717],{},[101,25718,25719],{},[304,25720,25721],{},"之前：",[14,25723,25724],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[98,25726,25727],{},[101,25728,25729],{},[304,25730,25731],{},"使用docker后：",[14,25733,25734],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,25736,25737],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[115,25739,25741],{"id":25740},"_12它是怎么工作的","1.2.它是怎么工作的？",[1162,25743,25744,25747],{},[101,25745,25746],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[101,25748,25749,25750,25753],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[304,25751,25752],{},"无论在哪运行都一样稳定"," 。",[115,25755,25757],{"id":25756},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[292,25759,25760,25770],{},[295,25761,25762],{},[298,25763,25764,25767],{},[301,25765,25766],{"align":23768},"概念",[301,25768,25769],{"align":23768},"解释",[339,25771,25772,25780,25788,25796],{},[298,25773,25774,25777],{},[344,25775,25776],{"align":23768},"镜像",[344,25778,25779],{"align":23768},"Image，运行容器的模板，像是一个应用快照",[298,25781,25782,25785],{},[344,25783,25784],{"align":23768},"容器",[344,25786,25787],{"align":23768},"Container，运行中的镜像实例，有自己的文件系统、网络等",[298,25789,25790,25793],{},[344,25791,25792],{"align":23768},"Dockerfile",[344,25794,25795],{"align":23768},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[298,25797,25798,25801],{},[344,25799,25800],{"align":23768},"仓库",[344,25802,25803],{"align":23768},"Registry，存放镜像的地方，比如 Docker Hub",[14,25805,25806],{},"抽象化理解:",[14,25808,25809],{},"Docker镜像≈C++类",[14,25811,25812],{},"Docker容器≈C++类实例(即对象)",[14,25814,25815],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,25817,25818],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[115,25820,25822],{"id":25821},"_14类比理解","1.4.类比理解",[292,25824,25825,25835],{},[295,25826,25827],{},[298,25828,25829,25832],{},[301,25830,25831],{"align":23768},"传统部署",[301,25833,25834],{"align":23768},"Docker部署",[339,25836,25837,25845,25853],{},[298,25838,25839,25842],{},[344,25840,25841],{"align":23768},"手动安装依赖、调试版本不一致问题",[344,25843,25844],{"align":23768},"一次打包环境和代码",[298,25846,25847,25850],{},[344,25848,25849],{"align":23768},"程序“裸奔”跑在系统上",[344,25851,25852],{"align":23768},"程序“穿着容器”隔离运行",[298,25854,25855,25858],{},[344,25856,25857],{"align":23768},"容易“在我电脑上能跑”",[344,25859,25860],{"align":23768},"保证“无论在哪都能跑”",[14,25862,25863,25864],{},"就像快递包裹： ",[304,25865,25866],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[115,25868,25870],{"id":25869},"_15docker-的核心优势","1.5.Docker 的核心优势",[292,25872,25873,25883],{},[295,25874,25875],{},[298,25876,25877,25880],{},[301,25878,25879],{"align":23768},"优势",[301,25881,25882],{"align":23768},"说明",[339,25884,25885,25893,25901,25909,25917],{},[298,25886,25887,25890],{},[344,25888,25889],{"align":23768},"轻量级",[344,25891,25892],{"align":23768},"基于系统内核共享，启动速度快，占资源少",[298,25894,25895,25898],{},[344,25896,25897],{"align":23768},"跨平台",[344,25899,25900],{"align":23768},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[298,25902,25903,25906],{},[344,25904,25905],{"align":23768},"易于迁移部署",[344,25907,25908],{"align":23768},"应用和环境一起封装，不怕依赖不一致",[298,25910,25911,25914],{},[344,25912,25913],{"align":23768},"易于版本控制",[344,25915,25916],{"align":23768},"镜像版本可控，支持回滚",[298,25918,25919,25922],{},[344,25920,25921],{"align":23768},"生态丰富",[344,25923,25924],{"align":23768},"Docker Hub 上有成千上万的现成镜像可用",[98,25926,25927],{},[101,25928,25929],{},"在Linux上可以几乎实现无性能损失。",[14,25931,25932],{},"docker里的发行版和本机共用Linux内核。",[14,25934,25935],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[98,25937,25938],{},[101,25939,25940],{},"可以快速部署在绝大多数Linux发行版",[14,25942,25943],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[98,25945,25946],{},[101,25947,25948],{},"配置环境简单",[14,25950,25951],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,25953,25954],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[98,25956,25957],{},[101,25958,25921],{},[14,25960,25961],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,25963,25964],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[115,25966,25968],{"id":25967},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1162,25970,25971,25974,25977,25980],{},[101,25972,25973],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[101,25975,25976],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[101,25978,25979],{},"微服务架构：每个服务一个容器，灵活组合",[101,25981,25982],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":30,"searchDepth":66,"depth":66,"links":25984},[25985,25986,25987,25988,25989,25990],{"id":25696,"depth":1210,"text":25697},{"id":25740,"depth":1210,"text":25741},{"id":25756,"depth":1210,"text":25757},{"id":25821,"depth":1210,"text":25822},{"id":25869,"depth":1210,"text":25870},{"id":25967,"depth":1210,"text":25968},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25688,"description":30},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":25997,"title":25998,"body":25999,"description":30,"extension":70,"meta":26732,"navigation":72,"path":26733,"seo":26734,"stem":26735,"__hash__":26736},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26000,"toc":26727},[26001,26004,26008,26011,26014,26020,26026,26030,26039,26042,26099,26102,26153,26156,26239,26242,26279,26283,26294,26307,26314,26317,26397,26400,26450,26453,26476,26480,26487,26490,26506,26512,26515,26531,26537,26540,26556,26570,26576,26596,26602,26605,26617,26623,26626,26640,26646,26649,26669,26674,26677,26680,26684,26687,26690,26693,26700,26703,26706,26709,26714,26719,26724],[10,26002,25998],{"id":26003},"_2安装docker",[115,26005,26007],{"id":26006},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,26009,26010],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,26012,26013],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,26015,26016],{},[393,26017,26018],{"href":26018,"rel":26019},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23897],[14,26021,26022],{},[393,26023,26024],{"href":26024,"rel":26025},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23897],[22029,26027,26029],{"id":26028},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26031,26032,26033,26038],{},"以下内容根据 ",[393,26034,26037],{"href":26035,"rel":26036},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23897],"官方文档"," 修改而来。",[14,26040,26041],{},"如果你过去安装过 docker，先删掉：",[135,26043,26045],{"className":23854,"code":26044,"language":23856,"meta":30,"style":30},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[141,26046,26047],{"__ignoreMap":30},[144,26048,26049,26051,26054,26057,26060,26063,26066,26069,26072,26075,26078,26081,26084,26087,26090,26093,26096],{"class":146,"line":147},[144,26050,3055],{"class":150},[144,26052,26053],{"class":154}," pkg ",[144,26055,26056],{"class":150},"in",[144,26058,26059],{"class":259}," docker.io",[144,26061,26062],{"class":259}," docker-doc",[144,26064,26065],{"class":259}," docker-compose",[144,26067,26068],{"class":259}," docker-compose-v2",[144,26070,26071],{"class":259}," podman-docker",[144,26073,26074],{"class":259}," containerd",[144,26076,26077],{"class":259}," runc",[144,26079,26080],{"class":154},"; ",[144,26082,26083],{"class":150},"do",[144,26085,26086],{"class":1993}," sudo",[144,26088,26089],{"class":259}," apt-get",[144,26091,26092],{"class":259}," remove",[144,26094,26095],{"class":154}," $pkg; ",[144,26097,26098],{"class":150},"done\n",[14,26100,26101],{},"首先安装依赖和GPG：",[135,26103,26107],{"className":26104,"code":26105,"language":26106,"meta":30,"style":30},"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",[141,26108,26109,26114,26119,26124,26129,26134,26139,26143,26148],{"__ignoreMap":30},[144,26110,26111],{"class":146,"line":147},[144,26112,26113],{},"# Add Docker's official GPG key:\n",[144,26115,26116],{"class":146,"line":66},[144,26117,26118],{},"sudo apt-get update\n",[144,26120,26121],{"class":146,"line":1210},[144,26122,26123],{},"sudo apt-get install ca-certificates curl\n",[144,26125,26126],{"class":146,"line":1225},[144,26127,26128],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[144,26130,26131],{"class":146,"line":1231},[144,26132,26133],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[144,26135,26136],{"class":146,"line":1245},[144,26137,26138],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[144,26140,26141],{"class":146,"line":1251},[144,26142,2430],{"emptyLinePlaceholder":72},[144,26144,26145],{"class":146,"line":1342},[144,26146,26147],{},"# 如果上面这行报错就弄下面这行\n",[144,26149,26150],{"class":146,"line":1348},[144,26151,26152],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26154,26155],{},"信任 Docker 的 GPG 公钥并添加仓库：",[135,26157,26159],{"className":23854,"code":26158,"language":23856,"meta":30,"style":30},"# 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",[141,26160,26161,26166,26172,26189,26222],{"__ignoreMap":30},[144,26162,26163],{"class":146,"line":147},[144,26164,26165],{"class":213},"# Add the repository to Apt sources:\n",[144,26167,26168,26170],{"class":146,"line":66},[144,26169,25138],{"class":203},[144,26171,24691],{"class":203},[144,26173,26174,26177,26180,26183,26186],{"class":146,"line":1210},[144,26175,26176],{"class":259},"  \"deb [arch=$(",[144,26178,26179],{"class":1993},"dpkg",[144,26181,26182],{"class":203}," --print-architecture",[144,26184,26185],{"class":259},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[144,26187,26188],{"class":203},"\\\n",[144,26190,26191,26194,26196,26198,26201,26204,26206,26208,26211,26213,26215,26218,26220],{"class":146,"line":1225},[144,26192,26193],{"class":259},"  \"",[144,26195,25112],{"class":154},[144,26197,713],{"class":203},[144,26199,26200],{"class":259}," \u002Fetc\u002Fos-release",[144,26202,26203],{"class":154}," && ",[144,26205,25138],{"class":203},[144,26207,9755],{"class":259},[144,26209,26210],{"class":154},"$VERSION_CODENAME",[144,26212,406],{"class":259},[144,26214,584],{"class":154},[144,26216,26217],{"class":259},"\" stable\"",[144,26219,25122],{"class":150},[144,26221,24691],{"class":203},[144,26223,26224,26227,26230,26233,26236],{"class":146,"line":1231},[144,26225,26226],{"class":1993},"  sudo",[144,26228,26229],{"class":259}," tee",[144,26231,26232],{"class":259}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[144,26234,26235],{"class":150}," >",[144,26237,26238],{"class":259}," \u002Fdev\u002Fnull\n",[14,26240,26241],{},"最后安装",[135,26243,26245],{"className":23854,"code":26244,"language":23856,"meta":30,"style":30},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[141,26246,26247,26256],{"__ignoreMap":30},[144,26248,26249,26251,26253],{"class":146,"line":147},[144,26250,24589],{"class":1993},[144,26252,26089],{"class":259},[144,26254,26255],{"class":259}," update\n",[144,26257,26258,26260,26262,26264,26267,26270,26273,26276],{"class":146,"line":66},[144,26259,24589],{"class":1993},[144,26261,26089],{"class":259},[144,26263,23866],{"class":259},[144,26265,26266],{"class":259}," docker-ce",[144,26268,26269],{"class":259}," docker-ce-cli",[144,26271,26272],{"class":259}," containerd.io",[144,26274,26275],{"class":259}," docker-buildx-plugin",[144,26277,26278],{"class":259}," docker-compose-plugin\n",[22029,26280,26282],{"id":26281},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,26284,26285,26286,26289,26290,26293],{},"查看自己自己包管理工具版本（dnf是 ",[304,26287,26288],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[304,26291,26292],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[135,26295,26297],{"className":23854,"code":26296,"language":23856,"meta":30,"style":30},"dnf --version\n",[141,26298,26299],{"__ignoreMap":30},[144,26300,26301,26304],{"class":146,"line":147},[144,26302,26303],{"class":1993},"dnf",[144,26305,26306],{"class":203}," --version\n",[14,26308,26032,26309,26313],{},[393,26310,26037],{"href":26311,"rel":26312},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23897]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,26315,26316],{},"如果你之前安装过 docker，请先删掉",[135,26318,26320],{"className":23854,"code":26319,"language":23856,"meta":30,"style":30},"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",[141,26321,26322,26336,26343,26350,26357,26364,26371,26378,26385,26392],{"__ignoreMap":30},[144,26323,26324,26326,26329,26331,26334],{"class":146,"line":147},[144,26325,24589],{"class":1993},[144,26327,26328],{"class":259}," dnf",[144,26330,26092],{"class":259},[144,26332,26333],{"class":259}," docker",[144,26335,24691],{"class":203},[144,26337,26338,26341],{"class":146,"line":66},[144,26339,26340],{"class":259},"                  docker-client",[144,26342,24691],{"class":203},[144,26344,26345,26348],{"class":146,"line":1210},[144,26346,26347],{"class":259},"                  docker-client-latest",[144,26349,24691],{"class":203},[144,26351,26352,26355],{"class":146,"line":1225},[144,26353,26354],{"class":259},"                  docker-common",[144,26356,24691],{"class":203},[144,26358,26359,26362],{"class":146,"line":1231},[144,26360,26361],{"class":259},"                  docker-latest",[144,26363,24691],{"class":203},[144,26365,26366,26369],{"class":146,"line":1245},[144,26367,26368],{"class":259},"                  docker-latest-logrotate",[144,26370,24691],{"class":203},[144,26372,26373,26376],{"class":146,"line":1251},[144,26374,26375],{"class":259},"                  docker-logrotate",[144,26377,24691],{"class":203},[144,26379,26380,26383],{"class":146,"line":1342},[144,26381,26382],{"class":259},"                  docker-selinux",[144,26384,24691],{"class":203},[144,26386,26387,26390],{"class":146,"line":1348},[144,26388,26389],{"class":259},"                  docker-engine-selinux",[144,26391,24691],{"class":203},[144,26393,26394],{"class":146,"line":1360},[144,26395,26396],{"class":259},"                  docker-engine\n",[14,26398,26399],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[135,26401,26403],{"className":23854,"code":26402,"language":23856,"meta":30,"style":30},"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",[141,26404,26405,26419,26434],{"__ignoreMap":30},[144,26406,26407,26409,26411,26414,26416],{"class":146,"line":147},[144,26408,24589],{"class":1993},[144,26410,26328],{"class":259},[144,26412,26413],{"class":203}," -y",[144,26415,23866],{"class":259},[144,26417,26418],{"class":259}," dnf-plugins-core\n",[144,26420,26421,26423,26425,26428,26431],{"class":146,"line":66},[144,26422,24589],{"class":1993},[144,26424,26328],{"class":259},[144,26426,26427],{"class":259}," config-manager",[144,26429,26430],{"class":259}," addrepo",[144,26432,26433],{"class":203}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[144,26435,26436,26438,26441,26444,26447],{"class":146,"line":1210},[144,26437,24589],{"class":1993},[144,26439,26440],{"class":259}," sed",[144,26442,26443],{"class":203}," -i",[144,26445,26446],{"class":259}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[144,26448,26449],{"class":259}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,26451,26452],{},"最后安装：",[135,26454,26456],{"className":23854,"code":26455,"language":23856,"meta":30,"style":30},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[141,26457,26458],{"__ignoreMap":30},[144,26459,26460,26462,26464,26466,26468,26470,26472,26474],{"class":146,"line":147},[144,26461,24589],{"class":1993},[144,26463,26328],{"class":259},[144,26465,23866],{"class":259},[144,26467,26266],{"class":259},[144,26469,26269],{"class":259},[144,26471,26272],{"class":259},[144,26473,26275],{"class":259},[144,26475,26278],{"class":259},[115,26477,26479],{"id":26478},"_22配置环境","2.2.配置环境",[22029,26481,26483,26486],{"id":26482},"_221检查-docker-服务状态",[304,26484,26485],{},"2.2.1.检查 Docker 服务状态"," ：",[14,26488,26489],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[135,26491,26493],{"className":23854,"code":26492,"language":23856,"meta":30,"style":30},"systemctl status docker\n",[141,26494,26495],{"__ignoreMap":30},[144,26496,26497,26500,26503],{"class":146,"line":147},[144,26498,26499],{"class":1993},"systemctl",[144,26501,26502],{"class":259}," status",[144,26504,26505],{"class":259}," docker\n",[22029,26507,26509,26486],{"id":26508},"_222启动-docker-服务",[304,26510,26511],{},"2.2.2.启动 Docker 服务",[14,26513,26514],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[135,26516,26518],{"className":23854,"code":26517,"language":23856,"meta":30,"style":30},"sudo systemctl start docker\n",[141,26519,26520],{"__ignoreMap":30},[144,26521,26522,26524,26527,26529],{"class":146,"line":147},[144,26523,24589],{"class":1993},[144,26525,26526],{"class":259}," systemctl",[144,26528,4214],{"class":259},[144,26530,26505],{"class":259},[22029,26532,26534,26486],{"id":26533},"_223设置-docker-开机自启",[304,26535,26536],{},"2.2.3.设置 Docker 开机自启",[14,26538,26539],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[135,26541,26543],{"className":23854,"code":26542,"language":23856,"meta":30,"style":30},"sudo systemctl enable docker\n",[141,26544,26545],{"__ignoreMap":30},[144,26546,26547,26549,26551,26554],{"class":146,"line":147},[144,26548,24589],{"class":1993},[144,26550,26526],{"class":259},[144,26552,26553],{"class":259}," enable",[144,26555,26505],{"class":259},[22029,26557,26559,13826,26562,13826,26567,26486],{"id":26558},"_224将用户添加到-docker-组",[304,26560,26561],{},"2.2.4.将用户添加到",[304,26563,26564],{},[141,26565,26566],{},"docker",[304,26568,26569],{},"组",[14,26571,26572,26573,26575],{},"使用以下命令将当前用户添加到 ",[141,26574,26566],{}," 组：",[135,26577,26579],{"className":23854,"code":26578,"language":23856,"meta":30,"style":30},"sudo usermod -aG docker $USER\n",[141,26580,26581],{"__ignoreMap":30},[144,26582,26583,26585,26588,26591,26593],{"class":146,"line":147},[144,26584,24589],{"class":1993},[144,26586,26587],{"class":259}," usermod",[144,26589,26590],{"class":203}," -aG",[144,26592,26333],{"class":259},[144,26594,26595],{"class":154}," $USER\n",[22029,26597,26599,26486],{"id":26598},"_225退出并重新登录",[304,26600,26601],{},"2.2.5.退出并重新登录",[14,26603,26604],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[135,26606,26608],{"className":23854,"code":26607,"language":23856,"meta":30,"style":30},"newgrp docker\n",[141,26609,26610],{"__ignoreMap":30},[144,26611,26612,26615],{"class":146,"line":147},[144,26613,26614],{"class":1993},"newgrp",[144,26616,26505],{"class":259},[22029,26618,26620,26486],{"id":26619},"_226重新启动-docker-服务如果需要",[304,26621,26622],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,26624,26625],{},"确保 Docker 服务正在运行，可以使用以下命令：",[135,26627,26628],{"className":23854,"code":26517,"language":23856,"meta":30,"style":30},[141,26629,26630],{"__ignoreMap":30},[144,26631,26632,26634,26636,26638],{"class":146,"line":147},[144,26633,24589],{"class":1993},[144,26635,26526],{"class":259},[144,26637,4214],{"class":259},[144,26639,26505],{"class":259},[22029,26641,26643,26486],{"id":26642},"_227重启电脑后检查-docker-服务状态",[304,26644,26645],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,26647,26648],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[135,26650,26652],{"className":23854,"code":26651,"language":23856,"meta":30,"style":30},"sudo reboot\nsystemctl status docker\n",[141,26653,26654,26661],{"__ignoreMap":30},[144,26655,26656,26658],{"class":146,"line":147},[144,26657,24589],{"class":1993},[144,26659,26660],{"class":259}," reboot\n",[144,26662,26663,26665,26667],{"class":146,"line":66},[144,26664,26499],{"class":1993},[144,26666,26502],{"class":259},[144,26668,26505],{"class":259},[14,26670,26671],{},[28,26672],{"alt":30,"src":26673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,26675,26676],{},"第三行显示enabled说明开机自启动成功",[14,26678,26679],{},"按q退出",[115,26681,26683],{"id":26682},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,26685,26686],{},"优先使用linux来使用docker是比较好的",[14,26688,26689],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,26691,26692],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,26694,26695,26696],{},"官方下载安装:",[393,26697,26698],{"href":26698,"rel":26699},"https:\u002F\u002Fwww.docker.com\u002F",[23897],[14,26701,26702],{},"Windows的Docker显卡直通与USB直通:",[14,26704,26705],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,26707,26708],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,26710,26711],{},[28,26712],{"alt":30,"src":26713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,26715,26716],{},[28,26717],{"alt":30,"src":26718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,26720,26721],{},[28,26722],{"alt":30,"src":26723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5157,26725,26726],{},"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":30,"searchDepth":66,"depth":66,"links":26728},[26729,26730,26731],{"id":26006,"depth":1210,"text":26007},{"id":26478,"depth":1210,"text":26479},{"id":26682,"depth":1210,"text":26683},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":25998,"description":30},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26738,"title":26739,"body":26740,"description":26747,"extension":70,"meta":27440,"navigation":72,"path":27441,"seo":27442,"stem":27443,"__hash__":27444},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26741,"toc":27434},[26742,26745,26748,26752,26757,26762,26765,26793,26798,26807,26810,26815,26819,26826,26831,26837,26841,26844,26848,26853,26945,26950,26968,26973,26994,26999,27015,27019,27024,27053,27058,27104,27109,27153,27161,27178,27183,27199,27204,27218,27221,27224,27227,27230,27259,27262,27267,27271,27274,27277,27283,27286,27289,27292,27354,27361,27366,27369,27387,27391,27394,27411,27414,27417,27431],[10,26743,26739],{"id":26744},"_3docker直通",[14,26746,26747],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[115,26749,26751],{"id":26750},"_31usb直通","3.1.USB直通",[14,26753,26754],{},[28,26755],{"alt":30,"src":26756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[98,26758,26759],{},[101,26760,26761],{},"方法一(不是很推荐新手)：",[14,26763,26764],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[135,26766,26768],{"className":23854,"code":26767,"language":23856,"meta":30,"style":30},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[141,26769,26770,26778,26783],{"__ignoreMap":30},[144,26771,26772,26775],{"class":146,"line":147},[144,26773,26774],{"class":1993},"ls",[144,26776,26777],{"class":259}," \u002Fdev\n",[144,26779,26780],{"class":146,"line":66},[144,26781,26782],{"class":213},"#例如\n",[144,26784,26785,26788,26790],{"class":146,"line":1210},[144,26786,26787],{"class":154},"--device",[144,26789,200],{"class":150},[144,26791,26792],{"class":259},"\u002Fdev\u002Ftty_USB0\n",[98,26794,26795],{"start":66},[101,26796,26797],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[135,26799,26801],{"className":23854,"code":26800,"language":23856,"meta":30,"style":30},"--privileged\n",[141,26802,26803],{"__ignoreMap":30},[144,26804,26805],{"class":146,"line":147},[144,26806,26800],{"class":1993},[14,26808,26809],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,26811,26812],{},[28,26813],{"alt":30,"src":26814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[115,26816,26818],{"id":26817},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,26820,26821,26822,26825],{},"NVIDIA Container Toolkit使用户 ",[304,26823,26824],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,26827,26828],{},[28,26829],{"alt":30,"src":26830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,26832,26833],{},[393,26834,26835],{"href":26835,"rel":26836},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23897],[22029,26838,26840],{"id":26839},"_321安装","3.2.1.安装",[14,26842,26843],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22941,26845,26847],{"id":26846},"_3211ubuntu","3.2.1.1.Ubuntu",[98,26849,26850],{},[101,26851,26852],{},"配置存储库 并更新",[135,26854,26856],{"className":23854,"code":26855,"language":23856,"meta":30,"style":30},"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",[141,26857,26858,26887,26907,26919,26931,26937],{"__ignoreMap":30},[144,26859,26860,26863,26866,26869,26871,26873,26876,26879,26882,26885],{"class":146,"line":147},[144,26861,26862],{"class":1993},"curl",[144,26864,26865],{"class":203}," -fsSL",[144,26867,26868],{"class":259}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[144,26870,25122],{"class":150},[144,26872,26086],{"class":1993},[144,26874,26875],{"class":259}," gpg",[144,26877,26878],{"class":203}," --dearmor",[144,26880,26881],{"class":203}," -o",[144,26883,26884],{"class":259}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[144,26886,24691],{"class":203},[144,26888,26889,26892,26894,26897,26900,26903,26905],{"class":146,"line":66},[144,26890,26891],{"class":154},"  && ",[144,26893,26862],{"class":1993},[144,26895,26896],{"class":203}," -s",[144,26898,26899],{"class":203}," -L",[144,26901,26902],{"class":259}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[144,26904,25122],{"class":150},[144,26906,24691],{"class":203},[144,26908,26909,26912,26915,26917],{"class":146,"line":1210},[144,26910,26911],{"class":1993},"    sed",[144,26913,26914],{"class":259}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[144,26916,25122],{"class":150},[144,26918,24691],{"class":203},[144,26920,26921,26924,26926,26929],{"class":146,"line":1225},[144,26922,26923],{"class":1993},"    sudo",[144,26925,26229],{"class":259},[144,26927,26928],{"class":259}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[144,26930,24691],{"class":203},[144,26932,26933,26935],{"class":146,"line":1231},[144,26934,26891],{"class":154},[144,26936,26188],{"class":203},[144,26938,26939,26941,26943],{"class":146,"line":1245},[144,26940,26923],{"class":1993},[144,26942,26089],{"class":259},[144,26944,26255],{"class":259},[98,26946,26947],{"start":66},[101,26948,26949],{},"安装nvidia-docker2",[135,26951,26953],{"className":23854,"code":26952,"language":23856,"meta":30,"style":30},"sudo apt-get install -y nvidia-docker2\n",[141,26954,26955],{"__ignoreMap":30},[144,26956,26957,26959,26961,26963,26965],{"class":146,"line":147},[144,26958,24589],{"class":1993},[144,26960,26089],{"class":259},[144,26962,23866],{"class":259},[144,26964,26413],{"class":203},[144,26966,26967],{"class":259}," nvidia-docker2\n",[98,26969,26970],{"start":1210},[101,26971,26972],{},"使用nvidia-ctk命令配置container runtime",[135,26974,26976],{"className":23854,"code":26975,"language":23856,"meta":30,"style":30},"sudo nvidia-ctk runtime configure --runtime=docker\n",[141,26977,26978],{"__ignoreMap":30},[144,26979,26980,26982,26985,26988,26991],{"class":146,"line":147},[144,26981,24589],{"class":1993},[144,26983,26984],{"class":259}," nvidia-ctk",[144,26986,26987],{"class":259}," runtime",[144,26989,26990],{"class":259}," configure",[144,26992,26993],{"class":203}," --runtime=docker\n",[98,26995,26996],{"start":1225},[101,26997,26998],{},"重启docker服务:",[135,27000,27002],{"className":23854,"code":27001,"language":23856,"meta":30,"style":30},"sudo systemctl restart docker\n",[141,27003,27004],{"__ignoreMap":30},[144,27005,27006,27008,27010,27013],{"class":146,"line":147},[144,27007,24589],{"class":1993},[144,27009,26526],{"class":259},[144,27011,27012],{"class":259}," restart",[144,27014,26505],{"class":259},[22941,27016,27018],{"id":27017},"_3212fedora","3.2.1.2.Fedora",[98,27020,27021],{},[101,27022,27023],{},"配置存储库",[135,27025,27027],{"className":23854,"code":27026,"language":23856,"meta":30,"style":30},"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",[141,27028,27029,27044],{"__ignoreMap":30},[144,27030,27031,27033,27035,27037,27040,27042],{"class":146,"line":147},[144,27032,26862],{"class":1993},[144,27034,26896],{"class":203},[144,27036,26899],{"class":203},[144,27038,27039],{"class":259}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[144,27041,25122],{"class":150},[144,27043,24691],{"class":203},[144,27045,27046,27048,27050],{"class":146,"line":66},[144,27047,24589],{"class":1993},[144,27049,26229],{"class":259},[144,27051,27052],{"class":259}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[98,27054,27055],{"start":66},[101,27056,27057],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[135,27059,27061],{"className":23854,"code":27060,"language":23856,"meta":30,"style":30},"# 如果是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",[141,27062,27063,27068,27082,27086,27091],{"__ignoreMap":30},[144,27064,27065],{"class":146,"line":147},[144,27066,27067],{"class":213},"# 如果是RHEL或者Rocky（DNF4）\n",[144,27069,27070,27072,27074,27076,27079],{"class":146,"line":66},[144,27071,24589],{"class":1993},[144,27073,26328],{"class":259},[144,27075,26427],{"class":259},[144,27077,27078],{"class":203}," --add-repo",[144,27080,27081],{"class":259}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[144,27083,27084],{"class":146,"line":1210},[144,27085,2430],{"emptyLinePlaceholder":72},[144,27087,27088],{"class":146,"line":1225},[144,27089,27090],{"class":213},"# 如果是Feodra41+（DNF5）\n",[144,27092,27093,27095,27097,27099,27101],{"class":146,"line":1231},[144,27094,24589],{"class":1993},[144,27096,26328],{"class":259},[144,27098,26427],{"class":259},[144,27100,26430],{"class":259},[144,27102,27103],{"class":203}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[98,27105,27106],{"start":1210},[101,27107,27108],{},"安装NVIDIA Container Toolki包",[135,27110,27112],{"className":23854,"code":27111,"language":23856,"meta":30,"style":30},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[141,27113,27114,27119,27132,27136,27141],{"__ignoreMap":30},[144,27115,27116],{"class":146,"line":147},[144,27117,27118],{"class":213},"# 如果是RHEL或者Rocky\n",[144,27120,27121,27123,27125,27127,27129],{"class":146,"line":66},[144,27122,24589],{"class":1993},[144,27124,26328],{"class":259},[144,27126,23866],{"class":259},[144,27128,26413],{"class":203},[144,27130,27131],{"class":259}," nvidia-container-toolkit\n",[144,27133,27134],{"class":146,"line":1210},[144,27135,2430],{"emptyLinePlaceholder":72},[144,27137,27138],{"class":146,"line":1225},[144,27139,27140],{"class":213},"# 如果是Fedora\n",[144,27142,27143,27145,27147,27149,27151],{"class":146,"line":1231},[144,27144,24589],{"class":1993},[144,27146,26328],{"class":259},[144,27148,23866],{"class":259},[144,27150,26413],{"class":203},[144,27152,27131],{"class":259},[98,27154,27155],{"start":1225},[101,27156,27157,27158,27160],{},"安装nvidia-docker2 ： 在Fedora上使用",[141,27159,26303],{},"进行安装",[135,27162,27164],{"className":23854,"code":27163,"language":23856,"meta":30,"style":30},"sudo dnf install -y nvidia-docker2\n",[141,27165,27166],{"__ignoreMap":30},[144,27167,27168,27170,27172,27174,27176],{"class":146,"line":147},[144,27169,24589],{"class":1993},[144,27171,26328],{"class":259},[144,27173,23866],{"class":259},[144,27175,26413],{"class":203},[144,27177,26967],{"class":259},[98,27179,27180],{"start":1231},[101,27181,27182],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[135,27184,27185],{"className":23854,"code":26975,"language":23856,"meta":30,"style":30},[141,27186,27187],{"__ignoreMap":30},[144,27188,27189,27191,27193,27195,27197],{"class":146,"line":147},[144,27190,24589],{"class":1993},[144,27192,26984],{"class":259},[144,27194,26987],{"class":259},[144,27196,26990],{"class":259},[144,27198,26993],{"class":203},[98,27200,27201],{"start":1245},[101,27202,27203],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[135,27205,27206],{"className":23854,"code":27001,"language":23856,"meta":30,"style":30},[141,27207,27208],{"__ignoreMap":30},[144,27209,27210,27212,27214,27216],{"class":146,"line":147},[144,27211,24589],{"class":1993},[144,27213,26526],{"class":259},[144,27215,27012],{"class":259},[144,27217,26505],{"class":259},[14,27219,27220],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27222,27223],{},"方法：",[14,27225,27226],{},"1️⃣nvidia-smi",[14,27228,27229],{},"2️⃣运行nvidia cuda 容器进行测试",[135,27231,27233],{"className":23854,"code":27232,"language":23856,"meta":30,"style":30},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[141,27234,27235],{"__ignoreMap":30},[144,27236,27237,27239,27241,27244,27247,27250,27253,27256],{"class":146,"line":147},[144,27238,24589],{"class":1993},[144,27240,26333],{"class":259},[144,27242,27243],{"class":259}," run",[144,27245,27246],{"class":203}," --rm",[144,27248,27249],{"class":203}," --gpus",[144,27251,27252],{"class":259}," all",[144,27254,27255],{"class":259}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[144,27257,27258],{"class":259}," nvidia-smi\n",[14,27260,27261],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27263,27264],{},[28,27265],{"alt":30,"src":27266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[115,27268,27270],{"id":27269},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,27272,27273],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,27275,27276],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,27278,27279],{},[393,27280,27281],{"href":27281,"rel":27282},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23897],[14,27284,27285],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,27287,27288],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,27290,27291],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[292,27293,27294,27310],{},[295,27295,27296],{},[298,27297,27298,27301,27304,27307],{},[301,27299,27300],{"align":23768},"镜像类型",[301,27302,27303],{"align":23768},"适用场景",[301,27305,27306],{"align":23768},"示例标签",[301,27308,27309],{"align":23768},"大小",[339,27311,27312,27326,27340],{},[298,27313,27314,27317,27320,27323],{},[344,27315,27316],{"align":23768},"base",[344,27318,27319],{"align":23768},"仅需 CUDA 运行时库",[344,27321,27322],{"align":23768},"12.4.0-base-ubuntu22.04",[344,27324,27325],{"align":23768},"~240MB",[298,27327,27328,27331,27334,27337],{},[344,27329,27330],{"align":23768},"runtime",[344,27332,27333],{"align":23768},"部署编译后的应用（含数学库）",[344,27335,27336],{"align":23768},"12.4.0-runtime-ubuntu22.04",[344,27338,27339],{"align":23768},"~2GB",[298,27341,27342,27345,27348,27351],{},[344,27343,27344],{"align":23768},"devel",[344,27346,27347],{"align":23768},"开发环境（含编译工具）",[344,27349,27350],{"align":23768},"12.4.0-devel-ubuntu22.04",[344,27352,27353],{"align":23768},"~3GB",[14,27355,27356,27357,27360],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[141,27358,27359],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,27362,27363],{},[28,27364],{"alt":30,"src":27365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,27367,27368],{},"在dockerfile里就可以开头这么写：",[135,27370,27372],{"className":23854,"code":27371,"language":23856,"meta":30,"style":30},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[141,27373,27374,27379],{"__ignoreMap":30},[144,27375,27376],{"class":146,"line":147},[144,27377,27378],{"class":213},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[144,27380,27381,27384],{"class":146,"line":66},[144,27382,27383],{"class":1993},"FROM",[144,27385,27386],{"class":259}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[115,27388,27390],{"id":27389},"_34配置以太网","3.4.配置以太网",[14,27392,27393],{},"指定网络模式",[135,27395,27397],{"className":23854,"code":27396,"language":23856,"meta":30,"style":30},"--net=host \\\n",[141,27398,27399],{"__ignoreMap":30},[144,27400,27401,27404,27406,27409],{"class":146,"line":147},[144,27402,27403],{"class":154},"--net",[144,27405,200],{"class":150},[144,27407,27408],{"class":259},"host",[144,27410,24691],{"class":1993},[14,27412,27413],{},"启动参数里加上这行即可。具体在下方",[14,27415,27416],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1162,27418,27419,27422,27425,27428],{},[101,27420,27421],{},"--net=bridge:默认选项，表示连接到默认的网桥",[101,27423,27424],{},"--net=host:容器使用宿主机的网络",[101,27426,27427],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[101,27429,27430],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5157,27432,27433],{},"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":30,"searchDepth":66,"depth":66,"links":27435},[27436,27437,27438,27439],{"id":26750,"depth":1210,"text":26751},{"id":26817,"depth":1210,"text":26818},{"id":27269,"depth":1210,"text":27270},{"id":27389,"depth":1210,"text":27390},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26739,"description":26747},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27446,"title":27447,"body":27448,"description":27455,"extension":70,"meta":27461,"navigation":72,"path":27462,"seo":27463,"stem":27464,"__hash__":27465},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27449,"toc":27459},[27450,27453,27456],[10,27451,27447],{"id":27452},"_4dockerhub换源",[14,27454,27455],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,27457,27458],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":30,"searchDepth":66,"depth":66,"links":27460},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27447,"description":27455},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27467,"title":27468,"body":27469,"description":30,"extension":70,"meta":28481,"navigation":72,"path":28482,"seo":28483,"stem":28484,"__hash__":28485},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27470,"toc":28476},[27471,27474,27478,27484,27488,27491,27831,27834,27837,27840,27845,27850,27853,27856,27859,27862,27881,27884,27895,27901,28083,28093,28109,28372,28374,28399,28414,28423,28473],[10,27472,27468],{"id":27473},"_5docker命令学习",[115,27475,27477],{"id":27476},"_51参考文档","5.1.参考文档",[14,27479,27480],{},[393,27481,27482],{"href":27482,"rel":27483},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23897],[115,27485,27487],{"id":27486},"_52常用命令","5.2.常用命令",[14,27489,27490],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[292,27492,27493,27506],{},[295,27494,27495],{},[298,27496,27497,27500,27503],{},[301,27498,27499],{"align":23768},"命令",[301,27501,27502],{"align":23768},"描述",[301,27504,27505],{"align":23768},"示例",[339,27507,27508,27519,27530,27541,27552,27563,27574,27585,27595,27606,27617,27628,27638,27649,27660,27671,27681,27691,27701,27711,27722,27733,27744,27755,27766,27777,27787,27798,27809,27820],{},[298,27509,27510,27513,27516],{},[344,27511,27512],{"align":23768},"docker run",[344,27514,27515],{"align":23768},"创建并启动一个新的容器。",[344,27517,27518],{"align":23768},"docker run -it ubuntu bash",[298,27520,27521,27524,27527],{},[344,27522,27523],{"align":23768},"docker build",[344,27525,27526],{"align":23768},"通过指定的 Dockerfile 创建一个新的镜像。",[344,27528,27529],{"align":23768},"docker build -t myimage .",[298,27531,27532,27535,27538],{},[344,27533,27534],{"align":23768},"docker pull",[344,27536,27537],{"align":23768},"从 Docker 仓库拉取镜像。",[344,27539,27540],{"align":23768},"docker pull ubuntu",[298,27542,27543,27546,27549],{},[344,27544,27545],{"align":23768},"docker push",[344,27547,27548],{"align":23768},"将本地镜像推送到 Docker 仓库。",[344,27550,27551],{"align":23768},"docker push myimage",[298,27553,27554,27557,27560],{},[344,27555,27556],{"align":23768},"docker stop",[344,27558,27559],{"align":23768},"停止一个正在运行的容器。",[344,27561,27562],{"align":23768},"docker stop container_id",[298,27564,27565,27568,27571],{},[344,27566,27567],{"align":23768},"docker start",[344,27569,27570],{"align":23768},"启动一个已经存在的容器。",[344,27572,27573],{"align":23768},"docker start container_id",[298,27575,27576,27579,27582],{},[344,27577,27578],{"align":23768},"docker restart",[344,27580,27581],{"align":23768},"重新启动容器。",[344,27583,27584],{"align":23768},"docker restart container_id",[298,27586,27587,27590,27593],{},[344,27588,27589],{"align":23768},"docker ps",[344,27591,27592],{"align":23768},"列出当前正在运行的容器。",[344,27594,27589],{"align":23768},[298,27596,27597,27600,27603],{},[344,27598,27599],{"align":23768},"docker rm",[344,27601,27602],{"align":23768},"删除一个或多个停止的容器。",[344,27604,27605],{"align":23768},"docker rm container_id",[298,27607,27608,27611,27614],{},[344,27609,27610],{"align":23768},"docker exec",[344,27612,27613],{"align":23768},"在一个正在运行的容器中执行命令。",[344,27615,27616],{"align":23768},"docker exec -it container_id bash",[298,27618,27619,27622,27625],{},[344,27620,27621],{"align":23768},"docker logs",[344,27623,27624],{"align":23768},"查看容器的日志输出。",[344,27626,27627],{"align":23768},"docker logs container_id",[298,27629,27630,27633,27636],{},[344,27631,27632],{"align":23768},"docker images",[344,27634,27635],{"align":23768},"列出本地所有镜像。",[344,27637,27632],{"align":23768},[298,27639,27640,27643,27646],{},[344,27641,27642],{"align":23768},"docker rmi",[344,27644,27645],{"align":23768},"删除一个或多个镜像。",[344,27647,27648],{"align":23768},"docker rmi myimage",[298,27650,27651,27654,27657],{},[344,27652,27653],{"align":23768},"docker network",[344,27655,27656],{"align":23768},"管理 Docker 网络。",[344,27658,27659],{"align":23768},"docker network ls",[298,27661,27662,27665,27668],{},[344,27663,27664],{"align":23768},"docker volume",[344,27666,27667],{"align":23768},"管理 Docker 数据卷。",[344,27669,27670],{"align":23768},"docker volume ls",[298,27672,27673,27676,27679],{},[344,27674,27675],{"align":23768},"docker-compose up",[344,27677,27678],{"align":23768},"启动 docker-compose.yml 中定义的所有服务。",[344,27680,27675],{"align":23768},[298,27682,27683,27686,27689],{},[344,27684,27685],{"align":23768},"docker-compose down",[344,27687,27688],{"align":23768},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[344,27690,27685],{"align":23768},[298,27692,27693,27696,27699],{},[344,27694,27695],{"align":23768},"docker info",[344,27697,27698],{"align":23768},"显示 Docker 系统的详细信息。",[344,27700,27695],{"align":23768},[298,27702,27703,27706,27709],{},[344,27704,27705],{"align":23768},"docker stats",[344,27707,27708],{"align":23768},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[344,27710,27705],{"align":23768},[298,27712,27713,27716,27719],{},[344,27714,27715],{"align":23768},"docker inspect",[344,27717,27718],{"align":23768},"查看容器或镜像的详细信息（JSON 格式）。",[344,27720,27721],{"align":23768},"docker inspect container_id",[298,27723,27724,27727,27730],{},[344,27725,27726],{"align":23768},"docker save",[344,27728,27729],{"align":23768},"将一个镜像保存为 tar 文件。",[344,27731,27732],{"align":23768},"docker save -o myimage.tar myimage",[298,27734,27735,27738,27741],{},[344,27736,27737],{"align":23768},"docker load",[344,27739,27740],{"align":23768},"从 tar 文件中加载镜像。",[344,27742,27743],{"align":23768},"docker load -i myimage.tar",[298,27745,27746,27749,27752],{},[344,27747,27748],{"align":23768},"docker tag",[344,27750,27751],{"align":23768},"为镜像添加标签（tag）。",[344,27753,27754],{"align":23768},"docker tag myimage myimage:v1",[298,27756,27757,27760,27763],{},[344,27758,27759],{"align":23768},"docker buildx build",[344,27761,27762],{"align":23768},"使用 Buildx 构建多架构镜像。",[344,27764,27765],{"align":23768},"docker buildx build -t myimage .",[298,27767,27768,27771,27774],{},[344,27769,27770],{"align":23768},"docker buildx create",[344,27772,27773],{"align":23768},"创建一个新的 Buildx 构建实例。",[344,27775,27776],{"align":23768},"docker buildx create –use",[298,27778,27779,27782,27785],{},[344,27780,27781],{"align":23768},"docker buildx ls",[344,27783,27784],{"align":23768},"列出所有可用的 Buildx 构建实例。",[344,27786,27781],{"align":23768},[298,27788,27789,27792,27795],{},[344,27790,27791],{"align":23768},"docker buildx use",[344,27793,27794],{"align":23768},"设置当前的 Buildx 构建实例。",[344,27796,27797],{"align":23768},"docker buildx use mybuilder",[298,27799,27800,27803,27806],{},[344,27801,27802],{"align":23768},"docker buildx bake",[344,27804,27805],{"align":23768},"使用 Bake 文件批量构建镜像。",[344,27807,27808],{"align":23768},"docker buildx bake -f bake.hcl",[298,27810,27811,27814,27817],{},[344,27812,27813],{"align":23768},"docker buildx build –push",[344,27815,27816],{"align":23768},"构建镜像并推送到镜像仓库。",[344,27818,27819],{"align":23768},"docker buildx build –push -t myimage .",[298,27821,27822,27825,27828],{},[344,27823,27824],{"align":23768},"docker buildx build –platform",[344,27826,27827],{"align":23768},"构建镜像并为多个平台生成支持。",[344,27829,27830],{"align":23768},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,27832,27833],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,27835,27836],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,27838,27839],{},"docker images 可以查看已经下载的镜像",[14,27841,27842],{},[28,27843],{"alt":30,"src":27844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,27846,27847],{},[304,27848,27849],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,27851,27852],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,27854,27855],{},"docker container logs 查看容器日志",[14,27857,27858],{},"docker top 查看容器里的进程",[14,27860,27861],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[135,27863,27865],{"className":23854,"code":27864,"language":23856,"meta":30,"style":30},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[141,27866,27867],{"__ignoreMap":30},[144,27868,27869,27872,27875,27878],{"class":146,"line":147},[144,27870,27871],{"class":1993},"如：docker",[144,27873,27874],{"class":259}," cp",[144,27876,27877],{"class":259}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[144,27879,27880],{"class":259}," \u002Fmydata\u002Fnginx\n",[14,27882,27883],{},"docker run时在启动容器的时候会有几个常用的选项：",[1162,27885,27886,27889,27892],{},[101,27887,27888],{},"-d选项：表示后台运行",[101,27890,27891],{},"-P选项：随机端口映射",[101,27893,27894],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[115,27896,27898],{"id":27897},"_53run命令的参数非常重要",[304,27899,27900],{},"5.3.run命令的参数（非常重要）",[292,27902,27903,27916],{},[295,27904,27905],{},[298,27906,27907,27910,27913],{},[301,27908,27909],{"align":23768},"参数\u002F配置",[301,27911,27912],{"align":23768},"功能说明",[301,27914,27915],{"align":23768},"重要性与参考依据",[339,27917,27918,27929,27940,27951,27962,27973,27984,27995,28006,28017,28028,28039,28050,28061,28072],{},[298,27919,27920,27923,27926],{},[344,27921,27922],{"align":23768},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[344,27924,27925],{"align":23768},"指定容器名称，便于后续管理",[344,27927,27928],{"align":23768},"替代随机生成的容器名。",[298,27930,27931,27934,27937],{},[344,27932,27933],{"align":23768},"–gpus all",[344,27935,27936],{"align":23768},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[344,27938,27939],{"align":23768},"用于CUDA加速等GPU依赖任务。",[298,27941,27942,27945,27948],{},[344,27943,27944],{"align":23768},"-e NVIDIA_DRIVER_CAPABILITIES=all",[344,27946,27947],{"align":23768},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[344,27949,27950],{"align":23768},"确保容器内GPU功能完整67。",[298,27952,27953,27956,27959],{},[344,27954,27955],{"align":23768},"-dit",[344,27957,27958],{"align":23768},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[344,27960,27961],{"align":23768},"允许容器在后台运行并支持交互操作。",[298,27963,27964,27967,27970],{},[344,27965,27966],{"align":23768},"–privileged",[344,27968,27969],{"align":23768},"赋予容器完全主机权限（可访问设备、内核模块等）",[344,27971,27972],{"align":23768},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[298,27974,27975,27978,27981],{},[344,27976,27977],{"align":23768},"–net=host",[344,27979,27980],{"align":23768},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[344,27982,27983],{"align":23768},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[298,27985,27986,27989,27992],{},[344,27987,27988],{"align":23768},"–group-add audio–group-add video–group-add dialout",[344,27990,27991],{"align":23768},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[344,27993,27994],{"align":23768},"避免权限问题（如避免无法调用摄像头、麦克风）。",[298,27996,27997,28000,28003],{},[344,27998,27999],{"align":23768},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[344,28001,28002],{"align":23768},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[344,28004,28005],{"align":23768},"支持容器内运行图形界面应用（如OpenCV可视化）。",[298,28007,28008,28011,28014],{},[344,28009,28010],{"align":23768},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[344,28012,28013],{"align":23768},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[344,28015,28016],{"align":23768},"实现容器内图形显示。",[298,28018,28019,28022,28025],{},[344,28020,28021],{"align":23768},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[344,28023,28024],{"align":23768},"挂载X11认证文件（只读）",[344,28026,28027],{"align":23768},"确保容器有权连接宿主机显示服务。",[298,28029,28030,28033,28036],{},[344,28031,28032],{"align":23768},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[344,28034,28035],{"align":23768},"挂载Wayland显示协议相关目录",[344,28037,28038],{"align":23768},"支持Wayland协议的图形显示。",[298,28040,28041,28044,28047],{},[344,28042,28043],{"align":23768},"–ulimit nofile=1024:524288",[344,28045,28046],{"align":23768},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[344,28048,28049],{"align":23768},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[298,28051,28052,28055,28058],{},[344,28053,28054],{"align":23768},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[344,28056,28057],{"align":23768},"挂载宿主机用户目录到容器内同名路径",[344,28059,28060],{"align":23768},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[298,28062,28063,28066,28069],{},[344,28064,28065],{"align":23768},"-w \u002Fhome\u002Ftungchiahui",[344,28067,28068],{"align":23768},"设置容器启动后的默认工作目录",[344,28070,28071],{"align":23768},"直接进入项目路径，方便执行命令2324。",[298,28073,28074,28077,28080],{},[344,28075,28076],{"align":23768},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[344,28078,28079],{"align":23768},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[344,28081,28082],{"align":23768},"提供预配置的深度学习与机器人开发环境。",[14,28084,28085,28086,28088,28089,28092],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[141,28087,24589],{},"加不加",[141,28090,28091],{},"sudo -E","都无所谓。",[14,28094,28095,28096,28098,28099,28101,28102,28105,28106,28108],{},"用户已经被加到docker组了，不用",[141,28097,24589],{},"也行跑，其次，",[141,28100,24589],{},"运行的话，你的",[141,28103,28104],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[141,28107,28104],{},"更不可能变了。",[135,28110,28112],{"className":23854,"code":28111,"language":23856,"meta":30,"style":30},"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",[141,28113,28114,28127,28137,28147,28159,28166,28173,28180,28190,28199,28208,28222,28234,28246,28255,28265,28274,28289,28322,28349,28360,28367],{"__ignoreMap":30},[144,28115,28116,28118,28120,28122,28125],{"class":146,"line":147},[144,28117,24589],{"class":1993},[144,28119,26333],{"class":259},[144,28121,27243],{"class":259},[144,28123,28124],{"class":203}," --name=ros_opencv_cuda",[144,28126,24691],{"class":203},[144,28128,28129,28132,28135],{"class":146,"line":66},[144,28130,28131],{"class":154},"--gpus ",[144,28133,28134],{"class":259},"all",[144,28136,24691],{"class":203},[144,28138,28139,28142,28145],{"class":146,"line":1210},[144,28140,28141],{"class":154},"-e ",[144,28143,28144],{"class":259},"NVIDIA_DRIVER_CAPABILITIES=all",[144,28146,24691],{"class":203},[144,28148,28149,28151,28154,28157],{"class":146,"line":1225},[144,28150,28141],{"class":154},[144,28152,28153],{"class":259},"DISPLAY=",[144,28155,28156],{"class":154},"$DISPLAY ",[144,28158,26188],{"class":203},[144,28160,28161,28164],{"class":146,"line":1231},[144,28162,28163],{"class":154},"-dit ",[144,28165,26188],{"class":203},[144,28167,28168,28171],{"class":146,"line":1245},[144,28169,28170],{"class":154},"--privileged ",[144,28172,26188],{"class":203},[144,28174,28175,28178],{"class":146,"line":1251},[144,28176,28177],{"class":154},"--net=host ",[144,28179,26188],{"class":203},[144,28181,28182,28185,28188],{"class":146,"line":1342},[144,28183,28184],{"class":154},"--group-add ",[144,28186,28187],{"class":259},"audio",[144,28189,24691],{"class":203},[144,28191,28192,28194,28197],{"class":146,"line":1348},[144,28193,28184],{"class":154},[144,28195,28196],{"class":259},"video",[144,28198,24691],{"class":203},[144,28200,28201,28203,28206],{"class":146,"line":1360},[144,28202,28184],{"class":154},[144,28204,28205],{"class":259},"dialout",[144,28207,24691],{"class":203},[144,28209,28210,28212,28215,28217,28220],{"class":146,"line":1642},[144,28211,28141],{"class":154},[144,28213,28214],{"class":259},"XAUTHORITY=",[144,28216,28104],{"class":154},[144,28218,28219],{"class":259},"\u002F.Xauthority",[144,28221,24691],{"class":203},[144,28223,28224,28226,28229,28232],{"class":146,"line":1647},[144,28225,28141],{"class":154},[144,28227,28228],{"class":259},"WAYLAND_DISPLAY=",[144,28230,28231],{"class":154},"$WAYLAND_DISPLAY ",[144,28233,26188],{"class":203},[144,28235,28236,28238,28241,28244],{"class":146,"line":1653},[144,28237,28141],{"class":154},[144,28239,28240],{"class":259},"XDG_RUNTIME_DIR=",[144,28242,28243],{"class":154},"$XDG_RUNTIME_DIR ",[144,28245,26188],{"class":203},[144,28247,28248,28250,28253],{"class":146,"line":1658},[144,28249,28141],{"class":154},[144,28251,28252],{"class":259},"QT_QPA_PLATFORM=xcb",[144,28254,24691],{"class":203},[144,28256,28257,28260,28263],{"class":146,"line":1672},[144,28258,28259],{"class":154},"-v ",[144,28261,28262],{"class":259},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[144,28264,24691],{"class":203},[144,28266,28267,28269,28272],{"class":146,"line":1677},[144,28268,28259],{"class":154},[144,28270,28271],{"class":259},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[144,28273,24691],{"class":203},[144,28275,28276,28279,28282,28284,28287],{"class":146,"line":1683},[144,28277,28278],{"class":154},"-v $HOME",[144,28280,28281],{"class":259},"\u002F.Xauthority:",[144,28283,28104],{"class":154},[144,28285,28286],{"class":259},"\u002F.Xauthority:ro",[144,28288,24691],{"class":203},[144,28290,28291,28293,28296,28298,28301,28304,28306,28309,28311,28313,28315,28317,28320],{"class":146,"line":1704},[144,28292,28259],{"class":154},[144,28294,28295],{"class":259},"\u002Frun\u002Fuser\u002F",[144,28297,25112],{"class":154},[144,28299,28300],{"class":1993},"id",[144,28302,28303],{"class":203}," -u",[144,28305,584],{"class":154},[144,28307,28308],{"class":259},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[144,28310,25112],{"class":154},[144,28312,28300],{"class":1993},[144,28314,28303],{"class":203},[144,28316,584],{"class":154},[144,28318,28319],{"class":259},"\u002Fwayland-0",[144,28321,24691],{"class":203},[144,28323,28324,28326,28328,28330,28332,28334,28336,28339,28341,28343,28345,28347],{"class":146,"line":1709},[144,28325,28259],{"class":154},[144,28327,28295],{"class":259},[144,28329,25112],{"class":154},[144,28331,28300],{"class":1993},[144,28333,28303],{"class":203},[144,28335,584],{"class":154},[144,28337,28338],{"class":259},":\u002Frun\u002Fuser\u002F",[144,28340,25112],{"class":154},[144,28342,28300],{"class":1993},[144,28344,28303],{"class":203},[144,28346,13745],{"class":154},[144,28348,26188],{"class":203},[144,28350,28351,28353,28355,28358],{"class":146,"line":1723},[144,28352,28278],{"class":154},[144,28354,1014],{"class":259},[144,28356,28357],{"class":154},"$HOME ",[144,28359,26188],{"class":203},[144,28361,28362,28365],{"class":146,"line":1728},[144,28363,28364],{"class":154},"-w $HOME ",[144,28366,26188],{"class":203},[144,28368,28369],{"class":146,"line":1757},[144,28370,28371],{"class":154},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,28373,9056],{},[98,28375,28376,28384,28387,28390],{},[101,28377,28378,13826,28380,28383],{},[141,28379,28144],{},[141,28381,28382],{},"--gpus all","没有英伟达显卡请注释。",[101,28385,28386],{},"--name后面请自己为容器起名。",[101,28388,28389],{},"最后一行仓库名称请你自己找对应的镜像填上。",[101,28391,28392,28393,28398],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23585,28394,28395],{},[304,28396,28397],{},"请不要加","。",[135,28400,28402],{"className":23854,"code":28401,"language":23856,"meta":30,"style":30},"--ulimit nofile=1024:524288 \\\n",[141,28403,28404],{"__ignoreMap":30},[144,28405,28406,28409,28412],{"class":146,"line":147},[144,28407,28408],{"class":1993},"--ulimit",[144,28410,28411],{"class":259}," nofile=1024:524288",[144,28413,24691],{"class":203},[14,28415,28416,28417,28422],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23585,28418,28419],{},[304,28420,28421],{},"不建议","**.**",[135,28424,28426],{"className":23854,"code":28425,"language":23856,"meta":30,"style":30},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[141,28427,28428,28455,28464],{"__ignoreMap":30},[144,28429,28430,28433,28436,28438,28440,28442,28444,28446,28448,28451,28453],{"class":146,"line":147},[144,28431,28432],{"class":1993},"--user",[144,28434,28435],{"class":154}," $(",[144,28437,28300],{"class":1993},[144,28439,28303],{"class":203},[144,28441,584],{"class":154},[144,28443,1014],{"class":259},[144,28445,25112],{"class":154},[144,28447,28300],{"class":1993},[144,28449,28450],{"class":203}," -g",[144,28452,13745],{"class":154},[144,28454,26188],{"class":203},[144,28456,28457,28459,28462],{"class":146,"line":66},[144,28458,28259],{"class":154},[144,28460,28461],{"class":259},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[144,28463,24691],{"class":203},[144,28465,28466,28468,28471],{"class":146,"line":1210},[144,28467,28259],{"class":154},[144,28469,28470],{"class":259},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[144,28472,24691],{"class":203},[5157,28474,28475],{},"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":30,"searchDepth":66,"depth":66,"links":28477},[28478,28479,28480],{"id":27476,"depth":1210,"text":27477},{"id":27486,"depth":1210,"text":27487},{"id":27897,"depth":1210,"text":27900},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27468,"description":30},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28487,"title":28488,"body":28489,"description":30,"extension":70,"meta":30112,"navigation":72,"path":30113,"seo":30114,"stem":30115,"__hash__":30116},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28490,"toc":30107},[28491,28494,28498,28501,28723,28727,28731,28734,28840,28845,28848,28853,28856,28861,28864,28869,28872,28884,28887,28892,28899,28927,28934,29010,29015,29018,29041,29043,29118,29123,29126,29130,29138,29143,29148,29152,29163,29169,29172,29175,29199,29202,29205,29233,29236,29239,29704,29707,29712,29717,29721,29744,29749,29753,29757,29760,29763,29766,29793,29796,29799,29817,29820,29823,29845,29853,29858,29863,29867,29870,29873,29876,29879,29924,29927,29945,29948,29953,29956,29977,29980,30036,30039,30044,30048,30051,30058,30061,30064,30069,30072,30088,30091,30104],[10,28492,28488],{"id":28493},"_6手动创建docker镜像",[115,28495,28497],{"id":28496},"_61dockerfile","6.1.DockerFile",[14,28499,28500],{},"常用命令：",[292,28502,28503,28514],{},[295,28504,28505],{},[298,28506,28507,28510,28512],{},[301,28508,28509],{"align":23768},"指令",[301,28511,25882],{"align":23768},[301,28513,27505],{"align":23768},[339,28515,28516,28526,28542,28553,28564,28575,28586,28597,28608,28622,28636,28647,28661,28672,28683,28697,28712],{},[298,28517,28518,28520,28523],{},[344,28519,27383],{"align":23768},[344,28521,28522],{"align":23768},"指定基础镜像，是 Dockerfile 的起点",[344,28524,28525],{"align":23768},"FROM ubuntu:22.04",[298,28527,28528,28531,28534],{},[344,28529,28530],{"align":23768},"LABEL",[344,28532,28533],{"align":23768},"添加元数据（如作者、版本等）",[344,28535,28536,28537,28541],{"align":23768},"LABEL maintainer=”",[393,28538,28540],{"href":28539},"mailto:you@example.com","you@example.com","”",[298,28543,28544,28547,28550],{},[344,28545,28546],{"align":23768},"ENV",[344,28548,28549],{"align":23768},"设置环境变量",[344,28551,28552],{"align":23768},"ENV PORT=8080",[298,28554,28555,28558,28561],{},[344,28556,28557],{"align":23768},"ARG",[344,28559,28560],{"align":23768},"构建参数，只在构建期间可用",[344,28562,28563],{"align":23768},"ARG VERSION=1.0",[298,28565,28566,28569,28572],{},[344,28567,28568],{"align":23768},"RUN",[344,28570,28571],{"align":23768},"构建镜像时运行命令",[344,28573,28574],{"align":23768},"RUN apt-get update && apt-get install -y curl",[298,28576,28577,28580,28583],{},[344,28578,28579],{"align":23768},"COPY",[344,28581,28582],{"align":23768},"复制文件到镜像中",[344,28584,28585],{"align":23768},"COPY . \u002Fapp",[298,28587,28588,28591,28594],{},[344,28589,28590],{"align":23768},"ADD",[344,28592,28593],{"align":23768},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[344,28595,28596],{"align":23768},"ADD archive.tar.gz \u002Fdata\u002F",[298,28598,28599,28602,28605],{},[344,28600,28601],{"align":23768},"WORKDIR",[344,28603,28604],{"align":23768},"设置工作目录",[344,28606,28607],{"align":23768},"WORKDIR \u002Fopt",[298,28609,28610,28613,28616],{},[344,28611,28612],{"align":23768},"CMD",[344,28614,28615],{"align":23768},"设置容器启动时默认命令（可被 docker run 覆盖）",[344,28617,28618,28619],{"align":23768},"CMD ",[144,28620,28621],{},"“node”, “index.js”",[298,28623,28624,28627,28630],{},[344,28625,28626],{"align":23768},"ENTRYPOINT",[344,28628,28629],{"align":23768},"设置容器启动时固定命令（通常用于 CLI 工具等）",[344,28631,28632,28633],{"align":23768},"ENTRYPOINT ",[144,28634,28635],{},"“python3”",[298,28637,28638,28641,28644],{},[344,28639,28640],{"align":23768},"EXPOSE",[344,28642,28643],{"align":23768},"声明镜像内服务监听的端口（不会自动映射）",[344,28645,28646],{"align":23768},"EXPOSE 80",[298,28648,28649,28652,28655],{},[344,28650,28651],{"align":23768},"VOLUME",[344,28653,28654],{"align":23768},"声明数据卷挂载点",[344,28656,28657,28658],{"align":23768},"VOLUME ",[144,28659,28660],{},"“\u002Fdata”",[298,28662,28663,28666,28669],{},[344,28664,28665],{"align":23768},"USER",[344,28667,28668],{"align":23768},"设置后续命令执行的用户",[344,28670,28671],{"align":23768},"USER appuser",[298,28673,28674,28677,28680],{},[344,28675,28676],{"align":23768},"ONBUILD",[344,28678,28679],{"align":23768},"当镜像作为其他镜像基础镜像时触发的构建指令",[344,28681,28682],{"align":23768},"ONBUILD COPY . \u002Fsrc",[298,28684,28685,28688,28691],{},[344,28686,28687],{"align":23768},"SHELL",[344,28689,28690],{"align":23768},"更改默认 shell，比如将 sh -c 改为 bash -c",[344,28692,28693,28694],{"align":23768},"SHELL ",[144,28695,28696],{},"“\u002Fbin\u002Fbash”, “-c”",[298,28698,28699,28702,28705],{},[344,28700,28701],{"align":23768},"HEALTHCHECK",[344,28703,28704],{"align":23768},"定义容器运行时的健康检查命令",[344,28706,28707,28708],{"align":23768},"`HEALTHCHECK CMD curl –fail ",[393,28709,28710],{"href":28710,"rel":28711},"http:\u002F\u002Flocalhost:8080",[23897],[298,28713,28714,28717,28720],{},[344,28715,28716],{"align":23768},"STOPSIGNAL",[344,28718,28719],{"align":23768},"容器停止时发送的信号",[344,28721,28722],{"align":23768},"STOPSIGNAL SIGKILL",[115,28724,28726],{"id":28725},"_62自己创建容器","6.2.自己创建容器",[22029,28728,28730],{"id":28729},"_621手动创建","6.2.1.手动创建",[14,28732,28733],{},"在x86电脑上编译x86的：",[135,28735,28737],{"className":23854,"code":28736,"language":23856,"meta":30,"style":30},"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",[141,28738,28739,28755,28759,28772,28776,28789,28793,28806,28810,28823,28827],{"__ignoreMap":30},[144,28740,28741,28743,28746,28749,28752],{"class":146,"line":147},[144,28742,26566],{"class":1993},[144,28744,28745],{"class":259}," build",[144,28747,28748],{"class":203}," -t",[144,28750,28751],{"class":259}," ros-melodic-cuda118-cudnn8-bionic:latest",[144,28753,28754],{"class":259}," .\n",[144,28756,28757],{"class":146,"line":66},[144,28758,2430],{"emptyLinePlaceholder":72},[144,28760,28761,28763,28765,28767,28770],{"class":146,"line":1210},[144,28762,26566],{"class":1993},[144,28764,28745],{"class":259},[144,28766,28748],{"class":203},[144,28768,28769],{"class":259}," ros-noetic-focal:latest",[144,28771,28754],{"class":259},[144,28773,28774],{"class":146,"line":1225},[144,28775,2430],{"emptyLinePlaceholder":72},[144,28777,28778,28780,28782,28784,28787],{"class":146,"line":1231},[144,28779,26566],{"class":1993},[144,28781,28745],{"class":259},[144,28783,28748],{"class":203},[144,28785,28786],{"class":259}," ros-humble-jammy:latest",[144,28788,28754],{"class":259},[144,28790,28791],{"class":146,"line":1245},[144,28792,2430],{"emptyLinePlaceholder":72},[144,28794,28795,28797,28799,28801,28804],{"class":146,"line":1251},[144,28796,26566],{"class":1993},[144,28798,28745],{"class":259},[144,28800,28748],{"class":203},[144,28802,28803],{"class":259}," ros-jazzy-noble:latest",[144,28805,28754],{"class":259},[144,28807,28808],{"class":146,"line":1342},[144,28809,2430],{"emptyLinePlaceholder":72},[144,28811,28812,28814,28816,28818,28821],{"class":146,"line":1348},[144,28813,26566],{"class":1993},[144,28815,28745],{"class":259},[144,28817,28748],{"class":203},[144,28819,28820],{"class":259}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[144,28822,28754],{"class":259},[144,28824,28825],{"class":146,"line":1360},[144,28826,2430],{"emptyLinePlaceholder":72},[144,28828,28829,28831,28833,28835,28838],{"class":146,"line":1642},[144,28830,26566],{"class":1993},[144,28832,28745],{"class":259},[144,28834,28748],{"class":203},[144,28836,28837],{"class":259}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[144,28839,28754],{"class":259},[14,28841,28842],{},[28,28843],{"alt":30,"src":28844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,28846,28847],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,28849,28850],{},[28,28851],{"alt":30,"src":28852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,28854,28855],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[98,28857,28858],{},[101,28859,28860],{},"创建 Docker Hub 账户",[14,28862,28863],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[98,28865,28866],{"start":66},[101,28867,28868],{},"登录 Docker Hub",[14,28870,28871],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[135,28873,28875],{"className":23854,"code":28874,"language":23856,"meta":30,"style":30},"docker login\n",[141,28876,28877],{"__ignoreMap":30},[144,28878,28879,28881],{"class":146,"line":147},[144,28880,26566],{"class":1993},[144,28882,28883],{"class":259}," login\n",[14,28885,28886],{},"输入你的 Docker Hub 用户名和密码进行验证。",[98,28888,28889],{},[101,28890,28891],{},"为你的镜像打标签",[14,28893,28894,28895,28898],{},"Docker Hub 使用 ",[141,28896,28897],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[135,28900,28902],{"className":23854,"code":28901,"language":23856,"meta":30,"style":30},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[141,28903,28904],{"__ignoreMap":30},[144,28905,28906,28908,28911,28913,28916,28919,28922,28924],{"class":146,"line":147},[144,28907,26566],{"class":1993},[144,28909,28910],{"class":259}," tag",[144,28912,28803],{"class":259},[144,28914,28915],{"class":150}," \u003C",[144,28917,28918],{"class":259},"你的用户",[144,28920,28921],{"class":154},"名",[144,28923,1115],{"class":150},[144,28925,28926],{"class":259},"\u002Fros-jazzy-noble:latest\n",[14,28928,28929,28930,28933],{},"例如，如果你的 Docker Hub 用户名是 ",[141,28931,28932],{},"tungchiahui","，你应该执行：",[135,28935,28937],{"className":23854,"code":28936,"language":23856,"meta":30,"style":30},"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",[141,28938,28939,28950,28954,28965,28969,28980,28984,28995,28999],{"__ignoreMap":30},[144,28940,28941,28943,28945,28947],{"class":146,"line":147},[144,28942,26566],{"class":1993},[144,28944,28910],{"class":259},[144,28946,28769],{"class":259},[144,28948,28949],{"class":259}," tungchiahui\u002Fros-noetic-focal:latest\n",[144,28951,28952],{"class":146,"line":66},[144,28953,2430],{"emptyLinePlaceholder":72},[144,28955,28956,28958,28960,28962],{"class":146,"line":1210},[144,28957,26566],{"class":1993},[144,28959,28910],{"class":259},[144,28961,28786],{"class":259},[144,28963,28964],{"class":259}," tungchiahui\u002Fros-humble-jammy:latest\n",[144,28966,28967],{"class":146,"line":1225},[144,28968,2430],{"emptyLinePlaceholder":72},[144,28970,28971,28973,28975,28977],{"class":146,"line":1231},[144,28972,26566],{"class":1993},[144,28974,28910],{"class":259},[144,28976,28803],{"class":259},[144,28978,28979],{"class":259}," tungchiahui\u002Fros-jazzy-noble:latest\n",[144,28981,28982],{"class":146,"line":1245},[144,28983,2430],{"emptyLinePlaceholder":72},[144,28985,28986,28988,28990,28992],{"class":146,"line":1251},[144,28987,26566],{"class":1993},[144,28989,28910],{"class":259},[144,28991,28820],{"class":259},[144,28993,28994],{"class":259}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[144,28996,28997],{"class":146,"line":1342},[144,28998,2430],{"emptyLinePlaceholder":72},[144,29000,29001,29003,29005,29007],{"class":146,"line":1348},[144,29002,26566],{"class":1993},[144,29004,28910],{"class":259},[144,29006,28837],{"class":259},[144,29008,29009],{"class":259}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[98,29011,29012],{"start":66},[101,29013,29014],{},"推送镜像到 Docker Hub",[14,29016,29017],{},"使用以下命令将镜像推送到 Docker Hub：",[135,29019,29021],{"className":23854,"code":29020,"language":23856,"meta":30,"style":30},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[141,29022,29023],{"__ignoreMap":30},[144,29024,29025,29027,29030,29032,29034,29036,29038],{"class":146,"line":147},[144,29026,26566],{"class":1993},[144,29028,29029],{"class":259}," push",[144,29031,28915],{"class":150},[144,29033,28918],{"class":259},[144,29035,28921],{"class":154},[144,29037,1115],{"class":150},[144,29039,29040],{"class":259},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29042,14664],{},[135,29044,29046],{"className":23854,"code":29045,"language":23856,"meta":30,"style":30},"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",[141,29047,29048,29056,29060,29068,29072,29080,29084,29093,29097,29105,29109],{"__ignoreMap":30},[144,29049,29050,29052,29054],{"class":146,"line":147},[144,29051,26566],{"class":1993},[144,29053,29029],{"class":259},[144,29055,28949],{"class":259},[144,29057,29058],{"class":146,"line":66},[144,29059,2430],{"emptyLinePlaceholder":72},[144,29061,29062,29064,29066],{"class":146,"line":1210},[144,29063,26566],{"class":1993},[144,29065,29029],{"class":259},[144,29067,28964],{"class":259},[144,29069,29070],{"class":146,"line":1225},[144,29071,2430],{"emptyLinePlaceholder":72},[144,29073,29074,29076,29078],{"class":146,"line":1231},[144,29075,26566],{"class":1993},[144,29077,29029],{"class":259},[144,29079,28979],{"class":259},[144,29081,29082],{"class":146,"line":1245},[144,29083,2430],{"emptyLinePlaceholder":72},[144,29085,29086,29088,29090],{"class":146,"line":1251},[144,29087,26566],{"class":1993},[144,29089,29029],{"class":259},[144,29091,29092],{"class":259}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[144,29094,29095],{"class":146,"line":1342},[144,29096,2430],{"emptyLinePlaceholder":72},[144,29098,29099,29101,29103],{"class":146,"line":1348},[144,29100,26566],{"class":1993},[144,29102,29029],{"class":259},[144,29104,29009],{"class":259},[144,29106,29107],{"class":146,"line":1360},[144,29108,2430],{"emptyLinePlaceholder":72},[144,29110,29111,29113,29115],{"class":146,"line":1642},[144,29112,26566],{"class":1993},[144,29114,29029],{"class":259},[144,29116,29117],{"class":259}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[98,29119,29120],{"start":1210},[101,29121,29122],{},"验证推送成功",[14,29124,29125],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29127,29128],{},[304,29129,3814],{},[1162,29131,29132,29135],{},[101,29133,29134],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[101,29136,29137],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29139,29140],{},[28,29141],{"alt":30,"src":29142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29144,29145],{},[28,29146],{"alt":30,"src":29147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22029,29149,29151],{"id":29150},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29153,29154,29155,29158,29159,29162],{},"如果您想在 ",[304,29156,29157],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[304,29160,29161],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29164,29165,29166],{},"1. ",[304,29167,29168],{},"启用 Docker 跨平台构建",[14,29170,29171],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29173,29174],{},"第一步：启用 buildx（只需执行一次）",[135,29176,29178],{"className":23854,"code":29177,"language":23856,"meta":30,"style":30},"docker buildx create --name multiarch_builder --use\n",[141,29179,29180],{"__ignoreMap":30},[144,29181,29182,29184,29187,29190,29193,29196],{"class":146,"line":147},[144,29183,26566],{"class":1993},[144,29185,29186],{"class":259}," buildx",[144,29188,29189],{"class":259}," create",[144,29191,29192],{"class":203}," --name",[144,29194,29195],{"class":259}," multiarch_builder",[144,29197,29198],{"class":203}," --use\n",[14,29200,29201],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29203,29204],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[135,29206,29208],{"className":23854,"code":29207,"language":23856,"meta":30,"style":30},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[141,29209,29210],{"__ignoreMap":30},[144,29211,29212,29214,29216,29218,29221,29224,29227,29230],{"class":146,"line":147},[144,29213,26566],{"class":1993},[144,29215,27243],{"class":259},[144,29217,27246],{"class":203},[144,29219,29220],{"class":203}," --privileged",[144,29222,29223],{"class":259}," multiarch\u002Fqemu-user-static",[144,29225,29226],{"class":203}," --reset",[144,29228,29229],{"class":203}," -p",[144,29231,29232],{"class":259}," yes\n",[14,29234,29235],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29237,29238],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[135,29240,29242],{"className":23854,"code":29241,"language":23856,"meta":30,"style":30},"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",[141,29243,29244,29286,29290,29295,29305,29315,29324,29330,29334,29338,29348,29356,29365,29371,29375,29379,29389,29397,29406,29412,29416,29420,29430,29438,29447,29453,29457,29461,29471,29479,29488,29494,29498,29502,29512,29520,29529,29535,29539,29543,29553,29561,29570,29576,29580,29584,29594,29602,29611,29617,29621,29625,29635,29643,29652,29658,29662,29666,29677,29685,29694,29700],{"__ignoreMap":30},[144,29245,29246,29248,29250,29252,29255,29258,29260,29262,29265,29267,29269,29271,29273,29276,29279,29281,29284],{"class":146,"line":147},[144,29247,26566],{"class":1993},[144,29249,29186],{"class":259},[144,29251,28745],{"class":259},[144,29253,29254],{"class":203}," --platform",[144,29256,29257],{"class":259}," linux\u002Famd64,linux\u002Farm64",[144,29259,28748],{"class":203},[144,29261,28915],{"class":150},[144,29263,29264],{"class":259},"你的镜像",[144,29266,28921],{"class":154},[144,29268,1115],{"class":150},[144,29270,1014],{"class":259},[144,29272,1065],{"class":150},[144,29274,29275],{"class":259},"标",[144,29277,29278],{"class":154},"签",[144,29280,1115],{"class":150},[144,29282,29283],{"class":203}," --push",[144,29285,28754],{"class":259},[144,29287,29288],{"class":146,"line":66},[144,29289,2430],{"emptyLinePlaceholder":72},[144,29291,29292],{"class":146,"line":1210},[144,29293,29294],{"class":213},"# 例子：\n",[144,29296,29297,29299,29301,29303],{"class":146,"line":1225},[144,29298,26566],{"class":1993},[144,29300,29186],{"class":259},[144,29302,28745],{"class":259},[144,29304,24691],{"class":203},[144,29306,29307,29310,29313],{"class":146,"line":1231},[144,29308,29309],{"class":154},"--platform ",[144,29311,29312],{"class":259},"linux\u002Famd64,linux\u002Farm64",[144,29314,24691],{"class":203},[144,29316,29317,29319,29322],{"class":146,"line":1245},[144,29318,28748],{"class":203},[144,29320,29321],{"class":259}," tungchiahui\u002Fros:noetic-focal",[144,29323,24691],{"class":203},[144,29325,29326,29328],{"class":146,"line":1251},[144,29327,29283],{"class":203},[144,29329,24691],{"class":203},[144,29331,29332],{"class":146,"line":1342},[144,29333,28754],{"class":259},[144,29335,29336],{"class":146,"line":1348},[144,29337,2430],{"emptyLinePlaceholder":72},[144,29339,29340,29342,29344,29346],{"class":146,"line":1360},[144,29341,26566],{"class":1993},[144,29343,29186],{"class":259},[144,29345,28745],{"class":259},[144,29347,24691],{"class":203},[144,29349,29350,29352,29354],{"class":146,"line":1642},[144,29351,29309],{"class":154},[144,29353,29312],{"class":259},[144,29355,24691],{"class":203},[144,29357,29358,29360,29363],{"class":146,"line":1647},[144,29359,28748],{"class":203},[144,29361,29362],{"class":259}," tungchiahui\u002Fros:humble-jammy",[144,29364,24691],{"class":203},[144,29366,29367,29369],{"class":146,"line":1653},[144,29368,29283],{"class":203},[144,29370,24691],{"class":203},[144,29372,29373],{"class":146,"line":1658},[144,29374,28754],{"class":259},[144,29376,29377],{"class":146,"line":1672},[144,29378,2430],{"emptyLinePlaceholder":72},[144,29380,29381,29383,29385,29387],{"class":146,"line":1677},[144,29382,26566],{"class":1993},[144,29384,29186],{"class":259},[144,29386,28745],{"class":259},[144,29388,24691],{"class":203},[144,29390,29391,29393,29395],{"class":146,"line":1683},[144,29392,29309],{"class":154},[144,29394,29312],{"class":259},[144,29396,24691],{"class":203},[144,29398,29399,29401,29404],{"class":146,"line":1704},[144,29400,28748],{"class":203},[144,29402,29403],{"class":259}," tungchiahui\u002Fros:jazzy-noble",[144,29405,24691],{"class":203},[144,29407,29408,29410],{"class":146,"line":1709},[144,29409,29283],{"class":203},[144,29411,24691],{"class":203},[144,29413,29414],{"class":146,"line":1723},[144,29415,28754],{"class":259},[144,29417,29418],{"class":146,"line":1728},[144,29419,2430],{"emptyLinePlaceholder":72},[144,29421,29422,29424,29426,29428],{"class":146,"line":1757},[144,29423,26333],{"class":1993},[144,29425,29186],{"class":259},[144,29427,28745],{"class":259},[144,29429,24691],{"class":203},[144,29431,29432,29434,29436],{"class":146,"line":1762},[144,29433,29309],{"class":154},[144,29435,29312],{"class":259},[144,29437,24691],{"class":203},[144,29439,29440,29442,29445],{"class":146,"line":1779},[144,29441,28748],{"class":203},[144,29443,29444],{"class":259}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[144,29446,24691],{"class":203},[144,29448,29449,29451],{"class":146,"line":1784},[144,29450,29283],{"class":203},[144,29452,24691],{"class":203},[144,29454,29455],{"class":146,"line":1789},[144,29456,28754],{"class":259},[144,29458,29459],{"class":146,"line":1794},[144,29460,2430],{"emptyLinePlaceholder":72},[144,29462,29463,29465,29467,29469],{"class":146,"line":1808},[144,29464,26566],{"class":1993},[144,29466,29186],{"class":259},[144,29468,28745],{"class":259},[144,29470,24691],{"class":203},[144,29472,29473,29475,29477],{"class":146,"line":1813},[144,29474,29309],{"class":154},[144,29476,29312],{"class":259},[144,29478,24691],{"class":203},[144,29480,29481,29483,29486],{"class":146,"line":2607},[144,29482,28748],{"class":203},[144,29484,29485],{"class":259}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[144,29487,24691],{"class":203},[144,29489,29490,29492],{"class":146,"line":2621},[144,29491,29283],{"class":203},[144,29493,24691],{"class":203},[144,29495,29496],{"class":146,"line":2629},[144,29497,28754],{"class":259},[144,29499,29500],{"class":146,"line":2634},[144,29501,2430],{"emptyLinePlaceholder":72},[144,29503,29504,29506,29508,29510],{"class":146,"line":2640},[144,29505,26333],{"class":1993},[144,29507,29186],{"class":259},[144,29509,28745],{"class":259},[144,29511,24691],{"class":203},[144,29513,29514,29516,29518],{"class":146,"line":2646},[144,29515,29309],{"class":154},[144,29517,29312],{"class":259},[144,29519,24691],{"class":203},[144,29521,29522,29524,29527],{"class":146,"line":2651},[144,29523,28748],{"class":203},[144,29525,29526],{"class":259}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[144,29528,24691],{"class":203},[144,29530,29531,29533],{"class":146,"line":7979},[144,29532,29283],{"class":203},[144,29534,24691],{"class":203},[144,29536,29537],{"class":146,"line":8003},[144,29538,28754],{"class":259},[144,29540,29541],{"class":146,"line":8008},[144,29542,2430],{"emptyLinePlaceholder":72},[144,29544,29545,29547,29549,29551],{"class":146,"line":8014},[144,29546,26566],{"class":1993},[144,29548,29186],{"class":259},[144,29550,28745],{"class":259},[144,29552,24691],{"class":203},[144,29554,29555,29557,29559],{"class":146,"line":8041},[144,29556,29309],{"class":154},[144,29558,29312],{"class":259},[144,29560,24691],{"class":203},[144,29562,29563,29565,29568],{"class":146,"line":8046},[144,29564,28748],{"class":203},[144,29566,29567],{"class":259}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[144,29569,24691],{"class":203},[144,29571,29572,29574],{"class":146,"line":8052},[144,29573,29283],{"class":203},[144,29575,24691],{"class":203},[144,29577,29578],{"class":146,"line":8064},[144,29579,28754],{"class":259},[144,29581,29582],{"class":146,"line":8076},[144,29583,2430],{"emptyLinePlaceholder":72},[144,29585,29586,29588,29590,29592],{"class":146,"line":8088},[144,29587,26566],{"class":1993},[144,29589,29186],{"class":259},[144,29591,28745],{"class":259},[144,29593,24691],{"class":203},[144,29595,29596,29598,29600],{"class":146,"line":9747},[144,29597,29309],{"class":154},[144,29599,29312],{"class":259},[144,29601,24691],{"class":203},[144,29603,29604,29606,29609],{"class":146,"line":9772},[144,29605,28748],{"class":203},[144,29607,29608],{"class":259}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[144,29610,24691],{"class":203},[144,29612,29613,29615],{"class":146,"line":9795},[144,29614,29283],{"class":203},[144,29616,24691],{"class":203},[144,29618,29619],{"class":146,"line":9819},[144,29620,28754],{"class":259},[144,29622,29623],{"class":146,"line":9824},[144,29624,2430],{"emptyLinePlaceholder":72},[144,29626,29627,29629,29631,29633],{"class":146,"line":9829},[144,29628,26333],{"class":1993},[144,29630,29186],{"class":259},[144,29632,28745],{"class":259},[144,29634,24691],{"class":203},[144,29636,29637,29639,29641],{"class":146,"line":9834},[144,29638,29309],{"class":154},[144,29640,29312],{"class":259},[144,29642,24691],{"class":203},[144,29644,29645,29647,29650],{"class":146,"line":9843},[144,29646,28748],{"class":203},[144,29648,29649],{"class":259}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[144,29651,24691],{"class":203},[144,29653,29654,29656],{"class":146,"line":9848},[144,29655,29283],{"class":203},[144,29657,24691],{"class":203},[144,29659,29660],{"class":146,"line":9854},[144,29661,28754],{"class":259},[144,29663,29664],{"class":146,"line":9875},[144,29665,2430],{"emptyLinePlaceholder":72},[144,29667,29668,29671,29673,29675],{"class":146,"line":9881},[144,29669,29670],{"class":1993},"  docker",[144,29672,29186],{"class":259},[144,29674,28745],{"class":259},[144,29676,24691],{"class":203},[144,29678,29679,29681,29683],{"class":146,"line":9895},[144,29680,29309],{"class":154},[144,29682,29312],{"class":259},[144,29684,24691],{"class":203},[144,29686,29687,29689,29692],{"class":146,"line":9901},[144,29688,28748],{"class":203},[144,29690,29691],{"class":259}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[144,29693,24691],{"class":203},[144,29695,29696,29698],{"class":146,"line":9928},[144,29697,29283],{"class":203},[144,29699,24691],{"class":203},[144,29701,29702],{"class":146,"line":9937},[144,29703,28754],{"class":259},[14,29705,29706],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,29708,29709],{},[28,29710],{"alt":30,"src":29711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,29713,29714],{},[28,29715],{"alt":30,"src":29716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22029,29718,29720],{"id":29719},"_623清除构建缓存","6.2.3.清除构建缓存",[135,29722,29724],{"className":23854,"code":29723,"language":23856,"meta":30,"style":30},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[141,29725,29726,29731],{"__ignoreMap":30},[144,29727,29728],{"class":146,"line":147},[144,29729,29730],{"class":213},"# 清理BuildKit构建缓存\n",[144,29732,29733,29735,29738,29741],{"class":146,"line":66},[144,29734,26566],{"class":1993},[144,29736,29737],{"class":259}," builder",[144,29739,29740],{"class":259}," prune",[144,29742,29743],{"class":203}," -f\n",[14,29745,29746],{},[28,29747],{"alt":30,"src":29748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[115,29750,29752],{"id":29751},"_63补充","6.3.补充",[22029,29754,29756],{"id":29755},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,29758,29759],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,29761,29762],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,29764,29765],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[135,29767,29769],{"className":23854,"code":29768,"language":23856,"meta":30,"style":30},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[141,29770,29771,29778],{"__ignoreMap":30},[144,29772,29773,29775],{"class":146,"line":147},[144,29774,27383],{"class":1993},[144,29776,29777],{"class":259}," nginx\n",[144,29779,29780,29782,29785,29788,29790],{"class":146,"line":66},[144,29781,28568],{"class":1993},[144,29783,29784],{"class":259}," echo",[144,29786,29787],{"class":259}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[144,29789,26235],{"class":150},[144,29791,29792],{"class":259}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,29794,29795],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,29797,29798],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[135,29800,29802],{"className":23854,"code":29801,"language":23856,"meta":30,"style":30},"docker build -t nginx:tuling .\n",[141,29803,29804],{"__ignoreMap":30},[144,29805,29806,29808,29810,29812,29815],{"class":146,"line":147},[144,29807,26566],{"class":1993},[144,29809,28745],{"class":259},[144,29811,28748],{"class":203},[144,29813,29814],{"class":259}," nginx:tuling",[144,29816,28754],{"class":259},[14,29818,29819],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,29821,29822],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[135,29824,29826],{"className":23854,"code":29825,"language":23856,"meta":30,"style":30},"docker run -d -p 92:80 nginx:tuling\n",[141,29827,29828],{"__ignoreMap":30},[144,29829,29830,29832,29834,29837,29839,29842],{"class":146,"line":147},[144,29831,26566],{"class":1993},[144,29833,27243],{"class":259},[144,29835,29836],{"class":203}," -d",[144,29838,29229],{"class":203},[144,29840,29841],{"class":259}," 92:80",[144,29843,29844],{"class":259}," nginx:tuling\n",[14,29846,29847,29848],{},"4、访问 ",[393,29849,29852],{"href":29850,"rel":29851},"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",[23897],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,29854,29855],{},[28,29856],{"alt":30,"src":29857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,29859,29860],{},[28,29861],{"alt":30,"src":29862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22029,29864,29866],{"id":29865},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,29868,29869],{},"只需要知道大体流程即可",[14,29871,29872],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,29874,29875],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,29877,29878],{},"2、在Dockerfile中添加以下内容",[135,29880,29882],{"className":26104,"code":29881,"language":26106,"meta":30,"style":30},"# 基于哪个镜像\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",[141,29883,29884,29889,29894,29899,29904,29909,29914,29919],{"__ignoreMap":30},[144,29885,29886],{"class":146,"line":147},[144,29887,29888],{},"# 基于哪个镜像\n",[144,29890,29891],{"class":146,"line":66},[144,29892,29893],{},"From java:8\n",[144,29895,29896],{"class":146,"line":1210},[144,29897,29898],{},"# 复制文件到容器\n",[144,29900,29901],{"class":146,"line":1225},[144,29902,29903],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[144,29905,29906],{"class":146,"line":1231},[144,29907,29908],{},"# 声明需要暴露的端口\n",[144,29910,29911],{"class":146,"line":1245},[144,29912,29913],{},"EXPOSE 8877\n",[144,29915,29916],{"class":146,"line":1251},[144,29917,29918],{},"# 配置容器启动后执行的命令\n",[144,29920,29921],{"class":146,"line":1342},[144,29922,29923],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,29925,29926],{},"3、使用docker build命令构建镜像",[135,29928,29930],{"className":23854,"code":29929,"language":23856,"meta":30,"style":30},"docker build -t tulingmall-member:0.0.5 .\n",[141,29931,29932],{"__ignoreMap":30},[144,29933,29934,29936,29938,29940,29943],{"class":146,"line":147},[144,29935,26566],{"class":1993},[144,29937,28745],{"class":259},[144,29939,28748],{"class":203},[144,29941,29942],{"class":259}," tulingmall-member:0.0.5",[144,29944,28754],{"class":259},[14,29946,29947],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,29949,29950],{},[28,29951],{"alt":30,"src":29952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,29954,29955],{},"4、启动镜像，加-d可在后台启动",[135,29957,29959],{"className":23854,"code":29958,"language":23856,"meta":30,"style":30},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[141,29960,29961],{"__ignoreMap":30},[144,29962,29963,29965,29967,29969,29971,29974],{"class":146,"line":147},[144,29964,26566],{"class":1993},[144,29966,27243],{"class":259},[144,29968,29836],{"class":203},[144,29970,29229],{"class":203},[144,29972,29973],{"class":259}," 8877:8877",[144,29975,29976],{"class":259}," tulingmall-member:0.0.5\n",[14,29978,29979],{},"加上JVM参数：",[135,29981,29983],{"className":23854,"code":29982,"language":23856,"meta":30,"style":30},"# --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",[141,29984,29985,29990,30005,30015,30024,30031],{"__ignoreMap":30},[144,29986,29987],{"class":146,"line":147},[144,29988,29989],{"class":213},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[144,29991,29992,29994,29996,29999,30001,30003],{"class":146,"line":66},[144,29993,26566],{"class":1993},[144,29995,27243],{"class":259},[144,29997,29998],{"class":203},"  -d",[144,30000,29229],{"class":203},[144,30002,29973],{"class":259},[144,30004,24691],{"class":203},[144,30006,30007,30009,30012],{"class":146,"line":1210},[144,30008,28141],{"class":154},[144,30010,30011],{"class":259},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[144,30013,30014],{"class":203},"  \\\n",[144,30016,30017,30019,30022],{"class":146,"line":1225},[144,30018,28141],{"class":154},[144,30020,30021],{"class":259},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[144,30023,30014],{"class":203},[144,30025,30026,30029],{"class":146,"line":1231},[144,30027,30028],{"class":154},"--cap-add=SYS_PTRACE  ",[144,30030,26188],{"class":203},[144,30032,30033],{"class":146,"line":1245},[144,30034,30035],{"class":154},"tulingmall-member:0.0.5\n",[14,30037,30038],{},"5、访问会员服务接口",[14,30040,30041],{},[28,30042],{"alt":30,"src":30043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22029,30045,30047],{"id":30046},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30049,30050],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30052,30053,30054],{},"阿里云docker镜像仓库：",[393,30055,30056],{"href":30056,"rel":30057},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23897],[14,30059,30060],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30062,30063],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30065,30066],{},[28,30067],{"alt":30,"src":30068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30070,30071],{},"要把镜像推送到镜像仓库",[135,30073,30075],{"className":23854,"code":30074,"language":23856,"meta":30,"style":30},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[141,30076,30077],{"__ignoreMap":30},[144,30078,30079,30081,30083,30085],{"class":146,"line":147},[144,30080,26566],{"class":1993},[144,30082,28910],{"class":259},[144,30084,29942],{"class":259},[144,30086,30087],{"class":259}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30089,30090],{},"最后将镜像推送到远程仓库",[135,30092,30094],{"className":23854,"code":30093,"language":23856,"meta":30,"style":30},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[141,30095,30096],{"__ignoreMap":30},[144,30097,30098,30100,30102],{"class":146,"line":147},[144,30099,26566],{"class":1993},[144,30101,29029],{"class":259},[144,30103,30087],{"class":259},[5157,30105,30106],{},"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":30,"searchDepth":66,"depth":66,"links":30108},[30109,30110,30111],{"id":28496,"depth":1210,"text":28497},{"id":28725,"depth":1210,"text":28726},{"id":29751,"depth":1210,"text":29752},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28488,"description":30},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30118,"title":30119,"body":30120,"description":30,"extension":70,"meta":30263,"navigation":72,"path":30264,"seo":30265,"stem":30266,"__hash__":30267},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30121,"toc":30261},[30122,30125,30130,30135,30138,30143,30148,30151,30156,30161,30164,30169,30172,30175,30178,30181,30184,30187,30207,30229,30232,30235,30255,30258],[10,30123,30119],{"id":30124},"_7vscode远程开发",[98,30126,30127],{},[101,30128,30129],{},"插件1：微软Docker工具",[14,30131,30132],{},[28,30133],{"alt":30,"src":30134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30136,30137],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30139,30140],{},[28,30141],{"alt":30,"src":30142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[98,30144,30145],{"start":66},[101,30146,30147],{},"插件2：微软Docker远程开发工具",[14,30149,30150],{},"下面这是远程开发的插件。",[14,30152,30153],{},[28,30154],{"alt":30,"src":30155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30157,30158],{},[28,30159],{"alt":30,"src":30160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30162,30163],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30165,30166],{},[28,30167],{"alt":30,"src":30168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30170,30171],{},"安装完拓展之后，vscode进行链接：",[14,30173,30174],{},"1.按ctrl+shift+p",[14,30176,30177],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30179,30180],{},"3.选择目前运行的容器",[14,30182,30183],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30185,30186],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[135,30188,30190],{"className":23854,"code":30189,"language":23856,"meta":30,"style":30},"docker run -v 主机目录:容器目录 image-name\n",[141,30191,30192],{"__ignoreMap":30},[144,30193,30194,30196,30198,30201,30204],{"class":146,"line":147},[144,30195,26566],{"class":1993},[144,30197,27243],{"class":259},[144,30199,30200],{"class":203}," -v",[144,30202,30203],{"class":259}," 主机目录:容器目录",[144,30205,30206],{"class":259}," image-name\n",[135,30208,30210],{"className":23854,"code":30209,"language":23856,"meta":30,"style":30},"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",[141,30211,30212],{"__ignoreMap":30},[144,30213,30214,30216,30218,30221,30223,30226],{"class":146,"line":147},[144,30215,26566],{"class":1993},[144,30217,27243],{"class":259},[144,30219,30220],{"class":203}," -it",[144,30222,30200],{"class":203},[144,30224,30225],{"class":259}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[144,30227,30228],{"class":259}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30230,30231],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30233,30234],{},"查看挂载情况：",[135,30236,30238],{"className":23854,"code":30237,"language":23856,"meta":30,"style":30},"mount | grep -i project\n",[141,30239,30240],{"__ignoreMap":30},[144,30241,30242,30245,30247,30250,30252],{"class":146,"line":147},[144,30243,30244],{"class":1993},"mount",[144,30246,25122],{"class":150},[144,30248,30249],{"class":1993}," grep",[144,30251,26443],{"class":203},[144,30253,30254],{"class":259}," project\n",[14,30256,30257],{},"也可以通过ls来进行查看",[5157,30259,30260],{},"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":30,"searchDepth":66,"depth":66,"links":30262},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30119,"description":30},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30269,"title":30270,"body":30271,"description":23408,"extension":70,"meta":30275,"navigation":72,"path":30277,"seo":30278,"stem":30279,"__hash__":30280},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30272,"toc":30273},[],{"title":30,"searchDepth":66,"depth":66,"links":30274},[],{"category":30276},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30270,"description":23408},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30282,"title":30283,"body":30284,"description":23408,"extension":70,"meta":30288,"navigation":72,"path":30289,"seo":30290,"stem":30291,"__hash__":30292},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30285,"toc":30286},[],{"title":30,"searchDepth":66,"depth":66,"links":30287},[],{"category":30276},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30283,"description":23408},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30294,"title":30295,"body":30296,"description":23408,"extension":70,"meta":30589,"navigation":72,"path":30590,"seo":30591,"stem":30592,"__hash__":30593},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30297,"toc":30587},[30298,30301,30309,30324,30329,30380,30383,30389,30576,30581,30584],[10,30299,30295],{"id":30300},"_1验证深度学习环境",[14,30302,30303,30304],{},"关于环境的安装，看",[393,30305,30308],{"href":30306,"rel":30307},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23897],"Pytorch-->深度学习",[14,30310,30311,30312,30315,30316,30319,30320,30323],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[141,30313,30314],{},"pytorch-cuda=12.4"," 是一个“ ",[304,30317,30318],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[304,30321,30322],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,30325,30326],{},[28,30327],{"alt":30,"src":30328},"\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",[135,30330,30332],{"className":23854,"code":30331,"language":23856,"meta":30,"style":30},"# 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",[141,30333,30334,30339],{"__ignoreMap":30},[144,30335,30336],{"class":146,"line":147},[144,30337,30338],{"class":213},"# CUDA 12.4\n",[144,30340,30341,30344,30346,30349,30352,30355,30358,30361,30363,30366,30369,30372,30375,30377],{"class":146,"line":66},[144,30342,30343],{"class":1993},"conda",[144,30345,23866],{"class":259},[144,30347,30348],{"class":259}," pytorch==",[144,30350,30351],{"class":203},"2.5.1",[144,30353,30354],{"class":259}," torchvision==",[144,30356,30357],{"class":203},"0.20.1",[144,30359,30360],{"class":259}," torchaudio==",[144,30362,30351],{"class":203},[144,30364,30365],{"class":259}," pytorch-cuda=",[144,30367,30368],{"class":203},"12.4",[144,30370,30371],{"class":203}," -c",[144,30373,30374],{"class":259}," pytorch",[144,30376,30371],{"class":203},[144,30378,30379],{"class":259}," nvidia\n",[14,30381,30382],{},"）：",[14,30384,30385],{},[393,30386,30387],{"href":30387,"rel":30388},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23897],[135,30390,30394],{"className":30391,"code":30392,"language":30393,"meta":30,"style":30},"language-python shiki shiki-themes github-light github-dark","# 对深度学习环境进行测试\nimport torch\n# 查看cuda是否被激活\nflag=torch.cuda.is_available()\nprint(\"cuda:\", flag)   #返回true的话说明被激活\n# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\nngpu=1\ndevice=torch.device(\"cuda:0\" if(torch.cuda.is_available() and ngpu>0) else \"cpu\")\nprint(device)\nprint(torch.cuda.get_device_name(0))\nprint(torch.rand(3,3).cuda())\n# 查看cuda和cudnn的版本\ncuda_version=torch.version.cuda\nprint(\"cuda version\",cuda_version)\ncudnn_version=torch.backends.cudnn.version()\nprint(\"cudnn version\",cudnn_version)\n","python",[141,30395,30396,30401,30409,30414,30424,30440,30445,30455,30492,30499,30511,30527,30532,30542,30554,30564],{"__ignoreMap":30},[144,30397,30398],{"class":146,"line":147},[144,30399,30400],{"class":213},"# 对深度学习环境进行测试\n",[144,30402,30403,30406],{"class":146,"line":66},[144,30404,30405],{"class":150},"import",[144,30407,30408],{"class":154}," torch\n",[144,30410,30411],{"class":146,"line":1210},[144,30412,30413],{"class":213},"# 查看cuda是否被激活\n",[144,30415,30416,30419,30421],{"class":146,"line":1225},[144,30417,30418],{"class":154},"flag",[144,30420,200],{"class":150},[144,30422,30423],{"class":154},"torch.cuda.is_available()\n",[144,30425,30426,30429,30431,30434,30437],{"class":146,"line":1231},[144,30427,30428],{"class":203},"print",[144,30430,155],{"class":154},[144,30432,30433],{"class":259},"\"cuda:\"",[144,30435,30436],{"class":154},", flag)   ",[144,30438,30439],{"class":213},"#返回true的话说明被激活\n",[144,30441,30442],{"class":146,"line":1245},[144,30443,30444],{"class":213},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[144,30446,30447,30450,30452],{"class":146,"line":1251},[144,30448,30449],{"class":154},"ngpu",[144,30451,200],{"class":150},[144,30453,30454],{"class":203},"1\n",[144,30456,30457,30460,30462,30465,30468,30470,30473,30476,30479,30481,30483,30485,30487,30490],{"class":146,"line":1342},[144,30458,30459],{"class":154},"device",[144,30461,200],{"class":150},[144,30463,30464],{"class":154},"torch.device(",[144,30466,30467],{"class":259},"\"cuda:0\"",[144,30469,1734],{"class":150},[144,30471,30472],{"class":154},"(torch.cuda.is_available() ",[144,30474,30475],{"class":150},"and",[144,30477,30478],{"class":154}," ngpu",[144,30480,1115],{"class":150},[144,30482,346],{"class":203},[144,30484,13745],{"class":154},[144,30486,1731],{"class":150},[144,30488,30489],{"class":259}," \"cpu\"",[144,30491,161],{"class":154},[144,30493,30494,30496],{"class":146,"line":1348},[144,30495,30428],{"class":203},[144,30497,30498],{"class":154},"(device)\n",[144,30500,30501,30503,30506,30508],{"class":146,"line":1360},[144,30502,30428],{"class":203},[144,30504,30505],{"class":154},"(torch.cuda.get_device_name(",[144,30507,346],{"class":203},[144,30509,30510],{"class":154},"))\n",[144,30512,30513,30515,30518,30520,30522,30524],{"class":146,"line":1642},[144,30514,30428],{"class":203},[144,30516,30517],{"class":154},"(torch.rand(",[144,30519,226],{"class":203},[144,30521,533],{"class":154},[144,30523,226],{"class":203},[144,30525,30526],{"class":154},").cuda())\n",[144,30528,30529],{"class":146,"line":1647},[144,30530,30531],{"class":213},"# 查看cuda和cudnn的版本\n",[144,30533,30534,30537,30539],{"class":146,"line":1653},[144,30535,30536],{"class":154},"cuda_version",[144,30538,200],{"class":150},[144,30540,30541],{"class":154},"torch.version.cuda\n",[144,30543,30544,30546,30548,30551],{"class":146,"line":1658},[144,30545,30428],{"class":203},[144,30547,155],{"class":154},[144,30549,30550],{"class":259},"\"cuda version\"",[144,30552,30553],{"class":154},",cuda_version)\n",[144,30555,30556,30559,30561],{"class":146,"line":1672},[144,30557,30558],{"class":154},"cudnn_version",[144,30560,200],{"class":150},[144,30562,30563],{"class":154},"torch.backends.cudnn.version()\n",[144,30565,30566,30568,30570,30573],{"class":146,"line":1677},[144,30567,30428],{"class":203},[144,30569,155],{"class":154},[144,30571,30572],{"class":259},"\"cudnn version\"",[144,30574,30575],{"class":154},",cudnn_version)\n",[14,30577,30578],{},[28,30579],{"alt":30,"src":30580},"\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,30582,30583],{},"cuda:0 指的是一块显卡",[5157,30585,30586],{},"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":30,"searchDepth":66,"depth":66,"links":30588},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30295,"description":23408},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30595,"title":30596,"body":30597,"description":23408,"extension":70,"meta":50401,"navigation":72,"path":50402,"seo":50403,"stem":50404,"__hash__":50405},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30598,"toc":50395},[30599,30602,30606,30610,30613,30618,30623,30626,30631,30636,30641,30644,30648,30653,30657,30662,30665,30670,30673,30676,30679,30682,30687,30690,30695,30700,30705,30710,30713,30717,30720,30725,31329,31334,31337,31342,31345,31348,31812,31815,31818,31821,31824,33875,33878,33883,33888,34683,34686,34691,35469,35473,37132,37136,37850,37854,37858,37863,37868,37873,37876,37881,37886,37891,37896,37901,37905,37910,39192,39197,39200,39203,39206,39361,39364,39367,40583,40588,41283,41287,41291,41296,41301,41304,41309,41314,41319,41324,41329,41334,41339,41344,41349,41354,41359,41364,41369,41374,41379,41384,41389,41394,41399,41404,41409,41414,41419,41424,41429,41434,41439,41444,41449,41454,41458,41462,41465,42943,42947,44594,44598,45292,45296,45299,45302,45846,45849,45853,45856,47253,47257,47260,47838,49625,49629,49632,50392],[10,30600,30596],{"id":30601},"_2经典神经网络",[115,30603,30605],{"id":30604},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22029,30607,30609],{"id":30608},"_211原理介绍","2.1.1.原理介绍",[14,30611,30612],{},"LeNet-5",[98,30614,30615],{},[101,30616,30617],{},"原理",[14,30619,30620],{},[28,30621],{"alt":30,"src":30622},"\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,30624,30625],{},"B是batch批次；C是channel通道",[98,30627,30628],{"start":66},[101,30629,30630],{},"网络参数详细",[14,30632,30633],{},[28,30634],{"alt":30,"src":30635},"\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,30637,30638],{},[28,30639],{"alt":30,"src":30640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[14,30642,30643],{},"AlexNet",[98,30645,30646],{},[101,30647,30617],{},[14,30649,30650],{},[28,30651],{"alt":30,"src":30652},"\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",[98,30654,30655],{"start":66},[101,30656,30630],{},[14,30658,30659],{},[28,30660],{"alt":30,"src":30661},"\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,30663,30664],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,30666,30667],{},[28,30668],{"alt":30,"src":30669},"\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,30671,30672],{},"数据处理中的图像增强操作:",[14,30674,30675],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,30677,30678],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,30680,30681],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,30683,30684],{},[28,30685],{"alt":30,"src":30686},"\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,30688,30689],{},"提升网络精确度的方法：LRN正则化",[14,30691,30692],{},[28,30693],{"alt":30,"src":30694},"\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,30696,30697],{},[28,30698],{"alt":30,"src":30699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-011.png",[98,30701,30702],{"start":1210},[101,30703,30704],{},"AlexNet的总结",[14,30706,30707],{},[28,30708],{"alt":30,"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-012.png",[14,30711,30712],{},"比LeNet模型要深一丢丢",[22029,30714,30716],{"id":30715},"_212代码实现","2.1.2.代码实现",[14,30718,30719],{},"（1）LeNet",[98,30721,30722],{},[101,30723,30724],{},"模型搭建",[135,30726,30728],{"className":30391,"code":30727,"language":30393,"meta":30,"style":30},"# 导入库\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",[141,30729,30730,30735,30741,30746,30759,30764,30776,30780,30800,30805,30810,30821,30826,30845,30849,30854,30903,30915,30920,30949,30984,31011,31016,31028,31033,31053,31072,31091,31095,31100,31110,31127,31138,31153,31164,31175,31190,31205,31216,31223,31227,31241,31246,31269,31274,31279,31284,31288,31293,31298,31308],{"__ignoreMap":30},[144,30731,30732],{"class":146,"line":147},[144,30733,30734],{"class":213},"# 导入库\n",[144,30736,30737,30739],{"class":146,"line":66},[144,30738,30405],{"class":150},[144,30740,30408],{"class":154},[144,30742,30743],{"class":146,"line":1210},[144,30744,30745],{"class":213},"# 导入神经网络层\n",[144,30747,30748,30751,30754,30756],{"class":146,"line":1225},[144,30749,30750],{"class":150},"from",[144,30752,30753],{"class":154}," torch ",[144,30755,30405],{"class":150},[144,30757,30758],{"class":154}," nn\n",[144,30760,30761],{"class":146,"line":1231},[144,30762,30763],{"class":213},"# 导入展示神经网络参数的包\n",[144,30765,30766,30768,30771,30773],{"class":146,"line":1245},[144,30767,30750],{"class":150},[144,30769,30770],{"class":154}," torchsummary ",[144,30772,30405],{"class":150},[144,30774,30775],{"class":154}," summary\n",[144,30777,30778],{"class":146,"line":1251},[144,30779,2430],{"emptyLinePlaceholder":72},[144,30781,30782,30784,30787,30789,30792,30794,30797],{"class":146,"line":1342},[144,30783,14725],{"class":150},[144,30785,30786],{"class":1993}," LeNet",[144,30788,155],{"class":154},[144,30790,30791],{"class":1993},"nn",[144,30793,713],{"class":154},[144,30795,30796],{"class":1993},"Module",[144,30798,30799],{"class":154},"):\n",[144,30801,30802],{"class":146,"line":1348},[144,30803,30804],{"class":213},"    # 模型初始化:\n",[144,30806,30807],{"class":146,"line":1360},[144,30808,30809],{"class":213},"    # 定义一些网络层和激活函数\n",[144,30811,30812,30815,30818],{"class":146,"line":1642},[144,30813,30814],{"class":150},"    def",[144,30816,30817],{"class":203}," __init__",[144,30819,30820],{"class":154},"(self):\n",[144,30822,30823],{"class":146,"line":1647},[144,30824,30825],{"class":213},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[144,30827,30828,30831,30834,30837,30840,30843],{"class":146,"line":1653},[144,30829,30830],{"class":203},"        super",[144,30832,30833],{"class":154},"(LeNet,",[144,30835,30836],{"class":203},"self",[144,30838,30839],{"class":154},").",[144,30841,30842],{"class":203},"__init__",[144,30844,2006],{"class":154},[144,30846,30847],{"class":146,"line":1658},[144,30848,2430],{"emptyLinePlaceholder":72},[144,30850,30851],{"class":146,"line":1672},[144,30852,30853],{"class":213},"        # 定义网络层\n",[144,30855,30856,30859,30862,30864,30867,30870,30872,30874,30876,30879,30881,30883,30885,30888,30890,30892,30894,30897,30899,30901],{"class":146,"line":1677},[144,30857,30858],{"class":203},"        self",[144,30860,30861],{"class":154},".c1",[144,30863,200],{"class":150},[144,30865,30866],{"class":154},"nn.Conv2d(",[144,30868,30869],{"class":5247},"in_channels",[144,30871,200],{"class":150},[144,30873,372],{"class":203},[144,30875,533],{"class":154},[144,30877,30878],{"class":5247},"out_channels",[144,30880,200],{"class":150},[144,30882,499],{"class":203},[144,30884,533],{"class":154},[144,30886,30887],{"class":5247},"kernel_size",[144,30889,200],{"class":150},[144,30891,474],{"class":203},[144,30893,533],{"class":154},[144,30895,30896],{"class":5247},"padding",[144,30898,200],{"class":150},[144,30900,232],{"class":203},[144,30902,161],{"class":154},[144,30904,30905,30907,30910,30912],{"class":146,"line":1683},[144,30906,30858],{"class":203},[144,30908,30909],{"class":154},".sig",[144,30911,200],{"class":150},[144,30913,30914],{"class":154},"nn.Sigmoid()\n",[144,30916,30917],{"class":146,"line":1704},[144,30918,30919],{"class":213},"        # 定义池化\n",[144,30921,30922,30924,30927,30929,30932,30934,30936,30938,30940,30943,30945,30947],{"class":146,"line":1709},[144,30923,30858],{"class":203},[144,30925,30926],{"class":154},".s2",[144,30928,200],{"class":150},[144,30930,30931],{"class":154},"nn.AvgPool2d(",[144,30933,30887],{"class":5247},[144,30935,200],{"class":150},[144,30937,232],{"class":203},[144,30939,533],{"class":154},[144,30941,30942],{"class":5247},"stride",[144,30944,200],{"class":150},[144,30946,232],{"class":203},[144,30948,161],{"class":154},[144,30950,30951,30953,30956,30958,30960,30962,30964,30966,30968,30970,30972,30974,30976,30978,30980,30982],{"class":146,"line":1723},[144,30952,30858],{"class":203},[144,30954,30955],{"class":154},".c3",[144,30957,200],{"class":150},[144,30959,30866],{"class":154},[144,30961,30869],{"class":5247},[144,30963,200],{"class":150},[144,30965,499],{"class":203},[144,30967,533],{"class":154},[144,30969,30878],{"class":5247},[144,30971,200],{"class":150},[144,30973,756],{"class":203},[144,30975,533],{"class":154},[144,30977,30887],{"class":5247},[144,30979,200],{"class":150},[144,30981,474],{"class":203},[144,30983,161],{"class":154},[144,30985,30986,30988,30991,30993,30995,30997,30999,31001,31003,31005,31007,31009],{"class":146,"line":1728},[144,30987,30858],{"class":203},[144,30989,30990],{"class":154},".s4",[144,30992,200],{"class":150},[144,30994,30931],{"class":154},[144,30996,30887],{"class":5247},[144,30998,200],{"class":150},[144,31000,232],{"class":203},[144,31002,533],{"class":154},[144,31004,30942],{"class":5247},[144,31006,200],{"class":150},[144,31008,232],{"class":203},[144,31010,161],{"class":154},[144,31012,31013],{"class":146,"line":1757},[144,31014,31015],{"class":213},"        # 定义平展层\n",[144,31017,31018,31020,31023,31025],{"class":146,"line":1762},[144,31019,30858],{"class":203},[144,31021,31022],{"class":154},".flatten",[144,31024,200],{"class":150},[144,31026,31027],{"class":154},"nn.Flatten()\n",[144,31029,31030],{"class":146,"line":1779},[144,31031,31032],{"class":213},"        # 定义全连接层\n",[144,31034,31035,31037,31040,31042,31045,31047,31049,31051],{"class":146,"line":1784},[144,31036,30858],{"class":203},[144,31038,31039],{"class":154},".f5",[144,31041,200],{"class":150},[144,31043,31044],{"class":154},"nn.Linear(",[144,31046,4017],{"class":203},[144,31048,533],{"class":154},[144,31050,972],{"class":203},[144,31052,161],{"class":154},[144,31054,31055,31057,31060,31062,31064,31066,31068,31070],{"class":146,"line":1789},[144,31056,30858],{"class":203},[144,31058,31059],{"class":154},".f6",[144,31061,200],{"class":150},[144,31063,31044],{"class":154},[144,31065,972],{"class":203},[144,31067,533],{"class":154},[144,31069,866],{"class":203},[144,31071,161],{"class":154},[144,31073,31074,31076,31079,31081,31083,31085,31087,31089],{"class":146,"line":1794},[144,31075,30858],{"class":203},[144,31077,31078],{"class":154},".f7",[144,31080,200],{"class":150},[144,31082,31044],{"class":154},[144,31084,866],{"class":203},[144,31086,533],{"class":154},[144,31088,601],{"class":203},[144,31090,161],{"class":154},[144,31092,31093],{"class":146,"line":1808},[144,31094,2430],{"emptyLinePlaceholder":72},[144,31096,31097],{"class":146,"line":1813},[144,31098,31099],{"class":213},"    # 写工具->写前向传播\n",[144,31101,31102,31104,31107],{"class":146,"line":2607},[144,31103,30814],{"class":150},[144,31105,31106],{"class":1993}," forward",[144,31108,31109],{"class":154},"(self,x):\n",[144,31111,31112,31115,31117,31119,31122,31124],{"class":146,"line":2621},[144,31113,31114],{"class":154},"        x",[144,31116,200],{"class":150},[144,31118,30836],{"class":203},[144,31120,31121],{"class":154},".sig(",[144,31123,30836],{"class":203},[144,31125,31126],{"class":154},".c1(x))\n",[144,31128,31129,31131,31133,31135],{"class":146,"line":2629},[144,31130,31114],{"class":154},[144,31132,200],{"class":150},[144,31134,30836],{"class":203},[144,31136,31137],{"class":154},".s2(x)\n",[144,31139,31140,31142,31144,31146,31148,31150],{"class":146,"line":2634},[144,31141,31114],{"class":154},[144,31143,200],{"class":150},[144,31145,30836],{"class":203},[144,31147,31121],{"class":154},[144,31149,30836],{"class":203},[144,31151,31152],{"class":154},".c3(x))\n",[144,31154,31155,31157,31159,31161],{"class":146,"line":2640},[144,31156,31114],{"class":154},[144,31158,200],{"class":150},[144,31160,30836],{"class":203},[144,31162,31163],{"class":154},".s4(x)\n",[144,31165,31166,31168,31170,31172],{"class":146,"line":2646},[144,31167,31114],{"class":154},[144,31169,200],{"class":150},[144,31171,30836],{"class":203},[144,31173,31174],{"class":154},".flatten(x)\n",[144,31176,31177,31179,31181,31183,31185,31187],{"class":146,"line":2651},[144,31178,31114],{"class":154},[144,31180,200],{"class":150},[144,31182,30836],{"class":203},[144,31184,31121],{"class":154},[144,31186,30836],{"class":203},[144,31188,31189],{"class":154},".f5(x))\n",[144,31191,31192,31194,31196,31198,31200,31202],{"class":146,"line":7979},[144,31193,31114],{"class":154},[144,31195,200],{"class":150},[144,31197,30836],{"class":203},[144,31199,31121],{"class":154},[144,31201,30836],{"class":203},[144,31203,31204],{"class":154},".f6(x))\n",[144,31206,31207,31209,31211,31213],{"class":146,"line":8003},[144,31208,31114],{"class":154},[144,31210,200],{"class":150},[144,31212,30836],{"class":203},[144,31214,31215],{"class":154},".f7(x)\n",[144,31217,31218,31220],{"class":146,"line":8008},[144,31219,14783],{"class":150},[144,31221,31222],{"class":154}," x\n",[144,31224,31225],{"class":146,"line":8014},[144,31226,2430],{"emptyLinePlaceholder":72},[144,31228,31229,31231,31234,31236,31239],{"class":146,"line":8041},[144,31230,1561],{"class":150},[144,31232,31233],{"class":203}," __name__",[144,31235,2979],{"class":150},[144,31237,31238],{"class":259},"\"__main__\"",[144,31240,3769],{"class":154},[144,31242,31243],{"class":146,"line":8046},[144,31244,31245],{"class":213},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[144,31247,31248,31251,31253,31255,31258,31260,31263,31265,31267],{"class":146,"line":8052},[144,31249,31250],{"class":154},"    device",[144,31252,200],{"class":150},[144,31254,30464],{"class":154},[144,31256,31257],{"class":259},"\"cuda\"",[144,31259,1734],{"class":150},[144,31261,31262],{"class":154}," torch.cuda.is_available() ",[144,31264,1731],{"class":150},[144,31266,30489],{"class":259},[144,31268,161],{"class":154},[144,31270,31271],{"class":146,"line":8064},[144,31272,31273],{"class":213},"    # 如果就是想指定用cpu用下方代码:\n",[144,31275,31276],{"class":146,"line":8076},[144,31277,31278],{"class":213},"    # device=\"cpu\"\n",[144,31280,31281],{"class":146,"line":8088},[144,31282,31283],{"class":213},"    # print(device)\n",[144,31285,31286],{"class":146,"line":9747},[144,31287,2430],{"emptyLinePlaceholder":72},[144,31289,31290],{"class":146,"line":9772},[144,31291,31292],{"class":213},"    # 实例化模型\n",[144,31294,31295],{"class":146,"line":9795},[144,31296,31297],{"class":213},"    # 将模型放到设备中去运行\n",[144,31299,31300,31303,31305],{"class":146,"line":9819},[144,31301,31302],{"class":154},"    model",[144,31304,200],{"class":150},[144,31306,31307],{"class":154},"LeNet().to(device)\n",[144,31309,31310,31313,31316,31318,31320,31322,31324,31326],{"class":146,"line":9824},[144,31311,31312],{"class":203},"    print",[144,31314,31315],{"class":154},"(summary(model,(",[144,31317,372],{"class":203},[144,31319,533],{"class":154},[144,31321,1056],{"class":203},[144,31323,533],{"class":154},[144,31325,1056],{"class":203},[144,31327,31328],{"class":154},")))\n",[14,31330,31331],{},[28,31332],{"alt":30,"src":31333},"\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,31335,31336],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[98,31338,31339],{"start":66},[101,31340,31341],{},"训练",[14,31343,31344],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,31346,31347],{},"在训练之前可以将数据展示看一下",[135,31349,31351],{"className":30391,"code":31350,"language":30393,"meta":30,"style":30},"# 建立画图的函数，用于展示数据\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",[141,31352,31353,31358,31363,31375,31387,31400,31405,31417,31422,31434,31439,31451,31455,31459,31480,31492,31497,31518,31529,31533,31538,31556,31567,31572,31583,31588,31599,31603,31608,31623,31636,31641,31646,31659,31672,31685,31690,31694,31699,31719,31736,31756,31769,31782,31792,31807],{"__ignoreMap":30},[144,31354,31355],{"class":146,"line":147},[144,31356,31357],{"class":213},"# 建立画图的函数，用于展示数据\n",[144,31359,31360],{"class":146,"line":66},[144,31361,31362],{"class":213},"# torchvision中包含很多内置的数据集\n",[144,31364,31365,31367,31370,31372],{"class":146,"line":1210},[144,31366,30750],{"class":150},[144,31368,31369],{"class":154}," sklearn.externals.array_api_compat.torch ",[144,31371,30405],{"class":150},[144,31373,31374],{"class":154}," squeeze\n",[144,31376,31377,31379,31382,31384],{"class":146,"line":1225},[144,31378,30750],{"class":150},[144,31380,31381],{"class":154}," torchvision.datasets ",[144,31383,30405],{"class":150},[144,31385,31386],{"class":154}," FashionMNIST\n",[144,31388,31389,31391,31394,31397],{"class":146,"line":1231},[144,31390,30405],{"class":150},[144,31392,31393],{"class":154}," numpy ",[144,31395,31396],{"class":150},"as",[144,31398,31399],{"class":154}," np\n",[144,31401,31402],{"class":146,"line":1245},[144,31403,31404],{"class":213},"# 引入处理数据集的包\n",[144,31406,31407,31409,31412,31414],{"class":146,"line":1251},[144,31408,30750],{"class":150},[144,31410,31411],{"class":154}," torchvision ",[144,31413,30405],{"class":150},[144,31415,31416],{"class":154}," transforms\n",[144,31418,31419],{"class":146,"line":1342},[144,31420,31421],{"class":213},"# 从torch库中引入数据处理的包\n",[144,31423,31424,31426,31429,31431],{"class":146,"line":1348},[144,31425,30405],{"class":150},[144,31427,31428],{"class":154}," torch.utils.data ",[144,31430,31396],{"class":150},[144,31432,31433],{"class":154}," Data\n",[144,31435,31436],{"class":146,"line":1360},[144,31437,31438],{"class":213},"# 导入画图的库\n",[144,31440,31441,31443,31446,31448],{"class":146,"line":1642},[144,31442,30405],{"class":150},[144,31444,31445],{"class":154}," matplotlib.pyplot ",[144,31447,31396],{"class":150},[144,31449,31450],{"class":154}," plt\n",[144,31452,31453],{"class":146,"line":1647},[144,31454,2430],{"emptyLinePlaceholder":72},[144,31456,31457],{"class":146,"line":1653},[144,31458,2430],{"emptyLinePlaceholder":72},[144,31460,31461,31464,31466,31469,31472,31474,31477],{"class":146,"line":1658},[144,31462,31463],{"class":154},"train_data",[144,31465,200],{"class":150},[144,31467,31468],{"class":154},"FashionMNIST(",[144,31470,31471],{"class":5247},"root",[144,31473,200],{"class":150},[144,31475,31476],{"class":259},"'.\u002Fdata'",[144,31478,31479],{"class":154},",\n",[144,31481,31482,31485,31487,31490],{"class":146,"line":1672},[144,31483,31484],{"class":5247},"                        train",[144,31486,200],{"class":150},[144,31488,31489],{"class":203},"True",[144,31491,31479],{"class":154},[144,31493,31494],{"class":146,"line":1677},[144,31495,31496],{"class":213},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[144,31498,31499,31502,31504,31507,31510,31512,31515],{"class":146,"line":1683},[144,31500,31501],{"class":5247},"                        transform",[144,31503,200],{"class":150},[144,31505,31506],{"class":154},"transforms.Compose([transforms.Resize(",[144,31508,31509],{"class":5247},"size",[144,31511,200],{"class":150},[144,31513,31514],{"class":203},"224",[144,31516,31517],{"class":154},"),transforms.ToTensor()]),\n",[144,31519,31520,31523,31525,31527],{"class":146,"line":1704},[144,31521,31522],{"class":5247},"                        download",[144,31524,200],{"class":150},[144,31526,31489],{"class":203},[144,31528,161],{"class":154},[144,31530,31531],{"class":146,"line":1709},[144,31532,2430],{"emptyLinePlaceholder":72},[144,31534,31535],{"class":146,"line":1723},[144,31536,31537],{"class":213},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[144,31539,31540,31543,31545,31548,31551,31553],{"class":146,"line":1728},[144,31541,31542],{"class":154},"train_loader",[144,31544,200],{"class":150},[144,31546,31547],{"class":154},"Data.DataLoader(",[144,31549,31550],{"class":5247},"dataset",[144,31552,200],{"class":150},[144,31554,31555],{"class":154},"train_data,\n",[144,31557,31558,31561,31563,31565],{"class":146,"line":1757},[144,31559,31560],{"class":5247},"                             batch_size",[144,31562,200],{"class":150},[144,31564,358],{"class":203},[144,31566,31479],{"class":154},[144,31568,31569],{"class":146,"line":1762},[144,31570,31571],{"class":213},"                             # 数据是否打乱\n",[144,31573,31574,31577,31579,31581],{"class":146,"line":1779},[144,31575,31576],{"class":5247},"                             shuffle",[144,31578,200],{"class":150},[144,31580,31489],{"class":203},[144,31582,31479],{"class":154},[144,31584,31585],{"class":146,"line":1784},[144,31586,31587],{"class":213},"                             # 规定加载数据的进程\n",[144,31589,31590,31593,31595,31597],{"class":146,"line":1789},[144,31591,31592],{"class":5247},"                             num_workers",[144,31594,200],{"class":150},[144,31596,346],{"class":203},[144,31598,161],{"class":154},[144,31600,31601],{"class":146,"line":1794},[144,31602,2430],{"emptyLinePlaceholder":72},[144,31604,31605],{"class":146,"line":1808},[144,31606,31607],{"class":213},"# 获得一个batch的数据\n",[144,31609,31610,31612,31615,31617,31620],{"class":146,"line":1813},[144,31611,3055],{"class":150},[144,31613,31614],{"class":154}," step,(b_x,b_y) ",[144,31616,26056],{"class":150},[144,31618,31619],{"class":203}," enumerate",[144,31621,31622],{"class":154},"(train_loader):\n",[144,31624,31625,31627,31630,31632,31634],{"class":146,"line":2607},[144,31626,3131],{"class":150},[144,31628,31629],{"class":154}," step ",[144,31631,1115],{"class":150},[144,31633,4123],{"class":203},[144,31635,3769],{"class":154},[144,31637,31638],{"class":146,"line":2621},[144,31639,31640],{"class":150},"        break\n",[144,31642,31643],{"class":146,"line":2629},[144,31644,31645],{"class":213},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[144,31647,31648,31651,31653,31656],{"class":146,"line":2634},[144,31649,31650],{"class":154},"batch_x",[144,31652,200],{"class":150},[144,31654,31655],{"class":154},"b_x.squeeze().numpy()  ",[144,31657,31658],{"class":213},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[144,31660,31661,31664,31666,31669],{"class":146,"line":2640},[144,31662,31663],{"class":154},"batch_y",[144,31665,200],{"class":150},[144,31667,31668],{"class":154},"b_y.numpy()   ",[144,31670,31671],{"class":213},"#将张量转换成功numpy数组\n",[144,31673,31674,31677,31679,31682],{"class":146,"line":2646},[144,31675,31676],{"class":154},"class_label",[144,31678,200],{"class":150},[144,31680,31681],{"class":154},"train_data.classes  ",[144,31683,31684],{"class":213},"#训练集标签\n",[144,31686,31687],{"class":146,"line":2651},[144,31688,31689],{"class":213},"# print(class_label)\n",[144,31691,31692],{"class":146,"line":7979},[144,31693,2430],{"emptyLinePlaceholder":72},[144,31695,31696],{"class":146,"line":8003},[144,31697,31698],{"class":213},"# 可视化一个batch的图像\n",[144,31700,31701,31704,31707,31709,31711,31713,31715,31717],{"class":146,"line":8008},[144,31702,31703],{"class":154},"plt.figure(",[144,31705,31706],{"class":5247},"figsize",[144,31708,200],{"class":150},[144,31710,155],{"class":154},[144,31712,653],{"class":203},[144,31714,533],{"class":154},[144,31716,474],{"class":203},[144,31718,30510],{"class":154},[144,31720,31721,31723,31726,31728,31731,31733],{"class":146,"line":8014},[144,31722,3055],{"class":150},[144,31724,31725],{"class":154}," ii ",[144,31727,26056],{"class":150},[144,31729,31730],{"class":154}," np.arange(",[144,31732,7389],{"class":203},[144,31734,31735],{"class":154},"(batch_y)):\n",[144,31737,31738,31741,31743,31745,31747,31750,31752,31754],{"class":146,"line":8041},[144,31739,31740],{"class":154},"    plt.subplot(",[144,31742,448],{"class":203},[144,31744,533],{"class":154},[144,31746,756],{"class":203},[144,31748,31749],{"class":154},",ii ",[144,31751,636],{"class":150},[144,31753,25131],{"class":203},[144,31755,161],{"class":154},[144,31757,31758,31761,31764,31766],{"class":146,"line":8046},[144,31759,31760],{"class":154},"    plt.imshow(batch_x[ii,:,:],",[144,31762,31763],{"class":5247},"cmap",[144,31765,200],{"class":150},[144,31767,31768],{"class":154},"plt.cm.gray)\n",[144,31770,31771,31774,31776,31778,31780],{"class":146,"line":8052},[144,31772,31773],{"class":154},"    plt.title(class_label[batch_y[ii]],",[144,31775,31509],{"class":5247},[144,31777,200],{"class":150},[144,31779,601],{"class":203},[144,31781,161],{"class":154},[144,31783,31784,31787,31790],{"class":146,"line":8064},[144,31785,31786],{"class":154},"    plt.axis(",[144,31788,31789],{"class":259},"\"off\"",[144,31791,161],{"class":154},[144,31793,31794,31797,31800,31802,31805],{"class":146,"line":8076},[144,31795,31796],{"class":154},"    plt.subplots_adjust(",[144,31798,31799],{"class":5247},"wspace",[144,31801,200],{"class":150},[144,31803,31804],{"class":203},"0.05",[144,31806,161],{"class":154},[144,31808,31809],{"class":146,"line":8088},[144,31810,31811],{"class":154},"plt.show()\n",[14,31813,31814],{},"用matplotlib进行展示的过程可以后续再补",[14,31816,31817],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,31819,31820],{},"训练次数就是按照批次过整个训练集数据的次数",[14,31822,31823],{},"模型训练：",[135,31825,31827],{"className":30391,"code":31826,"language":30393,"meta":30,"style":30},"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",[141,31828,31829,31836,31843,31847,31859,31865,31876,31886,31896,31906,31916,31921,31933,31943,31947,31951,31956,31967,31980,31991,32008,32019,32058,32074,32086,32097,32102,32113,32129,32140,32151,32162,32169,32173,32178,32183,32187,32192,32202,32223,32227,32231,32236,32241,32246,32266,32270,32275,32285,32289,32294,32303,32308,32313,32318,32328,32332,32336,32341,32346,32356,32361,32371,32376,32385,32390,32399,32404,32413,32417,32422,32432,32436,32440,32445,32460,32488,32503,32507,32512,32517,32526,32531,32540,32545,32554,32559,32568,32573,32582,32587,32596,32601,32614,32619,32629,32634,32644,32650,32656,32662,32668,32679,32685,32705,32711,32722,32728,32734,32740,32746,32752,32758,32764,32784,32790,32806,32812,32826,32832,32847,32853,32862,32868,32877,32883,32889,32898,32904,32915,32921,32940,32946,32957,32963,32983,32999,33005,33019,33025,33031,33042,33048,33054,33064,33070,33081,33087,33097,33102,33108,33157,33204,33209,33215,33234,33240,33260,33266,33272,33282,33287,33293,33309,33354,33360,33366,33372,33383,33389,33395,33401,33419,33433,33442,33451,33460,33469,33475,33481,33489,33494,33500,33511,33517,33537,33543,33549,33555,33572,33578,33584,33590,33596,33602,33629,33653,33659,33665,33671,33682,33693,33699,33716,33739,33762,33768,33773,33782,33792,33798,33803,33809,33822,33828,33839,33850,33869],{"__ignoreMap":30},[144,31830,31831,31833],{"class":146,"line":147},[144,31832,30405],{"class":150},[144,31834,31835],{"class":154}," copy\n",[144,31837,31838,31840],{"class":146,"line":66},[144,31839,30405],{"class":150},[144,31841,31842],{"class":154}," time\n",[144,31844,31845],{"class":146,"line":1210},[144,31846,2430],{"emptyLinePlaceholder":72},[144,31848,31849,31851,31854,31856],{"class":146,"line":1225},[144,31850,30405],{"class":150},[144,31852,31853],{"class":154}," pandas ",[144,31855,31396],{"class":150},[144,31857,31858],{"class":154}," pd\n",[144,31860,31861,31863],{"class":146,"line":1231},[144,31862,30405],{"class":150},[144,31864,30408],{"class":154},[144,31866,31867,31869,31871,31873],{"class":146,"line":1245},[144,31868,30750],{"class":150},[144,31870,31428],{"class":154},[144,31872,30405],{"class":150},[144,31874,31875],{"class":154}," Dataset\n",[144,31877,31878,31880,31882,31884],{"class":146,"line":1251},[144,31879,30750],{"class":150},[144,31881,31381],{"class":154},[144,31883,30405],{"class":150},[144,31885,31386],{"class":154},[144,31887,31888,31890,31892,31894],{"class":146,"line":1342},[144,31889,30750],{"class":150},[144,31891,31411],{"class":154},[144,31893,30405],{"class":150},[144,31895,31416],{"class":154},[144,31897,31898,31900,31902,31904],{"class":146,"line":1348},[144,31899,30405],{"class":150},[144,31901,31428],{"class":154},[144,31903,31396],{"class":150},[144,31905,31433],{"class":154},[144,31907,31908,31910,31912,31914],{"class":146,"line":1360},[144,31909,30405],{"class":150},[144,31911,31445],{"class":154},[144,31913,31396],{"class":150},[144,31915,31450],{"class":154},[144,31917,31918],{"class":146,"line":1642},[144,31919,31920],{"class":213},"# 导入模型\n",[144,31922,31923,31925,31928,31930],{"class":146,"line":1647},[144,31924,30750],{"class":150},[144,31926,31927],{"class":154}," model ",[144,31929,30405],{"class":150},[144,31931,31932],{"class":154}," LeNet\n",[144,31934,31935,31937,31939,31941],{"class":146,"line":1653},[144,31936,30750],{"class":150},[144,31938,30753],{"class":154},[144,31940,30405],{"class":150},[144,31942,30758],{"class":154},[144,31944,31945],{"class":146,"line":1658},[144,31946,2430],{"emptyLinePlaceholder":72},[144,31948,31949],{"class":146,"line":1672},[144,31950,2430],{"emptyLinePlaceholder":72},[144,31952,31953],{"class":146,"line":1677},[144,31954,31955],{"class":213},"# 处理训练集与验证集函数--->划分数据集\n",[144,31957,31958,31961,31964],{"class":146,"line":1683},[144,31959,31960],{"class":150},"def",[144,31962,31963],{"class":1993}," train_val_data_process",[144,31965,31966],{"class":154},"():\n",[144,31968,31969,31972,31974,31976,31978],{"class":146,"line":1704},[144,31970,31971],{"class":154},"    train_data",[144,31973,200],{"class":150},[144,31975,31468],{"class":154},[144,31977,31476],{"class":259},[144,31979,31479],{"class":154},[144,31981,31982,31985,31987,31989],{"class":146,"line":1709},[144,31983,31984],{"class":5247},"                            train",[144,31986,200],{"class":150},[144,31988,31489],{"class":203},[144,31990,31479],{"class":154},[144,31992,31993,31996,31998,32000,32002,32004,32006],{"class":146,"line":1723},[144,31994,31995],{"class":5247},"                            transform",[144,31997,200],{"class":150},[144,31999,31506],{"class":154},[144,32001,31509],{"class":5247},[144,32003,200],{"class":150},[144,32005,1056],{"class":203},[144,32007,31517],{"class":154},[144,32009,32010,32013,32015,32017],{"class":146,"line":1728},[144,32011,32012],{"class":5247},"                            download",[144,32014,200],{"class":150},[144,32016,31489],{"class":203},[144,32018,161],{"class":154},[144,32020,32021,32024,32026,32029,32032,32034,32037,32039,32041,32044,32046,32048,32051,32053,32055],{"class":146,"line":1757},[144,32022,32023],{"class":154},"    train_data,val_data",[144,32025,200],{"class":150},[144,32027,32028],{"class":154},"Data.random_split(train_data,[",[144,32030,32031],{"class":203},"round",[144,32033,155],{"class":154},[144,32035,32036],{"class":203},"0.8",[144,32038,610],{"class":150},[144,32040,7389],{"class":203},[144,32042,32043],{"class":154},"(train_data)),",[144,32045,32031],{"class":203},[144,32047,155],{"class":154},[144,32049,32050],{"class":203},"0.2",[144,32052,610],{"class":150},[144,32054,7389],{"class":203},[144,32056,32057],{"class":154},"(train_data))])\n",[144,32059,32060,32063,32065,32068,32070,32072],{"class":146,"line":1762},[144,32061,32062],{"class":154},"    train_dataloader ",[144,32064,200],{"class":150},[144,32066,32067],{"class":154}," Data.DataLoader(",[144,32069,31550],{"class":5247},[144,32071,200],{"class":150},[144,32073,31555],{"class":154},[144,32075,32076,32079,32081,32084],{"class":146,"line":1779},[144,32077,32078],{"class":5247},"                                       batch_size",[144,32080,200],{"class":150},[144,32082,32083],{"class":203},"128",[144,32085,31479],{"class":154},[144,32087,32088,32091,32093,32095],{"class":146,"line":1784},[144,32089,32090],{"class":5247},"                                       shuffle",[144,32092,200],{"class":150},[144,32094,31489],{"class":203},[144,32096,31479],{"class":154},[144,32098,32099],{"class":146,"line":1789},[144,32100,32101],{"class":213},"                                       # 规定8个进程\n",[144,32103,32104,32107,32109,32111],{"class":146,"line":1794},[144,32105,32106],{"class":5247},"                                       num_workers",[144,32108,200],{"class":150},[144,32110,550],{"class":203},[144,32112,161],{"class":154},[144,32114,32115,32118,32120,32122,32124,32126],{"class":146,"line":1808},[144,32116,32117],{"class":154},"    val_dataloader",[144,32119,200],{"class":150},[144,32121,31547],{"class":154},[144,32123,31550],{"class":5247},[144,32125,200],{"class":150},[144,32127,32128],{"class":154},"val_data,\n",[144,32130,32131,32134,32136,32138],{"class":146,"line":1813},[144,32132,32133],{"class":5247},"                                   batch_size",[144,32135,200],{"class":150},[144,32137,32083],{"class":203},[144,32139,31479],{"class":154},[144,32141,32142,32145,32147,32149],{"class":146,"line":2607},[144,32143,32144],{"class":5247},"                                   shuffle",[144,32146,200],{"class":150},[144,32148,31489],{"class":203},[144,32150,31479],{"class":154},[144,32152,32153,32156,32158,32160],{"class":146,"line":2621},[144,32154,32155],{"class":5247},"                                   num_workers",[144,32157,200],{"class":150},[144,32159,550],{"class":203},[144,32161,161],{"class":154},[144,32163,32164,32166],{"class":146,"line":2629},[144,32165,4120],{"class":150},[144,32167,32168],{"class":154}," train_dataloader,val_dataloader\n",[144,32170,32171],{"class":146,"line":2634},[144,32172,2430],{"emptyLinePlaceholder":72},[144,32174,32175],{"class":146,"line":2640},[144,32176,32177],{"class":213},"# 验证是否出错\n",[144,32179,32180],{"class":146,"line":2646},[144,32181,32182],{"class":213},"# train_val_data_process()\n",[144,32184,32185],{"class":146,"line":2651},[144,32186,2430],{"emptyLinePlaceholder":72},[144,32188,32189],{"class":146,"line":7979},[144,32190,32191],{"class":213},"# 定义模型训练函数\n",[144,32193,32194,32196,32199],{"class":146,"line":8003},[144,32195,31960],{"class":150},[144,32197,32198],{"class":1993}," train_model_process",[144,32200,32201],{"class":154},"(model,train_dataloader,val_dataloader,num_epochs):\n",[144,32203,32204,32206,32208,32210,32212,32214,32216,32218,32221],{"class":146,"line":8008},[144,32205,31250],{"class":154},[144,32207,200],{"class":150},[144,32209,30464],{"class":154},[144,32211,31257],{"class":259},[144,32213,1734],{"class":150},[144,32215,31262],{"class":154},[144,32217,1731],{"class":150},[144,32219,32220],{"class":259}," 'cpu'",[144,32222,161],{"class":154},[144,32224,32225],{"class":146,"line":8014},[144,32226,2430],{"emptyLinePlaceholder":72},[144,32228,32229],{"class":146,"line":8041},[144,32230,2430],{"emptyLinePlaceholder":72},[144,32232,32233],{"class":146,"line":8046},[144,32234,32235],{"class":213},"    # 定义优化器\n",[144,32237,32238],{"class":146,"line":8052},[144,32239,32240],{"class":213},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[144,32242,32243],{"class":146,"line":8064},[144,32244,32245],{"class":213},"    # lr为学习率\n",[144,32247,32248,32251,32253,32256,32259,32261,32264],{"class":146,"line":8076},[144,32249,32250],{"class":154},"    optimizer",[144,32252,200],{"class":150},[144,32254,32255],{"class":154},"torch.optim.Adam(model.parameters(),",[144,32257,32258],{"class":5247},"lr",[144,32260,200],{"class":150},[144,32262,32263],{"class":203},"0.001",[144,32265,161],{"class":154},[144,32267,32268],{"class":146,"line":8088},[144,32269,2430],{"emptyLinePlaceholder":72},[144,32271,32272],{"class":146,"line":9747},[144,32273,32274],{"class":213},"    # 定义损失函数使用交叉熵损失函数\n",[144,32276,32277,32280,32282],{"class":146,"line":9772},[144,32278,32279],{"class":154},"    criterion",[144,32281,200],{"class":150},[144,32283,32284],{"class":154},"nn.CrossEntropyLoss()\n",[144,32286,32287],{"class":146,"line":9795},[144,32288,2430],{"emptyLinePlaceholder":72},[144,32290,32291],{"class":146,"line":9819},[144,32292,32293],{"class":213},"    # 将模型放到GPU中进行训练\n",[144,32295,32296,32298,32300],{"class":146,"line":9824},[144,32297,31302],{"class":154},[144,32299,200],{"class":150},[144,32301,32302],{"class":154},"model.to(device)\n",[144,32304,32305],{"class":146,"line":9829},[144,32306,32307],{"class":213},"    # 复制当前模型的参数\n",[144,32309,32310],{"class":146,"line":9834},[144,32311,32312],{"class":213},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[144,32314,32315],{"class":146,"line":9843},[144,32316,32317],{"class":213},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[144,32319,32320,32323,32325],{"class":146,"line":9848},[144,32321,32322],{"class":154},"    best_model_wts",[144,32324,200],{"class":150},[144,32326,32327],{"class":154},"copy.deepcopy(model.state_dict())\n",[144,32329,32330],{"class":146,"line":9854},[144,32331,2430],{"emptyLinePlaceholder":72},[144,32333,32334],{"class":146,"line":9875},[144,32335,2430],{"emptyLinePlaceholder":72},[144,32337,32338],{"class":146,"line":9881},[144,32339,32340],{"class":213},"    # 初始化参数\n",[144,32342,32343],{"class":146,"line":9895},[144,32344,32345],{"class":213},"    # 最高准确度\n",[144,32347,32348,32351,32353],{"class":146,"line":9901},[144,32349,32350],{"class":154},"    best_acc",[144,32352,200],{"class":150},[144,32354,32355],{"class":203},"0.0\n",[144,32357,32358],{"class":146,"line":9928},[144,32359,32360],{"class":213},"    # 训练集损失列表\n",[144,32362,32363,32366,32368],{"class":146,"line":9937},[144,32364,32365],{"class":154},"    train_loss_all",[144,32367,200],{"class":150},[144,32369,32370],{"class":154},"[]\n",[144,32372,32373],{"class":146,"line":9943},[144,32374,32375],{"class":213},"    # 验证集函数列表\n",[144,32377,32378,32381,32383],{"class":146,"line":9951},[144,32379,32380],{"class":154},"    val_loss_all",[144,32382,200],{"class":150},[144,32384,32370],{"class":154},[144,32386,32387],{"class":146,"line":9956},[144,32388,32389],{"class":213},"    # 训练集准确度列表\n",[144,32391,32392,32395,32397],{"class":146,"line":16635},[144,32393,32394],{"class":154},"    train_acc_all",[144,32396,200],{"class":150},[144,32398,32370],{"class":154},[144,32400,32401],{"class":146,"line":16641},[144,32402,32403],{"class":213},"    # 验证集准确度列表\n",[144,32405,32406,32409,32411],{"class":146,"line":16664},[144,32407,32408],{"class":154},"    val_acc_all",[144,32410,200],{"class":150},[144,32412,32370],{"class":154},[144,32414,32415],{"class":146,"line":16670},[144,32416,2430],{"emptyLinePlaceholder":72},[144,32418,32419],{"class":146,"line":16693},[144,32420,32421],{"class":213},"    # 保存当前时间--->方便看每轮训练的时间\n",[144,32423,32424,32427,32429],{"class":146,"line":16707},[144,32425,32426],{"class":154},"    since",[144,32428,200],{"class":150},[144,32430,32431],{"class":154},"time.time()\n",[144,32433,32434],{"class":146,"line":16727},[144,32435,2430],{"emptyLinePlaceholder":72},[144,32437,32438],{"class":146,"line":16733},[144,32439,2430],{"emptyLinePlaceholder":72},[144,32441,32442],{"class":146,"line":16744},[144,32443,32444],{"class":213},"    # 准备工作完成--->开始训练模型\n",[144,32446,32447,32449,32452,32454,32457],{"class":146,"line":16767},[144,32448,3231],{"class":150},[144,32450,32451],{"class":154}," epoch ",[144,32453,26056],{"class":150},[144,32455,32456],{"class":203}," range",[144,32458,32459],{"class":154},"(num_epochs):\n",[144,32461,32462,32465,32467,32470,32473,32475,32477,32479,32482,32484,32486],{"class":146,"line":16789},[144,32463,32464],{"class":203},"        print",[144,32466,155],{"class":154},[144,32468,32469],{"class":259},"\"Epoch ",[144,32471,32472],{"class":203},"{}",[144,32474,739],{"class":259},[144,32476,32472],{"class":203},[144,32478,406],{"class":259},[144,32480,32481],{"class":154},".format(epoch,num_epochs",[144,32483,687],{"class":150},[144,32485,372],{"class":203},[144,32487,30510],{"class":154},[144,32489,32490,32492,32494,32497,32499,32501],{"class":146,"line":16794},[144,32491,32464],{"class":203},[144,32493,155],{"class":154},[144,32495,32496],{"class":259},"\"-\"",[144,32498,610],{"class":150},[144,32500,601],{"class":203},[144,32502,161],{"class":154},[144,32504,32505],{"class":146,"line":16800},[144,32506,2430],{"emptyLinePlaceholder":72},[144,32508,32509],{"class":146,"line":16814},[144,32510,32511],{"class":213},"        # 初始化参数\n",[144,32513,32514],{"class":146,"line":16827},[144,32515,32516],{"class":213},"        # 训练集损失函数\n",[144,32518,32519,32522,32524],{"class":146,"line":16832},[144,32520,32521],{"class":154},"        train_loss",[144,32523,200],{"class":150},[144,32525,32355],{"class":203},[144,32527,32528],{"class":146,"line":16846},[144,32529,32530],{"class":213},"        # 训练集准确度\n",[144,32532,32533,32536,32538],{"class":146,"line":16851},[144,32534,32535],{"class":154},"        train_corrects",[144,32537,200],{"class":150},[144,32539,3115],{"class":203},[144,32541,32542],{"class":146,"line":16857},[144,32543,32544],{"class":213},"        # 验证集损失函数\n",[144,32546,32547,32550,32552],{"class":146,"line":16862},[144,32548,32549],{"class":154},"        val_loss",[144,32551,200],{"class":150},[144,32553,32355],{"class":203},[144,32555,32556],{"class":146,"line":16876},[144,32557,32558],{"class":213},"        # 验证集准确度\n",[144,32560,32561,32564,32566],{"class":146,"line":16881},[144,32562,32563],{"class":154},"        val_corrects",[144,32565,200],{"class":150},[144,32567,3115],{"class":203},[144,32569,32570],{"class":146,"line":16886},[144,32571,32572],{"class":213},"        # 训练集样本数量\n",[144,32574,32575,32578,32580],{"class":146,"line":16900},[144,32576,32577],{"class":154},"        train_num",[144,32579,200],{"class":150},[144,32581,3115],{"class":203},[144,32583,32584],{"class":146,"line":16912},[144,32585,32586],{"class":213},"        # 验证集样本数量\n",[144,32588,32589,32592,32594],{"class":146,"line":16917},[144,32590,32591],{"class":154},"        val_num",[144,32593,200],{"class":150},[144,32595,3115],{"class":203},[144,32597,32598],{"class":146,"line":16930},[144,32599,32600],{"class":213},"        # 将数据放到设备,并开始训练\n",[144,32602,32603,32605,32607,32609,32611],{"class":146,"line":16935},[144,32604,3433],{"class":150},[144,32606,31614],{"class":154},[144,32608,26056],{"class":150},[144,32610,31619],{"class":203},[144,32612,32613],{"class":154},"(train_dataloader):\n",[144,32615,32616],{"class":146,"line":16940},[144,32617,32618],{"class":213},"            # 将特征放入到训练设备\n",[144,32620,32621,32624,32626],{"class":146,"line":16945},[144,32622,32623],{"class":154},"            b_x",[144,32625,200],{"class":150},[144,32627,32628],{"class":154},"b_x.to(device)\n",[144,32630,32631],{"class":146,"line":16958},[144,32632,32633],{"class":213},"            # 将标签放入到训练设备当中\n",[144,32635,32636,32639,32641],{"class":146,"line":16963},[144,32637,32638],{"class":154},"            b_y",[144,32640,200],{"class":150},[144,32642,32643],{"class":154},"b_y.to(device)\n",[144,32645,32647],{"class":146,"line":32646},98,[144,32648,32649],{"class":213},"            # 设置模型为训练模式\n",[144,32651,32653],{"class":146,"line":32652},99,[144,32654,32655],{"class":154},"            model.train()\n",[144,32657,32659],{"class":146,"line":32658},100,[144,32660,32661],{"class":213},"            # 将数据放到模型当中,开始前向传播\n",[144,32663,32665],{"class":146,"line":32664},101,[144,32666,32667],{"class":213},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[144,32669,32671,32674,32676],{"class":146,"line":32670},102,[144,32672,32673],{"class":154},"            output",[144,32675,200],{"class":150},[144,32677,32678],{"class":154},"model(b_x)\n",[144,32680,32682],{"class":146,"line":32681},103,[144,32683,32684],{"class":213},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[144,32686,32688,32691,32693,32696,32699,32701,32703],{"class":146,"line":32687},104,[144,32689,32690],{"class":154},"            pre_lab",[144,32692,200],{"class":150},[144,32694,32695],{"class":154},"torch.argmax(output,",[144,32697,32698],{"class":5247},"dim",[144,32700,200],{"class":150},[144,32702,372],{"class":203},[144,32704,161],{"class":154},[144,32706,32708],{"class":146,"line":32707},105,[144,32709,32710],{"class":213},"            # 计算每一个batch的损失函数\n",[144,32712,32714,32717,32719],{"class":146,"line":32713},106,[144,32715,32716],{"class":154},"            loss",[144,32718,200],{"class":150},[144,32720,32721],{"class":154},"criterion(output,b_y)\n",[144,32723,32725],{"class":146,"line":32724},107,[144,32726,32727],{"class":213},"            # 将梯度初始化为0\n",[144,32729,32731],{"class":146,"line":32730},108,[144,32732,32733],{"class":154},"            optimizer.zero_grad()\n",[144,32735,32737],{"class":146,"line":32736},109,[144,32738,32739],{"class":213},"            # 梯度置为0后再进行反向传播\n",[144,32741,32743],{"class":146,"line":32742},110,[144,32744,32745],{"class":154},"            loss.backward()\n",[144,32747,32749],{"class":146,"line":32748},111,[144,32750,32751],{"class":213},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[144,32753,32755],{"class":146,"line":32754},112,[144,32756,32757],{"class":154},"            optimizer.step()\n",[144,32759,32761],{"class":146,"line":32760},113,[144,32762,32763],{"class":213},"            # loss.item()指的是batch的平均损失\n",[144,32765,32767,32770,32772,32775,32777,32780,32782],{"class":146,"line":32766},114,[144,32768,32769],{"class":154},"            train_loss",[144,32771,9508],{"class":150},[144,32773,32774],{"class":154},"loss.item()",[144,32776,610],{"class":150},[144,32778,32779],{"class":154},"b_x.size(",[144,32781,346],{"class":203},[144,32783,161],{"class":154},[144,32785,32787],{"class":146,"line":32786},115,[144,32788,32789],{"class":213},"            # 计算每个批次中正确预测的数量\n",[144,32791,32793,32796,32798,32801,32803],{"class":146,"line":32792},116,[144,32794,32795],{"class":154},"            train_corrects",[144,32797,9508],{"class":150},[144,32799,32800],{"class":154},"torch.sum(pre_lab",[144,32802,2979],{"class":150},[144,32804,32805],{"class":154},"b_y.data)\n",[144,32807,32809],{"class":146,"line":32808},117,[144,32810,32811],{"class":213},"            # 计算目前为止一共处理了多少样本\n",[144,32813,32815,32818,32820,32822,32824],{"class":146,"line":32814},118,[144,32816,32817],{"class":154},"            train_num",[144,32819,9508],{"class":150},[144,32821,32779],{"class":154},[144,32823,346],{"class":203},[144,32825,161],{"class":154},[144,32827,32829],{"class":146,"line":32828},119,[144,32830,32831],{"class":213},"        # 验证数据\n",[144,32833,32835,32837,32840,32842,32844],{"class":146,"line":32834},120,[144,32836,3433],{"class":150},[144,32838,32839],{"class":154}," step ,(b_x,b_y) ",[144,32841,26056],{"class":150},[144,32843,31619],{"class":203},[144,32845,32846],{"class":154},"(val_dataloader):\n",[144,32848,32850],{"class":146,"line":32849},121,[144,32851,32852],{"class":213},"            # 将特征放到验证设备当中\n",[144,32854,32856,32858,32860],{"class":146,"line":32855},122,[144,32857,32623],{"class":154},[144,32859,200],{"class":150},[144,32861,32628],{"class":154},[144,32863,32865],{"class":146,"line":32864},123,[144,32866,32867],{"class":213},"            # 将标签放到放到训练设备当中\n",[144,32869,32871,32873,32875],{"class":146,"line":32870},124,[144,32872,32638],{"class":154},[144,32874,200],{"class":150},[144,32876,32643],{"class":154},[144,32878,32880],{"class":146,"line":32879},125,[144,32881,32882],{"class":213},"            # 开启验证模式，设置模型为评估模式\n",[144,32884,32886],{"class":146,"line":32885},126,[144,32887,32888],{"class":154},"            model.eval()\n",[144,32890,32892,32895],{"class":146,"line":32891},127,[144,32893,32894],{"class":150},"            with",[144,32896,32897],{"class":154}," torch.no_grad():\n",[144,32899,32901],{"class":146,"line":32900},128,[144,32902,32903],{"class":213},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[144,32905,32907,32910,32912],{"class":146,"line":32906},129,[144,32908,32909],{"class":154},"                output ",[144,32911,200],{"class":150},[144,32913,32914],{"class":154}," model(b_x)\n",[144,32916,32918],{"class":146,"line":32917},130,[144,32919,32920],{"class":213},"                # 查找每一行中最大值对应的下标\n",[144,32922,32924,32927,32929,32932,32934,32936,32938],{"class":146,"line":32923},131,[144,32925,32926],{"class":154},"                pre_lab ",[144,32928,200],{"class":150},[144,32930,32931],{"class":154}," torch.argmax(output, ",[144,32933,32698],{"class":5247},[144,32935,200],{"class":150},[144,32937,372],{"class":203},[144,32939,161],{"class":154},[144,32941,32943],{"class":146,"line":32942},132,[144,32944,32945],{"class":213},"                # 计算验证集上的当前 batch 损失\n",[144,32947,32949,32952,32954],{"class":146,"line":32948},133,[144,32950,32951],{"class":154},"                val_batch_loss ",[144,32953,200],{"class":150},[144,32955,32956],{"class":154}," criterion(output, b_y)\n",[144,32958,32960],{"class":146,"line":32959},134,[144,32961,32962],{"class":213},"                # 对损失函数进行累加（按样本数加权）\n",[144,32964,32966,32969,32971,32974,32976,32979,32981],{"class":146,"line":32965},135,[144,32967,32968],{"class":154},"                val_loss ",[144,32970,9508],{"class":150},[144,32972,32973],{"class":154}," val_batch_loss.item() ",[144,32975,610],{"class":150},[144,32977,32978],{"class":154}," b_x.size(",[144,32980,346],{"class":203},[144,32982,161],{"class":154},[144,32984,32986,32989,32991,32994,32996],{"class":146,"line":32985},136,[144,32987,32988],{"class":154},"                val_corrects ",[144,32990,9508],{"class":150},[144,32992,32993],{"class":154}," torch.sum(pre_lab ",[144,32995,2979],{"class":150},[144,32997,32998],{"class":154}," b_y.data)\n",[144,33000,33002],{"class":146,"line":33001},137,[144,33003,33004],{"class":213},"                # 当前用于验证的样本数量\n",[144,33006,33008,33011,33013,33015,33017],{"class":146,"line":33007},138,[144,33009,33010],{"class":154},"            val_num ",[144,33012,9508],{"class":150},[144,33014,32978],{"class":154},[144,33016,346],{"class":203},[144,33018,161],{"class":154},[144,33020,33022],{"class":146,"line":33021},139,[144,33023,33024],{"class":213},"        # 计算并保存每一次迭代的loss值和准确率\n",[144,33026,33028],{"class":146,"line":33027},140,[144,33029,33030],{"class":213},"        # 计算并保存训练集的loss值\n",[144,33032,33034,33037,33039],{"class":146,"line":33033},141,[144,33035,33036],{"class":154},"        train_loss_all.append(train_loss",[144,33038,739],{"class":150},[144,33040,33041],{"class":154},"train_num)\n",[144,33043,33045],{"class":146,"line":33044},142,[144,33046,33047],{"class":213},"        # 取双精度\n",[144,33049,33051],{"class":146,"line":33050},143,[144,33052,33053],{"class":213},"        # 计算并保存训练集的准确率\n",[144,33055,33057,33060,33062],{"class":146,"line":33056},144,[144,33058,33059],{"class":154},"        train_acc_all.append(train_corrects.double().item()",[144,33061,739],{"class":150},[144,33063,33041],{"class":154},[144,33065,33067],{"class":146,"line":33066},145,[144,33068,33069],{"class":213},"        # 计算并保存验证集的loss值\n",[144,33071,33073,33076,33078],{"class":146,"line":33072},146,[144,33074,33075],{"class":154},"        val_loss_all.append(val_loss",[144,33077,739],{"class":150},[144,33079,33080],{"class":154},"val_num)\n",[144,33082,33084],{"class":146,"line":33083},147,[144,33085,33086],{"class":213},"        # 计算并保存验证集的准确率\n",[144,33088,33090,33093,33095],{"class":146,"line":33089},148,[144,33091,33092],{"class":154},"        val_acc_all.append(val_corrects.double().item()",[144,33094,739],{"class":150},[144,33096,33080],{"class":154},[144,33098,33100],{"class":146,"line":33099},149,[144,33101,2430],{"emptyLinePlaceholder":72},[144,33103,33105],{"class":146,"line":33104},150,[144,33106,33107],{"class":213},"        # 打印训练一轮的loss值和准确率\n",[144,33109,33111,33113,33115,33117,33119,33122,33124,33127,33129,33132,33134,33136,33138,33140,33143,33145,33147,33150,33152,33154],{"class":146,"line":33110},151,[144,33112,32464],{"class":203},[144,33114,155],{"class":154},[144,33116,3622],{"class":259},[144,33118,32472],{"class":203},[144,33120,33121],{"class":259},"train loss:",[144,33123,1051],{"class":203},[144,33125,33126],{"class":150},":.4f",[144,33128,1101],{"class":203},[144,33130,33131],{"class":259}," train acc:",[144,33133,1051],{"class":203},[144,33135,33126],{"class":150},[144,33137,1101],{"class":203},[144,33139,3622],{"class":259},[144,33141,33142],{"class":154},".format(epoch,train_loss_all[",[144,33144,687],{"class":150},[144,33146,372],{"class":203},[144,33148,33149],{"class":154},"],train_acc_all[",[144,33151,687],{"class":150},[144,33153,372],{"class":203},[144,33155,33156],{"class":154},"]))\n",[144,33158,33160,33162,33164,33166,33168,33171,33173,33175,33177,33180,33182,33184,33186,33188,33191,33193,33195,33198,33200,33202],{"class":146,"line":33159},152,[144,33161,32464],{"class":203},[144,33163,155],{"class":154},[144,33165,3622],{"class":259},[144,33167,32472],{"class":203},[144,33169,33170],{"class":259},"val loss:",[144,33172,1051],{"class":203},[144,33174,33126],{"class":150},[144,33176,1101],{"class":203},[144,33178,33179],{"class":259}," val acc:",[144,33181,1051],{"class":203},[144,33183,33126],{"class":150},[144,33185,1101],{"class":203},[144,33187,3622],{"class":259},[144,33189,33190],{"class":154},".format(epoch,val_loss_all[",[144,33192,687],{"class":150},[144,33194,372],{"class":203},[144,33196,33197],{"class":154},"],val_acc_all[",[144,33199,687],{"class":150},[144,33201,372],{"class":203},[144,33203,33156],{"class":154},[144,33205,33207],{"class":146,"line":33206},153,[144,33208,2430],{"emptyLinePlaceholder":72},[144,33210,33212],{"class":146,"line":33211},154,[144,33213,33214],{"class":213},"        # 判断准确度--->保存最优模型\n",[144,33216,33218,33220,33223,33225,33227,33229,33231],{"class":146,"line":33217},155,[144,33219,2527],{"class":150},[144,33221,33222],{"class":154}," val_acc_all[",[144,33224,687],{"class":150},[144,33226,372],{"class":203},[144,33228,1095],{"class":154},[144,33230,1115],{"class":150},[144,33232,33233],{"class":154},"best_acc:\n",[144,33235,33237],{"class":146,"line":33236},156,[144,33238,33239],{"class":213},"            # 保存当前模型准确度\n",[144,33241,33243,33246,33248,33250,33253,33255,33257],{"class":146,"line":33242},157,[144,33244,33245],{"class":154},"            best_acc:",[144,33247,194],{"class":203},[144,33249,200],{"class":150},[144,33251,33252],{"class":154},"val_acc_all[",[144,33254,687],{"class":150},[144,33256,372],{"class":203},[144,33258,33259],{"class":154},"]\n",[144,33261,33263],{"class":146,"line":33262},158,[144,33264,33265],{"class":213},"            # 保存当前的准确度\n",[144,33267,33269],{"class":146,"line":33268},159,[144,33270,33271],{"class":213},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[144,33273,33275,33278,33280],{"class":146,"line":33274},160,[144,33276,33277],{"class":154},"            best_model_wts",[144,33279,200],{"class":150},[144,33281,32327],{"class":154},[144,33283,33285],{"class":146,"line":33284},161,[144,33286,2430],{"emptyLinePlaceholder":72},[144,33288,33290],{"class":146,"line":33289},162,[144,33291,33292],{"class":213},"        # 计算耗时\n",[144,33294,33296,33299,33301,33304,33306],{"class":146,"line":33295},163,[144,33297,33298],{"class":154},"        time_use",[144,33300,200],{"class":150},[144,33302,33303],{"class":154},"time.time()",[144,33305,687],{"class":150},[144,33307,33308],{"class":154},"since\n",[144,33310,33312,33314,33316,33319,33321,33324,33326,33328,33330,33332,33334,33337,33340,33343,33345,33348,33350,33352],{"class":146,"line":33311},164,[144,33313,32464],{"class":203},[144,33315,155],{"class":154},[144,33317,33318],{"class":259},"'训练和验证耗费的时间",[144,33320,1051],{"class":203},[144,33322,33323],{"class":150},":.0f",[144,33325,1101],{"class":203},[144,33327,699],{"class":259},[144,33329,1051],{"class":203},[144,33331,33323],{"class":150},[144,33333,1101],{"class":203},[144,33335,33336],{"class":259},"s'",[144,33338,33339],{"class":154},".format(time_use",[144,33341,33342],{"class":150},"\u002F\u002F",[144,33344,1062],{"class":203},[144,33346,33347],{"class":154},",time_use",[144,33349,483],{"class":150},[144,33351,1062],{"class":203},[144,33353,30510],{"class":154},[144,33355,33357],{"class":146,"line":33356},165,[144,33358,33359],{"class":213},"    # 选择最优参数\n",[144,33361,33363],{"class":146,"line":33362},166,[144,33364,33365],{"class":213},"    # 加载最高准确率下的模型参数\n",[144,33367,33369],{"class":146,"line":33368},167,[144,33370,33371],{"class":213},"    # model.load_state_dict(best_model_wts)\n",[144,33373,33375,33378,33381],{"class":146,"line":33374},168,[144,33376,33377],{"class":154},"    torch.save(model.state_dict(best_model_wts), ",[144,33379,33380],{"class":259},"'.\u002Fbest_model.pth'",[144,33382,161],{"class":154},[144,33384,33386],{"class":146,"line":33385},169,[144,33387,33388],{"class":213},"    # 或者写成\n",[144,33390,33392],{"class":146,"line":33391},170,[144,33393,33394],{"class":213},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[144,33396,33398],{"class":146,"line":33397},171,[144,33399,33400],{"class":213},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[144,33402,33404,33407,33409,33412,33415,33417],{"class":146,"line":33403},172,[144,33405,33406],{"class":154},"    train_process",[144,33408,200],{"class":150},[144,33410,33411],{"class":154},"pd.DataFrame(",[144,33413,33414],{"class":5247},"data",[144,33416,200],{"class":150},[144,33418,1576],{"class":154},[144,33420,33422,33425,33427,33430],{"class":146,"line":33421},173,[144,33423,33424],{"class":259},"        \"epoch\"",[144,33426,1014],{"class":154},[144,33428,33429],{"class":203},"range",[144,33431,33432],{"class":154},"(num_epochs),\n",[144,33434,33436,33439],{"class":146,"line":33435},174,[144,33437,33438],{"class":259},"        \"train_loss_all\"",[144,33440,33441],{"class":154},":train_loss_all,\n",[144,33443,33445,33448],{"class":146,"line":33444},175,[144,33446,33447],{"class":259},"        \"val_loss_all\"",[144,33449,33450],{"class":154},":val_loss_all,\n",[144,33452,33454,33457],{"class":146,"line":33453},176,[144,33455,33456],{"class":259},"        \"train_acc_all\"",[144,33458,33459],{"class":154},":train_acc_all,\n",[144,33461,33463,33466],{"class":146,"line":33462},177,[144,33464,33465],{"class":259},"        \"val_acc_all\"",[144,33467,33468],{"class":154},":val_acc_all\n",[144,33470,33472],{"class":146,"line":33471},178,[144,33473,33474],{"class":154},"    })\n",[144,33476,33478],{"class":146,"line":33477},179,[144,33479,33480],{"class":213},"    # 返回训练保存的过程\n",[144,33482,33484,33486],{"class":146,"line":33483},180,[144,33485,4120],{"class":150},[144,33487,33488],{"class":154}," train_process\n",[144,33490,33492],{"class":146,"line":33491},181,[144,33493,2430],{"emptyLinePlaceholder":72},[144,33495,33497],{"class":146,"line":33496},182,[144,33498,33499],{"class":213},"# 将loss值和精度按照图片的形式展示出来\n",[144,33501,33503,33505,33508],{"class":146,"line":33502},183,[144,33504,31960],{"class":150},[144,33506,33507],{"class":1993}," matplot_acc_loss",[144,33509,33510],{"class":154},"(train_process):\n",[144,33512,33514],{"class":146,"line":33513},184,[144,33515,33516],{"class":213},"    # 设置图的大小\n",[144,33518,33520,33523,33525,33527,33529,33531,33533,33535],{"class":146,"line":33519},185,[144,33521,33522],{"class":154},"    plt.figure(",[144,33524,31706],{"class":5247},[144,33526,200],{"class":150},[144,33528,155],{"class":154},[144,33530,653],{"class":203},[144,33532,533],{"class":154},[144,33534,448],{"class":203},[144,33536,30510],{"class":154},[144,33538,33540],{"class":146,"line":33539},186,[144,33541,33542],{"class":213},"    # 设置图中有几张图\n",[144,33544,33546],{"class":146,"line":33545},187,[144,33547,33548],{"class":213},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[144,33550,33552],{"class":146,"line":33551},188,[144,33553,33554],{"class":213},"    # ①loss图\n",[144,33556,33558,33560,33562,33564,33566,33568,33570],{"class":146,"line":33557},189,[144,33559,31740],{"class":154},[144,33561,372],{"class":203},[144,33563,533],{"class":154},[144,33565,232],{"class":203},[144,33567,533],{"class":154},[144,33569,372],{"class":203},[144,33571,161],{"class":154},[144,33573,33575],{"class":146,"line":33574},190,[144,33576,33577],{"class":213},"    # 补充:\n",[144,33579,33581],{"class":146,"line":33580},191,[144,33582,33583],{"class":213},"    # plt.subplot(nrows, ncols, index)\n",[144,33585,33587],{"class":146,"line":33586},192,[144,33588,33589],{"class":213},"    # nrows：行数\n",[144,33591,33593],{"class":146,"line":33592},193,[144,33594,33595],{"class":213},"    # ncols：列数\n",[144,33597,33599],{"class":146,"line":33598},194,[144,33600,33601],{"class":213},"    # index：目前选中第几个子图（从1开始）\n",[144,33603,33605,33608,33611,33614,33617,33619,33622,33624,33627],{"class":146,"line":33604},195,[144,33606,33607],{"class":154},"    plt.plot(train_process[",[144,33609,33610],{"class":259},"\"epoch\"",[144,33612,33613],{"class":154},"],train_process.train_loss_all,",[144,33615,33616],{"class":259},"'ro-'",[144,33618,533],{"class":154},[144,33620,33621],{"class":5247},"label",[144,33623,200],{"class":150},[144,33625,33626],{"class":259},"'train loss'",[144,33628,161],{"class":154},[144,33630,33632,33634,33636,33639,33642,33644,33646,33648,33651],{"class":146,"line":33631},196,[144,33633,33607],{"class":154},[144,33635,33610],{"class":259},[144,33637,33638],{"class":154},"],train_process.val_loss_all,",[144,33640,33641],{"class":259},"'bs--'",[144,33643,533],{"class":154},[144,33645,33621],{"class":5247},[144,33647,200],{"class":150},[144,33649,33650],{"class":259},"'val loss'",[144,33652,161],{"class":154},[144,33654,33656],{"class":146,"line":33655},197,[144,33657,33658],{"class":213},"    # 添加一个图例\n",[144,33660,33662],{"class":146,"line":33661},198,[144,33663,33664],{"class":154},"    plt.legend()\n",[144,33666,33668],{"class":146,"line":33667},199,[144,33669,33670],{"class":213},"    # 给轴添加标签\n",[144,33672,33674,33677,33680],{"class":146,"line":33673},200,[144,33675,33676],{"class":154},"    plt.xlabel(",[144,33678,33679],{"class":259},"'epoch'",[144,33681,161],{"class":154},[144,33683,33685,33688,33691],{"class":146,"line":33684},201,[144,33686,33687],{"class":154},"    plt.ylabel(",[144,33689,33690],{"class":259},"'loss'",[144,33692,161],{"class":154},[144,33694,33696],{"class":146,"line":33695},202,[144,33697,33698],{"class":213},"    # ②准确度图\n",[144,33700,33702,33704,33706,33708,33710,33712,33714],{"class":146,"line":33701},203,[144,33703,31740],{"class":154},[144,33705,372],{"class":203},[144,33707,533],{"class":154},[144,33709,232],{"class":203},[144,33711,533],{"class":154},[144,33713,232],{"class":203},[144,33715,161],{"class":154},[144,33717,33719,33721,33723,33726,33728,33730,33732,33734,33737],{"class":146,"line":33718},204,[144,33720,33607],{"class":154},[144,33722,33610],{"class":259},[144,33724,33725],{"class":154},"],train_process.train_acc_all,",[144,33727,33616],{"class":259},[144,33729,533],{"class":154},[144,33731,33621],{"class":5247},[144,33733,200],{"class":150},[144,33735,33736],{"class":259},"'train acc'",[144,33738,161],{"class":154},[144,33740,33742,33744,33746,33749,33751,33753,33755,33757,33760],{"class":146,"line":33741},205,[144,33743,33607],{"class":154},[144,33745,33610],{"class":259},[144,33747,33748],{"class":154},"],train_process.val_acc_all,",[144,33750,33641],{"class":259},[144,33752,533],{"class":154},[144,33754,33621],{"class":5247},[144,33756,200],{"class":150},[144,33758,33759],{"class":259},"'val acc'",[144,33761,161],{"class":154},[144,33763,33765],{"class":146,"line":33764},206,[144,33766,33767],{"class":213},"    # 添加图例\n",[144,33769,33771],{"class":146,"line":33770},207,[144,33772,33664],{"class":154},[144,33774,33776,33778,33780],{"class":146,"line":33775},208,[144,33777,33676],{"class":154},[144,33779,33610],{"class":259},[144,33781,161],{"class":154},[144,33783,33785,33787,33790],{"class":146,"line":33784},209,[144,33786,33687],{"class":154},[144,33788,33789],{"class":259},"\"acc\"",[144,33791,161],{"class":154},[144,33793,33795],{"class":146,"line":33794},210,[144,33796,33797],{"class":154},"    plt.show()\n",[144,33799,33801],{"class":146,"line":33800},211,[144,33802,2430],{"emptyLinePlaceholder":72},[144,33804,33806],{"class":146,"line":33805},212,[144,33807,33808],{"class":213},"# 正式开始训练:\n",[144,33810,33812,33814,33816,33818,33820],{"class":146,"line":33811},213,[144,33813,1561],{"class":150},[144,33815,31233],{"class":203},[144,33817,2979],{"class":150},[144,33819,31238],{"class":259},[144,33821,3769],{"class":154},[144,33823,33825],{"class":146,"line":33824},214,[144,33826,33827],{"class":213},"    # 将模型实例化\n",[144,33829,33831,33834,33836],{"class":146,"line":33830},215,[144,33832,33833],{"class":154},"    LeNet",[144,33835,200],{"class":150},[144,33837,33838],{"class":154},"LeNet()\n",[144,33840,33842,33845,33847],{"class":146,"line":33841},216,[144,33843,33844],{"class":154},"    train_dataloader,val_dataloader",[144,33846,200],{"class":150},[144,33848,33849],{"class":154},"train_val_data_process()\n",[144,33851,33853,33855,33857,33860,33863,33865,33867],{"class":146,"line":33852},217,[144,33854,33406],{"class":154},[144,33856,200],{"class":150},[144,33858,33859],{"class":154},"train_model_process(LeNet,train_dataloader,val_dataloader,",[144,33861,33862],{"class":5247},"num_epochs",[144,33864,200],{"class":150},[144,33866,855],{"class":203},[144,33868,161],{"class":154},[144,33870,33872],{"class":146,"line":33871},218,[144,33873,33874],{"class":154},"    matplot_acc_loss(train_process)\n",[14,33876,33877],{},"画图的补充点学习：",[14,33879,33880],{},[28,33881],{"alt":30,"src":33882},"\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",[98,33884,33885],{"start":1210},[101,33886,33887],{},"测试",[135,33889,33891],{"className":30391,"code":33890,"language":30393,"meta":30,"style":30},"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",[141,33892,33893,33899,33909,33921,33931,33936,33946,33956,33960,33965,33974,33991,34003,34020,34031,34047,34052,34063,34074,34085,34092,34096,34101,34111,34116,34133,34141,34145,34150,34159,34168,34172,34177,34182,34187,34194,34199,34211,34221,34231,34236,34240,34245,34254,34259,34275,34280,34285,34290,34304,34309,34323,34327,34332,34347,34352,34364,34368,34373,34385,34390,34398,34403,34408,34418,34423,34432,34437,34442,34446,34451,34456,34472,34480,34485,34490,34549,34555,34560,34571,34579,34587,34591,34596,34600,34605,34613,34618,34634,34639,34649,34659],{"__ignoreMap":30},[144,33894,33895,33897],{"class":146,"line":147},[144,33896,30405],{"class":150},[144,33898,30408],{"class":154},[144,33900,33901,33903,33905,33907],{"class":146,"line":66},[144,33902,30405],{"class":150},[144,33904,31428],{"class":154},[144,33906,31396],{"class":150},[144,33908,31433],{"class":154},[144,33910,33911,33913,33916,33918],{"class":146,"line":1210},[144,33912,30750],{"class":150},[144,33914,33915],{"class":154}," jupyter_client.consoleapp ",[144,33917,30405],{"class":150},[144,33919,33920],{"class":154}," classes\n",[144,33922,33923,33925,33927,33929],{"class":146,"line":1225},[144,33924,30750],{"class":150},[144,33926,31411],{"class":154},[144,33928,30405],{"class":150},[144,33930,31416],{"class":154},[144,33932,33933],{"class":146,"line":1231},[144,33934,33935],{"class":213},"# 导入数据集\n",[144,33937,33938,33940,33942,33944],{"class":146,"line":1245},[144,33939,30750],{"class":150},[144,33941,31381],{"class":154},[144,33943,30405],{"class":150},[144,33945,31386],{"class":154},[144,33947,33948,33950,33952,33954],{"class":146,"line":1251},[144,33949,30750],{"class":150},[144,33951,31927],{"class":154},[144,33953,30405],{"class":150},[144,33955,31932],{"class":154},[144,33957,33958],{"class":146,"line":1342},[144,33959,2430],{"emptyLinePlaceholder":72},[144,33961,33962],{"class":146,"line":1348},[144,33963,33964],{"class":213},"# 测试数据处理\n",[144,33966,33967,33969,33972],{"class":146,"line":1360},[144,33968,31960],{"class":150},[144,33970,33971],{"class":1993}," test_data_process",[144,33973,31966],{"class":154},[144,33975,33976,33979,33981,33983,33985,33987,33989],{"class":146,"line":1642},[144,33977,33978],{"class":154},"    test_data",[144,33980,200],{"class":150},[144,33982,31468],{"class":154},[144,33984,31471],{"class":5247},[144,33986,200],{"class":150},[144,33988,31476],{"class":259},[144,33990,31479],{"class":154},[144,33992,33993,33996,33998,34001],{"class":146,"line":1647},[144,33994,33995],{"class":5247},"                           train",[144,33997,200],{"class":150},[144,33999,34000],{"class":203},"False",[144,34002,31479],{"class":154},[144,34004,34005,34008,34010,34012,34014,34016,34018],{"class":146,"line":1653},[144,34006,34007],{"class":5247},"                           transform",[144,34009,200],{"class":150},[144,34011,31506],{"class":154},[144,34013,31509],{"class":5247},[144,34015,200],{"class":150},[144,34017,1056],{"class":203},[144,34019,31517],{"class":154},[144,34021,34022,34025,34027,34029],{"class":146,"line":1658},[144,34023,34024],{"class":5247},"                           download",[144,34026,200],{"class":150},[144,34028,31489],{"class":203},[144,34030,161],{"class":154},[144,34032,34033,34036,34038,34040,34042,34044],{"class":146,"line":1672},[144,34034,34035],{"class":154},"    test_dataloader",[144,34037,200],{"class":150},[144,34039,31547],{"class":154},[144,34041,31550],{"class":5247},[144,34043,200],{"class":150},[144,34045,34046],{"class":154},"test_data,\n",[144,34048,34049],{"class":146,"line":1677},[144,34050,34051],{"class":213},"                                    # 这里是一张一张进行测试\n",[144,34053,34054,34057,34059,34061],{"class":146,"line":1683},[144,34055,34056],{"class":5247},"                                    batch_size",[144,34058,200],{"class":150},[144,34060,372],{"class":203},[144,34062,31479],{"class":154},[144,34064,34065,34068,34070,34072],{"class":146,"line":1704},[144,34066,34067],{"class":5247},"                                    shuffle",[144,34069,200],{"class":150},[144,34071,31489],{"class":203},[144,34073,31479],{"class":154},[144,34075,34076,34079,34081,34083],{"class":146,"line":1709},[144,34077,34078],{"class":5247},"                                    num_workers",[144,34080,200],{"class":150},[144,34082,346],{"class":203},[144,34084,161],{"class":154},[144,34086,34087,34089],{"class":146,"line":1723},[144,34088,4120],{"class":150},[144,34090,34091],{"class":154}," test_dataloader\n",[144,34093,34094],{"class":146,"line":1728},[144,34095,2430],{"emptyLinePlaceholder":72},[144,34097,34098],{"class":146,"line":1757},[144,34099,34100],{"class":213},"# 定义模型测试函数\n",[144,34102,34103,34105,34108],{"class":146,"line":1762},[144,34104,31960],{"class":150},[144,34106,34107],{"class":1993}," test_model_process",[144,34109,34110],{"class":154},"(model,test_dataloader):\n",[144,34112,34113],{"class":146,"line":1779},[144,34114,34115],{"class":213},"    # 将模型放到设备当中，先进行判断\n",[144,34117,34118,34120,34122,34124,34126,34128,34130],{"class":146,"line":1784},[144,34119,31250],{"class":154},[144,34121,200],{"class":150},[144,34123,31257],{"class":259},[144,34125,1734],{"class":150},[144,34127,31262],{"class":154},[144,34129,1731],{"class":150},[144,34131,34132],{"class":259}," \"cpu\"\n",[144,34134,34135,34137,34139],{"class":146,"line":1789},[144,34136,31302],{"class":154},[144,34138,200],{"class":150},[144,34140,32302],{"class":154},[144,34142,34143],{"class":146,"line":1794},[144,34144,2430],{"emptyLinePlaceholder":72},[144,34146,34147],{"class":146,"line":1808},[144,34148,34149],{"class":213},"    # 设置初始化参数\n",[144,34151,34152,34155,34157],{"class":146,"line":1813},[144,34153,34154],{"class":154},"    test_corrects",[144,34156,200],{"class":150},[144,34158,32355],{"class":203},[144,34160,34161,34164,34166],{"class":146,"line":2607},[144,34162,34163],{"class":154},"    test_num",[144,34165,200],{"class":150},[144,34167,3115],{"class":203},[144,34169,34170],{"class":146,"line":2621},[144,34171,2430],{"emptyLinePlaceholder":72},[144,34173,34174],{"class":146,"line":2629},[144,34175,34176],{"class":213},"    # 进行模型测试\n",[144,34178,34179],{"class":146,"line":2634},[144,34180,34181],{"class":213},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[144,34183,34184],{"class":146,"line":2640},[144,34185,34186],{"class":213},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[144,34188,34189,34192],{"class":146,"line":2646},[144,34190,34191],{"class":150},"    with",[144,34193,32897],{"class":154},[144,34195,34196],{"class":146,"line":2651},[144,34197,34198],{"class":213},"        # 从数据中进行\n",[144,34200,34201,34203,34206,34208],{"class":146,"line":7979},[144,34202,3433],{"class":150},[144,34204,34205],{"class":154}," test_data_x,test_data_y ",[144,34207,26056],{"class":150},[144,34209,34210],{"class":154}," test_dataloader:\n",[144,34212,34213,34216,34218],{"class":146,"line":8003},[144,34214,34215],{"class":154},"            test_data_x",[144,34217,200],{"class":150},[144,34219,34220],{"class":154},"test_data_x.to(device)\n",[144,34222,34223,34226,34228],{"class":146,"line":8008},[144,34224,34225],{"class":154},"            test_data_y",[144,34227,200],{"class":150},[144,34229,34230],{"class":154},"test_data_y.to(device)\n",[144,34232,34233],{"class":146,"line":8014},[144,34234,34235],{"class":213},"            # 设置为验证模式\n",[144,34237,34238],{"class":146,"line":8041},[144,34239,32888],{"class":154},[144,34241,34242],{"class":146,"line":8046},[144,34243,34244],{"class":213},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[144,34246,34247,34249,34251],{"class":146,"line":8052},[144,34248,32673],{"class":154},[144,34250,200],{"class":150},[144,34252,34253],{"class":154},"model(test_data_x)\n",[144,34255,34256],{"class":146,"line":8064},[144,34257,34258],{"class":213},"            # 查找每一行中最大值对应的下标\n",[144,34260,34261,34263,34265,34267,34269,34271,34273],{"class":146,"line":8076},[144,34262,32690],{"class":154},[144,34264,200],{"class":150},[144,34266,32695],{"class":154},[144,34268,32698],{"class":5247},[144,34270,200],{"class":150},[144,34272,372],{"class":203},[144,34274,161],{"class":154},[144,34276,34277],{"class":146,"line":8088},[144,34278,34279],{"class":213},"            # 计算正确率\n",[144,34281,34282],{"class":146,"line":9747},[144,34283,34284],{"class":213},"            # .data表示是一个不带梯度信息的tensor\n",[144,34286,34287],{"class":146,"line":9772},[144,34288,34289],{"class":213},"            # 如果预测正确，则准确度test_corrects加1\n",[144,34291,34292,34295,34297,34299,34301],{"class":146,"line":9795},[144,34293,34294],{"class":154},"            test_corrects",[144,34296,9508],{"class":150},[144,34298,32800],{"class":154},[144,34300,2979],{"class":150},[144,34302,34303],{"class":154},"test_data_y.data)\n",[144,34305,34306],{"class":146,"line":9819},[144,34307,34308],{"class":213},"            # 将所有的测试样本进行累计\n",[144,34310,34311,34314,34316,34319,34321],{"class":146,"line":9824},[144,34312,34313],{"class":154},"            test_num",[144,34315,9508],{"class":150},[144,34317,34318],{"class":154},"test_data_x.size(",[144,34320,346],{"class":203},[144,34322,161],{"class":154},[144,34324,34325],{"class":146,"line":9829},[144,34326,2430],{"emptyLinePlaceholder":72},[144,34328,34329],{"class":146,"line":9834},[144,34330,34331],{"class":213},"        # 计算准确度\n",[144,34333,34334,34337,34339,34342,34344],{"class":146,"line":9843},[144,34335,34336],{"class":154},"        test_acc",[144,34338,200],{"class":150},[144,34340,34341],{"class":154},"test_corrects.double().item()",[144,34343,739],{"class":150},[144,34345,34346],{"class":154},"test_num\n",[144,34348,34349],{"class":146,"line":9848},[144,34350,34351],{"class":213},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[144,34353,34354,34356,34358,34361],{"class":146,"line":9854},[144,34355,32464],{"class":203},[144,34357,155],{"class":154},[144,34359,34360],{"class":259},"\"测试的准确率：\"",[144,34362,34363],{"class":154},",test_acc)\n",[144,34365,34366],{"class":146,"line":9875},[144,34367,2430],{"emptyLinePlaceholder":72},[144,34369,34370],{"class":146,"line":9881},[144,34371,34372],{"class":213},"# 实现模型的测试功能\n",[144,34374,34375,34377,34379,34381,34383],{"class":146,"line":9895},[144,34376,1561],{"class":150},[144,34378,31233],{"class":203},[144,34380,2979],{"class":150},[144,34382,31238],{"class":259},[144,34384,3769],{"class":154},[144,34386,34387],{"class":146,"line":9901},[144,34388,34389],{"class":213},"    # 加载模型\n",[144,34391,34392,34394,34396],{"class":146,"line":9928},[144,34393,31302],{"class":154},[144,34395,200],{"class":150},[144,34397,33838],{"class":154},[144,34399,34400],{"class":146,"line":9937},[144,34401,34402],{"class":213},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[144,34404,34405],{"class":146,"line":9943},[144,34406,34407],{"class":213},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[144,34409,34410,34413,34416],{"class":146,"line":9951},[144,34411,34412],{"class":154},"    model.load_state_dict(torch.load(",[144,34414,34415],{"class":259},"'best_model.pth'",[144,34417,30510],{"class":154},[144,34419,34420],{"class":146,"line":9956},[144,34421,34422],{"class":213},"    # 数据加载\n",[144,34424,34425,34427,34429],{"class":146,"line":16635},[144,34426,34035],{"class":154},[144,34428,200],{"class":150},[144,34430,34431],{"class":154},"test_data_process()\n",[144,34433,34434],{"class":146,"line":16641},[144,34435,34436],{"class":213},"    # 加载模型测试的函数\n",[144,34438,34439],{"class":146,"line":16664},[144,34440,34441],{"class":154},"    test_model_process(model,test_dataloader)\n",[144,34443,34444],{"class":146,"line":16670},[144,34445,2430],{"emptyLinePlaceholder":72},[144,34447,34448],{"class":146,"line":16693},[144,34449,34450],{"class":213},"    # 验证集推理实现：\n",[144,34452,34453],{"class":146,"line":16707},[144,34454,34455],{"class":213},"    # 加载数据加载的更详细一些\n",[144,34457,34458,34460,34462,34464,34466,34468,34470],{"class":146,"line":16727},[144,34459,31250],{"class":154},[144,34461,200],{"class":150},[144,34463,31257],{"class":259},[144,34465,1734],{"class":150},[144,34467,31262],{"class":154},[144,34469,1731],{"class":150},[144,34471,34132],{"class":259},[144,34473,34474,34476,34478],{"class":146,"line":16733},[144,34475,31302],{"class":154},[144,34477,200],{"class":150},[144,34479,32302],{"class":154},[144,34481,34482],{"class":146,"line":16744},[144,34483,34484],{"class":213},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[144,34486,34487],{"class":146,"line":16767},[144,34488,34489],{"class":213},"    # 顺序不可改变\n",[144,34491,34492,34495,34497,34499,34502,34504,34507,34509,34512,34514,34517,34519,34522,34524,34527,34529,34532,34534,34537,34539,34542,34544,34547],{"class":146,"line":16789},[144,34493,34494],{"class":154},"    classes",[144,34496,200],{"class":150},[144,34498,1045],{"class":154},[144,34500,34501],{"class":259},"'T-shirt\u002Ftop'",[144,34503,533],{"class":154},[144,34505,34506],{"class":259},"'Trouser'",[144,34508,533],{"class":154},[144,34510,34511],{"class":259},"'Pullover'",[144,34513,533],{"class":154},[144,34515,34516],{"class":259},"'Dress'",[144,34518,533],{"class":154},[144,34520,34521],{"class":259},"'Coat'",[144,34523,533],{"class":154},[144,34525,34526],{"class":259},"'Sandal'",[144,34528,533],{"class":154},[144,34530,34531],{"class":259},"'Shirt'",[144,34533,533],{"class":154},[144,34535,34536],{"class":259},"'Sneaker'",[144,34538,533],{"class":154},[144,34540,34541],{"class":259},"'Bag'",[144,34543,533],{"class":154},[144,34545,34546],{"class":259},"'Ankle boot'",[144,34548,33259],{"class":154},[144,34550,34551,34553],{"class":146,"line":16794},[144,34552,34191],{"class":150},[144,34554,32897],{"class":154},[144,34556,34557],{"class":146,"line":16800},[144,34558,34559],{"class":213},"        # 将数据和标签都放到设备当中\n",[144,34561,34562,34564,34567,34569],{"class":146,"line":16814},[144,34563,3433],{"class":150},[144,34565,34566],{"class":154}," b_x,b_y ",[144,34568,26056],{"class":150},[144,34570,34210],{"class":154},[144,34572,34573,34575,34577],{"class":146,"line":16827},[144,34574,32623],{"class":154},[144,34576,200],{"class":150},[144,34578,32628],{"class":154},[144,34580,34581,34583,34585],{"class":146,"line":16832},[144,34582,32638],{"class":154},[144,34584,200],{"class":150},[144,34586,32643],{"class":154},[144,34588,34589],{"class":146,"line":16846},[144,34590,2430],{"emptyLinePlaceholder":72},[144,34592,34593],{"class":146,"line":16851},[144,34594,34595],{"class":213},"            # 设置模型为验证模式\n",[144,34597,34598],{"class":146,"line":16857},[144,34599,32888],{"class":154},[144,34601,34602],{"class":146,"line":16862},[144,34603,34604],{"class":213},"            # 模型推理结果\n",[144,34606,34607,34609,34611],{"class":146,"line":16876},[144,34608,32673],{"class":154},[144,34610,200],{"class":150},[144,34612,32678],{"class":154},[144,34614,34615],{"class":146,"line":16881},[144,34616,34617],{"class":213},"            # 获取最大下标，最大下标就是类别号\n",[144,34619,34620,34622,34624,34626,34628,34630,34632],{"class":146,"line":16886},[144,34621,32690],{"class":154},[144,34623,200],{"class":150},[144,34625,32695],{"class":154},[144,34627,32698],{"class":5247},[144,34629,200],{"class":150},[144,34631,372],{"class":203},[144,34633,161],{"class":154},[144,34635,34636],{"class":146,"line":16900},[144,34637,34638],{"class":213},"            # 取出张量中的数值\n",[144,34640,34641,34644,34646],{"class":146,"line":16912},[144,34642,34643],{"class":154},"            result",[144,34645,200],{"class":150},[144,34647,34648],{"class":154},"pre_lab.item()\n",[144,34650,34651,34654,34656],{"class":146,"line":16917},[144,34652,34653],{"class":154},"            label",[144,34655,200],{"class":150},[144,34657,34658],{"class":154},"b_y.item()\n",[144,34660,34661,34664,34666,34669,34672,34675,34677,34680],{"class":146,"line":16930},[144,34662,34663],{"class":203},"            print",[144,34665,155],{"class":154},[144,34667,34668],{"class":259},"\"预测值：\"",[144,34670,34671],{"class":154},",classes[result],",[144,34673,34674],{"class":259},"\"------\"",[144,34676,533],{"class":154},[144,34678,34679],{"class":259},"\"真实值：\"",[144,34681,34682],{"class":154},",classes[label])\n",[14,34684,34685],{},"（2）AlexNet",[98,34687,34688],{},[101,34689,34690],{},"神经网络构建",[135,34692,34694],{"className":30391,"code":34693,"language":30393,"meta":30,"style":30},"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",[141,34695,34696,34702,34712,34722,34734,34738,34755,34763,34778,34790,34832,34859,34902,34928,34972,35015,35058,35085,35089,35099,35104,35132,35151,35170,35174,35179,35187,35202,35212,35226,35236,35251,35266,35281,35292,35296,35301,35311,35326,35331,35345,35360,35372,35377,35388,35393,35399,35404,35416,35436,35441,35450],{"__ignoreMap":30},[144,34697,34698,34700],{"class":146,"line":147},[144,34699,30405],{"class":150},[144,34701,30408],{"class":154},[144,34703,34704,34706,34708,34710],{"class":146,"line":66},[144,34705,30750],{"class":150},[144,34707,30753],{"class":154},[144,34709,30405],{"class":150},[144,34711,30758],{"class":154},[144,34713,34714,34716,34718,34720],{"class":146,"line":1210},[144,34715,30750],{"class":150},[144,34717,30770],{"class":154},[144,34719,30405],{"class":150},[144,34721,30775],{"class":154},[144,34723,34724,34726,34729,34731],{"class":146,"line":1225},[144,34725,30405],{"class":150},[144,34727,34728],{"class":154}," torch.nn.functional ",[144,34730,31396],{"class":150},[144,34732,34733],{"class":154}," F\n",[144,34735,34736],{"class":146,"line":1231},[144,34737,2430],{"emptyLinePlaceholder":72},[144,34739,34740,34742,34745,34747,34749,34751,34753],{"class":146,"line":1245},[144,34741,14725],{"class":150},[144,34743,34744],{"class":1993}," AlexNet",[144,34746,155],{"class":154},[144,34748,30791],{"class":1993},[144,34750,713],{"class":154},[144,34752,30796],{"class":1993},[144,34754,30799],{"class":154},[144,34756,34757,34759,34761],{"class":146,"line":1251},[144,34758,30814],{"class":150},[144,34760,30817],{"class":203},[144,34762,30820],{"class":154},[144,34764,34765,34767,34770,34772,34774,34776],{"class":146,"line":1342},[144,34766,30830],{"class":203},[144,34768,34769],{"class":154},"(AlexNet,",[144,34771,30836],{"class":203},[144,34773,30839],{"class":154},[144,34775,30842],{"class":203},[144,34777,2006],{"class":154},[144,34779,34780,34782,34785,34787],{"class":146,"line":1348},[144,34781,30858],{"class":203},[144,34783,34784],{"class":154},".ReLu",[144,34786,200],{"class":150},[144,34788,34789],{"class":154},"nn.ReLU()\n",[144,34791,34792,34794,34796,34798,34800,34802,34804,34806,34808,34810,34812,34814,34816,34818,34820,34822,34824,34826,34828,34830],{"class":146,"line":1360},[144,34793,30858],{"class":203},[144,34795,30861],{"class":154},[144,34797,200],{"class":150},[144,34799,30866],{"class":154},[144,34801,30869],{"class":5247},[144,34803,200],{"class":150},[144,34805,372],{"class":203},[144,34807,533],{"class":154},[144,34809,30878],{"class":5247},[144,34811,200],{"class":150},[144,34813,364],{"class":203},[144,34815,533],{"class":154},[144,34817,30887],{"class":5247},[144,34819,200],{"class":150},[144,34821,627],{"class":203},[144,34823,533],{"class":154},[144,34825,30942],{"class":5247},[144,34827,200],{"class":150},[144,34829,448],{"class":203},[144,34831,161],{"class":154},[144,34833,34834,34836,34838,34840,34843,34845,34847,34849,34851,34853,34855,34857],{"class":146,"line":1642},[144,34835,30858],{"class":203},[144,34837,30926],{"class":154},[144,34839,200],{"class":150},[144,34841,34842],{"class":154},"nn.MaxPool2d(",[144,34844,30887],{"class":5247},[144,34846,200],{"class":150},[144,34848,226],{"class":203},[144,34850,533],{"class":154},[144,34852,30942],{"class":5247},[144,34854,200],{"class":150},[144,34856,232],{"class":203},[144,34858,161],{"class":154},[144,34860,34861,34863,34865,34867,34869,34871,34873,34875,34877,34879,34881,34884,34886,34888,34890,34892,34894,34896,34898,34900],{"class":146,"line":1647},[144,34862,30858],{"class":203},[144,34864,30955],{"class":154},[144,34866,200],{"class":150},[144,34868,30866],{"class":154},[144,34870,30869],{"class":5247},[144,34872,200],{"class":150},[144,34874,364],{"class":203},[144,34876,533],{"class":154},[144,34878,30878],{"class":5247},[144,34880,200],{"class":150},[144,34882,34883],{"class":203},"256",[144,34885,533],{"class":154},[144,34887,30887],{"class":5247},[144,34889,200],{"class":150},[144,34891,474],{"class":203},[144,34893,533],{"class":154},[144,34895,30896],{"class":5247},[144,34897,200],{"class":150},[144,34899,232],{"class":203},[144,34901,161],{"class":154},[144,34903,34904,34906,34908,34910,34912,34914,34916,34918,34920,34922,34924,34926],{"class":146,"line":1653},[144,34905,30858],{"class":203},[144,34907,30990],{"class":154},[144,34909,200],{"class":150},[144,34911,34842],{"class":154},[144,34913,30887],{"class":5247},[144,34915,200],{"class":150},[144,34917,226],{"class":203},[144,34919,533],{"class":154},[144,34921,30942],{"class":5247},[144,34923,200],{"class":150},[144,34925,232],{"class":203},[144,34927,161],{"class":154},[144,34929,34930,34932,34935,34937,34939,34941,34943,34945,34947,34949,34951,34954,34956,34958,34960,34962,34964,34966,34968,34970],{"class":146,"line":1658},[144,34931,30858],{"class":203},[144,34933,34934],{"class":154},".c5",[144,34936,200],{"class":150},[144,34938,30866],{"class":154},[144,34940,30869],{"class":5247},[144,34942,200],{"class":150},[144,34944,34883],{"class":203},[144,34946,533],{"class":154},[144,34948,30878],{"class":5247},[144,34950,200],{"class":150},[144,34952,34953],{"class":203},"384",[144,34955,533],{"class":154},[144,34957,30887],{"class":5247},[144,34959,200],{"class":150},[144,34961,226],{"class":203},[144,34963,533],{"class":154},[144,34965,30896],{"class":5247},[144,34967,200],{"class":150},[144,34969,372],{"class":203},[144,34971,161],{"class":154},[144,34973,34974,34976,34979,34981,34983,34985,34987,34989,34991,34993,34995,34997,34999,35001,35003,35005,35007,35009,35011,35013],{"class":146,"line":1672},[144,34975,30858],{"class":203},[144,34977,34978],{"class":154},".c6",[144,34980,200],{"class":150},[144,34982,30866],{"class":154},[144,34984,30869],{"class":5247},[144,34986,200],{"class":150},[144,34988,34953],{"class":203},[144,34990,533],{"class":154},[144,34992,30878],{"class":5247},[144,34994,200],{"class":150},[144,34996,34953],{"class":203},[144,34998,533],{"class":154},[144,35000,30887],{"class":5247},[144,35002,200],{"class":150},[144,35004,226],{"class":203},[144,35006,533],{"class":154},[144,35008,30896],{"class":5247},[144,35010,200],{"class":150},[144,35012,372],{"class":203},[144,35014,161],{"class":154},[144,35016,35017,35019,35022,35024,35026,35028,35030,35032,35034,35036,35038,35040,35042,35044,35046,35048,35050,35052,35054,35056],{"class":146,"line":1677},[144,35018,30858],{"class":203},[144,35020,35021],{"class":154},".c7",[144,35023,200],{"class":150},[144,35025,30866],{"class":154},[144,35027,30869],{"class":5247},[144,35029,200],{"class":150},[144,35031,34953],{"class":203},[144,35033,533],{"class":154},[144,35035,30878],{"class":5247},[144,35037,200],{"class":150},[144,35039,34883],{"class":203},[144,35041,533],{"class":154},[144,35043,30887],{"class":5247},[144,35045,200],{"class":150},[144,35047,226],{"class":203},[144,35049,533],{"class":154},[144,35051,30896],{"class":5247},[144,35053,200],{"class":150},[144,35055,372],{"class":203},[144,35057,161],{"class":154},[144,35059,35060,35062,35065,35067,35069,35071,35073,35075,35077,35079,35081,35083],{"class":146,"line":1683},[144,35061,30858],{"class":203},[144,35063,35064],{"class":154},".s8",[144,35066,200],{"class":150},[144,35068,34842],{"class":154},[144,35070,30887],{"class":5247},[144,35072,200],{"class":150},[144,35074,226],{"class":203},[144,35076,533],{"class":154},[144,35078,30942],{"class":5247},[144,35080,200],{"class":150},[144,35082,232],{"class":203},[144,35084,161],{"class":154},[144,35086,35087],{"class":146,"line":1704},[144,35088,31015],{"class":213},[144,35090,35091,35093,35095,35097],{"class":146,"line":1709},[144,35092,30858],{"class":203},[144,35094,31022],{"class":154},[144,35096,200],{"class":150},[144,35098,31027],{"class":154},[144,35100,35101],{"class":146,"line":1723},[144,35102,35103],{"class":213},"       # 定义全连接层\n",[144,35105,35106,35108,35111,35113,35115,35117,35119,35121,35123,35125,35127,35130],{"class":146,"line":1728},[144,35107,30858],{"class":203},[144,35109,35110],{"class":154},".f1",[144,35112,200],{"class":150},[144,35114,31044],{"class":154},[144,35116,499],{"class":203},[144,35118,610],{"class":150},[144,35120,499],{"class":203},[144,35122,610],{"class":150},[144,35124,34883],{"class":203},[144,35126,533],{"class":154},[144,35128,35129],{"class":203},"4096",[144,35131,161],{"class":154},[144,35133,35134,35136,35139,35141,35143,35145,35147,35149],{"class":146,"line":1757},[144,35135,30858],{"class":203},[144,35137,35138],{"class":154},".f2",[144,35140,200],{"class":150},[144,35142,31044],{"class":154},[144,35144,35129],{"class":203},[144,35146,533],{"class":154},[144,35148,35129],{"class":203},[144,35150,161],{"class":154},[144,35152,35153,35155,35158,35160,35162,35164,35166,35168],{"class":146,"line":1762},[144,35154,30858],{"class":203},[144,35156,35157],{"class":154},".f3",[144,35159,200],{"class":150},[144,35161,31044],{"class":154},[144,35163,35129],{"class":203},[144,35165,533],{"class":154},[144,35167,601],{"class":203},[144,35169,161],{"class":154},[144,35171,35172],{"class":146,"line":1779},[144,35173,2430],{"emptyLinePlaceholder":72},[144,35175,35176],{"class":146,"line":1784},[144,35177,35178],{"class":213},"    # 定义前向传播\n",[144,35180,35181,35183,35185],{"class":146,"line":1789},[144,35182,30814],{"class":150},[144,35184,31106],{"class":1993},[144,35186,31109],{"class":154},[144,35188,35189,35191,35193,35195,35198,35200],{"class":146,"line":1794},[144,35190,31114],{"class":154},[144,35192,200],{"class":150},[144,35194,30836],{"class":203},[144,35196,35197],{"class":154},".ReLu(",[144,35199,30836],{"class":203},[144,35201,31126],{"class":154},[144,35203,35204,35206,35208,35210],{"class":146,"line":1808},[144,35205,31114],{"class":154},[144,35207,200],{"class":150},[144,35209,30836],{"class":203},[144,35211,31137],{"class":154},[144,35213,35214,35216,35218,35220,35222,35224],{"class":146,"line":1813},[144,35215,31114],{"class":154},[144,35217,200],{"class":150},[144,35219,30836],{"class":203},[144,35221,35197],{"class":154},[144,35223,30836],{"class":203},[144,35225,31152],{"class":154},[144,35227,35228,35230,35232,35234],{"class":146,"line":2607},[144,35229,31114],{"class":154},[144,35231,200],{"class":150},[144,35233,30836],{"class":203},[144,35235,31163],{"class":154},[144,35237,35238,35240,35242,35244,35246,35248],{"class":146,"line":2621},[144,35239,31114],{"class":154},[144,35241,200],{"class":150},[144,35243,30836],{"class":203},[144,35245,35197],{"class":154},[144,35247,30836],{"class":203},[144,35249,35250],{"class":154},".c5(x))\n",[144,35252,35253,35255,35257,35259,35261,35263],{"class":146,"line":2629},[144,35254,31114],{"class":154},[144,35256,200],{"class":150},[144,35258,30836],{"class":203},[144,35260,35197],{"class":154},[144,35262,30836],{"class":203},[144,35264,35265],{"class":154},".c6(x))\n",[144,35267,35268,35270,35272,35274,35276,35278],{"class":146,"line":2634},[144,35269,31114],{"class":154},[144,35271,200],{"class":150},[144,35273,30836],{"class":203},[144,35275,35197],{"class":154},[144,35277,30836],{"class":203},[144,35279,35280],{"class":154},".c7(x))\n",[144,35282,35283,35285,35287,35289],{"class":146,"line":2640},[144,35284,31114],{"class":154},[144,35286,200],{"class":150},[144,35288,30836],{"class":203},[144,35290,35291],{"class":154},".s8(x)\n",[144,35293,35294],{"class":146,"line":2646},[144,35295,2430],{"emptyLinePlaceholder":72},[144,35297,35298],{"class":146,"line":2651},[144,35299,35300],{"class":213},"        # 展平加线性全连接层\n",[144,35302,35303,35305,35307,35309],{"class":146,"line":7979},[144,35304,31114],{"class":154},[144,35306,200],{"class":150},[144,35308,30836],{"class":203},[144,35310,31174],{"class":154},[144,35312,35313,35315,35317,35319,35321,35323],{"class":146,"line":8003},[144,35314,31114],{"class":154},[144,35316,200],{"class":150},[144,35318,30836],{"class":203},[144,35320,35197],{"class":154},[144,35322,30836],{"class":203},[144,35324,35325],{"class":154},".f1(x))\n",[144,35327,35328],{"class":146,"line":8008},[144,35329,35330],{"class":213},"        # 还需要dropout对神经元随机进行失活\n",[144,35332,35333,35335,35337,35340,35343],{"class":146,"line":8014},[144,35334,31114],{"class":154},[144,35336,200],{"class":150},[144,35338,35339],{"class":154},"F.dropout(x,",[144,35341,35342],{"class":203},"0.5",[144,35344,161],{"class":154},[144,35346,35347,35349,35351,35353,35355,35357],{"class":146,"line":8041},[144,35348,31114],{"class":154},[144,35350,200],{"class":150},[144,35352,30836],{"class":203},[144,35354,35197],{"class":154},[144,35356,30836],{"class":203},[144,35358,35359],{"class":154},".f2(x))\n",[144,35361,35362,35364,35366,35368,35370],{"class":146,"line":8046},[144,35363,31114],{"class":154},[144,35365,200],{"class":150},[144,35367,35339],{"class":154},[144,35369,35342],{"class":203},[144,35371,161],{"class":154},[144,35373,35374],{"class":146,"line":8052},[144,35375,35376],{"class":213},"        # 直接输出\n",[144,35378,35379,35381,35383,35385],{"class":146,"line":8064},[144,35380,31114],{"class":154},[144,35382,200],{"class":150},[144,35384,30836],{"class":203},[144,35386,35387],{"class":154},".f3(x)\n",[144,35389,35390],{"class":146,"line":8076},[144,35391,35392],{"class":213},"        # 前向传播输出\n",[144,35394,35395,35397],{"class":146,"line":8088},[144,35396,14783],{"class":150},[144,35398,31222],{"class":154},[144,35400,35401],{"class":146,"line":9747},[144,35402,35403],{"class":213},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[144,35405,35406,35408,35410,35412,35414],{"class":146,"line":9772},[144,35407,1561],{"class":150},[144,35409,31233],{"class":203},[144,35411,2979],{"class":150},[144,35413,31238],{"class":259},[144,35415,3769],{"class":154},[144,35417,35418,35420,35422,35424,35426,35428,35430,35432,35434],{"class":146,"line":9795},[144,35419,31250],{"class":154},[144,35421,200],{"class":150},[144,35423,30464],{"class":154},[144,35425,31257],{"class":259},[144,35427,1734],{"class":150},[144,35429,31262],{"class":154},[144,35431,1731],{"class":150},[144,35433,30489],{"class":259},[144,35435,161],{"class":154},[144,35437,35438],{"class":146,"line":9819},[144,35439,35440],{"class":213},"    # 模型实例化，然后将实例化的模型放到设备中\n",[144,35442,35443,35445,35447],{"class":146,"line":9824},[144,35444,31302],{"class":154},[144,35446,200],{"class":150},[144,35448,35449],{"class":154},"AlexNet().to(device)\n",[144,35451,35452,35454,35456,35458,35460,35463,35465,35467],{"class":146,"line":9829},[144,35453,31312],{"class":203},[144,35455,31315],{"class":154},[144,35457,372],{"class":203},[144,35459,533],{"class":154},[144,35461,35462],{"class":203},"227",[144,35464,533],{"class":154},[144,35466,35462],{"class":203},[144,35468,31328],{"class":154},[98,35470,35471],{"start":66},[101,35472,31341],{},[135,35474,35476],{"className":30391,"code":35475,"language":30393,"meta":30,"style":30},"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",[141,35477,35478,35484,35490,35500,35506,35516,35526,35536,35546,35556,35560,35571,35581,35585,35589,35593,35601,35613,35623,35639,35649,35681,35695,35705,35715,35719,35729,35743,35753,35763,35773,35779,35783,35787,35791,35795,35799,35807,35827,35831,35835,35839,35843,35847,35863,35867,35871,35879,35883,35887,35895,35899,35903,35907,35915,35919,35923,35927,35931,35939,35943,35951,35955,35963,35967,35975,35979,35987,35991,35995,36003,36007,36011,36015,36027,36051,36065,36069,36073,36077,36085,36089,36097,36101,36109,36113,36121,36125,36133,36137,36145,36149,36161,36165,36173,36177,36185,36189,36193,36197,36201,36209,36213,36229,36233,36241,36245,36249,36253,36257,36261,36265,36269,36285,36289,36301,36305,36317,36321,36333,36337,36345,36349,36357,36361,36365,36370,36376,36380,36389,36393,36410,36414,36423,36427,36445,36458,36463,36476,36480,36484,36492,36496,36500,36508,36512,36520,36524,36532,36536,36540,36582,36624,36628,36632,36648,36652,36668,36672,36676,36684,36688,36692,36704,36742,36747,36752,36761,36765,36779,36789,36795,36801,36807,36813,36817,36821,36827,36831,36835,36843,36847,36865,36869,36873,36877,36893,36897,36901,36905,36909,36913,36933,36953,36957,36961,36965,36973,36981,36985,37001,37021,37041,37045,37049,37057,37065,37069,37073,37077,37089,37093,37103,37111,37128],{"__ignoreMap":30},[144,35479,35480,35482],{"class":146,"line":147},[144,35481,30405],{"class":150},[144,35483,31835],{"class":154},[144,35485,35486,35488],{"class":146,"line":66},[144,35487,30405],{"class":150},[144,35489,31842],{"class":154},[144,35491,35492,35494,35496,35498],{"class":146,"line":1210},[144,35493,30405],{"class":150},[144,35495,31853],{"class":154},[144,35497,31396],{"class":150},[144,35499,31858],{"class":154},[144,35501,35502,35504],{"class":146,"line":1225},[144,35503,30405],{"class":150},[144,35505,30408],{"class":154},[144,35507,35508,35510,35512,35514],{"class":146,"line":1231},[144,35509,30750],{"class":150},[144,35511,31428],{"class":154},[144,35513,30405],{"class":150},[144,35515,31875],{"class":154},[144,35517,35518,35520,35522,35524],{"class":146,"line":1245},[144,35519,30750],{"class":150},[144,35521,31381],{"class":154},[144,35523,30405],{"class":150},[144,35525,31386],{"class":154},[144,35527,35528,35530,35532,35534],{"class":146,"line":1251},[144,35529,30750],{"class":150},[144,35531,31411],{"class":154},[144,35533,30405],{"class":150},[144,35535,31416],{"class":154},[144,35537,35538,35540,35542,35544],{"class":146,"line":1342},[144,35539,30405],{"class":150},[144,35541,31428],{"class":154},[144,35543,31396],{"class":150},[144,35545,31433],{"class":154},[144,35547,35548,35550,35552,35554],{"class":146,"line":1348},[144,35549,30405],{"class":150},[144,35551,31445],{"class":154},[144,35553,31396],{"class":150},[144,35555,31450],{"class":154},[144,35557,35558],{"class":146,"line":1360},[144,35559,31920],{"class":213},[144,35561,35562,35564,35566,35568],{"class":146,"line":1642},[144,35563,30750],{"class":150},[144,35565,31927],{"class":154},[144,35567,30405],{"class":150},[144,35569,35570],{"class":154}," AlexNet\n",[144,35572,35573,35575,35577,35579],{"class":146,"line":1647},[144,35574,30750],{"class":150},[144,35576,30753],{"class":154},[144,35578,30405],{"class":150},[144,35580,30758],{"class":154},[144,35582,35583],{"class":146,"line":1653},[144,35584,2430],{"emptyLinePlaceholder":72},[144,35586,35587],{"class":146,"line":1658},[144,35588,2430],{"emptyLinePlaceholder":72},[144,35590,35591],{"class":146,"line":1672},[144,35592,31955],{"class":213},[144,35594,35595,35597,35599],{"class":146,"line":1677},[144,35596,31960],{"class":150},[144,35598,31963],{"class":1993},[144,35600,31966],{"class":154},[144,35602,35603,35605,35607,35609,35611],{"class":146,"line":1683},[144,35604,31971],{"class":154},[144,35606,200],{"class":150},[144,35608,31468],{"class":154},[144,35610,31476],{"class":259},[144,35612,31479],{"class":154},[144,35614,35615,35617,35619,35621],{"class":146,"line":1704},[144,35616,31984],{"class":5247},[144,35618,200],{"class":150},[144,35620,31489],{"class":203},[144,35622,31479],{"class":154},[144,35624,35625,35627,35629,35631,35633,35635,35637],{"class":146,"line":1709},[144,35626,31995],{"class":5247},[144,35628,200],{"class":150},[144,35630,31506],{"class":154},[144,35632,31509],{"class":5247},[144,35634,200],{"class":150},[144,35636,35462],{"class":203},[144,35638,31517],{"class":154},[144,35640,35641,35643,35645,35647],{"class":146,"line":1723},[144,35642,32012],{"class":5247},[144,35644,200],{"class":150},[144,35646,31489],{"class":203},[144,35648,161],{"class":154},[144,35650,35651,35653,35655,35657,35659,35661,35663,35665,35667,35669,35671,35673,35675,35677,35679],{"class":146,"line":1728},[144,35652,32023],{"class":154},[144,35654,200],{"class":150},[144,35656,32028],{"class":154},[144,35658,32031],{"class":203},[144,35660,155],{"class":154},[144,35662,32036],{"class":203},[144,35664,610],{"class":150},[144,35666,7389],{"class":203},[144,35668,32043],{"class":154},[144,35670,32031],{"class":203},[144,35672,155],{"class":154},[144,35674,32050],{"class":203},[144,35676,610],{"class":150},[144,35678,7389],{"class":203},[144,35680,32057],{"class":154},[144,35682,35683,35685,35687,35689,35691,35693],{"class":146,"line":1757},[144,35684,32062],{"class":154},[144,35686,200],{"class":150},[144,35688,32067],{"class":154},[144,35690,31550],{"class":5247},[144,35692,200],{"class":150},[144,35694,31555],{"class":154},[144,35696,35697,35699,35701,35703],{"class":146,"line":1762},[144,35698,32078],{"class":5247},[144,35700,200],{"class":150},[144,35702,32083],{"class":203},[144,35704,31479],{"class":154},[144,35706,35707,35709,35711,35713],{"class":146,"line":1779},[144,35708,32090],{"class":5247},[144,35710,200],{"class":150},[144,35712,31489],{"class":203},[144,35714,31479],{"class":154},[144,35716,35717],{"class":146,"line":1784},[144,35718,32101],{"class":213},[144,35720,35721,35723,35725,35727],{"class":146,"line":1789},[144,35722,32106],{"class":5247},[144,35724,200],{"class":150},[144,35726,550],{"class":203},[144,35728,161],{"class":154},[144,35730,35731,35733,35735,35737,35739,35741],{"class":146,"line":1794},[144,35732,32117],{"class":154},[144,35734,200],{"class":150},[144,35736,31547],{"class":154},[144,35738,31550],{"class":5247},[144,35740,200],{"class":150},[144,35742,32128],{"class":154},[144,35744,35745,35747,35749,35751],{"class":146,"line":1808},[144,35746,32133],{"class":5247},[144,35748,200],{"class":150},[144,35750,32083],{"class":203},[144,35752,31479],{"class":154},[144,35754,35755,35757,35759,35761],{"class":146,"line":1813},[144,35756,32144],{"class":5247},[144,35758,200],{"class":150},[144,35760,31489],{"class":203},[144,35762,31479],{"class":154},[144,35764,35765,35767,35769,35771],{"class":146,"line":2607},[144,35766,32155],{"class":5247},[144,35768,200],{"class":150},[144,35770,550],{"class":203},[144,35772,161],{"class":154},[144,35774,35775,35777],{"class":146,"line":2621},[144,35776,4120],{"class":150},[144,35778,32168],{"class":154},[144,35780,35781],{"class":146,"line":2629},[144,35782,2430],{"emptyLinePlaceholder":72},[144,35784,35785],{"class":146,"line":2634},[144,35786,32177],{"class":213},[144,35788,35789],{"class":146,"line":2640},[144,35790,32182],{"class":213},[144,35792,35793],{"class":146,"line":2646},[144,35794,2430],{"emptyLinePlaceholder":72},[144,35796,35797],{"class":146,"line":2651},[144,35798,32191],{"class":213},[144,35800,35801,35803,35805],{"class":146,"line":7979},[144,35802,31960],{"class":150},[144,35804,32198],{"class":1993},[144,35806,32201],{"class":154},[144,35808,35809,35811,35813,35815,35817,35819,35821,35823,35825],{"class":146,"line":8003},[144,35810,31250],{"class":154},[144,35812,200],{"class":150},[144,35814,30464],{"class":154},[144,35816,31257],{"class":259},[144,35818,1734],{"class":150},[144,35820,31262],{"class":154},[144,35822,1731],{"class":150},[144,35824,32220],{"class":259},[144,35826,161],{"class":154},[144,35828,35829],{"class":146,"line":8008},[144,35830,2430],{"emptyLinePlaceholder":72},[144,35832,35833],{"class":146,"line":8014},[144,35834,2430],{"emptyLinePlaceholder":72},[144,35836,35837],{"class":146,"line":8041},[144,35838,32235],{"class":213},[144,35840,35841],{"class":146,"line":8046},[144,35842,32240],{"class":213},[144,35844,35845],{"class":146,"line":8052},[144,35846,32245],{"class":213},[144,35848,35849,35851,35853,35855,35857,35859,35861],{"class":146,"line":8064},[144,35850,32250],{"class":154},[144,35852,200],{"class":150},[144,35854,32255],{"class":154},[144,35856,32258],{"class":5247},[144,35858,200],{"class":150},[144,35860,32263],{"class":203},[144,35862,161],{"class":154},[144,35864,35865],{"class":146,"line":8076},[144,35866,2430],{"emptyLinePlaceholder":72},[144,35868,35869],{"class":146,"line":8088},[144,35870,32274],{"class":213},[144,35872,35873,35875,35877],{"class":146,"line":9747},[144,35874,32279],{"class":154},[144,35876,200],{"class":150},[144,35878,32284],{"class":154},[144,35880,35881],{"class":146,"line":9772},[144,35882,2430],{"emptyLinePlaceholder":72},[144,35884,35885],{"class":146,"line":9795},[144,35886,32293],{"class":213},[144,35888,35889,35891,35893],{"class":146,"line":9819},[144,35890,31302],{"class":154},[144,35892,200],{"class":150},[144,35894,32302],{"class":154},[144,35896,35897],{"class":146,"line":9824},[144,35898,32307],{"class":213},[144,35900,35901],{"class":146,"line":9829},[144,35902,32312],{"class":213},[144,35904,35905],{"class":146,"line":9834},[144,35906,32317],{"class":213},[144,35908,35909,35911,35913],{"class":146,"line":9843},[144,35910,32322],{"class":154},[144,35912,200],{"class":150},[144,35914,32327],{"class":154},[144,35916,35917],{"class":146,"line":9848},[144,35918,2430],{"emptyLinePlaceholder":72},[144,35920,35921],{"class":146,"line":9854},[144,35922,2430],{"emptyLinePlaceholder":72},[144,35924,35925],{"class":146,"line":9875},[144,35926,32340],{"class":213},[144,35928,35929],{"class":146,"line":9881},[144,35930,32345],{"class":213},[144,35932,35933,35935,35937],{"class":146,"line":9895},[144,35934,32350],{"class":154},[144,35936,200],{"class":150},[144,35938,32355],{"class":203},[144,35940,35941],{"class":146,"line":9901},[144,35942,32360],{"class":213},[144,35944,35945,35947,35949],{"class":146,"line":9928},[144,35946,32365],{"class":154},[144,35948,200],{"class":150},[144,35950,32370],{"class":154},[144,35952,35953],{"class":146,"line":9937},[144,35954,32375],{"class":213},[144,35956,35957,35959,35961],{"class":146,"line":9943},[144,35958,32380],{"class":154},[144,35960,200],{"class":150},[144,35962,32370],{"class":154},[144,35964,35965],{"class":146,"line":9951},[144,35966,32389],{"class":213},[144,35968,35969,35971,35973],{"class":146,"line":9956},[144,35970,32394],{"class":154},[144,35972,200],{"class":150},[144,35974,32370],{"class":154},[144,35976,35977],{"class":146,"line":16635},[144,35978,32403],{"class":213},[144,35980,35981,35983,35985],{"class":146,"line":16641},[144,35982,32408],{"class":154},[144,35984,200],{"class":150},[144,35986,32370],{"class":154},[144,35988,35989],{"class":146,"line":16664},[144,35990,2430],{"emptyLinePlaceholder":72},[144,35992,35993],{"class":146,"line":16670},[144,35994,32421],{"class":213},[144,35996,35997,35999,36001],{"class":146,"line":16693},[144,35998,32426],{"class":154},[144,36000,200],{"class":150},[144,36002,32431],{"class":154},[144,36004,36005],{"class":146,"line":16707},[144,36006,2430],{"emptyLinePlaceholder":72},[144,36008,36009],{"class":146,"line":16727},[144,36010,2430],{"emptyLinePlaceholder":72},[144,36012,36013],{"class":146,"line":16733},[144,36014,32444],{"class":213},[144,36016,36017,36019,36021,36023,36025],{"class":146,"line":16744},[144,36018,3231],{"class":150},[144,36020,32451],{"class":154},[144,36022,26056],{"class":150},[144,36024,32456],{"class":203},[144,36026,32459],{"class":154},[144,36028,36029,36031,36033,36035,36037,36039,36041,36043,36045,36047,36049],{"class":146,"line":16767},[144,36030,32464],{"class":203},[144,36032,155],{"class":154},[144,36034,32469],{"class":259},[144,36036,32472],{"class":203},[144,36038,739],{"class":259},[144,36040,32472],{"class":203},[144,36042,406],{"class":259},[144,36044,32481],{"class":154},[144,36046,687],{"class":150},[144,36048,372],{"class":203},[144,36050,30510],{"class":154},[144,36052,36053,36055,36057,36059,36061,36063],{"class":146,"line":16789},[144,36054,32464],{"class":203},[144,36056,155],{"class":154},[144,36058,32496],{"class":259},[144,36060,610],{"class":150},[144,36062,601],{"class":203},[144,36064,161],{"class":154},[144,36066,36067],{"class":146,"line":16794},[144,36068,2430],{"emptyLinePlaceholder":72},[144,36070,36071],{"class":146,"line":16800},[144,36072,32511],{"class":213},[144,36074,36075],{"class":146,"line":16814},[144,36076,32516],{"class":213},[144,36078,36079,36081,36083],{"class":146,"line":16827},[144,36080,32521],{"class":154},[144,36082,200],{"class":150},[144,36084,32355],{"class":203},[144,36086,36087],{"class":146,"line":16832},[144,36088,32530],{"class":213},[144,36090,36091,36093,36095],{"class":146,"line":16846},[144,36092,32535],{"class":154},[144,36094,200],{"class":150},[144,36096,3115],{"class":203},[144,36098,36099],{"class":146,"line":16851},[144,36100,32544],{"class":213},[144,36102,36103,36105,36107],{"class":146,"line":16857},[144,36104,32549],{"class":154},[144,36106,200],{"class":150},[144,36108,32355],{"class":203},[144,36110,36111],{"class":146,"line":16862},[144,36112,32558],{"class":213},[144,36114,36115,36117,36119],{"class":146,"line":16876},[144,36116,32563],{"class":154},[144,36118,200],{"class":150},[144,36120,3115],{"class":203},[144,36122,36123],{"class":146,"line":16881},[144,36124,32572],{"class":213},[144,36126,36127,36129,36131],{"class":146,"line":16886},[144,36128,32577],{"class":154},[144,36130,200],{"class":150},[144,36132,3115],{"class":203},[144,36134,36135],{"class":146,"line":16900},[144,36136,32586],{"class":213},[144,36138,36139,36141,36143],{"class":146,"line":16912},[144,36140,32591],{"class":154},[144,36142,200],{"class":150},[144,36144,3115],{"class":203},[144,36146,36147],{"class":146,"line":16917},[144,36148,32600],{"class":213},[144,36150,36151,36153,36155,36157,36159],{"class":146,"line":16930},[144,36152,3433],{"class":150},[144,36154,31614],{"class":154},[144,36156,26056],{"class":150},[144,36158,31619],{"class":203},[144,36160,32613],{"class":154},[144,36162,36163],{"class":146,"line":16935},[144,36164,32618],{"class":213},[144,36166,36167,36169,36171],{"class":146,"line":16940},[144,36168,32623],{"class":154},[144,36170,200],{"class":150},[144,36172,32628],{"class":154},[144,36174,36175],{"class":146,"line":16945},[144,36176,32633],{"class":213},[144,36178,36179,36181,36183],{"class":146,"line":16958},[144,36180,32638],{"class":154},[144,36182,200],{"class":150},[144,36184,32643],{"class":154},[144,36186,36187],{"class":146,"line":16963},[144,36188,32649],{"class":213},[144,36190,36191],{"class":146,"line":32646},[144,36192,32655],{"class":154},[144,36194,36195],{"class":146,"line":32652},[144,36196,32661],{"class":213},[144,36198,36199],{"class":146,"line":32658},[144,36200,32667],{"class":213},[144,36202,36203,36205,36207],{"class":146,"line":32664},[144,36204,32673],{"class":154},[144,36206,200],{"class":150},[144,36208,32678],{"class":154},[144,36210,36211],{"class":146,"line":32670},[144,36212,32684],{"class":213},[144,36214,36215,36217,36219,36221,36223,36225,36227],{"class":146,"line":32681},[144,36216,32690],{"class":154},[144,36218,200],{"class":150},[144,36220,32695],{"class":154},[144,36222,32698],{"class":5247},[144,36224,200],{"class":150},[144,36226,372],{"class":203},[144,36228,161],{"class":154},[144,36230,36231],{"class":146,"line":32687},[144,36232,32710],{"class":213},[144,36234,36235,36237,36239],{"class":146,"line":32707},[144,36236,32716],{"class":154},[144,36238,200],{"class":150},[144,36240,32721],{"class":154},[144,36242,36243],{"class":146,"line":32713},[144,36244,32727],{"class":213},[144,36246,36247],{"class":146,"line":32724},[144,36248,32733],{"class":154},[144,36250,36251],{"class":146,"line":32730},[144,36252,32739],{"class":213},[144,36254,36255],{"class":146,"line":32736},[144,36256,32745],{"class":154},[144,36258,36259],{"class":146,"line":32742},[144,36260,32751],{"class":213},[144,36262,36263],{"class":146,"line":32748},[144,36264,32757],{"class":154},[144,36266,36267],{"class":146,"line":32754},[144,36268,32763],{"class":213},[144,36270,36271,36273,36275,36277,36279,36281,36283],{"class":146,"line":32760},[144,36272,32769],{"class":154},[144,36274,9508],{"class":150},[144,36276,32774],{"class":154},[144,36278,610],{"class":150},[144,36280,32779],{"class":154},[144,36282,346],{"class":203},[144,36284,161],{"class":154},[144,36286,36287],{"class":146,"line":32766},[144,36288,32789],{"class":213},[144,36290,36291,36293,36295,36297,36299],{"class":146,"line":32786},[144,36292,32795],{"class":154},[144,36294,9508],{"class":150},[144,36296,32800],{"class":154},[144,36298,2979],{"class":150},[144,36300,32805],{"class":154},[144,36302,36303],{"class":146,"line":32792},[144,36304,32811],{"class":213},[144,36306,36307,36309,36311,36313,36315],{"class":146,"line":32808},[144,36308,32817],{"class":154},[144,36310,9508],{"class":150},[144,36312,32779],{"class":154},[144,36314,346],{"class":203},[144,36316,161],{"class":154},[144,36318,36319],{"class":146,"line":32814},[144,36320,32831],{"class":213},[144,36322,36323,36325,36327,36329,36331],{"class":146,"line":32828},[144,36324,3433],{"class":150},[144,36326,32839],{"class":154},[144,36328,26056],{"class":150},[144,36330,31619],{"class":203},[144,36332,32846],{"class":154},[144,36334,36335],{"class":146,"line":32834},[144,36336,32852],{"class":213},[144,36338,36339,36341,36343],{"class":146,"line":32849},[144,36340,32623],{"class":154},[144,36342,200],{"class":150},[144,36344,32628],{"class":154},[144,36346,36347],{"class":146,"line":32855},[144,36348,32867],{"class":213},[144,36350,36351,36353,36355],{"class":146,"line":32864},[144,36352,32638],{"class":154},[144,36354,200],{"class":150},[144,36356,32643],{"class":154},[144,36358,36359],{"class":146,"line":32870},[144,36360,32882],{"class":213},[144,36362,36363],{"class":146,"line":32879},[144,36364,32888],{"class":154},[144,36366,36367],{"class":146,"line":32885},[144,36368,36369],{"class":213},"            # 验证时不计算梯度以节省内存\u002F计算\n",[144,36371,36372,36374],{"class":146,"line":32891},[144,36373,32894],{"class":150},[144,36375,32897],{"class":154},[144,36377,36378],{"class":146,"line":32900},[144,36379,32903],{"class":213},[144,36381,36382,36385,36387],{"class":146,"line":32906},[144,36383,36384],{"class":154},"                output",[144,36386,200],{"class":150},[144,36388,32678],{"class":154},[144,36390,36391],{"class":146,"line":32917},[144,36392,32920],{"class":213},[144,36394,36395,36398,36400,36402,36404,36406,36408],{"class":146,"line":32923},[144,36396,36397],{"class":154},"                pre_lab",[144,36399,200],{"class":150},[144,36401,32695],{"class":154},[144,36403,32698],{"class":5247},[144,36405,200],{"class":150},[144,36407,372],{"class":203},[144,36409,161],{"class":154},[144,36411,36412],{"class":146,"line":32942},[144,36413,32945],{"class":213},[144,36415,36416,36419,36421],{"class":146,"line":32948},[144,36417,36418],{"class":154},"                val_batch_loss",[144,36420,200],{"class":150},[144,36422,32721],{"class":154},[144,36424,36425],{"class":146,"line":32959},[144,36426,32962],{"class":213},[144,36428,36429,36432,36434,36437,36439,36441,36443],{"class":146,"line":32965},[144,36430,36431],{"class":154},"                val_loss",[144,36433,9508],{"class":150},[144,36435,36436],{"class":154},"val_batch_loss.item()",[144,36438,610],{"class":150},[144,36440,32779],{"class":154},[144,36442,346],{"class":203},[144,36444,161],{"class":154},[144,36446,36447,36450,36452,36454,36456],{"class":146,"line":32985},[144,36448,36449],{"class":154},"                val_corrects",[144,36451,9508],{"class":150},[144,36453,32800],{"class":154},[144,36455,2979],{"class":150},[144,36457,32805],{"class":154},[144,36459,36460],{"class":146,"line":33001},[144,36461,36462],{"class":213},"            # 当前用于验证的样本数量\n",[144,36464,36465,36468,36470,36472,36474],{"class":146,"line":33007},[144,36466,36467],{"class":154},"            val_num",[144,36469,9508],{"class":150},[144,36471,32779],{"class":154},[144,36473,346],{"class":203},[144,36475,161],{"class":154},[144,36477,36478],{"class":146,"line":33021},[144,36479,33024],{"class":213},[144,36481,36482],{"class":146,"line":33027},[144,36483,33030],{"class":213},[144,36485,36486,36488,36490],{"class":146,"line":33033},[144,36487,33036],{"class":154},[144,36489,739],{"class":150},[144,36491,33041],{"class":154},[144,36493,36494],{"class":146,"line":33044},[144,36495,33047],{"class":213},[144,36497,36498],{"class":146,"line":33050},[144,36499,33053],{"class":213},[144,36501,36502,36504,36506],{"class":146,"line":33056},[144,36503,33059],{"class":154},[144,36505,739],{"class":150},[144,36507,33041],{"class":154},[144,36509,36510],{"class":146,"line":33066},[144,36511,33069],{"class":213},[144,36513,36514,36516,36518],{"class":146,"line":33072},[144,36515,33075],{"class":154},[144,36517,739],{"class":150},[144,36519,33080],{"class":154},[144,36521,36522],{"class":146,"line":33083},[144,36523,33086],{"class":213},[144,36525,36526,36528,36530],{"class":146,"line":33089},[144,36527,33092],{"class":154},[144,36529,739],{"class":150},[144,36531,33080],{"class":154},[144,36533,36534],{"class":146,"line":33099},[144,36535,2430],{"emptyLinePlaceholder":72},[144,36537,36538],{"class":146,"line":33104},[144,36539,33107],{"class":213},[144,36541,36542,36544,36546,36548,36550,36552,36554,36556,36558,36560,36562,36564,36566,36568,36570,36572,36574,36576,36578,36580],{"class":146,"line":33110},[144,36543,32464],{"class":203},[144,36545,155],{"class":154},[144,36547,3622],{"class":259},[144,36549,32472],{"class":203},[144,36551,33121],{"class":259},[144,36553,1051],{"class":203},[144,36555,33126],{"class":150},[144,36557,1101],{"class":203},[144,36559,33131],{"class":259},[144,36561,1051],{"class":203},[144,36563,33126],{"class":150},[144,36565,1101],{"class":203},[144,36567,3622],{"class":259},[144,36569,33142],{"class":154},[144,36571,687],{"class":150},[144,36573,372],{"class":203},[144,36575,33149],{"class":154},[144,36577,687],{"class":150},[144,36579,372],{"class":203},[144,36581,33156],{"class":154},[144,36583,36584,36586,36588,36590,36592,36594,36596,36598,36600,36602,36604,36606,36608,36610,36612,36614,36616,36618,36620,36622],{"class":146,"line":33159},[144,36585,32464],{"class":203},[144,36587,155],{"class":154},[144,36589,3622],{"class":259},[144,36591,32472],{"class":203},[144,36593,33170],{"class":259},[144,36595,1051],{"class":203},[144,36597,33126],{"class":150},[144,36599,1101],{"class":203},[144,36601,33179],{"class":259},[144,36603,1051],{"class":203},[144,36605,33126],{"class":150},[144,36607,1101],{"class":203},[144,36609,3622],{"class":259},[144,36611,33190],{"class":154},[144,36613,687],{"class":150},[144,36615,372],{"class":203},[144,36617,33197],{"class":154},[144,36619,687],{"class":150},[144,36621,372],{"class":203},[144,36623,33156],{"class":154},[144,36625,36626],{"class":146,"line":33206},[144,36627,2430],{"emptyLinePlaceholder":72},[144,36629,36630],{"class":146,"line":33211},[144,36631,33214],{"class":213},[144,36633,36634,36636,36638,36640,36642,36644,36646],{"class":146,"line":33217},[144,36635,2527],{"class":150},[144,36637,33222],{"class":154},[144,36639,687],{"class":150},[144,36641,372],{"class":203},[144,36643,1095],{"class":154},[144,36645,1115],{"class":150},[144,36647,33233],{"class":154},[144,36649,36650],{"class":146,"line":33236},[144,36651,33239],{"class":213},[144,36653,36654,36656,36658,36660,36662,36664,36666],{"class":146,"line":33242},[144,36655,33245],{"class":154},[144,36657,194],{"class":203},[144,36659,200],{"class":150},[144,36661,33252],{"class":154},[144,36663,687],{"class":150},[144,36665,372],{"class":203},[144,36667,33259],{"class":154},[144,36669,36670],{"class":146,"line":33262},[144,36671,33265],{"class":213},[144,36673,36674],{"class":146,"line":33268},[144,36675,33271],{"class":213},[144,36677,36678,36680,36682],{"class":146,"line":33274},[144,36679,33277],{"class":154},[144,36681,200],{"class":150},[144,36683,32327],{"class":154},[144,36685,36686],{"class":146,"line":33284},[144,36687,2430],{"emptyLinePlaceholder":72},[144,36689,36690],{"class":146,"line":33289},[144,36691,33292],{"class":213},[144,36693,36694,36696,36698,36700,36702],{"class":146,"line":33295},[144,36695,33298],{"class":154},[144,36697,200],{"class":150},[144,36699,33303],{"class":154},[144,36701,687],{"class":150},[144,36703,33308],{"class":154},[144,36705,36706,36708,36710,36712,36714,36716,36718,36720,36722,36724,36726,36728,36730,36732,36734,36736,36738,36740],{"class":146,"line":33311},[144,36707,32464],{"class":203},[144,36709,155],{"class":154},[144,36711,33318],{"class":259},[144,36713,1051],{"class":203},[144,36715,33323],{"class":150},[144,36717,1101],{"class":203},[144,36719,699],{"class":259},[144,36721,1051],{"class":203},[144,36723,33323],{"class":150},[144,36725,1101],{"class":203},[144,36727,33336],{"class":259},[144,36729,33339],{"class":154},[144,36731,33342],{"class":150},[144,36733,1062],{"class":203},[144,36735,33347],{"class":154},[144,36737,483],{"class":150},[144,36739,1062],{"class":203},[144,36741,30510],{"class":154},[144,36743,36744],{"class":146,"line":33356},[144,36745,36746],{"class":213},"    # 选择最优参数并保存\n",[144,36748,36749],{"class":146,"line":33362},[144,36750,36751],{"class":213},"    # 保存最佳模型权重字典\n",[144,36753,36754,36757,36759],{"class":146,"line":33368},[144,36755,36756],{"class":154},"    torch.save(best_model_wts,",[144,36758,33380],{"class":259},[144,36760,161],{"class":154},[144,36762,36763],{"class":146,"line":33374},[144,36764,33400],{"class":213},[144,36766,36767,36769,36771,36773,36775,36777],{"class":146,"line":33385},[144,36768,33406],{"class":154},[144,36770,200],{"class":150},[144,36772,33411],{"class":154},[144,36774,33414],{"class":5247},[144,36776,200],{"class":150},[144,36778,1576],{"class":154},[144,36780,36781,36783,36785,36787],{"class":146,"line":33391},[144,36782,33424],{"class":259},[144,36784,1014],{"class":154},[144,36786,33429],{"class":203},[144,36788,33432],{"class":154},[144,36790,36791,36793],{"class":146,"line":33397},[144,36792,33438],{"class":259},[144,36794,33441],{"class":154},[144,36796,36797,36799],{"class":146,"line":33403},[144,36798,33447],{"class":259},[144,36800,33450],{"class":154},[144,36802,36803,36805],{"class":146,"line":33421},[144,36804,33456],{"class":259},[144,36806,33459],{"class":154},[144,36808,36809,36811],{"class":146,"line":33435},[144,36810,33465],{"class":259},[144,36812,33468],{"class":154},[144,36814,36815],{"class":146,"line":33444},[144,36816,33474],{"class":154},[144,36818,36819],{"class":146,"line":33453},[144,36820,33480],{"class":213},[144,36822,36823,36825],{"class":146,"line":33462},[144,36824,4120],{"class":150},[144,36826,33488],{"class":154},[144,36828,36829],{"class":146,"line":33471},[144,36830,2430],{"emptyLinePlaceholder":72},[144,36832,36833],{"class":146,"line":33477},[144,36834,33499],{"class":213},[144,36836,36837,36839,36841],{"class":146,"line":33483},[144,36838,31960],{"class":150},[144,36840,33507],{"class":1993},[144,36842,33510],{"class":154},[144,36844,36845],{"class":146,"line":33491},[144,36846,33516],{"class":213},[144,36848,36849,36851,36853,36855,36857,36859,36861,36863],{"class":146,"line":33496},[144,36850,33522],{"class":154},[144,36852,31706],{"class":5247},[144,36854,200],{"class":150},[144,36856,155],{"class":154},[144,36858,653],{"class":203},[144,36860,533],{"class":154},[144,36862,448],{"class":203},[144,36864,30510],{"class":154},[144,36866,36867],{"class":146,"line":33502},[144,36868,33542],{"class":213},[144,36870,36871],{"class":146,"line":33513},[144,36872,33548],{"class":213},[144,36874,36875],{"class":146,"line":33519},[144,36876,33554],{"class":213},[144,36878,36879,36881,36883,36885,36887,36889,36891],{"class":146,"line":33539},[144,36880,31740],{"class":154},[144,36882,372],{"class":203},[144,36884,533],{"class":154},[144,36886,232],{"class":203},[144,36888,533],{"class":154},[144,36890,372],{"class":203},[144,36892,161],{"class":154},[144,36894,36895],{"class":146,"line":33545},[144,36896,33577],{"class":213},[144,36898,36899],{"class":146,"line":33551},[144,36900,33583],{"class":213},[144,36902,36903],{"class":146,"line":33557},[144,36904,33589],{"class":213},[144,36906,36907],{"class":146,"line":33574},[144,36908,33595],{"class":213},[144,36910,36911],{"class":146,"line":33580},[144,36912,33601],{"class":213},[144,36914,36915,36917,36919,36921,36923,36925,36927,36929,36931],{"class":146,"line":33586},[144,36916,33607],{"class":154},[144,36918,33610],{"class":259},[144,36920,33613],{"class":154},[144,36922,33616],{"class":259},[144,36924,533],{"class":154},[144,36926,33621],{"class":5247},[144,36928,200],{"class":150},[144,36930,33626],{"class":259},[144,36932,161],{"class":154},[144,36934,36935,36937,36939,36941,36943,36945,36947,36949,36951],{"class":146,"line":33592},[144,36936,33607],{"class":154},[144,36938,33610],{"class":259},[144,36940,33638],{"class":154},[144,36942,33641],{"class":259},[144,36944,533],{"class":154},[144,36946,33621],{"class":5247},[144,36948,200],{"class":150},[144,36950,33650],{"class":259},[144,36952,161],{"class":154},[144,36954,36955],{"class":146,"line":33598},[144,36956,33658],{"class":213},[144,36958,36959],{"class":146,"line":33604},[144,36960,33664],{"class":154},[144,36962,36963],{"class":146,"line":33631},[144,36964,33670],{"class":213},[144,36966,36967,36969,36971],{"class":146,"line":33655},[144,36968,33676],{"class":154},[144,36970,33679],{"class":259},[144,36972,161],{"class":154},[144,36974,36975,36977,36979],{"class":146,"line":33661},[144,36976,33687],{"class":154},[144,36978,33690],{"class":259},[144,36980,161],{"class":154},[144,36982,36983],{"class":146,"line":33667},[144,36984,33698],{"class":213},[144,36986,36987,36989,36991,36993,36995,36997,36999],{"class":146,"line":33673},[144,36988,31740],{"class":154},[144,36990,372],{"class":203},[144,36992,533],{"class":154},[144,36994,232],{"class":203},[144,36996,533],{"class":154},[144,36998,232],{"class":203},[144,37000,161],{"class":154},[144,37002,37003,37005,37007,37009,37011,37013,37015,37017,37019],{"class":146,"line":33684},[144,37004,33607],{"class":154},[144,37006,33610],{"class":259},[144,37008,33725],{"class":154},[144,37010,33616],{"class":259},[144,37012,533],{"class":154},[144,37014,33621],{"class":5247},[144,37016,200],{"class":150},[144,37018,33736],{"class":259},[144,37020,161],{"class":154},[144,37022,37023,37025,37027,37029,37031,37033,37035,37037,37039],{"class":146,"line":33695},[144,37024,33607],{"class":154},[144,37026,33610],{"class":259},[144,37028,33748],{"class":154},[144,37030,33641],{"class":259},[144,37032,533],{"class":154},[144,37034,33621],{"class":5247},[144,37036,200],{"class":150},[144,37038,33759],{"class":259},[144,37040,161],{"class":154},[144,37042,37043],{"class":146,"line":33701},[144,37044,33767],{"class":213},[144,37046,37047],{"class":146,"line":33718},[144,37048,33664],{"class":154},[144,37050,37051,37053,37055],{"class":146,"line":33741},[144,37052,33676],{"class":154},[144,37054,33610],{"class":259},[144,37056,161],{"class":154},[144,37058,37059,37061,37063],{"class":146,"line":33764},[144,37060,33687],{"class":154},[144,37062,33789],{"class":259},[144,37064,161],{"class":154},[144,37066,37067],{"class":146,"line":33770},[144,37068,33797],{"class":154},[144,37070,37071],{"class":146,"line":33775},[144,37072,2430],{"emptyLinePlaceholder":72},[144,37074,37075],{"class":146,"line":33784},[144,37076,33808],{"class":213},[144,37078,37079,37081,37083,37085,37087],{"class":146,"line":33794},[144,37080,1561],{"class":150},[144,37082,31233],{"class":203},[144,37084,2979],{"class":150},[144,37086,31238],{"class":259},[144,37088,3769],{"class":154},[144,37090,37091],{"class":146,"line":33800},[144,37092,33827],{"class":213},[144,37094,37095,37098,37100],{"class":146,"line":33805},[144,37096,37097],{"class":154},"    AlexNet",[144,37099,200],{"class":150},[144,37101,37102],{"class":154},"AlexNet()\n",[144,37104,37105,37107,37109],{"class":146,"line":33811},[144,37106,33844],{"class":154},[144,37108,200],{"class":150},[144,37110,33849],{"class":154},[144,37112,37113,37115,37117,37120,37122,37124,37126],{"class":146,"line":33824},[144,37114,33406],{"class":154},[144,37116,200],{"class":150},[144,37118,37119],{"class":154},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[144,37121,33862],{"class":5247},[144,37123,200],{"class":150},[144,37125,855],{"class":203},[144,37127,161],{"class":154},[144,37129,37130],{"class":146,"line":33830},[144,37131,33874],{"class":154},[98,37133,37134],{"start":1210},[101,37135,33887],{},[135,37137,37139],{"className":30391,"code":37138,"language":30393,"meta":30,"style":30},"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",[141,37140,37141,37147,37157,37167,37177,37181,37191,37201,37212,37216,37220,37224,37232,37248,37258,37274,37284,37298,37302,37312,37322,37332,37338,37342,37346,37354,37358,37374,37382,37386,37390,37398,37406,37410,37414,37418,37422,37428,37432,37442,37450,37458,37462,37466,37470,37478,37482,37498,37502,37506,37510,37522,37526,37538,37542,37546,37558,37562,37572,37576,37580,37592,37596,37604,37608,37612,37620,37624,37632,37636,37640,37644,37648,37652,37668,37676,37680,37684,37732,37738,37742,37752,37760,37768,37772,37776,37780,37784,37792,37796,37812,37816,37824,37832],{"__ignoreMap":30},[144,37142,37143,37145],{"class":146,"line":147},[144,37144,30405],{"class":150},[144,37146,30408],{"class":154},[144,37148,37149,37151,37153,37155],{"class":146,"line":66},[144,37150,30405],{"class":150},[144,37152,31428],{"class":154},[144,37154,31396],{"class":150},[144,37156,31433],{"class":154},[144,37158,37159,37161,37163,37165],{"class":146,"line":1210},[144,37160,30750],{"class":150},[144,37162,33915],{"class":154},[144,37164,30405],{"class":150},[144,37166,33920],{"class":154},[144,37168,37169,37171,37173,37175],{"class":146,"line":1225},[144,37170,30750],{"class":150},[144,37172,31411],{"class":154},[144,37174,30405],{"class":150},[144,37176,31416],{"class":154},[144,37178,37179],{"class":146,"line":1231},[144,37180,33935],{"class":213},[144,37182,37183,37185,37187,37189],{"class":146,"line":1245},[144,37184,30750],{"class":150},[144,37186,31381],{"class":154},[144,37188,30405],{"class":150},[144,37190,31386],{"class":154},[144,37192,37193,37195,37197,37199],{"class":146,"line":1251},[144,37194,30750],{"class":150},[144,37196,31927],{"class":154},[144,37198,30405],{"class":150},[144,37200,35570],{"class":154},[144,37202,37203,37205,37208,37210],{"class":146,"line":1342},[144,37204,30750],{"class":150},[144,37206,37207],{"class":154}," 练习.AlexNet.model ",[144,37209,30405],{"class":150},[144,37211,35570],{"class":154},[144,37213,37214],{"class":146,"line":1348},[144,37215,2430],{"emptyLinePlaceholder":72},[144,37217,37218],{"class":146,"line":1360},[144,37219,2430],{"emptyLinePlaceholder":72},[144,37221,37222],{"class":146,"line":1642},[144,37223,33964],{"class":213},[144,37225,37226,37228,37230],{"class":146,"line":1647},[144,37227,31960],{"class":150},[144,37229,33971],{"class":1993},[144,37231,31966],{"class":154},[144,37233,37234,37236,37238,37240,37242,37244,37246],{"class":146,"line":1653},[144,37235,33978],{"class":154},[144,37237,200],{"class":150},[144,37239,31468],{"class":154},[144,37241,31471],{"class":5247},[144,37243,200],{"class":150},[144,37245,31476],{"class":259},[144,37247,31479],{"class":154},[144,37249,37250,37252,37254,37256],{"class":146,"line":1658},[144,37251,33995],{"class":5247},[144,37253,200],{"class":150},[144,37255,34000],{"class":203},[144,37257,31479],{"class":154},[144,37259,37260,37262,37264,37266,37268,37270,37272],{"class":146,"line":1672},[144,37261,34007],{"class":5247},[144,37263,200],{"class":150},[144,37265,31506],{"class":154},[144,37267,31509],{"class":5247},[144,37269,200],{"class":150},[144,37271,35462],{"class":203},[144,37273,31517],{"class":154},[144,37275,37276,37278,37280,37282],{"class":146,"line":1677},[144,37277,34024],{"class":5247},[144,37279,200],{"class":150},[144,37281,31489],{"class":203},[144,37283,161],{"class":154},[144,37285,37286,37288,37290,37292,37294,37296],{"class":146,"line":1683},[144,37287,34035],{"class":154},[144,37289,200],{"class":150},[144,37291,31547],{"class":154},[144,37293,31550],{"class":5247},[144,37295,200],{"class":150},[144,37297,34046],{"class":154},[144,37299,37300],{"class":146,"line":1704},[144,37301,34051],{"class":213},[144,37303,37304,37306,37308,37310],{"class":146,"line":1709},[144,37305,34056],{"class":5247},[144,37307,200],{"class":150},[144,37309,372],{"class":203},[144,37311,31479],{"class":154},[144,37313,37314,37316,37318,37320],{"class":146,"line":1723},[144,37315,34067],{"class":5247},[144,37317,200],{"class":150},[144,37319,31489],{"class":203},[144,37321,31479],{"class":154},[144,37323,37324,37326,37328,37330],{"class":146,"line":1728},[144,37325,34078],{"class":5247},[144,37327,200],{"class":150},[144,37329,346],{"class":203},[144,37331,161],{"class":154},[144,37333,37334,37336],{"class":146,"line":1757},[144,37335,4120],{"class":150},[144,37337,34091],{"class":154},[144,37339,37340],{"class":146,"line":1762},[144,37341,2430],{"emptyLinePlaceholder":72},[144,37343,37344],{"class":146,"line":1779},[144,37345,34100],{"class":213},[144,37347,37348,37350,37352],{"class":146,"line":1784},[144,37349,31960],{"class":150},[144,37351,34107],{"class":1993},[144,37353,34110],{"class":154},[144,37355,37356],{"class":146,"line":1789},[144,37357,34115],{"class":213},[144,37359,37360,37362,37364,37366,37368,37370,37372],{"class":146,"line":1794},[144,37361,31250],{"class":154},[144,37363,200],{"class":150},[144,37365,31257],{"class":259},[144,37367,1734],{"class":150},[144,37369,31262],{"class":154},[144,37371,1731],{"class":150},[144,37373,34132],{"class":259},[144,37375,37376,37378,37380],{"class":146,"line":1808},[144,37377,31302],{"class":154},[144,37379,200],{"class":150},[144,37381,32302],{"class":154},[144,37383,37384],{"class":146,"line":1813},[144,37385,2430],{"emptyLinePlaceholder":72},[144,37387,37388],{"class":146,"line":2607},[144,37389,34149],{"class":213},[144,37391,37392,37394,37396],{"class":146,"line":2621},[144,37393,34154],{"class":154},[144,37395,200],{"class":150},[144,37397,32355],{"class":203},[144,37399,37400,37402,37404],{"class":146,"line":2629},[144,37401,34163],{"class":154},[144,37403,200],{"class":150},[144,37405,3115],{"class":203},[144,37407,37408],{"class":146,"line":2634},[144,37409,2430],{"emptyLinePlaceholder":72},[144,37411,37412],{"class":146,"line":2640},[144,37413,34176],{"class":213},[144,37415,37416],{"class":146,"line":2646},[144,37417,34181],{"class":213},[144,37419,37420],{"class":146,"line":2651},[144,37421,34186],{"class":213},[144,37423,37424,37426],{"class":146,"line":7979},[144,37425,34191],{"class":150},[144,37427,32897],{"class":154},[144,37429,37430],{"class":146,"line":8003},[144,37431,34198],{"class":213},[144,37433,37434,37436,37438,37440],{"class":146,"line":8008},[144,37435,3433],{"class":150},[144,37437,34205],{"class":154},[144,37439,26056],{"class":150},[144,37441,34210],{"class":154},[144,37443,37444,37446,37448],{"class":146,"line":8014},[144,37445,34215],{"class":154},[144,37447,200],{"class":150},[144,37449,34220],{"class":154},[144,37451,37452,37454,37456],{"class":146,"line":8041},[144,37453,34225],{"class":154},[144,37455,200],{"class":150},[144,37457,34230],{"class":154},[144,37459,37460],{"class":146,"line":8046},[144,37461,34235],{"class":213},[144,37463,37464],{"class":146,"line":8052},[144,37465,32888],{"class":154},[144,37467,37468],{"class":146,"line":8064},[144,37469,34244],{"class":213},[144,37471,37472,37474,37476],{"class":146,"line":8076},[144,37473,32673],{"class":154},[144,37475,200],{"class":150},[144,37477,34253],{"class":154},[144,37479,37480],{"class":146,"line":8088},[144,37481,34258],{"class":213},[144,37483,37484,37486,37488,37490,37492,37494,37496],{"class":146,"line":9747},[144,37485,32690],{"class":154},[144,37487,200],{"class":150},[144,37489,32695],{"class":154},[144,37491,32698],{"class":5247},[144,37493,200],{"class":150},[144,37495,372],{"class":203},[144,37497,161],{"class":154},[144,37499,37500],{"class":146,"line":9772},[144,37501,34279],{"class":213},[144,37503,37504],{"class":146,"line":9795},[144,37505,34284],{"class":213},[144,37507,37508],{"class":146,"line":9819},[144,37509,34289],{"class":213},[144,37511,37512,37514,37516,37518,37520],{"class":146,"line":9824},[144,37513,34294],{"class":154},[144,37515,9508],{"class":150},[144,37517,32800],{"class":154},[144,37519,2979],{"class":150},[144,37521,34303],{"class":154},[144,37523,37524],{"class":146,"line":9829},[144,37525,34308],{"class":213},[144,37527,37528,37530,37532,37534,37536],{"class":146,"line":9834},[144,37529,34313],{"class":154},[144,37531,9508],{"class":150},[144,37533,34318],{"class":154},[144,37535,346],{"class":203},[144,37537,161],{"class":154},[144,37539,37540],{"class":146,"line":9843},[144,37541,2430],{"emptyLinePlaceholder":72},[144,37543,37544],{"class":146,"line":9848},[144,37545,34331],{"class":213},[144,37547,37548,37550,37552,37554,37556],{"class":146,"line":9854},[144,37549,34336],{"class":154},[144,37551,200],{"class":150},[144,37553,34341],{"class":154},[144,37555,739],{"class":150},[144,37557,34346],{"class":154},[144,37559,37560],{"class":146,"line":9875},[144,37561,34351],{"class":213},[144,37563,37564,37566,37568,37570],{"class":146,"line":9881},[144,37565,32464],{"class":203},[144,37567,155],{"class":154},[144,37569,34360],{"class":259},[144,37571,34363],{"class":154},[144,37573,37574],{"class":146,"line":9895},[144,37575,2430],{"emptyLinePlaceholder":72},[144,37577,37578],{"class":146,"line":9901},[144,37579,34372],{"class":213},[144,37581,37582,37584,37586,37588,37590],{"class":146,"line":9928},[144,37583,1561],{"class":150},[144,37585,31233],{"class":203},[144,37587,2979],{"class":150},[144,37589,31238],{"class":259},[144,37591,3769],{"class":154},[144,37593,37594],{"class":146,"line":9937},[144,37595,34389],{"class":213},[144,37597,37598,37600,37602],{"class":146,"line":9943},[144,37599,31302],{"class":154},[144,37601,200],{"class":150},[144,37603,37102],{"class":154},[144,37605,37606],{"class":146,"line":9951},[144,37607,34402],{"class":213},[144,37609,37610],{"class":146,"line":9956},[144,37611,34407],{"class":213},[144,37613,37614,37616,37618],{"class":146,"line":16635},[144,37615,34412],{"class":154},[144,37617,34415],{"class":259},[144,37619,30510],{"class":154},[144,37621,37622],{"class":146,"line":16641},[144,37623,34422],{"class":213},[144,37625,37626,37628,37630],{"class":146,"line":16664},[144,37627,34035],{"class":154},[144,37629,200],{"class":150},[144,37631,34431],{"class":154},[144,37633,37634],{"class":146,"line":16670},[144,37635,34436],{"class":213},[144,37637,37638],{"class":146,"line":16693},[144,37639,34441],{"class":154},[144,37641,37642],{"class":146,"line":16707},[144,37643,2430],{"emptyLinePlaceholder":72},[144,37645,37646],{"class":146,"line":16727},[144,37647,34450],{"class":213},[144,37649,37650],{"class":146,"line":16733},[144,37651,34455],{"class":213},[144,37653,37654,37656,37658,37660,37662,37664,37666],{"class":146,"line":16744},[144,37655,31250],{"class":154},[144,37657,200],{"class":150},[144,37659,31257],{"class":259},[144,37661,1734],{"class":150},[144,37663,31262],{"class":154},[144,37665,1731],{"class":150},[144,37667,34132],{"class":259},[144,37669,37670,37672,37674],{"class":146,"line":16767},[144,37671,31302],{"class":154},[144,37673,200],{"class":150},[144,37675,32302],{"class":154},[144,37677,37678],{"class":146,"line":16789},[144,37679,34484],{"class":213},[144,37681,37682],{"class":146,"line":16794},[144,37683,34489],{"class":213},[144,37685,37686,37688,37690,37692,37694,37696,37698,37700,37702,37704,37706,37708,37710,37712,37714,37716,37718,37720,37722,37724,37726,37728,37730],{"class":146,"line":16800},[144,37687,34494],{"class":154},[144,37689,200],{"class":150},[144,37691,1045],{"class":154},[144,37693,34501],{"class":259},[144,37695,533],{"class":154},[144,37697,34506],{"class":259},[144,37699,533],{"class":154},[144,37701,34511],{"class":259},[144,37703,533],{"class":154},[144,37705,34516],{"class":259},[144,37707,533],{"class":154},[144,37709,34521],{"class":259},[144,37711,533],{"class":154},[144,37713,34526],{"class":259},[144,37715,533],{"class":154},[144,37717,34531],{"class":259},[144,37719,533],{"class":154},[144,37721,34536],{"class":259},[144,37723,533],{"class":154},[144,37725,34541],{"class":259},[144,37727,533],{"class":154},[144,37729,34546],{"class":259},[144,37731,33259],{"class":154},[144,37733,37734,37736],{"class":146,"line":16814},[144,37735,34191],{"class":150},[144,37737,32897],{"class":154},[144,37739,37740],{"class":146,"line":16827},[144,37741,34559],{"class":213},[144,37743,37744,37746,37748,37750],{"class":146,"line":16832},[144,37745,3433],{"class":150},[144,37747,34566],{"class":154},[144,37749,26056],{"class":150},[144,37751,34210],{"class":154},[144,37753,37754,37756,37758],{"class":146,"line":16846},[144,37755,32623],{"class":154},[144,37757,200],{"class":150},[144,37759,32628],{"class":154},[144,37761,37762,37764,37766],{"class":146,"line":16851},[144,37763,32638],{"class":154},[144,37765,200],{"class":150},[144,37767,32643],{"class":154},[144,37769,37770],{"class":146,"line":16857},[144,37771,2430],{"emptyLinePlaceholder":72},[144,37773,37774],{"class":146,"line":16862},[144,37775,34595],{"class":213},[144,37777,37778],{"class":146,"line":16876},[144,37779,32888],{"class":154},[144,37781,37782],{"class":146,"line":16881},[144,37783,34604],{"class":213},[144,37785,37786,37788,37790],{"class":146,"line":16886},[144,37787,32673],{"class":154},[144,37789,200],{"class":150},[144,37791,32678],{"class":154},[144,37793,37794],{"class":146,"line":16900},[144,37795,34617],{"class":213},[144,37797,37798,37800,37802,37804,37806,37808,37810],{"class":146,"line":16912},[144,37799,32690],{"class":154},[144,37801,200],{"class":150},[144,37803,32695],{"class":154},[144,37805,32698],{"class":5247},[144,37807,200],{"class":150},[144,37809,372],{"class":203},[144,37811,161],{"class":154},[144,37813,37814],{"class":146,"line":16917},[144,37815,34638],{"class":213},[144,37817,37818,37820,37822],{"class":146,"line":16930},[144,37819,34643],{"class":154},[144,37821,200],{"class":150},[144,37823,34648],{"class":154},[144,37825,37826,37828,37830],{"class":146,"line":16935},[144,37827,34653],{"class":154},[144,37829,200],{"class":150},[144,37831,34658],{"class":154},[144,37833,37834,37836,37838,37840,37842,37844,37846,37848],{"class":146,"line":16940},[144,37835,34663],{"class":203},[144,37837,155],{"class":154},[144,37839,34668],{"class":259},[144,37841,34671],{"class":154},[144,37843,34674],{"class":259},[144,37845,533],{"class":154},[144,37847,34679],{"class":259},[144,37849,34682],{"class":154},[115,37851,37853],{"id":37852},"_22vgg","2.2.VGG",[22029,37855,37857],{"id":37856},"_221原理","2.2.1.原理",[14,37859,37860],{},[28,37861],{"alt":30,"src":37862},"\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,37864,37865],{},[28,37866],{"alt":30,"src":37867},"\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,37869,37870],{},[28,37871],{"alt":30,"src":37872},"\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,37874,37875],{},"参数详细描述：",[14,37877,37878],{},[28,37879],{"alt":30,"src":37880},"\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,37882,37883],{},[28,37884],{"alt":30,"src":37885},"\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,37887,37888],{},[28,37889],{"alt":30,"src":37890},"\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,37892,37893],{},[28,37894],{"alt":30,"src":37895},"\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,37897,37898],{},[28,37899],{"alt":30,"src":37900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-022.png",[22029,37902,37904],{"id":37903},"_222代码实现","2.2.2.代码实现",[98,37906,37907],{},[101,37908,37909],{},"网络搭建",[135,37911,37913],{"className":30391,"code":37912,"language":30393,"meta":30,"style":30},"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",[141,37914,37915,37921,37933,37943,37953,37957,37974,37982,38001,38006,38011,38023,38061,38066,38102,38106,38135,38140,38145,38156,38192,38196,38232,38236,38264,38268,38273,38284,38320,38324,38360,38364,38400,38404,38432,38436,38441,38452,38489,38493,38529,38533,38569,38573,38601,38605,38610,38621,38657,38661,38697,38701,38737,38741,38769,38773,38778,38789,38794,38799,38804,38825,38829,38841,38845,38857,38861,38865,38870,38875,38890,38895,38905,38910,38925,38930,38949,38954,38963,38968,38978,38983,38988,39002,39007,39021,39029,39033,39037,39045,39056,39067,39078,39089,39100,39111,39117,39121,39126,39139,39159,39165,39174],{"__ignoreMap":30},[144,37916,37917,37919],{"class":146,"line":147},[144,37918,30405],{"class":150},[144,37920,30408],{"class":154},[144,37922,37923,37925,37928,37930],{"class":146,"line":66},[144,37924,30750],{"class":150},[144,37926,37927],{"class":154}," sympy.core.sympify ",[144,37929,30405],{"class":150},[144,37931,37932],{"class":154}," kernS\n",[144,37934,37935,37937,37939,37941],{"class":146,"line":1210},[144,37936,30750],{"class":150},[144,37938,30753],{"class":154},[144,37940,30405],{"class":150},[144,37942,30758],{"class":154},[144,37944,37945,37947,37949,37951],{"class":146,"line":1225},[144,37946,30750],{"class":150},[144,37948,30770],{"class":154},[144,37950,30405],{"class":150},[144,37952,30775],{"class":154},[144,37954,37955],{"class":146,"line":1231},[144,37956,2430],{"emptyLinePlaceholder":72},[144,37958,37959,37961,37964,37966,37968,37970,37972],{"class":146,"line":1245},[144,37960,14725],{"class":150},[144,37962,37963],{"class":1993}," VGG16",[144,37965,155],{"class":154},[144,37967,30791],{"class":1993},[144,37969,713],{"class":154},[144,37971,30796],{"class":1993},[144,37973,30799],{"class":154},[144,37975,37976,37978,37980],{"class":146,"line":1251},[144,37977,30814],{"class":150},[144,37979,30817],{"class":203},[144,37981,30820],{"class":154},[144,37983,37984,37986,37988,37991,37993,37995,37997,37999],{"class":146,"line":1342},[144,37985,30830],{"class":203},[144,37987,155],{"class":154},[144,37989,37990],{"class":203},"VGG16",[144,37992,12466],{"class":154},[144,37994,30836],{"class":203},[144,37996,30839],{"class":154},[144,37998,30842],{"class":203},[144,38000,2006],{"class":154},[144,38002,38003],{"class":146,"line":1348},[144,38004,38005],{"class":213},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[144,38007,38008],{"class":146,"line":1360},[144,38009,38010],{"class":213},"        # 这里用的是灰度图\n",[144,38012,38013,38015,38018,38020],{"class":146,"line":1642},[144,38014,30858],{"class":203},[144,38016,38017],{"class":154},".block1",[144,38019,200],{"class":150},[144,38021,38022],{"class":154},"nn.Sequential(\n",[144,38024,38025,38028,38030,38032,38034,38036,38038,38040,38042,38044,38046,38048,38050,38052,38054,38056,38058],{"class":146,"line":1647},[144,38026,38027],{"class":154},"            nn.Conv2d(",[144,38029,30869],{"class":5247},[144,38031,200],{"class":150},[144,38033,372],{"class":203},[144,38035,533],{"class":154},[144,38037,30878],{"class":5247},[144,38039,200],{"class":150},[144,38041,358],{"class":203},[144,38043,533],{"class":154},[144,38045,30887],{"class":5247},[144,38047,200],{"class":150},[144,38049,226],{"class":203},[144,38051,533],{"class":154},[144,38053,30896],{"class":5247},[144,38055,200],{"class":150},[144,38057,372],{"class":203},[144,38059,38060],{"class":154},"),\n",[144,38062,38063],{"class":146,"line":1653},[144,38064,38065],{"class":154},"            nn.ReLU(),\n",[144,38067,38068,38070,38072,38074,38076,38078,38080,38082,38084,38086,38088,38090,38092,38094,38096,38098,38100],{"class":146,"line":1658},[144,38069,38027],{"class":154},[144,38071,30869],{"class":5247},[144,38073,200],{"class":150},[144,38075,358],{"class":203},[144,38077,533],{"class":154},[144,38079,30878],{"class":5247},[144,38081,200],{"class":150},[144,38083,358],{"class":203},[144,38085,533],{"class":154},[144,38087,30887],{"class":5247},[144,38089,200],{"class":150},[144,38091,226],{"class":203},[144,38093,533],{"class":154},[144,38095,30896],{"class":5247},[144,38097,200],{"class":150},[144,38099,372],{"class":203},[144,38101,38060],{"class":154},[144,38103,38104],{"class":146,"line":1672},[144,38105,38065],{"class":154},[144,38107,38108,38111,38113,38115,38117,38119,38121,38123,38125,38127,38129,38131,38133],{"class":146,"line":1677},[144,38109,38110],{"class":154},"            nn.MaxPool2d(",[144,38112,30887],{"class":5247},[144,38114,200],{"class":150},[144,38116,232],{"class":203},[144,38118,533],{"class":154},[144,38120,30942],{"class":5247},[144,38122,200],{"class":150},[144,38124,232],{"class":203},[144,38126,533],{"class":154},[144,38128,30896],{"class":5247},[144,38130,200],{"class":150},[144,38132,346],{"class":203},[144,38134,161],{"class":154},[144,38136,38137],{"class":146,"line":1683},[144,38138,38139],{"class":154},"        )\n",[144,38141,38142],{"class":146,"line":1704},[144,38143,38144],{"class":213},"        # 第二层\n",[144,38146,38147,38149,38152,38154],{"class":146,"line":1709},[144,38148,30858],{"class":203},[144,38150,38151],{"class":154},".block2",[144,38153,200],{"class":150},[144,38155,38022],{"class":154},[144,38157,38158,38160,38162,38164,38166,38168,38170,38172,38174,38176,38178,38180,38182,38184,38186,38188,38190],{"class":146,"line":1723},[144,38159,38027],{"class":154},[144,38161,30869],{"class":5247},[144,38163,200],{"class":150},[144,38165,358],{"class":203},[144,38167,533],{"class":154},[144,38169,30878],{"class":5247},[144,38171,200],{"class":150},[144,38173,32083],{"class":203},[144,38175,533],{"class":154},[144,38177,30887],{"class":5247},[144,38179,200],{"class":150},[144,38181,226],{"class":203},[144,38183,533],{"class":154},[144,38185,30896],{"class":5247},[144,38187,200],{"class":150},[144,38189,372],{"class":203},[144,38191,38060],{"class":154},[144,38193,38194],{"class":146,"line":1728},[144,38195,38065],{"class":154},[144,38197,38198,38200,38202,38204,38206,38208,38210,38212,38214,38216,38218,38220,38222,38224,38226,38228,38230],{"class":146,"line":1757},[144,38199,38027],{"class":154},[144,38201,30869],{"class":5247},[144,38203,200],{"class":150},[144,38205,32083],{"class":203},[144,38207,533],{"class":154},[144,38209,30878],{"class":5247},[144,38211,200],{"class":150},[144,38213,32083],{"class":203},[144,38215,533],{"class":154},[144,38217,30887],{"class":5247},[144,38219,200],{"class":150},[144,38221,226],{"class":203},[144,38223,533],{"class":154},[144,38225,30896],{"class":5247},[144,38227,200],{"class":150},[144,38229,372],{"class":203},[144,38231,38060],{"class":154},[144,38233,38234],{"class":146,"line":1762},[144,38235,38065],{"class":154},[144,38237,38238,38240,38242,38244,38246,38248,38250,38252,38254,38256,38258,38260,38262],{"class":146,"line":1779},[144,38239,38110],{"class":154},[144,38241,30887],{"class":5247},[144,38243,200],{"class":150},[144,38245,232],{"class":203},[144,38247,533],{"class":154},[144,38249,30942],{"class":5247},[144,38251,200],{"class":150},[144,38253,232],{"class":203},[144,38255,533],{"class":154},[144,38257,30896],{"class":5247},[144,38259,200],{"class":150},[144,38261,346],{"class":203},[144,38263,161],{"class":154},[144,38265,38266],{"class":146,"line":1784},[144,38267,38139],{"class":154},[144,38269,38270],{"class":146,"line":1789},[144,38271,38272],{"class":213},"        # 第三层\n",[144,38274,38275,38277,38280,38282],{"class":146,"line":1794},[144,38276,30858],{"class":203},[144,38278,38279],{"class":154},".block3",[144,38281,200],{"class":150},[144,38283,38022],{"class":154},[144,38285,38286,38288,38290,38292,38294,38296,38298,38300,38302,38304,38306,38308,38310,38312,38314,38316,38318],{"class":146,"line":1808},[144,38287,38027],{"class":154},[144,38289,30869],{"class":5247},[144,38291,200],{"class":150},[144,38293,32083],{"class":203},[144,38295,533],{"class":154},[144,38297,30878],{"class":5247},[144,38299,200],{"class":150},[144,38301,34883],{"class":203},[144,38303,533],{"class":154},[144,38305,30887],{"class":5247},[144,38307,200],{"class":150},[144,38309,226],{"class":203},[144,38311,533],{"class":154},[144,38313,30896],{"class":5247},[144,38315,200],{"class":150},[144,38317,372],{"class":203},[144,38319,38060],{"class":154},[144,38321,38322],{"class":146,"line":1813},[144,38323,38065],{"class":154},[144,38325,38326,38328,38330,38332,38334,38336,38338,38340,38342,38344,38346,38348,38350,38352,38354,38356,38358],{"class":146,"line":2607},[144,38327,38027],{"class":154},[144,38329,30869],{"class":5247},[144,38331,200],{"class":150},[144,38333,34883],{"class":203},[144,38335,533],{"class":154},[144,38337,30878],{"class":5247},[144,38339,200],{"class":150},[144,38341,34883],{"class":203},[144,38343,533],{"class":154},[144,38345,30887],{"class":5247},[144,38347,200],{"class":150},[144,38349,226],{"class":203},[144,38351,533],{"class":154},[144,38353,30896],{"class":5247},[144,38355,200],{"class":150},[144,38357,372],{"class":203},[144,38359,38060],{"class":154},[144,38361,38362],{"class":146,"line":2621},[144,38363,38065],{"class":154},[144,38365,38366,38368,38370,38372,38374,38376,38378,38380,38382,38384,38386,38388,38390,38392,38394,38396,38398],{"class":146,"line":2629},[144,38367,38027],{"class":154},[144,38369,30869],{"class":5247},[144,38371,200],{"class":150},[144,38373,34883],{"class":203},[144,38375,533],{"class":154},[144,38377,30878],{"class":5247},[144,38379,200],{"class":150},[144,38381,34883],{"class":203},[144,38383,533],{"class":154},[144,38385,30887],{"class":5247},[144,38387,200],{"class":150},[144,38389,226],{"class":203},[144,38391,533],{"class":154},[144,38393,30896],{"class":5247},[144,38395,200],{"class":150},[144,38397,372],{"class":203},[144,38399,38060],{"class":154},[144,38401,38402],{"class":146,"line":2634},[144,38403,38065],{"class":154},[144,38405,38406,38408,38410,38412,38414,38416,38418,38420,38422,38424,38426,38428,38430],{"class":146,"line":2640},[144,38407,38110],{"class":154},[144,38409,30887],{"class":5247},[144,38411,200],{"class":150},[144,38413,232],{"class":203},[144,38415,533],{"class":154},[144,38417,30942],{"class":5247},[144,38419,200],{"class":150},[144,38421,232],{"class":203},[144,38423,533],{"class":154},[144,38425,30896],{"class":5247},[144,38427,200],{"class":150},[144,38429,346],{"class":203},[144,38431,161],{"class":154},[144,38433,38434],{"class":146,"line":2646},[144,38435,38139],{"class":154},[144,38437,38438],{"class":146,"line":2651},[144,38439,38440],{"class":213},"        # 第四层\n",[144,38442,38443,38445,38448,38450],{"class":146,"line":7979},[144,38444,30858],{"class":203},[144,38446,38447],{"class":154},".block4",[144,38449,200],{"class":150},[144,38451,38022],{"class":154},[144,38453,38454,38456,38458,38460,38462,38464,38466,38468,38471,38473,38475,38477,38479,38481,38483,38485,38487],{"class":146,"line":8003},[144,38455,38027],{"class":154},[144,38457,30869],{"class":5247},[144,38459,200],{"class":150},[144,38461,34883],{"class":203},[144,38463,533],{"class":154},[144,38465,30878],{"class":5247},[144,38467,200],{"class":150},[144,38469,38470],{"class":203},"512",[144,38472,533],{"class":154},[144,38474,30887],{"class":5247},[144,38476,200],{"class":150},[144,38478,226],{"class":203},[144,38480,533],{"class":154},[144,38482,30896],{"class":5247},[144,38484,200],{"class":150},[144,38486,372],{"class":203},[144,38488,38060],{"class":154},[144,38490,38491],{"class":146,"line":8008},[144,38492,38065],{"class":154},[144,38494,38495,38497,38499,38501,38503,38505,38507,38509,38511,38513,38515,38517,38519,38521,38523,38525,38527],{"class":146,"line":8014},[144,38496,38027],{"class":154},[144,38498,30869],{"class":5247},[144,38500,200],{"class":150},[144,38502,38470],{"class":203},[144,38504,533],{"class":154},[144,38506,30878],{"class":5247},[144,38508,200],{"class":150},[144,38510,38470],{"class":203},[144,38512,533],{"class":154},[144,38514,30887],{"class":5247},[144,38516,200],{"class":150},[144,38518,226],{"class":203},[144,38520,533],{"class":154},[144,38522,30896],{"class":5247},[144,38524,200],{"class":150},[144,38526,372],{"class":203},[144,38528,38060],{"class":154},[144,38530,38531],{"class":146,"line":8041},[144,38532,38065],{"class":154},[144,38534,38535,38537,38539,38541,38543,38545,38547,38549,38551,38553,38555,38557,38559,38561,38563,38565,38567],{"class":146,"line":8046},[144,38536,38027],{"class":154},[144,38538,30869],{"class":5247},[144,38540,200],{"class":150},[144,38542,38470],{"class":203},[144,38544,533],{"class":154},[144,38546,30878],{"class":5247},[144,38548,200],{"class":150},[144,38550,38470],{"class":203},[144,38552,533],{"class":154},[144,38554,30887],{"class":5247},[144,38556,200],{"class":150},[144,38558,226],{"class":203},[144,38560,533],{"class":154},[144,38562,30896],{"class":5247},[144,38564,200],{"class":150},[144,38566,372],{"class":203},[144,38568,38060],{"class":154},[144,38570,38571],{"class":146,"line":8052},[144,38572,38065],{"class":154},[144,38574,38575,38577,38579,38581,38583,38585,38587,38589,38591,38593,38595,38597,38599],{"class":146,"line":8064},[144,38576,38110],{"class":154},[144,38578,30887],{"class":5247},[144,38580,200],{"class":150},[144,38582,232],{"class":203},[144,38584,533],{"class":154},[144,38586,30942],{"class":5247},[144,38588,200],{"class":150},[144,38590,232],{"class":203},[144,38592,533],{"class":154},[144,38594,30896],{"class":5247},[144,38596,200],{"class":150},[144,38598,346],{"class":203},[144,38600,161],{"class":154},[144,38602,38603],{"class":146,"line":8076},[144,38604,38139],{"class":154},[144,38606,38607],{"class":146,"line":8088},[144,38608,38609],{"class":213},"        # 第五层\n",[144,38611,38612,38614,38617,38619],{"class":146,"line":9747},[144,38613,30858],{"class":203},[144,38615,38616],{"class":154},".block5",[144,38618,200],{"class":150},[144,38620,38022],{"class":154},[144,38622,38623,38625,38627,38629,38631,38633,38635,38637,38639,38641,38643,38645,38647,38649,38651,38653,38655],{"class":146,"line":9772},[144,38624,38027],{"class":154},[144,38626,30869],{"class":5247},[144,38628,200],{"class":150},[144,38630,38470],{"class":203},[144,38632,533],{"class":154},[144,38634,30878],{"class":5247},[144,38636,200],{"class":150},[144,38638,38470],{"class":203},[144,38640,533],{"class":154},[144,38642,30887],{"class":5247},[144,38644,200],{"class":150},[144,38646,226],{"class":203},[144,38648,533],{"class":154},[144,38650,30896],{"class":5247},[144,38652,200],{"class":150},[144,38654,372],{"class":203},[144,38656,38060],{"class":154},[144,38658,38659],{"class":146,"line":9795},[144,38660,38065],{"class":154},[144,38662,38663,38665,38667,38669,38671,38673,38675,38677,38679,38681,38683,38685,38687,38689,38691,38693,38695],{"class":146,"line":9819},[144,38664,38027],{"class":154},[144,38666,30869],{"class":5247},[144,38668,200],{"class":150},[144,38670,38470],{"class":203},[144,38672,533],{"class":154},[144,38674,30878],{"class":5247},[144,38676,200],{"class":150},[144,38678,38470],{"class":203},[144,38680,533],{"class":154},[144,38682,30887],{"class":5247},[144,38684,200],{"class":150},[144,38686,226],{"class":203},[144,38688,533],{"class":154},[144,38690,30896],{"class":5247},[144,38692,200],{"class":150},[144,38694,372],{"class":203},[144,38696,38060],{"class":154},[144,38698,38699],{"class":146,"line":9824},[144,38700,38065],{"class":154},[144,38702,38703,38705,38707,38709,38711,38713,38715,38717,38719,38721,38723,38725,38727,38729,38731,38733,38735],{"class":146,"line":9829},[144,38704,38027],{"class":154},[144,38706,30869],{"class":5247},[144,38708,200],{"class":150},[144,38710,38470],{"class":203},[144,38712,533],{"class":154},[144,38714,30878],{"class":5247},[144,38716,200],{"class":150},[144,38718,38470],{"class":203},[144,38720,533],{"class":154},[144,38722,30887],{"class":5247},[144,38724,200],{"class":150},[144,38726,226],{"class":203},[144,38728,533],{"class":154},[144,38730,30896],{"class":5247},[144,38732,200],{"class":150},[144,38734,372],{"class":203},[144,38736,38060],{"class":154},[144,38738,38739],{"class":146,"line":9834},[144,38740,38065],{"class":154},[144,38742,38743,38745,38747,38749,38751,38753,38755,38757,38759,38761,38763,38765,38767],{"class":146,"line":9843},[144,38744,38110],{"class":154},[144,38746,30887],{"class":5247},[144,38748,200],{"class":150},[144,38750,232],{"class":203},[144,38752,533],{"class":154},[144,38754,30942],{"class":5247},[144,38756,200],{"class":150},[144,38758,232],{"class":203},[144,38760,533],{"class":154},[144,38762,30896],{"class":5247},[144,38764,200],{"class":150},[144,38766,346],{"class":203},[144,38768,161],{"class":154},[144,38770,38771],{"class":146,"line":9848},[144,38772,38139],{"class":154},[144,38774,38775],{"class":146,"line":9854},[144,38776,38777],{"class":213},"        # 全连接层\n",[144,38779,38780,38782,38785,38787],{"class":146,"line":9875},[144,38781,30858],{"class":203},[144,38783,38784],{"class":154},".block6",[144,38786,200],{"class":150},[144,38788,38022],{"class":154},[144,38790,38791],{"class":146,"line":9881},[144,38792,38793],{"class":213},"            # 平展操作\n",[144,38795,38796],{"class":146,"line":9895},[144,38797,38798],{"class":213},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[144,38800,38801],{"class":146,"line":9901},[144,38802,38803],{"class":154},"            nn.Flatten(),\n",[144,38805,38806,38809,38811,38813,38815,38817,38819,38821,38823],{"class":146,"line":9928},[144,38807,38808],{"class":154},"            nn.Linear(",[144,38810,524],{"class":203},[144,38812,610],{"class":150},[144,38814,524],{"class":203},[144,38816,610],{"class":150},[144,38818,38470],{"class":203},[144,38820,533],{"class":154},[144,38822,34883],{"class":203},[144,38824,38060],{"class":154},[144,38826,38827],{"class":146,"line":9937},[144,38828,38065],{"class":154},[144,38830,38831,38833,38835,38837,38839],{"class":146,"line":9943},[144,38832,38808],{"class":154},[144,38834,34883],{"class":203},[144,38836,533],{"class":154},[144,38838,32083],{"class":203},[144,38840,38060],{"class":154},[144,38842,38843],{"class":146,"line":9951},[144,38844,38065],{"class":154},[144,38846,38847,38849,38851,38853,38855],{"class":146,"line":9956},[144,38848,38808],{"class":154},[144,38850,32083],{"class":203},[144,38852,533],{"class":154},[144,38854,601],{"class":203},[144,38856,161],{"class":154},[144,38858,38859],{"class":146,"line":16635},[144,38860,38139],{"class":154},[144,38862,38863],{"class":146,"line":16641},[144,38864,2430],{"emptyLinePlaceholder":72},[144,38866,38867],{"class":146,"line":16664},[144,38868,38869],{"class":213},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[144,38871,38872],{"class":146,"line":16670},[144,38873,38874],{"class":213},"        # 循环遍历模型\n",[144,38876,38877,38879,38882,38884,38887],{"class":146,"line":16693},[144,38878,3433],{"class":150},[144,38880,38881],{"class":154}," m ",[144,38883,26056],{"class":150},[144,38885,38886],{"class":203}," self",[144,38888,38889],{"class":154},".modules():\n",[144,38891,38892],{"class":146,"line":16707},[144,38893,38894],{"class":213},"            # print(m)\n",[144,38896,38897,38899,38902],{"class":146,"line":16727},[144,38898,4672],{"class":150},[144,38900,38901],{"class":203}," isinstance",[144,38903,38904],{"class":154},"(m,nn.Conv2d):\n",[144,38906,38907],{"class":146,"line":16733},[144,38908,38909],{"class":213},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[144,38911,38912,38915,38918,38920,38923],{"class":146,"line":16744},[144,38913,38914],{"class":154},"                nn.init.kaiming_normal_(m.weight,",[144,38916,38917],{"class":5247},"nonlinearity",[144,38919,200],{"class":150},[144,38921,38922],{"class":259},"'relu'",[144,38924,161],{"class":154},[144,38926,38927],{"class":146,"line":16767},[144,38928,38929],{"class":213},"                # 判断b参数是否存在\n",[144,38931,38932,38935,38938,38941,38944,38947],{"class":146,"line":16789},[144,38933,38934],{"class":150},"                if",[144,38936,38937],{"class":154}," m.bias ",[144,38939,38940],{"class":150},"is",[144,38942,38943],{"class":150}," not",[144,38945,38946],{"class":203}," None",[144,38948,3769],{"class":154},[144,38950,38951],{"class":146,"line":16794},[144,38952,38953],{"class":213},"                    # 如果参数不存在的化初始化b=0\n",[144,38955,38956,38959,38961],{"class":146,"line":16800},[144,38957,38958],{"class":154},"                    nn.init.constant_(m.bias,",[144,38960,346],{"class":203},[144,38962,161],{"class":154},[144,38964,38965],{"class":146,"line":16814},[144,38966,38967],{"class":213},"            # 全连接层初始化\n",[144,38969,38970,38973,38975],{"class":146,"line":16827},[144,38971,38972],{"class":150},"            elif",[144,38974,38901],{"class":203},[144,38976,38977],{"class":154},"(m,nn.Linear):\n",[144,38979,38980],{"class":146,"line":16832},[144,38981,38982],{"class":213},"                # 这个初始化方法是利用的是正太分布的方式\n",[144,38984,38985],{"class":146,"line":16846},[144,38986,38987],{"class":213},"                # 均值为0，方差为0.01\n",[144,38989,38990,38993,38995,38997,39000],{"class":146,"line":16851},[144,38991,38992],{"class":154},"                nn.init.normal_(m.weight,",[144,38994,346],{"class":203},[144,38996,533],{"class":154},[144,38998,38999],{"class":203},"0.01",[144,39001,161],{"class":154},[144,39003,39004],{"class":146,"line":16857},[144,39005,39006],{"class":213},"                # 初始化b参数\n",[144,39008,39009,39011,39013,39015,39017,39019],{"class":146,"line":16862},[144,39010,38934],{"class":150},[144,39012,38937],{"class":154},[144,39014,38940],{"class":150},[144,39016,38943],{"class":150},[144,39018,38946],{"class":203},[144,39020,3769],{"class":154},[144,39022,39023,39025,39027],{"class":146,"line":16876},[144,39024,38958],{"class":154},[144,39026,346],{"class":203},[144,39028,161],{"class":154},[144,39030,39031],{"class":146,"line":16881},[144,39032,2430],{"emptyLinePlaceholder":72},[144,39034,39035],{"class":146,"line":16886},[144,39036,35178],{"class":213},[144,39038,39039,39041,39043],{"class":146,"line":16900},[144,39040,30814],{"class":150},[144,39042,31106],{"class":1993},[144,39044,31109],{"class":154},[144,39046,39047,39049,39051,39053],{"class":146,"line":16912},[144,39048,31114],{"class":154},[144,39050,200],{"class":150},[144,39052,30836],{"class":203},[144,39054,39055],{"class":154},".block1(x)\n",[144,39057,39058,39060,39062,39064],{"class":146,"line":16917},[144,39059,31114],{"class":154},[144,39061,200],{"class":150},[144,39063,30836],{"class":203},[144,39065,39066],{"class":154},".block2(x)\n",[144,39068,39069,39071,39073,39075],{"class":146,"line":16930},[144,39070,31114],{"class":154},[144,39072,200],{"class":150},[144,39074,30836],{"class":203},[144,39076,39077],{"class":154},".block3(x)\n",[144,39079,39080,39082,39084,39086],{"class":146,"line":16935},[144,39081,31114],{"class":154},[144,39083,200],{"class":150},[144,39085,30836],{"class":203},[144,39087,39088],{"class":154},".block4(x)\n",[144,39090,39091,39093,39095,39097],{"class":146,"line":16940},[144,39092,31114],{"class":154},[144,39094,200],{"class":150},[144,39096,30836],{"class":203},[144,39098,39099],{"class":154},".block5(x)\n",[144,39101,39102,39104,39106,39108],{"class":146,"line":16945},[144,39103,31114],{"class":154},[144,39105,200],{"class":150},[144,39107,30836],{"class":203},[144,39109,39110],{"class":154},".block6(x)\n",[144,39112,39113,39115],{"class":146,"line":16958},[144,39114,14783],{"class":150},[144,39116,31222],{"class":154},[144,39118,39119],{"class":146,"line":16963},[144,39120,2430],{"emptyLinePlaceholder":72},[144,39122,39123],{"class":146,"line":32646},[144,39124,39125],{"class":213},"# 验证模型\n",[144,39127,39128,39130,39132,39134,39137],{"class":146,"line":32652},[144,39129,1561],{"class":150},[144,39131,31233],{"class":203},[144,39133,2979],{"class":150},[144,39135,39136],{"class":259},"'__main__'",[144,39138,3769],{"class":154},[144,39140,39141,39143,39145,39147,39149,39151,39153,39155,39157],{"class":146,"line":32658},[144,39142,31250],{"class":154},[144,39144,200],{"class":150},[144,39146,30464],{"class":154},[144,39148,31257],{"class":259},[144,39150,1734],{"class":150},[144,39152,31262],{"class":154},[144,39154,1731],{"class":150},[144,39156,30489],{"class":259},[144,39158,161],{"class":154},[144,39160,39161,39163],{"class":146,"line":32664},[144,39162,31312],{"class":203},[144,39164,30498],{"class":154},[144,39166,39167,39169,39171],{"class":146,"line":32670},[144,39168,31302],{"class":154},[144,39170,200],{"class":150},[144,39172,39173],{"class":154},"VGG16().to(device)\n",[144,39175,39176,39178,39180,39182,39184,39186,39188,39190],{"class":146,"line":32681},[144,39177,31312],{"class":203},[144,39179,31315],{"class":154},[144,39181,372],{"class":203},[144,39183,533],{"class":154},[144,39185,31514],{"class":203},[144,39187,533],{"class":154},[144,39189,31514],{"class":203},[144,39191,31328],{"class":154},[98,39193,39194],{"start":66},[101,39195,39196],{},"训练代码",[14,39198,39199],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39201,39202],{},"解决方式:",[14,39204,39205],{},"①权重初始化",[135,39207,39209],{"className":30391,"code":39208,"language":30393,"meta":30,"style":30},"# 权重初始化,保证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",[141,39210,39211,39216,39221,39233,39238,39246,39251,39264,39269,39283,39288,39297,39302,39311,39316,39321,39334,39339,39353],{"__ignoreMap":30},[144,39212,39213],{"class":146,"line":147},[144,39214,39215],{"class":213},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[144,39217,39218],{"class":146,"line":66},[144,39219,39220],{"class":213},"# 循环遍历模型\n",[144,39222,39223,39225,39227,39229,39231],{"class":146,"line":1210},[144,39224,3055],{"class":150},[144,39226,38881],{"class":154},[144,39228,26056],{"class":150},[144,39230,38886],{"class":203},[144,39232,38889],{"class":154},[144,39234,39235],{"class":146,"line":1225},[144,39236,39237],{"class":213},"    # print(m)\n",[144,39239,39240,39242,39244],{"class":146,"line":1231},[144,39241,3131],{"class":150},[144,39243,38901],{"class":203},[144,39245,38904],{"class":154},[144,39247,39248],{"class":146,"line":1245},[144,39249,39250],{"class":213},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[144,39252,39253,39256,39258,39260,39262],{"class":146,"line":1251},[144,39254,39255],{"class":154},"        nn.init.kaiming_normal_(m.weight,",[144,39257,38917],{"class":5247},[144,39259,200],{"class":150},[144,39261,38922],{"class":259},[144,39263,161],{"class":154},[144,39265,39266],{"class":146,"line":1342},[144,39267,39268],{"class":213},"        # 判断b参数是否存在\n",[144,39270,39271,39273,39275,39277,39279,39281],{"class":146,"line":1348},[144,39272,2527],{"class":150},[144,39274,38937],{"class":154},[144,39276,38940],{"class":150},[144,39278,38943],{"class":150},[144,39280,38946],{"class":203},[144,39282,3769],{"class":154},[144,39284,39285],{"class":146,"line":1360},[144,39286,39287],{"class":213},"            # 如果参数不存在的化初始化b=0\n",[144,39289,39290,39293,39295],{"class":146,"line":1642},[144,39291,39292],{"class":154},"            nn.init.constant_(m.bias,",[144,39294,346],{"class":203},[144,39296,161],{"class":154},[144,39298,39299],{"class":146,"line":1647},[144,39300,39301],{"class":213},"    # 全连接层初始化\n",[144,39303,39304,39307,39309],{"class":146,"line":1653},[144,39305,39306],{"class":150},"    elif",[144,39308,38901],{"class":203},[144,39310,38977],{"class":154},[144,39312,39313],{"class":146,"line":1658},[144,39314,39315],{"class":213},"        # 这个初始化方法是利用的是正太分布的方式\n",[144,39317,39318],{"class":146,"line":1672},[144,39319,39320],{"class":213},"        # 均值为0，方差为0.01\n",[144,39322,39323,39326,39328,39330,39332],{"class":146,"line":1677},[144,39324,39325],{"class":154},"        nn.init.normal_(m.weight,",[144,39327,346],{"class":203},[144,39329,533],{"class":154},[144,39331,38999],{"class":203},[144,39333,161],{"class":154},[144,39335,39336],{"class":146,"line":1683},[144,39337,39338],{"class":213},"        # 初始化b参数\n",[144,39340,39341,39343,39345,39347,39349,39351],{"class":146,"line":1704},[144,39342,2527],{"class":150},[144,39344,38937],{"class":154},[144,39346,38940],{"class":150},[144,39348,38943],{"class":150},[144,39350,38946],{"class":203},[144,39352,3769],{"class":154},[144,39354,39355,39357,39359],{"class":146,"line":1709},[144,39356,39292],{"class":154},[144,39358,346],{"class":203},[144,39360,161],{"class":154},[14,39362,39363],{},"②尽可能地增加批次",[14,39365,39366],{},"训练完整代码：",[135,39368,39369],{"className":30391,"code":37912,"language":30393,"meta":30,"style":30},[141,39370,39371,39377,39387,39397,39407,39411,39427,39435,39453,39457,39461,39471,39507,39511,39547,39551,39579,39583,39587,39597,39633,39637,39673,39677,39705,39709,39713,39723,39759,39763,39799,39803,39839,39843,39871,39875,39879,39889,39925,39929,39965,39969,40005,40009,40037,40041,40045,40055,40091,40095,40131,40135,40171,40175,40203,40207,40211,40221,40225,40229,40233,40253,40257,40269,40273,40285,40289,40293,40297,40301,40313,40317,40325,40329,40341,40345,40359,40363,40371,40375,40383,40387,40391,40403,40407,40421,40429,40433,40437,40445,40455,40465,40475,40485,40495,40505,40511,40515,40519,40531,40551,40557,40565],{"__ignoreMap":30},[144,39372,39373,39375],{"class":146,"line":147},[144,39374,30405],{"class":150},[144,39376,30408],{"class":154},[144,39378,39379,39381,39383,39385],{"class":146,"line":66},[144,39380,30750],{"class":150},[144,39382,37927],{"class":154},[144,39384,30405],{"class":150},[144,39386,37932],{"class":154},[144,39388,39389,39391,39393,39395],{"class":146,"line":1210},[144,39390,30750],{"class":150},[144,39392,30753],{"class":154},[144,39394,30405],{"class":150},[144,39396,30758],{"class":154},[144,39398,39399,39401,39403,39405],{"class":146,"line":1225},[144,39400,30750],{"class":150},[144,39402,30770],{"class":154},[144,39404,30405],{"class":150},[144,39406,30775],{"class":154},[144,39408,39409],{"class":146,"line":1231},[144,39410,2430],{"emptyLinePlaceholder":72},[144,39412,39413,39415,39417,39419,39421,39423,39425],{"class":146,"line":1245},[144,39414,14725],{"class":150},[144,39416,37963],{"class":1993},[144,39418,155],{"class":154},[144,39420,30791],{"class":1993},[144,39422,713],{"class":154},[144,39424,30796],{"class":1993},[144,39426,30799],{"class":154},[144,39428,39429,39431,39433],{"class":146,"line":1251},[144,39430,30814],{"class":150},[144,39432,30817],{"class":203},[144,39434,30820],{"class":154},[144,39436,39437,39439,39441,39443,39445,39447,39449,39451],{"class":146,"line":1342},[144,39438,30830],{"class":203},[144,39440,155],{"class":154},[144,39442,37990],{"class":203},[144,39444,12466],{"class":154},[144,39446,30836],{"class":203},[144,39448,30839],{"class":154},[144,39450,30842],{"class":203},[144,39452,2006],{"class":154},[144,39454,39455],{"class":146,"line":1348},[144,39456,38005],{"class":213},[144,39458,39459],{"class":146,"line":1360},[144,39460,38010],{"class":213},[144,39462,39463,39465,39467,39469],{"class":146,"line":1642},[144,39464,30858],{"class":203},[144,39466,38017],{"class":154},[144,39468,200],{"class":150},[144,39470,38022],{"class":154},[144,39472,39473,39475,39477,39479,39481,39483,39485,39487,39489,39491,39493,39495,39497,39499,39501,39503,39505],{"class":146,"line":1647},[144,39474,38027],{"class":154},[144,39476,30869],{"class":5247},[144,39478,200],{"class":150},[144,39480,372],{"class":203},[144,39482,533],{"class":154},[144,39484,30878],{"class":5247},[144,39486,200],{"class":150},[144,39488,358],{"class":203},[144,39490,533],{"class":154},[144,39492,30887],{"class":5247},[144,39494,200],{"class":150},[144,39496,226],{"class":203},[144,39498,533],{"class":154},[144,39500,30896],{"class":5247},[144,39502,200],{"class":150},[144,39504,372],{"class":203},[144,39506,38060],{"class":154},[144,39508,39509],{"class":146,"line":1653},[144,39510,38065],{"class":154},[144,39512,39513,39515,39517,39519,39521,39523,39525,39527,39529,39531,39533,39535,39537,39539,39541,39543,39545],{"class":146,"line":1658},[144,39514,38027],{"class":154},[144,39516,30869],{"class":5247},[144,39518,200],{"class":150},[144,39520,358],{"class":203},[144,39522,533],{"class":154},[144,39524,30878],{"class":5247},[144,39526,200],{"class":150},[144,39528,358],{"class":203},[144,39530,533],{"class":154},[144,39532,30887],{"class":5247},[144,39534,200],{"class":150},[144,39536,226],{"class":203},[144,39538,533],{"class":154},[144,39540,30896],{"class":5247},[144,39542,200],{"class":150},[144,39544,372],{"class":203},[144,39546,38060],{"class":154},[144,39548,39549],{"class":146,"line":1672},[144,39550,38065],{"class":154},[144,39552,39553,39555,39557,39559,39561,39563,39565,39567,39569,39571,39573,39575,39577],{"class":146,"line":1677},[144,39554,38110],{"class":154},[144,39556,30887],{"class":5247},[144,39558,200],{"class":150},[144,39560,232],{"class":203},[144,39562,533],{"class":154},[144,39564,30942],{"class":5247},[144,39566,200],{"class":150},[144,39568,232],{"class":203},[144,39570,533],{"class":154},[144,39572,30896],{"class":5247},[144,39574,200],{"class":150},[144,39576,346],{"class":203},[144,39578,161],{"class":154},[144,39580,39581],{"class":146,"line":1683},[144,39582,38139],{"class":154},[144,39584,39585],{"class":146,"line":1704},[144,39586,38144],{"class":213},[144,39588,39589,39591,39593,39595],{"class":146,"line":1709},[144,39590,30858],{"class":203},[144,39592,38151],{"class":154},[144,39594,200],{"class":150},[144,39596,38022],{"class":154},[144,39598,39599,39601,39603,39605,39607,39609,39611,39613,39615,39617,39619,39621,39623,39625,39627,39629,39631],{"class":146,"line":1723},[144,39600,38027],{"class":154},[144,39602,30869],{"class":5247},[144,39604,200],{"class":150},[144,39606,358],{"class":203},[144,39608,533],{"class":154},[144,39610,30878],{"class":5247},[144,39612,200],{"class":150},[144,39614,32083],{"class":203},[144,39616,533],{"class":154},[144,39618,30887],{"class":5247},[144,39620,200],{"class":150},[144,39622,226],{"class":203},[144,39624,533],{"class":154},[144,39626,30896],{"class":5247},[144,39628,200],{"class":150},[144,39630,372],{"class":203},[144,39632,38060],{"class":154},[144,39634,39635],{"class":146,"line":1728},[144,39636,38065],{"class":154},[144,39638,39639,39641,39643,39645,39647,39649,39651,39653,39655,39657,39659,39661,39663,39665,39667,39669,39671],{"class":146,"line":1757},[144,39640,38027],{"class":154},[144,39642,30869],{"class":5247},[144,39644,200],{"class":150},[144,39646,32083],{"class":203},[144,39648,533],{"class":154},[144,39650,30878],{"class":5247},[144,39652,200],{"class":150},[144,39654,32083],{"class":203},[144,39656,533],{"class":154},[144,39658,30887],{"class":5247},[144,39660,200],{"class":150},[144,39662,226],{"class":203},[144,39664,533],{"class":154},[144,39666,30896],{"class":5247},[144,39668,200],{"class":150},[144,39670,372],{"class":203},[144,39672,38060],{"class":154},[144,39674,39675],{"class":146,"line":1762},[144,39676,38065],{"class":154},[144,39678,39679,39681,39683,39685,39687,39689,39691,39693,39695,39697,39699,39701,39703],{"class":146,"line":1779},[144,39680,38110],{"class":154},[144,39682,30887],{"class":5247},[144,39684,200],{"class":150},[144,39686,232],{"class":203},[144,39688,533],{"class":154},[144,39690,30942],{"class":5247},[144,39692,200],{"class":150},[144,39694,232],{"class":203},[144,39696,533],{"class":154},[144,39698,30896],{"class":5247},[144,39700,200],{"class":150},[144,39702,346],{"class":203},[144,39704,161],{"class":154},[144,39706,39707],{"class":146,"line":1784},[144,39708,38139],{"class":154},[144,39710,39711],{"class":146,"line":1789},[144,39712,38272],{"class":213},[144,39714,39715,39717,39719,39721],{"class":146,"line":1794},[144,39716,30858],{"class":203},[144,39718,38279],{"class":154},[144,39720,200],{"class":150},[144,39722,38022],{"class":154},[144,39724,39725,39727,39729,39731,39733,39735,39737,39739,39741,39743,39745,39747,39749,39751,39753,39755,39757],{"class":146,"line":1808},[144,39726,38027],{"class":154},[144,39728,30869],{"class":5247},[144,39730,200],{"class":150},[144,39732,32083],{"class":203},[144,39734,533],{"class":154},[144,39736,30878],{"class":5247},[144,39738,200],{"class":150},[144,39740,34883],{"class":203},[144,39742,533],{"class":154},[144,39744,30887],{"class":5247},[144,39746,200],{"class":150},[144,39748,226],{"class":203},[144,39750,533],{"class":154},[144,39752,30896],{"class":5247},[144,39754,200],{"class":150},[144,39756,372],{"class":203},[144,39758,38060],{"class":154},[144,39760,39761],{"class":146,"line":1813},[144,39762,38065],{"class":154},[144,39764,39765,39767,39769,39771,39773,39775,39777,39779,39781,39783,39785,39787,39789,39791,39793,39795,39797],{"class":146,"line":2607},[144,39766,38027],{"class":154},[144,39768,30869],{"class":5247},[144,39770,200],{"class":150},[144,39772,34883],{"class":203},[144,39774,533],{"class":154},[144,39776,30878],{"class":5247},[144,39778,200],{"class":150},[144,39780,34883],{"class":203},[144,39782,533],{"class":154},[144,39784,30887],{"class":5247},[144,39786,200],{"class":150},[144,39788,226],{"class":203},[144,39790,533],{"class":154},[144,39792,30896],{"class":5247},[144,39794,200],{"class":150},[144,39796,372],{"class":203},[144,39798,38060],{"class":154},[144,39800,39801],{"class":146,"line":2621},[144,39802,38065],{"class":154},[144,39804,39805,39807,39809,39811,39813,39815,39817,39819,39821,39823,39825,39827,39829,39831,39833,39835,39837],{"class":146,"line":2629},[144,39806,38027],{"class":154},[144,39808,30869],{"class":5247},[144,39810,200],{"class":150},[144,39812,34883],{"class":203},[144,39814,533],{"class":154},[144,39816,30878],{"class":5247},[144,39818,200],{"class":150},[144,39820,34883],{"class":203},[144,39822,533],{"class":154},[144,39824,30887],{"class":5247},[144,39826,200],{"class":150},[144,39828,226],{"class":203},[144,39830,533],{"class":154},[144,39832,30896],{"class":5247},[144,39834,200],{"class":150},[144,39836,372],{"class":203},[144,39838,38060],{"class":154},[144,39840,39841],{"class":146,"line":2634},[144,39842,38065],{"class":154},[144,39844,39845,39847,39849,39851,39853,39855,39857,39859,39861,39863,39865,39867,39869],{"class":146,"line":2640},[144,39846,38110],{"class":154},[144,39848,30887],{"class":5247},[144,39850,200],{"class":150},[144,39852,232],{"class":203},[144,39854,533],{"class":154},[144,39856,30942],{"class":5247},[144,39858,200],{"class":150},[144,39860,232],{"class":203},[144,39862,533],{"class":154},[144,39864,30896],{"class":5247},[144,39866,200],{"class":150},[144,39868,346],{"class":203},[144,39870,161],{"class":154},[144,39872,39873],{"class":146,"line":2646},[144,39874,38139],{"class":154},[144,39876,39877],{"class":146,"line":2651},[144,39878,38440],{"class":213},[144,39880,39881,39883,39885,39887],{"class":146,"line":7979},[144,39882,30858],{"class":203},[144,39884,38447],{"class":154},[144,39886,200],{"class":150},[144,39888,38022],{"class":154},[144,39890,39891,39893,39895,39897,39899,39901,39903,39905,39907,39909,39911,39913,39915,39917,39919,39921,39923],{"class":146,"line":8003},[144,39892,38027],{"class":154},[144,39894,30869],{"class":5247},[144,39896,200],{"class":150},[144,39898,34883],{"class":203},[144,39900,533],{"class":154},[144,39902,30878],{"class":5247},[144,39904,200],{"class":150},[144,39906,38470],{"class":203},[144,39908,533],{"class":154},[144,39910,30887],{"class":5247},[144,39912,200],{"class":150},[144,39914,226],{"class":203},[144,39916,533],{"class":154},[144,39918,30896],{"class":5247},[144,39920,200],{"class":150},[144,39922,372],{"class":203},[144,39924,38060],{"class":154},[144,39926,39927],{"class":146,"line":8008},[144,39928,38065],{"class":154},[144,39930,39931,39933,39935,39937,39939,39941,39943,39945,39947,39949,39951,39953,39955,39957,39959,39961,39963],{"class":146,"line":8014},[144,39932,38027],{"class":154},[144,39934,30869],{"class":5247},[144,39936,200],{"class":150},[144,39938,38470],{"class":203},[144,39940,533],{"class":154},[144,39942,30878],{"class":5247},[144,39944,200],{"class":150},[144,39946,38470],{"class":203},[144,39948,533],{"class":154},[144,39950,30887],{"class":5247},[144,39952,200],{"class":150},[144,39954,226],{"class":203},[144,39956,533],{"class":154},[144,39958,30896],{"class":5247},[144,39960,200],{"class":150},[144,39962,372],{"class":203},[144,39964,38060],{"class":154},[144,39966,39967],{"class":146,"line":8041},[144,39968,38065],{"class":154},[144,39970,39971,39973,39975,39977,39979,39981,39983,39985,39987,39989,39991,39993,39995,39997,39999,40001,40003],{"class":146,"line":8046},[144,39972,38027],{"class":154},[144,39974,30869],{"class":5247},[144,39976,200],{"class":150},[144,39978,38470],{"class":203},[144,39980,533],{"class":154},[144,39982,30878],{"class":5247},[144,39984,200],{"class":150},[144,39986,38470],{"class":203},[144,39988,533],{"class":154},[144,39990,30887],{"class":5247},[144,39992,200],{"class":150},[144,39994,226],{"class":203},[144,39996,533],{"class":154},[144,39998,30896],{"class":5247},[144,40000,200],{"class":150},[144,40002,372],{"class":203},[144,40004,38060],{"class":154},[144,40006,40007],{"class":146,"line":8052},[144,40008,38065],{"class":154},[144,40010,40011,40013,40015,40017,40019,40021,40023,40025,40027,40029,40031,40033,40035],{"class":146,"line":8064},[144,40012,38110],{"class":154},[144,40014,30887],{"class":5247},[144,40016,200],{"class":150},[144,40018,232],{"class":203},[144,40020,533],{"class":154},[144,40022,30942],{"class":5247},[144,40024,200],{"class":150},[144,40026,232],{"class":203},[144,40028,533],{"class":154},[144,40030,30896],{"class":5247},[144,40032,200],{"class":150},[144,40034,346],{"class":203},[144,40036,161],{"class":154},[144,40038,40039],{"class":146,"line":8076},[144,40040,38139],{"class":154},[144,40042,40043],{"class":146,"line":8088},[144,40044,38609],{"class":213},[144,40046,40047,40049,40051,40053],{"class":146,"line":9747},[144,40048,30858],{"class":203},[144,40050,38616],{"class":154},[144,40052,200],{"class":150},[144,40054,38022],{"class":154},[144,40056,40057,40059,40061,40063,40065,40067,40069,40071,40073,40075,40077,40079,40081,40083,40085,40087,40089],{"class":146,"line":9772},[144,40058,38027],{"class":154},[144,40060,30869],{"class":5247},[144,40062,200],{"class":150},[144,40064,38470],{"class":203},[144,40066,533],{"class":154},[144,40068,30878],{"class":5247},[144,40070,200],{"class":150},[144,40072,38470],{"class":203},[144,40074,533],{"class":154},[144,40076,30887],{"class":5247},[144,40078,200],{"class":150},[144,40080,226],{"class":203},[144,40082,533],{"class":154},[144,40084,30896],{"class":5247},[144,40086,200],{"class":150},[144,40088,372],{"class":203},[144,40090,38060],{"class":154},[144,40092,40093],{"class":146,"line":9795},[144,40094,38065],{"class":154},[144,40096,40097,40099,40101,40103,40105,40107,40109,40111,40113,40115,40117,40119,40121,40123,40125,40127,40129],{"class":146,"line":9819},[144,40098,38027],{"class":154},[144,40100,30869],{"class":5247},[144,40102,200],{"class":150},[144,40104,38470],{"class":203},[144,40106,533],{"class":154},[144,40108,30878],{"class":5247},[144,40110,200],{"class":150},[144,40112,38470],{"class":203},[144,40114,533],{"class":154},[144,40116,30887],{"class":5247},[144,40118,200],{"class":150},[144,40120,226],{"class":203},[144,40122,533],{"class":154},[144,40124,30896],{"class":5247},[144,40126,200],{"class":150},[144,40128,372],{"class":203},[144,40130,38060],{"class":154},[144,40132,40133],{"class":146,"line":9824},[144,40134,38065],{"class":154},[144,40136,40137,40139,40141,40143,40145,40147,40149,40151,40153,40155,40157,40159,40161,40163,40165,40167,40169],{"class":146,"line":9829},[144,40138,38027],{"class":154},[144,40140,30869],{"class":5247},[144,40142,200],{"class":150},[144,40144,38470],{"class":203},[144,40146,533],{"class":154},[144,40148,30878],{"class":5247},[144,40150,200],{"class":150},[144,40152,38470],{"class":203},[144,40154,533],{"class":154},[144,40156,30887],{"class":5247},[144,40158,200],{"class":150},[144,40160,226],{"class":203},[144,40162,533],{"class":154},[144,40164,30896],{"class":5247},[144,40166,200],{"class":150},[144,40168,372],{"class":203},[144,40170,38060],{"class":154},[144,40172,40173],{"class":146,"line":9834},[144,40174,38065],{"class":154},[144,40176,40177,40179,40181,40183,40185,40187,40189,40191,40193,40195,40197,40199,40201],{"class":146,"line":9843},[144,40178,38110],{"class":154},[144,40180,30887],{"class":5247},[144,40182,200],{"class":150},[144,40184,232],{"class":203},[144,40186,533],{"class":154},[144,40188,30942],{"class":5247},[144,40190,200],{"class":150},[144,40192,232],{"class":203},[144,40194,533],{"class":154},[144,40196,30896],{"class":5247},[144,40198,200],{"class":150},[144,40200,346],{"class":203},[144,40202,161],{"class":154},[144,40204,40205],{"class":146,"line":9848},[144,40206,38139],{"class":154},[144,40208,40209],{"class":146,"line":9854},[144,40210,38777],{"class":213},[144,40212,40213,40215,40217,40219],{"class":146,"line":9875},[144,40214,30858],{"class":203},[144,40216,38784],{"class":154},[144,40218,200],{"class":150},[144,40220,38022],{"class":154},[144,40222,40223],{"class":146,"line":9881},[144,40224,38793],{"class":213},[144,40226,40227],{"class":146,"line":9895},[144,40228,38798],{"class":213},[144,40230,40231],{"class":146,"line":9901},[144,40232,38803],{"class":154},[144,40234,40235,40237,40239,40241,40243,40245,40247,40249,40251],{"class":146,"line":9928},[144,40236,38808],{"class":154},[144,40238,524],{"class":203},[144,40240,610],{"class":150},[144,40242,524],{"class":203},[144,40244,610],{"class":150},[144,40246,38470],{"class":203},[144,40248,533],{"class":154},[144,40250,34883],{"class":203},[144,40252,38060],{"class":154},[144,40254,40255],{"class":146,"line":9937},[144,40256,38065],{"class":154},[144,40258,40259,40261,40263,40265,40267],{"class":146,"line":9943},[144,40260,38808],{"class":154},[144,40262,34883],{"class":203},[144,40264,533],{"class":154},[144,40266,32083],{"class":203},[144,40268,38060],{"class":154},[144,40270,40271],{"class":146,"line":9951},[144,40272,38065],{"class":154},[144,40274,40275,40277,40279,40281,40283],{"class":146,"line":9956},[144,40276,38808],{"class":154},[144,40278,32083],{"class":203},[144,40280,533],{"class":154},[144,40282,601],{"class":203},[144,40284,161],{"class":154},[144,40286,40287],{"class":146,"line":16635},[144,40288,38139],{"class":154},[144,40290,40291],{"class":146,"line":16641},[144,40292,2430],{"emptyLinePlaceholder":72},[144,40294,40295],{"class":146,"line":16664},[144,40296,38869],{"class":213},[144,40298,40299],{"class":146,"line":16670},[144,40300,38874],{"class":213},[144,40302,40303,40305,40307,40309,40311],{"class":146,"line":16693},[144,40304,3433],{"class":150},[144,40306,38881],{"class":154},[144,40308,26056],{"class":150},[144,40310,38886],{"class":203},[144,40312,38889],{"class":154},[144,40314,40315],{"class":146,"line":16707},[144,40316,38894],{"class":213},[144,40318,40319,40321,40323],{"class":146,"line":16727},[144,40320,4672],{"class":150},[144,40322,38901],{"class":203},[144,40324,38904],{"class":154},[144,40326,40327],{"class":146,"line":16733},[144,40328,38909],{"class":213},[144,40330,40331,40333,40335,40337,40339],{"class":146,"line":16744},[144,40332,38914],{"class":154},[144,40334,38917],{"class":5247},[144,40336,200],{"class":150},[144,40338,38922],{"class":259},[144,40340,161],{"class":154},[144,40342,40343],{"class":146,"line":16767},[144,40344,38929],{"class":213},[144,40346,40347,40349,40351,40353,40355,40357],{"class":146,"line":16789},[144,40348,38934],{"class":150},[144,40350,38937],{"class":154},[144,40352,38940],{"class":150},[144,40354,38943],{"class":150},[144,40356,38946],{"class":203},[144,40358,3769],{"class":154},[144,40360,40361],{"class":146,"line":16794},[144,40362,38953],{"class":213},[144,40364,40365,40367,40369],{"class":146,"line":16800},[144,40366,38958],{"class":154},[144,40368,346],{"class":203},[144,40370,161],{"class":154},[144,40372,40373],{"class":146,"line":16814},[144,40374,38967],{"class":213},[144,40376,40377,40379,40381],{"class":146,"line":16827},[144,40378,38972],{"class":150},[144,40380,38901],{"class":203},[144,40382,38977],{"class":154},[144,40384,40385],{"class":146,"line":16832},[144,40386,38982],{"class":213},[144,40388,40389],{"class":146,"line":16846},[144,40390,38987],{"class":213},[144,40392,40393,40395,40397,40399,40401],{"class":146,"line":16851},[144,40394,38992],{"class":154},[144,40396,346],{"class":203},[144,40398,533],{"class":154},[144,40400,38999],{"class":203},[144,40402,161],{"class":154},[144,40404,40405],{"class":146,"line":16857},[144,40406,39006],{"class":213},[144,40408,40409,40411,40413,40415,40417,40419],{"class":146,"line":16862},[144,40410,38934],{"class":150},[144,40412,38937],{"class":154},[144,40414,38940],{"class":150},[144,40416,38943],{"class":150},[144,40418,38946],{"class":203},[144,40420,3769],{"class":154},[144,40422,40423,40425,40427],{"class":146,"line":16876},[144,40424,38958],{"class":154},[144,40426,346],{"class":203},[144,40428,161],{"class":154},[144,40430,40431],{"class":146,"line":16881},[144,40432,2430],{"emptyLinePlaceholder":72},[144,40434,40435],{"class":146,"line":16886},[144,40436,35178],{"class":213},[144,40438,40439,40441,40443],{"class":146,"line":16900},[144,40440,30814],{"class":150},[144,40442,31106],{"class":1993},[144,40444,31109],{"class":154},[144,40446,40447,40449,40451,40453],{"class":146,"line":16912},[144,40448,31114],{"class":154},[144,40450,200],{"class":150},[144,40452,30836],{"class":203},[144,40454,39055],{"class":154},[144,40456,40457,40459,40461,40463],{"class":146,"line":16917},[144,40458,31114],{"class":154},[144,40460,200],{"class":150},[144,40462,30836],{"class":203},[144,40464,39066],{"class":154},[144,40466,40467,40469,40471,40473],{"class":146,"line":16930},[144,40468,31114],{"class":154},[144,40470,200],{"class":150},[144,40472,30836],{"class":203},[144,40474,39077],{"class":154},[144,40476,40477,40479,40481,40483],{"class":146,"line":16935},[144,40478,31114],{"class":154},[144,40480,200],{"class":150},[144,40482,30836],{"class":203},[144,40484,39088],{"class":154},[144,40486,40487,40489,40491,40493],{"class":146,"line":16940},[144,40488,31114],{"class":154},[144,40490,200],{"class":150},[144,40492,30836],{"class":203},[144,40494,39099],{"class":154},[144,40496,40497,40499,40501,40503],{"class":146,"line":16945},[144,40498,31114],{"class":154},[144,40500,200],{"class":150},[144,40502,30836],{"class":203},[144,40504,39110],{"class":154},[144,40506,40507,40509],{"class":146,"line":16958},[144,40508,14783],{"class":150},[144,40510,31222],{"class":154},[144,40512,40513],{"class":146,"line":16963},[144,40514,2430],{"emptyLinePlaceholder":72},[144,40516,40517],{"class":146,"line":32646},[144,40518,39125],{"class":213},[144,40520,40521,40523,40525,40527,40529],{"class":146,"line":32652},[144,40522,1561],{"class":150},[144,40524,31233],{"class":203},[144,40526,2979],{"class":150},[144,40528,39136],{"class":259},[144,40530,3769],{"class":154},[144,40532,40533,40535,40537,40539,40541,40543,40545,40547,40549],{"class":146,"line":32658},[144,40534,31250],{"class":154},[144,40536,200],{"class":150},[144,40538,30464],{"class":154},[144,40540,31257],{"class":259},[144,40542,1734],{"class":150},[144,40544,31262],{"class":154},[144,40546,1731],{"class":150},[144,40548,30489],{"class":259},[144,40550,161],{"class":154},[144,40552,40553,40555],{"class":146,"line":32664},[144,40554,31312],{"class":203},[144,40556,30498],{"class":154},[144,40558,40559,40561,40563],{"class":146,"line":32670},[144,40560,31302],{"class":154},[144,40562,200],{"class":150},[144,40564,39173],{"class":154},[144,40566,40567,40569,40571,40573,40575,40577,40579,40581],{"class":146,"line":32681},[144,40568,31312],{"class":203},[144,40570,31315],{"class":154},[144,40572,372],{"class":203},[144,40574,533],{"class":154},[144,40576,31514],{"class":203},[144,40578,533],{"class":154},[144,40580,31514],{"class":203},[144,40582,31328],{"class":154},[98,40584,40585],{"start":1210},[101,40586,40587],{},"测试代码",[135,40589,40591],{"className":30391,"code":40590,"language":30393,"meta":30,"style":30},"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",[141,40592,40593,40599,40609,40619,40623,40633,40644,40648,40652,40656,40664,40680,40690,40706,40716,40730,40734,40744,40754,40764,40770,40774,40778,40786,40790,40806,40814,40818,40822,40830,40838,40842,40846,40850,40854,40860,40864,40874,40882,40890,40894,40898,40902,40910,40914,40930,40934,40938,40942,40954,40958,40970,40974,40978,40990,40994,41004,41008,41012,41024,41028,41037,41041,41045,41053,41057,41065,41069,41073,41077,41081,41085,41101,41109,41113,41117,41165,41171,41175,41185,41193,41201,41205,41209,41213,41217,41225,41229,41245,41249,41257,41265],{"__ignoreMap":30},[144,40594,40595,40597],{"class":146,"line":147},[144,40596,30405],{"class":150},[144,40598,30408],{"class":154},[144,40600,40601,40603,40605,40607],{"class":146,"line":66},[144,40602,30405],{"class":150},[144,40604,31428],{"class":154},[144,40606,31396],{"class":150},[144,40608,31433],{"class":154},[144,40610,40611,40613,40615,40617],{"class":146,"line":1210},[144,40612,30750],{"class":150},[144,40614,31411],{"class":154},[144,40616,30405],{"class":150},[144,40618,31416],{"class":154},[144,40620,40621],{"class":146,"line":1225},[144,40622,33935],{"class":213},[144,40624,40625,40627,40629,40631],{"class":146,"line":1231},[144,40626,30750],{"class":150},[144,40628,31381],{"class":154},[144,40630,30405],{"class":150},[144,40632,31386],{"class":154},[144,40634,40635,40637,40639,40641],{"class":146,"line":1245},[144,40636,30750],{"class":150},[144,40638,31927],{"class":154},[144,40640,30405],{"class":150},[144,40642,40643],{"class":203}," VGG16\n",[144,40645,40646],{"class":146,"line":1251},[144,40647,2430],{"emptyLinePlaceholder":72},[144,40649,40650],{"class":146,"line":1342},[144,40651,2430],{"emptyLinePlaceholder":72},[144,40653,40654],{"class":146,"line":1348},[144,40655,33964],{"class":213},[144,40657,40658,40660,40662],{"class":146,"line":1360},[144,40659,31960],{"class":150},[144,40661,33971],{"class":1993},[144,40663,31966],{"class":154},[144,40665,40666,40668,40670,40672,40674,40676,40678],{"class":146,"line":1642},[144,40667,33978],{"class":154},[144,40669,200],{"class":150},[144,40671,31468],{"class":154},[144,40673,31471],{"class":5247},[144,40675,200],{"class":150},[144,40677,31476],{"class":259},[144,40679,31479],{"class":154},[144,40681,40682,40684,40686,40688],{"class":146,"line":1647},[144,40683,33995],{"class":5247},[144,40685,200],{"class":150},[144,40687,34000],{"class":203},[144,40689,31479],{"class":154},[144,40691,40692,40694,40696,40698,40700,40702,40704],{"class":146,"line":1653},[144,40693,34007],{"class":5247},[144,40695,200],{"class":150},[144,40697,31506],{"class":154},[144,40699,31509],{"class":5247},[144,40701,200],{"class":150},[144,40703,31514],{"class":203},[144,40705,31517],{"class":154},[144,40707,40708,40710,40712,40714],{"class":146,"line":1658},[144,40709,34024],{"class":5247},[144,40711,200],{"class":150},[144,40713,31489],{"class":203},[144,40715,161],{"class":154},[144,40717,40718,40720,40722,40724,40726,40728],{"class":146,"line":1672},[144,40719,34035],{"class":154},[144,40721,200],{"class":150},[144,40723,31547],{"class":154},[144,40725,31550],{"class":5247},[144,40727,200],{"class":150},[144,40729,34046],{"class":154},[144,40731,40732],{"class":146,"line":1677},[144,40733,34051],{"class":213},[144,40735,40736,40738,40740,40742],{"class":146,"line":1683},[144,40737,34056],{"class":5247},[144,40739,200],{"class":150},[144,40741,372],{"class":203},[144,40743,31479],{"class":154},[144,40745,40746,40748,40750,40752],{"class":146,"line":1704},[144,40747,34067],{"class":5247},[144,40749,200],{"class":150},[144,40751,31489],{"class":203},[144,40753,31479],{"class":154},[144,40755,40756,40758,40760,40762],{"class":146,"line":1709},[144,40757,34078],{"class":5247},[144,40759,200],{"class":150},[144,40761,346],{"class":203},[144,40763,161],{"class":154},[144,40765,40766,40768],{"class":146,"line":1723},[144,40767,4120],{"class":150},[144,40769,34091],{"class":154},[144,40771,40772],{"class":146,"line":1728},[144,40773,2430],{"emptyLinePlaceholder":72},[144,40775,40776],{"class":146,"line":1757},[144,40777,34100],{"class":213},[144,40779,40780,40782,40784],{"class":146,"line":1762},[144,40781,31960],{"class":150},[144,40783,34107],{"class":1993},[144,40785,34110],{"class":154},[144,40787,40788],{"class":146,"line":1779},[144,40789,34115],{"class":213},[144,40791,40792,40794,40796,40798,40800,40802,40804],{"class":146,"line":1784},[144,40793,31250],{"class":154},[144,40795,200],{"class":150},[144,40797,31257],{"class":259},[144,40799,1734],{"class":150},[144,40801,31262],{"class":154},[144,40803,1731],{"class":150},[144,40805,34132],{"class":259},[144,40807,40808,40810,40812],{"class":146,"line":1789},[144,40809,31302],{"class":154},[144,40811,200],{"class":150},[144,40813,32302],{"class":154},[144,40815,40816],{"class":146,"line":1794},[144,40817,2430],{"emptyLinePlaceholder":72},[144,40819,40820],{"class":146,"line":1808},[144,40821,34149],{"class":213},[144,40823,40824,40826,40828],{"class":146,"line":1813},[144,40825,34154],{"class":154},[144,40827,200],{"class":150},[144,40829,32355],{"class":203},[144,40831,40832,40834,40836],{"class":146,"line":2607},[144,40833,34163],{"class":154},[144,40835,200],{"class":150},[144,40837,3115],{"class":203},[144,40839,40840],{"class":146,"line":2621},[144,40841,2430],{"emptyLinePlaceholder":72},[144,40843,40844],{"class":146,"line":2629},[144,40845,34176],{"class":213},[144,40847,40848],{"class":146,"line":2634},[144,40849,34181],{"class":213},[144,40851,40852],{"class":146,"line":2640},[144,40853,34186],{"class":213},[144,40855,40856,40858],{"class":146,"line":2646},[144,40857,34191],{"class":150},[144,40859,32897],{"class":154},[144,40861,40862],{"class":146,"line":2651},[144,40863,34198],{"class":213},[144,40865,40866,40868,40870,40872],{"class":146,"line":7979},[144,40867,3433],{"class":150},[144,40869,34205],{"class":154},[144,40871,26056],{"class":150},[144,40873,34210],{"class":154},[144,40875,40876,40878,40880],{"class":146,"line":8003},[144,40877,34215],{"class":154},[144,40879,200],{"class":150},[144,40881,34220],{"class":154},[144,40883,40884,40886,40888],{"class":146,"line":8008},[144,40885,34225],{"class":154},[144,40887,200],{"class":150},[144,40889,34230],{"class":154},[144,40891,40892],{"class":146,"line":8014},[144,40893,34235],{"class":213},[144,40895,40896],{"class":146,"line":8041},[144,40897,32888],{"class":154},[144,40899,40900],{"class":146,"line":8046},[144,40901,34244],{"class":213},[144,40903,40904,40906,40908],{"class":146,"line":8052},[144,40905,32673],{"class":154},[144,40907,200],{"class":150},[144,40909,34253],{"class":154},[144,40911,40912],{"class":146,"line":8064},[144,40913,34258],{"class":213},[144,40915,40916,40918,40920,40922,40924,40926,40928],{"class":146,"line":8076},[144,40917,32690],{"class":154},[144,40919,200],{"class":150},[144,40921,32695],{"class":154},[144,40923,32698],{"class":5247},[144,40925,200],{"class":150},[144,40927,372],{"class":203},[144,40929,161],{"class":154},[144,40931,40932],{"class":146,"line":8088},[144,40933,34279],{"class":213},[144,40935,40936],{"class":146,"line":9747},[144,40937,34284],{"class":213},[144,40939,40940],{"class":146,"line":9772},[144,40941,34289],{"class":213},[144,40943,40944,40946,40948,40950,40952],{"class":146,"line":9795},[144,40945,34294],{"class":154},[144,40947,9508],{"class":150},[144,40949,32800],{"class":154},[144,40951,2979],{"class":150},[144,40953,34303],{"class":154},[144,40955,40956],{"class":146,"line":9819},[144,40957,34308],{"class":213},[144,40959,40960,40962,40964,40966,40968],{"class":146,"line":9824},[144,40961,34313],{"class":154},[144,40963,9508],{"class":150},[144,40965,34318],{"class":154},[144,40967,346],{"class":203},[144,40969,161],{"class":154},[144,40971,40972],{"class":146,"line":9829},[144,40973,2430],{"emptyLinePlaceholder":72},[144,40975,40976],{"class":146,"line":9834},[144,40977,34331],{"class":213},[144,40979,40980,40982,40984,40986,40988],{"class":146,"line":9843},[144,40981,34336],{"class":154},[144,40983,200],{"class":150},[144,40985,34341],{"class":154},[144,40987,739],{"class":150},[144,40989,34346],{"class":154},[144,40991,40992],{"class":146,"line":9848},[144,40993,34351],{"class":213},[144,40995,40996,40998,41000,41002],{"class":146,"line":9854},[144,40997,32464],{"class":203},[144,40999,155],{"class":154},[144,41001,34360],{"class":259},[144,41003,34363],{"class":154},[144,41005,41006],{"class":146,"line":9875},[144,41007,2430],{"emptyLinePlaceholder":72},[144,41009,41010],{"class":146,"line":9881},[144,41011,34372],{"class":213},[144,41013,41014,41016,41018,41020,41022],{"class":146,"line":9895},[144,41015,1561],{"class":150},[144,41017,31233],{"class":203},[144,41019,2979],{"class":150},[144,41021,31238],{"class":259},[144,41023,3769],{"class":154},[144,41025,41026],{"class":146,"line":9901},[144,41027,34389],{"class":213},[144,41029,41030,41032,41034],{"class":146,"line":9928},[144,41031,31302],{"class":154},[144,41033,200],{"class":150},[144,41035,41036],{"class":154},"VGG16()\n",[144,41038,41039],{"class":146,"line":9937},[144,41040,34402],{"class":213},[144,41042,41043],{"class":146,"line":9943},[144,41044,34407],{"class":213},[144,41046,41047,41049,41051],{"class":146,"line":9951},[144,41048,34412],{"class":154},[144,41050,34415],{"class":259},[144,41052,30510],{"class":154},[144,41054,41055],{"class":146,"line":9956},[144,41056,34422],{"class":213},[144,41058,41059,41061,41063],{"class":146,"line":16635},[144,41060,34035],{"class":154},[144,41062,200],{"class":150},[144,41064,34431],{"class":154},[144,41066,41067],{"class":146,"line":16641},[144,41068,34436],{"class":213},[144,41070,41071],{"class":146,"line":16664},[144,41072,34441],{"class":154},[144,41074,41075],{"class":146,"line":16670},[144,41076,2430],{"emptyLinePlaceholder":72},[144,41078,41079],{"class":146,"line":16693},[144,41080,34450],{"class":213},[144,41082,41083],{"class":146,"line":16707},[144,41084,34455],{"class":213},[144,41086,41087,41089,41091,41093,41095,41097,41099],{"class":146,"line":16727},[144,41088,31250],{"class":154},[144,41090,200],{"class":150},[144,41092,31257],{"class":259},[144,41094,1734],{"class":150},[144,41096,31262],{"class":154},[144,41098,1731],{"class":150},[144,41100,34132],{"class":259},[144,41102,41103,41105,41107],{"class":146,"line":16733},[144,41104,31302],{"class":154},[144,41106,200],{"class":150},[144,41108,32302],{"class":154},[144,41110,41111],{"class":146,"line":16744},[144,41112,34484],{"class":213},[144,41114,41115],{"class":146,"line":16767},[144,41116,34489],{"class":213},[144,41118,41119,41121,41123,41125,41127,41129,41131,41133,41135,41137,41139,41141,41143,41145,41147,41149,41151,41153,41155,41157,41159,41161,41163],{"class":146,"line":16789},[144,41120,34494],{"class":154},[144,41122,200],{"class":150},[144,41124,1045],{"class":154},[144,41126,34501],{"class":259},[144,41128,533],{"class":154},[144,41130,34506],{"class":259},[144,41132,533],{"class":154},[144,41134,34511],{"class":259},[144,41136,533],{"class":154},[144,41138,34516],{"class":259},[144,41140,533],{"class":154},[144,41142,34521],{"class":259},[144,41144,533],{"class":154},[144,41146,34526],{"class":259},[144,41148,533],{"class":154},[144,41150,34531],{"class":259},[144,41152,533],{"class":154},[144,41154,34536],{"class":259},[144,41156,533],{"class":154},[144,41158,34541],{"class":259},[144,41160,533],{"class":154},[144,41162,34546],{"class":259},[144,41164,33259],{"class":154},[144,41166,41167,41169],{"class":146,"line":16794},[144,41168,34191],{"class":150},[144,41170,32897],{"class":154},[144,41172,41173],{"class":146,"line":16800},[144,41174,34559],{"class":213},[144,41176,41177,41179,41181,41183],{"class":146,"line":16814},[144,41178,3433],{"class":150},[144,41180,34566],{"class":154},[144,41182,26056],{"class":150},[144,41184,34210],{"class":154},[144,41186,41187,41189,41191],{"class":146,"line":16827},[144,41188,32623],{"class":154},[144,41190,200],{"class":150},[144,41192,32628],{"class":154},[144,41194,41195,41197,41199],{"class":146,"line":16832},[144,41196,32638],{"class":154},[144,41198,200],{"class":150},[144,41200,32643],{"class":154},[144,41202,41203],{"class":146,"line":16846},[144,41204,2430],{"emptyLinePlaceholder":72},[144,41206,41207],{"class":146,"line":16851},[144,41208,34595],{"class":213},[144,41210,41211],{"class":146,"line":16857},[144,41212,32888],{"class":154},[144,41214,41215],{"class":146,"line":16862},[144,41216,34604],{"class":213},[144,41218,41219,41221,41223],{"class":146,"line":16876},[144,41220,32673],{"class":154},[144,41222,200],{"class":150},[144,41224,32678],{"class":154},[144,41226,41227],{"class":146,"line":16881},[144,41228,34617],{"class":213},[144,41230,41231,41233,41235,41237,41239,41241,41243],{"class":146,"line":16886},[144,41232,32690],{"class":154},[144,41234,200],{"class":150},[144,41236,32695],{"class":154},[144,41238,32698],{"class":5247},[144,41240,200],{"class":150},[144,41242,372],{"class":203},[144,41244,161],{"class":154},[144,41246,41247],{"class":146,"line":16900},[144,41248,34638],{"class":213},[144,41250,41251,41253,41255],{"class":146,"line":16912},[144,41252,34643],{"class":154},[144,41254,200],{"class":150},[144,41256,34648],{"class":154},[144,41258,41259,41261,41263],{"class":146,"line":16917},[144,41260,34653],{"class":154},[144,41262,200],{"class":150},[144,41264,34658],{"class":154},[144,41266,41267,41269,41271,41273,41275,41277,41279,41281],{"class":146,"line":16930},[144,41268,34663],{"class":203},[144,41270,155],{"class":154},[144,41272,34668],{"class":259},[144,41274,34671],{"class":154},[144,41276,34674],{"class":259},[144,41278,533],{"class":154},[144,41280,34679],{"class":259},[144,41282,34682],{"class":154},[115,41284,41286],{"id":41285},"_23googlenet","2.3.GoogLeNet",[22029,41288,41290],{"id":41289},"_231原理","2.3.1.原理",[98,41292,41293],{},[101,41294,41295],{},"网络结构",[14,41297,41298],{},[28,41299],{"alt":30,"src":41300},"\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,41302,41303],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,41305,41306],{},[28,41307],{"alt":30,"src":41308},"\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,41310,41311],{},[28,41312],{"alt":30,"src":41313},"\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,41315,41316],{},[28,41317],{"alt":30,"src":41318},"\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",[98,41320,41321],{"start":66},[101,41322,41323],{},"1x1卷积的优点",[14,41325,41326],{},[28,41327],{"alt":30,"src":41328},"\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",[98,41330,41331],{"start":1210},[101,41332,41333],{},"全局平均池化层优点",[14,41335,41336],{},[28,41337],{"alt":30,"src":41338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[14,41340,41341],{},[28,41342],{"alt":30,"src":41343},"\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",[98,41345,41346],{"start":1225},[101,41347,41348],{},"参数详细描述",[14,41350,41351],{},[28,41352],{"alt":30,"src":41353},"\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,41355,41356],{},[28,41357],{"alt":30,"src":41358},"\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,41360,41361],{},[28,41362],{"alt":30,"src":41363},"\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,41365,41366],{},[28,41367],{"alt":30,"src":41368},"\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,41370,41371],{},[28,41372],{"alt":30,"src":41373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[14,41375,41376],{},[28,41377],{"alt":30,"src":41378},"\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,41380,41381],{},[28,41382],{"alt":30,"src":41383},"\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,41385,41386],{},[28,41387],{"alt":30,"src":41388},"\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,41390,41391],{},[28,41392],{"alt":30,"src":41393},"\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,41395,41396],{},[28,41397],{"alt":30,"src":41398},"\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,41400,41401],{},[28,41402],{"alt":30,"src":41403},"\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,41405,41406],{},[28,41407],{"alt":30,"src":41408},"\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,41410,41411],{},[28,41412],{"alt":30,"src":41413},"\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,41415,41416],{},[28,41417],{"alt":30,"src":41418},"\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,41420,41421],{},[28,41422],{"alt":30,"src":41423},"\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,41425,41426],{},[28,41427],{"alt":30,"src":41428},"\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,41430,41431],{},[28,41432],{"alt":30,"src":41433},"\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,41435,41436],{},[28,41437],{"alt":30,"src":41438},"\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,41440,41441],{},[28,41442],{"alt":30,"src":41443},"\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,41445,41446],{},[28,41447],{"alt":30,"src":41448},"\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,41450,41451],{},[28,41452],{"alt":30,"src":41453},"\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",[22029,41455,41457],{"id":41456},"_232代码实现","2.3.2.代码实现",[98,41459,41460],{},[101,41461,30724],{},[14,41463,41464],{},"根据原理一步一步搭建即可",[135,41466,41468],{"className":30391,"code":41467,"language":30393,"meta":30,"style":30},"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",[141,41469,41470,41476,41486,41496,41500,41517,41526,41541,41551,41556,41589,41594,41631,41678,41683,41719,41766,41771,41776,41811,41843,41847,41855,41871,41895,41920,41941,41946,41961,41965,41969,41974,41991,41996,42005,42020,42031,42075,42079,42107,42111,42122,42150,42154,42191,42195,42223,42227,42238,42274,42306,42334,42338,42349,42383,42415,42447,42480,42514,42542,42546,42557,42590,42622,42636,42640,42653,42657,42662,42674,42682,42704,42709,42714,42719,42724,42729,42734,42748,42756,42765,42778,42793,42802,42806,42814,42825,42836,42847,42858,42869,42875,42879,42884,42896,42916,42925],{"__ignoreMap":30},[144,41471,41472,41474],{"class":146,"line":147},[144,41473,30405],{"class":150},[144,41475,30408],{"class":154},[144,41477,41478,41480,41482,41484],{"class":146,"line":66},[144,41479,30750],{"class":150},[144,41481,30753],{"class":154},[144,41483,30405],{"class":150},[144,41485,30758],{"class":154},[144,41487,41488,41490,41492,41494],{"class":146,"line":1210},[144,41489,30750],{"class":150},[144,41491,30770],{"class":154},[144,41493,30405],{"class":150},[144,41495,30775],{"class":154},[144,41497,41498],{"class":146,"line":1225},[144,41499,2430],{"emptyLinePlaceholder":72},[144,41501,41502,41504,41507,41509,41511,41513,41515],{"class":146,"line":1231},[144,41503,14725],{"class":150},[144,41505,41506],{"class":1993}," Inception",[144,41508,155],{"class":154},[144,41510,30791],{"class":1993},[144,41512,713],{"class":154},[144,41514,30796],{"class":1993},[144,41516,30799],{"class":154},[144,41518,41519,41521,41523],{"class":146,"line":1245},[144,41520,30814],{"class":150},[144,41522,30817],{"class":203},[144,41524,41525],{"class":154},"(self,in_channels,c1,c2,c3,c4):\n",[144,41527,41528,41530,41533,41535,41537,41539],{"class":146,"line":1251},[144,41529,30830],{"class":203},[144,41531,41532],{"class":154},"(Inception,",[144,41534,30836],{"class":203},[144,41536,30839],{"class":154},[144,41538,30842],{"class":203},[144,41540,2006],{"class":154},[144,41542,41543,41545,41547,41549],{"class":146,"line":1342},[144,41544,30858],{"class":203},[144,41546,34784],{"class":154},[144,41548,200],{"class":150},[144,41550,34789],{"class":154},[144,41552,41553],{"class":146,"line":1348},[144,41554,41555],{"class":213},"        # 路线1：定义1*1卷积\n",[144,41557,41558,41560,41563,41565,41567,41569,41571,41574,41576,41578,41581,41583,41585,41587],{"class":146,"line":1360},[144,41559,30858],{"class":203},[144,41561,41562],{"class":154},".p1_1",[144,41564,200],{"class":150},[144,41566,30866],{"class":154},[144,41568,30869],{"class":5247},[144,41570,200],{"class":150},[144,41572,41573],{"class":154},"in_channels,",[144,41575,30878],{"class":5247},[144,41577,200],{"class":150},[144,41579,41580],{"class":154},"c1,",[144,41582,30887],{"class":5247},[144,41584,200],{"class":150},[144,41586,372],{"class":203},[144,41588,161],{"class":154},[144,41590,41591],{"class":146,"line":1642},[144,41592,41593],{"class":213},"        # 路线2：定义1*1卷积和3*3\n",[144,41595,41596,41598,41601,41603,41605,41607,41609,41611,41613,41615,41618,41620,41623,41625,41627,41629],{"class":146,"line":1647},[144,41597,30858],{"class":203},[144,41599,41600],{"class":154},".p2_1",[144,41602,200],{"class":150},[144,41604,30866],{"class":154},[144,41606,30869],{"class":5247},[144,41608,200],{"class":150},[144,41610,41573],{"class":154},[144,41612,30878],{"class":5247},[144,41614,200],{"class":150},[144,41616,41617],{"class":154},"c2[",[144,41619,346],{"class":203},[144,41621,41622],{"class":154},"],",[144,41624,30887],{"class":5247},[144,41626,200],{"class":150},[144,41628,372],{"class":203},[144,41630,161],{"class":154},[144,41632,41633,41635,41638,41640,41642,41644,41646,41648,41650,41652,41654,41656,41658,41660,41662,41664,41666,41668,41670,41672,41674,41676],{"class":146,"line":1653},[144,41634,30858],{"class":203},[144,41636,41637],{"class":154},".p2_2",[144,41639,200],{"class":150},[144,41641,30866],{"class":154},[144,41643,30869],{"class":5247},[144,41645,200],{"class":150},[144,41647,41617],{"class":154},[144,41649,346],{"class":203},[144,41651,41622],{"class":154},[144,41653,30878],{"class":5247},[144,41655,200],{"class":150},[144,41657,41617],{"class":154},[144,41659,372],{"class":203},[144,41661,41622],{"class":154},[144,41663,30887],{"class":5247},[144,41665,200],{"class":150},[144,41667,226],{"class":203},[144,41669,533],{"class":154},[144,41671,30896],{"class":5247},[144,41673,200],{"class":150},[144,41675,372],{"class":203},[144,41677,161],{"class":154},[144,41679,41680],{"class":146,"line":1658},[144,41681,41682],{"class":213},"        # 路线3：定义1*1卷积和5*5\n",[144,41684,41685,41687,41690,41692,41694,41696,41698,41700,41702,41704,41707,41709,41711,41713,41715,41717],{"class":146,"line":1672},[144,41686,30858],{"class":203},[144,41688,41689],{"class":154},".p3_1",[144,41691,200],{"class":150},[144,41693,30866],{"class":154},[144,41695,30869],{"class":5247},[144,41697,200],{"class":150},[144,41699,41573],{"class":154},[144,41701,30878],{"class":5247},[144,41703,200],{"class":150},[144,41705,41706],{"class":154},"c3[",[144,41708,346],{"class":203},[144,41710,41622],{"class":154},[144,41712,30887],{"class":5247},[144,41714,200],{"class":150},[144,41716,372],{"class":203},[144,41718,161],{"class":154},[144,41720,41721,41723,41726,41728,41730,41732,41734,41736,41738,41740,41742,41744,41746,41748,41750,41752,41754,41756,41758,41760,41762,41764],{"class":146,"line":1677},[144,41722,30858],{"class":203},[144,41724,41725],{"class":154},".p3_2",[144,41727,200],{"class":150},[144,41729,30866],{"class":154},[144,41731,30869],{"class":5247},[144,41733,200],{"class":150},[144,41735,41706],{"class":154},[144,41737,346],{"class":203},[144,41739,41622],{"class":154},[144,41741,30878],{"class":5247},[144,41743,200],{"class":150},[144,41745,41706],{"class":154},[144,41747,372],{"class":203},[144,41749,41622],{"class":154},[144,41751,30887],{"class":5247},[144,41753,200],{"class":150},[144,41755,474],{"class":203},[144,41757,533],{"class":154},[144,41759,30896],{"class":5247},[144,41761,200],{"class":150},[144,41763,232],{"class":203},[144,41765,161],{"class":154},[144,41767,41768],{"class":146,"line":1683},[144,41769,41770],{"class":213},"        # 路线4：定义3*3最大池化和1*1卷积\n",[144,41772,41773],{"class":146,"line":1704},[144,41774,41775],{"class":213},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[144,41777,41778,41780,41783,41785,41787,41789,41791,41793,41795,41797,41799,41801,41803,41805,41807,41809],{"class":146,"line":1709},[144,41779,30858],{"class":203},[144,41781,41782],{"class":154},".p4_1",[144,41784,200],{"class":150},[144,41786,34842],{"class":154},[144,41788,30887],{"class":5247},[144,41790,200],{"class":150},[144,41792,226],{"class":203},[144,41794,533],{"class":154},[144,41796,30942],{"class":5247},[144,41798,200],{"class":150},[144,41800,372],{"class":203},[144,41802,533],{"class":154},[144,41804,30896],{"class":5247},[144,41806,200],{"class":150},[144,41808,372],{"class":203},[144,41810,161],{"class":154},[144,41812,41813,41815,41818,41820,41822,41824,41826,41828,41830,41832,41835,41837,41839,41841],{"class":146,"line":1723},[144,41814,30858],{"class":203},[144,41816,41817],{"class":154},".p4_2",[144,41819,200],{"class":150},[144,41821,30866],{"class":154},[144,41823,30869],{"class":5247},[144,41825,200],{"class":150},[144,41827,41573],{"class":154},[144,41829,30878],{"class":5247},[144,41831,200],{"class":150},[144,41833,41834],{"class":154},"c4,",[144,41836,30887],{"class":5247},[144,41838,200],{"class":150},[144,41840,372],{"class":203},[144,41842,161],{"class":154},[144,41844,41845],{"class":146,"line":1728},[144,41846,2430],{"emptyLinePlaceholder":72},[144,41848,41849,41851,41853],{"class":146,"line":1757},[144,41850,30814],{"class":150},[144,41852,31106],{"class":1993},[144,41854,31109],{"class":154},[144,41856,41857,41860,41862,41864,41866,41868],{"class":146,"line":1762},[144,41858,41859],{"class":154},"        p1",[144,41861,200],{"class":150},[144,41863,30836],{"class":203},[144,41865,35197],{"class":154},[144,41867,30836],{"class":203},[144,41869,41870],{"class":154},".p1_1(x))\n",[144,41872,41873,41875,41877,41879,41881,41883,41886,41888,41890,41892],{"class":146,"line":1779},[144,41874,7116],{"class":154},[144,41876,200],{"class":150},[144,41878,30836],{"class":203},[144,41880,35197],{"class":154},[144,41882,30836],{"class":203},[144,41884,41885],{"class":154},".p2_2(",[144,41887,30836],{"class":203},[144,41889,35197],{"class":154},[144,41891,30836],{"class":203},[144,41893,41894],{"class":154},".p2_1(x))))\n",[144,41896,41897,41900,41902,41904,41906,41908,41911,41913,41915,41917],{"class":146,"line":1784},[144,41898,41899],{"class":154},"        p3",[144,41901,200],{"class":150},[144,41903,30836],{"class":203},[144,41905,35197],{"class":154},[144,41907,30836],{"class":203},[144,41909,41910],{"class":154},".p3_2(",[144,41912,30836],{"class":203},[144,41914,35197],{"class":154},[144,41916,30836],{"class":203},[144,41918,41919],{"class":154},".p3_1(x))))\n",[144,41921,41922,41925,41927,41929,41931,41933,41936,41938],{"class":146,"line":1789},[144,41923,41924],{"class":154},"        p4",[144,41926,200],{"class":150},[144,41928,30836],{"class":203},[144,41930,35197],{"class":154},[144,41932,30836],{"class":203},[144,41934,41935],{"class":154},".p4_2(",[144,41937,30836],{"class":203},[144,41939,41940],{"class":154},".p4_1(x)))\n",[144,41942,41943],{"class":146,"line":1794},[144,41944,41945],{"class":213},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[144,41947,41948,41950,41953,41955,41957,41959],{"class":146,"line":1808},[144,41949,14783],{"class":150},[144,41951,41952],{"class":154}," torch.cat((p1,p2,p3,p4),",[144,41954,32698],{"class":5247},[144,41956,200],{"class":150},[144,41958,372],{"class":203},[144,41960,161],{"class":154},[144,41962,41963],{"class":146,"line":1813},[144,41964,2430],{"emptyLinePlaceholder":72},[144,41966,41967],{"class":146,"line":2607},[144,41968,2430],{"emptyLinePlaceholder":72},[144,41970,41971],{"class":146,"line":2621},[144,41972,41973],{"class":213},"# 搭建GoogLeNet网络\n",[144,41975,41976,41978,41981,41983,41985,41987,41989],{"class":146,"line":2629},[144,41977,14725],{"class":150},[144,41979,41980],{"class":1993}," GoogLeNet",[144,41982,155],{"class":154},[144,41984,30791],{"class":1993},[144,41986,713],{"class":154},[144,41988,30796],{"class":1993},[144,41990,30799],{"class":154},[144,41992,41993],{"class":146,"line":2634},[144,41994,41995],{"class":213},"    # 必须把Inception导入到里边\n",[144,41997,41998,42000,42002],{"class":146,"line":2640},[144,41999,30814],{"class":150},[144,42001,30817],{"class":203},[144,42003,42004],{"class":154},"(self,Inception):\n",[144,42006,42007,42009,42012,42014,42016,42018],{"class":146,"line":2646},[144,42008,30830],{"class":203},[144,42010,42011],{"class":154},"(GoogLeNet,",[144,42013,30836],{"class":203},[144,42015,30839],{"class":154},[144,42017,30842],{"class":203},[144,42019,2006],{"class":154},[144,42021,42022,42024,42027,42029],{"class":146,"line":2651},[144,42023,30858],{"class":203},[144,42025,42026],{"class":154},".b1",[144,42028,200],{"class":150},[144,42030,38022],{"class":154},[144,42032,42033,42035,42037,42039,42041,42043,42045,42047,42049,42051,42053,42055,42057,42059,42061,42063,42065,42067,42069,42071,42073],{"class":146,"line":7979},[144,42034,38027],{"class":154},[144,42036,30869],{"class":5247},[144,42038,200],{"class":150},[144,42040,372],{"class":203},[144,42042,533],{"class":154},[144,42044,30878],{"class":5247},[144,42046,200],{"class":150},[144,42048,358],{"class":203},[144,42050,533],{"class":154},[144,42052,30887],{"class":5247},[144,42054,200],{"class":150},[144,42056,524],{"class":203},[144,42058,533],{"class":154},[144,42060,30942],{"class":5247},[144,42062,200],{"class":150},[144,42064,232],{"class":203},[144,42066,533],{"class":154},[144,42068,30896],{"class":5247},[144,42070,200],{"class":150},[144,42072,226],{"class":203},[144,42074,38060],{"class":154},[144,42076,42077],{"class":146,"line":8003},[144,42078,38065],{"class":154},[144,42080,42081,42083,42085,42087,42089,42091,42093,42095,42097,42099,42101,42103,42105],{"class":146,"line":8008},[144,42082,38110],{"class":154},[144,42084,30887],{"class":5247},[144,42086,200],{"class":150},[144,42088,226],{"class":203},[144,42090,533],{"class":154},[144,42092,30942],{"class":5247},[144,42094,200],{"class":150},[144,42096,232],{"class":203},[144,42098,533],{"class":154},[144,42100,30896],{"class":5247},[144,42102,200],{"class":150},[144,42104,372],{"class":203},[144,42106,161],{"class":154},[144,42108,42109],{"class":146,"line":8014},[144,42110,38139],{"class":154},[144,42112,42113,42115,42118,42120],{"class":146,"line":8041},[144,42114,30858],{"class":203},[144,42116,42117],{"class":154},".b2",[144,42119,200],{"class":150},[144,42121,38022],{"class":154},[144,42123,42124,42126,42128,42130,42132,42134,42136,42138,42140,42142,42144,42146,42148],{"class":146,"line":8046},[144,42125,38027],{"class":154},[144,42127,30869],{"class":5247},[144,42129,200],{"class":150},[144,42131,358],{"class":203},[144,42133,533],{"class":154},[144,42135,30878],{"class":5247},[144,42137,200],{"class":150},[144,42139,358],{"class":203},[144,42141,533],{"class":154},[144,42143,30887],{"class":5247},[144,42145,200],{"class":150},[144,42147,372],{"class":203},[144,42149,38060],{"class":154},[144,42151,42152],{"class":146,"line":8052},[144,42153,38065],{"class":154},[144,42155,42156,42158,42160,42162,42164,42166,42168,42170,42173,42175,42177,42179,42181,42183,42185,42187,42189],{"class":146,"line":8064},[144,42157,38027],{"class":154},[144,42159,30869],{"class":5247},[144,42161,200],{"class":150},[144,42163,358],{"class":203},[144,42165,533],{"class":154},[144,42167,30878],{"class":5247},[144,42169,200],{"class":150},[144,42171,42172],{"class":203},"192",[144,42174,533],{"class":154},[144,42176,30887],{"class":5247},[144,42178,200],{"class":150},[144,42180,226],{"class":203},[144,42182,533],{"class":154},[144,42184,30896],{"class":5247},[144,42186,200],{"class":150},[144,42188,372],{"class":203},[144,42190,38060],{"class":154},[144,42192,42193],{"class":146,"line":8076},[144,42194,38065],{"class":154},[144,42196,42197,42199,42201,42203,42205,42207,42209,42211,42213,42215,42217,42219,42221],{"class":146,"line":8088},[144,42198,38110],{"class":154},[144,42200,30887],{"class":5247},[144,42202,200],{"class":150},[144,42204,226],{"class":203},[144,42206,533],{"class":154},[144,42208,30942],{"class":5247},[144,42210,200],{"class":150},[144,42212,232],{"class":203},[144,42214,533],{"class":154},[144,42216,30896],{"class":5247},[144,42218,200],{"class":150},[144,42220,372],{"class":203},[144,42222,161],{"class":154},[144,42224,42225],{"class":146,"line":9747},[144,42226,38139],{"class":154},[144,42228,42229,42231,42234,42236],{"class":146,"line":9772},[144,42230,30858],{"class":203},[144,42232,42233],{"class":154},".b3",[144,42235,200],{"class":150},[144,42237,38022],{"class":154},[144,42239,42240,42243,42245,42247,42249,42252,42254,42256,42258,42261,42263,42265,42267,42270,42272],{"class":146,"line":9795},[144,42241,42242],{"class":154},"            Inception(",[144,42244,42172],{"class":203},[144,42246,533],{"class":154},[144,42248,358],{"class":203},[144,42250,42251],{"class":154},",(",[144,42253,364],{"class":203},[144,42255,533],{"class":154},[144,42257,32083],{"class":203},[144,42259,42260],{"class":154},"),(",[144,42262,756],{"class":203},[144,42264,533],{"class":154},[144,42266,352],{"class":203},[144,42268,42269],{"class":154},"),",[144,42271,352],{"class":203},[144,42273,38060],{"class":154},[144,42275,42276,42278,42280,42282,42284,42286,42288,42290,42292,42294,42296,42298,42300,42302,42304],{"class":146,"line":9819},[144,42277,42242],{"class":154},[144,42279,34883],{"class":203},[144,42281,533],{"class":154},[144,42283,32083],{"class":203},[144,42285,42251],{"class":154},[144,42287,32083],{"class":203},[144,42289,533],{"class":154},[144,42291,42172],{"class":203},[144,42293,42260],{"class":154},[144,42295,352],{"class":203},[144,42297,533],{"class":154},[144,42299,364],{"class":203},[144,42301,42269],{"class":154},[144,42303,358],{"class":203},[144,42305,38060],{"class":154},[144,42307,42308,42310,42312,42314,42316,42318,42320,42322,42324,42326,42328,42330,42332],{"class":146,"line":9824},[144,42309,38110],{"class":154},[144,42311,30887],{"class":5247},[144,42313,200],{"class":150},[144,42315,226],{"class":203},[144,42317,533],{"class":154},[144,42319,30942],{"class":5247},[144,42321,200],{"class":150},[144,42323,232],{"class":203},[144,42325,533],{"class":154},[144,42327,30896],{"class":5247},[144,42329,200],{"class":150},[144,42331,372],{"class":203},[144,42333,161],{"class":154},[144,42335,42336],{"class":146,"line":9829},[144,42337,38139],{"class":154},[144,42339,42340,42342,42345,42347],{"class":146,"line":9834},[144,42341,30858],{"class":203},[144,42343,42344],{"class":154},".b4",[144,42346,200],{"class":150},[144,42348,38022],{"class":154},[144,42350,42351,42353,42356,42358,42360,42362,42364,42366,42369,42371,42373,42375,42377,42379,42381],{"class":146,"line":9843},[144,42352,42242],{"class":154},[144,42354,42355],{"class":203},"480",[144,42357,533],{"class":154},[144,42359,42172],{"class":203},[144,42361,42251],{"class":154},[144,42363,364],{"class":203},[144,42365,533],{"class":154},[144,42367,42368],{"class":203},"208",[144,42370,42260],{"class":154},[144,42372,756],{"class":203},[144,42374,533],{"class":154},[144,42376,762],{"class":203},[144,42378,42269],{"class":154},[144,42380,358],{"class":203},[144,42382,38060],{"class":154},[144,42384,42385,42387,42389,42391,42393,42395,42397,42399,42401,42403,42405,42407,42409,42411,42413],{"class":146,"line":9848},[144,42386,42242],{"class":154},[144,42388,38470],{"class":203},[144,42390,533],{"class":154},[144,42392,21079],{"class":203},[144,42394,42251],{"class":154},[144,42396,773],{"class":203},[144,42398,533],{"class":154},[144,42400,31514],{"class":203},[144,42402,42260],{"class":154},[144,42404,955],{"class":203},[144,42406,533],{"class":154},[144,42408,358],{"class":203},[144,42410,42269],{"class":154},[144,42412,358],{"class":203},[144,42414,38060],{"class":154},[144,42416,42417,42419,42421,42423,42425,42427,42429,42431,42433,42435,42437,42439,42441,42443,42445],{"class":146,"line":9854},[144,42418,42242],{"class":154},[144,42420,38470],{"class":203},[144,42422,533],{"class":154},[144,42424,32083],{"class":203},[144,42426,42251],{"class":154},[144,42428,32083],{"class":203},[144,42430,533],{"class":154},[144,42432,34883],{"class":203},[144,42434,42260],{"class":154},[144,42436,955],{"class":203},[144,42438,533],{"class":154},[144,42440,358],{"class":203},[144,42442,42269],{"class":154},[144,42444,358],{"class":203},[144,42446,38060],{"class":154},[144,42448,42449,42451,42453,42455,42457,42459,42461,42463,42466,42468,42470,42472,42474,42476,42478],{"class":146,"line":9875},[144,42450,42242],{"class":154},[144,42452,38470],{"class":203},[144,42454,533],{"class":154},[144,42456,773],{"class":203},[144,42458,42251],{"class":154},[144,42460,32083],{"class":203},[144,42462,533],{"class":154},[144,42464,42465],{"class":203},"288",[144,42467,42260],{"class":154},[144,42469,352],{"class":203},[144,42471,533],{"class":154},[144,42473,358],{"class":203},[144,42475,42269],{"class":154},[144,42477,358],{"class":203},[144,42479,38060],{"class":154},[144,42481,42482,42484,42487,42489,42491,42493,42495,42497,42500,42502,42504,42506,42508,42510,42512],{"class":146,"line":9881},[144,42483,42242],{"class":154},[144,42485,42486],{"class":203},"528",[144,42488,533],{"class":154},[144,42490,34883],{"class":203},[144,42492,42251],{"class":154},[144,42494,21079],{"class":203},[144,42496,533],{"class":154},[144,42498,42499],{"class":203},"320",[144,42501,42260],{"class":154},[144,42503,352],{"class":203},[144,42505,533],{"class":154},[144,42507,32083],{"class":203},[144,42509,42269],{"class":154},[144,42511,32083],{"class":203},[144,42513,38060],{"class":154},[144,42515,42516,42518,42520,42522,42524,42526,42528,42530,42532,42534,42536,42538,42540],{"class":146,"line":9895},[144,42517,38110],{"class":154},[144,42519,30887],{"class":5247},[144,42521,200],{"class":150},[144,42523,226],{"class":203},[144,42525,533],{"class":154},[144,42527,30942],{"class":5247},[144,42529,200],{"class":150},[144,42531,232],{"class":203},[144,42533,533],{"class":154},[144,42535,30896],{"class":5247},[144,42537,200],{"class":150},[144,42539,372],{"class":203},[144,42541,161],{"class":154},[144,42543,42544],{"class":146,"line":9901},[144,42545,38139],{"class":154},[144,42547,42548,42550,42553,42555],{"class":146,"line":9928},[144,42549,30858],{"class":203},[144,42551,42552],{"class":154},".b5",[144,42554,200],{"class":150},[144,42556,38022],{"class":154},[144,42558,42559,42561,42564,42566,42568,42570,42572,42574,42576,42578,42580,42582,42584,42586,42588],{"class":146,"line":9937},[144,42560,42242],{"class":154},[144,42562,42563],{"class":203},"832",[144,42565,533],{"class":154},[144,42567,34883],{"class":203},[144,42569,42251],{"class":154},[144,42571,21079],{"class":203},[144,42573,533],{"class":154},[144,42575,42499],{"class":203},[144,42577,42260],{"class":154},[144,42579,352],{"class":203},[144,42581,533],{"class":154},[144,42583,32083],{"class":203},[144,42585,42269],{"class":154},[144,42587,32083],{"class":203},[144,42589,38060],{"class":154},[144,42591,42592,42594,42596,42598,42600,42602,42604,42606,42608,42610,42612,42614,42616,42618,42620],{"class":146,"line":9943},[144,42593,42242],{"class":154},[144,42595,42563],{"class":203},[144,42597,533],{"class":154},[144,42599,34953],{"class":203},[144,42601,42251],{"class":154},[144,42603,42172],{"class":203},[144,42605,533],{"class":154},[144,42607,34953],{"class":203},[144,42609,42260],{"class":154},[144,42611,762],{"class":203},[144,42613,533],{"class":154},[144,42615,32083],{"class":203},[144,42617,42269],{"class":154},[144,42619,32083],{"class":203},[144,42621,38060],{"class":154},[144,42623,42624,42627,42629,42631,42633],{"class":146,"line":9951},[144,42625,42626],{"class":154},"            nn.AdaptiveAvgPool2d((",[144,42628,372],{"class":203},[144,42630,533],{"class":154},[144,42632,372],{"class":203},[144,42634,42635],{"class":154},")),\n",[144,42637,42638],{"class":146,"line":9956},[144,42639,38803],{"class":154},[144,42641,42642,42644,42647,42649,42651],{"class":146,"line":16635},[144,42643,38808],{"class":154},[144,42645,42646],{"class":203},"1024",[144,42648,533],{"class":154},[144,42650,601],{"class":203},[144,42652,161],{"class":154},[144,42654,42655],{"class":146,"line":16641},[144,42656,38139],{"class":154},[144,42658,42659],{"class":146,"line":16664},[144,42660,42661],{"class":213},"        # 对模型参数初始化\n",[144,42663,42664,42666,42668,42670,42672],{"class":146,"line":16670},[144,42665,3433],{"class":150},[144,42667,38881],{"class":154},[144,42669,26056],{"class":150},[144,42671,38886],{"class":203},[144,42673,38889],{"class":154},[144,42675,42676,42678,42680],{"class":146,"line":16693},[144,42677,4672],{"class":150},[144,42679,38901],{"class":203},[144,42681,38904],{"class":154},[144,42683,42684,42686,42689,42691,42694,42696,42698,42700,42702],{"class":146,"line":16707},[144,42685,38914],{"class":154},[144,42687,42688],{"class":5247},"mode",[144,42690,200],{"class":150},[144,42692,42693],{"class":259},"'fan_out'",[144,42695,533],{"class":154},[144,42697,38917],{"class":5247},[144,42699,200],{"class":150},[144,42701,38922],{"class":259},[144,42703,161],{"class":154},[144,42705,42706],{"class":146,"line":16727},[144,42707,42708],{"class":213},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[144,42710,42711],{"class":146,"line":16733},[144,42712,42713],{"class":213},"                # ② mode = 'fan_out'决定使用的fan值：\n",[144,42715,42716],{"class":146,"line":16744},[144,42717,42718],{"class":213},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[144,42720,42721],{"class":146,"line":16767},[144,42722,42723],{"class":213},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[144,42725,42726],{"class":146,"line":16789},[144,42727,42728],{"class":213},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[144,42730,42731],{"class":146,"line":16794},[144,42732,42733],{"class":213},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[144,42735,42736,42738,42740,42742,42744,42746],{"class":146,"line":16800},[144,42737,38934],{"class":150},[144,42739,38937],{"class":154},[144,42741,38940],{"class":150},[144,42743,38943],{"class":150},[144,42745,38946],{"class":203},[144,42747,3769],{"class":154},[144,42749,42750,42752,42754],{"class":146,"line":16814},[144,42751,38958],{"class":154},[144,42753,346],{"class":203},[144,42755,161],{"class":154},[144,42757,42758,42761,42763],{"class":146,"line":16827},[144,42759,42760],{"class":150},"                elif",[144,42762,38901],{"class":203},[144,42764,38977],{"class":154},[144,42766,42767,42770,42772,42774,42776],{"class":146,"line":16832},[144,42768,42769],{"class":154},"                    nn.init.normal_(m.weight,",[144,42771,346],{"class":203},[144,42773,533],{"class":154},[144,42775,38999],{"class":203},[144,42777,161],{"class":154},[144,42779,42780,42783,42785,42787,42789,42791],{"class":146,"line":16846},[144,42781,42782],{"class":150},"                    if",[144,42784,38937],{"class":154},[144,42786,38940],{"class":150},[144,42788,38943],{"class":150},[144,42790,38946],{"class":203},[144,42792,3769],{"class":154},[144,42794,42795,42798,42800],{"class":146,"line":16851},[144,42796,42797],{"class":154},"                        nn.init.constant_(m.bias,",[144,42799,346],{"class":203},[144,42801,161],{"class":154},[144,42803,42804],{"class":146,"line":16857},[144,42805,35178],{"class":213},[144,42807,42808,42810,42812],{"class":146,"line":16862},[144,42809,30814],{"class":150},[144,42811,31106],{"class":1993},[144,42813,31109],{"class":154},[144,42815,42816,42818,42820,42822],{"class":146,"line":16876},[144,42817,31114],{"class":154},[144,42819,200],{"class":150},[144,42821,30836],{"class":203},[144,42823,42824],{"class":154},".b1(x)\n",[144,42826,42827,42829,42831,42833],{"class":146,"line":16881},[144,42828,31114],{"class":154},[144,42830,200],{"class":150},[144,42832,30836],{"class":203},[144,42834,42835],{"class":154},".b2(x)\n",[144,42837,42838,42840,42842,42844],{"class":146,"line":16886},[144,42839,31114],{"class":154},[144,42841,200],{"class":150},[144,42843,30836],{"class":203},[144,42845,42846],{"class":154},".b3(x)\n",[144,42848,42849,42851,42853,42855],{"class":146,"line":16900},[144,42850,31114],{"class":154},[144,42852,200],{"class":150},[144,42854,30836],{"class":203},[144,42856,42857],{"class":154},".b4(x)\n",[144,42859,42860,42862,42864,42866],{"class":146,"line":16912},[144,42861,31114],{"class":154},[144,42863,200],{"class":150},[144,42865,30836],{"class":203},[144,42867,42868],{"class":154},".b5(x)\n",[144,42870,42871,42873],{"class":146,"line":16917},[144,42872,14783],{"class":150},[144,42874,31222],{"class":154},[144,42876,42877],{"class":146,"line":16930},[144,42878,2430],{"emptyLinePlaceholder":72},[144,42880,42881],{"class":146,"line":16935},[144,42882,42883],{"class":213},"# 模型展示\n",[144,42885,42886,42888,42890,42892,42894],{"class":146,"line":16940},[144,42887,1561],{"class":150},[144,42889,31233],{"class":203},[144,42891,2979],{"class":150},[144,42893,31238],{"class":259},[144,42895,3769],{"class":154},[144,42897,42898,42900,42902,42904,42906,42908,42910,42912,42914],{"class":146,"line":16945},[144,42899,31250],{"class":154},[144,42901,200],{"class":150},[144,42903,30464],{"class":154},[144,42905,31257],{"class":259},[144,42907,1734],{"class":150},[144,42909,31262],{"class":154},[144,42911,1731],{"class":150},[144,42913,30489],{"class":259},[144,42915,161],{"class":154},[144,42917,42918,42920,42922],{"class":146,"line":16958},[144,42919,31302],{"class":154},[144,42921,200],{"class":150},[144,42923,42924],{"class":154},"GoogLeNet(Inception).to(device)\n",[144,42926,42927,42929,42931,42933,42935,42937,42939,42941],{"class":146,"line":16963},[144,42928,31312],{"class":203},[144,42930,31315],{"class":154},[144,42932,372],{"class":203},[144,42934,533],{"class":154},[144,42936,31514],{"class":203},[144,42938,533],{"class":154},[144,42940,31514],{"class":203},[144,42942,31328],{"class":154},[98,42944,42945],{"start":66},[101,42946,39196],{},[135,42948,42950],{"className":30391,"code":42949,"language":30393,"meta":30,"style":30},"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",[141,42951,42952,42958,42964,42974,42980,42990,43000,43010,43020,43030,43034,43045,43055,43059,43063,43067,43075,43087,43097,43113,43123,43155,43169,43179,43189,43193,43203,43217,43227,43237,43247,43253,43257,43261,43265,43269,43273,43281,43301,43305,43309,43313,43317,43321,43337,43341,43345,43353,43357,43361,43369,43373,43377,43381,43389,43393,43397,43401,43405,43413,43417,43425,43429,43437,43441,43449,43453,43461,43465,43469,43477,43481,43485,43489,43501,43525,43539,43543,43547,43551,43559,43563,43571,43575,43583,43587,43595,43599,43607,43611,43619,43623,43635,43639,43647,43651,43659,43663,43667,43671,43675,43683,43687,43703,43707,43715,43719,43723,43727,43731,43735,43739,43743,43759,43763,43775,43779,43791,43795,43807,43811,43819,43823,43831,43835,43839,43843,43849,43853,43861,43865,43881,43885,43893,43897,43913,43925,43929,43941,43945,43949,43957,43961,43965,43973,43977,43985,43989,43997,44001,44005,44047,44089,44093,44097,44113,44117,44133,44137,44141,44149,44153,44157,44169,44207,44211,44215,44223,44227,44241,44251,44257,44263,44269,44275,44279,44283,44289,44293,44297,44305,44309,44327,44331,44335,44339,44355,44359,44363,44367,44371,44375,44395,44415,44419,44423,44427,44435,44443,44447,44463,44483,44503,44507,44511,44519,44527,44531,44535,44539,44551,44555,44565,44573,44590],{"__ignoreMap":30},[144,42953,42954,42956],{"class":146,"line":147},[144,42955,30405],{"class":150},[144,42957,31835],{"class":154},[144,42959,42960,42962],{"class":146,"line":66},[144,42961,30405],{"class":150},[144,42963,31842],{"class":154},[144,42965,42966,42968,42970,42972],{"class":146,"line":1210},[144,42967,30405],{"class":150},[144,42969,31853],{"class":154},[144,42971,31396],{"class":150},[144,42973,31858],{"class":154},[144,42975,42976,42978],{"class":146,"line":1225},[144,42977,30405],{"class":150},[144,42979,30408],{"class":154},[144,42981,42982,42984,42986,42988],{"class":146,"line":1231},[144,42983,30750],{"class":150},[144,42985,31428],{"class":154},[144,42987,30405],{"class":150},[144,42989,31875],{"class":154},[144,42991,42992,42994,42996,42998],{"class":146,"line":1245},[144,42993,30750],{"class":150},[144,42995,31381],{"class":154},[144,42997,30405],{"class":150},[144,42999,31386],{"class":154},[144,43001,43002,43004,43006,43008],{"class":146,"line":1251},[144,43003,30750],{"class":150},[144,43005,31411],{"class":154},[144,43007,30405],{"class":150},[144,43009,31416],{"class":154},[144,43011,43012,43014,43016,43018],{"class":146,"line":1342},[144,43013,30405],{"class":150},[144,43015,31428],{"class":154},[144,43017,31396],{"class":150},[144,43019,31433],{"class":154},[144,43021,43022,43024,43026,43028],{"class":146,"line":1348},[144,43023,30405],{"class":150},[144,43025,31445],{"class":154},[144,43027,31396],{"class":150},[144,43029,31450],{"class":154},[144,43031,43032],{"class":146,"line":1360},[144,43033,31920],{"class":213},[144,43035,43036,43038,43040,43042],{"class":146,"line":1642},[144,43037,30750],{"class":150},[144,43039,31927],{"class":154},[144,43041,30405],{"class":150},[144,43043,43044],{"class":154}," GoogLeNet, Inception\n",[144,43046,43047,43049,43051,43053],{"class":146,"line":1647},[144,43048,30750],{"class":150},[144,43050,30753],{"class":154},[144,43052,30405],{"class":150},[144,43054,30758],{"class":154},[144,43056,43057],{"class":146,"line":1653},[144,43058,2430],{"emptyLinePlaceholder":72},[144,43060,43061],{"class":146,"line":1658},[144,43062,2430],{"emptyLinePlaceholder":72},[144,43064,43065],{"class":146,"line":1672},[144,43066,31955],{"class":213},[144,43068,43069,43071,43073],{"class":146,"line":1677},[144,43070,31960],{"class":150},[144,43072,31963],{"class":1993},[144,43074,31966],{"class":154},[144,43076,43077,43079,43081,43083,43085],{"class":146,"line":1683},[144,43078,31971],{"class":154},[144,43080,200],{"class":150},[144,43082,31468],{"class":154},[144,43084,31476],{"class":259},[144,43086,31479],{"class":154},[144,43088,43089,43091,43093,43095],{"class":146,"line":1704},[144,43090,31984],{"class":5247},[144,43092,200],{"class":150},[144,43094,31489],{"class":203},[144,43096,31479],{"class":154},[144,43098,43099,43101,43103,43105,43107,43109,43111],{"class":146,"line":1709},[144,43100,31995],{"class":5247},[144,43102,200],{"class":150},[144,43104,31506],{"class":154},[144,43106,31509],{"class":5247},[144,43108,200],{"class":150},[144,43110,35462],{"class":203},[144,43112,31517],{"class":154},[144,43114,43115,43117,43119,43121],{"class":146,"line":1723},[144,43116,32012],{"class":5247},[144,43118,200],{"class":150},[144,43120,31489],{"class":203},[144,43122,161],{"class":154},[144,43124,43125,43127,43129,43131,43133,43135,43137,43139,43141,43143,43145,43147,43149,43151,43153],{"class":146,"line":1728},[144,43126,32023],{"class":154},[144,43128,200],{"class":150},[144,43130,32028],{"class":154},[144,43132,32031],{"class":203},[144,43134,155],{"class":154},[144,43136,32036],{"class":203},[144,43138,610],{"class":150},[144,43140,7389],{"class":203},[144,43142,32043],{"class":154},[144,43144,32031],{"class":203},[144,43146,155],{"class":154},[144,43148,32050],{"class":203},[144,43150,610],{"class":150},[144,43152,7389],{"class":203},[144,43154,32057],{"class":154},[144,43156,43157,43159,43161,43163,43165,43167],{"class":146,"line":1757},[144,43158,32062],{"class":154},[144,43160,200],{"class":150},[144,43162,32067],{"class":154},[144,43164,31550],{"class":5247},[144,43166,200],{"class":150},[144,43168,31555],{"class":154},[144,43170,43171,43173,43175,43177],{"class":146,"line":1762},[144,43172,32078],{"class":5247},[144,43174,200],{"class":150},[144,43176,352],{"class":203},[144,43178,31479],{"class":154},[144,43180,43181,43183,43185,43187],{"class":146,"line":1779},[144,43182,32090],{"class":5247},[144,43184,200],{"class":150},[144,43186,31489],{"class":203},[144,43188,31479],{"class":154},[144,43190,43191],{"class":146,"line":1784},[144,43192,32101],{"class":213},[144,43194,43195,43197,43199,43201],{"class":146,"line":1789},[144,43196,32106],{"class":5247},[144,43198,200],{"class":150},[144,43200,550],{"class":203},[144,43202,161],{"class":154},[144,43204,43205,43207,43209,43211,43213,43215],{"class":146,"line":1794},[144,43206,32117],{"class":154},[144,43208,200],{"class":150},[144,43210,31547],{"class":154},[144,43212,31550],{"class":5247},[144,43214,200],{"class":150},[144,43216,32128],{"class":154},[144,43218,43219,43221,43223,43225],{"class":146,"line":1808},[144,43220,32133],{"class":5247},[144,43222,200],{"class":150},[144,43224,352],{"class":203},[144,43226,31479],{"class":154},[144,43228,43229,43231,43233,43235],{"class":146,"line":1813},[144,43230,32144],{"class":5247},[144,43232,200],{"class":150},[144,43234,31489],{"class":203},[144,43236,31479],{"class":154},[144,43238,43239,43241,43243,43245],{"class":146,"line":2607},[144,43240,32155],{"class":5247},[144,43242,200],{"class":150},[144,43244,550],{"class":203},[144,43246,161],{"class":154},[144,43248,43249,43251],{"class":146,"line":2621},[144,43250,4120],{"class":150},[144,43252,32168],{"class":154},[144,43254,43255],{"class":146,"line":2629},[144,43256,2430],{"emptyLinePlaceholder":72},[144,43258,43259],{"class":146,"line":2634},[144,43260,32177],{"class":213},[144,43262,43263],{"class":146,"line":2640},[144,43264,32182],{"class":213},[144,43266,43267],{"class":146,"line":2646},[144,43268,2430],{"emptyLinePlaceholder":72},[144,43270,43271],{"class":146,"line":2651},[144,43272,32191],{"class":213},[144,43274,43275,43277,43279],{"class":146,"line":7979},[144,43276,31960],{"class":150},[144,43278,32198],{"class":1993},[144,43280,32201],{"class":154},[144,43282,43283,43285,43287,43289,43291,43293,43295,43297,43299],{"class":146,"line":8003},[144,43284,31250],{"class":154},[144,43286,200],{"class":150},[144,43288,30464],{"class":154},[144,43290,31257],{"class":259},[144,43292,1734],{"class":150},[144,43294,31262],{"class":154},[144,43296,1731],{"class":150},[144,43298,32220],{"class":259},[144,43300,161],{"class":154},[144,43302,43303],{"class":146,"line":8008},[144,43304,2430],{"emptyLinePlaceholder":72},[144,43306,43307],{"class":146,"line":8014},[144,43308,2430],{"emptyLinePlaceholder":72},[144,43310,43311],{"class":146,"line":8041},[144,43312,32235],{"class":213},[144,43314,43315],{"class":146,"line":8046},[144,43316,32240],{"class":213},[144,43318,43319],{"class":146,"line":8052},[144,43320,32245],{"class":213},[144,43322,43323,43325,43327,43329,43331,43333,43335],{"class":146,"line":8064},[144,43324,32250],{"class":154},[144,43326,200],{"class":150},[144,43328,32255],{"class":154},[144,43330,32258],{"class":5247},[144,43332,200],{"class":150},[144,43334,32263],{"class":203},[144,43336,161],{"class":154},[144,43338,43339],{"class":146,"line":8076},[144,43340,2430],{"emptyLinePlaceholder":72},[144,43342,43343],{"class":146,"line":8088},[144,43344,32274],{"class":213},[144,43346,43347,43349,43351],{"class":146,"line":9747},[144,43348,32279],{"class":154},[144,43350,200],{"class":150},[144,43352,32284],{"class":154},[144,43354,43355],{"class":146,"line":9772},[144,43356,2430],{"emptyLinePlaceholder":72},[144,43358,43359],{"class":146,"line":9795},[144,43360,32293],{"class":213},[144,43362,43363,43365,43367],{"class":146,"line":9819},[144,43364,31302],{"class":154},[144,43366,200],{"class":150},[144,43368,32302],{"class":154},[144,43370,43371],{"class":146,"line":9824},[144,43372,32307],{"class":213},[144,43374,43375],{"class":146,"line":9829},[144,43376,32312],{"class":213},[144,43378,43379],{"class":146,"line":9834},[144,43380,32317],{"class":213},[144,43382,43383,43385,43387],{"class":146,"line":9843},[144,43384,32322],{"class":154},[144,43386,200],{"class":150},[144,43388,32327],{"class":154},[144,43390,43391],{"class":146,"line":9848},[144,43392,2430],{"emptyLinePlaceholder":72},[144,43394,43395],{"class":146,"line":9854},[144,43396,2430],{"emptyLinePlaceholder":72},[144,43398,43399],{"class":146,"line":9875},[144,43400,32340],{"class":213},[144,43402,43403],{"class":146,"line":9881},[144,43404,32345],{"class":213},[144,43406,43407,43409,43411],{"class":146,"line":9895},[144,43408,32350],{"class":154},[144,43410,200],{"class":150},[144,43412,32355],{"class":203},[144,43414,43415],{"class":146,"line":9901},[144,43416,32360],{"class":213},[144,43418,43419,43421,43423],{"class":146,"line":9928},[144,43420,32365],{"class":154},[144,43422,200],{"class":150},[144,43424,32370],{"class":154},[144,43426,43427],{"class":146,"line":9937},[144,43428,32375],{"class":213},[144,43430,43431,43433,43435],{"class":146,"line":9943},[144,43432,32380],{"class":154},[144,43434,200],{"class":150},[144,43436,32370],{"class":154},[144,43438,43439],{"class":146,"line":9951},[144,43440,32389],{"class":213},[144,43442,43443,43445,43447],{"class":146,"line":9956},[144,43444,32394],{"class":154},[144,43446,200],{"class":150},[144,43448,32370],{"class":154},[144,43450,43451],{"class":146,"line":16635},[144,43452,32403],{"class":213},[144,43454,43455,43457,43459],{"class":146,"line":16641},[144,43456,32408],{"class":154},[144,43458,200],{"class":150},[144,43460,32370],{"class":154},[144,43462,43463],{"class":146,"line":16664},[144,43464,2430],{"emptyLinePlaceholder":72},[144,43466,43467],{"class":146,"line":16670},[144,43468,32421],{"class":213},[144,43470,43471,43473,43475],{"class":146,"line":16693},[144,43472,32426],{"class":154},[144,43474,200],{"class":150},[144,43476,32431],{"class":154},[144,43478,43479],{"class":146,"line":16707},[144,43480,2430],{"emptyLinePlaceholder":72},[144,43482,43483],{"class":146,"line":16727},[144,43484,2430],{"emptyLinePlaceholder":72},[144,43486,43487],{"class":146,"line":16733},[144,43488,32444],{"class":213},[144,43490,43491,43493,43495,43497,43499],{"class":146,"line":16744},[144,43492,3231],{"class":150},[144,43494,32451],{"class":154},[144,43496,26056],{"class":150},[144,43498,32456],{"class":203},[144,43500,32459],{"class":154},[144,43502,43503,43505,43507,43509,43511,43513,43515,43517,43519,43521,43523],{"class":146,"line":16767},[144,43504,32464],{"class":203},[144,43506,155],{"class":154},[144,43508,32469],{"class":259},[144,43510,32472],{"class":203},[144,43512,739],{"class":259},[144,43514,32472],{"class":203},[144,43516,406],{"class":259},[144,43518,32481],{"class":154},[144,43520,687],{"class":150},[144,43522,372],{"class":203},[144,43524,30510],{"class":154},[144,43526,43527,43529,43531,43533,43535,43537],{"class":146,"line":16789},[144,43528,32464],{"class":203},[144,43530,155],{"class":154},[144,43532,32496],{"class":259},[144,43534,610],{"class":150},[144,43536,601],{"class":203},[144,43538,161],{"class":154},[144,43540,43541],{"class":146,"line":16794},[144,43542,2430],{"emptyLinePlaceholder":72},[144,43544,43545],{"class":146,"line":16800},[144,43546,32511],{"class":213},[144,43548,43549],{"class":146,"line":16814},[144,43550,32516],{"class":213},[144,43552,43553,43555,43557],{"class":146,"line":16827},[144,43554,32521],{"class":154},[144,43556,200],{"class":150},[144,43558,32355],{"class":203},[144,43560,43561],{"class":146,"line":16832},[144,43562,32530],{"class":213},[144,43564,43565,43567,43569],{"class":146,"line":16846},[144,43566,32535],{"class":154},[144,43568,200],{"class":150},[144,43570,3115],{"class":203},[144,43572,43573],{"class":146,"line":16851},[144,43574,32544],{"class":213},[144,43576,43577,43579,43581],{"class":146,"line":16857},[144,43578,32549],{"class":154},[144,43580,200],{"class":150},[144,43582,32355],{"class":203},[144,43584,43585],{"class":146,"line":16862},[144,43586,32558],{"class":213},[144,43588,43589,43591,43593],{"class":146,"line":16876},[144,43590,32563],{"class":154},[144,43592,200],{"class":150},[144,43594,3115],{"class":203},[144,43596,43597],{"class":146,"line":16881},[144,43598,32572],{"class":213},[144,43600,43601,43603,43605],{"class":146,"line":16886},[144,43602,32577],{"class":154},[144,43604,200],{"class":150},[144,43606,3115],{"class":203},[144,43608,43609],{"class":146,"line":16900},[144,43610,32586],{"class":213},[144,43612,43613,43615,43617],{"class":146,"line":16912},[144,43614,32591],{"class":154},[144,43616,200],{"class":150},[144,43618,3115],{"class":203},[144,43620,43621],{"class":146,"line":16917},[144,43622,32600],{"class":213},[144,43624,43625,43627,43629,43631,43633],{"class":146,"line":16930},[144,43626,3433],{"class":150},[144,43628,31614],{"class":154},[144,43630,26056],{"class":150},[144,43632,31619],{"class":203},[144,43634,32613],{"class":154},[144,43636,43637],{"class":146,"line":16935},[144,43638,32618],{"class":213},[144,43640,43641,43643,43645],{"class":146,"line":16940},[144,43642,32623],{"class":154},[144,43644,200],{"class":150},[144,43646,32628],{"class":154},[144,43648,43649],{"class":146,"line":16945},[144,43650,32633],{"class":213},[144,43652,43653,43655,43657],{"class":146,"line":16958},[144,43654,32638],{"class":154},[144,43656,200],{"class":150},[144,43658,32643],{"class":154},[144,43660,43661],{"class":146,"line":16963},[144,43662,32649],{"class":213},[144,43664,43665],{"class":146,"line":32646},[144,43666,32655],{"class":154},[144,43668,43669],{"class":146,"line":32652},[144,43670,32661],{"class":213},[144,43672,43673],{"class":146,"line":32658},[144,43674,32667],{"class":213},[144,43676,43677,43679,43681],{"class":146,"line":32664},[144,43678,32673],{"class":154},[144,43680,200],{"class":150},[144,43682,32678],{"class":154},[144,43684,43685],{"class":146,"line":32670},[144,43686,32684],{"class":213},[144,43688,43689,43691,43693,43695,43697,43699,43701],{"class":146,"line":32681},[144,43690,32690],{"class":154},[144,43692,200],{"class":150},[144,43694,32695],{"class":154},[144,43696,32698],{"class":5247},[144,43698,200],{"class":150},[144,43700,372],{"class":203},[144,43702,161],{"class":154},[144,43704,43705],{"class":146,"line":32687},[144,43706,32710],{"class":213},[144,43708,43709,43711,43713],{"class":146,"line":32707},[144,43710,32716],{"class":154},[144,43712,200],{"class":150},[144,43714,32721],{"class":154},[144,43716,43717],{"class":146,"line":32713},[144,43718,32727],{"class":213},[144,43720,43721],{"class":146,"line":32724},[144,43722,32733],{"class":154},[144,43724,43725],{"class":146,"line":32730},[144,43726,32739],{"class":213},[144,43728,43729],{"class":146,"line":32736},[144,43730,32745],{"class":154},[144,43732,43733],{"class":146,"line":32742},[144,43734,32751],{"class":213},[144,43736,43737],{"class":146,"line":32748},[144,43738,32757],{"class":154},[144,43740,43741],{"class":146,"line":32754},[144,43742,32763],{"class":213},[144,43744,43745,43747,43749,43751,43753,43755,43757],{"class":146,"line":32760},[144,43746,32769],{"class":154},[144,43748,9508],{"class":150},[144,43750,32774],{"class":154},[144,43752,610],{"class":150},[144,43754,32779],{"class":154},[144,43756,346],{"class":203},[144,43758,161],{"class":154},[144,43760,43761],{"class":146,"line":32766},[144,43762,32789],{"class":213},[144,43764,43765,43767,43769,43771,43773],{"class":146,"line":32786},[144,43766,32795],{"class":154},[144,43768,9508],{"class":150},[144,43770,32800],{"class":154},[144,43772,2979],{"class":150},[144,43774,32805],{"class":154},[144,43776,43777],{"class":146,"line":32792},[144,43778,32811],{"class":213},[144,43780,43781,43783,43785,43787,43789],{"class":146,"line":32808},[144,43782,32817],{"class":154},[144,43784,9508],{"class":150},[144,43786,32779],{"class":154},[144,43788,346],{"class":203},[144,43790,161],{"class":154},[144,43792,43793],{"class":146,"line":32814},[144,43794,32831],{"class":213},[144,43796,43797,43799,43801,43803,43805],{"class":146,"line":32828},[144,43798,3433],{"class":150},[144,43800,32839],{"class":154},[144,43802,26056],{"class":150},[144,43804,31619],{"class":203},[144,43806,32846],{"class":154},[144,43808,43809],{"class":146,"line":32834},[144,43810,32852],{"class":213},[144,43812,43813,43815,43817],{"class":146,"line":32849},[144,43814,32623],{"class":154},[144,43816,200],{"class":150},[144,43818,32628],{"class":154},[144,43820,43821],{"class":146,"line":32855},[144,43822,32867],{"class":213},[144,43824,43825,43827,43829],{"class":146,"line":32864},[144,43826,32638],{"class":154},[144,43828,200],{"class":150},[144,43830,32643],{"class":154},[144,43832,43833],{"class":146,"line":32870},[144,43834,32882],{"class":213},[144,43836,43837],{"class":146,"line":32879},[144,43838,32888],{"class":154},[144,43840,43841],{"class":146,"line":32885},[144,43842,36369],{"class":213},[144,43844,43845,43847],{"class":146,"line":32891},[144,43846,32894],{"class":150},[144,43848,32897],{"class":154},[144,43850,43851],{"class":146,"line":32900},[144,43852,32903],{"class":213},[144,43854,43855,43857,43859],{"class":146,"line":32906},[144,43856,36384],{"class":154},[144,43858,200],{"class":150},[144,43860,32678],{"class":154},[144,43862,43863],{"class":146,"line":32917},[144,43864,32920],{"class":213},[144,43866,43867,43869,43871,43873,43875,43877,43879],{"class":146,"line":32923},[144,43868,36397],{"class":154},[144,43870,200],{"class":150},[144,43872,32695],{"class":154},[144,43874,32698],{"class":5247},[144,43876,200],{"class":150},[144,43878,372],{"class":203},[144,43880,161],{"class":154},[144,43882,43883],{"class":146,"line":32942},[144,43884,32945],{"class":213},[144,43886,43887,43889,43891],{"class":146,"line":32948},[144,43888,36418],{"class":154},[144,43890,200],{"class":150},[144,43892,32721],{"class":154},[144,43894,43895],{"class":146,"line":32959},[144,43896,32962],{"class":213},[144,43898,43899,43901,43903,43905,43907,43909,43911],{"class":146,"line":32965},[144,43900,36431],{"class":154},[144,43902,9508],{"class":150},[144,43904,36436],{"class":154},[144,43906,610],{"class":150},[144,43908,32779],{"class":154},[144,43910,346],{"class":203},[144,43912,161],{"class":154},[144,43914,43915,43917,43919,43921,43923],{"class":146,"line":32985},[144,43916,36449],{"class":154},[144,43918,9508],{"class":150},[144,43920,32800],{"class":154},[144,43922,2979],{"class":150},[144,43924,32805],{"class":154},[144,43926,43927],{"class":146,"line":33001},[144,43928,36462],{"class":213},[144,43930,43931,43933,43935,43937,43939],{"class":146,"line":33007},[144,43932,36467],{"class":154},[144,43934,9508],{"class":150},[144,43936,32779],{"class":154},[144,43938,346],{"class":203},[144,43940,161],{"class":154},[144,43942,43943],{"class":146,"line":33021},[144,43944,33024],{"class":213},[144,43946,43947],{"class":146,"line":33027},[144,43948,33030],{"class":213},[144,43950,43951,43953,43955],{"class":146,"line":33033},[144,43952,33036],{"class":154},[144,43954,739],{"class":150},[144,43956,33041],{"class":154},[144,43958,43959],{"class":146,"line":33044},[144,43960,33047],{"class":213},[144,43962,43963],{"class":146,"line":33050},[144,43964,33053],{"class":213},[144,43966,43967,43969,43971],{"class":146,"line":33056},[144,43968,33059],{"class":154},[144,43970,739],{"class":150},[144,43972,33041],{"class":154},[144,43974,43975],{"class":146,"line":33066},[144,43976,33069],{"class":213},[144,43978,43979,43981,43983],{"class":146,"line":33072},[144,43980,33075],{"class":154},[144,43982,739],{"class":150},[144,43984,33080],{"class":154},[144,43986,43987],{"class":146,"line":33083},[144,43988,33086],{"class":213},[144,43990,43991,43993,43995],{"class":146,"line":33089},[144,43992,33092],{"class":154},[144,43994,739],{"class":150},[144,43996,33080],{"class":154},[144,43998,43999],{"class":146,"line":33099},[144,44000,2430],{"emptyLinePlaceholder":72},[144,44002,44003],{"class":146,"line":33104},[144,44004,33107],{"class":213},[144,44006,44007,44009,44011,44013,44015,44017,44019,44021,44023,44025,44027,44029,44031,44033,44035,44037,44039,44041,44043,44045],{"class":146,"line":33110},[144,44008,32464],{"class":203},[144,44010,155],{"class":154},[144,44012,3622],{"class":259},[144,44014,32472],{"class":203},[144,44016,33121],{"class":259},[144,44018,1051],{"class":203},[144,44020,33126],{"class":150},[144,44022,1101],{"class":203},[144,44024,33131],{"class":259},[144,44026,1051],{"class":203},[144,44028,33126],{"class":150},[144,44030,1101],{"class":203},[144,44032,3622],{"class":259},[144,44034,33142],{"class":154},[144,44036,687],{"class":150},[144,44038,372],{"class":203},[144,44040,33149],{"class":154},[144,44042,687],{"class":150},[144,44044,372],{"class":203},[144,44046,33156],{"class":154},[144,44048,44049,44051,44053,44055,44057,44059,44061,44063,44065,44067,44069,44071,44073,44075,44077,44079,44081,44083,44085,44087],{"class":146,"line":33159},[144,44050,32464],{"class":203},[144,44052,155],{"class":154},[144,44054,3622],{"class":259},[144,44056,32472],{"class":203},[144,44058,33170],{"class":259},[144,44060,1051],{"class":203},[144,44062,33126],{"class":150},[144,44064,1101],{"class":203},[144,44066,33179],{"class":259},[144,44068,1051],{"class":203},[144,44070,33126],{"class":150},[144,44072,1101],{"class":203},[144,44074,3622],{"class":259},[144,44076,33190],{"class":154},[144,44078,687],{"class":150},[144,44080,372],{"class":203},[144,44082,33197],{"class":154},[144,44084,687],{"class":150},[144,44086,372],{"class":203},[144,44088,33156],{"class":154},[144,44090,44091],{"class":146,"line":33206},[144,44092,2430],{"emptyLinePlaceholder":72},[144,44094,44095],{"class":146,"line":33211},[144,44096,33214],{"class":213},[144,44098,44099,44101,44103,44105,44107,44109,44111],{"class":146,"line":33217},[144,44100,2527],{"class":150},[144,44102,33222],{"class":154},[144,44104,687],{"class":150},[144,44106,372],{"class":203},[144,44108,1095],{"class":154},[144,44110,1115],{"class":150},[144,44112,33233],{"class":154},[144,44114,44115],{"class":146,"line":33236},[144,44116,33239],{"class":213},[144,44118,44119,44121,44123,44125,44127,44129,44131],{"class":146,"line":33242},[144,44120,33245],{"class":154},[144,44122,194],{"class":203},[144,44124,200],{"class":150},[144,44126,33252],{"class":154},[144,44128,687],{"class":150},[144,44130,372],{"class":203},[144,44132,33259],{"class":154},[144,44134,44135],{"class":146,"line":33262},[144,44136,33265],{"class":213},[144,44138,44139],{"class":146,"line":33268},[144,44140,33271],{"class":213},[144,44142,44143,44145,44147],{"class":146,"line":33274},[144,44144,33277],{"class":154},[144,44146,200],{"class":150},[144,44148,32327],{"class":154},[144,44150,44151],{"class":146,"line":33284},[144,44152,2430],{"emptyLinePlaceholder":72},[144,44154,44155],{"class":146,"line":33289},[144,44156,33292],{"class":213},[144,44158,44159,44161,44163,44165,44167],{"class":146,"line":33295},[144,44160,33298],{"class":154},[144,44162,200],{"class":150},[144,44164,33303],{"class":154},[144,44166,687],{"class":150},[144,44168,33308],{"class":154},[144,44170,44171,44173,44175,44177,44179,44181,44183,44185,44187,44189,44191,44193,44195,44197,44199,44201,44203,44205],{"class":146,"line":33311},[144,44172,32464],{"class":203},[144,44174,155],{"class":154},[144,44176,33318],{"class":259},[144,44178,1051],{"class":203},[144,44180,33323],{"class":150},[144,44182,1101],{"class":203},[144,44184,699],{"class":259},[144,44186,1051],{"class":203},[144,44188,33323],{"class":150},[144,44190,1101],{"class":203},[144,44192,33336],{"class":259},[144,44194,33339],{"class":154},[144,44196,33342],{"class":150},[144,44198,1062],{"class":203},[144,44200,33347],{"class":154},[144,44202,483],{"class":150},[144,44204,1062],{"class":203},[144,44206,30510],{"class":154},[144,44208,44209],{"class":146,"line":33356},[144,44210,36746],{"class":213},[144,44212,44213],{"class":146,"line":33362},[144,44214,36751],{"class":213},[144,44216,44217,44219,44221],{"class":146,"line":33368},[144,44218,36756],{"class":154},[144,44220,33380],{"class":259},[144,44222,161],{"class":154},[144,44224,44225],{"class":146,"line":33374},[144,44226,33400],{"class":213},[144,44228,44229,44231,44233,44235,44237,44239],{"class":146,"line":33385},[144,44230,33406],{"class":154},[144,44232,200],{"class":150},[144,44234,33411],{"class":154},[144,44236,33414],{"class":5247},[144,44238,200],{"class":150},[144,44240,1576],{"class":154},[144,44242,44243,44245,44247,44249],{"class":146,"line":33391},[144,44244,33424],{"class":259},[144,44246,1014],{"class":154},[144,44248,33429],{"class":203},[144,44250,33432],{"class":154},[144,44252,44253,44255],{"class":146,"line":33397},[144,44254,33438],{"class":259},[144,44256,33441],{"class":154},[144,44258,44259,44261],{"class":146,"line":33403},[144,44260,33447],{"class":259},[144,44262,33450],{"class":154},[144,44264,44265,44267],{"class":146,"line":33421},[144,44266,33456],{"class":259},[144,44268,33459],{"class":154},[144,44270,44271,44273],{"class":146,"line":33435},[144,44272,33465],{"class":259},[144,44274,33468],{"class":154},[144,44276,44277],{"class":146,"line":33444},[144,44278,33474],{"class":154},[144,44280,44281],{"class":146,"line":33453},[144,44282,33480],{"class":213},[144,44284,44285,44287],{"class":146,"line":33462},[144,44286,4120],{"class":150},[144,44288,33488],{"class":154},[144,44290,44291],{"class":146,"line":33471},[144,44292,2430],{"emptyLinePlaceholder":72},[144,44294,44295],{"class":146,"line":33477},[144,44296,33499],{"class":213},[144,44298,44299,44301,44303],{"class":146,"line":33483},[144,44300,31960],{"class":150},[144,44302,33507],{"class":1993},[144,44304,33510],{"class":154},[144,44306,44307],{"class":146,"line":33491},[144,44308,33516],{"class":213},[144,44310,44311,44313,44315,44317,44319,44321,44323,44325],{"class":146,"line":33496},[144,44312,33522],{"class":154},[144,44314,31706],{"class":5247},[144,44316,200],{"class":150},[144,44318,155],{"class":154},[144,44320,653],{"class":203},[144,44322,533],{"class":154},[144,44324,448],{"class":203},[144,44326,30510],{"class":154},[144,44328,44329],{"class":146,"line":33502},[144,44330,33542],{"class":213},[144,44332,44333],{"class":146,"line":33513},[144,44334,33548],{"class":213},[144,44336,44337],{"class":146,"line":33519},[144,44338,33554],{"class":213},[144,44340,44341,44343,44345,44347,44349,44351,44353],{"class":146,"line":33539},[144,44342,31740],{"class":154},[144,44344,372],{"class":203},[144,44346,533],{"class":154},[144,44348,232],{"class":203},[144,44350,533],{"class":154},[144,44352,372],{"class":203},[144,44354,161],{"class":154},[144,44356,44357],{"class":146,"line":33545},[144,44358,33577],{"class":213},[144,44360,44361],{"class":146,"line":33551},[144,44362,33583],{"class":213},[144,44364,44365],{"class":146,"line":33557},[144,44366,33589],{"class":213},[144,44368,44369],{"class":146,"line":33574},[144,44370,33595],{"class":213},[144,44372,44373],{"class":146,"line":33580},[144,44374,33601],{"class":213},[144,44376,44377,44379,44381,44383,44385,44387,44389,44391,44393],{"class":146,"line":33586},[144,44378,33607],{"class":154},[144,44380,33610],{"class":259},[144,44382,33613],{"class":154},[144,44384,33616],{"class":259},[144,44386,533],{"class":154},[144,44388,33621],{"class":5247},[144,44390,200],{"class":150},[144,44392,33626],{"class":259},[144,44394,161],{"class":154},[144,44396,44397,44399,44401,44403,44405,44407,44409,44411,44413],{"class":146,"line":33592},[144,44398,33607],{"class":154},[144,44400,33610],{"class":259},[144,44402,33638],{"class":154},[144,44404,33641],{"class":259},[144,44406,533],{"class":154},[144,44408,33621],{"class":5247},[144,44410,200],{"class":150},[144,44412,33650],{"class":259},[144,44414,161],{"class":154},[144,44416,44417],{"class":146,"line":33598},[144,44418,33658],{"class":213},[144,44420,44421],{"class":146,"line":33604},[144,44422,33664],{"class":154},[144,44424,44425],{"class":146,"line":33631},[144,44426,33670],{"class":213},[144,44428,44429,44431,44433],{"class":146,"line":33655},[144,44430,33676],{"class":154},[144,44432,33679],{"class":259},[144,44434,161],{"class":154},[144,44436,44437,44439,44441],{"class":146,"line":33661},[144,44438,33687],{"class":154},[144,44440,33690],{"class":259},[144,44442,161],{"class":154},[144,44444,44445],{"class":146,"line":33667},[144,44446,33698],{"class":213},[144,44448,44449,44451,44453,44455,44457,44459,44461],{"class":146,"line":33673},[144,44450,31740],{"class":154},[144,44452,372],{"class":203},[144,44454,533],{"class":154},[144,44456,232],{"class":203},[144,44458,533],{"class":154},[144,44460,232],{"class":203},[144,44462,161],{"class":154},[144,44464,44465,44467,44469,44471,44473,44475,44477,44479,44481],{"class":146,"line":33684},[144,44466,33607],{"class":154},[144,44468,33610],{"class":259},[144,44470,33725],{"class":154},[144,44472,33616],{"class":259},[144,44474,533],{"class":154},[144,44476,33621],{"class":5247},[144,44478,200],{"class":150},[144,44480,33736],{"class":259},[144,44482,161],{"class":154},[144,44484,44485,44487,44489,44491,44493,44495,44497,44499,44501],{"class":146,"line":33695},[144,44486,33607],{"class":154},[144,44488,33610],{"class":259},[144,44490,33748],{"class":154},[144,44492,33641],{"class":259},[144,44494,533],{"class":154},[144,44496,33621],{"class":5247},[144,44498,200],{"class":150},[144,44500,33759],{"class":259},[144,44502,161],{"class":154},[144,44504,44505],{"class":146,"line":33701},[144,44506,33767],{"class":213},[144,44508,44509],{"class":146,"line":33718},[144,44510,33664],{"class":154},[144,44512,44513,44515,44517],{"class":146,"line":33741},[144,44514,33676],{"class":154},[144,44516,33610],{"class":259},[144,44518,161],{"class":154},[144,44520,44521,44523,44525],{"class":146,"line":33764},[144,44522,33687],{"class":154},[144,44524,33789],{"class":259},[144,44526,161],{"class":154},[144,44528,44529],{"class":146,"line":33770},[144,44530,33797],{"class":154},[144,44532,44533],{"class":146,"line":33775},[144,44534,2430],{"emptyLinePlaceholder":72},[144,44536,44537],{"class":146,"line":33784},[144,44538,33808],{"class":213},[144,44540,44541,44543,44545,44547,44549],{"class":146,"line":33794},[144,44542,1561],{"class":150},[144,44544,31233],{"class":203},[144,44546,2979],{"class":150},[144,44548,31238],{"class":259},[144,44550,3769],{"class":154},[144,44552,44553],{"class":146,"line":33800},[144,44554,33827],{"class":213},[144,44556,44557,44560,44562],{"class":146,"line":33805},[144,44558,44559],{"class":154},"    GoogLeNet",[144,44561,200],{"class":150},[144,44563,44564],{"class":154},"GoogLeNet(Inception)\n",[144,44566,44567,44569,44571],{"class":146,"line":33811},[144,44568,33844],{"class":154},[144,44570,200],{"class":150},[144,44572,33849],{"class":154},[144,44574,44575,44577,44579,44582,44584,44586,44588],{"class":146,"line":33824},[144,44576,33406],{"class":154},[144,44578,200],{"class":150},[144,44580,44581],{"class":154},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[144,44583,33862],{"class":5247},[144,44585,200],{"class":150},[144,44587,1106],{"class":203},[144,44589,161],{"class":154},[144,44591,44592],{"class":146,"line":33830},[144,44593,33874],{"class":154},[98,44595,44596],{"start":1210},[101,44597,40587],{},[135,44599,44601],{"className":30391,"code":44600,"language":30393,"meta":30,"style":30},"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",[141,44602,44603,44609,44619,44629,44633,44643,44654,44658,44662,44666,44674,44690,44700,44716,44726,44740,44744,44754,44764,44774,44780,44784,44788,44796,44800,44816,44824,44828,44832,44840,44848,44852,44856,44860,44864,44870,44874,44884,44892,44900,44904,44908,44912,44920,44924,44940,44944,44948,44952,44964,44968,44980,44984,44988,45000,45004,45014,45018,45022,45034,45038,45046,45050,45054,45062,45066,45074,45078,45082,45086,45090,45094,45110,45118,45122,45126,45174,45180,45184,45194,45202,45210,45214,45218,45222,45226,45234,45238,45254,45258,45266,45274],{"__ignoreMap":30},[144,44604,44605,44607],{"class":146,"line":147},[144,44606,30405],{"class":150},[144,44608,30408],{"class":154},[144,44610,44611,44613,44615,44617],{"class":146,"line":66},[144,44612,30405],{"class":150},[144,44614,31428],{"class":154},[144,44616,31396],{"class":150},[144,44618,31433],{"class":154},[144,44620,44621,44623,44625,44627],{"class":146,"line":1210},[144,44622,30750],{"class":150},[144,44624,31411],{"class":154},[144,44626,30405],{"class":150},[144,44628,31416],{"class":154},[144,44630,44631],{"class":146,"line":1225},[144,44632,33935],{"class":213},[144,44634,44635,44637,44639,44641],{"class":146,"line":1231},[144,44636,30750],{"class":150},[144,44638,31381],{"class":154},[144,44640,30405],{"class":150},[144,44642,31386],{"class":154},[144,44644,44645,44647,44649,44651],{"class":146,"line":1245},[144,44646,30750],{"class":150},[144,44648,31927],{"class":154},[144,44650,30405],{"class":150},[144,44652,44653],{"class":154}," GoogLeNet,Inception\n",[144,44655,44656],{"class":146,"line":1251},[144,44657,2430],{"emptyLinePlaceholder":72},[144,44659,44660],{"class":146,"line":1342},[144,44661,2430],{"emptyLinePlaceholder":72},[144,44663,44664],{"class":146,"line":1348},[144,44665,33964],{"class":213},[144,44667,44668,44670,44672],{"class":146,"line":1360},[144,44669,31960],{"class":150},[144,44671,33971],{"class":1993},[144,44673,31966],{"class":154},[144,44675,44676,44678,44680,44682,44684,44686,44688],{"class":146,"line":1642},[144,44677,33978],{"class":154},[144,44679,200],{"class":150},[144,44681,31468],{"class":154},[144,44683,31471],{"class":5247},[144,44685,200],{"class":150},[144,44687,31476],{"class":259},[144,44689,31479],{"class":154},[144,44691,44692,44694,44696,44698],{"class":146,"line":1647},[144,44693,33995],{"class":5247},[144,44695,200],{"class":150},[144,44697,34000],{"class":203},[144,44699,31479],{"class":154},[144,44701,44702,44704,44706,44708,44710,44712,44714],{"class":146,"line":1653},[144,44703,34007],{"class":5247},[144,44705,200],{"class":150},[144,44707,31506],{"class":154},[144,44709,31509],{"class":5247},[144,44711,200],{"class":150},[144,44713,35462],{"class":203},[144,44715,31517],{"class":154},[144,44717,44718,44720,44722,44724],{"class":146,"line":1658},[144,44719,34024],{"class":5247},[144,44721,200],{"class":150},[144,44723,31489],{"class":203},[144,44725,161],{"class":154},[144,44727,44728,44730,44732,44734,44736,44738],{"class":146,"line":1672},[144,44729,34035],{"class":154},[144,44731,200],{"class":150},[144,44733,31547],{"class":154},[144,44735,31550],{"class":5247},[144,44737,200],{"class":150},[144,44739,34046],{"class":154},[144,44741,44742],{"class":146,"line":1677},[144,44743,34051],{"class":213},[144,44745,44746,44748,44750,44752],{"class":146,"line":1683},[144,44747,34056],{"class":5247},[144,44749,200],{"class":150},[144,44751,372],{"class":203},[144,44753,31479],{"class":154},[144,44755,44756,44758,44760,44762],{"class":146,"line":1704},[144,44757,34067],{"class":5247},[144,44759,200],{"class":150},[144,44761,31489],{"class":203},[144,44763,31479],{"class":154},[144,44765,44766,44768,44770,44772],{"class":146,"line":1709},[144,44767,34078],{"class":5247},[144,44769,200],{"class":150},[144,44771,346],{"class":203},[144,44773,161],{"class":154},[144,44775,44776,44778],{"class":146,"line":1723},[144,44777,4120],{"class":150},[144,44779,34091],{"class":154},[144,44781,44782],{"class":146,"line":1728},[144,44783,2430],{"emptyLinePlaceholder":72},[144,44785,44786],{"class":146,"line":1757},[144,44787,34100],{"class":213},[144,44789,44790,44792,44794],{"class":146,"line":1762},[144,44791,31960],{"class":150},[144,44793,34107],{"class":1993},[144,44795,34110],{"class":154},[144,44797,44798],{"class":146,"line":1779},[144,44799,34115],{"class":213},[144,44801,44802,44804,44806,44808,44810,44812,44814],{"class":146,"line":1784},[144,44803,31250],{"class":154},[144,44805,200],{"class":150},[144,44807,31257],{"class":259},[144,44809,1734],{"class":150},[144,44811,31262],{"class":154},[144,44813,1731],{"class":150},[144,44815,34132],{"class":259},[144,44817,44818,44820,44822],{"class":146,"line":1789},[144,44819,31302],{"class":154},[144,44821,200],{"class":150},[144,44823,32302],{"class":154},[144,44825,44826],{"class":146,"line":1794},[144,44827,2430],{"emptyLinePlaceholder":72},[144,44829,44830],{"class":146,"line":1808},[144,44831,34149],{"class":213},[144,44833,44834,44836,44838],{"class":146,"line":1813},[144,44835,34154],{"class":154},[144,44837,200],{"class":150},[144,44839,32355],{"class":203},[144,44841,44842,44844,44846],{"class":146,"line":2607},[144,44843,34163],{"class":154},[144,44845,200],{"class":150},[144,44847,3115],{"class":203},[144,44849,44850],{"class":146,"line":2621},[144,44851,2430],{"emptyLinePlaceholder":72},[144,44853,44854],{"class":146,"line":2629},[144,44855,34176],{"class":213},[144,44857,44858],{"class":146,"line":2634},[144,44859,34181],{"class":213},[144,44861,44862],{"class":146,"line":2640},[144,44863,34186],{"class":213},[144,44865,44866,44868],{"class":146,"line":2646},[144,44867,34191],{"class":150},[144,44869,32897],{"class":154},[144,44871,44872],{"class":146,"line":2651},[144,44873,34198],{"class":213},[144,44875,44876,44878,44880,44882],{"class":146,"line":7979},[144,44877,3433],{"class":150},[144,44879,34205],{"class":154},[144,44881,26056],{"class":150},[144,44883,34210],{"class":154},[144,44885,44886,44888,44890],{"class":146,"line":8003},[144,44887,34215],{"class":154},[144,44889,200],{"class":150},[144,44891,34220],{"class":154},[144,44893,44894,44896,44898],{"class":146,"line":8008},[144,44895,34225],{"class":154},[144,44897,200],{"class":150},[144,44899,34230],{"class":154},[144,44901,44902],{"class":146,"line":8014},[144,44903,34235],{"class":213},[144,44905,44906],{"class":146,"line":8041},[144,44907,32888],{"class":154},[144,44909,44910],{"class":146,"line":8046},[144,44911,34244],{"class":213},[144,44913,44914,44916,44918],{"class":146,"line":8052},[144,44915,32673],{"class":154},[144,44917,200],{"class":150},[144,44919,34253],{"class":154},[144,44921,44922],{"class":146,"line":8064},[144,44923,34258],{"class":213},[144,44925,44926,44928,44930,44932,44934,44936,44938],{"class":146,"line":8076},[144,44927,32690],{"class":154},[144,44929,200],{"class":150},[144,44931,32695],{"class":154},[144,44933,32698],{"class":5247},[144,44935,200],{"class":150},[144,44937,372],{"class":203},[144,44939,161],{"class":154},[144,44941,44942],{"class":146,"line":8088},[144,44943,34279],{"class":213},[144,44945,44946],{"class":146,"line":9747},[144,44947,34284],{"class":213},[144,44949,44950],{"class":146,"line":9772},[144,44951,34289],{"class":213},[144,44953,44954,44956,44958,44960,44962],{"class":146,"line":9795},[144,44955,34294],{"class":154},[144,44957,9508],{"class":150},[144,44959,32800],{"class":154},[144,44961,2979],{"class":150},[144,44963,34303],{"class":154},[144,44965,44966],{"class":146,"line":9819},[144,44967,34308],{"class":213},[144,44969,44970,44972,44974,44976,44978],{"class":146,"line":9824},[144,44971,34313],{"class":154},[144,44973,9508],{"class":150},[144,44975,34318],{"class":154},[144,44977,346],{"class":203},[144,44979,161],{"class":154},[144,44981,44982],{"class":146,"line":9829},[144,44983,2430],{"emptyLinePlaceholder":72},[144,44985,44986],{"class":146,"line":9834},[144,44987,34331],{"class":213},[144,44989,44990,44992,44994,44996,44998],{"class":146,"line":9843},[144,44991,34336],{"class":154},[144,44993,200],{"class":150},[144,44995,34341],{"class":154},[144,44997,739],{"class":150},[144,44999,34346],{"class":154},[144,45001,45002],{"class":146,"line":9848},[144,45003,34351],{"class":213},[144,45005,45006,45008,45010,45012],{"class":146,"line":9854},[144,45007,32464],{"class":203},[144,45009,155],{"class":154},[144,45011,34360],{"class":259},[144,45013,34363],{"class":154},[144,45015,45016],{"class":146,"line":9875},[144,45017,2430],{"emptyLinePlaceholder":72},[144,45019,45020],{"class":146,"line":9881},[144,45021,34372],{"class":213},[144,45023,45024,45026,45028,45030,45032],{"class":146,"line":9895},[144,45025,1561],{"class":150},[144,45027,31233],{"class":203},[144,45029,2979],{"class":150},[144,45031,31238],{"class":259},[144,45033,3769],{"class":154},[144,45035,45036],{"class":146,"line":9901},[144,45037,34389],{"class":213},[144,45039,45040,45042,45044],{"class":146,"line":9928},[144,45041,31302],{"class":154},[144,45043,200],{"class":150},[144,45045,44564],{"class":154},[144,45047,45048],{"class":146,"line":9937},[144,45049,34402],{"class":213},[144,45051,45052],{"class":146,"line":9943},[144,45053,34407],{"class":213},[144,45055,45056,45058,45060],{"class":146,"line":9951},[144,45057,34412],{"class":154},[144,45059,34415],{"class":259},[144,45061,30510],{"class":154},[144,45063,45064],{"class":146,"line":9956},[144,45065,34422],{"class":213},[144,45067,45068,45070,45072],{"class":146,"line":16635},[144,45069,34035],{"class":154},[144,45071,200],{"class":150},[144,45073,34431],{"class":154},[144,45075,45076],{"class":146,"line":16641},[144,45077,34436],{"class":213},[144,45079,45080],{"class":146,"line":16664},[144,45081,34441],{"class":154},[144,45083,45084],{"class":146,"line":16670},[144,45085,2430],{"emptyLinePlaceholder":72},[144,45087,45088],{"class":146,"line":16693},[144,45089,34450],{"class":213},[144,45091,45092],{"class":146,"line":16707},[144,45093,34455],{"class":213},[144,45095,45096,45098,45100,45102,45104,45106,45108],{"class":146,"line":16727},[144,45097,31250],{"class":154},[144,45099,200],{"class":150},[144,45101,31257],{"class":259},[144,45103,1734],{"class":150},[144,45105,31262],{"class":154},[144,45107,1731],{"class":150},[144,45109,34132],{"class":259},[144,45111,45112,45114,45116],{"class":146,"line":16733},[144,45113,31302],{"class":154},[144,45115,200],{"class":150},[144,45117,32302],{"class":154},[144,45119,45120],{"class":146,"line":16744},[144,45121,34484],{"class":213},[144,45123,45124],{"class":146,"line":16767},[144,45125,34489],{"class":213},[144,45127,45128,45130,45132,45134,45136,45138,45140,45142,45144,45146,45148,45150,45152,45154,45156,45158,45160,45162,45164,45166,45168,45170,45172],{"class":146,"line":16789},[144,45129,34494],{"class":154},[144,45131,200],{"class":150},[144,45133,1045],{"class":154},[144,45135,34501],{"class":259},[144,45137,533],{"class":154},[144,45139,34506],{"class":259},[144,45141,533],{"class":154},[144,45143,34511],{"class":259},[144,45145,533],{"class":154},[144,45147,34516],{"class":259},[144,45149,533],{"class":154},[144,45151,34521],{"class":259},[144,45153,533],{"class":154},[144,45155,34526],{"class":259},[144,45157,533],{"class":154},[144,45159,34531],{"class":259},[144,45161,533],{"class":154},[144,45163,34536],{"class":259},[144,45165,533],{"class":154},[144,45167,34541],{"class":259},[144,45169,533],{"class":154},[144,45171,34546],{"class":259},[144,45173,33259],{"class":154},[144,45175,45176,45178],{"class":146,"line":16794},[144,45177,34191],{"class":150},[144,45179,32897],{"class":154},[144,45181,45182],{"class":146,"line":16800},[144,45183,34559],{"class":213},[144,45185,45186,45188,45190,45192],{"class":146,"line":16814},[144,45187,3433],{"class":150},[144,45189,34566],{"class":154},[144,45191,26056],{"class":150},[144,45193,34210],{"class":154},[144,45195,45196,45198,45200],{"class":146,"line":16827},[144,45197,32623],{"class":154},[144,45199,200],{"class":150},[144,45201,32628],{"class":154},[144,45203,45204,45206,45208],{"class":146,"line":16832},[144,45205,32638],{"class":154},[144,45207,200],{"class":150},[144,45209,32643],{"class":154},[144,45211,45212],{"class":146,"line":16846},[144,45213,2430],{"emptyLinePlaceholder":72},[144,45215,45216],{"class":146,"line":16851},[144,45217,34595],{"class":213},[144,45219,45220],{"class":146,"line":16857},[144,45221,32888],{"class":154},[144,45223,45224],{"class":146,"line":16862},[144,45225,34604],{"class":213},[144,45227,45228,45230,45232],{"class":146,"line":16876},[144,45229,32673],{"class":154},[144,45231,200],{"class":150},[144,45233,32678],{"class":154},[144,45235,45236],{"class":146,"line":16881},[144,45237,34617],{"class":213},[144,45239,45240,45242,45244,45246,45248,45250,45252],{"class":146,"line":16886},[144,45241,32690],{"class":154},[144,45243,200],{"class":150},[144,45245,32695],{"class":154},[144,45247,32698],{"class":5247},[144,45249,200],{"class":150},[144,45251,372],{"class":203},[144,45253,161],{"class":154},[144,45255,45256],{"class":146,"line":16900},[144,45257,34638],{"class":213},[144,45259,45260,45262,45264],{"class":146,"line":16912},[144,45261,34643],{"class":154},[144,45263,200],{"class":150},[144,45265,34648],{"class":154},[144,45267,45268,45270,45272],{"class":146,"line":16917},[144,45269,34653],{"class":154},[144,45271,200],{"class":150},[144,45273,34658],{"class":154},[144,45275,45276,45278,45280,45282,45284,45286,45288,45290],{"class":146,"line":16930},[144,45277,34663],{"class":203},[144,45279,155],{"class":154},[144,45281,34668],{"class":259},[144,45283,34671],{"class":154},[144,45285,34674],{"class":259},[144,45287,533],{"class":154},[144,45289,34679],{"class":259},[144,45291,34682],{"class":154},[115,45293,45295],{"id":45294},"_24训练自己的数据集","2.4.训练自己的数据集",[14,45297,45298],{},"猫狗分类任务",[14,45300,45301],{},"划分数据集和验证集",[135,45303,45305],{"className":30391,"code":45304,"language":30393,"meta":30,"style":30},"# 创建脚本，用于划分数据集和验证集\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",[141,45306,45307,45312,45319,45324,45335,45342,45346,45356,45370,45379,45383,45388,45398,45418,45422,45427,45437,45448,45461,45465,45470,45479,45489,45500,45504,45509,45519,45523,45528,45533,45538,45543,45548,45552,45562,45589,45602,45614,45641,45646,45651,45665,45670,45682,45697,45712,45720,45724,45729,45735,45747,45760,45765,45770,45775,45825,45831,45835],{"__ignoreMap":30},[144,45308,45309],{"class":146,"line":147},[144,45310,45311],{"class":213},"# 创建脚本，用于划分数据集和验证集\n",[144,45313,45314,45316],{"class":146,"line":66},[144,45315,30405],{"class":150},[144,45317,45318],{"class":154}," os\n",[144,45320,45321],{"class":146,"line":1210},[144,45322,45323],{"class":213},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[144,45325,45326,45328,45331,45333],{"class":146,"line":1225},[144,45327,30750],{"class":150},[144,45329,45330],{"class":154}," shutil ",[144,45332,30405],{"class":150},[144,45334,31835],{"class":154},[144,45336,45337,45339],{"class":146,"line":1231},[144,45338,30405],{"class":150},[144,45340,45341],{"class":154}," random\n",[144,45343,45344],{"class":146,"line":1245},[144,45345,2430],{"emptyLinePlaceholder":72},[144,45347,45348,45350,45353],{"class":146,"line":1251},[144,45349,31960],{"class":150},[144,45351,45352],{"class":1993}," mkfile",[144,45354,45355],{"class":154},"(file):\n",[144,45357,45358,45360,45362,45365,45368],{"class":146,"line":1342},[144,45359,3131],{"class":150},[144,45361,38943],{"class":150},[144,45363,45364],{"class":154}," os.path.exists(",[144,45366,45367],{"class":5247},"file",[144,45369,30799],{"class":154},[144,45371,45372,45375,45377],{"class":146,"line":1348},[144,45373,45374],{"class":154},"        os.makedirs(",[144,45376,45367],{"class":5247},[144,45378,161],{"class":154},[144,45380,45381],{"class":146,"line":1360},[144,45382,2430],{"emptyLinePlaceholder":72},[144,45384,45385],{"class":146,"line":1642},[144,45386,45387],{"class":213},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[144,45389,45390,45393,45395],{"class":146,"line":1647},[144,45391,45392],{"class":154},"file_path",[144,45394,200],{"class":150},[144,45396,45397],{"class":259},"'data_cat_dog'\n",[144,45399,45400,45403,45405,45408,45410,45413,45415],{"class":146,"line":1653},[144,45401,45402],{"class":154},"flower_class",[144,45404,200],{"class":150},[144,45406,45407],{"class":154},"[cla ",[144,45409,3055],{"class":150},[144,45411,45412],{"class":154}," cla ",[144,45414,26056],{"class":150},[144,45416,45417],{"class":154}," os.listdir(file_path)]\n",[144,45419,45420],{"class":146,"line":1658},[144,45421,2430],{"emptyLinePlaceholder":72},[144,45423,45424],{"class":146,"line":1672},[144,45425,45426],{"class":213},"# 创建训练集train文件夹\n",[144,45428,45429,45432,45435],{"class":146,"line":1677},[144,45430,45431],{"class":154},"mkfile(",[144,45433,45434],{"class":259},"'data\u002Ftrain'",[144,45436,161],{"class":154},[144,45438,45439,45441,45443,45445],{"class":146,"line":1683},[144,45440,3055],{"class":150},[144,45442,45412],{"class":154},[144,45444,26056],{"class":150},[144,45446,45447],{"class":154}," flower_class:\n",[144,45449,45450,45453,45456,45458],{"class":146,"line":1704},[144,45451,45452],{"class":154},"    mkfile(",[144,45454,45455],{"class":259},"'data\u002Ftrain\u002F'",[144,45457,636],{"class":150},[144,45459,45460],{"class":154},"cla)\n",[144,45462,45463],{"class":146,"line":1709},[144,45464,2430],{"emptyLinePlaceholder":72},[144,45466,45467],{"class":146,"line":1723},[144,45468,45469],{"class":213},"# 创建验证集val文件夹\n",[144,45471,45472,45474,45477],{"class":146,"line":1728},[144,45473,45431],{"class":154},[144,45475,45476],{"class":259},"'data\u002Ftest'",[144,45478,161],{"class":154},[144,45480,45481,45483,45485,45487],{"class":146,"line":1757},[144,45482,3055],{"class":150},[144,45484,45412],{"class":154},[144,45486,26056],{"class":150},[144,45488,45447],{"class":154},[144,45490,45491,45493,45496,45498],{"class":146,"line":1762},[144,45492,45452],{"class":154},[144,45494,45495],{"class":259},"'data\u002Ftest\u002F'",[144,45497,636],{"class":150},[144,45499,45460],{"class":154},[144,45501,45502],{"class":146,"line":1779},[144,45503,2430],{"emptyLinePlaceholder":72},[144,45505,45506],{"class":146,"line":1784},[144,45507,45508],{"class":213},"# 划分比例，训练集：测试集=9：1\n",[144,45510,45511,45514,45516],{"class":146,"line":1789},[144,45512,45513],{"class":154},"split_rate",[144,45515,200],{"class":150},[144,45517,45518],{"class":203},"0.1\n",[144,45520,45521],{"class":146,"line":1794},[144,45522,2430],{"emptyLinePlaceholder":72},[144,45524,45525],{"class":146,"line":1808},[144,45526,45527],{"class":213},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[144,45529,45530],{"class":146,"line":1813},[144,45531,45532],{"class":213},"# cla_path：当前类别的原始图片路径\n",[144,45534,45535],{"class":146,"line":2607},[144,45536,45537],{"class":213},"# images：当前类别下所有图片的文件名列表\n",[144,45539,45540],{"class":146,"line":2621},[144,45541,45542],{"class":213},"# num：该类别图片总数\n",[144,45544,45545],{"class":146,"line":2629},[144,45546,45547],{"class":213},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[144,45549,45550],{"class":146,"line":2634},[144,45551,2430],{"emptyLinePlaceholder":72},[144,45553,45554,45556,45558,45560],{"class":146,"line":2640},[144,45555,3055],{"class":150},[144,45557,45412],{"class":154},[144,45559,26056],{"class":150},[144,45561,45447],{"class":154},[144,45563,45564,45567,45569,45572,45574,45577,45580,45582,45584,45586],{"class":146,"line":2646},[144,45565,45566],{"class":154},"    cla_path ",[144,45568,200],{"class":150},[144,45570,45571],{"class":154}," file_path ",[144,45573,636],{"class":150},[144,45575,45576],{"class":259}," '\u002F'",[144,45578,45579],{"class":150}," +",[144,45581,45412],{"class":154},[144,45583,636],{"class":150},[144,45585,45576],{"class":259},[144,45587,45588],{"class":213},"  # 某一类别的子目录\n",[144,45590,45591,45594,45596,45599],{"class":146,"line":2651},[144,45592,45593],{"class":154},"    images ",[144,45595,200],{"class":150},[144,45597,45598],{"class":154}," os.listdir(cla_path)  ",[144,45600,45601],{"class":213},"# iamges 列表存储了该目录下所有图像的名称\n",[144,45603,45604,45607,45609,45611],{"class":146,"line":7979},[144,45605,45606],{"class":154},"    num ",[144,45608,200],{"class":150},[144,45610,7362],{"class":203},[144,45612,45613],{"class":154},"(images)\n",[144,45615,45616,45619,45621,45624,45626,45628,45630,45633,45635,45638],{"class":146,"line":8003},[144,45617,45618],{"class":154},"    eval_index ",[144,45620,200],{"class":150},[144,45622,45623],{"class":154}," random.sample(images, ",[144,45625,648],{"class":5247},[144,45627,200],{"class":150},[144,45629,158],{"class":203},[144,45631,45632],{"class":154},"(num ",[144,45634,610],{"class":150},[144,45636,45637],{"class":154}," split_rate))  ",[144,45639,45640],{"class":213},"# 从images列表中随机抽取 k 个图像名称\n",[144,45642,45643],{"class":146,"line":8008},[144,45644,45645],{"class":213},"    # 遍历该类别下的所有图片\n",[144,45647,45648],{"class":146,"line":8014},[144,45649,45650],{"class":213},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[144,45652,45653,45655,45658,45660,45662],{"class":146,"line":8041},[144,45654,3231],{"class":150},[144,45656,45657],{"class":154}," index, image ",[144,45659,26056],{"class":150},[144,45661,31619],{"class":203},[144,45663,45664],{"class":154},"(images):\n",[144,45666,45667],{"class":146,"line":8046},[144,45668,45669],{"class":213},"        # eval_index 中保存验证集val的图像名称\n",[144,45671,45672,45674,45677,45679],{"class":146,"line":8052},[144,45673,2527],{"class":150},[144,45675,45676],{"class":154}," image ",[144,45678,26056],{"class":150},[144,45680,45681],{"class":154}," eval_index:\n",[144,45683,45684,45687,45689,45692,45694],{"class":146,"line":8064},[144,45685,45686],{"class":154},"            image_path ",[144,45688,200],{"class":150},[144,45690,45691],{"class":154}," cla_path ",[144,45693,636],{"class":150},[144,45695,45696],{"class":154}," image\n",[144,45698,45699,45702,45704,45707,45709],{"class":146,"line":8076},[144,45700,45701],{"class":154},"            new_path ",[144,45703,200],{"class":150},[144,45705,45706],{"class":259}," 'data\u002Ftest\u002F'",[144,45708,45579],{"class":150},[144,45710,45711],{"class":154}," cla\n",[144,45713,45714,45717],{"class":146,"line":8088},[144,45715,45716],{"class":154},"            copy(image_path, new_path)  ",[144,45718,45719],{"class":213},"# 将选中的图像复制到新路径\n",[144,45721,45722],{"class":146,"line":9747},[144,45723,2430],{"emptyLinePlaceholder":72},[144,45725,45726],{"class":146,"line":9772},[144,45727,45728],{"class":213},"        # 其余的图像保存在训练集train中\n",[144,45730,45731,45733],{"class":146,"line":9795},[144,45732,2564],{"class":150},[144,45734,3769],{"class":154},[144,45736,45737,45739,45741,45743,45745],{"class":146,"line":9819},[144,45738,45686],{"class":154},[144,45740,200],{"class":150},[144,45742,45691],{"class":154},[144,45744,636],{"class":150},[144,45746,45696],{"class":154},[144,45748,45749,45751,45753,45756,45758],{"class":146,"line":9824},[144,45750,45701],{"class":154},[144,45752,200],{"class":150},[144,45754,45755],{"class":259}," 'data\u002Ftrain\u002F'",[144,45757,45579],{"class":150},[144,45759,45711],{"class":154},[144,45761,45762],{"class":146,"line":9829},[144,45763,45764],{"class":154},"            copy(image_path, new_path)\n",[144,45766,45767],{"class":146,"line":9834},[144,45768,45769],{"class":213},"            # 打印进度条信息\n",[144,45771,45772],{"class":146,"line":9843},[144,45773,45774],{"class":213},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[144,45776,45777,45779,45781,45783,45786,45788,45790,45793,45795,45797,45799,45802,45805,45807,45809,45812,45815,45817,45819,45822],{"class":146,"line":9848},[144,45778,32464],{"class":203},[144,45780,155],{"class":154},[144,45782,406],{"class":259},[144,45784,45785],{"class":203},"\\r",[144,45787,1045],{"class":259},[144,45789,32472],{"class":203},[144,45791,45792],{"class":259},"] processing [",[144,45794,32472],{"class":203},[144,45796,739],{"class":259},[144,45798,32472],{"class":203},[144,45800,45801],{"class":259},"]\"",[144,45803,45804],{"class":154},".format(cla, index ",[144,45806,636],{"class":150},[144,45808,25131],{"class":203},[144,45810,45811],{"class":154},", num), ",[144,45813,45814],{"class":5247},"end",[144,45816,200],{"class":150},[144,45818,7683],{"class":259},[144,45820,45821],{"class":154},")  ",[144,45823,45824],{"class":213},"# processing bar\n",[144,45826,45827,45829],{"class":146,"line":9854},[144,45828,31312],{"class":203},[144,45830,2006],{"class":154},[144,45832,45833],{"class":146,"line":9875},[144,45834,2430],{"emptyLinePlaceholder":72},[144,45836,45837,45839,45841,45844],{"class":146,"line":9881},[144,45838,30428],{"class":203},[144,45840,155],{"class":154},[144,45842,45843],{"class":259},"\"processing done!\"",[144,45845,161],{"class":154},[14,45847,45848],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22029,45850,45852],{"id":45851},"_242模型代码","2.4.2.模型代码",[14,45854,45855],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[135,45857,45859],{"className":30391,"code":45858,"language":30393,"meta":30,"style":30},"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",[141,45860,45861,45867,45877,45887,45891,45907,45915,45929,45939,45943,45973,45977,46011,46057,46061,46095,46141,46145,46149,46183,46213,46217,46225,46239,46261,46283,46301,46305,46319,46323,46327,46343,46347,46355,46369,46379,46423,46427,46455,46459,46469,46497,46501,46537,46541,46569,46573,46583,46615,46647,46675,46679,46689,46721,46753,46785,46817,46849,46877,46881,46891,46923,46955,46967,46971,46983,46987,46991,47003,47011,47031,47035,47039,47043,47047,47051,47055,47069,47077,47085,47097,47111,47119,47123,47131,47141,47151,47161,47171,47181,47187,47191,47195,47207,47227,47235],{"__ignoreMap":30},[144,45862,45863,45865],{"class":146,"line":147},[144,45864,30405],{"class":150},[144,45866,30408],{"class":154},[144,45868,45869,45871,45873,45875],{"class":146,"line":66},[144,45870,30750],{"class":150},[144,45872,30753],{"class":154},[144,45874,30405],{"class":150},[144,45876,30758],{"class":154},[144,45878,45879,45881,45883,45885],{"class":146,"line":1210},[144,45880,30750],{"class":150},[144,45882,30770],{"class":154},[144,45884,30405],{"class":150},[144,45886,30775],{"class":154},[144,45888,45889],{"class":146,"line":1225},[144,45890,2430],{"emptyLinePlaceholder":72},[144,45892,45893,45895,45897,45899,45901,45903,45905],{"class":146,"line":1231},[144,45894,14725],{"class":150},[144,45896,41506],{"class":1993},[144,45898,155],{"class":154},[144,45900,30791],{"class":1993},[144,45902,713],{"class":154},[144,45904,30796],{"class":1993},[144,45906,30799],{"class":154},[144,45908,45909,45911,45913],{"class":146,"line":1245},[144,45910,30814],{"class":150},[144,45912,30817],{"class":203},[144,45914,41525],{"class":154},[144,45916,45917,45919,45921,45923,45925,45927],{"class":146,"line":1251},[144,45918,30830],{"class":203},[144,45920,41532],{"class":154},[144,45922,30836],{"class":203},[144,45924,30839],{"class":154},[144,45926,30842],{"class":203},[144,45928,2006],{"class":154},[144,45930,45931,45933,45935,45937],{"class":146,"line":1342},[144,45932,30858],{"class":203},[144,45934,34784],{"class":154},[144,45936,200],{"class":150},[144,45938,34789],{"class":154},[144,45940,45941],{"class":146,"line":1348},[144,45942,41555],{"class":213},[144,45944,45945,45947,45949,45951,45953,45955,45957,45959,45961,45963,45965,45967,45969,45971],{"class":146,"line":1360},[144,45946,30858],{"class":203},[144,45948,41562],{"class":154},[144,45950,200],{"class":150},[144,45952,30866],{"class":154},[144,45954,30869],{"class":5247},[144,45956,200],{"class":150},[144,45958,41573],{"class":154},[144,45960,30878],{"class":5247},[144,45962,200],{"class":150},[144,45964,41580],{"class":154},[144,45966,30887],{"class":5247},[144,45968,200],{"class":150},[144,45970,372],{"class":203},[144,45972,161],{"class":154},[144,45974,45975],{"class":146,"line":1642},[144,45976,41593],{"class":213},[144,45978,45979,45981,45983,45985,45987,45989,45991,45993,45995,45997,45999,46001,46003,46005,46007,46009],{"class":146,"line":1647},[144,45980,30858],{"class":203},[144,45982,41600],{"class":154},[144,45984,200],{"class":150},[144,45986,30866],{"class":154},[144,45988,30869],{"class":5247},[144,45990,200],{"class":150},[144,45992,41573],{"class":154},[144,45994,30878],{"class":5247},[144,45996,200],{"class":150},[144,45998,41617],{"class":154},[144,46000,346],{"class":203},[144,46002,41622],{"class":154},[144,46004,30887],{"class":5247},[144,46006,200],{"class":150},[144,46008,372],{"class":203},[144,46010,161],{"class":154},[144,46012,46013,46015,46017,46019,46021,46023,46025,46027,46029,46031,46033,46035,46037,46039,46041,46043,46045,46047,46049,46051,46053,46055],{"class":146,"line":1653},[144,46014,30858],{"class":203},[144,46016,41637],{"class":154},[144,46018,200],{"class":150},[144,46020,30866],{"class":154},[144,46022,30869],{"class":5247},[144,46024,200],{"class":150},[144,46026,41617],{"class":154},[144,46028,346],{"class":203},[144,46030,41622],{"class":154},[144,46032,30878],{"class":5247},[144,46034,200],{"class":150},[144,46036,41617],{"class":154},[144,46038,372],{"class":203},[144,46040,41622],{"class":154},[144,46042,30887],{"class":5247},[144,46044,200],{"class":150},[144,46046,226],{"class":203},[144,46048,533],{"class":154},[144,46050,30896],{"class":5247},[144,46052,200],{"class":150},[144,46054,372],{"class":203},[144,46056,161],{"class":154},[144,46058,46059],{"class":146,"line":1658},[144,46060,41682],{"class":213},[144,46062,46063,46065,46067,46069,46071,46073,46075,46077,46079,46081,46083,46085,46087,46089,46091,46093],{"class":146,"line":1672},[144,46064,30858],{"class":203},[144,46066,41689],{"class":154},[144,46068,200],{"class":150},[144,46070,30866],{"class":154},[144,46072,30869],{"class":5247},[144,46074,200],{"class":150},[144,46076,41573],{"class":154},[144,46078,30878],{"class":5247},[144,46080,200],{"class":150},[144,46082,41706],{"class":154},[144,46084,346],{"class":203},[144,46086,41622],{"class":154},[144,46088,30887],{"class":5247},[144,46090,200],{"class":150},[144,46092,372],{"class":203},[144,46094,161],{"class":154},[144,46096,46097,46099,46101,46103,46105,46107,46109,46111,46113,46115,46117,46119,46121,46123,46125,46127,46129,46131,46133,46135,46137,46139],{"class":146,"line":1677},[144,46098,30858],{"class":203},[144,46100,41725],{"class":154},[144,46102,200],{"class":150},[144,46104,30866],{"class":154},[144,46106,30869],{"class":5247},[144,46108,200],{"class":150},[144,46110,41706],{"class":154},[144,46112,346],{"class":203},[144,46114,41622],{"class":154},[144,46116,30878],{"class":5247},[144,46118,200],{"class":150},[144,46120,41706],{"class":154},[144,46122,372],{"class":203},[144,46124,41622],{"class":154},[144,46126,30887],{"class":5247},[144,46128,200],{"class":150},[144,46130,474],{"class":203},[144,46132,533],{"class":154},[144,46134,30896],{"class":5247},[144,46136,200],{"class":150},[144,46138,232],{"class":203},[144,46140,161],{"class":154},[144,46142,46143],{"class":146,"line":1683},[144,46144,41770],{"class":213},[144,46146,46147],{"class":146,"line":1704},[144,46148,41775],{"class":213},[144,46150,46151,46153,46155,46157,46159,46161,46163,46165,46167,46169,46171,46173,46175,46177,46179,46181],{"class":146,"line":1709},[144,46152,30858],{"class":203},[144,46154,41782],{"class":154},[144,46156,200],{"class":150},[144,46158,34842],{"class":154},[144,46160,30887],{"class":5247},[144,46162,200],{"class":150},[144,46164,226],{"class":203},[144,46166,533],{"class":154},[144,46168,30942],{"class":5247},[144,46170,200],{"class":150},[144,46172,372],{"class":203},[144,46174,533],{"class":154},[144,46176,30896],{"class":5247},[144,46178,200],{"class":150},[144,46180,372],{"class":203},[144,46182,161],{"class":154},[144,46184,46185,46187,46189,46191,46193,46195,46197,46199,46201,46203,46205,46207,46209,46211],{"class":146,"line":1723},[144,46186,30858],{"class":203},[144,46188,41817],{"class":154},[144,46190,200],{"class":150},[144,46192,30866],{"class":154},[144,46194,30869],{"class":5247},[144,46196,200],{"class":150},[144,46198,41573],{"class":154},[144,46200,30878],{"class":5247},[144,46202,200],{"class":150},[144,46204,41834],{"class":154},[144,46206,30887],{"class":5247},[144,46208,200],{"class":150},[144,46210,372],{"class":203},[144,46212,161],{"class":154},[144,46214,46215],{"class":146,"line":1728},[144,46216,2430],{"emptyLinePlaceholder":72},[144,46218,46219,46221,46223],{"class":146,"line":1757},[144,46220,30814],{"class":150},[144,46222,31106],{"class":1993},[144,46224,31109],{"class":154},[144,46226,46227,46229,46231,46233,46235,46237],{"class":146,"line":1762},[144,46228,41859],{"class":154},[144,46230,200],{"class":150},[144,46232,30836],{"class":203},[144,46234,35197],{"class":154},[144,46236,30836],{"class":203},[144,46238,41870],{"class":154},[144,46240,46241,46243,46245,46247,46249,46251,46253,46255,46257,46259],{"class":146,"line":1779},[144,46242,7116],{"class":154},[144,46244,200],{"class":150},[144,46246,30836],{"class":203},[144,46248,35197],{"class":154},[144,46250,30836],{"class":203},[144,46252,41885],{"class":154},[144,46254,30836],{"class":203},[144,46256,35197],{"class":154},[144,46258,30836],{"class":203},[144,46260,41894],{"class":154},[144,46262,46263,46265,46267,46269,46271,46273,46275,46277,46279,46281],{"class":146,"line":1784},[144,46264,41899],{"class":154},[144,46266,200],{"class":150},[144,46268,30836],{"class":203},[144,46270,35197],{"class":154},[144,46272,30836],{"class":203},[144,46274,41910],{"class":154},[144,46276,30836],{"class":203},[144,46278,35197],{"class":154},[144,46280,30836],{"class":203},[144,46282,41919],{"class":154},[144,46284,46285,46287,46289,46291,46293,46295,46297,46299],{"class":146,"line":1789},[144,46286,41924],{"class":154},[144,46288,200],{"class":150},[144,46290,30836],{"class":203},[144,46292,35197],{"class":154},[144,46294,30836],{"class":203},[144,46296,41935],{"class":154},[144,46298,30836],{"class":203},[144,46300,41940],{"class":154},[144,46302,46303],{"class":146,"line":1794},[144,46304,41945],{"class":213},[144,46306,46307,46309,46311,46313,46315,46317],{"class":146,"line":1808},[144,46308,14783],{"class":150},[144,46310,41952],{"class":154},[144,46312,32698],{"class":5247},[144,46314,200],{"class":150},[144,46316,372],{"class":203},[144,46318,161],{"class":154},[144,46320,46321],{"class":146,"line":1813},[144,46322,2430],{"emptyLinePlaceholder":72},[144,46324,46325],{"class":146,"line":2607},[144,46326,41973],{"class":213},[144,46328,46329,46331,46333,46335,46337,46339,46341],{"class":146,"line":2621},[144,46330,14725],{"class":150},[144,46332,41980],{"class":1993},[144,46334,155],{"class":154},[144,46336,30791],{"class":1993},[144,46338,713],{"class":154},[144,46340,30796],{"class":1993},[144,46342,30799],{"class":154},[144,46344,46345],{"class":146,"line":2629},[144,46346,41995],{"class":213},[144,46348,46349,46351,46353],{"class":146,"line":2634},[144,46350,30814],{"class":150},[144,46352,30817],{"class":203},[144,46354,42004],{"class":154},[144,46356,46357,46359,46361,46363,46365,46367],{"class":146,"line":2640},[144,46358,30830],{"class":203},[144,46360,42011],{"class":154},[144,46362,30836],{"class":203},[144,46364,30839],{"class":154},[144,46366,30842],{"class":203},[144,46368,2006],{"class":154},[144,46370,46371,46373,46375,46377],{"class":146,"line":2646},[144,46372,30858],{"class":203},[144,46374,42026],{"class":154},[144,46376,200],{"class":150},[144,46378,38022],{"class":154},[144,46380,46381,46383,46385,46387,46389,46391,46393,46395,46397,46399,46401,46403,46405,46407,46409,46411,46413,46415,46417,46419,46421],{"class":146,"line":2651},[144,46382,38027],{"class":154},[144,46384,30869],{"class":5247},[144,46386,200],{"class":150},[144,46388,226],{"class":203},[144,46390,533],{"class":154},[144,46392,30878],{"class":5247},[144,46394,200],{"class":150},[144,46396,358],{"class":203},[144,46398,533],{"class":154},[144,46400,30887],{"class":5247},[144,46402,200],{"class":150},[144,46404,524],{"class":203},[144,46406,533],{"class":154},[144,46408,30942],{"class":5247},[144,46410,200],{"class":150},[144,46412,232],{"class":203},[144,46414,533],{"class":154},[144,46416,30896],{"class":5247},[144,46418,200],{"class":150},[144,46420,226],{"class":203},[144,46422,38060],{"class":154},[144,46424,46425],{"class":146,"line":7979},[144,46426,38065],{"class":154},[144,46428,46429,46431,46433,46435,46437,46439,46441,46443,46445,46447,46449,46451,46453],{"class":146,"line":8003},[144,46430,38110],{"class":154},[144,46432,30887],{"class":5247},[144,46434,200],{"class":150},[144,46436,226],{"class":203},[144,46438,533],{"class":154},[144,46440,30942],{"class":5247},[144,46442,200],{"class":150},[144,46444,232],{"class":203},[144,46446,533],{"class":154},[144,46448,30896],{"class":5247},[144,46450,200],{"class":150},[144,46452,372],{"class":203},[144,46454,161],{"class":154},[144,46456,46457],{"class":146,"line":8008},[144,46458,38139],{"class":154},[144,46460,46461,46463,46465,46467],{"class":146,"line":8014},[144,46462,30858],{"class":203},[144,46464,42117],{"class":154},[144,46466,200],{"class":150},[144,46468,38022],{"class":154},[144,46470,46471,46473,46475,46477,46479,46481,46483,46485,46487,46489,46491,46493,46495],{"class":146,"line":8041},[144,46472,38027],{"class":154},[144,46474,30869],{"class":5247},[144,46476,200],{"class":150},[144,46478,358],{"class":203},[144,46480,533],{"class":154},[144,46482,30878],{"class":5247},[144,46484,200],{"class":150},[144,46486,358],{"class":203},[144,46488,533],{"class":154},[144,46490,30887],{"class":5247},[144,46492,200],{"class":150},[144,46494,372],{"class":203},[144,46496,38060],{"class":154},[144,46498,46499],{"class":146,"line":8046},[144,46500,38065],{"class":154},[144,46502,46503,46505,46507,46509,46511,46513,46515,46517,46519,46521,46523,46525,46527,46529,46531,46533,46535],{"class":146,"line":8052},[144,46504,38027],{"class":154},[144,46506,30869],{"class":5247},[144,46508,200],{"class":150},[144,46510,358],{"class":203},[144,46512,533],{"class":154},[144,46514,30878],{"class":5247},[144,46516,200],{"class":150},[144,46518,42172],{"class":203},[144,46520,533],{"class":154},[144,46522,30887],{"class":5247},[144,46524,200],{"class":150},[144,46526,226],{"class":203},[144,46528,533],{"class":154},[144,46530,30896],{"class":5247},[144,46532,200],{"class":150},[144,46534,372],{"class":203},[144,46536,38060],{"class":154},[144,46538,46539],{"class":146,"line":8064},[144,46540,38065],{"class":154},[144,46542,46543,46545,46547,46549,46551,46553,46555,46557,46559,46561,46563,46565,46567],{"class":146,"line":8076},[144,46544,38110],{"class":154},[144,46546,30887],{"class":5247},[144,46548,200],{"class":150},[144,46550,226],{"class":203},[144,46552,533],{"class":154},[144,46554,30942],{"class":5247},[144,46556,200],{"class":150},[144,46558,232],{"class":203},[144,46560,533],{"class":154},[144,46562,30896],{"class":5247},[144,46564,200],{"class":150},[144,46566,372],{"class":203},[144,46568,161],{"class":154},[144,46570,46571],{"class":146,"line":8088},[144,46572,38139],{"class":154},[144,46574,46575,46577,46579,46581],{"class":146,"line":9747},[144,46576,30858],{"class":203},[144,46578,42233],{"class":154},[144,46580,200],{"class":150},[144,46582,38022],{"class":154},[144,46584,46585,46587,46589,46591,46593,46595,46597,46599,46601,46603,46605,46607,46609,46611,46613],{"class":146,"line":9772},[144,46586,42242],{"class":154},[144,46588,42172],{"class":203},[144,46590,533],{"class":154},[144,46592,358],{"class":203},[144,46594,42251],{"class":154},[144,46596,364],{"class":203},[144,46598,533],{"class":154},[144,46600,32083],{"class":203},[144,46602,42260],{"class":154},[144,46604,756],{"class":203},[144,46606,533],{"class":154},[144,46608,352],{"class":203},[144,46610,42269],{"class":154},[144,46612,352],{"class":203},[144,46614,38060],{"class":154},[144,46616,46617,46619,46621,46623,46625,46627,46629,46631,46633,46635,46637,46639,46641,46643,46645],{"class":146,"line":9795},[144,46618,42242],{"class":154},[144,46620,34883],{"class":203},[144,46622,533],{"class":154},[144,46624,32083],{"class":203},[144,46626,42251],{"class":154},[144,46628,32083],{"class":203},[144,46630,533],{"class":154},[144,46632,42172],{"class":203},[144,46634,42260],{"class":154},[144,46636,352],{"class":203},[144,46638,533],{"class":154},[144,46640,364],{"class":203},[144,46642,42269],{"class":154},[144,46644,358],{"class":203},[144,46646,38060],{"class":154},[144,46648,46649,46651,46653,46655,46657,46659,46661,46663,46665,46667,46669,46671,46673],{"class":146,"line":9819},[144,46650,38110],{"class":154},[144,46652,30887],{"class":5247},[144,46654,200],{"class":150},[144,46656,226],{"class":203},[144,46658,533],{"class":154},[144,46660,30942],{"class":5247},[144,46662,200],{"class":150},[144,46664,232],{"class":203},[144,46666,533],{"class":154},[144,46668,30896],{"class":5247},[144,46670,200],{"class":150},[144,46672,372],{"class":203},[144,46674,161],{"class":154},[144,46676,46677],{"class":146,"line":9824},[144,46678,38139],{"class":154},[144,46680,46681,46683,46685,46687],{"class":146,"line":9829},[144,46682,30858],{"class":203},[144,46684,42344],{"class":154},[144,46686,200],{"class":150},[144,46688,38022],{"class":154},[144,46690,46691,46693,46695,46697,46699,46701,46703,46705,46707,46709,46711,46713,46715,46717,46719],{"class":146,"line":9834},[144,46692,42242],{"class":154},[144,46694,42355],{"class":203},[144,46696,533],{"class":154},[144,46698,42172],{"class":203},[144,46700,42251],{"class":154},[144,46702,364],{"class":203},[144,46704,533],{"class":154},[144,46706,42368],{"class":203},[144,46708,42260],{"class":154},[144,46710,756],{"class":203},[144,46712,533],{"class":154},[144,46714,762],{"class":203},[144,46716,42269],{"class":154},[144,46718,358],{"class":203},[144,46720,38060],{"class":154},[144,46722,46723,46725,46727,46729,46731,46733,46735,46737,46739,46741,46743,46745,46747,46749,46751],{"class":146,"line":9843},[144,46724,42242],{"class":154},[144,46726,38470],{"class":203},[144,46728,533],{"class":154},[144,46730,21079],{"class":203},[144,46732,42251],{"class":154},[144,46734,773],{"class":203},[144,46736,533],{"class":154},[144,46738,31514],{"class":203},[144,46740,42260],{"class":154},[144,46742,955],{"class":203},[144,46744,533],{"class":154},[144,46746,358],{"class":203},[144,46748,42269],{"class":154},[144,46750,358],{"class":203},[144,46752,38060],{"class":154},[144,46754,46755,46757,46759,46761,46763,46765,46767,46769,46771,46773,46775,46777,46779,46781,46783],{"class":146,"line":9848},[144,46756,42242],{"class":154},[144,46758,38470],{"class":203},[144,46760,533],{"class":154},[144,46762,32083],{"class":203},[144,46764,42251],{"class":154},[144,46766,32083],{"class":203},[144,46768,533],{"class":154},[144,46770,34883],{"class":203},[144,46772,42260],{"class":154},[144,46774,955],{"class":203},[144,46776,533],{"class":154},[144,46778,358],{"class":203},[144,46780,42269],{"class":154},[144,46782,358],{"class":203},[144,46784,38060],{"class":154},[144,46786,46787,46789,46791,46793,46795,46797,46799,46801,46803,46805,46807,46809,46811,46813,46815],{"class":146,"line":9854},[144,46788,42242],{"class":154},[144,46790,38470],{"class":203},[144,46792,533],{"class":154},[144,46794,773],{"class":203},[144,46796,42251],{"class":154},[144,46798,32083],{"class":203},[144,46800,533],{"class":154},[144,46802,42465],{"class":203},[144,46804,42260],{"class":154},[144,46806,352],{"class":203},[144,46808,533],{"class":154},[144,46810,358],{"class":203},[144,46812,42269],{"class":154},[144,46814,358],{"class":203},[144,46816,38060],{"class":154},[144,46818,46819,46821,46823,46825,46827,46829,46831,46833,46835,46837,46839,46841,46843,46845,46847],{"class":146,"line":9875},[144,46820,42242],{"class":154},[144,46822,42486],{"class":203},[144,46824,533],{"class":154},[144,46826,34883],{"class":203},[144,46828,42251],{"class":154},[144,46830,21079],{"class":203},[144,46832,533],{"class":154},[144,46834,42499],{"class":203},[144,46836,42260],{"class":154},[144,46838,352],{"class":203},[144,46840,533],{"class":154},[144,46842,32083],{"class":203},[144,46844,42269],{"class":154},[144,46846,32083],{"class":203},[144,46848,38060],{"class":154},[144,46850,46851,46853,46855,46857,46859,46861,46863,46865,46867,46869,46871,46873,46875],{"class":146,"line":9881},[144,46852,38110],{"class":154},[144,46854,30887],{"class":5247},[144,46856,200],{"class":150},[144,46858,226],{"class":203},[144,46860,533],{"class":154},[144,46862,30942],{"class":5247},[144,46864,200],{"class":150},[144,46866,232],{"class":203},[144,46868,533],{"class":154},[144,46870,30896],{"class":5247},[144,46872,200],{"class":150},[144,46874,372],{"class":203},[144,46876,161],{"class":154},[144,46878,46879],{"class":146,"line":9895},[144,46880,38139],{"class":154},[144,46882,46883,46885,46887,46889],{"class":146,"line":9901},[144,46884,30858],{"class":203},[144,46886,42552],{"class":154},[144,46888,200],{"class":150},[144,46890,38022],{"class":154},[144,46892,46893,46895,46897,46899,46901,46903,46905,46907,46909,46911,46913,46915,46917,46919,46921],{"class":146,"line":9928},[144,46894,42242],{"class":154},[144,46896,42563],{"class":203},[144,46898,533],{"class":154},[144,46900,34883],{"class":203},[144,46902,42251],{"class":154},[144,46904,21079],{"class":203},[144,46906,533],{"class":154},[144,46908,42499],{"class":203},[144,46910,42260],{"class":154},[144,46912,352],{"class":203},[144,46914,533],{"class":154},[144,46916,32083],{"class":203},[144,46918,42269],{"class":154},[144,46920,32083],{"class":203},[144,46922,38060],{"class":154},[144,46924,46925,46927,46929,46931,46933,46935,46937,46939,46941,46943,46945,46947,46949,46951,46953],{"class":146,"line":9937},[144,46926,42242],{"class":154},[144,46928,42563],{"class":203},[144,46930,533],{"class":154},[144,46932,34953],{"class":203},[144,46934,42251],{"class":154},[144,46936,42172],{"class":203},[144,46938,533],{"class":154},[144,46940,34953],{"class":203},[144,46942,42260],{"class":154},[144,46944,762],{"class":203},[144,46946,533],{"class":154},[144,46948,32083],{"class":203},[144,46950,42269],{"class":154},[144,46952,32083],{"class":203},[144,46954,38060],{"class":154},[144,46956,46957,46959,46961,46963,46965],{"class":146,"line":9943},[144,46958,42626],{"class":154},[144,46960,372],{"class":203},[144,46962,533],{"class":154},[144,46964,372],{"class":203},[144,46966,42635],{"class":154},[144,46968,46969],{"class":146,"line":9951},[144,46970,38803],{"class":154},[144,46972,46973,46975,46977,46979,46981],{"class":146,"line":9956},[144,46974,38808],{"class":154},[144,46976,42646],{"class":203},[144,46978,533],{"class":154},[144,46980,232],{"class":203},[144,46982,161],{"class":154},[144,46984,46985],{"class":146,"line":16635},[144,46986,38139],{"class":154},[144,46988,46989],{"class":146,"line":16641},[144,46990,42661],{"class":213},[144,46992,46993,46995,46997,46999,47001],{"class":146,"line":16664},[144,46994,3433],{"class":150},[144,46996,38881],{"class":154},[144,46998,26056],{"class":150},[144,47000,38886],{"class":203},[144,47002,38889],{"class":154},[144,47004,47005,47007,47009],{"class":146,"line":16670},[144,47006,4672],{"class":150},[144,47008,38901],{"class":203},[144,47010,38904],{"class":154},[144,47012,47013,47015,47017,47019,47021,47023,47025,47027,47029],{"class":146,"line":16693},[144,47014,38914],{"class":154},[144,47016,42688],{"class":5247},[144,47018,200],{"class":150},[144,47020,42693],{"class":259},[144,47022,533],{"class":154},[144,47024,38917],{"class":5247},[144,47026,200],{"class":150},[144,47028,38922],{"class":259},[144,47030,161],{"class":154},[144,47032,47033],{"class":146,"line":16707},[144,47034,42708],{"class":213},[144,47036,47037],{"class":146,"line":16727},[144,47038,42713],{"class":213},[144,47040,47041],{"class":146,"line":16733},[144,47042,42718],{"class":213},[144,47044,47045],{"class":146,"line":16744},[144,47046,42723],{"class":213},[144,47048,47049],{"class":146,"line":16767},[144,47050,42728],{"class":213},[144,47052,47053],{"class":146,"line":16789},[144,47054,42733],{"class":213},[144,47056,47057,47059,47061,47063,47065,47067],{"class":146,"line":16794},[144,47058,38934],{"class":150},[144,47060,38937],{"class":154},[144,47062,38940],{"class":150},[144,47064,38943],{"class":150},[144,47066,38946],{"class":203},[144,47068,3769],{"class":154},[144,47070,47071,47073,47075],{"class":146,"line":16800},[144,47072,38958],{"class":154},[144,47074,346],{"class":203},[144,47076,161],{"class":154},[144,47078,47079,47081,47083],{"class":146,"line":16814},[144,47080,42760],{"class":150},[144,47082,38901],{"class":203},[144,47084,38977],{"class":154},[144,47086,47087,47089,47091,47093,47095],{"class":146,"line":16827},[144,47088,42769],{"class":154},[144,47090,346],{"class":203},[144,47092,533],{"class":154},[144,47094,38999],{"class":203},[144,47096,161],{"class":154},[144,47098,47099,47101,47103,47105,47107,47109],{"class":146,"line":16832},[144,47100,42782],{"class":150},[144,47102,38937],{"class":154},[144,47104,38940],{"class":150},[144,47106,38943],{"class":150},[144,47108,38946],{"class":203},[144,47110,3769],{"class":154},[144,47112,47113,47115,47117],{"class":146,"line":16846},[144,47114,42797],{"class":154},[144,47116,346],{"class":203},[144,47118,161],{"class":154},[144,47120,47121],{"class":146,"line":16851},[144,47122,35178],{"class":213},[144,47124,47125,47127,47129],{"class":146,"line":16857},[144,47126,30814],{"class":150},[144,47128,31106],{"class":1993},[144,47130,31109],{"class":154},[144,47132,47133,47135,47137,47139],{"class":146,"line":16862},[144,47134,31114],{"class":154},[144,47136,200],{"class":150},[144,47138,30836],{"class":203},[144,47140,42824],{"class":154},[144,47142,47143,47145,47147,47149],{"class":146,"line":16876},[144,47144,31114],{"class":154},[144,47146,200],{"class":150},[144,47148,30836],{"class":203},[144,47150,42835],{"class":154},[144,47152,47153,47155,47157,47159],{"class":146,"line":16881},[144,47154,31114],{"class":154},[144,47156,200],{"class":150},[144,47158,30836],{"class":203},[144,47160,42846],{"class":154},[144,47162,47163,47165,47167,47169],{"class":146,"line":16886},[144,47164,31114],{"class":154},[144,47166,200],{"class":150},[144,47168,30836],{"class":203},[144,47170,42857],{"class":154},[144,47172,47173,47175,47177,47179],{"class":146,"line":16900},[144,47174,31114],{"class":154},[144,47176,200],{"class":150},[144,47178,30836],{"class":203},[144,47180,42868],{"class":154},[144,47182,47183,47185],{"class":146,"line":16912},[144,47184,14783],{"class":150},[144,47186,31222],{"class":154},[144,47188,47189],{"class":146,"line":16917},[144,47190,2430],{"emptyLinePlaceholder":72},[144,47192,47193],{"class":146,"line":16930},[144,47194,42883],{"class":213},[144,47196,47197,47199,47201,47203,47205],{"class":146,"line":16935},[144,47198,1561],{"class":150},[144,47200,31233],{"class":203},[144,47202,2979],{"class":150},[144,47204,31238],{"class":259},[144,47206,3769],{"class":154},[144,47208,47209,47211,47213,47215,47217,47219,47221,47223,47225],{"class":146,"line":16940},[144,47210,31250],{"class":154},[144,47212,200],{"class":150},[144,47214,30464],{"class":154},[144,47216,31257],{"class":259},[144,47218,1734],{"class":150},[144,47220,31262],{"class":154},[144,47222,1731],{"class":150},[144,47224,30489],{"class":259},[144,47226,161],{"class":154},[144,47228,47229,47231,47233],{"class":146,"line":16945},[144,47230,31302],{"class":154},[144,47232,200],{"class":150},[144,47234,42924],{"class":154},[144,47236,47237,47239,47241,47243,47245,47247,47249,47251],{"class":146,"line":16958},[144,47238,31312],{"class":203},[144,47240,31315],{"class":154},[144,47242,372],{"class":203},[144,47244,533],{"class":154},[144,47246,31514],{"class":203},[144,47248,533],{"class":154},[144,47250,31514],{"class":203},[144,47252,31328],{"class":154},[22029,47254,47256],{"id":47255},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47258,47259],{},"计算图片的均值与方差，用于训练中归一化处理操作",[135,47261,47263],{"className":30391,"code":47262,"language":30393,"meta":30,"style":30},"# 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",[141,47264,47265,47270,47283,47288,47294,47299,47309,47313,47318,47328,47332,47337,47347,47364,47368,47373,47385,47397,47428,47437,47447,47457,47461,47466,47481,47485,47490,47495,47500,47510,47515,47540,47544,47549,47564,47568,47581,47585,47590,47595,47600,47605,47610,47620,47630,47653,47661,47669,47677,47681,47693,47697,47702,47706,47710,47717,47737,47761,47768,47782,47787,47792,47796,47810,47814,47826],{"__ignoreMap":30},[144,47266,47267],{"class":146,"line":147},[144,47268,47269],{"class":213},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[144,47271,47272,47274,47277,47280],{"class":146,"line":66},[144,47273,30750],{"class":150},[144,47275,47276],{"class":203}," PIL",[144,47278,47279],{"class":150}," import",[144,47281,47282],{"class":154}," Image\n",[144,47284,47285],{"class":146,"line":1210},[144,47286,47287],{"class":213},"# os 用来处理文件夹和文件路径\n",[144,47289,47290,47292],{"class":146,"line":1225},[144,47291,30405],{"class":150},[144,47293,45318],{"class":154},[144,47295,47296],{"class":146,"line":1231},[144,47297,47298],{"class":213},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[144,47300,47301,47303,47305,47307],{"class":146,"line":1245},[144,47302,30405],{"class":150},[144,47304,31393],{"class":154},[144,47306,31396],{"class":150},[144,47308,31399],{"class":154},[144,47310,47311],{"class":146,"line":1251},[144,47312,2430],{"emptyLinePlaceholder":72},[144,47314,47315],{"class":146,"line":1342},[144,47316,47317],{"class":213},"# 文件夹路径，包含所有图片文件\n",[144,47319,47320,47323,47325],{"class":146,"line":1348},[144,47321,47322],{"class":154},"folder_path ",[144,47324,200],{"class":150},[144,47326,47327],{"class":259}," 'data_cat_dog'\n",[144,47329,47330],{"class":146,"line":1360},[144,47331,2430],{"emptyLinePlaceholder":72},[144,47333,47334],{"class":146,"line":1642},[144,47335,47336],{"class":213},"# 初始化累积变量\n",[144,47338,47339,47342,47344],{"class":146,"line":1647},[144,47340,47341],{"class":154},"total_pixels ",[144,47343,200],{"class":150},[144,47345,47346],{"class":203}," 0\n",[144,47348,47349,47352,47354,47357,47359,47361],{"class":146,"line":1653},[144,47350,47351],{"class":154},"sum_normalized_pixel_values ",[144,47353,200],{"class":150},[144,47355,47356],{"class":154}," np.zeros(",[144,47358,226],{"class":203},[144,47360,45821],{"class":154},[144,47362,47363],{"class":213},"# 如果是RGB图像，需要三个通道的均值和方差\n",[144,47365,47366],{"class":146,"line":1658},[144,47367,2430],{"emptyLinePlaceholder":72},[144,47369,47370],{"class":146,"line":1672},[144,47371,47372],{"class":213},"# 遍历文件夹中的图片文件\n",[144,47374,47375,47377,47380,47382],{"class":146,"line":1677},[144,47376,3055],{"class":150},[144,47378,47379],{"class":154}," root, dirs, files ",[144,47381,26056],{"class":150},[144,47383,47384],{"class":154}," os.walk(folder_path):\n",[144,47386,47387,47389,47392,47394],{"class":146,"line":1683},[144,47388,3231],{"class":150},[144,47390,47391],{"class":154}," filename ",[144,47393,26056],{"class":150},[144,47395,47396],{"class":154}," files:\n",[144,47398,47399,47401,47404,47407,47409,47412,47414,47417,47419,47422,47425],{"class":146,"line":1704},[144,47400,2527],{"class":150},[144,47402,47403],{"class":154}," filename.endswith((",[144,47405,47406],{"class":259},"'.jpg'",[144,47408,12466],{"class":154},[144,47410,47411],{"class":259},"'.jpeg'",[144,47413,12466],{"class":154},[144,47415,47416],{"class":259},"'.png'",[144,47418,12466],{"class":154},[144,47420,47421],{"class":259},"'.bmp'",[144,47423,47424],{"class":154},")):  ",[144,47426,47427],{"class":213},"# 可根据实际情况添加其他格式\n",[144,47429,47430,47432,47434],{"class":146,"line":1709},[144,47431,45686],{"class":154},[144,47433,200],{"class":150},[144,47435,47436],{"class":154}," os.path.join(root, filename)\n",[144,47438,47439,47442,47444],{"class":146,"line":1723},[144,47440,47441],{"class":154},"            image ",[144,47443,200],{"class":150},[144,47445,47446],{"class":154}," Image.open(image_path)\n",[144,47448,47449,47452,47454],{"class":146,"line":1728},[144,47450,47451],{"class":154},"            image_array ",[144,47453,200],{"class":150},[144,47455,47456],{"class":154}," np.array(image)\n",[144,47458,47459],{"class":146,"line":1757},[144,47460,2430],{"emptyLinePlaceholder":72},[144,47462,47463],{"class":146,"line":1762},[144,47464,47465],{"class":213},"            # 归一化像素值到0-1之间\n",[144,47467,47468,47471,47473,47476,47478],{"class":146,"line":1779},[144,47469,47470],{"class":154},"            normalized_image_array ",[144,47472,200],{"class":150},[144,47474,47475],{"class":154}," image_array ",[144,47477,739],{"class":150},[144,47479,47480],{"class":203}," 255.0\n",[144,47482,47483],{"class":146,"line":1784},[144,47484,2430],{"emptyLinePlaceholder":72},[144,47486,47487],{"class":146,"line":1789},[144,47488,47489],{"class":213},"            # print(image_path)\n",[144,47491,47492],{"class":146,"line":1794},[144,47493,47494],{"class":213},"            # print(normalized_image_array.shape)\n",[144,47496,47497],{"class":146,"line":1808},[144,47498,47499],{"class":213},"            # 累积归一化后的像素值和像素数量\n",[144,47501,47502,47505,47507],{"class":146,"line":1813},[144,47503,47504],{"class":154},"            total_pixels ",[144,47506,9508],{"class":150},[144,47508,47509],{"class":154}," normalized_image_array.size\n",[144,47511,47512],{"class":146,"line":2607},[144,47513,47514],{"class":213},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[144,47516,47517,47520,47522,47525,47528,47530,47532,47534,47536,47538],{"class":146,"line":2621},[144,47518,47519],{"class":154},"            sum_normalized_pixel_values ",[144,47521,9508],{"class":150},[144,47523,47524],{"class":154}," np.sum(normalized_image_array, ",[144,47526,47527],{"class":5247},"axis",[144,47529,200],{"class":150},[144,47531,155],{"class":154},[144,47533,346],{"class":203},[144,47535,12466],{"class":154},[144,47537,372],{"class":203},[144,47539,30510],{"class":154},[144,47541,47542],{"class":146,"line":2629},[144,47543,2430],{"emptyLinePlaceholder":72},[144,47545,47546],{"class":146,"line":2634},[144,47547,47548],{"class":213},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[144,47550,47551,47554,47556,47559,47561],{"class":146,"line":2640},[144,47552,47553],{"class":154},"mean ",[144,47555,200],{"class":150},[144,47557,47558],{"class":154}," sum_normalized_pixel_values ",[144,47560,739],{"class":150},[144,47562,47563],{"class":154}," total_pixels\n",[144,47565,47566],{"class":146,"line":2646},[144,47567,2430],{"emptyLinePlaceholder":72},[144,47569,47570,47573,47575,47577,47579],{"class":146,"line":2651},[144,47571,47572],{"class":154},"sum_squared_diff ",[144,47574,200],{"class":150},[144,47576,47356],{"class":154},[144,47578,226],{"class":203},[144,47580,161],{"class":154},[144,47582,47583],{"class":146,"line":7979},[144,47584,2430],{"emptyLinePlaceholder":72},[144,47586,47587],{"class":146,"line":8003},[144,47588,47589],{"class":213},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[144,47591,47592],{"class":146,"line":8008},[144,47593,47594],{"class":213},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[144,47596,47597],{"class":146,"line":8014},[144,47598,47599],{"class":213},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[144,47601,47602],{"class":146,"line":8041},[144,47603,47604],{"class":213},"# Image.open(image_path)：打开图片\n",[144,47606,47607],{"class":146,"line":8046},[144,47608,47609],{"class":213},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[144,47611,47612,47614,47616,47618],{"class":146,"line":8052},[144,47613,3055],{"class":150},[144,47615,47379],{"class":154},[144,47617,26056],{"class":150},[144,47619,47384],{"class":154},[144,47621,47622,47624,47626,47628],{"class":146,"line":8064},[144,47623,3231],{"class":150},[144,47625,47391],{"class":154},[144,47627,26056],{"class":150},[144,47629,47396],{"class":154},[144,47631,47632,47634,47636,47638,47640,47642,47644,47646,47648,47650],{"class":146,"line":8076},[144,47633,2527],{"class":150},[144,47635,47403],{"class":154},[144,47637,47406],{"class":259},[144,47639,12466],{"class":154},[144,47641,47411],{"class":259},[144,47643,12466],{"class":154},[144,47645,47416],{"class":259},[144,47647,12466],{"class":154},[144,47649,47421],{"class":259},[144,47651,47652],{"class":154},")):\n",[144,47654,47655,47657,47659],{"class":146,"line":8088},[144,47656,45686],{"class":154},[144,47658,200],{"class":150},[144,47660,47436],{"class":154},[144,47662,47663,47665,47667],{"class":146,"line":9747},[144,47664,47441],{"class":154},[144,47666,200],{"class":150},[144,47668,47446],{"class":154},[144,47670,47671,47673,47675],{"class":146,"line":9772},[144,47672,47451],{"class":154},[144,47674,200],{"class":150},[144,47676,47456],{"class":154},[144,47678,47679],{"class":146,"line":9795},[144,47680,47465],{"class":213},[144,47682,47683,47685,47687,47689,47691],{"class":146,"line":9819},[144,47684,47470],{"class":154},[144,47686,200],{"class":150},[144,47688,47475],{"class":154},[144,47690,739],{"class":150},[144,47692,47480],{"class":203},[144,47694,47695],{"class":146,"line":9824},[144,47696,47494],{"class":213},[144,47698,47699],{"class":146,"line":9829},[144,47700,47701],{"class":213},"            # print(mean.shape)\n",[144,47703,47704],{"class":146,"line":9834},[144,47705,47489],{"class":213},[144,47707,47708],{"class":146,"line":9843},[144,47709,2430],{"emptyLinePlaceholder":72},[144,47711,47712,47715],{"class":146,"line":9848},[144,47713,47714],{"class":150},"            try",[144,47716,3769],{"class":154},[144,47718,47719,47722,47724,47727,47729,47732,47734],{"class":146,"line":9854},[144,47720,47721],{"class":154},"                diff ",[144,47723,200],{"class":150},[144,47725,47726],{"class":154}," (normalized_image_array ",[144,47728,687],{"class":150},[144,47730,47731],{"class":154}," mean) ",[144,47733,10692],{"class":150},[144,47735,47736],{"class":203}," 2\n",[144,47738,47739,47742,47744,47747,47749,47751,47753,47755,47757,47759],{"class":146,"line":9875},[144,47740,47741],{"class":154},"                sum_squared_diff ",[144,47743,9508],{"class":150},[144,47745,47746],{"class":154}," np.sum(diff, ",[144,47748,47527],{"class":5247},[144,47750,200],{"class":150},[144,47752,155],{"class":154},[144,47754,346],{"class":203},[144,47756,12466],{"class":154},[144,47758,372],{"class":203},[144,47760,30510],{"class":154},[144,47762,47763,47766],{"class":146,"line":9881},[144,47764,47765],{"class":150},"            except",[144,47767,3769],{"class":154},[144,47769,47770,47773,47775,47777,47780],{"class":146,"line":9895},[144,47771,47772],{"class":203},"                print",[144,47774,155],{"class":154},[144,47776,207],{"class":150},[144,47778,47779],{"class":259},"\"捕获到自定义异常\"",[144,47781,161],{"class":154},[144,47783,47784],{"class":146,"line":9901},[144,47785,47786],{"class":213},"            # diff = (normalized_image_array - mean) ** 2\n",[144,47788,47789],{"class":146,"line":9928},[144,47790,47791],{"class":213},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[144,47793,47794],{"class":146,"line":9937},[144,47795,2430],{"emptyLinePlaceholder":72},[144,47797,47798,47801,47803,47806,47808],{"class":146,"line":9943},[144,47799,47800],{"class":154},"variance ",[144,47802,200],{"class":150},[144,47804,47805],{"class":154}," sum_squared_diff ",[144,47807,739],{"class":150},[144,47809,47563],{"class":154},[144,47811,47812],{"class":146,"line":9951},[144,47813,2430],{"emptyLinePlaceholder":72},[144,47815,47816,47818,47820,47823],{"class":146,"line":9956},[144,47817,30428],{"class":203},[144,47819,155],{"class":154},[144,47821,47822],{"class":259},"\"Mean:\"",[144,47824,47825],{"class":154},", mean)\n",[144,47827,47828,47830,47832,47835],{"class":146,"line":16635},[144,47829,30428],{"class":203},[144,47831,155],{"class":154},[144,47833,47834],{"class":259},"\"Variance:\"",[144,47836,47837],{"class":154},", variance)\n",[135,47839,47841],{"className":30391,"code":47840,"language":30393,"meta":30,"style":30},"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",[141,47842,47843,47849,47855,47865,47871,47881,47895,47905,47915,47925,47929,47939,47949,47953,47957,47965,47970,47975,47994,47998,48003,48008,48013,48018,48059,48064,48074,48079,48092,48097,48102,48107,48112,48117,48121,48126,48131,48153,48157,48189,48203,48213,48223,48227,48237,48251,48261,48271,48281,48287,48291,48295,48299,48303,48307,48315,48335,48339,48343,48347,48351,48367,48371,48375,48383,48387,48391,48399,48403,48407,48411,48419,48423,48427,48431,48439,48443,48451,48455,48463,48467,48475,48479,48487,48491,48495,48503,48507,48511,48523,48547,48561,48565,48569,48573,48581,48585,48593,48597,48605,48609,48617,48621,48629,48633,48641,48645,48657,48661,48669,48673,48681,48685,48689,48693,48697,48705,48709,48725,48729,48737,48741,48745,48749,48753,48757,48761,48765,48781,48785,48797,48801,48813,48817,48829,48833,48841,48845,48853,48857,48861,48865,48871,48875,48883,48887,48903,48907,48915,48919,48935,48947,48951,48963,48967,48971,48979,48983,48987,48995,48999,49007,49011,49019,49023,49027,49069,49111,49115,49119,49135,49139,49155,49159,49163,49171,49175,49179,49191,49229,49233,49237,49245,49249,49263,49273,49279,49285,49291,49297,49301,49305,49311,49315,49319,49327,49331,49349,49353,49357,49361,49377,49381,49385,49389,49393,49397,49417,49437,49441,49445,49449,49457,49465,49469,49485,49505,49525,49529,49534,49543,49552,49557,49562,49567,49580,49585,49594,49603,49620],{"__ignoreMap":30},[144,47844,47845,47847],{"class":146,"line":147},[144,47846,30405],{"class":150},[144,47848,31835],{"class":154},[144,47850,47851,47853],{"class":146,"line":66},[144,47852,30405],{"class":150},[144,47854,31842],{"class":154},[144,47856,47857,47859,47861,47863],{"class":146,"line":1210},[144,47858,30405],{"class":150},[144,47860,31853],{"class":154},[144,47862,31396],{"class":150},[144,47864,31858],{"class":154},[144,47866,47867,47869],{"class":146,"line":1225},[144,47868,30405],{"class":150},[144,47870,30408],{"class":154},[144,47872,47873,47875,47877,47879],{"class":146,"line":1231},[144,47874,30750],{"class":150},[144,47876,31428],{"class":154},[144,47878,30405],{"class":150},[144,47880,31875],{"class":154},[144,47882,47883,47885,47887,47889,47892],{"class":146,"line":1245},[144,47884,30750],{"class":150},[144,47886,31381],{"class":154},[144,47888,30405],{"class":150},[144,47890,47891],{"class":154}," ImageFolder ",[144,47893,47894],{"class":213},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[144,47896,47897,47899,47901,47903],{"class":146,"line":1251},[144,47898,30750],{"class":150},[144,47900,31411],{"class":154},[144,47902,30405],{"class":150},[144,47904,31416],{"class":154},[144,47906,47907,47909,47911,47913],{"class":146,"line":1342},[144,47908,30405],{"class":150},[144,47910,31428],{"class":154},[144,47912,31396],{"class":150},[144,47914,31433],{"class":154},[144,47916,47917,47919,47921,47923],{"class":146,"line":1348},[144,47918,30405],{"class":150},[144,47920,31445],{"class":154},[144,47922,31396],{"class":150},[144,47924,31450],{"class":154},[144,47926,47927],{"class":146,"line":1360},[144,47928,31920],{"class":213},[144,47930,47931,47933,47935,47937],{"class":146,"line":1642},[144,47932,30750],{"class":150},[144,47934,31927],{"class":154},[144,47936,30405],{"class":150},[144,47938,43044],{"class":154},[144,47940,47941,47943,47945,47947],{"class":146,"line":1647},[144,47942,30750],{"class":150},[144,47944,30753],{"class":154},[144,47946,30405],{"class":150},[144,47948,30758],{"class":154},[144,47950,47951],{"class":146,"line":1653},[144,47952,2430],{"emptyLinePlaceholder":72},[144,47954,47955],{"class":146,"line":1658},[144,47956,31955],{"class":213},[144,47958,47959,47961,47963],{"class":146,"line":1672},[144,47960,31960],{"class":150},[144,47962,31963],{"class":1993},[144,47964,31966],{"class":154},[144,47966,47967],{"class":146,"line":1677},[144,47968,47969],{"class":213},"    # 导入自己的数据集，并进行数据处理\n",[144,47971,47972],{"class":146,"line":1683},[144,47973,47974],{"class":213},"    # 定义数据集的路径\n",[144,47976,47977,47980,47982,47984,47986,47988,47992],{"class":146,"line":1704},[144,47978,47979],{"class":203},"    ROOT_PATH",[144,47981,200],{"class":150},[144,47983,825],{"class":150},[144,47985,406],{"class":259},[144,47987,713],{"class":203},[144,47989,47991],{"class":47990},"sA_wV","\u002Fdata\u002Ftrain",[144,47993,25146],{"class":259},[144,47995,47996],{"class":146,"line":1709},[144,47997,2430],{"emptyLinePlaceholder":72},[144,47999,48000],{"class":146,"line":1723},[144,48001,48002],{"class":213},"    # 定义归一化方法\n",[144,48004,48005],{"class":146,"line":1728},[144,48006,48007],{"class":213},"    # 这里需要先计算一下数据集的均值和方差\n",[144,48009,48010],{"class":146,"line":1757},[144,48011,48012],{"class":213},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[144,48014,48015],{"class":146,"line":1762},[144,48016,48017],{"class":213},"    # 第一个参数是均值，第二个参数是方差\n",[144,48019,48020,48023,48025,48028,48031,48033,48036,48038,48041,48044,48047,48049,48052,48054,48057],{"class":146,"line":1779},[144,48021,48022],{"class":154},"    normalize",[144,48024,200],{"class":150},[144,48026,48027],{"class":154},"transforms.Normalize([",[144,48029,48030],{"class":203},"0.162",[144,48032,533],{"class":154},[144,48034,48035],{"class":203},"0.151",[144,48037,533],{"class":154},[144,48039,48040],{"class":203},"0.138",[144,48042,48043],{"class":154},"],[",[144,48045,48046],{"class":203},"0.058",[144,48048,533],{"class":154},[144,48050,48051],{"class":203},"0.052",[144,48053,533],{"class":154},[144,48055,48056],{"class":203},"0.048",[144,48058,4687],{"class":154},[144,48060,48061],{"class":146,"line":1784},[144,48062,48063],{"class":213},"    # 定义数据集处理方法变量\n",[144,48065,48066,48069,48071],{"class":146,"line":1789},[144,48067,48068],{"class":154},"    train_transform",[144,48070,200],{"class":150},[144,48072,48073],{"class":154},"transforms.Compose([\n",[144,48075,48076],{"class":146,"line":1794},[144,48077,48078],{"class":213},"        # 调整图像大小为224*224\n",[144,48080,48081,48084,48086,48088,48090],{"class":146,"line":1808},[144,48082,48083],{"class":154},"        transforms.Resize((",[144,48085,31514],{"class":203},[144,48087,533],{"class":154},[144,48089,31514],{"class":203},[144,48091,42635],{"class":154},[144,48093,48094],{"class":146,"line":1813},[144,48095,48096],{"class":213},"        # 将图像转换为张量\n",[144,48098,48099],{"class":146,"line":2607},[144,48100,48101],{"class":154},"        transforms.ToTensor(),\n",[144,48103,48104],{"class":146,"line":2621},[144,48105,48106],{"class":154},"        normalize])\n",[144,48108,48109],{"class":146,"line":2629},[144,48110,48111],{"class":213},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[144,48113,48114],{"class":146,"line":2634},[144,48115,48116],{"class":213},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[144,48118,48119],{"class":146,"line":2640},[144,48120,2430],{"emptyLinePlaceholder":72},[144,48122,48123],{"class":146,"line":2646},[144,48124,48125],{"class":213},"    # 加载数据集\n",[144,48127,48128],{"class":146,"line":2651},[144,48129,48130],{"class":213},"    # 传入数据集路径与处理方法\n",[144,48132,48133,48135,48137,48140,48143,48145,48148,48150],{"class":146,"line":7979},[144,48134,31971],{"class":154},[144,48136,200],{"class":150},[144,48138,48139],{"class":154},"ImageFolder(",[144,48141,48142],{"class":203},"ROOT_PATH",[144,48144,533],{"class":154},[144,48146,48147],{"class":5247},"transform",[144,48149,200],{"class":150},[144,48151,48152],{"class":154},"train_transform)\n",[144,48154,48155],{"class":146,"line":8003},[144,48156,2430],{"emptyLinePlaceholder":72},[144,48158,48159,48161,48163,48165,48167,48169,48171,48173,48175,48177,48179,48181,48183,48185,48187],{"class":146,"line":8008},[144,48160,32023],{"class":154},[144,48162,200],{"class":150},[144,48164,32028],{"class":154},[144,48166,32031],{"class":203},[144,48168,155],{"class":154},[144,48170,32036],{"class":203},[144,48172,610],{"class":150},[144,48174,7389],{"class":203},[144,48176,32043],{"class":154},[144,48178,32031],{"class":203},[144,48180,155],{"class":154},[144,48182,32050],{"class":203},[144,48184,610],{"class":150},[144,48186,7389],{"class":203},[144,48188,32057],{"class":154},[144,48190,48191,48193,48195,48197,48199,48201],{"class":146,"line":8014},[144,48192,32062],{"class":154},[144,48194,200],{"class":150},[144,48196,32067],{"class":154},[144,48198,31550],{"class":5247},[144,48200,200],{"class":150},[144,48202,31555],{"class":154},[144,48204,48205,48207,48209,48211],{"class":146,"line":8041},[144,48206,32078],{"class":5247},[144,48208,200],{"class":150},[144,48210,352],{"class":203},[144,48212,31479],{"class":154},[144,48214,48215,48217,48219,48221],{"class":146,"line":8046},[144,48216,32090],{"class":5247},[144,48218,200],{"class":150},[144,48220,31489],{"class":203},[144,48222,31479],{"class":154},[144,48224,48225],{"class":146,"line":8052},[144,48226,32101],{"class":213},[144,48228,48229,48231,48233,48235],{"class":146,"line":8064},[144,48230,32106],{"class":5247},[144,48232,200],{"class":150},[144,48234,550],{"class":203},[144,48236,161],{"class":154},[144,48238,48239,48241,48243,48245,48247,48249],{"class":146,"line":8076},[144,48240,32117],{"class":154},[144,48242,200],{"class":150},[144,48244,31547],{"class":154},[144,48246,31550],{"class":5247},[144,48248,200],{"class":150},[144,48250,32128],{"class":154},[144,48252,48253,48255,48257,48259],{"class":146,"line":8088},[144,48254,32133],{"class":5247},[144,48256,200],{"class":150},[144,48258,352],{"class":203},[144,48260,31479],{"class":154},[144,48262,48263,48265,48267,48269],{"class":146,"line":9747},[144,48264,32144],{"class":5247},[144,48266,200],{"class":150},[144,48268,31489],{"class":203},[144,48270,31479],{"class":154},[144,48272,48273,48275,48277,48279],{"class":146,"line":9772},[144,48274,32155],{"class":5247},[144,48276,200],{"class":150},[144,48278,550],{"class":203},[144,48280,161],{"class":154},[144,48282,48283,48285],{"class":146,"line":9795},[144,48284,4120],{"class":150},[144,48286,32168],{"class":154},[144,48288,48289],{"class":146,"line":9819},[144,48290,2430],{"emptyLinePlaceholder":72},[144,48292,48293],{"class":146,"line":9824},[144,48294,32177],{"class":213},[144,48296,48297],{"class":146,"line":9829},[144,48298,32182],{"class":213},[144,48300,48301],{"class":146,"line":9834},[144,48302,2430],{"emptyLinePlaceholder":72},[144,48304,48305],{"class":146,"line":9843},[144,48306,32191],{"class":213},[144,48308,48309,48311,48313],{"class":146,"line":9848},[144,48310,31960],{"class":150},[144,48312,32198],{"class":1993},[144,48314,32201],{"class":154},[144,48316,48317,48319,48321,48323,48325,48327,48329,48331,48333],{"class":146,"line":9854},[144,48318,31250],{"class":154},[144,48320,200],{"class":150},[144,48322,30464],{"class":154},[144,48324,31257],{"class":259},[144,48326,1734],{"class":150},[144,48328,31262],{"class":154},[144,48330,1731],{"class":150},[144,48332,32220],{"class":259},[144,48334,161],{"class":154},[144,48336,48337],{"class":146,"line":9875},[144,48338,2430],{"emptyLinePlaceholder":72},[144,48340,48341],{"class":146,"line":9881},[144,48342,32235],{"class":213},[144,48344,48345],{"class":146,"line":9895},[144,48346,32240],{"class":213},[144,48348,48349],{"class":146,"line":9901},[144,48350,32245],{"class":213},[144,48352,48353,48355,48357,48359,48361,48363,48365],{"class":146,"line":9928},[144,48354,32250],{"class":154},[144,48356,200],{"class":150},[144,48358,32255],{"class":154},[144,48360,32258],{"class":5247},[144,48362,200],{"class":150},[144,48364,32263],{"class":203},[144,48366,161],{"class":154},[144,48368,48369],{"class":146,"line":9937},[144,48370,2430],{"emptyLinePlaceholder":72},[144,48372,48373],{"class":146,"line":9943},[144,48374,32274],{"class":213},[144,48376,48377,48379,48381],{"class":146,"line":9951},[144,48378,32279],{"class":154},[144,48380,200],{"class":150},[144,48382,32284],{"class":154},[144,48384,48385],{"class":146,"line":9956},[144,48386,2430],{"emptyLinePlaceholder":72},[144,48388,48389],{"class":146,"line":16635},[144,48390,32293],{"class":213},[144,48392,48393,48395,48397],{"class":146,"line":16641},[144,48394,31302],{"class":154},[144,48396,200],{"class":150},[144,48398,32302],{"class":154},[144,48400,48401],{"class":146,"line":16664},[144,48402,32307],{"class":213},[144,48404,48405],{"class":146,"line":16670},[144,48406,32312],{"class":213},[144,48408,48409],{"class":146,"line":16693},[144,48410,32317],{"class":213},[144,48412,48413,48415,48417],{"class":146,"line":16707},[144,48414,32322],{"class":154},[144,48416,200],{"class":150},[144,48418,32327],{"class":154},[144,48420,48421],{"class":146,"line":16727},[144,48422,2430],{"emptyLinePlaceholder":72},[144,48424,48425],{"class":146,"line":16733},[144,48426,32340],{"class":213},[144,48428,48429],{"class":146,"line":16744},[144,48430,32345],{"class":213},[144,48432,48433,48435,48437],{"class":146,"line":16767},[144,48434,32350],{"class":154},[144,48436,200],{"class":150},[144,48438,32355],{"class":203},[144,48440,48441],{"class":146,"line":16789},[144,48442,32360],{"class":213},[144,48444,48445,48447,48449],{"class":146,"line":16794},[144,48446,32365],{"class":154},[144,48448,200],{"class":150},[144,48450,32370],{"class":154},[144,48452,48453],{"class":146,"line":16800},[144,48454,32375],{"class":213},[144,48456,48457,48459,48461],{"class":146,"line":16814},[144,48458,32380],{"class":154},[144,48460,200],{"class":150},[144,48462,32370],{"class":154},[144,48464,48465],{"class":146,"line":16827},[144,48466,32389],{"class":213},[144,48468,48469,48471,48473],{"class":146,"line":16832},[144,48470,32394],{"class":154},[144,48472,200],{"class":150},[144,48474,32370],{"class":154},[144,48476,48477],{"class":146,"line":16846},[144,48478,32403],{"class":213},[144,48480,48481,48483,48485],{"class":146,"line":16851},[144,48482,32408],{"class":154},[144,48484,200],{"class":150},[144,48486,32370],{"class":154},[144,48488,48489],{"class":146,"line":16857},[144,48490,2430],{"emptyLinePlaceholder":72},[144,48492,48493],{"class":146,"line":16862},[144,48494,32421],{"class":213},[144,48496,48497,48499,48501],{"class":146,"line":16876},[144,48498,32426],{"class":154},[144,48500,200],{"class":150},[144,48502,32431],{"class":154},[144,48504,48505],{"class":146,"line":16881},[144,48506,2430],{"emptyLinePlaceholder":72},[144,48508,48509],{"class":146,"line":16886},[144,48510,32444],{"class":213},[144,48512,48513,48515,48517,48519,48521],{"class":146,"line":16900},[144,48514,3231],{"class":150},[144,48516,32451],{"class":154},[144,48518,26056],{"class":150},[144,48520,32456],{"class":203},[144,48522,32459],{"class":154},[144,48524,48525,48527,48529,48531,48533,48535,48537,48539,48541,48543,48545],{"class":146,"line":16912},[144,48526,32464],{"class":203},[144,48528,155],{"class":154},[144,48530,32469],{"class":259},[144,48532,32472],{"class":203},[144,48534,739],{"class":259},[144,48536,32472],{"class":203},[144,48538,406],{"class":259},[144,48540,32481],{"class":154},[144,48542,687],{"class":150},[144,48544,372],{"class":203},[144,48546,30510],{"class":154},[144,48548,48549,48551,48553,48555,48557,48559],{"class":146,"line":16917},[144,48550,32464],{"class":203},[144,48552,155],{"class":154},[144,48554,32496],{"class":259},[144,48556,610],{"class":150},[144,48558,601],{"class":203},[144,48560,161],{"class":154},[144,48562,48563],{"class":146,"line":16930},[144,48564,2430],{"emptyLinePlaceholder":72},[144,48566,48567],{"class":146,"line":16935},[144,48568,32511],{"class":213},[144,48570,48571],{"class":146,"line":16940},[144,48572,32516],{"class":213},[144,48574,48575,48577,48579],{"class":146,"line":16945},[144,48576,32521],{"class":154},[144,48578,200],{"class":150},[144,48580,32355],{"class":203},[144,48582,48583],{"class":146,"line":16958},[144,48584,32530],{"class":213},[144,48586,48587,48589,48591],{"class":146,"line":16963},[144,48588,32535],{"class":154},[144,48590,200],{"class":150},[144,48592,3115],{"class":203},[144,48594,48595],{"class":146,"line":32646},[144,48596,32544],{"class":213},[144,48598,48599,48601,48603],{"class":146,"line":32652},[144,48600,32549],{"class":154},[144,48602,200],{"class":150},[144,48604,32355],{"class":203},[144,48606,48607],{"class":146,"line":32658},[144,48608,32558],{"class":213},[144,48610,48611,48613,48615],{"class":146,"line":32664},[144,48612,32563],{"class":154},[144,48614,200],{"class":150},[144,48616,3115],{"class":203},[144,48618,48619],{"class":146,"line":32670},[144,48620,32572],{"class":213},[144,48622,48623,48625,48627],{"class":146,"line":32681},[144,48624,32577],{"class":154},[144,48626,200],{"class":150},[144,48628,3115],{"class":203},[144,48630,48631],{"class":146,"line":32687},[144,48632,32586],{"class":213},[144,48634,48635,48637,48639],{"class":146,"line":32707},[144,48636,32591],{"class":154},[144,48638,200],{"class":150},[144,48640,3115],{"class":203},[144,48642,48643],{"class":146,"line":32713},[144,48644,32600],{"class":213},[144,48646,48647,48649,48651,48653,48655],{"class":146,"line":32724},[144,48648,3433],{"class":150},[144,48650,31614],{"class":154},[144,48652,26056],{"class":150},[144,48654,31619],{"class":203},[144,48656,32613],{"class":154},[144,48658,48659],{"class":146,"line":32730},[144,48660,32618],{"class":213},[144,48662,48663,48665,48667],{"class":146,"line":32736},[144,48664,32623],{"class":154},[144,48666,200],{"class":150},[144,48668,32628],{"class":154},[144,48670,48671],{"class":146,"line":32742},[144,48672,32633],{"class":213},[144,48674,48675,48677,48679],{"class":146,"line":32748},[144,48676,32638],{"class":154},[144,48678,200],{"class":150},[144,48680,32643],{"class":154},[144,48682,48683],{"class":146,"line":32754},[144,48684,32649],{"class":213},[144,48686,48687],{"class":146,"line":32760},[144,48688,32655],{"class":154},[144,48690,48691],{"class":146,"line":32766},[144,48692,32661],{"class":213},[144,48694,48695],{"class":146,"line":32786},[144,48696,32667],{"class":213},[144,48698,48699,48701,48703],{"class":146,"line":32792},[144,48700,32673],{"class":154},[144,48702,200],{"class":150},[144,48704,32678],{"class":154},[144,48706,48707],{"class":146,"line":32808},[144,48708,32684],{"class":213},[144,48710,48711,48713,48715,48717,48719,48721,48723],{"class":146,"line":32814},[144,48712,32690],{"class":154},[144,48714,200],{"class":150},[144,48716,32695],{"class":154},[144,48718,32698],{"class":5247},[144,48720,200],{"class":150},[144,48722,372],{"class":203},[144,48724,161],{"class":154},[144,48726,48727],{"class":146,"line":32828},[144,48728,32710],{"class":213},[144,48730,48731,48733,48735],{"class":146,"line":32834},[144,48732,32716],{"class":154},[144,48734,200],{"class":150},[144,48736,32721],{"class":154},[144,48738,48739],{"class":146,"line":32849},[144,48740,32727],{"class":213},[144,48742,48743],{"class":146,"line":32855},[144,48744,32733],{"class":154},[144,48746,48747],{"class":146,"line":32864},[144,48748,32739],{"class":213},[144,48750,48751],{"class":146,"line":32870},[144,48752,32745],{"class":154},[144,48754,48755],{"class":146,"line":32879},[144,48756,32751],{"class":213},[144,48758,48759],{"class":146,"line":32885},[144,48760,32757],{"class":154},[144,48762,48763],{"class":146,"line":32891},[144,48764,32763],{"class":213},[144,48766,48767,48769,48771,48773,48775,48777,48779],{"class":146,"line":32900},[144,48768,32769],{"class":154},[144,48770,9508],{"class":150},[144,48772,32774],{"class":154},[144,48774,610],{"class":150},[144,48776,32779],{"class":154},[144,48778,346],{"class":203},[144,48780,161],{"class":154},[144,48782,48783],{"class":146,"line":32906},[144,48784,32789],{"class":213},[144,48786,48787,48789,48791,48793,48795],{"class":146,"line":32917},[144,48788,32795],{"class":154},[144,48790,9508],{"class":150},[144,48792,32800],{"class":154},[144,48794,2979],{"class":150},[144,48796,32805],{"class":154},[144,48798,48799],{"class":146,"line":32923},[144,48800,32811],{"class":213},[144,48802,48803,48805,48807,48809,48811],{"class":146,"line":32942},[144,48804,32817],{"class":154},[144,48806,9508],{"class":150},[144,48808,32779],{"class":154},[144,48810,346],{"class":203},[144,48812,161],{"class":154},[144,48814,48815],{"class":146,"line":32948},[144,48816,32831],{"class":213},[144,48818,48819,48821,48823,48825,48827],{"class":146,"line":32959},[144,48820,3433],{"class":150},[144,48822,32839],{"class":154},[144,48824,26056],{"class":150},[144,48826,31619],{"class":203},[144,48828,32846],{"class":154},[144,48830,48831],{"class":146,"line":32965},[144,48832,32852],{"class":213},[144,48834,48835,48837,48839],{"class":146,"line":32985},[144,48836,32623],{"class":154},[144,48838,200],{"class":150},[144,48840,32628],{"class":154},[144,48842,48843],{"class":146,"line":33001},[144,48844,32867],{"class":213},[144,48846,48847,48849,48851],{"class":146,"line":33007},[144,48848,32638],{"class":154},[144,48850,200],{"class":150},[144,48852,32643],{"class":154},[144,48854,48855],{"class":146,"line":33021},[144,48856,32882],{"class":213},[144,48858,48859],{"class":146,"line":33027},[144,48860,32888],{"class":154},[144,48862,48863],{"class":146,"line":33033},[144,48864,36369],{"class":213},[144,48866,48867,48869],{"class":146,"line":33044},[144,48868,32894],{"class":150},[144,48870,32897],{"class":154},[144,48872,48873],{"class":146,"line":33050},[144,48874,32903],{"class":213},[144,48876,48877,48879,48881],{"class":146,"line":33056},[144,48878,36384],{"class":154},[144,48880,200],{"class":150},[144,48882,32678],{"class":154},[144,48884,48885],{"class":146,"line":33066},[144,48886,32920],{"class":213},[144,48888,48889,48891,48893,48895,48897,48899,48901],{"class":146,"line":33072},[144,48890,36397],{"class":154},[144,48892,200],{"class":150},[144,48894,32695],{"class":154},[144,48896,32698],{"class":5247},[144,48898,200],{"class":150},[144,48900,372],{"class":203},[144,48902,161],{"class":154},[144,48904,48905],{"class":146,"line":33083},[144,48906,32945],{"class":213},[144,48908,48909,48911,48913],{"class":146,"line":33089},[144,48910,36418],{"class":154},[144,48912,200],{"class":150},[144,48914,32721],{"class":154},[144,48916,48917],{"class":146,"line":33099},[144,48918,32962],{"class":213},[144,48920,48921,48923,48925,48927,48929,48931,48933],{"class":146,"line":33104},[144,48922,36431],{"class":154},[144,48924,9508],{"class":150},[144,48926,36436],{"class":154},[144,48928,610],{"class":150},[144,48930,32779],{"class":154},[144,48932,346],{"class":203},[144,48934,161],{"class":154},[144,48936,48937,48939,48941,48943,48945],{"class":146,"line":33110},[144,48938,36449],{"class":154},[144,48940,9508],{"class":150},[144,48942,32800],{"class":154},[144,48944,2979],{"class":150},[144,48946,32805],{"class":154},[144,48948,48949],{"class":146,"line":33159},[144,48950,36462],{"class":213},[144,48952,48953,48955,48957,48959,48961],{"class":146,"line":33206},[144,48954,36467],{"class":154},[144,48956,9508],{"class":150},[144,48958,32779],{"class":154},[144,48960,346],{"class":203},[144,48962,161],{"class":154},[144,48964,48965],{"class":146,"line":33211},[144,48966,33024],{"class":213},[144,48968,48969],{"class":146,"line":33217},[144,48970,33030],{"class":213},[144,48972,48973,48975,48977],{"class":146,"line":33236},[144,48974,33036],{"class":154},[144,48976,739],{"class":150},[144,48978,33041],{"class":154},[144,48980,48981],{"class":146,"line":33242},[144,48982,33047],{"class":213},[144,48984,48985],{"class":146,"line":33262},[144,48986,33053],{"class":213},[144,48988,48989,48991,48993],{"class":146,"line":33268},[144,48990,33059],{"class":154},[144,48992,739],{"class":150},[144,48994,33041],{"class":154},[144,48996,48997],{"class":146,"line":33274},[144,48998,33069],{"class":213},[144,49000,49001,49003,49005],{"class":146,"line":33284},[144,49002,33075],{"class":154},[144,49004,739],{"class":150},[144,49006,33080],{"class":154},[144,49008,49009],{"class":146,"line":33289},[144,49010,33086],{"class":213},[144,49012,49013,49015,49017],{"class":146,"line":33295},[144,49014,33092],{"class":154},[144,49016,739],{"class":150},[144,49018,33080],{"class":154},[144,49020,49021],{"class":146,"line":33311},[144,49022,2430],{"emptyLinePlaceholder":72},[144,49024,49025],{"class":146,"line":33356},[144,49026,33107],{"class":213},[144,49028,49029,49031,49033,49035,49037,49039,49041,49043,49045,49047,49049,49051,49053,49055,49057,49059,49061,49063,49065,49067],{"class":146,"line":33362},[144,49030,32464],{"class":203},[144,49032,155],{"class":154},[144,49034,3622],{"class":259},[144,49036,32472],{"class":203},[144,49038,33121],{"class":259},[144,49040,1051],{"class":203},[144,49042,33126],{"class":150},[144,49044,1101],{"class":203},[144,49046,33131],{"class":259},[144,49048,1051],{"class":203},[144,49050,33126],{"class":150},[144,49052,1101],{"class":203},[144,49054,3622],{"class":259},[144,49056,33142],{"class":154},[144,49058,687],{"class":150},[144,49060,372],{"class":203},[144,49062,33149],{"class":154},[144,49064,687],{"class":150},[144,49066,372],{"class":203},[144,49068,33156],{"class":154},[144,49070,49071,49073,49075,49077,49079,49081,49083,49085,49087,49089,49091,49093,49095,49097,49099,49101,49103,49105,49107,49109],{"class":146,"line":33368},[144,49072,32464],{"class":203},[144,49074,155],{"class":154},[144,49076,3622],{"class":259},[144,49078,32472],{"class":203},[144,49080,33170],{"class":259},[144,49082,1051],{"class":203},[144,49084,33126],{"class":150},[144,49086,1101],{"class":203},[144,49088,33179],{"class":259},[144,49090,1051],{"class":203},[144,49092,33126],{"class":150},[144,49094,1101],{"class":203},[144,49096,3622],{"class":259},[144,49098,33190],{"class":154},[144,49100,687],{"class":150},[144,49102,372],{"class":203},[144,49104,33197],{"class":154},[144,49106,687],{"class":150},[144,49108,372],{"class":203},[144,49110,33156],{"class":154},[144,49112,49113],{"class":146,"line":33374},[144,49114,2430],{"emptyLinePlaceholder":72},[144,49116,49117],{"class":146,"line":33385},[144,49118,33214],{"class":213},[144,49120,49121,49123,49125,49127,49129,49131,49133],{"class":146,"line":33391},[144,49122,2527],{"class":150},[144,49124,33222],{"class":154},[144,49126,687],{"class":150},[144,49128,372],{"class":203},[144,49130,1095],{"class":154},[144,49132,1115],{"class":150},[144,49134,33233],{"class":154},[144,49136,49137],{"class":146,"line":33397},[144,49138,33239],{"class":213},[144,49140,49141,49143,49145,49147,49149,49151,49153],{"class":146,"line":33403},[144,49142,33245],{"class":154},[144,49144,194],{"class":203},[144,49146,200],{"class":150},[144,49148,33252],{"class":154},[144,49150,687],{"class":150},[144,49152,372],{"class":203},[144,49154,33259],{"class":154},[144,49156,49157],{"class":146,"line":33421},[144,49158,33265],{"class":213},[144,49160,49161],{"class":146,"line":33435},[144,49162,33271],{"class":213},[144,49164,49165,49167,49169],{"class":146,"line":33444},[144,49166,33277],{"class":154},[144,49168,200],{"class":150},[144,49170,32327],{"class":154},[144,49172,49173],{"class":146,"line":33453},[144,49174,2430],{"emptyLinePlaceholder":72},[144,49176,49177],{"class":146,"line":33462},[144,49178,33292],{"class":213},[144,49180,49181,49183,49185,49187,49189],{"class":146,"line":33471},[144,49182,33298],{"class":154},[144,49184,200],{"class":150},[144,49186,33303],{"class":154},[144,49188,687],{"class":150},[144,49190,33308],{"class":154},[144,49192,49193,49195,49197,49199,49201,49203,49205,49207,49209,49211,49213,49215,49217,49219,49221,49223,49225,49227],{"class":146,"line":33477},[144,49194,32464],{"class":203},[144,49196,155],{"class":154},[144,49198,33318],{"class":259},[144,49200,1051],{"class":203},[144,49202,33323],{"class":150},[144,49204,1101],{"class":203},[144,49206,699],{"class":259},[144,49208,1051],{"class":203},[144,49210,33323],{"class":150},[144,49212,1101],{"class":203},[144,49214,33336],{"class":259},[144,49216,33339],{"class":154},[144,49218,33342],{"class":150},[144,49220,1062],{"class":203},[144,49222,33347],{"class":154},[144,49224,483],{"class":150},[144,49226,1062],{"class":203},[144,49228,30510],{"class":154},[144,49230,49231],{"class":146,"line":33483},[144,49232,36746],{"class":213},[144,49234,49235],{"class":146,"line":33491},[144,49236,36751],{"class":213},[144,49238,49239,49241,49243],{"class":146,"line":33496},[144,49240,36756],{"class":154},[144,49242,33380],{"class":259},[144,49244,161],{"class":154},[144,49246,49247],{"class":146,"line":33502},[144,49248,33400],{"class":213},[144,49250,49251,49253,49255,49257,49259,49261],{"class":146,"line":33513},[144,49252,33406],{"class":154},[144,49254,200],{"class":150},[144,49256,33411],{"class":154},[144,49258,33414],{"class":5247},[144,49260,200],{"class":150},[144,49262,1576],{"class":154},[144,49264,49265,49267,49269,49271],{"class":146,"line":33519},[144,49266,33424],{"class":259},[144,49268,1014],{"class":154},[144,49270,33429],{"class":203},[144,49272,33432],{"class":154},[144,49274,49275,49277],{"class":146,"line":33539},[144,49276,33438],{"class":259},[144,49278,33441],{"class":154},[144,49280,49281,49283],{"class":146,"line":33545},[144,49282,33447],{"class":259},[144,49284,33450],{"class":154},[144,49286,49287,49289],{"class":146,"line":33551},[144,49288,33456],{"class":259},[144,49290,33459],{"class":154},[144,49292,49293,49295],{"class":146,"line":33557},[144,49294,33465],{"class":259},[144,49296,33468],{"class":154},[144,49298,49299],{"class":146,"line":33574},[144,49300,33474],{"class":154},[144,49302,49303],{"class":146,"line":33580},[144,49304,33480],{"class":213},[144,49306,49307,49309],{"class":146,"line":33586},[144,49308,4120],{"class":150},[144,49310,33488],{"class":154},[144,49312,49313],{"class":146,"line":33592},[144,49314,2430],{"emptyLinePlaceholder":72},[144,49316,49317],{"class":146,"line":33598},[144,49318,33499],{"class":213},[144,49320,49321,49323,49325],{"class":146,"line":33604},[144,49322,31960],{"class":150},[144,49324,33507],{"class":1993},[144,49326,33510],{"class":154},[144,49328,49329],{"class":146,"line":33631},[144,49330,33516],{"class":213},[144,49332,49333,49335,49337,49339,49341,49343,49345,49347],{"class":146,"line":33655},[144,49334,33522],{"class":154},[144,49336,31706],{"class":5247},[144,49338,200],{"class":150},[144,49340,155],{"class":154},[144,49342,653],{"class":203},[144,49344,533],{"class":154},[144,49346,448],{"class":203},[144,49348,30510],{"class":154},[144,49350,49351],{"class":146,"line":33661},[144,49352,33542],{"class":213},[144,49354,49355],{"class":146,"line":33667},[144,49356,33548],{"class":213},[144,49358,49359],{"class":146,"line":33673},[144,49360,33554],{"class":213},[144,49362,49363,49365,49367,49369,49371,49373,49375],{"class":146,"line":33684},[144,49364,31740],{"class":154},[144,49366,372],{"class":203},[144,49368,533],{"class":154},[144,49370,232],{"class":203},[144,49372,533],{"class":154},[144,49374,372],{"class":203},[144,49376,161],{"class":154},[144,49378,49379],{"class":146,"line":33695},[144,49380,33577],{"class":213},[144,49382,49383],{"class":146,"line":33701},[144,49384,33583],{"class":213},[144,49386,49387],{"class":146,"line":33718},[144,49388,33589],{"class":213},[144,49390,49391],{"class":146,"line":33741},[144,49392,33595],{"class":213},[144,49394,49395],{"class":146,"line":33764},[144,49396,33601],{"class":213},[144,49398,49399,49401,49403,49405,49407,49409,49411,49413,49415],{"class":146,"line":33770},[144,49400,33607],{"class":154},[144,49402,33610],{"class":259},[144,49404,33613],{"class":154},[144,49406,33616],{"class":259},[144,49408,533],{"class":154},[144,49410,33621],{"class":5247},[144,49412,200],{"class":150},[144,49414,33626],{"class":259},[144,49416,161],{"class":154},[144,49418,49419,49421,49423,49425,49427,49429,49431,49433,49435],{"class":146,"line":33775},[144,49420,33607],{"class":154},[144,49422,33610],{"class":259},[144,49424,33638],{"class":154},[144,49426,33641],{"class":259},[144,49428,533],{"class":154},[144,49430,33621],{"class":5247},[144,49432,200],{"class":150},[144,49434,33650],{"class":259},[144,49436,161],{"class":154},[144,49438,49439],{"class":146,"line":33784},[144,49440,33658],{"class":213},[144,49442,49443],{"class":146,"line":33794},[144,49444,33664],{"class":154},[144,49446,49447],{"class":146,"line":33800},[144,49448,33670],{"class":213},[144,49450,49451,49453,49455],{"class":146,"line":33805},[144,49452,33676],{"class":154},[144,49454,33679],{"class":259},[144,49456,161],{"class":154},[144,49458,49459,49461,49463],{"class":146,"line":33811},[144,49460,33687],{"class":154},[144,49462,33690],{"class":259},[144,49464,161],{"class":154},[144,49466,49467],{"class":146,"line":33824},[144,49468,33698],{"class":213},[144,49470,49471,49473,49475,49477,49479,49481,49483],{"class":146,"line":33830},[144,49472,31740],{"class":154},[144,49474,372],{"class":203},[144,49476,533],{"class":154},[144,49478,232],{"class":203},[144,49480,533],{"class":154},[144,49482,232],{"class":203},[144,49484,161],{"class":154},[144,49486,49487,49489,49491,49493,49495,49497,49499,49501,49503],{"class":146,"line":33841},[144,49488,33607],{"class":154},[144,49490,33610],{"class":259},[144,49492,33725],{"class":154},[144,49494,33616],{"class":259},[144,49496,533],{"class":154},[144,49498,33621],{"class":5247},[144,49500,200],{"class":150},[144,49502,33736],{"class":259},[144,49504,161],{"class":154},[144,49506,49507,49509,49511,49513,49515,49517,49519,49521,49523],{"class":146,"line":33852},[144,49508,33607],{"class":154},[144,49510,33610],{"class":259},[144,49512,33748],{"class":154},[144,49514,33641],{"class":259},[144,49516,533],{"class":154},[144,49518,33621],{"class":5247},[144,49520,200],{"class":150},[144,49522,33759],{"class":259},[144,49524,161],{"class":154},[144,49526,49527],{"class":146,"line":33871},[144,49528,33767],{"class":213},[144,49530,49532],{"class":146,"line":49531},219,[144,49533,33664],{"class":154},[144,49535,49537,49539,49541],{"class":146,"line":49536},220,[144,49538,33676],{"class":154},[144,49540,33610],{"class":259},[144,49542,161],{"class":154},[144,49544,49546,49548,49550],{"class":146,"line":49545},221,[144,49547,33687],{"class":154},[144,49549,33789],{"class":259},[144,49551,161],{"class":154},[144,49553,49555],{"class":146,"line":49554},222,[144,49556,33797],{"class":154},[144,49558,49560],{"class":146,"line":49559},223,[144,49561,2430],{"emptyLinePlaceholder":72},[144,49563,49565],{"class":146,"line":49564},224,[144,49566,33808],{"class":213},[144,49568,49570,49572,49574,49576,49578],{"class":146,"line":49569},225,[144,49571,1561],{"class":150},[144,49573,31233],{"class":203},[144,49575,2979],{"class":150},[144,49577,31238],{"class":259},[144,49579,3769],{"class":154},[144,49581,49583],{"class":146,"line":49582},226,[144,49584,33827],{"class":213},[144,49586,49588,49590,49592],{"class":146,"line":49587},227,[144,49589,44559],{"class":154},[144,49591,200],{"class":150},[144,49593,44564],{"class":154},[144,49595,49597,49599,49601],{"class":146,"line":49596},228,[144,49598,33844],{"class":154},[144,49600,200],{"class":150},[144,49602,33849],{"class":154},[144,49604,49606,49608,49610,49612,49614,49616,49618],{"class":146,"line":49605},229,[144,49607,33406],{"class":154},[144,49609,200],{"class":150},[144,49611,44581],{"class":154},[144,49613,33862],{"class":5247},[144,49615,200],{"class":150},[144,49617,1062],{"class":203},[144,49619,161],{"class":154},[144,49621,49623],{"class":146,"line":49622},230,[144,49624,33874],{"class":154},[22029,49626,49628],{"id":49627},"_242测试代码","2.4.2.测试代码",[14,49630,49631],{},"使用测试集进行测试与推理",[135,49633,49635],{"className":30391,"code":49634,"language":30393,"meta":30,"style":30},"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",[141,49636,49637,49643,49653,49663,49674,49684,49688,49692,49700,49705,49709,49726,49730,49734,49738,49742,49746,49778,49782,49790,49794,49806,49810,49814,49818,49822,49826,49830,49834,49838,49856,49870,49874,49884,49894,49904,49910,49914,49918,49926,49930,49946,49954,49958,49962,49970,49978,49982,49986,49990,49994,50000,50004,50014,50022,50030,50034,50038,50042,50050,50054,50070,50074,50078,50082,50094,50098,50110,50114,50118,50130,50134,50144,50148,50152,50164,50168,50176,50180,50184,50192,50196,50204,50208,50212,50216,50220,50224,50240,50248,50252,50256,50274,50280,50284,50294,50302,50310,50314,50318,50322,50326,50334,50338,50354,50358,50366,50374],{"__ignoreMap":30},[144,49638,49639,49641],{"class":146,"line":147},[144,49640,30405],{"class":150},[144,49642,30408],{"class":154},[144,49644,49645,49647,49649,49651],{"class":146,"line":66},[144,49646,30405],{"class":150},[144,49648,31428],{"class":154},[144,49650,31396],{"class":150},[144,49652,31433],{"class":154},[144,49654,49655,49657,49659,49661],{"class":146,"line":1210},[144,49656,30750],{"class":150},[144,49658,31411],{"class":154},[144,49660,30405],{"class":150},[144,49662,31416],{"class":154},[144,49664,49665,49667,49669,49671],{"class":146,"line":1225},[144,49666,30750],{"class":150},[144,49668,31381],{"class":154},[144,49670,30405],{"class":150},[144,49672,49673],{"class":154}," ImageFolder\n",[144,49675,49676,49678,49680,49682],{"class":146,"line":1231},[144,49677,30750],{"class":150},[144,49679,31927],{"class":154},[144,49681,30405],{"class":150},[144,49683,44653],{"class":154},[144,49685,49686],{"class":146,"line":1245},[144,49687,2430],{"emptyLinePlaceholder":72},[144,49689,49690],{"class":146,"line":1251},[144,49691,33964],{"class":213},[144,49693,49694,49696,49698],{"class":146,"line":1342},[144,49695,31960],{"class":150},[144,49697,33971],{"class":1993},[144,49699,31966],{"class":154},[144,49701,49702],{"class":146,"line":1348},[144,49703,49704],{"class":213},"   # 导入自己的数据集，并进行数据处理\n",[144,49706,49707],{"class":146,"line":1360},[144,49708,47974],{"class":213},[144,49710,49711,49713,49715,49717,49719,49721,49724],{"class":146,"line":1642},[144,49712,47979],{"class":203},[144,49714,200],{"class":150},[144,49716,825],{"class":150},[144,49718,406],{"class":259},[144,49720,713],{"class":203},[144,49722,49723],{"class":47990},"\u002Fdata\u002Ftest",[144,49725,25146],{"class":259},[144,49727,49728],{"class":146,"line":1647},[144,49729,2430],{"emptyLinePlaceholder":72},[144,49731,49732],{"class":146,"line":1653},[144,49733,48002],{"class":213},[144,49735,49736],{"class":146,"line":1658},[144,49737,48007],{"class":213},[144,49739,49740],{"class":146,"line":1672},[144,49741,48012],{"class":213},[144,49743,49744],{"class":146,"line":1677},[144,49745,48017],{"class":213},[144,49747,49748,49750,49752,49754,49756,49758,49760,49762,49764,49766,49768,49770,49772,49774,49776],{"class":146,"line":1683},[144,49749,48022],{"class":154},[144,49751,200],{"class":150},[144,49753,48027],{"class":154},[144,49755,48030],{"class":203},[144,49757,533],{"class":154},[144,49759,48035],{"class":203},[144,49761,533],{"class":154},[144,49763,48040],{"class":203},[144,49765,48043],{"class":154},[144,49767,48046],{"class":203},[144,49769,533],{"class":154},[144,49771,48051],{"class":203},[144,49773,533],{"class":154},[144,49775,48056],{"class":203},[144,49777,4687],{"class":154},[144,49779,49780],{"class":146,"line":1704},[144,49781,48063],{"class":213},[144,49783,49784,49786,49788],{"class":146,"line":1709},[144,49785,48068],{"class":154},[144,49787,200],{"class":150},[144,49789,48073],{"class":154},[144,49791,49792],{"class":146,"line":1723},[144,49793,48078],{"class":213},[144,49795,49796,49798,49800,49802,49804],{"class":146,"line":1728},[144,49797,48083],{"class":154},[144,49799,31514],{"class":203},[144,49801,533],{"class":154},[144,49803,31514],{"class":203},[144,49805,42635],{"class":154},[144,49807,49808],{"class":146,"line":1757},[144,49809,48096],{"class":213},[144,49811,49812],{"class":146,"line":1762},[144,49813,48101],{"class":154},[144,49815,49816],{"class":146,"line":1779},[144,49817,48106],{"class":154},[144,49819,49820],{"class":146,"line":1784},[144,49821,48111],{"class":213},[144,49823,49824],{"class":146,"line":1789},[144,49825,48116],{"class":213},[144,49827,49828],{"class":146,"line":1794},[144,49829,2430],{"emptyLinePlaceholder":72},[144,49831,49832],{"class":146,"line":1808},[144,49833,48125],{"class":213},[144,49835,49836],{"class":146,"line":1813},[144,49837,48130],{"class":213},[144,49839,49840,49842,49844,49846,49848,49850,49852,49854],{"class":146,"line":2607},[144,49841,33978],{"class":154},[144,49843,200],{"class":150},[144,49845,48139],{"class":154},[144,49847,48142],{"class":203},[144,49849,533],{"class":154},[144,49851,48147],{"class":5247},[144,49853,200],{"class":150},[144,49855,48152],{"class":154},[144,49857,49858,49860,49862,49864,49866,49868],{"class":146,"line":2621},[144,49859,34035],{"class":154},[144,49861,200],{"class":150},[144,49863,31547],{"class":154},[144,49865,31550],{"class":5247},[144,49867,200],{"class":150},[144,49869,34046],{"class":154},[144,49871,49872],{"class":146,"line":2629},[144,49873,34051],{"class":213},[144,49875,49876,49878,49880,49882],{"class":146,"line":2634},[144,49877,34056],{"class":5247},[144,49879,200],{"class":150},[144,49881,372],{"class":203},[144,49883,31479],{"class":154},[144,49885,49886,49888,49890,49892],{"class":146,"line":2640},[144,49887,34067],{"class":5247},[144,49889,200],{"class":150},[144,49891,31489],{"class":203},[144,49893,31479],{"class":154},[144,49895,49896,49898,49900,49902],{"class":146,"line":2646},[144,49897,34078],{"class":5247},[144,49899,200],{"class":150},[144,49901,346],{"class":203},[144,49903,161],{"class":154},[144,49905,49906,49908],{"class":146,"line":2651},[144,49907,4120],{"class":150},[144,49909,34091],{"class":154},[144,49911,49912],{"class":146,"line":7979},[144,49913,2430],{"emptyLinePlaceholder":72},[144,49915,49916],{"class":146,"line":8003},[144,49917,34100],{"class":213},[144,49919,49920,49922,49924],{"class":146,"line":8008},[144,49921,31960],{"class":150},[144,49923,34107],{"class":1993},[144,49925,34110],{"class":154},[144,49927,49928],{"class":146,"line":8014},[144,49929,34115],{"class":213},[144,49931,49932,49934,49936,49938,49940,49942,49944],{"class":146,"line":8041},[144,49933,31250],{"class":154},[144,49935,200],{"class":150},[144,49937,31257],{"class":259},[144,49939,1734],{"class":150},[144,49941,31262],{"class":154},[144,49943,1731],{"class":150},[144,49945,34132],{"class":259},[144,49947,49948,49950,49952],{"class":146,"line":8046},[144,49949,31302],{"class":154},[144,49951,200],{"class":150},[144,49953,32302],{"class":154},[144,49955,49956],{"class":146,"line":8052},[144,49957,2430],{"emptyLinePlaceholder":72},[144,49959,49960],{"class":146,"line":8064},[144,49961,34149],{"class":213},[144,49963,49964,49966,49968],{"class":146,"line":8076},[144,49965,34154],{"class":154},[144,49967,200],{"class":150},[144,49969,32355],{"class":203},[144,49971,49972,49974,49976],{"class":146,"line":8088},[144,49973,34163],{"class":154},[144,49975,200],{"class":150},[144,49977,3115],{"class":203},[144,49979,49980],{"class":146,"line":9747},[144,49981,2430],{"emptyLinePlaceholder":72},[144,49983,49984],{"class":146,"line":9772},[144,49985,34176],{"class":213},[144,49987,49988],{"class":146,"line":9795},[144,49989,34181],{"class":213},[144,49991,49992],{"class":146,"line":9819},[144,49993,34186],{"class":213},[144,49995,49996,49998],{"class":146,"line":9824},[144,49997,34191],{"class":150},[144,49999,32897],{"class":154},[144,50001,50002],{"class":146,"line":9829},[144,50003,34198],{"class":213},[144,50005,50006,50008,50010,50012],{"class":146,"line":9834},[144,50007,3433],{"class":150},[144,50009,34205],{"class":154},[144,50011,26056],{"class":150},[144,50013,34210],{"class":154},[144,50015,50016,50018,50020],{"class":146,"line":9843},[144,50017,34215],{"class":154},[144,50019,200],{"class":150},[144,50021,34220],{"class":154},[144,50023,50024,50026,50028],{"class":146,"line":9848},[144,50025,34225],{"class":154},[144,50027,200],{"class":150},[144,50029,34230],{"class":154},[144,50031,50032],{"class":146,"line":9854},[144,50033,34235],{"class":213},[144,50035,50036],{"class":146,"line":9875},[144,50037,32888],{"class":154},[144,50039,50040],{"class":146,"line":9881},[144,50041,34244],{"class":213},[144,50043,50044,50046,50048],{"class":146,"line":9895},[144,50045,32673],{"class":154},[144,50047,200],{"class":150},[144,50049,34253],{"class":154},[144,50051,50052],{"class":146,"line":9901},[144,50053,34258],{"class":213},[144,50055,50056,50058,50060,50062,50064,50066,50068],{"class":146,"line":9928},[144,50057,32690],{"class":154},[144,50059,200],{"class":150},[144,50061,32695],{"class":154},[144,50063,32698],{"class":5247},[144,50065,200],{"class":150},[144,50067,372],{"class":203},[144,50069,161],{"class":154},[144,50071,50072],{"class":146,"line":9937},[144,50073,34279],{"class":213},[144,50075,50076],{"class":146,"line":9943},[144,50077,34284],{"class":213},[144,50079,50080],{"class":146,"line":9951},[144,50081,34289],{"class":213},[144,50083,50084,50086,50088,50090,50092],{"class":146,"line":9956},[144,50085,34294],{"class":154},[144,50087,9508],{"class":150},[144,50089,32800],{"class":154},[144,50091,2979],{"class":150},[144,50093,34303],{"class":154},[144,50095,50096],{"class":146,"line":16635},[144,50097,34308],{"class":213},[144,50099,50100,50102,50104,50106,50108],{"class":146,"line":16641},[144,50101,34313],{"class":154},[144,50103,9508],{"class":150},[144,50105,34318],{"class":154},[144,50107,346],{"class":203},[144,50109,161],{"class":154},[144,50111,50112],{"class":146,"line":16664},[144,50113,2430],{"emptyLinePlaceholder":72},[144,50115,50116],{"class":146,"line":16670},[144,50117,34331],{"class":213},[144,50119,50120,50122,50124,50126,50128],{"class":146,"line":16693},[144,50121,34336],{"class":154},[144,50123,200],{"class":150},[144,50125,34341],{"class":154},[144,50127,739],{"class":150},[144,50129,34346],{"class":154},[144,50131,50132],{"class":146,"line":16707},[144,50133,34351],{"class":213},[144,50135,50136,50138,50140,50142],{"class":146,"line":16727},[144,50137,32464],{"class":203},[144,50139,155],{"class":154},[144,50141,34360],{"class":259},[144,50143,34363],{"class":154},[144,50145,50146],{"class":146,"line":16733},[144,50147,2430],{"emptyLinePlaceholder":72},[144,50149,50150],{"class":146,"line":16744},[144,50151,34372],{"class":213},[144,50153,50154,50156,50158,50160,50162],{"class":146,"line":16767},[144,50155,1561],{"class":150},[144,50157,31233],{"class":203},[144,50159,2979],{"class":150},[144,50161,31238],{"class":259},[144,50163,3769],{"class":154},[144,50165,50166],{"class":146,"line":16789},[144,50167,34389],{"class":213},[144,50169,50170,50172,50174],{"class":146,"line":16794},[144,50171,31302],{"class":154},[144,50173,200],{"class":150},[144,50175,44564],{"class":154},[144,50177,50178],{"class":146,"line":16800},[144,50179,34402],{"class":213},[144,50181,50182],{"class":146,"line":16814},[144,50183,34407],{"class":213},[144,50185,50186,50188,50190],{"class":146,"line":16827},[144,50187,34412],{"class":154},[144,50189,34415],{"class":259},[144,50191,30510],{"class":154},[144,50193,50194],{"class":146,"line":16832},[144,50195,34422],{"class":213},[144,50197,50198,50200,50202],{"class":146,"line":16846},[144,50199,34035],{"class":154},[144,50201,200],{"class":150},[144,50203,34431],{"class":154},[144,50205,50206],{"class":146,"line":16851},[144,50207,34436],{"class":213},[144,50209,50210],{"class":146,"line":16857},[144,50211,34441],{"class":154},[144,50213,50214],{"class":146,"line":16862},[144,50215,2430],{"emptyLinePlaceholder":72},[144,50217,50218],{"class":146,"line":16876},[144,50219,34450],{"class":213},[144,50221,50222],{"class":146,"line":16881},[144,50223,34455],{"class":213},[144,50225,50226,50228,50230,50232,50234,50236,50238],{"class":146,"line":16886},[144,50227,31250],{"class":154},[144,50229,200],{"class":150},[144,50231,31257],{"class":259},[144,50233,1734],{"class":150},[144,50235,31262],{"class":154},[144,50237,1731],{"class":150},[144,50239,34132],{"class":259},[144,50241,50242,50244,50246],{"class":146,"line":16900},[144,50243,31302],{"class":154},[144,50245,200],{"class":150},[144,50247,32302],{"class":154},[144,50249,50250],{"class":146,"line":16912},[144,50251,34484],{"class":213},[144,50253,50254],{"class":146,"line":16917},[144,50255,34489],{"class":213},[144,50257,50258,50260,50262,50264,50267,50269,50272],{"class":146,"line":16930},[144,50259,34494],{"class":154},[144,50261,200],{"class":150},[144,50263,1045],{"class":154},[144,50265,50266],{"class":259},"'猫'",[144,50268,533],{"class":154},[144,50270,50271],{"class":259},"'狗'",[144,50273,33259],{"class":154},[144,50275,50276,50278],{"class":146,"line":16935},[144,50277,34191],{"class":150},[144,50279,32897],{"class":154},[144,50281,50282],{"class":146,"line":16940},[144,50283,34559],{"class":213},[144,50285,50286,50288,50290,50292],{"class":146,"line":16945},[144,50287,3433],{"class":150},[144,50289,34566],{"class":154},[144,50291,26056],{"class":150},[144,50293,34210],{"class":154},[144,50295,50296,50298,50300],{"class":146,"line":16958},[144,50297,32623],{"class":154},[144,50299,200],{"class":150},[144,50301,32628],{"class":154},[144,50303,50304,50306,50308],{"class":146,"line":16963},[144,50305,32638],{"class":154},[144,50307,200],{"class":150},[144,50309,32643],{"class":154},[144,50311,50312],{"class":146,"line":32646},[144,50313,2430],{"emptyLinePlaceholder":72},[144,50315,50316],{"class":146,"line":32652},[144,50317,34595],{"class":213},[144,50319,50320],{"class":146,"line":32658},[144,50321,32888],{"class":154},[144,50323,50324],{"class":146,"line":32664},[144,50325,34604],{"class":213},[144,50327,50328,50330,50332],{"class":146,"line":32670},[144,50329,32673],{"class":154},[144,50331,200],{"class":150},[144,50333,32678],{"class":154},[144,50335,50336],{"class":146,"line":32681},[144,50337,34617],{"class":213},[144,50339,50340,50342,50344,50346,50348,50350,50352],{"class":146,"line":32687},[144,50341,32690],{"class":154},[144,50343,200],{"class":150},[144,50345,32695],{"class":154},[144,50347,32698],{"class":5247},[144,50349,200],{"class":150},[144,50351,372],{"class":203},[144,50353,161],{"class":154},[144,50355,50356],{"class":146,"line":32707},[144,50357,34638],{"class":213},[144,50359,50360,50362,50364],{"class":146,"line":32713},[144,50361,34643],{"class":154},[144,50363,200],{"class":150},[144,50365,34648],{"class":154},[144,50367,50368,50370,50372],{"class":146,"line":32724},[144,50369,34653],{"class":154},[144,50371,200],{"class":150},[144,50373,34658],{"class":154},[144,50375,50376,50378,50380,50382,50384,50386,50388,50390],{"class":146,"line":32730},[144,50377,34663],{"class":203},[144,50379,155],{"class":154},[144,50381,34668],{"class":259},[144,50383,34671],{"class":154},[144,50385,34674],{"class":259},[144,50387,533],{"class":154},[144,50389,34679],{"class":259},[144,50391,34682],{"class":154},[5157,50393,50394],{},"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":30,"searchDepth":66,"depth":66,"links":50396},[50397,50398,50399,50400],{"id":30604,"depth":1210,"text":30605},{"id":37852,"depth":1210,"text":37853},{"id":41285,"depth":1210,"text":41286},{"id":45294,"depth":1210,"text":45295},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30596,"description":23408},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50407,"title":50408,"body":50409,"description":23408,"extension":70,"meta":50416,"navigation":72,"path":50417,"seo":50418,"stem":50419,"__hash__":50420},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50410,"toc":50414},[50411],[10,50412,50408],{"id":50413},"_3yolo模型学习",{"title":30,"searchDepth":66,"depth":66,"links":50415},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50408,"description":23408},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50422,"title":50423,"body":50424,"description":50431,"extension":70,"meta":50432,"navigation":72,"path":50434,"seo":50435,"stem":50436,"__hash__":50437},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50425,"toc":50429},[50426],[14,50427,50428],{},"yolo模型还未补充",{"title":30,"searchDepth":66,"depth":66,"links":50430},[],"深度学习学习",{"category":50433},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50423,"description":50431},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50439,"title":50440,"body":50441,"description":23408,"extension":70,"meta":50466,"navigation":72,"path":50467,"seo":50468,"stem":50469,"__hash__":50470},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50442,"toc":50464},[50443,50446,50449,50454,50461],[10,50444,50440],{"id":50445},"_1工具",[14,50447,50448],{},"提示错误插件：有问题会提前报错",[14,50450,50451],{},[28,50452],{"alt":30,"src":50453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,50455,50456],{},[393,50457,50460],{"href":50458,"rel":50459},"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",[23897],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,50462,50463],{},"alt键加上下箭头可以实现语句的移动",{"title":30,"searchDepth":66,"depth":66,"links":50465},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50440,"description":23408},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50472,"title":50473,"body":50474,"description":23408,"extension":70,"meta":53338,"navigation":72,"path":53339,"seo":53340,"stem":53341,"__hash__":53342},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50475,"toc":53289},[50476,50479,50483,50487,50492,50495,50500,50504,50511,50516,50523,50528,50535,50540,50544,50549,50552,50556,50561,50565,50570,50573,50576,50579,50582,50585,50588,50591,50594,50599,50604,50609,50613,50616,50619,50623,50628,50631,50639,50644,50661,50669,50674,50679,50684,50689,50694,50697,50702,50707,50711,50720,50725,50730,50734,50739,50742,50746,50751,50759,50764,50769,50772,50777,50782,50787,50790,50793,50796,50801,50806,50809,50814,50817,50822,50825,50828,50831,50836,50839,50842,50857,50862,50867,50872,50875,50878,50881,50895,50898,50903,50908,50911,50914,50917,50920,50923,50926,50929,50933,50937,50942,50946,50949,50954,50959,50962,50967,50970,50974,50979,50982,50985,50988,50991,50994,50997,51000,51003,51006,51010,51015,51020,51025,51028,51031,51035,51040,51043,51047,51050,51053,51058,51061,51064,51068,51072,51075,51080,51085,51088,51117,51122,51127,51132,51137,51141,51146,51150,51155,51158,51162,51166,51171,51175,51180,51185,51189,51194,51197,51199,51202,51207,51211,51216,51220,51224,51229,51234,51239,51244,51248,51253,51258,51263,51266,51269,51274,51277,51282,51287,51292,51297,51301,52108,52112,52455,52460,52463,52466,52469,52472,52475,52478,52481,52484,52486,52489,52491,52494,52498,52503,52506,52509,52512,52516,52521,52526,52546,52549,52553,52558,52563,52580,52584,52613,52617,52639,52641,52680,52688,52694,52698,52701,52704,52709,52714,52717,52720,52723,52728,52733,52736,52739,52742,52745,52748,52751,52754,52757,52760,52763,52766,52768,52771,52774,52777,52780,52783,52786,52789,52792,52796,52801,52804,52809,52812,52815,52818,52821,52824,52827,52830,52832,52835,52838,52841,52844,52847,52850,52854,52857,52866,52869,52874,52877,52882,52885,52888,52891,52894,52897,52900,52903,52907,52911,52914,52917,52922,52927,52932,52936,52941,52946,52949,52952,52955,52958,52961,52966,52969,52974,52976,52981,52984,52988,52993,52996,52999,53004,53008,53011,53016,53019,53022,53051,53056,53059,53062,53065,53068,53071,53075,53078,53164,53168,53171,53176,53181,53188,53191,53194,53197,53200,53203,53208,53213,53216,53219,53222,53225,53228,53231,53234,53237,53240,53242,53245,53249,53254,53259,53264,53267,53272,53277,53280,53283,53286],[10,50477,50473],{"id":50478},"_2基础语法",[18,50480,50482],{"id":50481},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[115,50484,50486],{"id":50485},"_211-js组成","2.1.1 js组成",[98,50488,50489],{},[101,50490,50491],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,50493,50494],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[98,50496,50497],{"start":66},[101,50498,50499],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[115,50501,50503],{"id":50502},"_212-js书写位置","2.1.2 js书写位置",[98,50505,50506],{},[101,50507,50508],{},[304,50509,50510],{},"内部 JavaScript",[14,50512,50513],{},[28,50514],{"alt":30,"src":50515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[98,50517,50518],{"start":66},[101,50519,50520],{},[304,50521,50522],{},"外部 JavaScript",[14,50524,50525],{},[28,50526],{"alt":30,"src":50527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[98,50529,50530],{"start":1210},[101,50531,50532],{},[304,50533,50534],{},"内联 JavaScript",[14,50536,50537],{},[28,50538],{"alt":30,"src":50539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[115,50541,50543],{"id":50542},"_213-javascript注释","2.1.3 JavaScript注释",[14,50545,50546],{},[28,50547],{"alt":30,"src":50548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,50550,50551],{},"alt+shift+a一定要记住！",[115,50553,50555],{"id":50554},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,50557,50558],{},[28,50559],{"alt":30,"src":50560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[115,50562,50564],{"id":50563},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[98,50566,50567],{},[101,50568,50569],{},"输出语法：",[14,50571,50572],{},"①document.write('要出的内容')",[14,50574,50575],{},"向body内输出内容；",[14,50577,50578],{},"如果输出的内容写的是标签，也会被解析cheng",[14,50580,50581],{},"②alert('要出的内容')",[14,50583,50584],{},"页面弹出警告对话框",[14,50586,50587],{},"③console.log('控制台打印')",[14,50589,50590],{},"控制台输出语法，程序员调试使用",[14,50592,50593],{},"输入log就行，自动生成：",[14,50595,50596],{},[28,50597],{"alt":30,"src":50598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[98,50600,50601],{"start":66},[101,50602,50603],{},"输入语法：",[14,50605,50606],{},[28,50607],{"alt":30,"src":50608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[115,50610,50612],{"id":50611},"_2116-字面量","21.1.6 字面量",[14,50614,50615],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,50617,50618],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[18,50620,50622],{"id":50621},"_22-变量","2.2 变量",[98,50624,50625],{},[101,50626,50627],{},"变量声明",[14,50629,50630],{},"let 变量名",[1162,50632,50633,50636],{},[101,50634,50635],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[101,50637,50638],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[98,50640,50641],{"start":66},[101,50642,50643],{},"变量赋值",[135,50645,50649],{"className":50646,"code":50647,"language":50648,"meta":30,"style":30},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[141,50650,50651,50656],{"__ignoreMap":30},[144,50652,50653],{"class":146,"line":147},[144,50654,50655],{"class":154},"let age\n",[144,50657,50658],{"class":146,"line":66},[144,50659,50660],{"class":154},"age=18\n",[98,50662,50663,50666],{"start":1210},[101,50664,50665],{},"连这些（变量的初始化）：let age=18",[101,50667,50668],{},"更新变量",[14,50670,50671],{},[28,50672],{"alt":30,"src":50673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[98,50675,50676],{"start":1231},[101,50677,50678],{},"声明多个变量",[14,50680,50681],{},[28,50682],{"alt":30,"src":50683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[98,50685,50686],{"start":1245},[101,50687,50688],{},"变量命名规则与规范",[14,50690,50691],{},[28,50692],{"alt":30,"src":50693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,50695,50696],{},"遵守小驼峰！",[98,50698,50699],{"start":1251},[101,50700,50701],{},"变量拓展-let和var的区别",[14,50703,50704],{},[28,50705],{"alt":30,"src":50706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[18,50708,50710],{"id":50709},"_23-数组","2.3 数组",[135,50712,50714],{"className":50646,"code":50713,"language":50648,"meta":30,"style":30},"let arr = []\n",[141,50715,50716],{"__ignoreMap":30},[144,50717,50718],{"class":146,"line":147},[144,50719,50713],{"class":154},[14,50721,50722],{},[28,50723],{"alt":30,"src":50724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,50726,50727],{},[28,50728],{"alt":30,"src":50729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[18,50731,50733],{"id":50732},"_24-常量","2.4 常量",[14,50735,50736],{},[28,50737],{"alt":30,"src":50738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,50740,50741],{},"const — 类似于 let ，但是变量的值无法被修改",[18,50743,50745],{"id":50744},"_25-数据类型","2.5 数据类型",[14,50747,50748],{},[28,50749],{"alt":30,"src":50750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[98,50752,50753,50756],{},[101,50754,50755],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[101,50757,50758],{},"算数运算符：",[14,50760,50761],{},[28,50762],{"alt":30,"src":50763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[98,50765,50766],{"start":1210},[101,50767,50768],{},"数字类型（Number）",[14,50770,50771],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,50773,50774],{},[28,50775],{"alt":30,"src":50776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[98,50778,50779],{"start":1225},[101,50780,50781],{},"字符串类型（string）",[14,50783,50784],{},[28,50785],{"alt":30,"src":50786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,50788,50789],{},"反引号也是可以使用的",[14,50791,50792],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,50794,50795],{},"例如：document.write(\"我今年\"+age+\"岁\")",[98,50797,50798],{"start":1231},[101,50799,50800],{},"模板字符串",[14,50802,50803],{},[28,50804],{"alt":30,"src":50805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,50807,50808],{},"类似于python的字符串格式化",[98,50810,50811],{"start":1245},[101,50812,50813],{},"布尔类型",[14,50815,50816],{},"true 和 false",[98,50818,50819],{"start":1251},[101,50820,50821],{},"未定义类型（underfined）",[14,50823,50824],{},"表示没有赋值",[14,50826,50827],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,50829,50830],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[98,50832,50833],{"start":1342},[101,50834,50835],{},"null（空类型）",[14,50837,50838],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,50840,50841],{},"赋值了，但是内容为空",[135,50843,50845],{"className":50646,"code":50844,"language":50648,"meta":30,"style":30},"typeof null\n输出的是'object'，是一个对象数据类型\n",[141,50846,50847,50852],{"__ignoreMap":30},[144,50848,50849],{"class":146,"line":147},[144,50850,50851],{"class":154},"typeof null\n",[144,50853,50854],{"class":146,"line":66},[144,50855,50856],{"class":154},"输出的是'object'，是一个对象数据类型\n",[98,50858,50859],{"start":1348},[101,50860,50861],{},"控制台检测数据类型",[14,50863,50864],{},[28,50865],{"alt":30,"src":50866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[98,50868,50869],{"start":1360},[101,50870,50871],{},"类型转换",[14,50873,50874],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,50876,50877],{},"转换方式：隐式转换和显示转换",[14,50879,50880],{},"①隐式转换",[1162,50882,50883,50886,50889,50892],{},[101,50884,50885],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[101,50887,50888],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[101,50890,50891],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[101,50893,50894],{},"任何数据和字符串相加结果都是字符串",[14,50896,50897],{},"②显示转换",[14,50899,50900],{},[28,50901],{"alt":30,"src":50902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,50904,50905],{},[28,50906],{"alt":30,"src":50907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,50909,50910],{},"在输入的时候要用好隐式转换，简单写起来",[14,50912,50913],{},"let num = +prompt(’请输入数字：‘)",[14,50915,50916],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,50918,50919],{},"console.log(parseInt('12.333px'))",[14,50921,50922],{},"输出为：12",[14,50924,50925],{},"console.log(parseInt('a'a'a12.333px'))",[14,50927,50928],{},"输出：NaN",[18,50930,50932],{"id":50931},"_26-运算符","2.6 运算符",[115,50934,50936],{"id":50935},"_261-赋值运算符","2.6.1 赋值运算符",[14,50938,50939],{},[28,50940],{"alt":30,"src":50941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[115,50943,50945],{"id":50944},"_262-一元运算符","2.6.2 一元运算符",[14,50947,50948],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,50950,50951],{},[28,50952],{"alt":30,"src":50953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,50955,50956],{},[28,50957],{"alt":30,"src":50958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,50960,50961],{},"两者的区别：",[14,50963,50964],{},[28,50965],{"alt":30,"src":50966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,50968,50969],{},"前置先自加；后置后加，代码执行完之后再加",[115,50971,50973],{"id":50972},"_263-比较运算符","2.6.3 比较运算符",[14,50975,50976],{},[28,50977],{"alt":30,"src":50978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,50980,50981],{},"比较运算符也有隐式转换",[14,50983,50984],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,50986,50987],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,50989,50990],{},"要使用三等，开发的时候",[14,50992,50993],{},"NaN不等于任何人，包括它自己",[14,50995,50996],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,50998,50999],{},"7\u002F10=0.7",[14,51001,51002],{},"最后：0.5+0.2=0.7",[14,51004,51005],{},"字符串比较，比较的是字符对应的ASCII码",[115,51007,51009],{"id":51008},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,51011,51012],{},[28,51013],{"alt":30,"src":51014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,51016,51017],{},[28,51018],{"alt":30,"src":51019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,51021,51022],{},[28,51023],{"alt":30,"src":51024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,51026,51027],{},"上述题目选D",[14,51029,51030],{},"与真2假1；或真1假2",[115,51032,51034],{"id":51033},"_265-运算符优先级","2.6.5 运算符优先级",[14,51036,51037],{},[28,51038],{"alt":30,"src":51039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51041,51042],{},"先算逻辑与，后算逻辑或",[18,51044,51046],{"id":51045},"_27-语句","2.7 语句",[14,51048,51049],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51051,51052],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51054,51055],{},[28,51056],{"alt":30,"src":51057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51059,51060],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51062,51063],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[115,51065,51067],{"id":51066},"_271-分支语句","2.7.1 分支语句",[22029,51069,51071],{"id":51070},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51073,51074],{},"if语句单行简单的话，可以不写{}，写在一行就行",[98,51076,51077],{},[101,51078,51079],{},"单分支语句",[14,51081,51082],{},[28,51083],{"alt":30,"src":51084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51086,51087],{},"除了0，所有数字都为真",[135,51089,51091],{"className":50646,"code":51090,"language":50648,"meta":30,"style":30},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[141,51092,51093,51098,51103,51108,51112],{"__ignoreMap":30},[144,51094,51095],{"class":146,"line":147},[144,51096,51097],{"class":154},"if（0) {\n",[144,51099,51100],{"class":146,"line":66},[144,51101,51102],{"class":154},"    let a=1\n",[144,51104,51105],{"class":146,"line":1210},[144,51106,51107],{"class":154},"    alert(typeof a)\n",[144,51109,51110],{"class":146,"line":1225},[144,51111,1595],{"class":154},[144,51113,51114],{"class":146,"line":1231},[144,51115,51116],{"class":154},"不输出，括号为假\n",[98,51118,51119],{"start":66},[101,51120,51121],{},"双分支语句",[14,51123,51124],{},[28,51125],{"alt":30,"src":51126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[98,51128,51129],{"start":1210},[101,51130,51131],{},"多分支语句",[14,51133,51134],{},[28,51135],{"alt":30,"src":51136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22029,51138,51140],{"id":51139},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51142,51143],{},[28,51144],{"alt":30,"src":51145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22029,51147,51149],{"id":51148},"_2713-switch语句","2.7.1.3 switch语句",[14,51151,51152],{},[28,51153],{"alt":30,"src":51154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51156,51157],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[115,51159,51161],{"id":51160},"_272-循环语句","2.7.2 循环语句",[22029,51163,51165],{"id":51164},"_2721-断点演示","2.7.2.1 断点演示",[14,51167,51168],{},[28,51169],{"alt":30,"src":51170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22029,51172,51174],{"id":51173},"_2722-while循环","2.7.2.2 while循环",[14,51176,51177],{},[28,51178],{"alt":30,"src":51179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51181,51182],{},[28,51183],{"alt":30,"src":51184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22029,51186,51188],{"id":51187},"_2723-for循环","2.7.2.3 for循环",[14,51190,51191],{},[28,51192],{"alt":30,"src":51193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51195,51196],{},"for(;;) {",[14,51198,1101],{},[14,51200,51201],{},"表示无限循环",[14,51203,51204],{},[28,51205],{"alt":30,"src":51206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22029,51208,51210],{"id":51209},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51212,51213],{},[28,51214],{"alt":30,"src":51215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[18,51217,51219],{"id":51218},"_28-数组","2.8 数组",[115,51221,51223],{"id":51222},"_281-基础认识","2.8.1 基础认识",[14,51225,51226],{},[28,51227],{"alt":30,"src":51228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51230,51231],{},[28,51232],{"alt":30,"src":51233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51235,51236],{},[28,51237],{"alt":30,"src":51238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51240,51241],{},[28,51242],{"alt":30,"src":51243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[115,51245,51247],{"id":51246},"_282-操作数组","2.8.2 操作数组",[14,51249,51250],{},[28,51251],{"alt":30,"src":51252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[98,51254,51255],{},[101,51256,51257],{},"添加元素",[14,51259,51260],{},[28,51261],{"alt":30,"src":51262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51264,51265],{},"console.log(arr.push('green'))",[14,51267,51268],{},"输出结果：为新数组的长度",[14,51270,51271],{},[28,51272],{"alt":30,"src":51273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51275,51276],{},"push用的非常多，一定要记住",[98,51278,51279],{},[101,51280,51281],{},"删除元素",[14,51283,51284],{},[28,51285],{"alt":30,"src":51286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51288,51289],{},[28,51290],{"alt":30,"src":51291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51293,51294],{},[28,51295],{"alt":30,"src":51296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[115,51298,51300],{"id":51299},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[135,51302,51304],{"className":50646,"code":51303,"language":50648,"meta":30,"style":30},"\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",[141,51305,51306,51321,51337,51341,51350,51368,51392,51414,51428,51436,51443,51455,51466,51470,51474,51481,51493,51508,51521,51540,51557,51572,51584,51596,51608,51612,51616,51627,51637,51649,51661,51673,51684,51688,51692,51704,51708,51722,51726,51730,51741,51755,51767,51781,51785,51794,51803,51807,51816,51820,51829,51834,51839,51852,51880,51885,51890,51915,51920,51924,51929,51934,51949,51953,51958,51988,52000,52016,52032,52046,52051,52058,52062,52067,52080,52088,52096,52100],{"__ignoreMap":30},[144,51307,51308,51311,51315,51318],{"class":146,"line":147},[144,51309,51310],{"class":154},"\u003C!",[144,51312,51314],{"class":51313},"s9eBZ","DOCTYPE",[144,51316,51317],{"class":1993}," html",[144,51319,51320],{"class":154},">\n",[144,51322,51323,51325,51327,51330,51332,51335],{"class":146,"line":66},[144,51324,1065],{"class":154},[144,51326,50648],{"class":51313},[144,51328,51329],{"class":1993}," lang",[144,51331,200],{"class":154},[144,51333,51334],{"class":259},"\"en\"",[144,51336,51320],{"class":154},[144,51338,51339],{"class":146,"line":1210},[144,51340,2430],{"emptyLinePlaceholder":72},[144,51342,51343,51345,51348],{"class":146,"line":1225},[144,51344,1065],{"class":154},[144,51346,51347],{"class":51313},"head",[144,51349,51320],{"class":154},[144,51351,51352,51355,51358,51361,51363,51366],{"class":146,"line":1231},[144,51353,51354],{"class":154},"    \u003C",[144,51356,51357],{"class":51313},"meta",[144,51359,51360],{"class":1993}," charset",[144,51362,200],{"class":154},[144,51364,51365],{"class":259},"\"UTF-8\"",[144,51367,51320],{"class":154},[144,51369,51370,51372,51374,51377,51379,51382,51385,51387,51390],{"class":146,"line":1245},[144,51371,51354],{"class":154},[144,51373,51357],{"class":51313},[144,51375,51376],{"class":1993}," http-equiv",[144,51378,200],{"class":154},[144,51380,51381],{"class":259},"\"X-UA-Compatible\"",[144,51383,51384],{"class":1993}," content",[144,51386,200],{"class":154},[144,51388,51389],{"class":259},"\"IE=edge\"",[144,51391,51320],{"class":154},[144,51393,51394,51396,51398,51400,51402,51405,51407,51409,51412],{"class":146,"line":1251},[144,51395,51354],{"class":154},[144,51397,51357],{"class":51313},[144,51399,14951],{"class":1993},[144,51401,200],{"class":154},[144,51403,51404],{"class":259},"\"viewport\"",[144,51406,51384],{"class":1993},[144,51408,200],{"class":154},[144,51410,51411],{"class":259},"\"width=device-width, initial-scale=1.0\"",[144,51413,51320],{"class":154},[144,51415,51416,51418,51421,51424,51426],{"class":146,"line":1342},[144,51417,51354],{"class":154},[144,51419,51420],{"class":51313},"title",[144,51422,51423],{"class":154},">Document\u003C\u002F",[144,51425,51420],{"class":51313},[144,51427,51320],{"class":154},[144,51429,51430,51432,51434],{"class":146,"line":1348},[144,51431,51354],{"class":154},[144,51433,5157],{"class":51313},[144,51435,51320],{"class":154},[144,51437,51438,51441],{"class":146,"line":1360},[144,51439,51440],{"class":51313},"        *",[144,51442,15603],{"class":154},[144,51444,51445,51448,51451,51453],{"class":146,"line":1642},[144,51446,51447],{"class":203},"            margin",[144,51449,51450],{"class":154},": ",[144,51452,346],{"class":203},[144,51454,1321],{"class":154},[144,51456,51457,51460,51462,51464],{"class":146,"line":1647},[144,51458,51459],{"class":203},"            padding",[144,51461,51450],{"class":154},[144,51463,346],{"class":203},[144,51465,1321],{"class":154},[144,51467,51468],{"class":146,"line":1653},[144,51469,2559],{"class":154},[144,51471,51472],{"class":146,"line":1658},[144,51473,2430],{"emptyLinePlaceholder":72},[144,51475,51476,51479],{"class":146,"line":1672},[144,51477,51478],{"class":1993},"        .box",[144,51480,15603],{"class":154},[144,51482,51483,51486,51488,51491],{"class":146,"line":1677},[144,51484,51485],{"class":203},"            display",[144,51487,51450],{"class":154},[144,51489,51490],{"class":203},"flex",[144,51492,1321],{"class":154},[144,51494,51495,51498,51500,51503,51506],{"class":146,"line":1683},[144,51496,51497],{"class":203},"            width",[144,51499,51450],{"class":154},[144,51501,51502],{"class":203},"700",[144,51504,51505],{"class":150},"px",[144,51507,1321],{"class":154},[144,51509,51510,51513,51515,51517,51519],{"class":146,"line":1704},[144,51511,51512],{"class":203},"            height",[144,51514,51450],{"class":154},[144,51516,4003],{"class":203},[144,51518,51505],{"class":150},[144,51520,1321],{"class":154},[144,51522,51523,51526,51528,51530,51532,51535,51538],{"class":146,"line":1709},[144,51524,51525],{"class":203},"            border-left",[144,51527,51450],{"class":154},[144,51529,372],{"class":203},[144,51531,51505],{"class":150},[144,51533,51534],{"class":203}," solid",[144,51536,51537],{"class":203}," pink",[144,51539,1321],{"class":154},[144,51541,51542,51545,51547,51549,51551,51553,51555],{"class":146,"line":1723},[144,51543,51544],{"class":203},"            border-bottom",[144,51546,51450],{"class":154},[144,51548,372],{"class":203},[144,51550,51505],{"class":150},[144,51552,51534],{"class":203},[144,51554,51537],{"class":203},[144,51556,1321],{"class":154},[144,51558,51559,51561,51563,51565,51567,51570],{"class":146,"line":1728},[144,51560,51447],{"class":203},[144,51562,51450],{"class":154},[144,51564,811],{"class":203},[144,51566,51505],{"class":150},[144,51568,51569],{"class":203}," auto",[144,51571,1321],{"class":154},[144,51573,51574,51577,51579,51582],{"class":146,"line":1757},[144,51575,51576],{"class":203},"            justify-content",[144,51578,51450],{"class":154},[144,51580,51581],{"class":203},"space-around",[144,51583,1321],{"class":154},[144,51585,51586,51589,51591,51594],{"class":146,"line":1762},[144,51587,51588],{"class":203},"            align-items",[144,51590,51450],{"class":154},[144,51592,51593],{"class":203},"flex-end",[144,51595,1321],{"class":154},[144,51597,51598,51601,51603,51606],{"class":146,"line":1779},[144,51599,51600],{"class":203},"            text-align",[144,51602,51450],{"class":154},[144,51604,51605],{"class":203},"center",[144,51607,1321],{"class":154},[144,51609,51610],{"class":146,"line":1784},[144,51611,2559],{"class":154},[144,51613,51614],{"class":146,"line":1789},[144,51615,2430],{"emptyLinePlaceholder":72},[144,51617,51618,51620,51622,51625],{"class":146,"line":1794},[144,51619,51478],{"class":1993},[144,51621,1115],{"class":150},[144,51623,51624],{"class":51313},"div",[144,51626,15603],{"class":154},[144,51628,51629,51631,51633,51635],{"class":146,"line":1808},[144,51630,51485],{"class":203},[144,51632,51450],{"class":154},[144,51634,51490],{"class":203},[144,51636,1321],{"class":154},[144,51638,51639,51641,51643,51645,51647],{"class":146,"line":1813},[144,51640,51497],{"class":203},[144,51642,51450],{"class":154},[144,51644,811],{"class":203},[144,51646,51505],{"class":150},[144,51648,1321],{"class":154},[144,51650,51651,51654,51656,51659],{"class":146,"line":2607},[144,51652,51653],{"class":203},"            background-color",[144,51655,51450],{"class":154},[144,51657,51658],{"class":203},"pink",[144,51660,1321],{"class":154},[144,51662,51663,51666,51668,51671],{"class":146,"line":2621},[144,51664,51665],{"class":203},"            flex-direction",[144,51667,51450],{"class":154},[144,51669,51670],{"class":203},"column",[144,51672,1321],{"class":154},[144,51674,51675,51677,51679,51682],{"class":146,"line":2629},[144,51676,51576],{"class":203},[144,51678,51450],{"class":154},[144,51680,51681],{"class":203},"space-between",[144,51683,1321],{"class":154},[144,51685,51686],{"class":146,"line":2634},[144,51687,2559],{"class":154},[144,51689,51690],{"class":146,"line":2640},[144,51691,2430],{"emptyLinePlaceholder":72},[144,51693,51694,51696,51699,51702],{"class":146,"line":2646},[144,51695,51478],{"class":1993},[144,51697,51698],{"class":51313}," div",[144,51700,51701],{"class":51313}," span",[144,51703,15603],{"class":154},[144,51705,51706],{"class":146,"line":2651},[144,51707,2430],{"emptyLinePlaceholder":72},[144,51709,51710,51713,51715,51718,51720],{"class":146,"line":7979},[144,51711,51712],{"class":203},"            margin-top",[144,51714,51450],{"class":154},[144,51716,51717],{"class":203},"-20",[144,51719,51505],{"class":150},[144,51721,1321],{"class":154},[144,51723,51724],{"class":146,"line":8003},[144,51725,2559],{"class":154},[144,51727,51728],{"class":146,"line":8008},[144,51729,2430],{"emptyLinePlaceholder":72},[144,51731,51732,51734,51736,51739],{"class":146,"line":8014},[144,51733,51478],{"class":1993},[144,51735,51698],{"class":51313},[144,51737,51738],{"class":51313}," h4",[144,51740,15603],{"class":154},[144,51742,51743,51746,51748,51751,51753],{"class":146,"line":8041},[144,51744,51745],{"class":203},"            margin-bottom",[144,51747,51450],{"class":154},[144,51749,51750],{"class":203},"-35",[144,51752,51505],{"class":150},[144,51754,1321],{"class":154},[144,51756,51757,51759,51761,51763,51765],{"class":146,"line":8046},[144,51758,51497],{"class":203},[144,51760,51450],{"class":154},[144,51762,511],{"class":203},[144,51764,51505],{"class":150},[144,51766,1321],{"class":154},[144,51768,51769,51772,51774,51777,51779],{"class":146,"line":8052},[144,51770,51771],{"class":203},"            margin-left",[144,51773,51450],{"class":154},[144,51775,51776],{"class":203},"-10",[144,51778,51505],{"class":150},[144,51780,1321],{"class":154},[144,51782,51783],{"class":146,"line":8064},[144,51784,2559],{"class":154},[144,51786,51787,51790,51792],{"class":146,"line":8076},[144,51788,51789],{"class":154},"    \u003C\u002F",[144,51791,5157],{"class":51313},[144,51793,51320],{"class":154},[144,51795,51796,51799,51801],{"class":146,"line":8088},[144,51797,51798],{"class":154},"\u003C\u002F",[144,51800,51347],{"class":51313},[144,51802,51320],{"class":154},[144,51804,51805],{"class":146,"line":9747},[144,51806,2430],{"emptyLinePlaceholder":72},[144,51808,51809,51811,51814],{"class":146,"line":9772},[144,51810,1065],{"class":154},[144,51812,51813],{"class":51313},"body",[144,51815,51320],{"class":154},[144,51817,51818],{"class":146,"line":9795},[144,51819,2430],{"emptyLinePlaceholder":72},[144,51821,51822,51824,51827],{"class":146,"line":9819},[144,51823,51354],{"class":154},[144,51825,51826],{"class":51313},"script",[144,51828,51320],{"class":154},[144,51830,51831],{"class":146,"line":9824},[144,51832,51833],{"class":213},"        \u002F\u002F 1. 四次弹框效果\n",[144,51835,51836],{"class":146,"line":9829},[144,51837,51838],{"class":213},"        \u002F\u002F 声明一个新的数组\n",[144,51840,51841,51844,51847,51849],{"class":146,"line":9834},[144,51842,51843],{"class":150},"        let",[144,51845,51846],{"class":154}," arr ",[144,51848,200],{"class":150},[144,51850,51851],{"class":154}," []\n",[144,51853,51854,51856,51858,51861,51863,51865,51867,51869,51871,51874,51876,51878],{"class":146,"line":9843},[144,51855,3433],{"class":150},[144,51857,1688],{"class":154},[144,51859,51860],{"class":150},"let",[144,51862,9469],{"class":154},[144,51864,200],{"class":150},[144,51866,25131],{"class":203},[144,51868,9476],{"class":154},[144,51870,1618],{"class":150},[144,51872,51873],{"class":203}," 4",[144,51875,3244],{"class":154},[144,51877,2322],{"class":150},[144,51879,12473],{"class":154},[144,51881,51882],{"class":146,"line":9848},[144,51883,51884],{"class":213},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[144,51886,51887],{"class":146,"line":9854},[144,51888,51889],{"class":213},"            \u002F\u002F arr.push(num)\n",[144,51891,51892,51895,51898,51900,51903,51905,51908,51910,51913],{"class":146,"line":9875},[144,51893,51894],{"class":154},"            arr.",[144,51896,51897],{"class":1993},"push",[144,51899,155],{"class":154},[144,51901,51902],{"class":1993},"prompt",[144,51904,155],{"class":154},[144,51906,51907],{"class":259},"`请输入第${",[144,51909,596],{"class":154},[144,51911,51912],{"class":259},"}季度的数据:`",[144,51914,30510],{"class":154},[144,51916,51917],{"class":146,"line":9881},[144,51918,51919],{"class":213},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[144,51921,51922],{"class":146,"line":9895},[144,51923,2559],{"class":154},[144,51925,51926],{"class":146,"line":9901},[144,51927,51928],{"class":213},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[144,51930,51931],{"class":146,"line":9928},[144,51932,51933],{"class":213},"        \u002F\u002F 盒子开头\n",[144,51935,51936,51939,51942,51944,51947],{"class":146,"line":9937},[144,51937,51938],{"class":154},"        document.",[144,51940,51941],{"class":1993},"write",[144,51943,155],{"class":154},[144,51945,51946],{"class":259},"` \u003Cdiv class=\"box\">`",[144,51948,161],{"class":154},[144,51950,51951],{"class":146,"line":9943},[144,51952,2430],{"emptyLinePlaceholder":72},[144,51954,51955],{"class":146,"line":9951},[144,51956,51957],{"class":213},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[144,51959,51960,51962,51964,51966,51968,51970,51972,51974,51976,51979,51982,51984,51986],{"class":146,"line":9956},[144,51961,3433],{"class":150},[144,51963,1688],{"class":154},[144,51965,51860],{"class":150},[144,51967,9469],{"class":154},[144,51969,200],{"class":150},[144,51971,4123],{"class":203},[144,51973,9476],{"class":154},[144,51975,1065],{"class":150},[144,51977,51978],{"class":154}," arr.",[144,51980,51981],{"class":203},"length",[144,51983,3244],{"class":154},[144,51985,2322],{"class":150},[144,51987,12473],{"class":154},[144,51989,51990,51993,51995,51997],{"class":146,"line":16635},[144,51991,51992],{"class":154},"            document.",[144,51994,51941],{"class":1993},[144,51996,155],{"class":154},[144,51998,51999],{"class":259},"`\n",[144,52001,52002,52005,52007,52009,52011,52013],{"class":146,"line":16641},[144,52003,52004],{"class":259},"              \u003Cdiv style=\"height: ${",[144,52006,3910],{"class":154},[144,52008,1045],{"class":259},[144,52010,596],{"class":154},[144,52012,1095],{"class":259},[144,52014,52015],{"class":259},"}px;\">\n",[144,52017,52018,52021,52023,52025,52027,52029],{"class":146,"line":16664},[144,52019,52020],{"class":259},"                \u003Cspan>${",[144,52022,3910],{"class":154},[144,52024,1045],{"class":259},[144,52026,596],{"class":154},[144,52028,1095],{"class":259},[144,52030,52031],{"class":259},"}\u003C\u002Fspan>\n",[144,52033,52034,52037,52039,52041,52043],{"class":146,"line":16670},[144,52035,52036],{"class":259},"                \u003Ch4>第${",[144,52038,596],{"class":154},[144,52040,45579],{"class":150},[144,52042,25131],{"class":203},[144,52044,52045],{"class":259},"}季度\u003C\u002Fh4>\n",[144,52047,52048],{"class":146,"line":16693},[144,52049,52050],{"class":259},"              \u003C\u002Fdiv>          \n",[144,52052,52053,52056],{"class":146,"line":16707},[144,52054,52055],{"class":259},"            `",[144,52057,161],{"class":154},[144,52059,52060],{"class":146,"line":16727},[144,52061,2559],{"class":154},[144,52063,52064],{"class":146,"line":16733},[144,52065,52066],{"class":213},"        \u002F\u002F 盒子结尾\n",[144,52068,52069,52071,52073,52075,52078],{"class":146,"line":16744},[144,52070,51938],{"class":154},[144,52072,51941],{"class":1993},[144,52074,155],{"class":154},[144,52076,52077],{"class":259},"` \u003C\u002Fdiv>`",[144,52079,161],{"class":154},[144,52081,52082,52084,52086],{"class":146,"line":16767},[144,52083,51789],{"class":154},[144,52085,51826],{"class":51313},[144,52087,51320],{"class":154},[144,52089,52090,52092,52094],{"class":146,"line":16789},[144,52091,51798],{"class":154},[144,52093,51813],{"class":51313},[144,52095,51320],{"class":154},[144,52097,52098],{"class":146,"line":16794},[144,52099,2430],{"emptyLinePlaceholder":72},[144,52101,52102,52104,52106],{"class":146,"line":16800},[144,52103,51798],{"class":154},[144,52105,50648],{"class":51313},[144,52107,51320],{"class":154},[115,52109,52111],{"id":52110},"_284-冒泡排序","2.8.4 冒泡排序",[135,52113,52115],{"className":50646,"code":52114,"language":50648,"meta":30,"style":30},"\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",[141,52116,52117,52127,52141,52145,52153,52168,52188,52200,52208,52212,52220,52228,52260,52293,52330,52335,52354,52359,52372,52387,52403,52407,52412,52416,52426,52435,52443,52447],{"__ignoreMap":30},[144,52118,52119,52121,52123,52125],{"class":146,"line":147},[144,52120,51310],{"class":154},[144,52122,51314],{"class":51313},[144,52124,51317],{"class":1993},[144,52126,51320],{"class":154},[144,52128,52129,52131,52133,52135,52137,52139],{"class":146,"line":66},[144,52130,1065],{"class":154},[144,52132,50648],{"class":51313},[144,52134,51329],{"class":1993},[144,52136,200],{"class":154},[144,52138,51334],{"class":259},[144,52140,51320],{"class":154},[144,52142,52143],{"class":146,"line":1210},[144,52144,2430],{"emptyLinePlaceholder":72},[144,52146,52147,52149,52151],{"class":146,"line":1225},[144,52148,1065],{"class":154},[144,52150,51347],{"class":51313},[144,52152,51320],{"class":154},[144,52154,52155,52158,52160,52162,52164,52166],{"class":146,"line":1231},[144,52156,52157],{"class":154},"  \u003C",[144,52159,51357],{"class":51313},[144,52161,51360],{"class":1993},[144,52163,200],{"class":154},[144,52165,51365],{"class":259},[144,52167,51320],{"class":154},[144,52169,52170,52172,52174,52176,52178,52180,52182,52184,52186],{"class":146,"line":1245},[144,52171,52157],{"class":154},[144,52173,51357],{"class":51313},[144,52175,14951],{"class":1993},[144,52177,200],{"class":154},[144,52179,51404],{"class":259},[144,52181,51384],{"class":1993},[144,52183,200],{"class":154},[144,52185,51411],{"class":259},[144,52187,51320],{"class":154},[144,52189,52190,52192,52194,52196,52198],{"class":146,"line":1251},[144,52191,52157],{"class":154},[144,52193,51420],{"class":51313},[144,52195,51423],{"class":154},[144,52197,51420],{"class":51313},[144,52199,51320],{"class":154},[144,52201,52202,52204,52206],{"class":146,"line":1342},[144,52203,51798],{"class":154},[144,52205,51347],{"class":51313},[144,52207,51320],{"class":154},[144,52209,52210],{"class":146,"line":1348},[144,52211,2430],{"emptyLinePlaceholder":72},[144,52213,52214,52216,52218],{"class":146,"line":1360},[144,52215,1065],{"class":154},[144,52217,51813],{"class":51313},[144,52219,51320],{"class":154},[144,52221,52222,52224,52226],{"class":146,"line":1642},[144,52223,52157],{"class":154},[144,52225,51826],{"class":51313},[144,52227,51320],{"class":154},[144,52229,52230,52233,52235,52237,52240,52242,52244,52246,52248,52250,52252,52254,52256,52258],{"class":146,"line":1647},[144,52231,52232],{"class":150},"    let",[144,52234,51846],{"class":154},[144,52236,200],{"class":150},[144,52238,52239],{"class":154}," [",[144,52241,474],{"class":203},[144,52243,12466],{"class":154},[144,52245,448],{"class":203},[144,52247,12466],{"class":154},[144,52249,226],{"class":203},[144,52251,12466],{"class":154},[144,52253,232],{"class":203},[144,52255,12466],{"class":154},[144,52257,372],{"class":203},[144,52259,33259],{"class":154},[144,52261,52262,52264,52266,52268,52270,52272,52274,52276,52278,52280,52282,52285,52287,52289,52291],{"class":146,"line":1653},[144,52263,3231],{"class":150},[144,52265,1688],{"class":154},[144,52267,51860],{"class":150},[144,52269,9469],{"class":154},[144,52271,200],{"class":150},[144,52273,4123],{"class":203},[144,52275,9476],{"class":154},[144,52277,1065],{"class":150},[144,52279,51978],{"class":154},[144,52281,51981],{"class":203},[144,52283,52284],{"class":150}," -",[144,52286,25131],{"class":203},[144,52288,3244],{"class":154},[144,52290,2322],{"class":150},[144,52292,12473],{"class":154},[144,52294,52295,52298,52300,52302,52304,52306,52308,52310,52312,52314,52316,52318,52320,52322,52324,52326,52328],{"class":146,"line":1658},[144,52296,52297],{"class":150},"      for",[144,52299,1688],{"class":154},[144,52301,51860],{"class":150},[144,52303,9531],{"class":154},[144,52305,200],{"class":150},[144,52307,4123],{"class":203},[144,52309,9538],{"class":154},[144,52311,1065],{"class":150},[144,52313,51978],{"class":154},[144,52315,51981],{"class":203},[144,52317,52284],{"class":150},[144,52319,9469],{"class":154},[144,52321,687],{"class":150},[144,52323,25131],{"class":203},[144,52325,9545],{"class":154},[144,52327,2322],{"class":150},[144,52329,12473],{"class":154},[144,52331,52332],{"class":146,"line":1672},[144,52333,52334],{"class":213},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[144,52336,52337,52339,52342,52344,52347,52349,52351],{"class":146,"line":1677},[144,52338,2527],{"class":150},[144,52340,52341],{"class":154}," (arr[j] ",[144,52343,1115],{"class":150},[144,52345,52346],{"class":154}," arr[j ",[144,52348,636],{"class":150},[144,52350,25131],{"class":203},[144,52352,52353],{"class":154},"]) {\n",[144,52355,52356],{"class":146,"line":1683},[144,52357,52358],{"class":213},"          \u002F\u002F 交换两个变量\n",[144,52360,52361,52364,52367,52369],{"class":146,"line":1704},[144,52362,52363],{"class":150},"          let",[144,52365,52366],{"class":154}," tmp ",[144,52368,200],{"class":150},[144,52370,52371],{"class":154}," arr[j]\n",[144,52373,52374,52377,52379,52381,52383,52385],{"class":146,"line":1709},[144,52375,52376],{"class":154},"          arr[j] ",[144,52378,200],{"class":150},[144,52380,52346],{"class":154},[144,52382,636],{"class":150},[144,52384,25131],{"class":203},[144,52386,33259],{"class":154},[144,52388,52389,52392,52394,52396,52398,52400],{"class":146,"line":1723},[144,52390,52391],{"class":154},"          arr[j ",[144,52393,636],{"class":150},[144,52395,25131],{"class":203},[144,52397,4473],{"class":154},[144,52399,200],{"class":150},[144,52401,52402],{"class":154}," tmp\n",[144,52404,52405],{"class":146,"line":1728},[144,52406,2559],{"class":154},[144,52408,52409],{"class":146,"line":1757},[144,52410,52411],{"class":154},"      }\n",[144,52413,52414],{"class":146,"line":1762},[144,52415,2217],{"class":154},[144,52417,52418,52421,52423],{"class":146,"line":1779},[144,52419,52420],{"class":154},"    document.",[144,52422,51941],{"class":1993},[144,52424,52425],{"class":154},"(arr)\n",[144,52427,52428,52431,52433],{"class":146,"line":1784},[144,52429,52430],{"class":154},"  \u003C\u002F",[144,52432,51826],{"class":51313},[144,52434,51320],{"class":154},[144,52436,52437,52439,52441],{"class":146,"line":1789},[144,52438,51798],{"class":154},[144,52440,51813],{"class":51313},[144,52442,51320],{"class":154},[144,52444,52445],{"class":146,"line":1794},[144,52446,2430],{"emptyLinePlaceholder":72},[144,52448,52449,52451,52453],{"class":146,"line":1808},[144,52450,51798],{"class":154},[144,52452,50648],{"class":51313},[144,52454,51320],{"class":154},[14,52456,52457],{},[28,52458],{"alt":30,"src":52459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,52461,52462],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,52464,52465],{},"let arr = [4, 2, 5, 1, 3]",[14,52467,52468],{},"\u002F\u002F 1.升序排列写法",[14,52470,52471],{},"arr.sort(function (a, b) {",[14,52473,52474],{},"return a - b",[14,52476,52477],{},"})",[14,52479,52480],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,52482,52483],{},"\u002F\u002F 降序排列写法",[14,52485,52471],{},[14,52487,52488],{},"return b - a",[14,52490,52477],{},[14,52492,52493],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[18,52495,52497],{"id":52496},"_29-函数","2.9 函数",[14,52499,52500],{},[28,52501],{"alt":30,"src":52502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,52504,52505],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,52507,52508],{},"函数的声明用function",[14,52510,52511],{},"函数里边可以嵌套函数",[115,52513,52515],{"id":52514},"_291-函数传参","2.9.1 函数传参",[14,52517,52518],{},[28,52519],{"alt":30,"src":52520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,52522,52523],{},[28,52524],{"alt":30,"src":52525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1162,52527,52528,52531,52534,52537,52540,52543],{},[101,52529,52530],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[101,52532,52533],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[101,52535,52536],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[101,52538,52539],{},"开发中尽量保持形参和实参个数一致",[101,52541,52542],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[101,52544,52545],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,52547,52548],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[115,52550,52552],{"id":52551},"_292-函数的返回值","2.9.2 函数的返回值",[14,52554,52555],{},[28,52556],{"alt":30,"src":52557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,52559,52560],{},[28,52561],{"alt":30,"src":52562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1162,52564,52565,52568,52571,52574,52577],{},[101,52566,52567],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[101,52569,52570],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[101,52572,52573],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[101,52575,52576],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[101,52578,52579],{},"断点调试:进入函数内部看执行过程F11",[115,52581,52583],{"id":52582},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[135,52585,52587],{"className":50646,"code":52586,"language":50648,"meta":30,"style":30},"    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",[141,52588,52589,52594,52599,52603,52608],{"__ignoreMap":30},[144,52590,52591],{"class":146,"line":147},[144,52592,52593],{"class":154},"    function fn(a, b) {\n",[144,52595,52596],{"class":146,"line":66},[144,52597,52598],{"class":154},"      console.log(a + b);\n",[144,52600,52601],{"class":146,"line":1210},[144,52602,2217],{"class":154},[144,52604,52605],{"class":146,"line":1225},[144,52606,52607],{"class":154},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[144,52609,52610],{"class":146,"line":1231},[144,52611,52612],{"class":154},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[115,52614,52616],{"id":52615},"_294-作用域","2.9.4 作用域",[1162,52618,52619,52625,52630,52633,52636],{},[101,52620,52621,52622],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[304,52623,52624],{},"作用域",[101,52626,52627],{},[304,52628,52629],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[101,52631,52632],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[101,52634,52635],{},"函数内部可以直接所使用全局变量",[101,52637,52638],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,52640,14664],{},[135,52642,52644],{"className":50646,"code":52643,"language":50648,"meta":30,"style":30},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[141,52645,52646,52651,52656,52660,52665,52670,52675],{"__ignoreMap":30},[144,52647,52648],{"class":146,"line":147},[144,52649,52650],{"class":154},"    function fun() {\n",[144,52652,52653],{"class":146,"line":66},[144,52654,52655],{"class":154},"      num = 10\n",[144,52657,52658],{"class":146,"line":1210},[144,52659,2217],{"class":154},[144,52661,52662],{"class":146,"line":1225},[144,52663,52664],{"class":154},"    fun()\n",[144,52666,52667],{"class":146,"line":1231},[144,52668,52669],{"class":154},"    console.log(num)\n",[144,52671,52672],{"class":146,"line":1245},[144,52673,52674],{"class":154},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[144,52676,52677],{"class":146,"line":1251},[144,52678,52679],{"class":154},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1162,52681,52682,52685],{},[101,52683,52684],{},"函数内部的形参可以看做是局部变量",[101,52686,52687],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,52689,52690,52691],{},"变量访问原则： ",[304,52692,52693],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[115,52695,52697],{"id":52696},"_295-匿名函数","2.9.5 匿名函数",[14,52699,52700],{},"函数可以分为具名函数和匿名函数",[14,52702,52703],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[98,52705,52706],{},[101,52707,52708],{},"函数表达式",[14,52710,52711],{},[28,52712],{"alt":30,"src":52713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,52715,52716],{},"里边也可以写参数",[14,52718,52719],{},"具名函数调用位置可以随意调整；",[14,52721,52722],{},"匿名函数函数表达式形式只能在声明后才可以使用",[98,52724,52725],{"start":66},[101,52726,52727],{},"立即执行函数",[14,52729,52730],{},[28,52731],{"alt":30,"src":52732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,52734,52735],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,52737,52738],{},"写法：两个小括号，然后在第一个小括号中写function",[14,52740,52741],{},"(function () {})();",[14,52743,52744],{},"不要落下最后的;",[14,52746,52747],{},"立即执行函数必须要加;",[14,52749,52750],{},"分号写前写后都没问题",[14,52752,52753],{},"写前：",[14,52755,52756],{},"(function() {})()",[14,52758,52759],{},";(function () {})();",[14,52761,52762],{},"写后:",[14,52764,52765],{},"(function() {})();",[14,52767,52741],{},[14,52769,52770],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,52772,52773],{},"还有一种写法：",[14,52775,52776],{},"(function(){}());",[14,52778,52779],{},"或者:",[14,52781,52782],{},"!function(){}();",[14,52784,52785],{},"立即执行函数有时候也是可以加名字的：",[14,52787,52788],{},"(function flexible(window,document) {}(window,document));",[14,52790,52791],{},"省一些调用方法",[115,52793,52795],{"id":52794},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,52797,52798],{},[28,52799],{"alt":30,"src":52800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,52802,52803],{},"这样就不用非得给x,y初始化了",[14,52805,52806],{},[28,52807],{"alt":30,"src":52808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,52810,52811],{},"代码执行时先看左边",[14,52813,52814],{},"例如：console.log(false && 3+5)",[14,52816,52817],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,52819,52820],{},"&&都是真时，就返回最后一个真值",[14,52822,52823],{},"console.log(11 && 22)",[14,52825,52826],{},"输出22",[14,52828,52829],{},"逻辑与：遇真则真",[14,52831,14664],{},[14,52833,52834],{},"let age=1",[14,52836,52837],{},"console.log(11 || age++)",[14,52839,52840],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,52842,52843],{},"console.log(11 || 22)",[14,52845,52846],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,52848,52849],{},"||如果都是假的话，就取最后一个假的值了",[115,52851,52853],{"id":52852},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,52855,52856],{},"显示转换：",[14,52858,52859,52862,52863],{},[304,52860,52861],{},"记忆","： ",[304,52864,52865],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,52867,52868],{},"空字符串为假，其他字符串全为真",[14,52870,52871],{},[28,52872],{"alt":30,"src":52873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,52875,52876],{},"隐式转换：",[14,52878,52879],{},[28,52880],{"alt":30,"src":52881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,52883,52884],{},"隐式转换:",[14,52886,52887],{},"null+3=3",[14,52889,52890],{},"undefined+3=NaN",[14,52892,52893],{},"null==undefined 输出true,他两个都当0看",[14,52895,52896],{},"null===undefined 输出false",[14,52898,52899],{},"undefined做任何操作都是NaN",[14,52901,52902],{},"NaN不等于NaN，NaN表示计算错误",[18,52904,52906],{"id":52905},"_210-对象","2.10 对象",[115,52908,52910],{"id":52909},"_2101-对象的介绍","2.10.1 对象的介绍",[14,52912,52913],{},"对象也是一种数据类型，里边的数据是无序的",[14,52915,52916],{},"对象由属性和方法组成",[14,52918,52919],{},[28,52920],{"alt":30,"src":52921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,52923,52924],{},[28,52925],{"alt":30,"src":52926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,52928,52929],{},[28,52930],{"alt":30,"src":52931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[115,52933,52935],{"id":52934},"_2102-对象属性","2.10.2 对象属性",[14,52937,52938],{},[28,52939],{"alt":30,"src":52940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[98,52942,52943],{},[101,52944,52945],{},"查询对象",[14,52947,52948],{},"对象名.属性 goods.uname",[14,52950,52951],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,52953,52954],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,52956,52957],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,52959,52960],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[98,52962,52963],{"start":66},[101,52964,52965],{},"重新赋值",[14,52967,52968],{},"对象名.属性=新值",[98,52970,52971],{"start":1210},[101,52972,52973],{},"增加新数据",[14,52975,52968],{},[98,52977,52978],{"start":1225},[101,52979,52980],{},"删除对象中的属性",[14,52982,52983],{},"delete 对象名.属性",[115,52985,52987],{"id":52986},"_2103-对象方法","2.10.3 对象方法",[14,52989,52990],{},[28,52991],{"alt":30,"src":52992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,52994,52995],{},"后边跟的是匿名函数",[14,52997,52998],{},"对象外面的叫函数；对象内部的叫方法",[14,53000,53001],{},[28,53002],{"alt":30,"src":53003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[115,53005,53007],{"id":53006},"_2104-遍历对象","2.10.4 遍历对象",[14,53009,53010],{},"理解为加括号的python字典遍历",[14,53012,53013],{},[28,53014],{"alt":30,"src":53015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,53017,53018],{},"k是字符串类型",[14,53020,53021],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[135,53023,53025],{"className":50646,"code":53024,"language":50648,"meta":30,"style":30},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[141,53026,53027,53032,53037,53042,53047],{"__ignoreMap":30},[144,53028,53029],{"class":146,"line":147},[144,53030,53031],{"class":154},"   let arr = [1, 2, 3]\n",[144,53033,53034],{"class":146,"line":66},[144,53035,53036],{"class":154},"    for (let k in arr) {\n",[144,53038,53039],{"class":146,"line":1210},[144,53040,53041],{"class":154},"      console.log(k)\n",[144,53043,53044],{"class":146,"line":1225},[144,53045,53046],{"class":154},"      console.log(arr[k])\n",[144,53048,53049],{"class":146,"line":1231},[144,53050,2217],{"class":154},[14,53052,53053],{},[28,53054],{"alt":30,"src":53055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53057,53058],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53060,53061],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53063,53064],{},"for in 得到的k是属性名",[51826,53066,53067],{},"\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,53069,53070],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[115,53072,53074],{"id":53073},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53076,53077],{},"数组中放对象信息",[135,53079,53083],{"className":53080,"code":53081,"language":53082,"meta":30,"style":30},"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",[141,53084,53085,53093,53098,53103,53108,53113,53118,53123,53128,53133,53138,53143,53148,53152,53156],{"__ignoreMap":30},[144,53086,53087,53089,53091],{"class":146,"line":147},[144,53088,1065],{"class":154},[144,53090,51826],{"class":51313},[144,53092,51320],{"class":154},[144,53094,53095],{"class":146,"line":66},[144,53096,53097],{"class":154},"    let students = [\n",[144,53099,53100],{"class":146,"line":1210},[144,53101,53102],{"class":154},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[144,53104,53105],{"class":146,"line":1225},[144,53106,53107],{"class":154},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[144,53109,53110],{"class":146,"line":1231},[144,53111,53112],{"class":154},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[144,53114,53115],{"class":146,"line":1245},[144,53116,53117],{"class":154},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[144,53119,53120],{"class":146,"line":1251},[144,53121,53122],{"class":154},"    ]\n",[144,53124,53125],{"class":146,"line":1342},[144,53126,53127],{"class":154},"    for (let i = 0; i \u003C students.length; i++) {\n",[144,53129,53130],{"class":146,"line":1348},[144,53131,53132],{"class":154},"      for (let k in students[i]) {\n",[144,53134,53135],{"class":146,"line":1360},[144,53136,53137],{"class":154},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[144,53139,53140],{"class":146,"line":1642},[144,53141,53142],{"class":154},"        \u002F\u002F输出每个人的名字：\n",[144,53144,53145],{"class":146,"line":1647},[144,53146,53147],{"class":154},"        \u002F\u002Fconsole.log(students[i].name)\n",[144,53149,53150],{"class":146,"line":1653},[144,53151,52411],{"class":154},[144,53153,53154],{"class":146,"line":1658},[144,53155,2217],{"class":154},[144,53157,53158,53160,53162],{"class":146,"line":1672},[144,53159,52430],{"class":154},[144,53161,51826],{"class":51313},[144,53163,51320],{"class":154},[115,53165,53167],{"id":53166},"_2106-内置对象","2.10.6 内置对象",[14,53169,53170],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[98,53172,53173],{},[101,53174,53175],{},"数学对象Math",[14,53177,53178],{},[28,53179],{"alt":30,"src":53180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53182,53183],{},[393,53184,53187],{"href":53185,"rel":53186},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23897],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53189,53190],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53192,53193],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53195,53196],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53198,53199],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53201,53202],{},"null属于对象数据类型",[98,53204,53205],{"start":66},[101,53206,53207],{},"生成任意范围随机数",[14,53209,53210],{},[28,53211],{"alt":30,"src":53212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53214,53215],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53217,53218],{},"乘以几就取不到几",[14,53220,53221],{},"取数组中的随机元素：",[14,53223,53224],{},"let arr = ['red', 'green', 'blue']",[14,53226,53227],{},"let random = Math.floor(Math.random() * arr.length)",[14,53229,53230],{},"console.log(arr[random])",[14,53232,53233],{},"这个函数得到的是全闭区间",[14,53235,53236],{},"function getRandom(N, M) {",[14,53238,53239],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53241,1101],{},[14,53243,53244],{},"console.log(getRandom(4, 8))",[115,53246,53248],{"id":53247},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53250,53251],{},[28,53252],{"alt":30,"src":53253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53255,53256],{},[28,53257],{"alt":30,"src":53258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53260,53261],{},[28,53262],{"alt":30,"src":53263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53265,53266],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53268,53269],{},[28,53270],{"alt":30,"src":53271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53273,53274],{},[28,53275],{"alt":30,"src":53276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53278,53279],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53281,53282],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53284,53285],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5157,53287,53288],{},"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":30,"searchDepth":66,"depth":66,"links":53290},[53291,53299,53300,53301,53302,53303,53310,53314,53320,53329],{"id":50481,"depth":66,"text":50482,"children":53292},[53293,53294,53295,53296,53297,53298],{"id":50485,"depth":1210,"text":50486},{"id":50502,"depth":1210,"text":50503},{"id":50542,"depth":1210,"text":50543},{"id":50554,"depth":1210,"text":50555},{"id":50563,"depth":1210,"text":50564},{"id":50611,"depth":1210,"text":50612},{"id":50621,"depth":66,"text":50622},{"id":50709,"depth":66,"text":50710},{"id":50732,"depth":66,"text":50733},{"id":50744,"depth":66,"text":50745},{"id":50931,"depth":66,"text":50932,"children":53304},[53305,53306,53307,53308,53309],{"id":50935,"depth":1210,"text":50936},{"id":50944,"depth":1210,"text":50945},{"id":50972,"depth":1210,"text":50973},{"id":51008,"depth":1210,"text":51009},{"id":51033,"depth":1210,"text":51034},{"id":51045,"depth":66,"text":51046,"children":53311},[53312,53313],{"id":51066,"depth":1210,"text":51067},{"id":51160,"depth":1210,"text":51161},{"id":51218,"depth":66,"text":51219,"children":53315},[53316,53317,53318,53319],{"id":51222,"depth":1210,"text":51223},{"id":51246,"depth":1210,"text":51247},{"id":51299,"depth":1210,"text":51300},{"id":52110,"depth":1210,"text":52111},{"id":52496,"depth":66,"text":52497,"children":53321},[53322,53323,53324,53325,53326,53327,53328],{"id":52514,"depth":1210,"text":52515},{"id":52551,"depth":1210,"text":52552},{"id":52582,"depth":1210,"text":52583},{"id":52615,"depth":1210,"text":52616},{"id":52696,"depth":1210,"text":52697},{"id":52794,"depth":1210,"text":52795},{"id":52852,"depth":1210,"text":52853},{"id":52905,"depth":66,"text":52906,"children":53330},[53331,53332,53333,53334,53335,53336,53337],{"id":52909,"depth":1210,"text":52910},{"id":52934,"depth":1210,"text":52935},{"id":52986,"depth":1210,"text":52987},{"id":53006,"depth":1210,"text":53007},{"id":53073,"depth":1210,"text":53074},{"id":53166,"depth":1210,"text":53167},{"id":53247,"depth":1210,"text":53248},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50473,"description":23408},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53344,"title":53345,"body":53346,"description":23408,"extension":70,"meta":76686,"navigation":72,"path":76687,"seo":76688,"stem":76689,"__hash__":76690},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53347,"toc":76626},[53348,53351,53354,53357,53362,53365,53368,53371,53375,53379,53385,53390,53398,53405,53408,53412,53417,53422,53427,53430,53433,53444,53447,53451,53454,53457,53462,53467,53472,53475,53478,53570,53573,53578,53581,53586,53589,53592,53597,53600,53605,53609,53612,53626,53630,53635,53638,53641,53645,53650,53653,53657,53661,53666,53670,53675,53678,53681,53684,53687,53690,53693,53698,53703,53731,53734,53737,53740,53745,53748,53751,53754,53757,53761,53790,53794,53799,53804,53807,53810,53813,53818,53933,53938,53943,54104,54109,54112,54116,54121,54126,54129,54132,54135,54138,54141,54144,54147,54150,54153,54156,54159,54162,54165,54168,54170,54173,54176,54179,54184,54188,54585,54588,54594,54598,54603,55885,55890,55893,55896,55899,55904,57100,57104,57110,57115,57118,57123,57128,57132,57136,57141,57144,57149,57152,57155,57159,58067,58070,58074,58295,58298,58301,58304,58530,58533,58757,58760,58764,58769,58772,58775,59003,59006,59039,59042,59046,59051,59055,59058,59061,59064,59067,59070,59073,59076,59081,60361,60365,60368,61461,61465,61468,61471,61474,61477,61481,61484,61487,61489,61497,62978,62982,62985,62988,62991,63200,63203,63207,63211,63216,63221,63224,63227,63232,63236,63241,63244,63353,63357,63362,63367,63370,63373,63377,63382,63387,63392,63395,63398,63409,63412,63417,63422,63425,63428,63501,63505,63510,63513,63515,63526,63530,63535,64861,64864,64867,64870,64872,64875,64878,64881,64884,64887,64890,64893,64896,64899,64902,64905,64908,64910,64912,64915,64919,66013,66016,66019,66035,66049,66052,66057,66063,66068,66072,66076,66081,66085,66090,66532,66537,66540,66544,66549,66552,66555,66559,66564,66568,66573,66578,66582,66587,66592,66595,66600,66605,66609,66614,66619,66723,66726,66730,66735,67101,67104,67107,67110,67113,67116,67119,67122,67125,68421,68425,68430,68435,68438,68441,68444,68447,68449,68454,68459,68462,68466,68471,68476,68481,68484,68487,68490,68493,68496,68501,68504,68508,68513,68518,68522,68527,68530,68535,68538,68541,68544,68547,68550,68555,68558,68561,68564,68567,68571,68576,68579,68583,68588,68591,68594,68598,68627,68630,68634,68638,68643,68647,68652,68655,68658,68661,68664,68667,68670,68673,68676,68679,68682,68685,68688,68691,68694,68698,68703,68708,68711,68715,68719,68724,68727,68731,68734,68737,68742,68747,68752,68757,68762,68765,68768,68773,68778,68782,68787,68790,68795,68798,68801,68804,68807,68812,68815,68824,68828,68833,68836,68839,68843,68846,68851,68855,68858,68864,68870,68874,68900,68903,70464,70467,70963,70966,70971,70976,70981,70985,70990,70995,71000,71004,71009,71012,71015,71018,71021,71025,71028,71033,71036,71041,71045,71050,71053,71058,71063,71068,71071,71074,71079,71084,71087,71090,71094,71097,71102,71105,71110,71113,71118,71123,71128,71131,71136,71201,71204,71215,71219,71224,71396,71400,71405,71408,71411,71414,71418,71429,71433,71436,71441,71446,71449,71452,71455,71458,71461,71463,71466,71469,71472,71477,71480,71485,71488,71492,71495,71498,71512,71516,71519,71574,71579,71582,71585,71590,71593,71597,71602,71732,71736,71741,71746,71827,71832,71836,71839,71844,71849,71855,71858,71861,71864,71868,71873,71876,71887,71891,71908,74955,74959,74962,74965,74968,74989,74993,74996,75004,75007,75012,75015,75018,75023,75028,75032,75053,75057,75062,75065,75068,75071,75074,75078,75083,75086,75090,75095,75098,75103,75106,75111,75114,75119,76322,76326,76331,76334,76339,76623],[10,53349,53345],{"id":53350},"_3web-apis",[14,53352,53353],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,53355,53356],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,53358,53359],{},[28,53360],{"alt":30,"src":53361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,53363,53364],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,53366,53367],{},"建议数组和对象使用 const 来声明",[14,53369,53370],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[18,53372,53374],{"id":53373},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[115,53376,53378],{"id":53377},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,53380,53381,53384],{},[141,53382,53383],{},"document"," = HTML 文件解析后的对象化表示；",[14,53386,53387,53389],{},[141,53388,53383],{}," ≠ HTML 文件本身",[14,53391,53392,53397],{},[304,53393,53394],{},[141,53395,53396],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,53399,53400,53404],{},[304,53401,53402],{},[141,53403,53383],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,53406,53407],{},"document实际上为window.document的简写",[115,53409,53411],{"id":53410},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,53413,53414],{},[28,53415],{"alt":30,"src":53416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,53418,53419],{},[28,53420],{"alt":30,"src":53421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,53423,53424],{},[28,53425],{"alt":30,"src":53426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,53428,53429],{},"console.dir()",[14,53431,53432],{},"dir用来打印对象",[1162,53434,53435,53438,53441],{},[101,53436,53437],{},"任何一个标签，都是一个对象",[101,53439,53440],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[101,53442,53443],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,53445,53446],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[115,53448,53450],{"id":53449},"_312-获取dom对象","3.1.2 获取DoM对象",[14,53452,53453],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,53455,53456],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,53458,53459],{},[304,53460,53461],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[98,53463,53464],{},[101,53465,53466],{},"利用CSS选择器来获取标签元素",[14,53468,53469],{},[28,53470],{"alt":30,"src":53471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,53473,53474],{},"里边的选择器必须必须加引号！！！",[14,53476,53477],{},"只选择第一个元素",[135,53479,53481],{"className":53080,"code":53480,"language":53082,"meta":30,"style":30},"\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",[141,53482,53483,53491,53512,53531,53539,53544,53549,53554,53562],{"__ignoreMap":30},[144,53484,53485,53487,53489],{"class":146,"line":147},[144,53486,1065],{"class":154},[144,53488,51813],{"class":51313},[144,53490,51320],{"class":154},[144,53492,53493,53495,53497,53500,53502,53505,53508,53510],{"class":146,"line":66},[144,53494,52157],{"class":154},[144,53496,51624],{"class":51313},[144,53498,53499],{"class":1993}," class",[144,53501,200],{"class":154},[144,53503,53504],{"class":259},"\"box\"",[144,53506,53507],{"class":154},">123\u003C\u002F",[144,53509,51624],{"class":51313},[144,53511,51320],{"class":154},[144,53513,53514,53516,53518,53520,53522,53524,53527,53529],{"class":146,"line":1210},[144,53515,52157],{"class":154},[144,53517,51624],{"class":51313},[144,53519,53499],{"class":1993},[144,53521,200],{"class":154},[144,53523,53504],{"class":259},[144,53525,53526],{"class":154},">456\u003C\u002F",[144,53528,51624],{"class":51313},[144,53530,51320],{"class":154},[144,53532,53533,53535,53537],{"class":146,"line":1225},[144,53534,52157],{"class":154},[144,53536,51826],{"class":51313},[144,53538,51320],{"class":154},[144,53540,53541],{"class":146,"line":1231},[144,53542,53543],{"class":154},"    \u002F\u002F 1.获取匹配的第一个元素\n",[144,53545,53546],{"class":146,"line":1245},[144,53547,53548],{"class":154},"    const box = document.querySelector('div')\n",[144,53550,53551],{"class":146,"line":1251},[144,53552,53553],{"class":154},"    console.dir(box)\n",[144,53555,53556,53558,53560],{"class":146,"line":1342},[144,53557,52430],{"class":154},[144,53559,51826],{"class":51313},[144,53561,51320],{"class":154},[144,53563,53564,53566,53568],{"class":146,"line":1348},[144,53565,51798],{"class":154},[144,53567,51813],{"class":51313},[144,53569,51320],{"class":154},[14,53571,53572],{},"只选123，不选456",[14,53574,53575],{},[28,53576],{"alt":30,"src":53577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,53579,53580],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,53582,53583],{},[28,53584],{"alt":30,"src":53585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,53587,53588],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,53590,53591],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[98,53593,53594],{"start":66},[101,53595,53596],{},"其他方法来获取标签元素",[14,53598,53599],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,53601,53602],{},[28,53603],{"alt":30,"src":53604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[115,53606,53608],{"id":53607},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,53610,53611],{},"设置修改DOM元素内容有两种方式：",[1162,53613,53614,53617,53620,53623],{},[101,53615,53616],{},"元素.innerText=''",[101,53618,53619],{},"元素.innerHTML=''",[101,53621,53622],{},"不写字符串输出数字也是可以的",[101,53624,53625],{},"元素.innerHtml=1",[22029,53627,53629],{"id":53628},"_3131-innertext","3.1.3.1 innerText",[14,53631,53632],{},[28,53633],{"alt":30,"src":53634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,53636,53637],{},"思路：实现了修改盒子中的内容！",[14,53639,53640],{},"它只显示纯文本，不解析标签",[22029,53642,53644],{"id":53643},"_3132-innerhtml","3.1.3.2 innerHTML",[14,53646,53647],{},[28,53648],{"alt":30,"src":53649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,53651,53652],{},"相比于innerText，他的强大之处在于可以解析标签",[115,53654,53656],{"id":53655},"_314-操作元素属性","3.1.4 操作元素属性",[22029,53658,53660],{"id":53659},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,53662,53663],{},[28,53664],{"alt":30,"src":53665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22029,53667,53669],{"id":53668},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,53671,53672],{},[28,53673],{"alt":30,"src":53674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,53676,53677],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,53679,53680],{},"div.style.backgroundColor = 'hotpink'",[14,53682,53683],{},"如果按照css的写法，-表示减，就会出错",[14,53685,53686],{},"body元素不需要再获取，直接用就行！！！！！！",[14,53688,53689],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,53691,53692],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,53694,53695],{},[28,53696],{"alt":30,"src":53697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,53699,53700],{},[28,53701],{"alt":30,"src":53702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[98,53704,53705,53708,53711,53714,53717,53720],{},[101,53706,53707],{},"className这个方式就是修改很多样式的时候来使用的！",[101,53709,53710],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[101,53712,53713],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[101,53715,53716],{},"className为属性名，如果还用class的话就导致与关键字冲突",[101,53718,53719],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[101,53721,53722,53723,53728],{},"解析标签的时候就变为了",[51624,53724],{"className":53725},[53726,53727],"nav","box",[53729,53730],"br",{},[14,53732,53733],{},"例子：",[51624,53735],{"className":53736},[53726],[51826,53738,53739],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,53741,53742],{},[28,53743],{"alt":30,"src":53744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,53746,53747],{},"追加和删除类名用classList",[14,53749,53750],{},"常用于类似于开关的操作",[14,53752,53753],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,53755,53756],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22029,53758,53760],{"id":53759},"_3143-牢记点","3.1.4.3 牢记点",[98,53762,53763,53766,53769,53772,53775,53778,53781,53784,53787],{},[101,53764,53765],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[101,53767,53768],{},"使用style属性操作css时不要忘记引号",[101,53770,53771],{},"使用className或者classList时也不要忘记引号",[101,53773,53774],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[101,53776,53777],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[101,53779,53780],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[101,53782,53783],{},"若： let arr=['1','2',3] arr[0]=1",[101,53785,53786],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[101,53788,53789],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[115,53791,53793],{"id":53792},"_315-操作表单元素","3.1.5 操作表单元素",[98,53795,53796],{},[101,53797,53798],{},"天生的属性",[14,53800,53801],{},[28,53802],{"alt":30,"src":53803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,53805,53806],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,53808,53809],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,53811,53812],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,53814,53815],{},[28,53816],{"alt":30,"src":53817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[135,53819,53821],{"className":50646,"code":53820,"language":50648,"meta":30,"style":30},"在复选框中如果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",[141,53822,53823,53828,53860,53865,53870,53875,53880,53884,53889,53894,53911,53923,53928],{"__ignoreMap":30},[144,53824,53825],{"class":146,"line":147},[144,53826,53827],{"class":154},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[144,53829,53830,53832,53835,53838,53840,53843,53845,53847,53849,53851,53853,53855,53858],{"class":146,"line":66},[144,53831,1065],{"class":154},[144,53833,53834],{"class":51313},"input",[144,53836,53837],{"class":1993}," type",[144,53839,200],{"class":154},[144,53841,53842],{"class":259},"\"checkbox\"",[144,53844,14951],{"class":1993},[144,53846,200],{"class":154},[144,53848,7683],{"class":259},[144,53850,14990],{"class":1993},[144,53852,200],{"class":154},[144,53854,7683],{"class":259},[144,53856,53857],{"class":1993}," checked",[144,53859,51320],{"class":154},[144,53861,53862],{"class":146,"line":1210},[144,53863,53864],{"class":154},"不选的话：\n",[144,53866,53867],{"class":146,"line":1225},[144,53868,53869],{"class":154},"const input = document.querySelector('input')\n",[144,53871,53872],{"class":146,"line":1231},[144,53873,53874],{"class":154},"input.checked=false\n",[144,53876,53877],{"class":146,"line":1245},[144,53878,53879],{"class":154},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[144,53881,53882],{"class":146,"line":1251},[144,53883,2430],{"emptyLinePlaceholder":72},[144,53885,53886],{"class":146,"line":1342},[144,53887,53888],{"class":154},"禁用按钮：\n",[144,53890,53891],{"class":146,"line":1348},[144,53892,53893],{"class":154},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[144,53895,53896,53898,53901,53904,53907,53909],{"class":146,"line":1360},[144,53897,1065],{"class":154},[144,53899,53900],{"class":51313},"button",[144,53902,53903],{"class":1993}," disabled",[144,53905,53906],{"class":154},">点击\u003C\u002F",[144,53908,53900],{"class":51313},[144,53910,51320],{"class":154},[144,53912,53913,53915,53917,53919,53921],{"class":146,"line":1642},[144,53914,1065],{"class":154},[144,53916,53900],{"class":51313},[144,53918,53906],{"class":154},[144,53920,53900],{"class":51313},[144,53922,51320],{"class":154},[144,53924,53925],{"class":146,"line":1647},[144,53926,53927],{"class":154},"const bt = document.querySelector('button')\n",[144,53929,53930],{"class":146,"line":1653},[144,53931,53932],{"class":154},"bt.disabled = false\n",[98,53934,53935],{"start":66},[101,53936,53937],{},"自定义属性",[14,53939,53940],{},[28,53941],{"alt":30,"src":53942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[135,53944,53946],{"className":53080,"code":53945,"language":53082,"meta":30,"style":30},"\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",[141,53947,53948,53956,53984,54003,54022,54041,54060,54068,54073,54078,54083,54088,54096],{"__ignoreMap":30},[144,53949,53950,53952,53954],{"class":146,"line":147},[144,53951,1065],{"class":154},[144,53953,51813],{"class":51313},[144,53955,51320],{"class":154},[144,53957,53958,53960,53962,53965,53967,53969,53972,53974,53977,53980,53982],{"class":146,"line":66},[144,53959,52157],{"class":154},[144,53961,51624],{"class":51313},[144,53963,53964],{"class":1993}," data-id",[144,53966,200],{"class":154},[144,53968,3708],{"class":259},[144,53970,53971],{"class":1993}," data-spm",[144,53973,200],{"class":154},[144,53975,53976],{"class":259},"\"我不知道\"",[144,53978,53979],{"class":154},">1\u003C\u002F",[144,53981,51624],{"class":51313},[144,53983,51320],{"class":154},[144,53985,53986,53988,53990,53992,53994,53996,53999,54001],{"class":146,"line":1210},[144,53987,52157],{"class":154},[144,53989,51624],{"class":51313},[144,53991,53964],{"class":1993},[144,53993,200],{"class":154},[144,53995,3731],{"class":259},[144,53997,53998],{"class":154},">2\u003C\u002F",[144,54000,51624],{"class":51313},[144,54002,51320],{"class":154},[144,54004,54005,54007,54009,54011,54013,54015,54018,54020],{"class":146,"line":1225},[144,54006,52157],{"class":154},[144,54008,51624],{"class":51313},[144,54010,53964],{"class":1993},[144,54012,200],{"class":154},[144,54014,3744],{"class":259},[144,54016,54017],{"class":154},">3\u003C\u002F",[144,54019,51624],{"class":51313},[144,54021,51320],{"class":154},[144,54023,54024,54026,54028,54030,54032,54034,54037,54039],{"class":146,"line":1231},[144,54025,52157],{"class":154},[144,54027,51624],{"class":51313},[144,54029,53964],{"class":1993},[144,54031,200],{"class":154},[144,54033,3757],{"class":259},[144,54035,54036],{"class":154},">4\u003C\u002F",[144,54038,51624],{"class":51313},[144,54040,51320],{"class":154},[144,54042,54043,54045,54047,54049,54051,54053,54056,54058],{"class":146,"line":1245},[144,54044,52157],{"class":154},[144,54046,51624],{"class":51313},[144,54048,53964],{"class":1993},[144,54050,200],{"class":154},[144,54052,3778],{"class":259},[144,54054,54055],{"class":154},">5\u003C\u002F",[144,54057,51624],{"class":51313},[144,54059,51320],{"class":154},[144,54061,54062,54064,54066],{"class":146,"line":1251},[144,54063,52157],{"class":154},[144,54065,51826],{"class":51313},[144,54067,51320],{"class":154},[144,54069,54070],{"class":146,"line":1342},[144,54071,54072],{"class":154},"    const one = document.querySelector('div')\n",[144,54074,54075],{"class":146,"line":1348},[144,54076,54077],{"class":154},"    console.log(one.dataset)\n",[144,54079,54080],{"class":146,"line":1360},[144,54081,54082],{"class":154},"    console.log(one.dataset.id)\n",[144,54084,54085],{"class":146,"line":1642},[144,54086,54087],{"class":154},"    console.log(one.dataset.spm)\n",[144,54089,54090,54092,54094],{"class":146,"line":1647},[144,54091,52430],{"class":154},[144,54093,51826],{"class":51313},[144,54095,51320],{"class":154},[144,54097,54098,54100,54102],{"class":146,"line":1653},[144,54099,51798],{"class":154},[144,54101,51813],{"class":51313},[144,54103,51320],{"class":154},[14,54105,54106],{},[28,54107],{"alt":30,"src":54108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54110,54111],{},"document.querySelector选择的是第一个对象（元素）",[115,54113,54115],{"id":54114},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54117,54118],{},[28,54119],{"alt":30,"src":54120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54122,54123],{},[28,54124],{"alt":30,"src":54125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54127,54128],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51826,54130,54131],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54133,54134],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51826,54136,54137],{},"\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,54139,54140],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54142,54143],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54145,54146],{},"单位为毫秒！！！",[14,54148,54149],{},"可以搭配匿名函数来用！！！",[14,54151,54152],{},"setInterval(function () {",[14,54154,54155],{},"alert('两秒执行一次')",[14,54157,54158],{},"}, 2000)",[14,54160,54161],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54163,54164],{},"function fn() {",[14,54166,54167],{},"document.write(1)",[14,54169,1101],{},[14,54171,54172],{},"setInterval(fn, 1000)",[14,54174,54175],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54177,54178],{},"setInterval('fn()', 1000)",[14,54180,54181],{},[28,54182],{"alt":30,"src":54183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22029,54185,54187],{"id":54186},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[135,54189,54191],{"className":50646,"code":54190,"language":50648,"meta":30,"style":30},"\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",[141,54192,54193,54203,54217,54221,54229,54243,54263,54275,54283,54287,54295,54332,54337,54342,54347,54355,54363,54385,54393,54398,54420,54425,54430,54441,54446,54466,54474,54489,54504,54515,54520,54530,54540,54544,54553,54557,54565,54573,54577],{"__ignoreMap":30},[144,54194,54195,54197,54199,54201],{"class":146,"line":147},[144,54196,51310],{"class":154},[144,54198,51314],{"class":51313},[144,54200,51317],{"class":1993},[144,54202,51320],{"class":154},[144,54204,54205,54207,54209,54211,54213,54215],{"class":146,"line":66},[144,54206,1065],{"class":154},[144,54208,50648],{"class":51313},[144,54210,51329],{"class":1993},[144,54212,200],{"class":154},[144,54214,51334],{"class":259},[144,54216,51320],{"class":154},[144,54218,54219],{"class":146,"line":1210},[144,54220,2430],{"emptyLinePlaceholder":72},[144,54222,54223,54225,54227],{"class":146,"line":1225},[144,54224,1065],{"class":154},[144,54226,51347],{"class":51313},[144,54228,51320],{"class":154},[144,54230,54231,54233,54235,54237,54239,54241],{"class":146,"line":1231},[144,54232,52157],{"class":154},[144,54234,51357],{"class":51313},[144,54236,51360],{"class":1993},[144,54238,200],{"class":154},[144,54240,51365],{"class":259},[144,54242,51320],{"class":154},[144,54244,54245,54247,54249,54251,54253,54255,54257,54259,54261],{"class":146,"line":1245},[144,54246,52157],{"class":154},[144,54248,51357],{"class":51313},[144,54250,14951],{"class":1993},[144,54252,200],{"class":154},[144,54254,51404],{"class":259},[144,54256,51384],{"class":1993},[144,54258,200],{"class":154},[144,54260,51411],{"class":259},[144,54262,51320],{"class":154},[144,54264,54265,54267,54269,54271,54273],{"class":146,"line":1251},[144,54266,52157],{"class":154},[144,54268,51420],{"class":51313},[144,54270,51423],{"class":154},[144,54272,51420],{"class":51313},[144,54274,51320],{"class":154},[144,54276,54277,54279,54281],{"class":146,"line":1342},[144,54278,51798],{"class":154},[144,54280,51347],{"class":51313},[144,54282,51320],{"class":154},[144,54284,54285],{"class":146,"line":1348},[144,54286,2430],{"emptyLinePlaceholder":72},[144,54288,54289,54291,54293],{"class":146,"line":1360},[144,54290,1065],{"class":154},[144,54292,51813],{"class":51313},[144,54294,51320],{"class":154},[144,54296,54297,54299,54302,54304,54306,54308,54310,54312,54314,54317,54319,54322,54325,54327,54330],{"class":146,"line":1642},[144,54298,52157],{"class":154},[144,54300,54301],{"class":51313},"textarea",[144,54303,14951],{"class":1993},[144,54305,200],{"class":154},[144,54307,7683],{"class":259},[144,54309,14990],{"class":1993},[144,54311,200],{"class":154},[144,54313,7683],{"class":259},[144,54315,54316],{"class":1993}," cols",[144,54318,200],{"class":154},[144,54320,54321],{"class":259},"\"30\"",[144,54323,54324],{"class":1993}," rows",[144,54326,200],{"class":154},[144,54328,54329],{"class":259},"\"10\"",[144,54331,51320],{"class":154},[144,54333,54334],{"class":146,"line":1647},[144,54335,54336],{"class":154},"        用户注册协议\n",[144,54338,54339],{"class":146,"line":1653},[144,54340,54341],{"class":154},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[144,54343,54344],{"class":146,"line":1658},[144,54345,54346],{"class":154},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[144,54348,54349,54351,54353],{"class":146,"line":1672},[144,54350,51789],{"class":154},[144,54352,54301],{"class":51313},[144,54354,51320],{"class":154},[144,54356,54357,54359,54361],{"class":146,"line":1677},[144,54358,52157],{"class":154},[144,54360,53729],{"class":51313},[144,54362,51320],{"class":154},[144,54364,54365,54367,54369,54371,54373,54376,54378,54381,54383],{"class":146,"line":1683},[144,54366,52157],{"class":154},[144,54368,53900],{"class":51313},[144,54370,53499],{"class":1993},[144,54372,200],{"class":154},[144,54374,54375],{"class":259},"\"btn\"",[144,54377,53903],{"class":1993},[144,54379,54380],{"class":154},">我已经阅读用户协议(5)\u003C\u002F",[144,54382,53900],{"class":51313},[144,54384,51320],{"class":154},[144,54386,54387,54389,54391],{"class":146,"line":1704},[144,54388,52157],{"class":154},[144,54390,51826],{"class":51313},[144,54392,51320],{"class":154},[144,54394,54395],{"class":146,"line":1709},[144,54396,54397],{"class":213},"    \u002F\u002F 1. 获取元素\n",[144,54399,54400,54402,54405,54407,54410,54413,54415,54418],{"class":146,"line":1723},[144,54401,11252],{"class":150},[144,54403,54404],{"class":203}," btn",[144,54406,13595],{"class":150},[144,54408,54409],{"class":154}," document.",[144,54411,54412],{"class":1993},"querySelector",[144,54414,155],{"class":154},[144,54416,54417],{"class":259},"'.btn'",[144,54419,161],{"class":154},[144,54421,54422],{"class":146,"line":1728},[144,54423,54424],{"class":213},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[144,54426,54427],{"class":146,"line":1757},[144,54428,54429],{"class":213},"    \u002F\u002F 2. 倒计时\n",[144,54431,54432,54434,54436,54438],{"class":146,"line":1762},[144,54433,52232],{"class":150},[144,54435,9469],{"class":154},[144,54437,200],{"class":150},[144,54439,54440],{"class":203}," 5\n",[144,54442,54443],{"class":146,"line":1779},[144,54444,54445],{"class":213},"    \u002F\u002F 2.1 开启定时器\n",[144,54447,54448,54450,54453,54455,54458,54460,54463],{"class":146,"line":1784},[144,54449,52232],{"class":150},[144,54451,54452],{"class":154}," n ",[144,54454,200],{"class":150},[144,54456,54457],{"class":1993}," setInterval",[144,54459,155],{"class":154},[144,54461,54462],{"class":150},"function",[144,54464,54465],{"class":154}," () {\n",[144,54467,54468,54471],{"class":146,"line":1789},[144,54469,54470],{"class":154},"      i",[144,54472,54473],{"class":150},"--\n",[144,54475,54476,54479,54481,54484,54486],{"class":146,"line":1794},[144,54477,54478],{"class":154},"      btn.innerHTML ",[144,54480,200],{"class":150},[144,54482,54483],{"class":259}," `我已经阅读用户协议(${",[144,54485,596],{"class":154},[144,54487,54488],{"class":259},"})`\n",[144,54490,54491,54494,54497,54500,54502],{"class":146,"line":1808},[144,54492,54493],{"class":150},"      if",[144,54495,54496],{"class":154}," (i ",[144,54498,54499],{"class":150},"===",[144,54501,4123],{"class":203},[144,54503,12473],{"class":154},[144,54505,54506,54509,54512],{"class":146,"line":1813},[144,54507,54508],{"class":1993},"        clearInterval",[144,54510,54511],{"class":154},"(n)  ",[144,54513,54514],{"class":213},"\u002F\u002F 关闭定时器\n",[144,54516,54517],{"class":146,"line":2607},[144,54518,54519],{"class":213},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[144,54521,54522,54525,54527],{"class":146,"line":2621},[144,54523,54524],{"class":154},"        btn.disabled ",[144,54526,200],{"class":150},[144,54528,54529],{"class":203}," false\n",[144,54531,54532,54535,54537],{"class":146,"line":2629},[144,54533,54534],{"class":154},"        btn.innerHTML ",[144,54536,200],{"class":150},[144,54538,54539],{"class":259}," '同意'\n",[144,54541,54542],{"class":146,"line":2634},[144,54543,52411],{"class":154},[144,54545,54546,54549,54551],{"class":146,"line":2640},[144,54547,54548],{"class":154},"    }, ",[144,54550,6441],{"class":203},[144,54552,161],{"class":154},[144,54554,54555],{"class":146,"line":2646},[144,54556,2430],{"emptyLinePlaceholder":72},[144,54558,54559,54561,54563],{"class":146,"line":2651},[144,54560,52430],{"class":154},[144,54562,51826],{"class":51313},[144,54564,51320],{"class":154},[144,54566,54567,54569,54571],{"class":146,"line":7979},[144,54568,51798],{"class":154},[144,54570,51813],{"class":51313},[144,54572,51320],{"class":154},[144,54574,54575],{"class":146,"line":8003},[144,54576,2430],{"emptyLinePlaceholder":72},[144,54578,54579,54581,54583],{"class":146,"line":8008},[144,54580,51798],{"class":154},[144,54582,50648],{"class":51313},[144,54584,51320],{"class":154},[14,54586,54587],{},"不要一直想着用死循环,避免死循环",[14,54589,54590,54593],{},[141,54591,54592],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22029,54595,54597],{"id":54596},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[98,54599,54600],{},[101,54601,54602],{},"法1",[135,54604,54606],{"className":50646,"code":54605,"language":50648,"meta":30,"style":30},"\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",[141,54607,54608,54618,54632,54636,54644,54658,54678,54690,54698,54704,54715,54726,54730,54734,54741,54753,54757,54761,54768,54780,54794,54807,54821,54825,54829,54836,54847,54858,54869,54881,54893,54905,54909,54913,54921,54931,54944,54956,54969,54973,54977,54984,54994,55006,55018,55029,55040,55050,55062,55074,55078,55082,55091,55103,55115,55143,55156,55160,55164,55171,55182,55186,55194,55202,55206,55214,55228,55243,55267,55275,55290,55303,55311,55332,55344,55356,55368,55380,55392,55404,55416,55425,55433,55441,55449,55461,55484,55503,55522,55541,55560,55579,55598,55618,55622,55642,55661,55681,55702,55713,55730,55740,55750,55760,55765,55770,55775,55780,55805,55818,55822,55845,55849,55857,55865,55873,55877],{"__ignoreMap":30},[144,54609,54610,54612,54614,54616],{"class":146,"line":147},[144,54611,51310],{"class":154},[144,54613,51314],{"class":51313},[144,54615,51317],{"class":1993},[144,54617,51320],{"class":154},[144,54619,54620,54622,54624,54626,54628,54630],{"class":146,"line":66},[144,54621,1065],{"class":154},[144,54623,50648],{"class":51313},[144,54625,51329],{"class":1993},[144,54627,200],{"class":154},[144,54629,51334],{"class":259},[144,54631,51320],{"class":154},[144,54633,54634],{"class":146,"line":1210},[144,54635,2430],{"emptyLinePlaceholder":72},[144,54637,54638,54640,54642],{"class":146,"line":1225},[144,54639,1065],{"class":154},[144,54641,51347],{"class":51313},[144,54643,51320],{"class":154},[144,54645,54646,54648,54650,54652,54654,54656],{"class":146,"line":1231},[144,54647,52157],{"class":154},[144,54649,51357],{"class":51313},[144,54651,51360],{"class":1993},[144,54653,200],{"class":154},[144,54655,51365],{"class":259},[144,54657,51320],{"class":154},[144,54659,54660,54662,54664,54666,54668,54670,54672,54674,54676],{"class":146,"line":1245},[144,54661,52157],{"class":154},[144,54663,51357],{"class":51313},[144,54665,14951],{"class":1993},[144,54667,200],{"class":154},[144,54669,51404],{"class":259},[144,54671,51384],{"class":1993},[144,54673,200],{"class":154},[144,54675,51411],{"class":259},[144,54677,51320],{"class":154},[144,54679,54680,54682,54684,54686,54688],{"class":146,"line":1251},[144,54681,52157],{"class":154},[144,54683,51420],{"class":51313},[144,54685,51423],{"class":154},[144,54687,51420],{"class":51313},[144,54689,51320],{"class":154},[144,54691,54692,54694,54696],{"class":146,"line":1342},[144,54693,52157],{"class":154},[144,54695,5157],{"class":51313},[144,54697,51320],{"class":154},[144,54699,54700,54702],{"class":146,"line":1348},[144,54701,6434],{"class":51313},[144,54703,15603],{"class":154},[144,54705,54706,54709,54711,54713],{"class":146,"line":1360},[144,54707,54708],{"class":203},"      padding",[144,54710,51450],{"class":154},[144,54712,346],{"class":203},[144,54714,1321],{"class":154},[144,54716,54717,54720,54722,54724],{"class":146,"line":1642},[144,54718,54719],{"class":203},"      margin",[144,54721,51450],{"class":154},[144,54723,346],{"class":203},[144,54725,1321],{"class":154},[144,54727,54728],{"class":146,"line":1647},[144,54729,2217],{"class":154},[144,54731,54732],{"class":146,"line":1653},[144,54733,2430],{"emptyLinePlaceholder":72},[144,54735,54736,54739],{"class":146,"line":1658},[144,54737,54738],{"class":51313},"    li",[144,54740,15603],{"class":154},[144,54742,54743,54746,54748,54751],{"class":146,"line":1672},[144,54744,54745],{"class":203},"      list-style",[144,54747,51450],{"class":154},[144,54749,54750],{"class":203},"none",[144,54752,1321],{"class":154},[144,54754,54755],{"class":146,"line":1677},[144,54756,2217],{"class":154},[144,54758,54759],{"class":146,"line":1683},[144,54760,2430],{"emptyLinePlaceholder":72},[144,54762,54763,54766],{"class":146,"line":1704},[144,54764,54765],{"class":1993},"    .box",[144,54767,15603],{"class":154},[144,54769,54770,54773,54775,54778],{"class":146,"line":1709},[144,54771,54772],{"class":203},"      position",[144,54774,51450],{"class":154},[144,54776,54777],{"class":203},"relative",[144,54779,1321],{"class":154},[144,54781,54782,54785,54787,54790,54792],{"class":146,"line":1723},[144,54783,54784],{"class":203},"      width",[144,54786,51450],{"class":154},[144,54788,54789],{"class":203},"976",[144,54791,51505],{"class":150},[144,54793,1321],{"class":154},[144,54795,54796,54799,54801,54803,54805],{"class":146,"line":1728},[144,54797,54798],{"class":203},"      height",[144,54800,51450],{"class":154},[144,54802,1569],{"class":203},[144,54804,51505],{"class":150},[144,54806,1321],{"class":154},[144,54808,54809,54811,54813,54815,54817,54819],{"class":146,"line":1757},[144,54810,54719],{"class":203},[144,54812,51450],{"class":154},[144,54814,466],{"class":203},[144,54816,51505],{"class":150},[144,54818,51569],{"class":203},[144,54820,1321],{"class":154},[144,54822,54823],{"class":146,"line":1762},[144,54824,2217],{"class":154},[144,54826,54827],{"class":146,"line":1779},[144,54828,2430],{"emptyLinePlaceholder":72},[144,54830,54831,54834],{"class":146,"line":1784},[144,54832,54833],{"class":1993},"    .slider-footer",[144,54835,15603],{"class":154},[144,54837,54838,54840,54842,54845],{"class":146,"line":1789},[144,54839,54772],{"class":203},[144,54841,51450],{"class":154},[144,54843,54844],{"class":203},"absolute",[144,54846,1321],{"class":154},[144,54848,54849,54852,54854,54856],{"class":146,"line":1794},[144,54850,54851],{"class":203},"      left",[144,54853,51450],{"class":154},[144,54855,346],{"class":203},[144,54857,1321],{"class":154},[144,54859,54860,54863,54865,54867],{"class":146,"line":1808},[144,54861,54862],{"class":203},"      bottom",[144,54864,51450],{"class":154},[144,54866,346],{"class":203},[144,54868,1321],{"class":154},[144,54870,54871,54873,54875,54877,54879],{"class":146,"line":1813},[144,54872,54784],{"class":203},[144,54874,51450],{"class":154},[144,54876,466],{"class":203},[144,54878,483],{"class":150},[144,54880,1321],{"class":154},[144,54882,54883,54885,54887,54889,54891],{"class":146,"line":2607},[144,54884,54798],{"class":203},[144,54886,51450],{"class":154},[144,54888,730],{"class":203},[144,54890,483],{"class":150},[144,54892,1321],{"class":154},[144,54894,54895,54898,54900,54903],{"class":146,"line":2621},[144,54896,54897],{"class":203},"      background-color",[144,54899,51450],{"class":154},[144,54901,54902],{"class":203},"skyblue",[144,54904,1321],{"class":154},[144,54906,54907],{"class":146,"line":2629},[144,54908,2217],{"class":154},[144,54910,54911],{"class":146,"line":2634},[144,54912,2430],{"emptyLinePlaceholder":72},[144,54914,54915,54917,54919],{"class":146,"line":2640},[144,54916,54833],{"class":1993},[144,54918,6856],{"class":51313},[144,54920,15603],{"class":154},[144,54922,54923,54925,54927,54929],{"class":146,"line":2646},[144,54924,54772],{"class":203},[144,54926,51450],{"class":154},[144,54928,54844],{"class":203},[144,54930,1321],{"class":154},[144,54932,54933,54936,54938,54940,54942],{"class":146,"line":2651},[144,54934,54935],{"class":203},"      font-size",[144,54937,51450],{"class":154},[144,54939,1056],{"class":203},[144,54941,51505],{"class":150},[144,54943,1321],{"class":154},[144,54945,54946,54948,54950,54952,54954],{"class":146,"line":7979},[144,54947,54851],{"class":203},[144,54949,51450],{"class":154},[144,54951,855],{"class":203},[144,54953,51505],{"class":150},[144,54955,1321],{"class":154},[144,54957,54958,54961,54963,54965,54967],{"class":146,"line":8003},[144,54959,54960],{"class":203},"      top",[144,54962,51450],{"class":154},[144,54964,474],{"class":203},[144,54966,51505],{"class":150},[144,54968,1321],{"class":154},[144,54970,54971],{"class":146,"line":8008},[144,54972,2217],{"class":154},[144,54974,54975],{"class":146,"line":8014},[144,54976,2430],{"emptyLinePlaceholder":72},[144,54978,54979,54982],{"class":146,"line":8041},[144,54980,54981],{"class":51313},"    ul",[144,54983,15603],{"class":154},[144,54985,54986,54988,54990,54992],{"class":146,"line":8046},[144,54987,54772],{"class":203},[144,54989,51450],{"class":154},[144,54991,54844],{"class":203},[144,54993,1321],{"class":154},[144,54995,54996,54998,55000,55002,55004],{"class":146,"line":8052},[144,54997,54960],{"class":203},[144,54999,51450],{"class":154},[144,55001,936],{"class":203},[144,55003,51505],{"class":150},[144,55005,1321],{"class":154},[144,55007,55008,55010,55012,55014,55016],{"class":146,"line":8064},[144,55009,54851],{"class":203},[144,55011,51450],{"class":154},[144,55013,855],{"class":203},[144,55015,51505],{"class":150},[144,55017,1321],{"class":154},[144,55019,55020,55023,55025,55027],{"class":146,"line":8076},[144,55021,55022],{"class":203},"      display",[144,55024,51450],{"class":154},[144,55026,51490],{"class":203},[144,55028,1321],{"class":154},[144,55030,55031,55034,55036,55038],{"class":146,"line":8088},[144,55032,55033],{"class":203},"      justify-content",[144,55035,51450],{"class":154},[144,55037,51681],{"class":203},[144,55039,1321],{"class":154},[144,55041,55042,55044,55046,55048],{"class":146,"line":9747},[144,55043,54772],{"class":203},[144,55045,51450],{"class":154},[144,55047,54844],{"class":203},[144,55049,1321],{"class":154},[144,55051,55052,55054,55056,55058,55060],{"class":146,"line":9772},[144,55053,54784],{"class":203},[144,55055,51450],{"class":154},[144,55057,4022],{"class":203},[144,55059,51505],{"class":150},[144,55061,1321],{"class":154},[144,55063,55064,55066,55068,55070,55072],{"class":146,"line":9795},[144,55065,54798],{"class":203},[144,55067,51450],{"class":154},[144,55069,855],{"class":203},[144,55071,51505],{"class":150},[144,55073,1321],{"class":154},[144,55075,55076],{"class":146,"line":9819},[144,55077,2217],{"class":154},[144,55079,55080],{"class":146,"line":9824},[144,55081,2430],{"emptyLinePlaceholder":72},[144,55083,55084,55086,55089],{"class":146,"line":9829},[144,55085,54981],{"class":51313},[144,55087,55088],{"class":51313}," li",[144,55090,15603],{"class":154},[144,55092,55093,55095,55097,55099,55101],{"class":146,"line":9834},[144,55094,54784],{"class":203},[144,55096,51450],{"class":154},[144,55098,855],{"class":203},[144,55100,51505],{"class":150},[144,55102,1321],{"class":154},[144,55104,55105,55107,55109,55111,55113],{"class":146,"line":9843},[144,55106,54798],{"class":203},[144,55108,51450],{"class":154},[144,55110,855],{"class":203},[144,55112,51505],{"class":150},[144,55114,1321],{"class":154},[144,55116,55117,55119,55121,55124,55126,55128,55130,55132,55134,55136,55138,55141],{"class":146,"line":9848},[144,55118,54897],{"class":203},[144,55120,51450],{"class":154},[144,55122,55123],{"class":203},"rgba",[144,55125,155],{"class":154},[144,55127,346],{"class":203},[144,55129,12466],{"class":154},[144,55131,346],{"class":203},[144,55133,12466],{"class":154},[144,55135,346],{"class":203},[144,55137,12466],{"class":154},[144,55139,55140],{"class":203},".4",[144,55142,2749],{"class":154},[144,55144,55145,55148,55150,55152,55154],{"class":146,"line":9854},[144,55146,55147],{"class":203},"      border-radius",[144,55149,51450],{"class":154},[144,55151,601],{"class":203},[144,55153,51505],{"class":150},[144,55155,1321],{"class":154},[144,55157,55158],{"class":146,"line":9875},[144,55159,2217],{"class":154},[144,55161,55162],{"class":146,"line":9881},[144,55163,2430],{"emptyLinePlaceholder":72},[144,55165,55166,55169],{"class":146,"line":9895},[144,55167,55168],{"class":1993},"    .activate",[144,55170,15603],{"class":154},[144,55172,55173,55175,55177,55180],{"class":146,"line":9901},[144,55174,54897],{"class":203},[144,55176,51450],{"class":154},[144,55178,55179],{"class":203},"#f7f7f7",[144,55181,1321],{"class":154},[144,55183,55184],{"class":146,"line":9928},[144,55185,2217],{"class":154},[144,55187,55188,55190,55192],{"class":146,"line":9937},[144,55189,52430],{"class":154},[144,55191,5157],{"class":51313},[144,55193,51320],{"class":154},[144,55195,55196,55198,55200],{"class":146,"line":9943},[144,55197,51798],{"class":154},[144,55199,51347],{"class":51313},[144,55201,51320],{"class":154},[144,55203,55204],{"class":146,"line":9951},[144,55205,2430],{"emptyLinePlaceholder":72},[144,55207,55208,55210,55212],{"class":146,"line":9956},[144,55209,1065],{"class":154},[144,55211,51813],{"class":51313},[144,55213,51320],{"class":154},[144,55215,55216,55218,55220,55222,55224,55226],{"class":146,"line":16635},[144,55217,52157],{"class":154},[144,55219,51624],{"class":51313},[144,55221,53499],{"class":1993},[144,55223,200],{"class":154},[144,55225,53504],{"class":259},[144,55227,51320],{"class":154},[144,55229,55230,55232,55234,55236,55238,55241],{"class":146,"line":16641},[144,55231,51354],{"class":154},[144,55233,51624],{"class":51313},[144,55235,53499],{"class":1993},[144,55237,200],{"class":154},[144,55239,55240],{"class":259},"\"slider-wrapper\"",[144,55242,51320],{"class":154},[144,55244,55245,55248,55250,55253,55255,55258,55261,55263,55265],{"class":146,"line":16664},[144,55246,55247],{"class":154},"      \u003C",[144,55249,28],{"class":51313},[144,55251,55252],{"class":1993}," src",[144,55254,200],{"class":154},[144,55256,55257],{"class":259},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[144,55259,55260],{"class":1993}," alt",[144,55262,200],{"class":154},[144,55264,7683],{"class":259},[144,55266,51320],{"class":154},[144,55268,55269,55271,55273],{"class":146,"line":16670},[144,55270,51789],{"class":154},[144,55272,51624],{"class":51313},[144,55274,51320],{"class":154},[144,55276,55277,55279,55281,55283,55285,55288],{"class":146,"line":16693},[144,55278,51354],{"class":154},[144,55280,51624],{"class":51313},[144,55282,53499],{"class":1993},[144,55284,200],{"class":154},[144,55286,55287],{"class":259},"\"slider-footer\"",[144,55289,51320],{"class":154},[144,55291,55292,55294,55296,55299,55301],{"class":146,"line":16707},[144,55293,55247],{"class":154},[144,55295,14],{"class":51313},[144,55297,55298],{"class":154},">对人类来说会不会太超前了?\u003C\u002F",[144,55300,14],{"class":51313},[144,55302,51320],{"class":154},[144,55304,55305,55307,55309],{"class":146,"line":16727},[144,55306,55247],{"class":154},[144,55308,1162],{"class":51313},[144,55310,51320],{"class":154},[144,55312,55313,55316,55318,55320,55322,55325,55328,55330],{"class":146,"line":16733},[144,55314,55315],{"class":154},"        \u003C",[144,55317,101],{"class":51313},[144,55319,53499],{"class":1993},[144,55321,200],{"class":154},[144,55323,55324],{"class":259},"\"activate\"",[144,55326,55327],{"class":154},">\u003C\u002F",[144,55329,101],{"class":51313},[144,55331,51320],{"class":154},[144,55333,55334,55336,55338,55340,55342],{"class":146,"line":16744},[144,55335,55315],{"class":154},[144,55337,101],{"class":51313},[144,55339,55327],{"class":154},[144,55341,101],{"class":51313},[144,55343,51320],{"class":154},[144,55345,55346,55348,55350,55352,55354],{"class":146,"line":16767},[144,55347,55315],{"class":154},[144,55349,101],{"class":51313},[144,55351,55327],{"class":154},[144,55353,101],{"class":51313},[144,55355,51320],{"class":154},[144,55357,55358,55360,55362,55364,55366],{"class":146,"line":16789},[144,55359,55315],{"class":154},[144,55361,101],{"class":51313},[144,55363,55327],{"class":154},[144,55365,101],{"class":51313},[144,55367,51320],{"class":154},[144,55369,55370,55372,55374,55376,55378],{"class":146,"line":16794},[144,55371,55315],{"class":154},[144,55373,101],{"class":51313},[144,55375,55327],{"class":154},[144,55377,101],{"class":51313},[144,55379,51320],{"class":154},[144,55381,55382,55384,55386,55388,55390],{"class":146,"line":16800},[144,55383,55315],{"class":154},[144,55385,101],{"class":51313},[144,55387,55327],{"class":154},[144,55389,101],{"class":51313},[144,55391,51320],{"class":154},[144,55393,55394,55396,55398,55400,55402],{"class":146,"line":16814},[144,55395,55315],{"class":154},[144,55397,101],{"class":51313},[144,55399,55327],{"class":154},[144,55401,101],{"class":51313},[144,55403,51320],{"class":154},[144,55405,55406,55408,55410,55412,55414],{"class":146,"line":16827},[144,55407,55315],{"class":154},[144,55409,101],{"class":51313},[144,55411,55327],{"class":154},[144,55413,101],{"class":51313},[144,55415,51320],{"class":154},[144,55417,55418,55421,55423],{"class":146,"line":16832},[144,55419,55420],{"class":154},"      \u003C\u002F",[144,55422,1162],{"class":51313},[144,55424,51320],{"class":154},[144,55426,55427,55429,55431],{"class":146,"line":16846},[144,55428,51789],{"class":154},[144,55430,51624],{"class":51313},[144,55432,51320],{"class":154},[144,55434,55435,55437,55439],{"class":146,"line":16851},[144,55436,52430],{"class":154},[144,55438,51624],{"class":51313},[144,55440,51320],{"class":154},[144,55442,55443,55445,55447],{"class":146,"line":16857},[144,55444,52157],{"class":154},[144,55446,51826],{"class":51313},[144,55448,51320],{"class":154},[144,55450,55451,55453,55456,55458],{"class":146,"line":16862},[144,55452,11252],{"class":150},[144,55454,55455],{"class":203}," arrImage",[144,55457,13595],{"class":150},[144,55459,55460],{"class":154}," [\n",[144,55462,55463,55466,55469,55472,55475,55478,55481],{"class":146,"line":16876},[144,55464,55465],{"class":154},"      { url: ",[144,55467,55468],{"class":259},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[144,55470,55471],{"class":154},", title: ",[144,55473,55474],{"class":259},"'对人类来说会不会太超前了?'",[144,55476,55477],{"class":154},", color: ",[144,55479,55480],{"class":259},"'rgba(100,67,68)'",[144,55482,55483],{"class":154}," },\n",[144,55485,55486,55488,55491,55493,55496,55498,55501],{"class":146,"line":16881},[144,55487,55465],{"class":154},[144,55489,55490],{"class":259},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[144,55492,55471],{"class":154},[144,55494,55495],{"class":259},"'开启剑与雪的黑暗传说!'",[144,55497,55477],{"class":154},[144,55499,55500],{"class":259},"'rgba(43,35,26)'",[144,55502,55483],{"class":154},[144,55504,55505,55507,55510,55512,55515,55517,55520],{"class":146,"line":16886},[144,55506,55465],{"class":154},[144,55508,55509],{"class":259},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[144,55511,55471],{"class":154},[144,55513,55514],{"class":259},"'真正的jo厨出现了!'",[144,55516,55477],{"class":154},[144,55518,55519],{"class":259},"'rgba(36,31,33)'",[144,55521,55483],{"class":154},[144,55523,55524,55526,55529,55531,55534,55536,55539],{"class":146,"line":16900},[144,55525,55465],{"class":154},[144,55527,55528],{"class":259},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[144,55530,55471],{"class":154},[144,55532,55533],{"class":259},"'李玉刚:让世界通过b站看到东方大国文化'",[144,55535,55477],{"class":154},[144,55537,55538],{"class":259},"'rgba(139,98,66)'",[144,55540,55483],{"class":154},[144,55542,55543,55545,55548,55550,55553,55555,55558],{"class":146,"line":16912},[144,55544,55465],{"class":154},[144,55546,55547],{"class":259},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[144,55549,55471],{"class":154},[144,55551,55552],{"class":259},"'快来分享你的寒假日常吧'",[144,55554,55477],{"class":154},[144,55556,55557],{"class":259},"'rgba(67,90,92)'",[144,55559,55483],{"class":154},[144,55561,55562,55564,55567,55569,55572,55574,55577],{"class":146,"line":16917},[144,55563,55465],{"class":154},[144,55565,55566],{"class":259},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[144,55568,55471],{"class":154},[144,55570,55571],{"class":259},"'哔哩哔哩小年YEAR'",[144,55573,55477],{"class":154},[144,55575,55576],{"class":259},"'rgba(166,131,143)'",[144,55578,55483],{"class":154},[144,55580,55581,55583,55586,55588,55591,55593,55596],{"class":146,"line":16930},[144,55582,55465],{"class":154},[144,55584,55585],{"class":259},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[144,55587,55471],{"class":154},[144,55589,55590],{"class":259},"'一站式解决你的电脑配置问题'",[144,55592,55477],{"class":154},[144,55594,55595],{"class":259},"'rgba(53,29,25)'",[144,55597,55483],{"class":154},[144,55599,55600,55602,55605,55607,55610,55612,55615],{"class":146,"line":16935},[144,55601,55465],{"class":154},[144,55603,55604],{"class":259},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[144,55606,55471],{"class":154},[144,55608,55609],{"class":259},"'谁不想和小猫咪贴贴呢?'",[144,55611,55477],{"class":154},[144,55613,55614],{"class":259},"'rgba(99,72,114)'",[144,55616,55617],{"class":154}," }\n",[144,55619,55620],{"class":146,"line":16940},[144,55621,53122],{"class":154},[144,55623,55624,55626,55629,55631,55633,55635,55637,55640],{"class":146,"line":16945},[144,55625,11252],{"class":150},[144,55627,55628],{"class":203}," img",[144,55630,13595],{"class":150},[144,55632,54409],{"class":154},[144,55634,54412],{"class":1993},[144,55636,155],{"class":154},[144,55638,55639],{"class":259},"'.slider-wrapper img'",[144,55641,161],{"class":154},[144,55643,55644,55646,55648,55650,55652,55654,55656,55659],{"class":146,"line":16958},[144,55645,11252],{"class":150},[144,55647,6856],{"class":203},[144,55649,13595],{"class":150},[144,55651,54409],{"class":154},[144,55653,54412],{"class":1993},[144,55655,155],{"class":154},[144,55657,55658],{"class":259},"'.slider-footer p'",[144,55660,161],{"class":154},[144,55662,55663,55665,55668,55670,55672,55674,55676,55679],{"class":146,"line":16963},[144,55664,11252],{"class":150},[144,55666,55667],{"class":203}," color",[144,55669,13595],{"class":150},[144,55671,54409],{"class":154},[144,55673,54412],{"class":1993},[144,55675,155],{"class":154},[144,55677,55678],{"class":259},"'.slider-footer'",[144,55680,161],{"class":154},[144,55682,55683,55685,55688,55690,55692,55695,55697,55700],{"class":146,"line":32646},[144,55684,11252],{"class":150},[144,55686,55687],{"class":203}," lis",[144,55689,13595],{"class":150},[144,55691,54409],{"class":154},[144,55693,55694],{"class":1993},"querySelectorAll",[144,55696,155],{"class":154},[144,55698,55699],{"class":259},"'.slider-footer ul li'",[144,55701,161],{"class":154},[144,55703,55704,55706,55708,55710],{"class":146,"line":32652},[144,55705,52232],{"class":150},[144,55707,9469],{"class":154},[144,55709,200],{"class":150},[144,55711,55712],{"class":203}," 1\n",[144,55714,55715,55717,55720,55722,55724,55726,55728],{"class":146,"line":32658},[144,55716,52232],{"class":150},[144,55718,55719],{"class":154}," timer ",[144,55721,200],{"class":150},[144,55723,54457],{"class":1993},[144,55725,155],{"class":154},[144,55727,54462],{"class":150},[144,55729,54465],{"class":154},[144,55731,55732,55735,55737],{"class":146,"line":32664},[144,55733,55734],{"class":154},"      img.src ",[144,55736,200],{"class":150},[144,55738,55739],{"class":154}," arrImage[i].url\n",[144,55741,55742,55745,55747],{"class":146,"line":32670},[144,55743,55744],{"class":154},"      p.innerHTML ",[144,55746,200],{"class":150},[144,55748,55749],{"class":154}," arrImage[i].title\n",[144,55751,55752,55755,55757],{"class":146,"line":32681},[144,55753,55754],{"class":154},"      color.style.backgroundColor ",[144,55756,200],{"class":150},[144,55758,55759],{"class":154}," arrImage[i].color\n",[144,55761,55762],{"class":146,"line":32687},[144,55763,55764],{"class":213},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[144,55766,55767],{"class":146,"line":32707},[144,55768,55769],{"class":213},"      \u002F\u002F li.classList.add('activate')\n",[144,55771,55772],{"class":146,"line":32713},[144,55773,55774],{"class":213},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[144,55776,55777],{"class":146,"line":32724},[144,55778,55779],{"class":213},"      \u002F\u002F lis[i].classList.remove('activate')\n",[144,55781,55782,55785,55787,55789,55792,55795,55798,55800,55803],{"class":146,"line":32730},[144,55783,55784],{"class":154},"      document.",[144,55786,54412],{"class":1993},[144,55788,155],{"class":154},[144,55790,55791],{"class":259},"'.activate'",[144,55793,55794],{"class":154},")?.classList.",[144,55796,55797],{"class":1993},"toggle",[144,55799,155],{"class":154},[144,55801,55802],{"class":259},"'activate'",[144,55804,161],{"class":154},[144,55806,55807,55810,55812,55814,55816],{"class":146,"line":32736},[144,55808,55809],{"class":154},"      lis[i].classList.",[144,55811,5365],{"class":1993},[144,55813,155],{"class":154},[144,55815,55802],{"class":259},[144,55817,161],{"class":154},[144,55819,55820],{"class":146,"line":32742},[144,55821,2430],{"emptyLinePlaceholder":72},[144,55823,55824,55827,55829,55831,55833,55835,55837,55839,55842],{"class":146,"line":32748},[144,55825,55826],{"class":154},"      i ",[144,55828,200],{"class":150},[144,55830,54496],{"class":154},[144,55832,636],{"class":150},[144,55834,25131],{"class":203},[144,55836,13745],{"class":154},[144,55838,483],{"class":150},[144,55840,55841],{"class":154}," arrImage.",[144,55843,55844],{"class":203},"length\n",[144,55846,55847],{"class":146,"line":32754},[144,55848,2430],{"emptyLinePlaceholder":72},[144,55850,55851,55853,55855],{"class":146,"line":32760},[144,55852,54548],{"class":154},[144,55854,6441],{"class":203},[144,55856,161],{"class":154},[144,55858,55859,55861,55863],{"class":146,"line":32766},[144,55860,52430],{"class":154},[144,55862,51826],{"class":51313},[144,55864,51320],{"class":154},[144,55866,55867,55869,55871],{"class":146,"line":32786},[144,55868,51798],{"class":154},[144,55870,51813],{"class":51313},[144,55872,51320],{"class":154},[144,55874,55875],{"class":146,"line":32792},[144,55876,2430],{"emptyLinePlaceholder":72},[144,55878,55879,55881,55883],{"class":146,"line":32808},[144,55880,51798],{"class":154},[144,55882,50648],{"class":51313},[144,55884,51320],{"class":154},[14,55886,55887],{},[28,55888],{"alt":30,"src":55889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,55891,55892],{},"?.就是短路保护,确保输出正常进行",[14,55894,55895],{},"不要忘记取余%,有时候可以用",[14,55897,55898],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[98,55900,55901],{"start":66},[101,55902,55903],{},"法2",[135,55905,55907],{"className":50646,"code":55906,"language":50648,"meta":30,"style":30},"\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",[141,55908,55909,55919,55933,55937,55945,55959,55979,55991,55999,56005,56015,56025,56029,56033,56039,56049,56053,56057,56063,56073,56085,56097,56111,56115,56119,56125,56135,56145,56155,56167,56179,56189,56193,56197,56205,56215,56227,56239,56251,56255,56259,56265,56275,56287,56299,56309,56319,56329,56341,56353,56357,56361,56369,56381,56393,56419,56431,56435,56439,56445,56455,56459,56467,56475,56479,56487,56501,56515,56535,56543,56557,56569,56577,56595,56607,56619,56631,56643,56655,56667,56679,56687,56695,56703,56711,56722,56738,56754,56770,56786,56802,56818,56834,56850,56854,56859,56877,56895,56905,56910,56915,56926,56932,56947,56956,56960,56965,56974,56979,56988,56993,56998,57003,57026,57056,57060,57068,57072,57080,57088,57092],{"__ignoreMap":30},[144,55910,55911,55913,55915,55917],{"class":146,"line":147},[144,55912,51310],{"class":154},[144,55914,51314],{"class":51313},[144,55916,51317],{"class":1993},[144,55918,51320],{"class":154},[144,55920,55921,55923,55925,55927,55929,55931],{"class":146,"line":66},[144,55922,1065],{"class":154},[144,55924,50648],{"class":51313},[144,55926,51329],{"class":1993},[144,55928,200],{"class":154},[144,55930,51334],{"class":259},[144,55932,51320],{"class":154},[144,55934,55935],{"class":146,"line":1210},[144,55936,2430],{"emptyLinePlaceholder":72},[144,55938,55939,55941,55943],{"class":146,"line":1225},[144,55940,1065],{"class":154},[144,55942,51347],{"class":51313},[144,55944,51320],{"class":154},[144,55946,55947,55949,55951,55953,55955,55957],{"class":146,"line":1231},[144,55948,52157],{"class":154},[144,55950,51357],{"class":51313},[144,55952,51360],{"class":1993},[144,55954,200],{"class":154},[144,55956,51365],{"class":259},[144,55958,51320],{"class":154},[144,55960,55961,55963,55965,55967,55969,55971,55973,55975,55977],{"class":146,"line":1245},[144,55962,52157],{"class":154},[144,55964,51357],{"class":51313},[144,55966,14951],{"class":1993},[144,55968,200],{"class":154},[144,55970,51404],{"class":259},[144,55972,51384],{"class":1993},[144,55974,200],{"class":154},[144,55976,51411],{"class":259},[144,55978,51320],{"class":154},[144,55980,55981,55983,55985,55987,55989],{"class":146,"line":1251},[144,55982,52157],{"class":154},[144,55984,51420],{"class":51313},[144,55986,51423],{"class":154},[144,55988,51420],{"class":51313},[144,55990,51320],{"class":154},[144,55992,55993,55995,55997],{"class":146,"line":1342},[144,55994,52157],{"class":154},[144,55996,5157],{"class":51313},[144,55998,51320],{"class":154},[144,56000,56001,56003],{"class":146,"line":1348},[144,56002,6434],{"class":51313},[144,56004,15603],{"class":154},[144,56006,56007,56009,56011,56013],{"class":146,"line":1360},[144,56008,54708],{"class":203},[144,56010,51450],{"class":154},[144,56012,346],{"class":203},[144,56014,1321],{"class":154},[144,56016,56017,56019,56021,56023],{"class":146,"line":1642},[144,56018,54719],{"class":203},[144,56020,51450],{"class":154},[144,56022,346],{"class":203},[144,56024,1321],{"class":154},[144,56026,56027],{"class":146,"line":1647},[144,56028,2217],{"class":154},[144,56030,56031],{"class":146,"line":1653},[144,56032,2430],{"emptyLinePlaceholder":72},[144,56034,56035,56037],{"class":146,"line":1658},[144,56036,54738],{"class":51313},[144,56038,15603],{"class":154},[144,56040,56041,56043,56045,56047],{"class":146,"line":1672},[144,56042,54745],{"class":203},[144,56044,51450],{"class":154},[144,56046,54750],{"class":203},[144,56048,1321],{"class":154},[144,56050,56051],{"class":146,"line":1677},[144,56052,2217],{"class":154},[144,56054,56055],{"class":146,"line":1683},[144,56056,2430],{"emptyLinePlaceholder":72},[144,56058,56059,56061],{"class":146,"line":1704},[144,56060,54765],{"class":1993},[144,56062,15603],{"class":154},[144,56064,56065,56067,56069,56071],{"class":146,"line":1709},[144,56066,54772],{"class":203},[144,56068,51450],{"class":154},[144,56070,54777],{"class":203},[144,56072,1321],{"class":154},[144,56074,56075,56077,56079,56081,56083],{"class":146,"line":1723},[144,56076,54784],{"class":203},[144,56078,51450],{"class":154},[144,56080,54789],{"class":203},[144,56082,51505],{"class":150},[144,56084,1321],{"class":154},[144,56086,56087,56089,56091,56093,56095],{"class":146,"line":1728},[144,56088,54798],{"class":203},[144,56090,51450],{"class":154},[144,56092,1569],{"class":203},[144,56094,51505],{"class":150},[144,56096,1321],{"class":154},[144,56098,56099,56101,56103,56105,56107,56109],{"class":146,"line":1757},[144,56100,54719],{"class":203},[144,56102,51450],{"class":154},[144,56104,466],{"class":203},[144,56106,51505],{"class":150},[144,56108,51569],{"class":203},[144,56110,1321],{"class":154},[144,56112,56113],{"class":146,"line":1762},[144,56114,2217],{"class":154},[144,56116,56117],{"class":146,"line":1779},[144,56118,2430],{"emptyLinePlaceholder":72},[144,56120,56121,56123],{"class":146,"line":1784},[144,56122,54833],{"class":1993},[144,56124,15603],{"class":154},[144,56126,56127,56129,56131,56133],{"class":146,"line":1789},[144,56128,54772],{"class":203},[144,56130,51450],{"class":154},[144,56132,54844],{"class":203},[144,56134,1321],{"class":154},[144,56136,56137,56139,56141,56143],{"class":146,"line":1794},[144,56138,54851],{"class":203},[144,56140,51450],{"class":154},[144,56142,346],{"class":203},[144,56144,1321],{"class":154},[144,56146,56147,56149,56151,56153],{"class":146,"line":1808},[144,56148,54862],{"class":203},[144,56150,51450],{"class":154},[144,56152,346],{"class":203},[144,56154,1321],{"class":154},[144,56156,56157,56159,56161,56163,56165],{"class":146,"line":1813},[144,56158,54784],{"class":203},[144,56160,51450],{"class":154},[144,56162,466],{"class":203},[144,56164,483],{"class":150},[144,56166,1321],{"class":154},[144,56168,56169,56171,56173,56175,56177],{"class":146,"line":2607},[144,56170,54798],{"class":203},[144,56172,51450],{"class":154},[144,56174,730],{"class":203},[144,56176,483],{"class":150},[144,56178,1321],{"class":154},[144,56180,56181,56183,56185,56187],{"class":146,"line":2621},[144,56182,54897],{"class":203},[144,56184,51450],{"class":154},[144,56186,54902],{"class":203},[144,56188,1321],{"class":154},[144,56190,56191],{"class":146,"line":2629},[144,56192,2217],{"class":154},[144,56194,56195],{"class":146,"line":2634},[144,56196,2430],{"emptyLinePlaceholder":72},[144,56198,56199,56201,56203],{"class":146,"line":2640},[144,56200,54833],{"class":1993},[144,56202,6856],{"class":51313},[144,56204,15603],{"class":154},[144,56206,56207,56209,56211,56213],{"class":146,"line":2646},[144,56208,54772],{"class":203},[144,56210,51450],{"class":154},[144,56212,54844],{"class":203},[144,56214,1321],{"class":154},[144,56216,56217,56219,56221,56223,56225],{"class":146,"line":2651},[144,56218,54935],{"class":203},[144,56220,51450],{"class":154},[144,56222,1056],{"class":203},[144,56224,51505],{"class":150},[144,56226,1321],{"class":154},[144,56228,56229,56231,56233,56235,56237],{"class":146,"line":7979},[144,56230,54851],{"class":203},[144,56232,51450],{"class":154},[144,56234,855],{"class":203},[144,56236,51505],{"class":150},[144,56238,1321],{"class":154},[144,56240,56241,56243,56245,56247,56249],{"class":146,"line":8003},[144,56242,54960],{"class":203},[144,56244,51450],{"class":154},[144,56246,474],{"class":203},[144,56248,51505],{"class":150},[144,56250,1321],{"class":154},[144,56252,56253],{"class":146,"line":8008},[144,56254,2217],{"class":154},[144,56256,56257],{"class":146,"line":8014},[144,56258,2430],{"emptyLinePlaceholder":72},[144,56260,56261,56263],{"class":146,"line":8041},[144,56262,54981],{"class":51313},[144,56264,15603],{"class":154},[144,56266,56267,56269,56271,56273],{"class":146,"line":8046},[144,56268,54772],{"class":203},[144,56270,51450],{"class":154},[144,56272,54844],{"class":203},[144,56274,1321],{"class":154},[144,56276,56277,56279,56281,56283,56285],{"class":146,"line":8052},[144,56278,54960],{"class":203},[144,56280,51450],{"class":154},[144,56282,936],{"class":203},[144,56284,51505],{"class":150},[144,56286,1321],{"class":154},[144,56288,56289,56291,56293,56295,56297],{"class":146,"line":8064},[144,56290,54851],{"class":203},[144,56292,51450],{"class":154},[144,56294,855],{"class":203},[144,56296,51505],{"class":150},[144,56298,1321],{"class":154},[144,56300,56301,56303,56305,56307],{"class":146,"line":8076},[144,56302,55022],{"class":203},[144,56304,51450],{"class":154},[144,56306,51490],{"class":203},[144,56308,1321],{"class":154},[144,56310,56311,56313,56315,56317],{"class":146,"line":8088},[144,56312,55033],{"class":203},[144,56314,51450],{"class":154},[144,56316,51681],{"class":203},[144,56318,1321],{"class":154},[144,56320,56321,56323,56325,56327],{"class":146,"line":9747},[144,56322,54772],{"class":203},[144,56324,51450],{"class":154},[144,56326,54844],{"class":203},[144,56328,1321],{"class":154},[144,56330,56331,56333,56335,56337,56339],{"class":146,"line":9772},[144,56332,54784],{"class":203},[144,56334,51450],{"class":154},[144,56336,4022],{"class":203},[144,56338,51505],{"class":150},[144,56340,1321],{"class":154},[144,56342,56343,56345,56347,56349,56351],{"class":146,"line":9795},[144,56344,54798],{"class":203},[144,56346,51450],{"class":154},[144,56348,855],{"class":203},[144,56350,51505],{"class":150},[144,56352,1321],{"class":154},[144,56354,56355],{"class":146,"line":9819},[144,56356,2217],{"class":154},[144,56358,56359],{"class":146,"line":9824},[144,56360,2430],{"emptyLinePlaceholder":72},[144,56362,56363,56365,56367],{"class":146,"line":9829},[144,56364,54981],{"class":51313},[144,56366,55088],{"class":51313},[144,56368,15603],{"class":154},[144,56370,56371,56373,56375,56377,56379],{"class":146,"line":9834},[144,56372,54784],{"class":203},[144,56374,51450],{"class":154},[144,56376,855],{"class":203},[144,56378,51505],{"class":150},[144,56380,1321],{"class":154},[144,56382,56383,56385,56387,56389,56391],{"class":146,"line":9843},[144,56384,54798],{"class":203},[144,56386,51450],{"class":154},[144,56388,855],{"class":203},[144,56390,51505],{"class":150},[144,56392,1321],{"class":154},[144,56394,56395,56397,56399,56401,56403,56405,56407,56409,56411,56413,56415,56417],{"class":146,"line":9848},[144,56396,54897],{"class":203},[144,56398,51450],{"class":154},[144,56400,55123],{"class":203},[144,56402,155],{"class":154},[144,56404,346],{"class":203},[144,56406,12466],{"class":154},[144,56408,346],{"class":203},[144,56410,12466],{"class":154},[144,56412,346],{"class":203},[144,56414,12466],{"class":154},[144,56416,55140],{"class":203},[144,56418,2749],{"class":154},[144,56420,56421,56423,56425,56427,56429],{"class":146,"line":9854},[144,56422,55147],{"class":203},[144,56424,51450],{"class":154},[144,56426,601],{"class":203},[144,56428,51505],{"class":150},[144,56430,1321],{"class":154},[144,56432,56433],{"class":146,"line":9875},[144,56434,2217],{"class":154},[144,56436,56437],{"class":146,"line":9881},[144,56438,2430],{"emptyLinePlaceholder":72},[144,56440,56441,56443],{"class":146,"line":9895},[144,56442,55168],{"class":1993},[144,56444,15603],{"class":154},[144,56446,56447,56449,56451,56453],{"class":146,"line":9901},[144,56448,54897],{"class":203},[144,56450,51450],{"class":154},[144,56452,55179],{"class":203},[144,56454,1321],{"class":154},[144,56456,56457],{"class":146,"line":9928},[144,56458,2217],{"class":154},[144,56460,56461,56463,56465],{"class":146,"line":9937},[144,56462,52430],{"class":154},[144,56464,5157],{"class":51313},[144,56466,51320],{"class":154},[144,56468,56469,56471,56473],{"class":146,"line":9943},[144,56470,51798],{"class":154},[144,56472,51347],{"class":51313},[144,56474,51320],{"class":154},[144,56476,56477],{"class":146,"line":9951},[144,56478,2430],{"emptyLinePlaceholder":72},[144,56480,56481,56483,56485],{"class":146,"line":9956},[144,56482,1065],{"class":154},[144,56484,51813],{"class":51313},[144,56486,51320],{"class":154},[144,56488,56489,56491,56493,56495,56497,56499],{"class":146,"line":16635},[144,56490,52157],{"class":154},[144,56492,51624],{"class":51313},[144,56494,53499],{"class":1993},[144,56496,200],{"class":154},[144,56498,53504],{"class":259},[144,56500,51320],{"class":154},[144,56502,56503,56505,56507,56509,56511,56513],{"class":146,"line":16641},[144,56504,51354],{"class":154},[144,56506,51624],{"class":51313},[144,56508,53499],{"class":1993},[144,56510,200],{"class":154},[144,56512,55240],{"class":259},[144,56514,51320],{"class":154},[144,56516,56517,56519,56521,56523,56525,56527,56529,56531,56533],{"class":146,"line":16664},[144,56518,55247],{"class":154},[144,56520,28],{"class":51313},[144,56522,55252],{"class":1993},[144,56524,200],{"class":154},[144,56526,55257],{"class":259},[144,56528,55260],{"class":1993},[144,56530,200],{"class":154},[144,56532,7683],{"class":259},[144,56534,51320],{"class":154},[144,56536,56537,56539,56541],{"class":146,"line":16670},[144,56538,51789],{"class":154},[144,56540,51624],{"class":51313},[144,56542,51320],{"class":154},[144,56544,56545,56547,56549,56551,56553,56555],{"class":146,"line":16693},[144,56546,51354],{"class":154},[144,56548,51624],{"class":51313},[144,56550,53499],{"class":1993},[144,56552,200],{"class":154},[144,56554,55287],{"class":259},[144,56556,51320],{"class":154},[144,56558,56559,56561,56563,56565,56567],{"class":146,"line":16707},[144,56560,55247],{"class":154},[144,56562,14],{"class":51313},[144,56564,55298],{"class":154},[144,56566,14],{"class":51313},[144,56568,51320],{"class":154},[144,56570,56571,56573,56575],{"class":146,"line":16727},[144,56572,55247],{"class":154},[144,56574,1162],{"class":51313},[144,56576,51320],{"class":154},[144,56578,56579,56581,56583,56585,56587,56589,56591,56593],{"class":146,"line":16733},[144,56580,55315],{"class":154},[144,56582,101],{"class":51313},[144,56584,53499],{"class":1993},[144,56586,200],{"class":154},[144,56588,55324],{"class":259},[144,56590,55327],{"class":154},[144,56592,101],{"class":51313},[144,56594,51320],{"class":154},[144,56596,56597,56599,56601,56603,56605],{"class":146,"line":16744},[144,56598,55315],{"class":154},[144,56600,101],{"class":51313},[144,56602,55327],{"class":154},[144,56604,101],{"class":51313},[144,56606,51320],{"class":154},[144,56608,56609,56611,56613,56615,56617],{"class":146,"line":16767},[144,56610,55315],{"class":154},[144,56612,101],{"class":51313},[144,56614,55327],{"class":154},[144,56616,101],{"class":51313},[144,56618,51320],{"class":154},[144,56620,56621,56623,56625,56627,56629],{"class":146,"line":16789},[144,56622,55315],{"class":154},[144,56624,101],{"class":51313},[144,56626,55327],{"class":154},[144,56628,101],{"class":51313},[144,56630,51320],{"class":154},[144,56632,56633,56635,56637,56639,56641],{"class":146,"line":16794},[144,56634,55315],{"class":154},[144,56636,101],{"class":51313},[144,56638,55327],{"class":154},[144,56640,101],{"class":51313},[144,56642,51320],{"class":154},[144,56644,56645,56647,56649,56651,56653],{"class":146,"line":16800},[144,56646,55315],{"class":154},[144,56648,101],{"class":51313},[144,56650,55327],{"class":154},[144,56652,101],{"class":51313},[144,56654,51320],{"class":154},[144,56656,56657,56659,56661,56663,56665],{"class":146,"line":16814},[144,56658,55315],{"class":154},[144,56660,101],{"class":51313},[144,56662,55327],{"class":154},[144,56664,101],{"class":51313},[144,56666,51320],{"class":154},[144,56668,56669,56671,56673,56675,56677],{"class":146,"line":16827},[144,56670,55315],{"class":154},[144,56672,101],{"class":51313},[144,56674,55327],{"class":154},[144,56676,101],{"class":51313},[144,56678,51320],{"class":154},[144,56680,56681,56683,56685],{"class":146,"line":16832},[144,56682,55420],{"class":154},[144,56684,1162],{"class":51313},[144,56686,51320],{"class":154},[144,56688,56689,56691,56693],{"class":146,"line":16846},[144,56690,51789],{"class":154},[144,56692,51624],{"class":51313},[144,56694,51320],{"class":154},[144,56696,56697,56699,56701],{"class":146,"line":16851},[144,56698,52430],{"class":154},[144,56700,51624],{"class":51313},[144,56702,51320],{"class":154},[144,56704,56705,56707,56709],{"class":146,"line":16857},[144,56706,52157],{"class":154},[144,56708,51826],{"class":51313},[144,56710,51320],{"class":154},[144,56712,56713,56715,56718,56720],{"class":146,"line":16862},[144,56714,11252],{"class":150},[144,56716,56717],{"class":203}," sliderData",[144,56719,13595],{"class":150},[144,56721,55460],{"class":154},[144,56723,56724,56726,56728,56730,56732,56734,56736],{"class":146,"line":16876},[144,56725,55465],{"class":154},[144,56727,55468],{"class":259},[144,56729,55471],{"class":154},[144,56731,55474],{"class":259},[144,56733,55477],{"class":154},[144,56735,55480],{"class":259},[144,56737,55483],{"class":154},[144,56739,56740,56742,56744,56746,56748,56750,56752],{"class":146,"line":16881},[144,56741,55465],{"class":154},[144,56743,55490],{"class":259},[144,56745,55471],{"class":154},[144,56747,55495],{"class":259},[144,56749,55477],{"class":154},[144,56751,55500],{"class":259},[144,56753,55483],{"class":154},[144,56755,56756,56758,56760,56762,56764,56766,56768],{"class":146,"line":16886},[144,56757,55465],{"class":154},[144,56759,55509],{"class":259},[144,56761,55471],{"class":154},[144,56763,55514],{"class":259},[144,56765,55477],{"class":154},[144,56767,55519],{"class":259},[144,56769,55483],{"class":154},[144,56771,56772,56774,56776,56778,56780,56782,56784],{"class":146,"line":16900},[144,56773,55465],{"class":154},[144,56775,55528],{"class":259},[144,56777,55471],{"class":154},[144,56779,55533],{"class":259},[144,56781,55477],{"class":154},[144,56783,55538],{"class":259},[144,56785,55483],{"class":154},[144,56787,56788,56790,56792,56794,56796,56798,56800],{"class":146,"line":16912},[144,56789,55465],{"class":154},[144,56791,55547],{"class":259},[144,56793,55471],{"class":154},[144,56795,55552],{"class":259},[144,56797,55477],{"class":154},[144,56799,55557],{"class":259},[144,56801,55483],{"class":154},[144,56803,56804,56806,56808,56810,56812,56814,56816],{"class":146,"line":16917},[144,56805,55465],{"class":154},[144,56807,55566],{"class":259},[144,56809,55471],{"class":154},[144,56811,55571],{"class":259},[144,56813,55477],{"class":154},[144,56815,55576],{"class":259},[144,56817,55483],{"class":154},[144,56819,56820,56822,56824,56826,56828,56830,56832],{"class":146,"line":16930},[144,56821,55465],{"class":154},[144,56823,55585],{"class":259},[144,56825,55471],{"class":154},[144,56827,55590],{"class":259},[144,56829,55477],{"class":154},[144,56831,55595],{"class":259},[144,56833,55483],{"class":154},[144,56835,56836,56838,56840,56842,56844,56846,56848],{"class":146,"line":16935},[144,56837,55465],{"class":154},[144,56839,55604],{"class":259},[144,56841,55471],{"class":154},[144,56843,55609],{"class":259},[144,56845,55477],{"class":154},[144,56847,55614],{"class":259},[144,56849,55617],{"class":154},[144,56851,56852],{"class":146,"line":16940},[144,56853,53122],{"class":154},[144,56855,56856],{"class":146,"line":16945},[144,56857,56858],{"class":213},"    \u002F\u002F 1.获取元素\n",[144,56860,56861,56863,56865,56867,56869,56871,56873,56875],{"class":146,"line":16958},[144,56862,11252],{"class":150},[144,56864,55628],{"class":203},[144,56866,13595],{"class":150},[144,56868,54409],{"class":154},[144,56870,54412],{"class":1993},[144,56872,155],{"class":154},[144,56874,55639],{"class":259},[144,56876,161],{"class":154},[144,56878,56879,56881,56883,56885,56887,56889,56891,56893],{"class":146,"line":16963},[144,56880,11252],{"class":150},[144,56882,6856],{"class":203},[144,56884,13595],{"class":150},[144,56886,54409],{"class":154},[144,56888,54412],{"class":1993},[144,56890,155],{"class":154},[144,56892,55658],{"class":259},[144,56894,161],{"class":154},[144,56896,56897,56899,56901,56903],{"class":146,"line":32646},[144,56898,52232],{"class":150},[144,56900,9469],{"class":154},[144,56902,200],{"class":150},[144,56904,47346],{"class":203},[144,56906,56907],{"class":146,"line":32652},[144,56908,56909],{"class":213},"    \u002F\u002F 2.开启定时器\n",[144,56911,56912],{"class":146,"line":32658},[144,56913,56914],{"class":213},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[144,56916,56917,56920,56922,56924],{"class":146,"line":32664},[144,56918,56919],{"class":1993},"    setInterval",[144,56921,155],{"class":154},[144,56923,54462],{"class":150},[144,56925,54465],{"class":154},[144,56927,56928,56930],{"class":146,"line":32670},[144,56929,54470],{"class":154},[144,56931,2732],{"class":150},[144,56933,56934,56936,56938,56940,56943,56945],{"class":146,"line":32681},[144,56935,54493],{"class":150},[144,56937,54496],{"class":154},[144,56939,1740],{"class":150},[144,56941,56942],{"class":154}," sliderData.",[144,56944,51981],{"class":203},[144,56946,12473],{"class":154},[144,56948,56949,56952,56954],{"class":146,"line":32687},[144,56950,56951],{"class":154},"        i ",[144,56953,200],{"class":150},[144,56955,47346],{"class":203},[144,56957,56958],{"class":146,"line":32707},[144,56959,52411],{"class":154},[144,56961,56962],{"class":146,"line":32713},[144,56963,56964],{"class":213},"      \u002F\u002F 更换图片路径\n",[144,56966,56967,56969,56971],{"class":146,"line":32724},[144,56968,55734],{"class":154},[144,56970,200],{"class":150},[144,56972,56973],{"class":154}," sliderData[i].url\n",[144,56975,56976],{"class":146,"line":32730},[144,56977,56978],{"class":213},"      \u002F\u002F 把文字写到p里面\n",[144,56980,56981,56983,56985],{"class":146,"line":32736},[144,56982,55744],{"class":154},[144,56984,200],{"class":150},[144,56986,56987],{"class":154}," sliderData[i].title\n",[144,56989,56990],{"class":146,"line":32742},[144,56991,56992],{"class":213},"      \u002F\u002F 小圆点\n",[144,56994,56995],{"class":146,"line":32748},[144,56996,56997],{"class":213},"      \u002F\u002F 先删除以前的active\n",[144,56999,57000],{"class":146,"line":32754},[144,57001,57002],{"class":213},"      \u002F\u002F 只让当前li添加active\n",[144,57004,57005,57007,57009,57011,57014,57017,57020,57022,57024],{"class":146,"line":32760},[144,57006,55784],{"class":154},[144,57008,54412],{"class":1993},[144,57010,155],{"class":154},[144,57012,57013],{"class":259},"'.slider-footer .activate'",[144,57015,57016],{"class":154},").classList.",[144,57018,57019],{"class":1993},"remove",[144,57021,155],{"class":154},[144,57023,55802],{"class":259},[144,57025,161],{"class":154},[144,57027,57028,57030,57032,57034,57037,57039,57041,57043,57046,57048,57050,57052,57054],{"class":146,"line":32766},[144,57029,55784],{"class":154},[144,57031,54412],{"class":1993},[144,57033,155],{"class":154},[144,57035,57036],{"class":259},"`.slider-footer ul li:nth-child(${",[144,57038,596],{"class":154},[144,57040,45579],{"class":150},[144,57042,25131],{"class":203},[144,57044,57045],{"class":259},"})`",[144,57047,57016],{"class":154},[144,57049,5365],{"class":1993},[144,57051,155],{"class":154},[144,57053,55802],{"class":259},[144,57055,161],{"class":154},[144,57057,57058],{"class":146,"line":32786},[144,57059,2430],{"emptyLinePlaceholder":72},[144,57061,57062,57064,57066],{"class":146,"line":32792},[144,57063,54548],{"class":154},[144,57065,6441],{"class":203},[144,57067,161],{"class":154},[144,57069,57070],{"class":146,"line":32808},[144,57071,2430],{"emptyLinePlaceholder":72},[144,57073,57074,57076,57078],{"class":146,"line":32814},[144,57075,52430],{"class":154},[144,57077,51826],{"class":51313},[144,57079,51320],{"class":154},[144,57081,57082,57084,57086],{"class":146,"line":32828},[144,57083,51798],{"class":154},[144,57085,51813],{"class":51313},[144,57087,51320],{"class":154},[144,57089,57090],{"class":146,"line":32834},[144,57091,2430],{"emptyLinePlaceholder":72},[144,57093,57094,57096,57098],{"class":146,"line":32849},[144,57095,51798],{"class":154},[144,57097,50648],{"class":51313},[144,57099,51320],{"class":154},[115,57101,57103],{"id":57102},"_317-重要知识点","3.1.7 重要知识点",[14,57105,57106,57107],{},"浏览器在渲染文本时， ",[304,57108,57109],{},"没有空格或换行符就没有“断行点”",[14,57111,57112],{},[28,57113],{"alt":30,"src":57114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57116,57117],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57119,57120],{},[28,57121],{"alt":30,"src":57122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57124,57125],{},[28,57126],{"alt":30,"src":57127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[18,57129,57131],{"id":57130},"_32-dom事件基础","3.2 DOM事件基础",[115,57133,57135],{"id":57134},"_321-事件监听","3.2.1 事件监听",[14,57137,57138],{},[28,57139],{"alt":30,"src":57140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57142,57143],{},"事件监听有响应的发生",[14,57145,57146],{},[28,57147],{"alt":30,"src":57148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57150,57151],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57153,57154],{},"对于有名函数,要执行的函数名后边不要加()",[115,57156,57158],{"id":57157},"_322-随机点名案例","3.2.2 随机点名案例",[135,57160,57162],{"className":50646,"code":57161,"language":50648,"meta":30,"style":30},"\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",[141,57163,57164,57174,57188,57192,57200,57214,57234,57246,57254,57260,57270,57280,57284,57288,57295,57306,57310,57314,57320,57332,57346,57356,57368,57381,57385,57389,57396,57400,57413,57425,57437,57441,57445,57449,57456,57466,57470,57474,57483,57495,57507,57522,57526,57534,57542,57546,57554,57567,57581,57594,57614,57622,57637,57657,57677,57685,57689,57697,57702,57738,57758,57763,57782,57787,57798,57803,57814,57819,57838,57853,57858,57884,57894,57903,57908,57924,57929,57934,57939,57954,57958,57962,57967,57986,58003,58011,58016,58031,58035,58039,58047,58055,58059],{"__ignoreMap":30},[144,57165,57166,57168,57170,57172],{"class":146,"line":147},[144,57167,51310],{"class":154},[144,57169,51314],{"class":51313},[144,57171,51317],{"class":1993},[144,57173,51320],{"class":154},[144,57175,57176,57178,57180,57182,57184,57186],{"class":146,"line":66},[144,57177,1065],{"class":154},[144,57179,50648],{"class":51313},[144,57181,51329],{"class":1993},[144,57183,200],{"class":154},[144,57185,51334],{"class":259},[144,57187,51320],{"class":154},[144,57189,57190],{"class":146,"line":1210},[144,57191,2430],{"emptyLinePlaceholder":72},[144,57193,57194,57196,57198],{"class":146,"line":1225},[144,57195,1065],{"class":154},[144,57197,51347],{"class":51313},[144,57199,51320],{"class":154},[144,57201,57202,57204,57206,57208,57210,57212],{"class":146,"line":1231},[144,57203,52157],{"class":154},[144,57205,51357],{"class":51313},[144,57207,51360],{"class":1993},[144,57209,200],{"class":154},[144,57211,51365],{"class":259},[144,57213,51320],{"class":154},[144,57215,57216,57218,57220,57222,57224,57226,57228,57230,57232],{"class":146,"line":1245},[144,57217,52157],{"class":154},[144,57219,51357],{"class":51313},[144,57221,14951],{"class":1993},[144,57223,200],{"class":154},[144,57225,51404],{"class":259},[144,57227,51384],{"class":1993},[144,57229,200],{"class":154},[144,57231,51411],{"class":259},[144,57233,51320],{"class":154},[144,57235,57236,57238,57240,57242,57244],{"class":146,"line":1251},[144,57237,52157],{"class":154},[144,57239,51420],{"class":51313},[144,57241,51423],{"class":154},[144,57243,51420],{"class":51313},[144,57245,51320],{"class":154},[144,57247,57248,57250,57252],{"class":146,"line":1342},[144,57249,52157],{"class":154},[144,57251,5157],{"class":51313},[144,57253,51320],{"class":154},[144,57255,57256,57258],{"class":146,"line":1348},[144,57257,6434],{"class":51313},[144,57259,15603],{"class":154},[144,57261,57262,57264,57266,57268],{"class":146,"line":1360},[144,57263,54719],{"class":203},[144,57265,51450],{"class":154},[144,57267,346],{"class":203},[144,57269,1321],{"class":154},[144,57271,57272,57274,57276,57278],{"class":146,"line":1642},[144,57273,54708],{"class":203},[144,57275,51450],{"class":154},[144,57277,346],{"class":203},[144,57279,1321],{"class":154},[144,57281,57282],{"class":146,"line":1647},[144,57283,2217],{"class":154},[144,57285,57286],{"class":146,"line":1653},[144,57287,2430],{"emptyLinePlaceholder":72},[144,57289,57290,57293],{"class":146,"line":1658},[144,57291,57292],{"class":51313},"    h2",[144,57294,15603],{"class":154},[144,57296,57297,57300,57302,57304],{"class":146,"line":1672},[144,57298,57299],{"class":203},"      text-align",[144,57301,51450],{"class":154},[144,57303,51605],{"class":203},[144,57305,1321],{"class":154},[144,57307,57308],{"class":146,"line":1677},[144,57309,2217],{"class":154},[144,57311,57312],{"class":146,"line":1683},[144,57313,2430],{"emptyLinePlaceholder":72},[144,57315,57316,57318],{"class":146,"line":1704},[144,57317,54765],{"class":1993},[144,57319,15603],{"class":154},[144,57321,57322,57324,57326,57328,57330],{"class":146,"line":1709},[144,57323,54784],{"class":203},[144,57325,51450],{"class":154},[144,57327,1569],{"class":203},[144,57329,51505],{"class":150},[144,57331,1321],{"class":154},[144,57333,57334,57336,57338,57340,57342,57344],{"class":146,"line":1723},[144,57335,54719],{"class":203},[144,57337,51450],{"class":154},[144,57339,811],{"class":203},[144,57341,51505],{"class":150},[144,57343,51569],{"class":203},[144,57345,1321],{"class":154},[144,57347,57348,57350,57352,57354],{"class":146,"line":1728},[144,57349,55022],{"class":203},[144,57351,51450],{"class":154},[144,57353,51490],{"class":203},[144,57355,1321],{"class":154},[144,57357,57358,57360,57362,57364,57366],{"class":146,"line":1757},[144,57359,54935],{"class":203},[144,57361,51450],{"class":154},[144,57363,980],{"class":203},[144,57365,51505],{"class":150},[144,57367,1321],{"class":154},[144,57369,57370,57373,57375,57377,57379],{"class":146,"line":1762},[144,57371,57372],{"class":203},"      line-height",[144,57374,51450],{"class":154},[144,57376,556],{"class":203},[144,57378,51505],{"class":150},[144,57380,1321],{"class":154},[144,57382,57383],{"class":146,"line":1779},[144,57384,2217],{"class":154},[144,57386,57387],{"class":146,"line":1784},[144,57388,2430],{"emptyLinePlaceholder":72},[144,57390,57391,57394],{"class":146,"line":1789},[144,57392,57393],{"class":1993},"    .qs",[144,57395,15603],{"class":154},[144,57397,57398],{"class":146,"line":1794},[144,57399,2430],{"emptyLinePlaceholder":72},[144,57401,57402,57404,57406,57409,57411],{"class":146,"line":1808},[144,57403,54784],{"class":203},[144,57405,51450],{"class":154},[144,57407,57408],{"class":203},"450",[144,57410,51505],{"class":150},[144,57412,1321],{"class":154},[144,57414,57415,57417,57419,57421,57423],{"class":146,"line":1813},[144,57416,54798],{"class":203},[144,57418,51450],{"class":154},[144,57420,556],{"class":203},[144,57422,51505],{"class":150},[144,57424,1321],{"class":154},[144,57426,57427,57430,57432,57435],{"class":146,"line":2607},[144,57428,57429],{"class":203},"      color",[144,57431,51450],{"class":154},[144,57433,57434],{"class":203},"red",[144,57436,1321],{"class":154},[144,57438,57439],{"class":146,"line":2621},[144,57440,2430],{"emptyLinePlaceholder":72},[144,57442,57443],{"class":146,"line":2629},[144,57444,2217],{"class":154},[144,57446,57447],{"class":146,"line":2634},[144,57448,2430],{"emptyLinePlaceholder":72},[144,57450,57451,57454],{"class":146,"line":2640},[144,57452,57453],{"class":1993},"    .btns",[144,57455,15603],{"class":154},[144,57457,57458,57460,57462,57464],{"class":146,"line":2646},[144,57459,57299],{"class":203},[144,57461,51450],{"class":154},[144,57463,51605],{"class":203},[144,57465,1321],{"class":154},[144,57467,57468],{"class":146,"line":2651},[144,57469,2217],{"class":154},[144,57471,57472],{"class":146,"line":7979},[144,57473,2430],{"emptyLinePlaceholder":72},[144,57475,57476,57478,57481],{"class":146,"line":8003},[144,57477,57453],{"class":1993},[144,57479,57480],{"class":51313}," button",[144,57482,15603],{"class":154},[144,57484,57485,57487,57489,57491,57493],{"class":146,"line":8008},[144,57486,54784],{"class":203},[144,57488,51450],{"class":154},[144,57490,972],{"class":203},[144,57492,51505],{"class":150},[144,57494,1321],{"class":154},[144,57496,57497,57499,57501,57503,57505],{"class":146,"line":8014},[144,57498,54798],{"class":203},[144,57500,51450],{"class":154},[144,57502,428],{"class":203},[144,57504,51505],{"class":150},[144,57506,1321],{"class":154},[144,57508,57509,57511,57513,57515,57518,57520],{"class":146,"line":8041},[144,57510,54719],{"class":203},[144,57512,51450],{"class":154},[144,57514,346],{"class":203},[144,57516,57517],{"class":203}," 50",[144,57519,51505],{"class":150},[144,57521,1321],{"class":154},[144,57523,57524],{"class":146,"line":8046},[144,57525,2217],{"class":154},[144,57527,57528,57530,57532],{"class":146,"line":8052},[144,57529,52430],{"class":154},[144,57531,5157],{"class":51313},[144,57533,51320],{"class":154},[144,57535,57536,57538,57540],{"class":146,"line":8064},[144,57537,51798],{"class":154},[144,57539,51347],{"class":51313},[144,57541,51320],{"class":154},[144,57543,57544],{"class":146,"line":8076},[144,57545,2430],{"emptyLinePlaceholder":72},[144,57547,57548,57550,57552],{"class":146,"line":8088},[144,57549,1065],{"class":154},[144,57551,51813],{"class":51313},[144,57553,51320],{"class":154},[144,57555,57556,57558,57560,57563,57565],{"class":146,"line":9747},[144,57557,52157],{"class":154},[144,57559,18],{"class":51313},[144,57561,57562],{"class":154},">随机点名\u003C\u002F",[144,57564,18],{"class":51313},[144,57566,51320],{"class":154},[144,57568,57569,57571,57573,57575,57577,57579],{"class":146,"line":9772},[144,57570,52157],{"class":154},[144,57572,51624],{"class":51313},[144,57574,53499],{"class":1993},[144,57576,200],{"class":154},[144,57578,53504],{"class":259},[144,57580,51320],{"class":154},[144,57582,57583,57585,57587,57590,57592],{"class":146,"line":9795},[144,57584,51354],{"class":154},[144,57586,144],{"class":51313},[144,57588,57589],{"class":154},">名字是：\u003C\u002F",[144,57591,144],{"class":51313},[144,57593,51320],{"class":154},[144,57595,57596,57598,57600,57602,57604,57607,57610,57612],{"class":146,"line":9819},[144,57597,51354],{"class":154},[144,57599,51624],{"class":51313},[144,57601,53499],{"class":1993},[144,57603,200],{"class":154},[144,57605,57606],{"class":259},"\"qs\"",[144,57608,57609],{"class":154},">这里显示姓名\u003C\u002F",[144,57611,51624],{"class":51313},[144,57613,51320],{"class":154},[144,57615,57616,57618,57620],{"class":146,"line":9824},[144,57617,52430],{"class":154},[144,57619,51624],{"class":51313},[144,57621,51320],{"class":154},[144,57623,57624,57626,57628,57630,57632,57635],{"class":146,"line":9829},[144,57625,52157],{"class":154},[144,57627,51624],{"class":51313},[144,57629,53499],{"class":1993},[144,57631,200],{"class":154},[144,57633,57634],{"class":259},"\"btns\"",[144,57636,51320],{"class":154},[144,57638,57639,57641,57643,57645,57647,57650,57653,57655],{"class":146,"line":9834},[144,57640,51354],{"class":154},[144,57642,53900],{"class":51313},[144,57644,53499],{"class":1993},[144,57646,200],{"class":154},[144,57648,57649],{"class":259},"\"start\"",[144,57651,57652],{"class":154},">开始\u003C\u002F",[144,57654,53900],{"class":51313},[144,57656,51320],{"class":154},[144,57658,57659,57661,57663,57665,57667,57670,57673,57675],{"class":146,"line":9843},[144,57660,51354],{"class":154},[144,57662,53900],{"class":51313},[144,57664,53499],{"class":1993},[144,57666,200],{"class":154},[144,57668,57669],{"class":259},"\"end\"",[144,57671,57672],{"class":154},">结束\u003C\u002F",[144,57674,53900],{"class":51313},[144,57676,51320],{"class":154},[144,57678,57679,57681,57683],{"class":146,"line":9848},[144,57680,52430],{"class":154},[144,57682,51624],{"class":51313},[144,57684,51320],{"class":154},[144,57686,57687],{"class":146,"line":9854},[144,57688,2430],{"emptyLinePlaceholder":72},[144,57690,57691,57693,57695],{"class":146,"line":9875},[144,57692,52157],{"class":154},[144,57694,51826],{"class":51313},[144,57696,51320],{"class":154},[144,57698,57699],{"class":146,"line":9881},[144,57700,57701],{"class":213},"    \u002F\u002F 数据数组\n",[144,57703,57704,57706,57709,57711,57713,57716,57718,57721,57723,57726,57728,57731,57733,57736],{"class":146,"line":9895},[144,57705,11252],{"class":150},[144,57707,57708],{"class":203}," arr",[144,57710,13595],{"class":150},[144,57712,52239],{"class":154},[144,57714,57715],{"class":259},"'马超'",[144,57717,12466],{"class":154},[144,57719,57720],{"class":259},"'黄忠'",[144,57722,12466],{"class":154},[144,57724,57725],{"class":259},"'赵云'",[144,57727,12466],{"class":154},[144,57729,57730],{"class":259},"'关羽'",[144,57732,12466],{"class":154},[144,57734,57735],{"class":259},"'张飞'",[144,57737,33259],{"class":154},[144,57739,57740,57742,57745,57747,57749,57751,57753,57756],{"class":146,"line":9901},[144,57741,11252],{"class":150},[144,57743,57744],{"class":203}," qs",[144,57746,13595],{"class":150},[144,57748,54409],{"class":154},[144,57750,54412],{"class":1993},[144,57752,155],{"class":154},[144,57754,57755],{"class":259},"'.qs'",[144,57757,161],{"class":154},[144,57759,57760],{"class":146,"line":9928},[144,57761,57762],{"class":213},"    \u002F\u002F 1.业务1.开始按钮模块\n",[144,57764,57765,57767,57769,57771,57773,57775,57777,57780],{"class":146,"line":9937},[144,57766,11252],{"class":150},[144,57768,4214],{"class":203},[144,57770,13595],{"class":150},[144,57772,54409],{"class":154},[144,57774,54412],{"class":1993},[144,57776,155],{"class":154},[144,57778,57779],{"class":259},"'.start'",[144,57781,161],{"class":154},[144,57783,57784],{"class":146,"line":9943},[144,57785,57786],{"class":213},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[144,57788,57789,57791,57794,57796],{"class":146,"line":9951},[144,57790,52232],{"class":150},[144,57792,57793],{"class":154}," timerId ",[144,57795,200],{"class":150},[144,57797,47346],{"class":203},[144,57799,57800],{"class":146,"line":9956},[144,57801,57802],{"class":213},"    \u002F\u002F 随机号要全局变量\n",[144,57804,57805,57807,57810,57812],{"class":146,"line":16635},[144,57806,52232],{"class":150},[144,57808,57809],{"class":154}," random ",[144,57811,200],{"class":150},[144,57813,47346],{"class":203},[144,57815,57816],{"class":146,"line":16641},[144,57817,57818],{"class":213},"    \u002F\u002F 1.1 添加点击事件\n",[144,57820,57821,57824,57827,57829,57832,57834,57836],{"class":146,"line":16664},[144,57822,57823],{"class":154},"    start.",[144,57825,57826],{"class":1993},"addEventListener",[144,57828,155],{"class":154},[144,57830,57831],{"class":259},"'click'",[144,57833,12466],{"class":154},[144,57835,54462],{"class":150},[144,57837,54465],{"class":154},[144,57839,57840,57843,57845,57847,57849,57851],{"class":146,"line":16670},[144,57841,57842],{"class":154},"      timerId ",[144,57844,200],{"class":150},[144,57846,54457],{"class":1993},[144,57848,155],{"class":154},[144,57850,54462],{"class":150},[144,57852,54465],{"class":154},[144,57854,57855],{"class":146,"line":16693},[144,57856,57857],{"class":213},"        \u002F\u002F 随机数\n",[144,57859,57860,57863,57865,57868,57871,57874,57876,57878,57880,57882],{"class":146,"line":16707},[144,57861,57862],{"class":154},"        random ",[144,57864,200],{"class":150},[144,57866,57867],{"class":1993}," parseInt",[144,57869,57870],{"class":154},"(Math.",[144,57872,57873],{"class":1993},"random",[144,57875,13081],{"class":154},[144,57877,610],{"class":150},[144,57879,51978],{"class":154},[144,57881,51981],{"class":203},[144,57883,161],{"class":154},[144,57885,57886,57889,57891],{"class":146,"line":16727},[144,57887,57888],{"class":154},"        qs.innerHTML ",[144,57890,200],{"class":150},[144,57892,57893],{"class":154}," arr[random]\n",[144,57895,57896,57899,57901],{"class":146,"line":16733},[144,57897,57898],{"class":154},"      }, ",[144,57900,428],{"class":203},[144,57902,161],{"class":154},[144,57904,57905],{"class":146,"line":16744},[144,57906,57907],{"class":213},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[144,57909,57910,57912,57915,57917,57920,57922],{"class":146,"line":16767},[144,57911,54493],{"class":150},[144,57913,57914],{"class":154}," (arr.",[144,57916,51981],{"class":203},[144,57918,57919],{"class":150}," ===",[144,57921,25131],{"class":203},[144,57923,12473],{"class":154},[144,57925,57926],{"class":146,"line":16789},[144,57927,57928],{"class":213},"        \u002F\u002F start.disabled = true\n",[144,57930,57931],{"class":146,"line":16794},[144,57932,57933],{"class":213},"        \u002F\u002F end.disabled = true\n",[144,57935,57936],{"class":146,"line":16800},[144,57937,57938],{"class":213},"        \u002F\u002F 可以合起来写\n",[144,57940,57941,57944,57946,57949,57951],{"class":146,"line":16814},[144,57942,57943],{"class":154},"        start.disabled ",[144,57945,200],{"class":150},[144,57947,57948],{"class":154}," end.disabled ",[144,57950,200],{"class":150},[144,57952,57953],{"class":203}," true\n",[144,57955,57956],{"class":146,"line":16827},[144,57957,52411],{"class":154},[144,57959,57960],{"class":146,"line":16832},[144,57961,33474],{"class":154},[144,57963,57964],{"class":146,"line":16846},[144,57965,57966],{"class":213},"    \u002F\u002F 1.2 关闭按钮模块\n",[144,57968,57969,57971,57973,57975,57977,57979,57981,57984],{"class":146,"line":16851},[144,57970,11252],{"class":150},[144,57972,4230],{"class":203},[144,57974,13595],{"class":150},[144,57976,54409],{"class":154},[144,57978,54412],{"class":1993},[144,57980,155],{"class":154},[144,57982,57983],{"class":259},"'.end'",[144,57985,161],{"class":154},[144,57987,57988,57991,57993,57995,57997,57999,58001],{"class":146,"line":16857},[144,57989,57990],{"class":154},"    end.",[144,57992,57826],{"class":1993},[144,57994,155],{"class":154},[144,57996,57831],{"class":259},[144,57998,12466],{"class":154},[144,58000,54462],{"class":150},[144,58002,54465],{"class":154},[144,58004,58005,58008],{"class":146,"line":16862},[144,58006,58007],{"class":1993},"      clearInterval",[144,58009,58010],{"class":154},"(timerId)\n",[144,58012,58013],{"class":146,"line":16876},[144,58014,58015],{"class":213},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[144,58017,58018,58021,58024,58027,58029],{"class":146,"line":16881},[144,58019,58020],{"class":154},"      arr.",[144,58022,58023],{"class":1993},"splice",[144,58025,58026],{"class":154},"(random, ",[144,58028,372],{"class":203},[144,58030,161],{"class":154},[144,58032,58033],{"class":146,"line":16886},[144,58034,33474],{"class":154},[144,58036,58037],{"class":146,"line":16900},[144,58038,2430],{"emptyLinePlaceholder":72},[144,58040,58041,58043,58045],{"class":146,"line":16912},[144,58042,52430],{"class":154},[144,58044,51826],{"class":51313},[144,58046,51320],{"class":154},[144,58048,58049,58051,58053],{"class":146,"line":16917},[144,58050,51798],{"class":154},[144,58052,51813],{"class":51313},[144,58054,51320],{"class":154},[144,58056,58057],{"class":146,"line":16930},[144,58058,2430],{"emptyLinePlaceholder":72},[144,58060,58061,58063,58065],{"class":146,"line":16935},[144,58062,51798],{"class":154},[144,58064,50648],{"class":51313},[144,58066,51320],{"class":154},[14,58068,58069],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[115,58071,58073],{"id":58072},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[135,58075,58077],{"className":50646,"code":58076,"language":50648,"meta":30,"style":30},"\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",[141,58078,58079,58089,58103,58107,58115,58129,58149,58161,58169,58173,58181,58193,58201,58220,58237,58253,58263,58267,58275,58283,58287],{"__ignoreMap":30},[144,58080,58081,58083,58085,58087],{"class":146,"line":147},[144,58082,51310],{"class":154},[144,58084,51314],{"class":51313},[144,58086,51317],{"class":1993},[144,58088,51320],{"class":154},[144,58090,58091,58093,58095,58097,58099,58101],{"class":146,"line":66},[144,58092,1065],{"class":154},[144,58094,50648],{"class":51313},[144,58096,51329],{"class":1993},[144,58098,200],{"class":154},[144,58100,51334],{"class":259},[144,58102,51320],{"class":154},[144,58104,58105],{"class":146,"line":1210},[144,58106,2430],{"emptyLinePlaceholder":72},[144,58108,58109,58111,58113],{"class":146,"line":1225},[144,58110,1065],{"class":154},[144,58112,51347],{"class":51313},[144,58114,51320],{"class":154},[144,58116,58117,58119,58121,58123,58125,58127],{"class":146,"line":1231},[144,58118,52157],{"class":154},[144,58120,51357],{"class":51313},[144,58122,51360],{"class":1993},[144,58124,200],{"class":154},[144,58126,51365],{"class":259},[144,58128,51320],{"class":154},[144,58130,58131,58133,58135,58137,58139,58141,58143,58145,58147],{"class":146,"line":1245},[144,58132,52157],{"class":154},[144,58134,51357],{"class":51313},[144,58136,14951],{"class":1993},[144,58138,200],{"class":154},[144,58140,51404],{"class":259},[144,58142,51384],{"class":1993},[144,58144,200],{"class":154},[144,58146,51411],{"class":259},[144,58148,51320],{"class":154},[144,58150,58151,58153,58155,58157,58159],{"class":146,"line":1251},[144,58152,52157],{"class":154},[144,58154,51420],{"class":51313},[144,58156,51423],{"class":154},[144,58158,51420],{"class":51313},[144,58160,51320],{"class":154},[144,58162,58163,58165,58167],{"class":146,"line":1342},[144,58164,51798],{"class":154},[144,58166,51347],{"class":51313},[144,58168,51320],{"class":154},[144,58170,58171],{"class":146,"line":1348},[144,58172,2430],{"emptyLinePlaceholder":72},[144,58174,58175,58177,58179],{"class":146,"line":1360},[144,58176,1065],{"class":154},[144,58178,51813],{"class":51313},[144,58180,51320],{"class":154},[144,58182,58183,58185,58187,58189,58191],{"class":146,"line":1642},[144,58184,52157],{"class":154},[144,58186,53900],{"class":51313},[144,58188,53906],{"class":154},[144,58190,53900],{"class":51313},[144,58192,51320],{"class":154},[144,58194,58195,58197,58199],{"class":146,"line":1647},[144,58196,52157],{"class":154},[144,58198,51826],{"class":51313},[144,58200,51320],{"class":154},[144,58202,58203,58205,58207,58209,58211,58213,58215,58218],{"class":146,"line":1653},[144,58204,11252],{"class":150},[144,58206,54404],{"class":203},[144,58208,13595],{"class":150},[144,58210,54409],{"class":154},[144,58212,54412],{"class":1993},[144,58214,155],{"class":154},[144,58216,58217],{"class":259},"'button'",[144,58219,161],{"class":154},[144,58221,58222,58225,58227,58229,58231,58233,58235],{"class":146,"line":1658},[144,58223,58224],{"class":154},"    btn.",[144,58226,57826],{"class":1993},[144,58228,155],{"class":154},[144,58230,57831],{"class":259},[144,58232,12466],{"class":154},[144,58234,54462],{"class":150},[144,58236,54465],{"class":154},[144,58238,58239,58242,58244,58246,58249,58251],{"class":146,"line":1672},[144,58240,58241],{"class":150},"      const",[144,58243,2270],{"class":203},[144,58245,13595],{"class":150},[144,58247,58248],{"class":154}," Math.",[144,58250,57873],{"class":1993},[144,58252,2006],{"class":154},[144,58254,58255,58258,58261],{"class":146,"line":1677},[144,58256,58257],{"class":154},"      console.",[144,58259,58260],{"class":1993},"log",[144,58262,168],{"class":154},[144,58264,58265],{"class":146,"line":1683},[144,58266,33474],{"class":154},[144,58268,58269,58271,58273],{"class":146,"line":1704},[144,58270,52430],{"class":154},[144,58272,51826],{"class":51313},[144,58274,51320],{"class":154},[144,58276,58277,58279,58281],{"class":146,"line":1709},[144,58278,51798],{"class":154},[144,58280,51813],{"class":51313},[144,58282,51320],{"class":154},[144,58284,58285],{"class":146,"line":1723},[144,58286,2430],{"emptyLinePlaceholder":72},[144,58288,58289,58291,58293],{"class":146,"line":1728},[144,58290,51798],{"class":154},[144,58292,50648],{"class":51313},[144,58294,51320],{"class":154},[14,58296,58297],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,58299,58300],{},"常量不可以重新赋值",[14,58302,58303],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[135,58305,58307],{"className":50646,"code":58306,"language":50648,"meta":30,"style":30},"\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",[141,58308,58309,58319,58333,58337,58345,58359,58379,58391,58399,58403,58411,58423,58431,58442,58460,58476,58490,58498,58502,58510,58518,58522],{"__ignoreMap":30},[144,58310,58311,58313,58315,58317],{"class":146,"line":147},[144,58312,51310],{"class":154},[144,58314,51314],{"class":51313},[144,58316,51317],{"class":1993},[144,58318,51320],{"class":154},[144,58320,58321,58323,58325,58327,58329,58331],{"class":146,"line":66},[144,58322,1065],{"class":154},[144,58324,50648],{"class":51313},[144,58326,51329],{"class":1993},[144,58328,200],{"class":154},[144,58330,51334],{"class":259},[144,58332,51320],{"class":154},[144,58334,58335],{"class":146,"line":1210},[144,58336,2430],{"emptyLinePlaceholder":72},[144,58338,58339,58341,58343],{"class":146,"line":1225},[144,58340,1065],{"class":154},[144,58342,51347],{"class":51313},[144,58344,51320],{"class":154},[144,58346,58347,58349,58351,58353,58355,58357],{"class":146,"line":1231},[144,58348,52157],{"class":154},[144,58350,51357],{"class":51313},[144,58352,51360],{"class":1993},[144,58354,200],{"class":154},[144,58356,51365],{"class":259},[144,58358,51320],{"class":154},[144,58360,58361,58363,58365,58367,58369,58371,58373,58375,58377],{"class":146,"line":1245},[144,58362,52157],{"class":154},[144,58364,51357],{"class":51313},[144,58366,14951],{"class":1993},[144,58368,200],{"class":154},[144,58370,51404],{"class":259},[144,58372,51384],{"class":1993},[144,58374,200],{"class":154},[144,58376,51411],{"class":259},[144,58378,51320],{"class":154},[144,58380,58381,58383,58385,58387,58389],{"class":146,"line":1251},[144,58382,52157],{"class":154},[144,58384,51420],{"class":51313},[144,58386,51423],{"class":154},[144,58388,51420],{"class":51313},[144,58390,51320],{"class":154},[144,58392,58393,58395,58397],{"class":146,"line":1342},[144,58394,51798],{"class":154},[144,58396,51347],{"class":51313},[144,58398,51320],{"class":154},[144,58400,58401],{"class":146,"line":1348},[144,58402,2430],{"emptyLinePlaceholder":72},[144,58404,58405,58407,58409],{"class":146,"line":1360},[144,58406,1065],{"class":154},[144,58408,51813],{"class":51313},[144,58410,51320],{"class":154},[144,58412,58413,58415,58417,58419,58421],{"class":146,"line":1642},[144,58414,52157],{"class":154},[144,58416,53900],{"class":51313},[144,58418,53906],{"class":154},[144,58420,53900],{"class":51313},[144,58422,51320],{"class":154},[144,58424,58425,58427,58429],{"class":146,"line":1647},[144,58426,52157],{"class":154},[144,58428,51826],{"class":51313},[144,58430,51320],{"class":154},[144,58432,58433,58435,58437,58439],{"class":146,"line":1653},[144,58434,11252],{"class":150},[144,58436,2270],{"class":203},[144,58438,13595],{"class":150},[144,58440,58441],{"class":203}," 10\n",[144,58443,58444,58446,58448,58450,58452,58454,58456,58458],{"class":146,"line":1658},[144,58445,11252],{"class":150},[144,58447,54404],{"class":203},[144,58449,13595],{"class":150},[144,58451,54409],{"class":154},[144,58453,54412],{"class":1993},[144,58455,155],{"class":154},[144,58457,58217],{"class":259},[144,58459,161],{"class":154},[144,58461,58462,58464,58466,58468,58470,58472,58474],{"class":146,"line":1672},[144,58463,58224],{"class":154},[144,58465,57826],{"class":1993},[144,58467,155],{"class":154},[144,58469,57831],{"class":259},[144,58471,12466],{"class":154},[144,58473,54462],{"class":150},[144,58475,54465],{"class":154},[144,58477,58478,58480,58482,58484,58486,58488],{"class":146,"line":1677},[144,58479,58241],{"class":150},[144,58481,2270],{"class":203},[144,58483,13595],{"class":150},[144,58485,58248],{"class":154},[144,58487,57873],{"class":1993},[144,58489,2006],{"class":154},[144,58491,58492,58494,58496],{"class":146,"line":1683},[144,58493,58257],{"class":154},[144,58495,58260],{"class":1993},[144,58497,168],{"class":154},[144,58499,58500],{"class":146,"line":1704},[144,58501,33474],{"class":154},[144,58503,58504,58506,58508],{"class":146,"line":1709},[144,58505,52430],{"class":154},[144,58507,51826],{"class":51313},[144,58509,51320],{"class":154},[144,58511,58512,58514,58516],{"class":146,"line":1723},[144,58513,51798],{"class":154},[144,58515,51813],{"class":51313},[144,58517,51320],{"class":154},[144,58519,58520],{"class":146,"line":1728},[144,58521,2430],{"emptyLinePlaceholder":72},[144,58523,58524,58526,58528],{"class":146,"line":1757},[144,58525,51798],{"class":154},[144,58527,50648],{"class":51313},[144,58529,51320],{"class":154},[14,58531,58532],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[135,58534,58536],{"className":50646,"code":58535,"language":50648,"meta":30,"style":30},"\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",[141,58537,58538,58548,58562,58566,58574,58588,58608,58620,58628,58632,58640,58652,58660,58670,58688,58704,58717,58725,58729,58737,58745,58749],{"__ignoreMap":30},[144,58539,58540,58542,58544,58546],{"class":146,"line":147},[144,58541,51310],{"class":154},[144,58543,51314],{"class":51313},[144,58545,51317],{"class":1993},[144,58547,51320],{"class":154},[144,58549,58550,58552,58554,58556,58558,58560],{"class":146,"line":66},[144,58551,1065],{"class":154},[144,58553,50648],{"class":51313},[144,58555,51329],{"class":1993},[144,58557,200],{"class":154},[144,58559,51334],{"class":259},[144,58561,51320],{"class":154},[144,58563,58564],{"class":146,"line":1210},[144,58565,2430],{"emptyLinePlaceholder":72},[144,58567,58568,58570,58572],{"class":146,"line":1225},[144,58569,1065],{"class":154},[144,58571,51347],{"class":51313},[144,58573,51320],{"class":154},[144,58575,58576,58578,58580,58582,58584,58586],{"class":146,"line":1231},[144,58577,52157],{"class":154},[144,58579,51357],{"class":51313},[144,58581,51360],{"class":1993},[144,58583,200],{"class":154},[144,58585,51365],{"class":259},[144,58587,51320],{"class":154},[144,58589,58590,58592,58594,58596,58598,58600,58602,58604,58606],{"class":146,"line":1245},[144,58591,52157],{"class":154},[144,58593,51357],{"class":51313},[144,58595,14951],{"class":1993},[144,58597,200],{"class":154},[144,58599,51404],{"class":259},[144,58601,51384],{"class":1993},[144,58603,200],{"class":154},[144,58605,51411],{"class":259},[144,58607,51320],{"class":154},[144,58609,58610,58612,58614,58616,58618],{"class":146,"line":1251},[144,58611,52157],{"class":154},[144,58613,51420],{"class":51313},[144,58615,51423],{"class":154},[144,58617,51420],{"class":51313},[144,58619,51320],{"class":154},[144,58621,58622,58624,58626],{"class":146,"line":1342},[144,58623,51798],{"class":154},[144,58625,51347],{"class":51313},[144,58627,51320],{"class":154},[144,58629,58630],{"class":146,"line":1348},[144,58631,2430],{"emptyLinePlaceholder":72},[144,58633,58634,58636,58638],{"class":146,"line":1360},[144,58635,1065],{"class":154},[144,58637,51813],{"class":51313},[144,58639,51320],{"class":154},[144,58641,58642,58644,58646,58648,58650],{"class":146,"line":1642},[144,58643,52157],{"class":154},[144,58645,53900],{"class":51313},[144,58647,53906],{"class":154},[144,58649,53900],{"class":51313},[144,58651,51320],{"class":154},[144,58653,58654,58656,58658],{"class":146,"line":1647},[144,58655,52157],{"class":154},[144,58657,51826],{"class":51313},[144,58659,51320],{"class":154},[144,58661,58662,58664,58666,58668],{"class":146,"line":1653},[144,58663,11252],{"class":150},[144,58665,2270],{"class":203},[144,58667,13595],{"class":150},[144,58669,58441],{"class":203},[144,58671,58672,58674,58676,58678,58680,58682,58684,58686],{"class":146,"line":1658},[144,58673,11252],{"class":150},[144,58675,54404],{"class":203},[144,58677,13595],{"class":150},[144,58679,54409],{"class":154},[144,58681,54412],{"class":1993},[144,58683,155],{"class":154},[144,58685,58217],{"class":259},[144,58687,161],{"class":154},[144,58689,58690,58692,58694,58696,58698,58700,58702],{"class":146,"line":1672},[144,58691,58224],{"class":154},[144,58693,57826],{"class":1993},[144,58695,155],{"class":154},[144,58697,57831],{"class":259},[144,58699,12466],{"class":154},[144,58701,54462],{"class":150},[144,58703,54465],{"class":154},[144,58705,58706,58709,58711,58713,58715],{"class":146,"line":1677},[144,58707,58708],{"class":154},"      num ",[144,58710,200],{"class":150},[144,58712,58248],{"class":154},[144,58714,57873],{"class":1993},[144,58716,2006],{"class":154},[144,58718,58719,58721,58723],{"class":146,"line":1683},[144,58720,58257],{"class":154},[144,58722,58260],{"class":1993},[144,58724,168],{"class":154},[144,58726,58727],{"class":146,"line":1704},[144,58728,33474],{"class":154},[144,58730,58731,58733,58735],{"class":146,"line":1709},[144,58732,52430],{"class":154},[144,58734,51826],{"class":51313},[144,58736,51320],{"class":154},[144,58738,58739,58741,58743],{"class":146,"line":1723},[144,58740,51798],{"class":154},[144,58742,51813],{"class":51313},[144,58744,51320],{"class":154},[144,58746,58747],{"class":146,"line":1728},[144,58748,2430],{"emptyLinePlaceholder":72},[144,58750,58751,58753,58755],{"class":146,"line":1757},[144,58752,51798],{"class":154},[144,58754,50648],{"class":51313},[144,58756,51320],{"class":154},[14,58758,58759],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[115,58761,58763],{"id":58762},"_324-事件监听版本","3.2.4 事件监听版本",[14,58765,58766],{},[28,58767],{"alt":30,"src":58768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,58770,58771],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,58773,58774],{},"这种方式会覆盖前边的事件监听:",[135,58776,58778],{"className":50646,"code":58777,"language":50648,"meta":30,"style":30},"\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",[141,58779,58780,58790,58804,58808,58816,58830,58850,58862,58870,58874,58882,58894,58902,58920,58934,58945,58949,58961,58971,58975,58983,58991,58995],{"__ignoreMap":30},[144,58781,58782,58784,58786,58788],{"class":146,"line":147},[144,58783,51310],{"class":154},[144,58785,51314],{"class":51313},[144,58787,51317],{"class":1993},[144,58789,51320],{"class":154},[144,58791,58792,58794,58796,58798,58800,58802],{"class":146,"line":66},[144,58793,1065],{"class":154},[144,58795,50648],{"class":51313},[144,58797,51329],{"class":1993},[144,58799,200],{"class":154},[144,58801,51334],{"class":259},[144,58803,51320],{"class":154},[144,58805,58806],{"class":146,"line":1210},[144,58807,2430],{"emptyLinePlaceholder":72},[144,58809,58810,58812,58814],{"class":146,"line":1225},[144,58811,1065],{"class":154},[144,58813,51347],{"class":51313},[144,58815,51320],{"class":154},[144,58817,58818,58820,58822,58824,58826,58828],{"class":146,"line":1231},[144,58819,52157],{"class":154},[144,58821,51357],{"class":51313},[144,58823,51360],{"class":1993},[144,58825,200],{"class":154},[144,58827,51365],{"class":259},[144,58829,51320],{"class":154},[144,58831,58832,58834,58836,58838,58840,58842,58844,58846,58848],{"class":146,"line":1245},[144,58833,52157],{"class":154},[144,58835,51357],{"class":51313},[144,58837,14951],{"class":1993},[144,58839,200],{"class":154},[144,58841,51404],{"class":259},[144,58843,51384],{"class":1993},[144,58845,200],{"class":154},[144,58847,51411],{"class":259},[144,58849,51320],{"class":154},[144,58851,58852,58854,58856,58858,58860],{"class":146,"line":1251},[144,58853,52157],{"class":154},[144,58855,51420],{"class":51313},[144,58857,51423],{"class":154},[144,58859,51420],{"class":51313},[144,58861,51320],{"class":154},[144,58863,58864,58866,58868],{"class":146,"line":1342},[144,58865,51798],{"class":154},[144,58867,51347],{"class":51313},[144,58869,51320],{"class":154},[144,58871,58872],{"class":146,"line":1348},[144,58873,2430],{"emptyLinePlaceholder":72},[144,58875,58876,58878,58880],{"class":146,"line":1360},[144,58877,1065],{"class":154},[144,58879,51813],{"class":51313},[144,58881,51320],{"class":154},[144,58883,58884,58886,58888,58890,58892],{"class":146,"line":1642},[144,58885,52157],{"class":154},[144,58887,53900],{"class":51313},[144,58889,53906],{"class":154},[144,58891,53900],{"class":51313},[144,58893,51320],{"class":154},[144,58895,58896,58898,58900],{"class":146,"line":1647},[144,58897,52157],{"class":154},[144,58899,51826],{"class":51313},[144,58901,51320],{"class":154},[144,58903,58904,58906,58908,58910,58912,58914,58916,58918],{"class":146,"line":1653},[144,58905,11252],{"class":150},[144,58907,54404],{"class":203},[144,58909,13595],{"class":150},[144,58911,54409],{"class":154},[144,58913,54412],{"class":1993},[144,58915,155],{"class":154},[144,58917,58217],{"class":259},[144,58919,161],{"class":154},[144,58921,58922,58924,58927,58929,58932],{"class":146,"line":1658},[144,58923,58224],{"class":154},[144,58925,58926],{"class":1993},"onclick",[144,58928,13595],{"class":150},[144,58930,58931],{"class":150}," function",[144,58933,54465],{"class":154},[144,58935,58936,58939,58941,58943],{"class":146,"line":1672},[144,58937,58938],{"class":1993},"      alert",[144,58940,155],{"class":154},[144,58942,627],{"class":203},[144,58944,161],{"class":154},[144,58946,58947],{"class":146,"line":1677},[144,58948,2217],{"class":154},[144,58950,58951,58953,58955,58957,58959],{"class":146,"line":1683},[144,58952,58224],{"class":154},[144,58954,58926],{"class":1993},[144,58956,13595],{"class":150},[144,58958,58931],{"class":150},[144,58960,54465],{"class":154},[144,58962,58963,58965,58967,58969],{"class":146,"line":1704},[144,58964,58938],{"class":1993},[144,58966,155],{"class":154},[144,58968,905],{"class":203},[144,58970,161],{"class":154},[144,58972,58973],{"class":146,"line":1709},[144,58974,2217],{"class":154},[144,58976,58977,58979,58981],{"class":146,"line":1723},[144,58978,52430],{"class":154},[144,58980,51826],{"class":51313},[144,58982,51320],{"class":154},[144,58984,58985,58987,58989],{"class":146,"line":1728},[144,58986,51798],{"class":154},[144,58988,51813],{"class":51313},[144,58990,51320],{"class":154},[144,58992,58993],{"class":146,"line":1757},[144,58994,2430],{"emptyLinePlaceholder":72},[144,58996,58997,58999,59001],{"class":146,"line":1762},[144,58998,51798],{"class":154},[144,59000,50648],{"class":51313},[144,59002,51320],{"class":154},[14,59004,59005],{},"只要点击就输出结果为22,前边11被覆盖了",[135,59007,59009],{"className":50646,"code":59008,"language":50648,"meta":30,"style":30},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[141,59010,59011,59016,59021,59025,59030,59035],{"__ignoreMap":30},[144,59012,59013],{"class":146,"line":147},[144,59014,59015],{"class":154},"  btn.addEventListener('click', function () {\n",[144,59017,59018],{"class":146,"line":66},[144,59019,59020],{"class":154},"      alert(11)\n",[144,59022,59023],{"class":146,"line":1210},[144,59024,33474],{"class":154},[144,59026,59027],{"class":146,"line":1225},[144,59028,59029],{"class":154},"    btn.addEventListener('click', function () {\n",[144,59031,59032],{"class":146,"line":1231},[144,59033,59034],{"class":154},"      alert(22)\n",[144,59036,59037],{"class":146,"line":1245},[144,59038,33474],{"class":154},[14,59040,59041],{},"点击第一次输出11,第二次点击为22",[115,59043,59045],{"id":59044},"_325-事件类型","3.2.5 事件类型",[14,59047,59048],{},[28,59049],{"alt":30,"src":59050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22029,59052,59054],{"id":59053},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59056,59057],{},"补充知识:",[14,59059,59060],{},"轮播图自动播放模块,可以使用",[14,59062,59063],{},"let timerId = setInterval(function () {",[14,59065,59066],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59068,59069],{},"用js方法模拟进行点击事件,click必须加()",[14,59071,59072],{},"next.click()",[14,59074,59075],{},"}, 1000)",[14,59077,59078],{},[28,59079],{"alt":30,"src":59080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[135,59082,59084],{"className":53080,"code":59083,"language":53082,"meta":30,"style":30},"\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",[141,59085,59086,59090,59100,59114,59118,59126,59141,59161,59181,59194,59202,59207,59212,59216,59220,59225,59230,59235,59240,59244,59248,59253,59258,59263,59267,59271,59276,59280,59285,59290,59294,59298,59303,59308,59313,59318,59323,59327,59331,59336,59341,59346,59351,59356,59360,59364,59369,59374,59379,59384,59389,59394,59399,59404,59409,59414,59418,59422,59427,59432,59436,59440,59445,59450,59454,59459,59464,59468,59472,59477,59481,59486,59491,59495,59500,59504,59508,59513,59518,59523,59528,59533,59538,59543,59547,59551,59555,59560,59565,59570,59575,59579,59587,59595,59599,59607,59622,59636,59657,59665,59679,59692,59707,59726,59738,59750,59762,59774,59786,59798,59810,59818,59833,59857,59881,59889,59897,59905,59913,59918,59923,59928,59933,59938,59943,59948,59953,59958,59963,59967,59972,59977,59982,59987,59992,59997,60002,60007,60012,60016,60021,60026,60031,60036,60041,60046,60051,60056,60061,60066,60071,60076,60080,60084,60089,60094,60099,60103,60108,60113,60118,60123,60128,60132,60137,60141,60145,60149,60153,60157,60161,60166,60171,60176,60181,60186,60191,60196,60201,60206,60210,60214,60219,60224,60229,60234,60239,60243,60248,60253,60258,60263,60268,60273,60277,60281,60286,60290,60295,60299,60304,60309,60314,60319,60324,60329,60333,60341,60349,60353],{"__ignoreMap":30},[144,59087,59088],{"class":146,"line":147},[144,59089,2430],{"emptyLinePlaceholder":72},[144,59091,59092,59094,59096,59098],{"class":146,"line":66},[144,59093,51310],{"class":154},[144,59095,51314],{"class":150},[144,59097,51317],{"class":203},[144,59099,51320],{"class":154},[144,59101,59102,59104,59106,59108,59110,59112],{"class":146,"line":1210},[144,59103,1065],{"class":154},[144,59105,50648],{"class":51313},[144,59107,51329],{"class":1993},[144,59109,200],{"class":154},[144,59111,51334],{"class":259},[144,59113,51320],{"class":154},[144,59115,59116],{"class":146,"line":1225},[144,59117,2430],{"emptyLinePlaceholder":72},[144,59119,59120,59122,59124],{"class":146,"line":1231},[144,59121,1065],{"class":154},[144,59123,51347],{"class":51313},[144,59125,51320],{"class":154},[144,59127,59128,59130,59132,59134,59136,59138],{"class":146,"line":1245},[144,59129,52157],{"class":154},[144,59131,51357],{"class":51313},[144,59133,51360],{"class":1993},[144,59135,200],{"class":154},[144,59137,51365],{"class":259},[144,59139,59140],{"class":154}," \u002F>\n",[144,59142,59143,59145,59147,59149,59151,59153,59155,59157,59159],{"class":146,"line":1251},[144,59144,52157],{"class":154},[144,59146,51357],{"class":51313},[144,59148,51376],{"class":1993},[144,59150,200],{"class":154},[144,59152,51381],{"class":259},[144,59154,51384],{"class":1993},[144,59156,200],{"class":154},[144,59158,51389],{"class":259},[144,59160,59140],{"class":154},[144,59162,59163,59165,59167,59169,59171,59173,59175,59177,59179],{"class":146,"line":1342},[144,59164,52157],{"class":154},[144,59166,51357],{"class":51313},[144,59168,14951],{"class":1993},[144,59170,200],{"class":154},[144,59172,51404],{"class":259},[144,59174,51384],{"class":1993},[144,59176,200],{"class":154},[144,59178,51411],{"class":259},[144,59180,59140],{"class":154},[144,59182,59183,59185,59187,59190,59192],{"class":146,"line":1348},[144,59184,52157],{"class":154},[144,59186,51420],{"class":51313},[144,59188,59189],{"class":154},">轮播图点击切换\u003C\u002F",[144,59191,51420],{"class":51313},[144,59193,51320],{"class":154},[144,59195,59196,59198,59200],{"class":146,"line":1360},[144,59197,52157],{"class":154},[144,59199,5157],{"class":51313},[144,59201,51320],{"class":154},[144,59203,59204],{"class":146,"line":1642},[144,59205,59206],{"class":154},"    * {\n",[144,59208,59209],{"class":146,"line":1647},[144,59210,59211],{"class":154},"      box-sizing: border-box;\n",[144,59213,59214],{"class":146,"line":1653},[144,59215,2217],{"class":154},[144,59217,59218],{"class":146,"line":1658},[144,59219,2430],{"emptyLinePlaceholder":72},[144,59221,59222],{"class":146,"line":1672},[144,59223,59224],{"class":154},"    .slider {\n",[144,59226,59227],{"class":146,"line":1677},[144,59228,59229],{"class":154},"      width: 560px;\n",[144,59231,59232],{"class":146,"line":1683},[144,59233,59234],{"class":154},"      height: 400px;\n",[144,59236,59237],{"class":146,"line":1704},[144,59238,59239],{"class":154},"      overflow: hidden;\n",[144,59241,59242],{"class":146,"line":1709},[144,59243,2217],{"class":154},[144,59245,59246],{"class":146,"line":1723},[144,59247,2430],{"emptyLinePlaceholder":72},[144,59249,59250],{"class":146,"line":1728},[144,59251,59252],{"class":154},"    .slider-wrapper {\n",[144,59254,59255],{"class":146,"line":1757},[144,59256,59257],{"class":154},"      width: 100%;\n",[144,59259,59260],{"class":146,"line":1762},[144,59261,59262],{"class":154},"      height: 320px;\n",[144,59264,59265],{"class":146,"line":1779},[144,59266,2217],{"class":154},[144,59268,59269],{"class":146,"line":1784},[144,59270,2430],{"emptyLinePlaceholder":72},[144,59272,59273],{"class":146,"line":1789},[144,59274,59275],{"class":154},"    .slider-wrapper img {\n",[144,59277,59278],{"class":146,"line":1794},[144,59279,59257],{"class":154},[144,59281,59282],{"class":146,"line":1808},[144,59283,59284],{"class":154},"      height: 100%;\n",[144,59286,59287],{"class":146,"line":1813},[144,59288,59289],{"class":154},"      display: block;\n",[144,59291,59292],{"class":146,"line":2607},[144,59293,2217],{"class":154},[144,59295,59296],{"class":146,"line":2621},[144,59297,2430],{"emptyLinePlaceholder":72},[144,59299,59300],{"class":146,"line":2629},[144,59301,59302],{"class":154},"    .slider-footer {\n",[144,59304,59305],{"class":146,"line":2634},[144,59306,59307],{"class":154},"      height: 80px;\n",[144,59309,59310],{"class":146,"line":2640},[144,59311,59312],{"class":154},"      background-color: rgb(100, 67, 68);\n",[144,59314,59315],{"class":146,"line":2646},[144,59316,59317],{"class":154},"      padding: 12px 12px 0 12px;\n",[144,59319,59320],{"class":146,"line":2651},[144,59321,59322],{"class":154},"      position: relative;\n",[144,59324,59325],{"class":146,"line":7979},[144,59326,2217],{"class":154},[144,59328,59329],{"class":146,"line":8003},[144,59330,2430],{"emptyLinePlaceholder":72},[144,59332,59333],{"class":146,"line":8008},[144,59334,59335],{"class":154},"    .slider-footer .toggle {\n",[144,59337,59338],{"class":146,"line":8014},[144,59339,59340],{"class":154},"      position: absolute;\n",[144,59342,59343],{"class":146,"line":8041},[144,59344,59345],{"class":154},"      right: 0;\n",[144,59347,59348],{"class":146,"line":8046},[144,59349,59350],{"class":154},"      top: 12px;\n",[144,59352,59353],{"class":146,"line":8052},[144,59354,59355],{"class":154},"      display: flex;\n",[144,59357,59358],{"class":146,"line":8064},[144,59359,2217],{"class":154},[144,59361,59362],{"class":146,"line":8076},[144,59363,2430],{"emptyLinePlaceholder":72},[144,59365,59366],{"class":146,"line":8088},[144,59367,59368],{"class":154},"    .slider-footer .toggle button {\n",[144,59370,59371],{"class":146,"line":9747},[144,59372,59373],{"class":154},"      margin-right: 12px;\n",[144,59375,59376],{"class":146,"line":9772},[144,59377,59378],{"class":154},"      width: 28px;\n",[144,59380,59381],{"class":146,"line":9795},[144,59382,59383],{"class":154},"      height: 28px;\n",[144,59385,59386],{"class":146,"line":9819},[144,59387,59388],{"class":154},"      appearance: none;\n",[144,59390,59391],{"class":146,"line":9824},[144,59392,59393],{"class":154},"      border: none;\n",[144,59395,59396],{"class":146,"line":9829},[144,59397,59398],{"class":154},"      background: rgba(255, 255, 255, 0.1);\n",[144,59400,59401],{"class":146,"line":9834},[144,59402,59403],{"class":154},"      color: #fff;\n",[144,59405,59406],{"class":146,"line":9843},[144,59407,59408],{"class":154},"      border-radius: 4px;\n",[144,59410,59411],{"class":146,"line":9848},[144,59412,59413],{"class":154},"      cursor: pointer;\n",[144,59415,59416],{"class":146,"line":9854},[144,59417,2217],{"class":154},[144,59419,59420],{"class":146,"line":9875},[144,59421,2430],{"emptyLinePlaceholder":72},[144,59423,59424],{"class":146,"line":9881},[144,59425,59426],{"class":154},"    .slider-footer .toggle button:hover {\n",[144,59428,59429],{"class":146,"line":9895},[144,59430,59431],{"class":154},"      background: rgba(255, 255, 255, 0.2);\n",[144,59433,59434],{"class":146,"line":9901},[144,59435,2217],{"class":154},[144,59437,59438],{"class":146,"line":9928},[144,59439,2430],{"emptyLinePlaceholder":72},[144,59441,59442],{"class":146,"line":9937},[144,59443,59444],{"class":154},"    .slider-footer p {\n",[144,59446,59447],{"class":146,"line":9943},[144,59448,59449],{"class":154},"      margin: 0;\n",[144,59451,59452],{"class":146,"line":9951},[144,59453,59403],{"class":154},[144,59455,59456],{"class":146,"line":9956},[144,59457,59458],{"class":154},"      font-size: 18px;\n",[144,59460,59461],{"class":146,"line":16635},[144,59462,59463],{"class":154},"      margin-bottom: 10px;\n",[144,59465,59466],{"class":146,"line":16641},[144,59467,2217],{"class":154},[144,59469,59470],{"class":146,"line":16664},[144,59471,2430],{"emptyLinePlaceholder":72},[144,59473,59474],{"class":146,"line":16670},[144,59475,59476],{"class":154},"    .slider-indicator {\n",[144,59478,59479],{"class":146,"line":16693},[144,59480,59449],{"class":154},[144,59482,59483],{"class":146,"line":16707},[144,59484,59485],{"class":154},"      padding: 0;\n",[144,59487,59488],{"class":146,"line":16727},[144,59489,59490],{"class":154},"      list-style: none;\n",[144,59492,59493],{"class":146,"line":16733},[144,59494,59355],{"class":154},[144,59496,59497],{"class":146,"line":16744},[144,59498,59499],{"class":154},"      align-items: center;\n",[144,59501,59502],{"class":146,"line":16767},[144,59503,2217],{"class":154},[144,59505,59506],{"class":146,"line":16789},[144,59507,2430],{"emptyLinePlaceholder":72},[144,59509,59510],{"class":146,"line":16794},[144,59511,59512],{"class":154},"    .slider-indicator li {\n",[144,59514,59515],{"class":146,"line":16800},[144,59516,59517],{"class":154},"      width: 8px;\n",[144,59519,59520],{"class":146,"line":16814},[144,59521,59522],{"class":154},"      height: 8px;\n",[144,59524,59525],{"class":146,"line":16827},[144,59526,59527],{"class":154},"      margin: 4px;\n",[144,59529,59530],{"class":146,"line":16832},[144,59531,59532],{"class":154},"      border-radius: 50%;\n",[144,59534,59535],{"class":146,"line":16846},[144,59536,59537],{"class":154},"      background: #fff;\n",[144,59539,59540],{"class":146,"line":16851},[144,59541,59542],{"class":154},"      opacity: 0.4;\n",[144,59544,59545],{"class":146,"line":16857},[144,59546,59413],{"class":154},[144,59548,59549],{"class":146,"line":16862},[144,59550,2217],{"class":154},[144,59552,59553],{"class":146,"line":16876},[144,59554,2430],{"emptyLinePlaceholder":72},[144,59556,59557],{"class":146,"line":16881},[144,59558,59559],{"class":154},"    .slider-indicator li.active {\n",[144,59561,59562],{"class":146,"line":16886},[144,59563,59564],{"class":154},"      width: 12px;\n",[144,59566,59567],{"class":146,"line":16900},[144,59568,59569],{"class":154},"      height: 12px;\n",[144,59571,59572],{"class":146,"line":16912},[144,59573,59574],{"class":154},"      opacity: 1;\n",[144,59576,59577],{"class":146,"line":16917},[144,59578,2217],{"class":154},[144,59580,59581,59583,59585],{"class":146,"line":16930},[144,59582,52430],{"class":154},[144,59584,5157],{"class":51313},[144,59586,51320],{"class":154},[144,59588,59589,59591,59593],{"class":146,"line":16935},[144,59590,51798],{"class":154},[144,59592,51347],{"class":51313},[144,59594,51320],{"class":154},[144,59596,59597],{"class":146,"line":16940},[144,59598,2430],{"emptyLinePlaceholder":72},[144,59600,59601,59603,59605],{"class":146,"line":16945},[144,59602,1065],{"class":154},[144,59604,51813],{"class":51313},[144,59606,51320],{"class":154},[144,59608,59609,59611,59613,59615,59617,59620],{"class":146,"line":16958},[144,59610,52157],{"class":154},[144,59612,51624],{"class":51313},[144,59614,53499],{"class":1993},[144,59616,200],{"class":154},[144,59618,59619],{"class":259},"\"slider\"",[144,59621,51320],{"class":154},[144,59623,59624,59626,59628,59630,59632,59634],{"class":146,"line":16963},[144,59625,51354],{"class":154},[144,59627,51624],{"class":51313},[144,59629,53499],{"class":1993},[144,59631,200],{"class":154},[144,59633,55240],{"class":259},[144,59635,51320],{"class":154},[144,59637,59638,59640,59642,59644,59646,59649,59651,59653,59655],{"class":146,"line":32646},[144,59639,55247],{"class":154},[144,59641,28],{"class":51313},[144,59643,55252],{"class":1993},[144,59645,200],{"class":154},[144,59647,59648],{"class":259},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[144,59650,55260],{"class":1993},[144,59652,200],{"class":154},[144,59654,7683],{"class":259},[144,59656,59140],{"class":154},[144,59658,59659,59661,59663],{"class":146,"line":32652},[144,59660,51789],{"class":154},[144,59662,51624],{"class":51313},[144,59664,51320],{"class":154},[144,59666,59667,59669,59671,59673,59675,59677],{"class":146,"line":32658},[144,59668,51354],{"class":154},[144,59670,51624],{"class":51313},[144,59672,53499],{"class":1993},[144,59674,200],{"class":154},[144,59676,55287],{"class":259},[144,59678,51320],{"class":154},[144,59680,59681,59683,59685,59688,59690],{"class":146,"line":32664},[144,59682,55247],{"class":154},[144,59684,14],{"class":51313},[144,59686,59687],{"class":154},">对人类来说会不会太超前了？\u003C\u002F",[144,59689,14],{"class":51313},[144,59691,51320],{"class":154},[144,59693,59694,59696,59698,59700,59702,59705],{"class":146,"line":32670},[144,59695,55247],{"class":154},[144,59697,1162],{"class":51313},[144,59699,53499],{"class":1993},[144,59701,200],{"class":154},[144,59703,59704],{"class":259},"\"slider-indicator\"",[144,59706,51320],{"class":154},[144,59708,59709,59711,59713,59715,59717,59720,59722,59724],{"class":146,"line":32681},[144,59710,55315],{"class":154},[144,59712,101],{"class":51313},[144,59714,53499],{"class":1993},[144,59716,200],{"class":154},[144,59718,59719],{"class":259},"\"active\"",[144,59721,55327],{"class":154},[144,59723,101],{"class":51313},[144,59725,51320],{"class":154},[144,59727,59728,59730,59732,59734,59736],{"class":146,"line":32687},[144,59729,55315],{"class":154},[144,59731,101],{"class":51313},[144,59733,55327],{"class":154},[144,59735,101],{"class":51313},[144,59737,51320],{"class":154},[144,59739,59740,59742,59744,59746,59748],{"class":146,"line":32707},[144,59741,55315],{"class":154},[144,59743,101],{"class":51313},[144,59745,55327],{"class":154},[144,59747,101],{"class":51313},[144,59749,51320],{"class":154},[144,59751,59752,59754,59756,59758,59760],{"class":146,"line":32713},[144,59753,55315],{"class":154},[144,59755,101],{"class":51313},[144,59757,55327],{"class":154},[144,59759,101],{"class":51313},[144,59761,51320],{"class":154},[144,59763,59764,59766,59768,59770,59772],{"class":146,"line":32724},[144,59765,55315],{"class":154},[144,59767,101],{"class":51313},[144,59769,55327],{"class":154},[144,59771,101],{"class":51313},[144,59773,51320],{"class":154},[144,59775,59776,59778,59780,59782,59784],{"class":146,"line":32730},[144,59777,55315],{"class":154},[144,59779,101],{"class":51313},[144,59781,55327],{"class":154},[144,59783,101],{"class":51313},[144,59785,51320],{"class":154},[144,59787,59788,59790,59792,59794,59796],{"class":146,"line":32736},[144,59789,55315],{"class":154},[144,59791,101],{"class":51313},[144,59793,55327],{"class":154},[144,59795,101],{"class":51313},[144,59797,51320],{"class":154},[144,59799,59800,59802,59804,59806,59808],{"class":146,"line":32742},[144,59801,55315],{"class":154},[144,59803,101],{"class":51313},[144,59805,55327],{"class":154},[144,59807,101],{"class":51313},[144,59809,51320],{"class":154},[144,59811,59812,59814,59816],{"class":146,"line":32748},[144,59813,55420],{"class":154},[144,59815,1162],{"class":51313},[144,59817,51320],{"class":154},[144,59819,59820,59822,59824,59826,59828,59831],{"class":146,"line":32754},[144,59821,55247],{"class":154},[144,59823,51624],{"class":51313},[144,59825,53499],{"class":1993},[144,59827,200],{"class":154},[144,59829,59830],{"class":259},"\"toggle\"",[144,59832,51320],{"class":154},[144,59834,59835,59837,59839,59841,59843,59846,59848,59851,59853,59855],{"class":146,"line":32760},[144,59836,55315],{"class":154},[144,59838,53900],{"class":51313},[144,59840,53499],{"class":1993},[144,59842,200],{"class":154},[144,59844,59845],{"class":259},"\"prev\"",[144,59847,1115],{"class":154},[144,59849,59850],{"class":203},"&lt;",[144,59852,51798],{"class":154},[144,59854,53900],{"class":51313},[144,59856,51320],{"class":154},[144,59858,59859,59861,59863,59865,59867,59870,59872,59875,59877,59879],{"class":146,"line":32766},[144,59860,55315],{"class":154},[144,59862,53900],{"class":51313},[144,59864,53499],{"class":1993},[144,59866,200],{"class":154},[144,59868,59869],{"class":259},"\"next\"",[144,59871,1115],{"class":154},[144,59873,59874],{"class":203},"&gt;",[144,59876,51798],{"class":154},[144,59878,53900],{"class":51313},[144,59880,51320],{"class":154},[144,59882,59883,59885,59887],{"class":146,"line":32786},[144,59884,55420],{"class":154},[144,59886,51624],{"class":51313},[144,59888,51320],{"class":154},[144,59890,59891,59893,59895],{"class":146,"line":32792},[144,59892,51789],{"class":154},[144,59894,51624],{"class":51313},[144,59896,51320],{"class":154},[144,59898,59899,59901,59903],{"class":146,"line":32808},[144,59900,52430],{"class":154},[144,59902,51624],{"class":51313},[144,59904,51320],{"class":154},[144,59906,59907,59909,59911],{"class":146,"line":32814},[144,59908,52157],{"class":154},[144,59910,51826],{"class":51313},[144,59912,51320],{"class":154},[144,59914,59915],{"class":146,"line":32828},[144,59916,59917],{"class":154},"    \u002F\u002F 1. 初始数据\n",[144,59919,59920],{"class":146,"line":32834},[144,59921,59922],{"class":154},"    const data = [\n",[144,59924,59925],{"class":146,"line":32849},[144,59926,59927],{"class":154},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[144,59929,59930],{"class":146,"line":32855},[144,59931,59932],{"class":154},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[144,59934,59935],{"class":146,"line":32864},[144,59936,59937],{"class":154},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[144,59939,59940],{"class":146,"line":32870},[144,59941,59942],{"class":154},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[144,59944,59945],{"class":146,"line":32879},[144,59946,59947],{"class":154},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[144,59949,59950],{"class":146,"line":32885},[144,59951,59952],{"class":154},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[144,59954,59955],{"class":146,"line":32891},[144,59956,59957],{"class":154},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[144,59959,59960],{"class":146,"line":32900},[144,59961,59962],{"class":154},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[144,59964,59965],{"class":146,"line":32906},[144,59966,53122],{"class":154},[144,59968,59969],{"class":146,"line":32917},[144,59970,59971],{"class":154},"    \u002F\u002F 获取元素\n",[144,59973,59974],{"class":146,"line":32923},[144,59975,59976],{"class":154},"    const img = document.querySelector('.slider-wrapper img')\n",[144,59978,59979],{"class":146,"line":32942},[144,59980,59981],{"class":154},"    const p = document.querySelector('.slider-footer p')\n",[144,59983,59984],{"class":146,"line":32948},[144,59985,59986],{"class":154},"    const footer = document.querySelector('.slider-footer')\n",[144,59988,59989],{"class":146,"line":32959},[144,59990,59991],{"class":154},"    \u002F\u002F 1. 右按钮业务\n",[144,59993,59994],{"class":146,"line":32965},[144,59995,59996],{"class":154},"    \u002F\u002F 1.1 获取右侧按钮 \n",[144,59998,59999],{"class":146,"line":32985},[144,60000,60001],{"class":154},"    const next = document.querySelector('.next')\n",[144,60003,60004],{"class":146,"line":33001},[144,60005,60006],{"class":154},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[144,60008,60009],{"class":146,"line":33007},[144,60010,60011],{"class":154},"    \u002F\u002F 1.2 注册点击事件\n",[144,60013,60014],{"class":146,"line":33021},[144,60015,2430],{"emptyLinePlaceholder":72},[144,60017,60018],{"class":146,"line":33027},[144,60019,60020],{"class":154},"    next.addEventListener('click', function () {\n",[144,60022,60023],{"class":146,"line":33033},[144,60024,60025],{"class":154},"      \u002F\u002F console.log(11)\n",[144,60027,60028],{"class":146,"line":33044},[144,60029,60030],{"class":154},"      i++\n",[144,60032,60033],{"class":146,"line":33050},[144,60034,60035],{"class":154},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[144,60037,60038],{"class":146,"line":33056},[144,60039,60040],{"class":154},"      \u002F\u002F if (i >= 8) {\n",[144,60042,60043],{"class":146,"line":33066},[144,60044,60045],{"class":154},"      \u002F\u002F   i = 0\n",[144,60047,60048],{"class":146,"line":33072},[144,60049,60050],{"class":154},"      \u002F\u002F }\n",[144,60052,60053],{"class":146,"line":33083},[144,60054,60055],{"class":154},"      i = i >= data.length ? 0 : i\n",[144,60057,60058],{"class":146,"line":33089},[144,60059,60060],{"class":154},"      \u002F\u002F 1.3 得到对应的对象\n",[144,60062,60063],{"class":146,"line":33099},[144,60064,60065],{"class":154},"      \u002F\u002F console.log(data[i])\n",[144,60067,60068],{"class":146,"line":33104},[144,60069,60070],{"class":154},"      \u002F\u002F 调用函数\n",[144,60072,60073],{"class":146,"line":33110},[144,60074,60075],{"class":154},"      toggle()\n",[144,60077,60078],{"class":146,"line":33159},[144,60079,33474],{"class":154},[144,60081,60082],{"class":146,"line":33206},[144,60083,2430],{"emptyLinePlaceholder":72},[144,60085,60086],{"class":146,"line":33211},[144,60087,60088],{"class":154},"    \u002F\u002F 2. 左侧按钮业务\n",[144,60090,60091],{"class":146,"line":33217},[144,60092,60093],{"class":154},"    \u002F\u002F 2.1 获取左侧按钮 \n",[144,60095,60096],{"class":146,"line":33236},[144,60097,60098],{"class":154},"    const prev = document.querySelector('.prev')\n",[144,60100,60101],{"class":146,"line":33242},[144,60102,60011],{"class":154},[144,60104,60105],{"class":146,"line":33262},[144,60106,60107],{"class":154},"    prev.addEventListener('click', function () {\n",[144,60109,60110],{"class":146,"line":33268},[144,60111,60112],{"class":154},"      i--\n",[144,60114,60115],{"class":146,"line":33274},[144,60116,60117],{"class":154},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[144,60119,60120],{"class":146,"line":33284},[144,60121,60122],{"class":154},"      \u002F\u002F if (i \u003C 0) {\n",[144,60124,60125],{"class":146,"line":33289},[144,60126,60127],{"class":154},"      \u002F\u002F   i = 7\n",[144,60129,60130],{"class":146,"line":33295},[144,60131,60050],{"class":154},[144,60133,60134],{"class":146,"line":33311},[144,60135,60136],{"class":154},"      i = i \u003C 0 ? data.length - 1 : i\n",[144,60138,60139],{"class":146,"line":33356},[144,60140,60060],{"class":154},[144,60142,60143],{"class":146,"line":33362},[144,60144,60065],{"class":154},[144,60146,60147],{"class":146,"line":33368},[144,60148,60070],{"class":154},[144,60150,60151],{"class":146,"line":33374},[144,60152,60075],{"class":154},[144,60154,60155],{"class":146,"line":33385},[144,60156,33474],{"class":154},[144,60158,60159],{"class":146,"line":33391},[144,60160,2430],{"emptyLinePlaceholder":72},[144,60162,60163],{"class":146,"line":33397},[144,60164,60165],{"class":154},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[144,60167,60168],{"class":146,"line":33403},[144,60169,60170],{"class":154},"    function toggle() {\n",[144,60172,60173],{"class":146,"line":33421},[144,60174,60175],{"class":154},"      \u002F\u002F 1.4 渲染对应的数据\n",[144,60177,60178],{"class":146,"line":33435},[144,60179,60180],{"class":154},"      img.src = data[i].url\n",[144,60182,60183],{"class":146,"line":33444},[144,60184,60185],{"class":154},"      p.innerHTML = data[i].title\n",[144,60187,60188],{"class":146,"line":33453},[144,60189,60190],{"class":154},"      footer.style.backgroundColor = data[i].color\n",[144,60192,60193],{"class":146,"line":33462},[144,60194,60195],{"class":154},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[144,60197,60198],{"class":146,"line":33471},[144,60199,60200],{"class":154},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[144,60202,60203],{"class":146,"line":33477},[144,60204,60205],{"class":154},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[144,60207,60208],{"class":146,"line":33483},[144,60209,2217],{"class":154},[144,60211,60212],{"class":146,"line":33491},[144,60213,2430],{"emptyLinePlaceholder":72},[144,60215,60216],{"class":146,"line":33496},[144,60217,60218],{"class":154},"    \u002F\u002F 3. 自动播放模块\n",[144,60220,60221],{"class":146,"line":33502},[144,60222,60223],{"class":154},"    let timerId = setInterval(function () {\n",[144,60225,60226],{"class":146,"line":33513},[144,60227,60228],{"class":154},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[144,60230,60231],{"class":146,"line":33519},[144,60232,60233],{"class":154},"      next.click()\n",[144,60235,60236],{"class":146,"line":33539},[144,60237,60238],{"class":154},"    }, 1000)\n",[144,60240,60241],{"class":146,"line":33545},[144,60242,2430],{"emptyLinePlaceholder":72},[144,60244,60245],{"class":146,"line":33551},[144,60246,60247],{"class":154},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[144,60249,60250],{"class":146,"line":33557},[144,60251,60252],{"class":154},"    const slider = document.querySelector('.slider')\n",[144,60254,60255],{"class":146,"line":33574},[144,60256,60257],{"class":154},"    \u002F\u002F 注册事件\n",[144,60259,60260],{"class":146,"line":33580},[144,60261,60262],{"class":154},"    slider.addEventListener('mouseenter', function () {\n",[144,60264,60265],{"class":146,"line":33586},[144,60266,60267],{"class":154},"      \u002F\u002F 停止定时器\n",[144,60269,60270],{"class":146,"line":33592},[144,60271,60272],{"class":154},"      clearInterval(timerId)\n",[144,60274,60275],{"class":146,"line":33598},[144,60276,33474],{"class":154},[144,60278,60279],{"class":146,"line":33604},[144,60280,2430],{"emptyLinePlaceholder":72},[144,60282,60283],{"class":146,"line":33631},[144,60284,60285],{"class":154},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[144,60287,60288],{"class":146,"line":33655},[144,60289,60257],{"class":154},[144,60291,60292],{"class":146,"line":33661},[144,60293,60294],{"class":154},"    slider.addEventListener('mouseleave', function () {\n",[144,60296,60297],{"class":146,"line":33667},[144,60298,60267],{"class":154},[144,60300,60301],{"class":146,"line":33673},[144,60302,60303],{"class":154},"      if (timerId) clearInterval(timerId)\n",[144,60305,60306],{"class":146,"line":33684},[144,60307,60308],{"class":154},"      \u002F\u002F 开启定时器\n",[144,60310,60311],{"class":146,"line":33695},[144,60312,60313],{"class":154},"      timerId = setInterval(function () {\n",[144,60315,60316],{"class":146,"line":33701},[144,60317,60318],{"class":154},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[144,60320,60321],{"class":146,"line":33718},[144,60322,60323],{"class":154},"        next.click()\n",[144,60325,60326],{"class":146,"line":33741},[144,60327,60328],{"class":154},"      }, 1000)\n",[144,60330,60331],{"class":146,"line":33764},[144,60332,33474],{"class":154},[144,60334,60335,60337,60339],{"class":146,"line":33770},[144,60336,52430],{"class":154},[144,60338,51826],{"class":51313},[144,60340,51320],{"class":154},[144,60342,60343,60345,60347],{"class":146,"line":33775},[144,60344,51798],{"class":154},[144,60346,51813],{"class":51313},[144,60348,51320],{"class":154},[144,60350,60351],{"class":146,"line":33784},[144,60352,2430],{"emptyLinePlaceholder":72},[144,60354,60355,60357,60359],{"class":146,"line":33794},[144,60356,51798],{"class":154},[144,60358,50648],{"class":51313},[144,60360,51320],{"class":154},[22029,60362,60364],{"id":60363},"_3252-焦点事件","3.2.5.2 焦点事件",[14,60366,60367],{},"小米搜索框案例：",[135,60369,60371],{"className":50646,"code":60370,"language":50648,"meta":30,"style":30},"\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",[141,60372,60373,60383,60397,60401,60409,60423,60443,60463,60475,60483,60489,60499,60509,60521,60525,60529,60536,60540,60551,60555,60559,60566,60577,60590,60604,60608,60612,60621,60633,60645,60659,60672,60685,60703,60714,60718,60722,60731,60748,60752,60756,60763,60773,60783,60794,60807,60819,60835,60846,60858,60862,60866,60874,60885,60902,60914,60926,60937,60941,60945,60956,60967,60971,60979,60983,60991,60995,61003,61018,61041,61056,61087,61114,61141,61168,61195,61222,61249,61258,61266,61274,61279,61299,61319,61324,61329,61347,61352,61362,61367,61381,61386,61391,61408,61417,61429,61433,61441,61449,61453],{"__ignoreMap":30},[144,60374,60375,60377,60379,60381],{"class":146,"line":147},[144,60376,51310],{"class":154},[144,60378,51314],{"class":51313},[144,60380,51317],{"class":1993},[144,60382,51320],{"class":154},[144,60384,60385,60387,60389,60391,60393,60395],{"class":146,"line":66},[144,60386,1065],{"class":154},[144,60388,50648],{"class":51313},[144,60390,51329],{"class":1993},[144,60392,200],{"class":154},[144,60394,51334],{"class":259},[144,60396,51320],{"class":154},[144,60398,60399],{"class":146,"line":1210},[144,60400,2430],{"emptyLinePlaceholder":72},[144,60402,60403,60405,60407],{"class":146,"line":1225},[144,60404,1065],{"class":154},[144,60406,51347],{"class":51313},[144,60408,51320],{"class":154},[144,60410,60411,60413,60415,60417,60419,60421],{"class":146,"line":1231},[144,60412,51354],{"class":154},[144,60414,51357],{"class":51313},[144,60416,51360],{"class":1993},[144,60418,200],{"class":154},[144,60420,51365],{"class":259},[144,60422,51320],{"class":154},[144,60424,60425,60427,60429,60431,60433,60435,60437,60439,60441],{"class":146,"line":1245},[144,60426,51354],{"class":154},[144,60428,51357],{"class":51313},[144,60430,51376],{"class":1993},[144,60432,200],{"class":154},[144,60434,51381],{"class":259},[144,60436,51384],{"class":1993},[144,60438,200],{"class":154},[144,60440,51389],{"class":259},[144,60442,51320],{"class":154},[144,60444,60445,60447,60449,60451,60453,60455,60457,60459,60461],{"class":146,"line":1251},[144,60446,51354],{"class":154},[144,60448,51357],{"class":51313},[144,60450,14951],{"class":1993},[144,60452,200],{"class":154},[144,60454,51404],{"class":259},[144,60456,51384],{"class":1993},[144,60458,200],{"class":154},[144,60460,51411],{"class":259},[144,60462,51320],{"class":154},[144,60464,60465,60467,60469,60471,60473],{"class":146,"line":1342},[144,60466,51354],{"class":154},[144,60468,51420],{"class":51313},[144,60470,51423],{"class":154},[144,60472,51420],{"class":51313},[144,60474,51320],{"class":154},[144,60476,60477,60479,60481],{"class":146,"line":1348},[144,60478,51354],{"class":154},[144,60480,5157],{"class":51313},[144,60482,51320],{"class":154},[144,60484,60485,60487],{"class":146,"line":1360},[144,60486,51440],{"class":51313},[144,60488,15603],{"class":154},[144,60490,60491,60493,60495,60497],{"class":146,"line":1642},[144,60492,51447],{"class":203},[144,60494,51450],{"class":154},[144,60496,346],{"class":203},[144,60498,1321],{"class":154},[144,60500,60501,60503,60505,60507],{"class":146,"line":1647},[144,60502,51459],{"class":203},[144,60504,51450],{"class":154},[144,60506,346],{"class":203},[144,60508,1321],{"class":154},[144,60510,60511,60514,60516,60519],{"class":146,"line":1653},[144,60512,60513],{"class":203},"            box-sizing",[144,60515,51450],{"class":154},[144,60517,60518],{"class":203},"border-box",[144,60520,1321],{"class":154},[144,60522,60523],{"class":146,"line":1658},[144,60524,2559],{"class":154},[144,60526,60527],{"class":146,"line":1672},[144,60528,2430],{"emptyLinePlaceholder":72},[144,60530,60531,60534],{"class":146,"line":1677},[144,60532,60533],{"class":51313},"        ul",[144,60535,15603],{"class":154},[144,60537,60538],{"class":146,"line":1683},[144,60539,2430],{"emptyLinePlaceholder":72},[144,60541,60542,60545,60547,60549],{"class":146,"line":1704},[144,60543,60544],{"class":203},"            list-style",[144,60546,51450],{"class":154},[144,60548,54750],{"class":203},[144,60550,1321],{"class":154},[144,60552,60553],{"class":146,"line":1709},[144,60554,2559],{"class":154},[144,60556,60557],{"class":146,"line":1723},[144,60558,2430],{"emptyLinePlaceholder":72},[144,60560,60561,60564],{"class":146,"line":1728},[144,60562,60563],{"class":1993},"        .mi",[144,60565,15603],{"class":154},[144,60567,60568,60571,60573,60575],{"class":146,"line":1757},[144,60569,60570],{"class":203},"            position",[144,60572,51450],{"class":154},[144,60574,54777],{"class":203},[144,60576,1321],{"class":154},[144,60578,60579,60581,60583,60586,60588],{"class":146,"line":1762},[144,60580,51497],{"class":203},[144,60582,51450],{"class":154},[144,60584,60585],{"class":203},"223",[144,60587,51505],{"class":150},[144,60589,1321],{"class":154},[144,60591,60592,60594,60596,60598,60600,60602],{"class":146,"line":1779},[144,60593,51447],{"class":203},[144,60595,51450],{"class":154},[144,60597,466],{"class":203},[144,60599,51505],{"class":150},[144,60601,51569],{"class":203},[144,60603,1321],{"class":154},[144,60605,60606],{"class":146,"line":1784},[144,60607,2559],{"class":154},[144,60609,60610],{"class":146,"line":1789},[144,60611,2430],{"emptyLinePlaceholder":72},[144,60613,60614,60616,60619],{"class":146,"line":1794},[144,60615,60563],{"class":1993},[144,60617,60618],{"class":51313}," input",[144,60620,15603],{"class":154},[144,60622,60623,60625,60627,60629,60631],{"class":146,"line":1808},[144,60624,51497],{"class":203},[144,60626,51450],{"class":154},[144,60628,60585],{"class":203},[144,60630,51505],{"class":150},[144,60632,1321],{"class":154},[144,60634,60635,60637,60639,60641,60643],{"class":146,"line":1813},[144,60636,51512],{"class":203},[144,60638,51450],{"class":154},[144,60640,762],{"class":203},[144,60642,51505],{"class":150},[144,60644,1321],{"class":154},[144,60646,60647,60649,60651,60653,60655,60657],{"class":146,"line":2607},[144,60648,51459],{"class":203},[144,60650,51450],{"class":154},[144,60652,346],{"class":203},[144,60654,2068],{"class":203},[144,60656,51505],{"class":150},[144,60658,1321],{"class":154},[144,60660,60661,60664,60666,60668,60670],{"class":146,"line":2621},[144,60662,60663],{"class":203},"            font-size",[144,60665,51450],{"class":154},[144,60667,704],{"class":203},[144,60669,51505],{"class":150},[144,60671,1321],{"class":154},[144,60673,60674,60677,60679,60681,60683],{"class":146,"line":2629},[144,60675,60676],{"class":203},"            line-height",[144,60678,51450],{"class":154},[144,60680,762],{"class":203},[144,60682,51505],{"class":150},[144,60684,1321],{"class":154},[144,60686,60687,60690,60692,60694,60696,60698,60701],{"class":146,"line":2634},[144,60688,60689],{"class":203},"            border",[144,60691,51450],{"class":154},[144,60693,372],{"class":203},[144,60695,51505],{"class":150},[144,60697,51534],{"class":203},[144,60699,60700],{"class":203}," #e0e0e0",[144,60702,1321],{"class":154},[144,60704,60705,60708,60710,60712],{"class":146,"line":2640},[144,60706,60707],{"class":203},"            outline",[144,60709,51450],{"class":154},[144,60711,54750],{"class":203},[144,60713,1321],{"class":154},[144,60715,60716],{"class":146,"line":2646},[144,60717,2559],{"class":154},[144,60719,60720],{"class":146,"line":2651},[144,60721,2430],{"emptyLinePlaceholder":72},[144,60723,60724,60726,60729],{"class":146,"line":7979},[144,60725,60563],{"class":1993},[144,60727,60728],{"class":1993}," .search",[144,60730,15603],{"class":154},[144,60732,60733,60735,60737,60739,60741,60743,60746],{"class":146,"line":8003},[144,60734,60689],{"class":203},[144,60736,51450],{"class":154},[144,60738,372],{"class":203},[144,60740,51505],{"class":150},[144,60742,51534],{"class":203},[144,60744,60745],{"class":203}," #ff6700",[144,60747,1321],{"class":154},[144,60749,60750],{"class":146,"line":8008},[144,60751,2559],{"class":154},[144,60753,60754],{"class":146,"line":8014},[144,60755,2430],{"emptyLinePlaceholder":72},[144,60757,60758,60761],{"class":146,"line":8041},[144,60759,60760],{"class":1993},"        .result-list",[144,60762,15603],{"class":154},[144,60764,60765,60767,60769,60771],{"class":146,"line":8046},[144,60766,51485],{"class":203},[144,60768,51450],{"class":154},[144,60770,54750],{"class":203},[144,60772,1321],{"class":154},[144,60774,60775,60777,60779,60781],{"class":146,"line":8052},[144,60776,60570],{"class":203},[144,60778,51450],{"class":154},[144,60780,54844],{"class":203},[144,60782,1321],{"class":154},[144,60784,60785,60788,60790,60792],{"class":146,"line":8064},[144,60786,60787],{"class":203},"            left",[144,60789,51450],{"class":154},[144,60791,346],{"class":203},[144,60793,1321],{"class":154},[144,60795,60796,60799,60801,60803,60805],{"class":146,"line":8076},[144,60797,60798],{"class":203},"            top",[144,60800,51450],{"class":154},[144,60802,762],{"class":203},[144,60804,51505],{"class":150},[144,60806,1321],{"class":154},[144,60808,60809,60811,60813,60815,60817],{"class":146,"line":8088},[144,60810,51497],{"class":203},[144,60812,51450],{"class":154},[144,60814,60585],{"class":203},[144,60816,51505],{"class":150},[144,60818,1321],{"class":154},[144,60820,60821,60823,60825,60827,60829,60831,60833],{"class":146,"line":9747},[144,60822,60689],{"class":203},[144,60824,51450],{"class":154},[144,60826,372],{"class":203},[144,60828,51505],{"class":150},[144,60830,51534],{"class":203},[144,60832,60745],{"class":203},[144,60834,1321],{"class":154},[144,60836,60837,60840,60842,60844],{"class":146,"line":9772},[144,60838,60839],{"class":203},"            border-top",[144,60841,51450],{"class":154},[144,60843,346],{"class":203},[144,60845,1321],{"class":154},[144,60847,60848,60851,60853,60856],{"class":146,"line":9795},[144,60849,60850],{"class":203},"            background",[144,60852,51450],{"class":154},[144,60854,60855],{"class":203},"#fff",[144,60857,1321],{"class":154},[144,60859,60860],{"class":146,"line":9819},[144,60861,2559],{"class":154},[144,60863,60864],{"class":146,"line":9824},[144,60865,2430],{"emptyLinePlaceholder":72},[144,60867,60868,60870,60872],{"class":146,"line":9829},[144,60869,60760],{"class":1993},[144,60871,1429],{"class":51313},[144,60873,15603],{"class":154},[144,60875,60876,60878,60880,60883],{"class":146,"line":9834},[144,60877,51485],{"class":203},[144,60879,51450],{"class":154},[144,60881,60882],{"class":203},"block",[144,60884,1321],{"class":154},[144,60886,60887,60889,60891,60893,60895,60898,60900],{"class":146,"line":9843},[144,60888,51459],{"class":203},[144,60890,51450],{"class":154},[144,60892,499],{"class":203},[144,60894,51505],{"class":150},[144,60896,60897],{"class":203}," 15",[144,60899,51505],{"class":150},[144,60901,1321],{"class":154},[144,60903,60904,60906,60908,60910,60912],{"class":146,"line":9848},[144,60905,60663],{"class":203},[144,60907,51450],{"class":154},[144,60909,653],{"class":203},[144,60911,51505],{"class":150},[144,60913,1321],{"class":154},[144,60915,60916,60919,60921,60924],{"class":146,"line":9854},[144,60917,60918],{"class":203},"            color",[144,60920,51450],{"class":154},[144,60922,60923],{"class":203},"#424242",[144,60925,1321],{"class":154},[144,60927,60928,60931,60933,60935],{"class":146,"line":9875},[144,60929,60930],{"class":203},"            text-decoration",[144,60932,51450],{"class":154},[144,60934,54750],{"class":203},[144,60936,1321],{"class":154},[144,60938,60939],{"class":146,"line":9881},[144,60940,2559],{"class":154},[144,60942,60943],{"class":146,"line":9895},[144,60944,2430],{"emptyLinePlaceholder":72},[144,60946,60947,60949,60951,60954],{"class":146,"line":9901},[144,60948,60760],{"class":1993},[144,60950,1429],{"class":51313},[144,60952,60953],{"class":1993},":hover",[144,60955,15603],{"class":154},[144,60957,60958,60960,60962,60965],{"class":146,"line":9928},[144,60959,51653],{"class":203},[144,60961,51450],{"class":154},[144,60963,60964],{"class":203},"#eee",[144,60966,1321],{"class":154},[144,60968,60969],{"class":146,"line":9937},[144,60970,2559],{"class":154},[144,60972,60973,60975,60977],{"class":146,"line":9943},[144,60974,51789],{"class":154},[144,60976,5157],{"class":51313},[144,60978,51320],{"class":154},[144,60980,60981],{"class":146,"line":9951},[144,60982,2430],{"emptyLinePlaceholder":72},[144,60984,60985,60987,60989],{"class":146,"line":9956},[144,60986,51798],{"class":154},[144,60988,51347],{"class":51313},[144,60990,51320],{"class":154},[144,60992,60993],{"class":146,"line":16635},[144,60994,2430],{"emptyLinePlaceholder":72},[144,60996,60997,60999,61001],{"class":146,"line":16641},[144,60998,1065],{"class":154},[144,61000,51813],{"class":51313},[144,61002,51320],{"class":154},[144,61004,61005,61007,61009,61011,61013,61016],{"class":146,"line":16664},[144,61006,51354],{"class":154},[144,61008,51624],{"class":51313},[144,61010,53499],{"class":1993},[144,61012,200],{"class":154},[144,61014,61015],{"class":259},"\"mi\"",[144,61017,51320],{"class":154},[144,61019,61020,61022,61024,61026,61028,61031,61034,61036,61039],{"class":146,"line":16670},[144,61021,55315],{"class":154},[144,61023,53834],{"class":51313},[144,61025,53837],{"class":1993},[144,61027,200],{"class":154},[144,61029,61030],{"class":259},"\"search\"",[144,61032,61033],{"class":1993}," placeholder",[144,61035,200],{"class":154},[144,61037,61038],{"class":259},"\"小米笔记本\"",[144,61040,51320],{"class":154},[144,61042,61043,61045,61047,61049,61051,61054],{"class":146,"line":16693},[144,61044,55315],{"class":154},[144,61046,1162],{"class":51313},[144,61048,53499],{"class":1993},[144,61050,200],{"class":154},[144,61052,61053],{"class":259},"\"result-list\"",[144,61055,51320],{"class":154},[144,61057,61058,61061,61063,61066,61068,61071,61073,61076,61079,61081,61083,61085],{"class":146,"line":16707},[144,61059,61060],{"class":154},"            \u003C",[144,61062,101],{"class":51313},[144,61064,61065],{"class":154},">\u003C",[144,61067,393],{"class":51313},[144,61069,61070],{"class":1993}," href",[144,61072,200],{"class":154},[144,61074,61075],{"class":259},"\"#\"",[144,61077,61078],{"class":154},">全部商品\u003C\u002F",[144,61080,393],{"class":51313},[144,61082,55327],{"class":154},[144,61084,101],{"class":51313},[144,61086,51320],{"class":154},[144,61088,61089,61091,61093,61095,61097,61099,61101,61103,61106,61108,61110,61112],{"class":146,"line":16727},[144,61090,61060],{"class":154},[144,61092,101],{"class":51313},[144,61094,61065],{"class":154},[144,61096,393],{"class":51313},[144,61098,61070],{"class":1993},[144,61100,200],{"class":154},[144,61102,61075],{"class":259},[144,61104,61105],{"class":154},">小米11\u003C\u002F",[144,61107,393],{"class":51313},[144,61109,55327],{"class":154},[144,61111,101],{"class":51313},[144,61113,51320],{"class":154},[144,61115,61116,61118,61120,61122,61124,61126,61128,61130,61133,61135,61137,61139],{"class":146,"line":16733},[144,61117,61060],{"class":154},[144,61119,101],{"class":51313},[144,61121,61065],{"class":154},[144,61123,393],{"class":51313},[144,61125,61070],{"class":1993},[144,61127,200],{"class":154},[144,61129,61075],{"class":259},[144,61131,61132],{"class":154},">小米10S\u003C\u002F",[144,61134,393],{"class":51313},[144,61136,55327],{"class":154},[144,61138,101],{"class":51313},[144,61140,51320],{"class":154},[144,61142,61143,61145,61147,61149,61151,61153,61155,61157,61160,61162,61164,61166],{"class":146,"line":16744},[144,61144,61060],{"class":154},[144,61146,101],{"class":51313},[144,61148,61065],{"class":154},[144,61150,393],{"class":51313},[144,61152,61070],{"class":1993},[144,61154,200],{"class":154},[144,61156,61075],{"class":259},[144,61158,61159],{"class":154},">小米笔记本\u003C\u002F",[144,61161,393],{"class":51313},[144,61163,55327],{"class":154},[144,61165,101],{"class":51313},[144,61167,51320],{"class":154},[144,61169,61170,61172,61174,61176,61178,61180,61182,61184,61187,61189,61191,61193],{"class":146,"line":16767},[144,61171,61060],{"class":154},[144,61173,101],{"class":51313},[144,61175,61065],{"class":154},[144,61177,393],{"class":51313},[144,61179,61070],{"class":1993},[144,61181,200],{"class":154},[144,61183,61075],{"class":259},[144,61185,61186],{"class":154},">小米手机\u003C\u002F",[144,61188,393],{"class":51313},[144,61190,55327],{"class":154},[144,61192,101],{"class":51313},[144,61194,51320],{"class":154},[144,61196,61197,61199,61201,61203,61205,61207,61209,61211,61214,61216,61218,61220],{"class":146,"line":16789},[144,61198,61060],{"class":154},[144,61200,101],{"class":51313},[144,61202,61065],{"class":154},[144,61204,393],{"class":51313},[144,61206,61070],{"class":1993},[144,61208,200],{"class":154},[144,61210,61075],{"class":259},[144,61212,61213],{"class":154},">黑鲨4\u003C\u002F",[144,61215,393],{"class":51313},[144,61217,55327],{"class":154},[144,61219,101],{"class":51313},[144,61221,51320],{"class":154},[144,61223,61224,61226,61228,61230,61232,61234,61236,61238,61241,61243,61245,61247],{"class":146,"line":16794},[144,61225,61060],{"class":154},[144,61227,101],{"class":51313},[144,61229,61065],{"class":154},[144,61231,393],{"class":51313},[144,61233,61070],{"class":1993},[144,61235,200],{"class":154},[144,61237,61075],{"class":259},[144,61239,61240],{"class":154},">空调\u003C\u002F",[144,61242,393],{"class":51313},[144,61244,55327],{"class":154},[144,61246,101],{"class":51313},[144,61248,51320],{"class":154},[144,61250,61251,61254,61256],{"class":146,"line":16800},[144,61252,61253],{"class":154},"        \u003C\u002F",[144,61255,1162],{"class":51313},[144,61257,51320],{"class":154},[144,61259,61260,61262,61264],{"class":146,"line":16814},[144,61261,51789],{"class":154},[144,61263,51624],{"class":51313},[144,61265,51320],{"class":154},[144,61267,61268,61270,61272],{"class":146,"line":16827},[144,61269,51354],{"class":154},[144,61271,51826],{"class":51313},[144,61273,51320],{"class":154},[144,61275,61276],{"class":146,"line":16832},[144,61277,61278],{"class":213},"        \u002F\u002F 1. 获取元素\n",[144,61280,61281,61284,61286,61288,61290,61292,61294,61297],{"class":146,"line":16846},[144,61282,61283],{"class":150},"        const",[144,61285,60618],{"class":203},[144,61287,13595],{"class":150},[144,61289,54409],{"class":154},[144,61291,54412],{"class":1993},[144,61293,155],{"class":154},[144,61295,61296],{"class":259},"'[type=search]'",[144,61298,161],{"class":154},[144,61300,61301,61303,61306,61308,61310,61312,61314,61317],{"class":146,"line":16851},[144,61302,61283],{"class":150},[144,61304,61305],{"class":203}," ul",[144,61307,13595],{"class":150},[144,61309,54409],{"class":154},[144,61311,54412],{"class":1993},[144,61313,155],{"class":154},[144,61315,61316],{"class":259},"'.result-list'",[144,61318,161],{"class":154},[144,61320,61321],{"class":146,"line":16857},[144,61322,61323],{"class":213},"        \u002F\u002F console.log(input)\n",[144,61325,61326],{"class":146,"line":16862},[144,61327,61328],{"class":213},"        \u002F\u002F 2. 监听事件 获得焦点\n",[144,61330,61331,61334,61336,61338,61341,61343,61345],{"class":146,"line":16876},[144,61332,61333],{"class":154},"        input.",[144,61335,57826],{"class":1993},[144,61337,155],{"class":154},[144,61339,61340],{"class":259},"'focus'",[144,61342,12466],{"class":154},[144,61344,54462],{"class":150},[144,61346,54465],{"class":154},[144,61348,61349],{"class":146,"line":16881},[144,61350,61351],{"class":213},"            \u002F\u002F ul显示\n",[144,61353,61354,61357,61359],{"class":146,"line":16886},[144,61355,61356],{"class":154},"            ul.style.display ",[144,61358,200],{"class":150},[144,61360,61361],{"class":259}," 'block'\n",[144,61363,61364],{"class":146,"line":16900},[144,61365,61366],{"class":213},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[144,61368,61369,61372,61374,61376,61379],{"class":146,"line":16912},[144,61370,61371],{"class":154},"            input.classList.",[144,61373,5365],{"class":1993},[144,61375,155],{"class":154},[144,61377,61378],{"class":259},"'search'",[144,61380,161],{"class":154},[144,61382,61383],{"class":146,"line":16917},[144,61384,61385],{"class":154},"        })\n",[144,61387,61388],{"class":146,"line":16930},[144,61389,61390],{"class":213},"        \u002F\u002F 3. 监听事件 失去焦点\n",[144,61392,61393,61395,61397,61399,61402,61404,61406],{"class":146,"line":16935},[144,61394,61333],{"class":154},[144,61396,57826],{"class":1993},[144,61398,155],{"class":154},[144,61400,61401],{"class":259},"'blur'",[144,61403,12466],{"class":154},[144,61405,54462],{"class":150},[144,61407,54465],{"class":154},[144,61409,61410,61412,61414],{"class":146,"line":16940},[144,61411,61356],{"class":154},[144,61413,200],{"class":150},[144,61415,61416],{"class":259}," 'none'\n",[144,61418,61419,61421,61423,61425,61427],{"class":146,"line":16945},[144,61420,61371],{"class":154},[144,61422,57019],{"class":1993},[144,61424,155],{"class":154},[144,61426,61378],{"class":259},[144,61428,161],{"class":154},[144,61430,61431],{"class":146,"line":16958},[144,61432,61385],{"class":154},[144,61434,61435,61437,61439],{"class":146,"line":16963},[144,61436,51789],{"class":154},[144,61438,51826],{"class":51313},[144,61440,51320],{"class":154},[144,61442,61443,61445,61447],{"class":146,"line":32646},[144,61444,51798],{"class":154},[144,61446,51813],{"class":51313},[144,61448,51320],{"class":154},[144,61450,61451],{"class":146,"line":32652},[144,61452,2430],{"emptyLinePlaceholder":72},[144,61454,61455,61457,61459],{"class":146,"line":32658},[144,61456,51798],{"class":154},[144,61458,50648],{"class":51313},[144,61460,51320],{"class":154},[22029,61462,61464],{"id":61463},"_3253-键盘事件","3.2.5.3 键盘事件",[14,61466,61467],{},"评论字数统计案例",[14,61469,61470],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,61472,61473],{},"牢记focus伪类选择器",[51357,61475],{"charSet":61476},"UTF-8",[51357,61478],{"name":61479,"content":61480},"viewport","width=device-width, initial-scale=1.0",[51420,61482,61483],{},"Document",[5157,61485,61486],{},"\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",[53834,61488],{"type":5218},[1162,61490,61491,61494],{},[101,61492,61493],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[101,61495,61496],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[135,61498,61500],{"className":50646,"code":61499,"language":50648,"meta":30,"style":30},"\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",[141,61501,61502,61512,61526,61530,61538,61552,61572,61592,61605,61613,61620,61633,61647,61657,61667,61671,61675,61682,61694,61706,61718,61730,61759,61772,61776,61780,61789,61800,61812,61823,61834,61846,61857,61869,61885,61897,61901,61905,61916,61927,61937,61949,61953,61957,61965,61976,61986,61997,62009,62022,62034,62046,62050,62054,62063,62075,62086,62099,62110,62124,62128,62132,62139,62151,62163,62173,62177,62181,62190,62202,62212,62216,62220,62231,62241,62260,62273,62277,62281,62291,62301,62305,62309,62320,62331,62343,62355,62359,62363,62374,62385,62399,62403,62407,62418,62428,62440,62444,62452,62460,62464,62472,62487,62506,62546,62559,62567,62581,62601,62609,62624,62647,62665,62680,62700,62720,62740,62748,62756,62764,62772,62792,62812,62817,62834,62843,62847,62852,62868,62876,62880,62885,62902,62907,62932,62936,62940,62945,62950,62958,62966,62970],{"__ignoreMap":30},[144,61503,61504,61506,61508,61510],{"class":146,"line":147},[144,61505,51310],{"class":154},[144,61507,51314],{"class":51313},[144,61509,51317],{"class":1993},[144,61511,51320],{"class":154},[144,61513,61514,61516,61518,61520,61522,61524],{"class":146,"line":66},[144,61515,1065],{"class":154},[144,61517,50648],{"class":51313},[144,61519,51329],{"class":1993},[144,61521,200],{"class":154},[144,61523,51334],{"class":259},[144,61525,51320],{"class":154},[144,61527,61528],{"class":146,"line":1210},[144,61529,2430],{"emptyLinePlaceholder":72},[144,61531,61532,61534,61536],{"class":146,"line":1225},[144,61533,1065],{"class":154},[144,61535,51347],{"class":51313},[144,61537,51320],{"class":154},[144,61539,61540,61542,61544,61546,61548,61550],{"class":146,"line":1231},[144,61541,52157],{"class":154},[144,61543,51357],{"class":51313},[144,61545,51360],{"class":1993},[144,61547,200],{"class":154},[144,61549,51365],{"class":259},[144,61551,51320],{"class":154},[144,61553,61554,61556,61558,61560,61562,61564,61566,61568,61570],{"class":146,"line":1245},[144,61555,52157],{"class":154},[144,61557,51357],{"class":51313},[144,61559,51376],{"class":1993},[144,61561,200],{"class":154},[144,61563,51381],{"class":259},[144,61565,51384],{"class":1993},[144,61567,200],{"class":154},[144,61569,51389],{"class":259},[144,61571,51320],{"class":154},[144,61573,61574,61576,61578,61580,61582,61584,61586,61588,61590],{"class":146,"line":1251},[144,61575,52157],{"class":154},[144,61577,51357],{"class":51313},[144,61579,14951],{"class":1993},[144,61581,200],{"class":154},[144,61583,51404],{"class":259},[144,61585,51384],{"class":1993},[144,61587,200],{"class":154},[144,61589,51411],{"class":259},[144,61591,51320],{"class":154},[144,61593,61594,61596,61598,61601,61603],{"class":146,"line":1342},[144,61595,52157],{"class":154},[144,61597,51420],{"class":51313},[144,61599,61600],{"class":154},">评论回车发布\u003C\u002F",[144,61602,51420],{"class":51313},[144,61604,51320],{"class":154},[144,61606,61607,61609,61611],{"class":146,"line":1348},[144,61608,52157],{"class":154},[144,61610,5157],{"class":51313},[144,61612,51320],{"class":154},[144,61614,61615,61618],{"class":146,"line":1360},[144,61616,61617],{"class":1993},"    .wrapper",[144,61619,15603],{"class":154},[144,61621,61622,61625,61627,61629,61631],{"class":146,"line":1642},[144,61623,61624],{"class":203},"      min-width",[144,61626,51450],{"class":154},[144,61628,4017],{"class":203},[144,61630,51505],{"class":150},[144,61632,1321],{"class":154},[144,61634,61635,61638,61640,61643,61645],{"class":146,"line":1647},[144,61636,61637],{"class":203},"      max-width",[144,61639,51450],{"class":154},[144,61641,61642],{"class":203},"800",[144,61644,51505],{"class":150},[144,61646,1321],{"class":154},[144,61648,61649,61651,61653,61655],{"class":146,"line":1653},[144,61650,55022],{"class":203},[144,61652,51450],{"class":154},[144,61654,51490],{"class":203},[144,61656,1321],{"class":154},[144,61658,61659,61661,61663,61665],{"class":146,"line":1658},[144,61660,55033],{"class":203},[144,61662,51450],{"class":154},[144,61664,51593],{"class":203},[144,61666,1321],{"class":154},[144,61668,61669],{"class":146,"line":1672},[144,61670,2217],{"class":154},[144,61672,61673],{"class":146,"line":1677},[144,61674,2430],{"emptyLinePlaceholder":72},[144,61676,61677,61680],{"class":146,"line":1683},[144,61678,61679],{"class":1993},"    .avatar",[144,61681,15603],{"class":154},[144,61683,61684,61686,61688,61690,61692],{"class":146,"line":1704},[144,61685,54784],{"class":203},[144,61687,51450],{"class":154},[144,61689,762],{"class":203},[144,61691,51505],{"class":150},[144,61693,1321],{"class":154},[144,61695,61696,61698,61700,61702,61704],{"class":146,"line":1709},[144,61697,54798],{"class":203},[144,61699,51450],{"class":154},[144,61701,762],{"class":203},[144,61703,51505],{"class":150},[144,61705,1321],{"class":154},[144,61707,61708,61710,61712,61714,61716],{"class":146,"line":1723},[144,61709,55147],{"class":203},[144,61711,51450],{"class":154},[144,61713,811],{"class":203},[144,61715,483],{"class":150},[144,61717,1321],{"class":154},[144,61719,61720,61723,61725,61728],{"class":146,"line":1728},[144,61721,61722],{"class":203},"      overflow",[144,61724,51450],{"class":154},[144,61726,61727],{"class":203},"hidden",[144,61729,1321],{"class":154},[144,61731,61732,61735,61737,61740,61742,61745,61747,61750,61752,61754,61757],{"class":146,"line":1757},[144,61733,61734],{"class":203},"      background",[144,61736,51450],{"class":154},[144,61738,61739],{"class":203},"url",[144,61741,155],{"class":154},[144,61743,61744],{"class":5247},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[144,61746,13745],{"class":154},[144,61748,61749],{"class":203},"no-repeat",[144,61751,17175],{"class":203},[144,61753,24991],{"class":154},[144,61755,61756],{"class":203},"cover",[144,61758,1321],{"class":154},[144,61760,61761,61764,61766,61768,61770],{"class":146,"line":1762},[144,61762,61763],{"class":203},"      margin-right",[144,61765,51450],{"class":154},[144,61767,855],{"class":203},[144,61769,51505],{"class":150},[144,61771,1321],{"class":154},[144,61773,61774],{"class":146,"line":1779},[144,61775,2217],{"class":154},[144,61777,61778],{"class":146,"line":1784},[144,61779,2430],{"emptyLinePlaceholder":72},[144,61781,61782,61784,61787],{"class":146,"line":1789},[144,61783,61617],{"class":1993},[144,61785,61786],{"class":51313}," textarea",[144,61788,15603],{"class":154},[144,61790,61791,61794,61796,61798],{"class":146,"line":1794},[144,61792,61793],{"class":203},"      outline",[144,61795,51450],{"class":154},[144,61797,54750],{"class":203},[144,61799,1321],{"class":154},[144,61801,61802,61805,61807,61810],{"class":146,"line":1808},[144,61803,61804],{"class":203},"      border-color",[144,61806,51450],{"class":154},[144,61808,61809],{"class":203},"transparent",[144,61811,1321],{"class":154},[144,61813,61814,61817,61819,61821],{"class":146,"line":1813},[144,61815,61816],{"class":203},"      resize",[144,61818,51450],{"class":154},[144,61820,54750],{"class":203},[144,61822,1321],{"class":154},[144,61824,61825,61827,61829,61832],{"class":146,"line":2607},[144,61826,61734],{"class":203},[144,61828,51450],{"class":154},[144,61830,61831],{"class":203},"#f5f5f5",[144,61833,1321],{"class":154},[144,61835,61836,61838,61840,61842,61844],{"class":146,"line":2621},[144,61837,55147],{"class":203},[144,61839,51450],{"class":154},[144,61841,448],{"class":203},[144,61843,51505],{"class":150},[144,61845,1321],{"class":154},[144,61847,61848,61851,61853,61855],{"class":146,"line":2629},[144,61849,61850],{"class":203},"      flex",[144,61852,51450],{"class":154},[144,61854,372],{"class":203},[144,61856,1321],{"class":154},[144,61858,61859,61861,61863,61865,61867],{"class":146,"line":2634},[144,61860,54708],{"class":203},[144,61862,51450],{"class":154},[144,61864,601],{"class":203},[144,61866,51505],{"class":150},[144,61868,1321],{"class":154},[144,61870,61871,61874,61876,61878,61881,61883],{"class":146,"line":2640},[144,61872,61873],{"class":203},"      transition",[144,61875,51450],{"class":154},[144,61877,28134],{"class":203},[144,61879,61880],{"class":203}," 0.5",[144,61882,850],{"class":150},[144,61884,1321],{"class":154},[144,61886,61887,61889,61891,61893,61895],{"class":146,"line":2646},[144,61888,54798],{"class":203},[144,61890,51450],{"class":154},[144,61892,1106],{"class":203},[144,61894,51505],{"class":150},[144,61896,1321],{"class":154},[144,61898,61899],{"class":146,"line":2651},[144,61900,2217],{"class":154},[144,61902,61903],{"class":146,"line":7979},[144,61904,2430],{"emptyLinePlaceholder":72},[144,61906,61907,61909,61911,61914],{"class":146,"line":8003},[144,61908,61617],{"class":1993},[144,61910,61786],{"class":51313},[144,61912,61913],{"class":1993},":focus",[144,61915,15603],{"class":154},[144,61917,61918,61920,61922,61925],{"class":146,"line":8008},[144,61919,61804],{"class":203},[144,61921,51450],{"class":154},[144,61923,61924],{"class":203},"#e4e4e4",[144,61926,1321],{"class":154},[144,61928,61929,61931,61933,61935],{"class":146,"line":8014},[144,61930,61734],{"class":203},[144,61932,51450],{"class":154},[144,61934,60855],{"class":203},[144,61936,1321],{"class":154},[144,61938,61939,61941,61943,61945,61947],{"class":146,"line":8041},[144,61940,54798],{"class":203},[144,61942,51450],{"class":154},[144,61944,811],{"class":203},[144,61946,51505],{"class":150},[144,61948,1321],{"class":154},[144,61950,61951],{"class":146,"line":8046},[144,61952,2217],{"class":154},[144,61954,61955],{"class":146,"line":8052},[144,61956,2430],{"emptyLinePlaceholder":72},[144,61958,61959,61961,61963],{"class":146,"line":8064},[144,61960,61617],{"class":1993},[144,61962,57480],{"class":51313},[144,61964,15603],{"class":154},[144,61966,61967,61969,61971,61974],{"class":146,"line":8076},[144,61968,61734],{"class":203},[144,61970,51450],{"class":154},[144,61972,61973],{"class":203},"#00aeec",[144,61975,1321],{"class":154},[144,61977,61978,61980,61982,61984],{"class":146,"line":8088},[144,61979,57429],{"class":203},[144,61981,51450],{"class":154},[144,61983,60855],{"class":203},[144,61985,1321],{"class":154},[144,61987,61988,61991,61993,61995],{"class":146,"line":9747},[144,61989,61990],{"class":203},"      border",[144,61992,51450],{"class":154},[144,61994,54750],{"class":203},[144,61996,1321],{"class":154},[144,61998,61999,62001,62003,62005,62007],{"class":146,"line":9772},[144,62000,55147],{"class":203},[144,62002,51450],{"class":154},[144,62004,448],{"class":203},[144,62006,51505],{"class":150},[144,62008,1321],{"class":154},[144,62010,62011,62014,62016,62018,62020],{"class":146,"line":9795},[144,62012,62013],{"class":203},"      margin-left",[144,62015,51450],{"class":154},[144,62017,601],{"class":203},[144,62019,51505],{"class":150},[144,62021,1321],{"class":154},[144,62023,62024,62026,62028,62030,62032],{"class":146,"line":9819},[144,62025,54784],{"class":203},[144,62027,51450],{"class":154},[144,62029,511],{"class":203},[144,62031,51505],{"class":150},[144,62033,1321],{"class":154},[144,62035,62036,62039,62041,62044],{"class":146,"line":9824},[144,62037,62038],{"class":203},"      cursor",[144,62040,51450],{"class":154},[144,62042,62043],{"class":203},"pointer",[144,62045,1321],{"class":154},[144,62047,62048],{"class":146,"line":9829},[144,62049,2217],{"class":154},[144,62051,62052],{"class":146,"line":9834},[144,62053,2430],{"emptyLinePlaceholder":72},[144,62055,62056,62058,62061],{"class":146,"line":9843},[144,62057,61617],{"class":1993},[144,62059,62060],{"class":1993}," .total",[144,62062,15603],{"class":154},[144,62064,62065,62067,62069,62071,62073],{"class":146,"line":9848},[144,62066,61763],{"class":203},[144,62068,51450],{"class":154},[144,62070,767],{"class":203},[144,62072,51505],{"class":150},[144,62074,1321],{"class":154},[144,62076,62077,62079,62081,62084],{"class":146,"line":9854},[144,62078,57429],{"class":203},[144,62080,51450],{"class":154},[144,62082,62083],{"class":203},"#999",[144,62085,1321],{"class":154},[144,62087,62088,62091,62093,62095,62097],{"class":146,"line":9875},[144,62089,62090],{"class":203},"      margin-top",[144,62092,51450],{"class":154},[144,62094,474],{"class":203},[144,62096,51505],{"class":150},[144,62098,1321],{"class":154},[144,62100,62101,62104,62106,62108],{"class":146,"line":9881},[144,62102,62103],{"class":203},"      opacity",[144,62105,51450],{"class":154},[144,62107,346],{"class":203},[144,62109,1321],{"class":154},[144,62111,62112,62114,62116,62118,62120,62122],{"class":146,"line":9895},[144,62113,61873],{"class":203},[144,62115,51450],{"class":154},[144,62117,28134],{"class":203},[144,62119,61880],{"class":203},[144,62121,850],{"class":150},[144,62123,1321],{"class":154},[144,62125,62126],{"class":146,"line":9901},[144,62127,2217],{"class":154},[144,62129,62130],{"class":146,"line":9928},[144,62131,2430],{"emptyLinePlaceholder":72},[144,62133,62134,62137],{"class":146,"line":9937},[144,62135,62136],{"class":1993},"    .list",[144,62138,15603],{"class":154},[144,62140,62141,62143,62145,62147,62149],{"class":146,"line":9943},[144,62142,61624],{"class":203},[144,62144,51450],{"class":154},[144,62146,4017],{"class":203},[144,62148,51505],{"class":150},[144,62150,1321],{"class":154},[144,62152,62153,62155,62157,62159,62161],{"class":146,"line":9951},[144,62154,61637],{"class":203},[144,62156,51450],{"class":154},[144,62158,61642],{"class":203},[144,62160,51505],{"class":150},[144,62162,1321],{"class":154},[144,62164,62165,62167,62169,62171],{"class":146,"line":9956},[144,62166,55022],{"class":203},[144,62168,51450],{"class":154},[144,62170,51490],{"class":203},[144,62172,1321],{"class":154},[144,62174,62175],{"class":146,"line":16635},[144,62176,2217],{"class":154},[144,62178,62179],{"class":146,"line":16641},[144,62180,2430],{"emptyLinePlaceholder":72},[144,62182,62183,62185,62188],{"class":146,"line":16664},[144,62184,62136],{"class":1993},[144,62186,62187],{"class":1993}," .item",[144,62189,15603],{"class":154},[144,62191,62192,62194,62196,62198,62200],{"class":146,"line":16670},[144,62193,54784],{"class":203},[144,62195,51450],{"class":154},[144,62197,466],{"class":203},[144,62199,483],{"class":150},[144,62201,1321],{"class":154},[144,62203,62204,62206,62208,62210],{"class":146,"line":16693},[144,62205,55022],{"class":203},[144,62207,51450],{"class":154},[144,62209,51490],{"class":203},[144,62211,1321],{"class":154},[144,62213,62214],{"class":146,"line":16707},[144,62215,2217],{"class":154},[144,62217,62218],{"class":146,"line":16727},[144,62219,2430],{"emptyLinePlaceholder":72},[144,62221,62222,62224,62226,62229],{"class":146,"line":16733},[144,62223,62136],{"class":1993},[144,62225,62187],{"class":1993},[144,62227,62228],{"class":1993}," .info",[144,62230,15603],{"class":154},[144,62232,62233,62235,62237,62239],{"class":146,"line":16744},[144,62234,61850],{"class":203},[144,62236,51450],{"class":154},[144,62238,372],{"class":203},[144,62240,1321],{"class":154},[144,62242,62243,62246,62248,62250,62252,62255,62258],{"class":146,"line":16767},[144,62244,62245],{"class":203},"      border-bottom",[144,62247,51450],{"class":154},[144,62249,372],{"class":203},[144,62251,51505],{"class":150},[144,62253,62254],{"class":203}," dashed",[144,62256,62257],{"class":203}," #e4e4e4",[144,62259,1321],{"class":154},[144,62261,62262,62265,62267,62269,62271],{"class":146,"line":16789},[144,62263,62264],{"class":203},"      padding-bottom",[144,62266,51450],{"class":154},[144,62268,601],{"class":203},[144,62270,51505],{"class":150},[144,62272,1321],{"class":154},[144,62274,62275],{"class":146,"line":16794},[144,62276,2217],{"class":154},[144,62278,62279],{"class":146,"line":16800},[144,62280,2430],{"emptyLinePlaceholder":72},[144,62282,62283,62285,62287,62289],{"class":146,"line":16814},[144,62284,62136],{"class":1993},[144,62286,62187],{"class":1993},[144,62288,6856],{"class":51313},[144,62290,15603],{"class":154},[144,62292,62293,62295,62297,62299],{"class":146,"line":16827},[144,62294,54719],{"class":203},[144,62296,51450],{"class":154},[144,62298,346],{"class":203},[144,62300,1321],{"class":154},[144,62302,62303],{"class":146,"line":16832},[144,62304,2217],{"class":154},[144,62306,62307],{"class":146,"line":16846},[144,62308,2430],{"emptyLinePlaceholder":72},[144,62310,62311,62313,62315,62318],{"class":146,"line":16851},[144,62312,62136],{"class":1993},[144,62314,62187],{"class":1993},[144,62316,62317],{"class":1993}," .name",[144,62319,15603],{"class":154},[144,62321,62322,62324,62326,62329],{"class":146,"line":16857},[144,62323,57429],{"class":203},[144,62325,51450],{"class":154},[144,62327,62328],{"class":203},"#FB7299",[144,62330,1321],{"class":154},[144,62332,62333,62335,62337,62339,62341],{"class":146,"line":16862},[144,62334,54935],{"class":203},[144,62336,51450],{"class":154},[144,62338,704],{"class":203},[144,62340,51505],{"class":150},[144,62342,1321],{"class":154},[144,62344,62345,62348,62350,62353],{"class":146,"line":16876},[144,62346,62347],{"class":203},"      font-weight",[144,62349,51450],{"class":154},[144,62351,62352],{"class":203},"bold",[144,62354,1321],{"class":154},[144,62356,62357],{"class":146,"line":16881},[144,62358,2217],{"class":154},[144,62360,62361],{"class":146,"line":16886},[144,62362,2430],{"emptyLinePlaceholder":72},[144,62364,62365,62367,62369,62372],{"class":146,"line":16900},[144,62366,62136],{"class":1993},[144,62368,62187],{"class":1993},[144,62370,62371],{"class":1993}," .text",[144,62373,15603],{"class":154},[144,62375,62376,62378,62380,62383],{"class":146,"line":16912},[144,62377,57429],{"class":203},[144,62379,51450],{"class":154},[144,62381,62382],{"class":203},"#333",[144,62384,1321],{"class":154},[144,62386,62387,62389,62391,62393,62395,62397],{"class":146,"line":16917},[144,62388,54708],{"class":203},[144,62390,51450],{"class":154},[144,62392,601],{"class":203},[144,62394,51505],{"class":150},[144,62396,4123],{"class":203},[144,62398,1321],{"class":154},[144,62400,62401],{"class":146,"line":16930},[144,62402,2217],{"class":154},[144,62404,62405],{"class":146,"line":16935},[144,62406,2430],{"emptyLinePlaceholder":72},[144,62408,62409,62411,62413,62416],{"class":146,"line":16940},[144,62410,62136],{"class":1993},[144,62412,62187],{"class":1993},[144,62414,62415],{"class":1993}," .time",[144,62417,15603],{"class":154},[144,62419,62420,62422,62424,62426],{"class":146,"line":16945},[144,62421,57429],{"class":203},[144,62423,51450],{"class":154},[144,62425,62083],{"class":203},[144,62427,1321],{"class":154},[144,62429,62430,62432,62434,62436,62438],{"class":146,"line":16958},[144,62431,54935],{"class":203},[144,62433,51450],{"class":154},[144,62435,653],{"class":203},[144,62437,51505],{"class":150},[144,62439,1321],{"class":154},[144,62441,62442],{"class":146,"line":16963},[144,62443,2217],{"class":154},[144,62445,62446,62448,62450],{"class":146,"line":32646},[144,62447,52430],{"class":154},[144,62449,5157],{"class":51313},[144,62451,51320],{"class":154},[144,62453,62454,62456,62458],{"class":146,"line":32652},[144,62455,51798],{"class":154},[144,62457,51347],{"class":51313},[144,62459,51320],{"class":154},[144,62461,62462],{"class":146,"line":32658},[144,62463,2430],{"emptyLinePlaceholder":72},[144,62465,62466,62468,62470],{"class":146,"line":32664},[144,62467,1065],{"class":154},[144,62469,51813],{"class":51313},[144,62471,51320],{"class":154},[144,62473,62474,62476,62478,62480,62482,62485],{"class":146,"line":32670},[144,62475,52157],{"class":154},[144,62477,51624],{"class":51313},[144,62479,53499],{"class":1993},[144,62481,200],{"class":154},[144,62483,62484],{"class":259},"\"wrapper\"",[144,62486,51320],{"class":154},[144,62488,62489,62491,62493,62495,62497,62500,62502,62504],{"class":146,"line":32681},[144,62490,51354],{"class":154},[144,62492,596],{"class":51313},[144,62494,53499],{"class":1993},[144,62496,200],{"class":154},[144,62498,62499],{"class":259},"\"avatar\"",[144,62501,55327],{"class":154},[144,62503,596],{"class":51313},[144,62505,51320],{"class":154},[144,62507,62508,62510,62512,62514,62516,62519,62521,62523,62526,62528,62530,62532,62535,62537,62540,62542,62544],{"class":146,"line":32687},[144,62509,51354],{"class":154},[144,62511,54301],{"class":51313},[144,62513,14990],{"class":1993},[144,62515,200],{"class":154},[144,62517,62518],{"class":259},"\"tx\"",[144,62520,61033],{"class":1993},[144,62522,200],{"class":154},[144,62524,62525],{"class":259},"\"发一条友善的评论\"",[144,62527,54324],{"class":1993},[144,62529,200],{"class":154},[144,62531,3731],{"class":259},[144,62533,62534],{"class":1993}," maxlength",[144,62536,200],{"class":154},[144,62538,62539],{"class":259},"\"200\"",[144,62541,55327],{"class":154},[144,62543,54301],{"class":51313},[144,62545,51320],{"class":154},[144,62547,62548,62550,62552,62555,62557],{"class":146,"line":32707},[144,62549,51354],{"class":154},[144,62551,53900],{"class":51313},[144,62553,62554],{"class":154},">发布\u003C\u002F",[144,62556,53900],{"class":51313},[144,62558,51320],{"class":154},[144,62560,62561,62563,62565],{"class":146,"line":32713},[144,62562,52430],{"class":154},[144,62564,51624],{"class":51313},[144,62566,51320],{"class":154},[144,62568,62569,62571,62573,62575,62577,62579],{"class":146,"line":32724},[144,62570,52157],{"class":154},[144,62572,51624],{"class":51313},[144,62574,53499],{"class":1993},[144,62576,200],{"class":154},[144,62578,62484],{"class":259},[144,62580,51320],{"class":154},[144,62582,62583,62585,62587,62589,62591,62594,62597,62599],{"class":146,"line":32730},[144,62584,51354],{"class":154},[144,62586,144],{"class":51313},[144,62588,53499],{"class":1993},[144,62590,200],{"class":154},[144,62592,62593],{"class":259},"\"total\"",[144,62595,62596],{"class":154},">0\u002F200字\u003C\u002F",[144,62598,144],{"class":51313},[144,62600,51320],{"class":154},[144,62602,62603,62605,62607],{"class":146,"line":32736},[144,62604,52430],{"class":154},[144,62606,51624],{"class":51313},[144,62608,51320],{"class":154},[144,62610,62611,62613,62615,62617,62619,62622],{"class":146,"line":32742},[144,62612,52157],{"class":154},[144,62614,51624],{"class":51313},[144,62616,53499],{"class":1993},[144,62618,200],{"class":154},[144,62620,62621],{"class":259},"\"list\"",[144,62623,51320],{"class":154},[144,62625,62626,62628,62630,62632,62634,62637,62640,62642,62645],{"class":146,"line":32748},[144,62627,51354],{"class":154},[144,62629,51624],{"class":51313},[144,62631,53499],{"class":1993},[144,62633,200],{"class":154},[144,62635,62636],{"class":259},"\"item\"",[144,62638,62639],{"class":1993}," style",[144,62641,200],{"class":154},[144,62643,62644],{"class":259},"\"display: none;\"",[144,62646,51320],{"class":154},[144,62648,62649,62651,62653,62655,62657,62659,62661,62663],{"class":146,"line":32754},[144,62650,55247],{"class":154},[144,62652,596],{"class":51313},[144,62654,53499],{"class":1993},[144,62656,200],{"class":154},[144,62658,62499],{"class":259},[144,62660,55327],{"class":154},[144,62662,596],{"class":51313},[144,62664,51320],{"class":154},[144,62666,62667,62669,62671,62673,62675,62678],{"class":146,"line":32760},[144,62668,55247],{"class":154},[144,62670,51624],{"class":51313},[144,62672,53499],{"class":1993},[144,62674,200],{"class":154},[144,62676,62677],{"class":259},"\"info\"",[144,62679,51320],{"class":154},[144,62681,62682,62684,62686,62688,62690,62693,62696,62698],{"class":146,"line":32766},[144,62683,55315],{"class":154},[144,62685,14],{"class":51313},[144,62687,53499],{"class":1993},[144,62689,200],{"class":154},[144,62691,62692],{"class":259},"\"name\"",[144,62694,62695],{"class":154},">清风徐来\u003C\u002F",[144,62697,14],{"class":51313},[144,62699,51320],{"class":154},[144,62701,62702,62704,62706,62708,62710,62713,62716,62718],{"class":146,"line":32786},[144,62703,55315],{"class":154},[144,62705,14],{"class":51313},[144,62707,53499],{"class":1993},[144,62709,200],{"class":154},[144,62711,62712],{"class":259},"\"text\"",[144,62714,62715],{"class":154},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[144,62717,14],{"class":51313},[144,62719,51320],{"class":154},[144,62721,62722,62724,62726,62728,62730,62733,62736,62738],{"class":146,"line":32792},[144,62723,55315],{"class":154},[144,62725,14],{"class":51313},[144,62727,53499],{"class":1993},[144,62729,200],{"class":154},[144,62731,62732],{"class":259},"\"time\"",[144,62734,62735],{"class":154},">2022-10-10 20:29:21\u003C\u002F",[144,62737,14],{"class":51313},[144,62739,51320],{"class":154},[144,62741,62742,62744,62746],{"class":146,"line":32808},[144,62743,55420],{"class":154},[144,62745,51624],{"class":51313},[144,62747,51320],{"class":154},[144,62749,62750,62752,62754],{"class":146,"line":32814},[144,62751,51789],{"class":154},[144,62753,51624],{"class":51313},[144,62755,51320],{"class":154},[144,62757,62758,62760,62762],{"class":146,"line":32828},[144,62759,52430],{"class":154},[144,62761,51624],{"class":51313},[144,62763,51320],{"class":154},[144,62765,62766,62768,62770],{"class":146,"line":32834},[144,62767,52157],{"class":154},[144,62769,51826],{"class":51313},[144,62771,51320],{"class":154},[144,62773,62774,62776,62779,62781,62783,62785,62787,62790],{"class":146,"line":32849},[144,62775,11252],{"class":150},[144,62777,62778],{"class":203}," tx",[144,62780,13595],{"class":150},[144,62782,54409],{"class":154},[144,62784,54412],{"class":1993},[144,62786,155],{"class":154},[144,62788,62789],{"class":259},"'#tx'",[144,62791,161],{"class":154},[144,62793,62794,62796,62799,62801,62803,62805,62807,62810],{"class":146,"line":32855},[144,62795,11252],{"class":150},[144,62797,62798],{"class":203}," total",[144,62800,13595],{"class":150},[144,62802,54409],{"class":154},[144,62804,54412],{"class":1993},[144,62806,155],{"class":154},[144,62808,62809],{"class":259},"'.total'",[144,62811,161],{"class":154},[144,62813,62814],{"class":146,"line":32864},[144,62815,62816],{"class":213},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[144,62818,62819,62822,62824,62826,62828,62830,62832],{"class":146,"line":32870},[144,62820,62821],{"class":154},"    tx.",[144,62823,57826],{"class":1993},[144,62825,155],{"class":154},[144,62827,61340],{"class":259},[144,62829,12466],{"class":154},[144,62831,54462],{"class":150},[144,62833,54465],{"class":154},[144,62835,62836,62839,62841],{"class":146,"line":32879},[144,62837,62838],{"class":154},"      total.style.opacity ",[144,62840,200],{"class":150},[144,62842,55712],{"class":203},[144,62844,62845],{"class":146,"line":32885},[144,62846,33474],{"class":154},[144,62848,62849],{"class":146,"line":32891},[144,62850,62851],{"class":213},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[144,62853,62854,62856,62858,62860,62862,62864,62866],{"class":146,"line":32900},[144,62855,62821],{"class":154},[144,62857,57826],{"class":1993},[144,62859,155],{"class":154},[144,62861,61401],{"class":259},[144,62863,12466],{"class":154},[144,62865,54462],{"class":150},[144,62867,54465],{"class":154},[144,62869,62870,62872,62874],{"class":146,"line":32906},[144,62871,62838],{"class":154},[144,62873,200],{"class":150},[144,62875,47346],{"class":203},[144,62877,62878],{"class":146,"line":32917},[144,62879,33474],{"class":154},[144,62881,62882],{"class":146,"line":32923},[144,62883,62884],{"class":213},"    \u002F\u002F 3. 检测用户输入\n",[144,62886,62887,62889,62891,62893,62896,62898,62900],{"class":146,"line":32942},[144,62888,62821],{"class":154},[144,62890,57826],{"class":1993},[144,62892,155],{"class":154},[144,62894,62895],{"class":259},"'input'",[144,62897,12466],{"class":154},[144,62899,54462],{"class":150},[144,62901,54465],{"class":154},[144,62903,62904],{"class":146,"line":32948},[144,62905,62906],{"class":213},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[144,62908,62909,62912,62914,62917,62920,62922,62925,62927,62929],{"class":146,"line":32959},[144,62910,62911],{"class":154},"      total.innerHTML ",[144,62913,200],{"class":150},[144,62915,62916],{"class":259}," `${",[144,62918,62919],{"class":154},"tx",[144,62921,713],{"class":259},[144,62923,62924],{"class":154},"value",[144,62926,713],{"class":259},[144,62928,51981],{"class":203},[144,62930,62931],{"class":259},"}\u002F200字`\n",[144,62933,62934],{"class":146,"line":32965},[144,62935,33474],{"class":154},[144,62937,62938],{"class":146,"line":32985},[144,62939,2430],{"emptyLinePlaceholder":72},[144,62941,62942],{"class":146,"line":33001},[144,62943,62944],{"class":213},"    \u002F\u002F const str = 'andy'\n",[144,62946,62947],{"class":146,"line":33007},[144,62948,62949],{"class":213},"    \u002F\u002F console.log(str.length)\n",[144,62951,62952,62954,62956],{"class":146,"line":33021},[144,62953,52430],{"class":154},[144,62955,51826],{"class":51313},[144,62957,51320],{"class":154},[144,62959,62960,62962,62964],{"class":146,"line":33027},[144,62961,51798],{"class":154},[144,62963,51813],{"class":51313},[144,62965,51320],{"class":154},[144,62967,62968],{"class":146,"line":33033},[144,62969,2430],{"emptyLinePlaceholder":72},[144,62971,62972,62974,62976],{"class":146,"line":33044},[144,62973,51798],{"class":154},[144,62975,50648],{"class":51313},[144,62977,51320],{"class":154},[22029,62979,62981],{"id":62980},"_3254-change事件","3.2.5.4 change事件",[14,62983,62984],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,62986,62987],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,62989,62990],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[135,62992,62994],{"className":50646,"code":62993,"language":50648,"meta":30,"style":30},"\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",[141,62995,62996,63006,63020,63024,63032,63046,63066,63078,63086,63090,63098,63112,63120,63138,63156,63168,63172,63180,63188,63192],{"__ignoreMap":30},[144,62997,62998,63000,63002,63004],{"class":146,"line":147},[144,62999,51310],{"class":154},[144,63001,51314],{"class":51313},[144,63003,51317],{"class":1993},[144,63005,51320],{"class":154},[144,63007,63008,63010,63012,63014,63016,63018],{"class":146,"line":66},[144,63009,1065],{"class":154},[144,63011,50648],{"class":51313},[144,63013,51329],{"class":1993},[144,63015,200],{"class":154},[144,63017,51334],{"class":259},[144,63019,51320],{"class":154},[144,63021,63022],{"class":146,"line":1210},[144,63023,2430],{"emptyLinePlaceholder":72},[144,63025,63026,63028,63030],{"class":146,"line":1225},[144,63027,1065],{"class":154},[144,63029,51347],{"class":51313},[144,63031,51320],{"class":154},[144,63033,63034,63036,63038,63040,63042,63044],{"class":146,"line":1231},[144,63035,52157],{"class":154},[144,63037,51357],{"class":51313},[144,63039,51360],{"class":1993},[144,63041,200],{"class":154},[144,63043,51365],{"class":259},[144,63045,51320],{"class":154},[144,63047,63048,63050,63052,63054,63056,63058,63060,63062,63064],{"class":146,"line":1245},[144,63049,52157],{"class":154},[144,63051,51357],{"class":51313},[144,63053,14951],{"class":1993},[144,63055,200],{"class":154},[144,63057,51404],{"class":259},[144,63059,51384],{"class":1993},[144,63061,200],{"class":154},[144,63063,51411],{"class":259},[144,63065,51320],{"class":154},[144,63067,63068,63070,63072,63074,63076],{"class":146,"line":1251},[144,63069,52157],{"class":154},[144,63071,51420],{"class":51313},[144,63073,51423],{"class":154},[144,63075,51420],{"class":51313},[144,63077,51320],{"class":154},[144,63079,63080,63082,63084],{"class":146,"line":1342},[144,63081,51798],{"class":154},[144,63083,51347],{"class":51313},[144,63085,51320],{"class":154},[144,63087,63088],{"class":146,"line":1348},[144,63089,2430],{"emptyLinePlaceholder":72},[144,63091,63092,63094,63096],{"class":146,"line":1360},[144,63093,1065],{"class":154},[144,63095,51813],{"class":51313},[144,63097,51320],{"class":154},[144,63099,63100,63102,63104,63106,63108,63110],{"class":146,"line":1642},[144,63101,52157],{"class":154},[144,63103,53834],{"class":51313},[144,63105,53837],{"class":1993},[144,63107,200],{"class":154},[144,63109,62712],{"class":259},[144,63111,51320],{"class":154},[144,63113,63114,63116,63118],{"class":146,"line":1647},[144,63115,52157],{"class":154},[144,63117,51826],{"class":51313},[144,63119,51320],{"class":154},[144,63121,63122,63124,63126,63128,63130,63132,63134,63136],{"class":146,"line":1653},[144,63123,11252],{"class":150},[144,63125,60618],{"class":203},[144,63127,13595],{"class":150},[144,63129,54409],{"class":154},[144,63131,54412],{"class":1993},[144,63133,155],{"class":154},[144,63135,62895],{"class":259},[144,63137,161],{"class":154},[144,63139,63140,63143,63145,63147,63150,63152,63154],{"class":146,"line":1658},[144,63141,63142],{"class":154},"    input.",[144,63144,57826],{"class":1993},[144,63146,155],{"class":154},[144,63148,63149],{"class":259},"'change'",[144,63151,12466],{"class":154},[144,63153,54462],{"class":150},[144,63155,54465],{"class":154},[144,63157,63158,63160,63162,63164,63166],{"class":146,"line":1672},[144,63159,58257],{"class":154},[144,63161,58260],{"class":1993},[144,63163,155],{"class":154},[144,63165,748],{"class":203},[144,63167,161],{"class":154},[144,63169,63170],{"class":146,"line":1677},[144,63171,33474],{"class":154},[144,63173,63174,63176,63178],{"class":146,"line":1683},[144,63175,52430],{"class":154},[144,63177,51826],{"class":51313},[144,63179,51320],{"class":154},[144,63181,63182,63184,63186],{"class":146,"line":1704},[144,63183,51798],{"class":154},[144,63185,51813],{"class":51313},[144,63187,51320],{"class":154},[144,63189,63190],{"class":146,"line":1709},[144,63191,2430],{"emptyLinePlaceholder":72},[144,63193,63194,63196,63198],{"class":146,"line":1723},[144,63195,51798],{"class":154},[144,63197,50648],{"class":51313},[144,63199,51320],{"class":154},[14,63201,63202],{},"总结：内容发生改变才回去触发",[115,63204,63206],{"id":63205},"_326-事件对象","3.2.6 事件对象",[22029,63208,63210],{"id":63209},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63212,63213],{},[28,63214],{"alt":30,"src":63215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63217,63218],{},[28,63219],{"alt":30,"src":63220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63222,63223],{},"点击一次，就输出了事件对象，它是个对象",[14,63225,63226],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63228,63229],{},[28,63230],{"alt":30,"src":63231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22029,63233,63235],{"id":63234},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63237,63238],{},[28,63239],{"alt":30,"src":63240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63242,63243],{},"实现按特殊字符才是实现打印输出效果：",[135,63245,63247],{"className":53080,"code":63246,"language":53082,"meta":30,"style":30},"\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",[141,63248,63249,63257,63262,63276,63284,63289,63294,63299,63304,63309,63314,63319,63324,63329,63333,63337,63345],{"__ignoreMap":30},[144,63250,63251,63253,63255],{"class":146,"line":147},[144,63252,1065],{"class":154},[144,63254,51813],{"class":51313},[144,63256,51320],{"class":154},[144,63258,63259],{"class":146,"line":66},[144,63260,63261],{"class":213},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[144,63263,63264,63266,63268,63270,63272,63274],{"class":146,"line":1210},[144,63265,52157],{"class":154},[144,63267,53834],{"class":51313},[144,63269,53837],{"class":1993},[144,63271,200],{"class":154},[144,63273,62712],{"class":259},[144,63275,51320],{"class":154},[144,63277,63278,63280,63282],{"class":146,"line":1225},[144,63279,52157],{"class":154},[144,63281,51826],{"class":51313},[144,63283,51320],{"class":154},[144,63285,63286],{"class":146,"line":1231},[144,63287,63288],{"class":154},"    \u002F\u002F const btn = document.querySelector('button')\n",[144,63290,63291],{"class":146,"line":1245},[144,63292,63293],{"class":154},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[144,63295,63296],{"class":146,"line":1251},[144,63297,63298],{"class":154},"    \u002F\u002F   console.log(e);\n",[144,63300,63301],{"class":146,"line":1342},[144,63302,63303],{"class":154},"    \u002F\u002F })\n",[144,63305,63306],{"class":146,"line":1348},[144,63307,63308],{"class":154},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[144,63310,63311],{"class":146,"line":1360},[144,63312,63313],{"class":154},"    const input = document.querySelector('input')\n",[144,63315,63316],{"class":146,"line":1642},[144,63317,63318],{"class":154},"    input.addEventListener('keyup', function (e) {\n",[144,63320,63321],{"class":146,"line":1647},[144,63322,63323],{"class":154},"      if (e.key === 'Enter') {\n",[144,63325,63326],{"class":146,"line":1653},[144,63327,63328],{"class":154},"        console.log('我按下了回车键')\n",[144,63330,63331],{"class":146,"line":1658},[144,63332,52411],{"class":154},[144,63334,63335],{"class":146,"line":1672},[144,63336,33474],{"class":154},[144,63338,63339,63341,63343],{"class":146,"line":1677},[144,63340,52430],{"class":154},[144,63342,51826],{"class":51313},[144,63344,51320],{"class":154},[144,63346,63347,63349,63351],{"class":146,"line":1683},[144,63348,51798],{"class":154},[144,63350,51813],{"class":51313},[144,63352,51320],{"class":154},[22029,63354,63356],{"id":63355},"_3263-trim方法","3.2.6.3 trim方法",[14,63358,63359],{},[28,63360],{"alt":30,"src":63361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,63363,63364],{},[28,63365],{"alt":30,"src":63366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,63368,63369],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,63371,63372],{},"str.trim()",[115,63374,63376],{"id":63375},"_327-环境对象","3.2.7 环境对象",[14,63378,63379],{},[28,63380],{"alt":30,"src":63381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,63383,63384],{},[28,63385],{"alt":30,"src":63386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,63388,63389],{},[28,63390],{"alt":30,"src":63391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,63393,63394],{},"实际函数调用是window.fn()",[14,63396,63397],{},"普通函数里面this指向的是window",[1162,63399,63400,63403,63406],{},[101,63401,63402],{},"在普通函数下，this指向的是window",[101,63404,63405],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[101,63407,63408],{},"箭头函数没有this",[14,63410,63411],{},"粗略记法就是：谁调用，this就指向谁",[14,63413,63414],{},[28,63415],{"alt":30,"src":63416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,63418,63419],{},[28,63420],{"alt":30,"src":63421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,63423,63424],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,63426,63427],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[135,63429,63431],{"className":53080,"code":63430,"language":53082,"meta":30,"style":30},"\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",[141,63432,63433,63441,63453,63461,63466,63471,63476,63481,63485,63493],{"__ignoreMap":30},[144,63434,63435,63437,63439],{"class":146,"line":147},[144,63436,1065],{"class":154},[144,63438,51813],{"class":51313},[144,63440,51320],{"class":154},[144,63442,63443,63445,63447,63449,63451],{"class":146,"line":66},[144,63444,52157],{"class":154},[144,63446,53900],{"class":51313},[144,63448,53906],{"class":154},[144,63450,53900],{"class":51313},[144,63452,51320],{"class":154},[144,63454,63455,63457,63459],{"class":146,"line":1210},[144,63456,52157],{"class":154},[144,63458,51826],{"class":51313},[144,63460,51320],{"class":154},[144,63462,63463],{"class":146,"line":1225},[144,63464,63465],{"class":154},"    const button = document.querySelector('button')\n",[144,63467,63468],{"class":146,"line":1231},[144,63469,63470],{"class":154},"    button.addEventListener('click', function () {\n",[144,63472,63473],{"class":146,"line":1245},[144,63474,63475],{"class":154},"      \u002F\u002F console.log(this);\n",[144,63477,63478],{"class":146,"line":1251},[144,63479,63480],{"class":154},"      this.style.color = 'pink'\n",[144,63482,63483],{"class":146,"line":1342},[144,63484,33474],{"class":154},[144,63486,63487,63489,63491],{"class":146,"line":1348},[144,63488,52430],{"class":154},[144,63490,51826],{"class":51313},[144,63492,51320],{"class":154},[144,63494,63495,63497,63499],{"class":146,"line":1360},[144,63496,51798],{"class":154},[144,63498,51813],{"class":51313},[144,63500,51320],{"class":154},[115,63502,63504],{"id":63503},"_328-回调函数","3.2.8 回调函数",[14,63506,63507],{},[28,63508],{"alt":30,"src":63509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,63511,63512],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,63514,11363],{},[1162,63516,63517,63520,63523],{},[101,63518,63519],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[101,63521,63522],{},"回调函数本质还是函数，只不过把它当成参数使用",[101,63524,63525],{},"使用匿名函数做为回调函数比较常见",[115,63527,63529],{"id":63528},"_329-tab栏切换","3.2.9 tab栏切换",[14,63531,63532],{},[28,63533],{"alt":30,"src":63534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[135,63536,63538],{"className":50646,"code":63537,"language":50648,"meta":30,"style":30},"\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",[141,63539,63540,63550,63564,63568,63576,63590,63610,63630,63643,63651,63657,63667,63677,63681,63685,63692,63705,63718,63730,63746,63750,63754,63761,63773,63785,63797,63807,63817,63821,63825,63834,63846,63857,63869,63873,63877,63885,63895,63905,63915,63919,63923,63933,63947,63959,63963,63967,63979,63990,64007,64017,64021,64025,64040,64051,64061,64065,64069,64076,64091,64095,64099,64107,64117,64121,64125,64134,64144,64148,64156,64164,64168,64176,64191,64206,64219,64227,64261,64288,64315,64342,64369,64377,64385,64400,64437,64472,64507,64542,64577,64585,64593,64601,64606,64611,64631,64636,64665,64670,64675,64693,64698,64703,64708,64730,64735,64751,64755,64760,64765,64786,64791,64820,64824,64829,64833,64841,64849,64853],{"__ignoreMap":30},[144,63541,63542,63544,63546,63548],{"class":146,"line":147},[144,63543,51310],{"class":154},[144,63545,51314],{"class":51313},[144,63547,51317],{"class":1993},[144,63549,51320],{"class":154},[144,63551,63552,63554,63556,63558,63560,63562],{"class":146,"line":66},[144,63553,1065],{"class":154},[144,63555,50648],{"class":51313},[144,63557,51329],{"class":1993},[144,63559,200],{"class":154},[144,63561,51334],{"class":259},[144,63563,51320],{"class":154},[144,63565,63566],{"class":146,"line":1210},[144,63567,2430],{"emptyLinePlaceholder":72},[144,63569,63570,63572,63574],{"class":146,"line":1225},[144,63571,1065],{"class":154},[144,63573,51347],{"class":51313},[144,63575,51320],{"class":154},[144,63577,63578,63580,63582,63584,63586,63588],{"class":146,"line":1231},[144,63579,52157],{"class":154},[144,63581,51357],{"class":51313},[144,63583,51360],{"class":1993},[144,63585,200],{"class":154},[144,63587,51365],{"class":259},[144,63589,59140],{"class":154},[144,63591,63592,63594,63596,63598,63600,63602,63604,63606,63608],{"class":146,"line":1245},[144,63593,52157],{"class":154},[144,63595,51357],{"class":51313},[144,63597,51376],{"class":1993},[144,63599,200],{"class":154},[144,63601,51381],{"class":259},[144,63603,51384],{"class":1993},[144,63605,200],{"class":154},[144,63607,51389],{"class":259},[144,63609,59140],{"class":154},[144,63611,63612,63614,63616,63618,63620,63622,63624,63626,63628],{"class":146,"line":1251},[144,63613,52157],{"class":154},[144,63615,51357],{"class":51313},[144,63617,14951],{"class":1993},[144,63619,200],{"class":154},[144,63621,51404],{"class":259},[144,63623,51384],{"class":1993},[144,63625,200],{"class":154},[144,63627,51411],{"class":259},[144,63629,59140],{"class":154},[144,63631,63632,63634,63636,63639,63641],{"class":146,"line":1342},[144,63633,52157],{"class":154},[144,63635,51420],{"class":51313},[144,63637,63638],{"class":154},">tab栏切换\u003C\u002F",[144,63640,51420],{"class":51313},[144,63642,51320],{"class":154},[144,63644,63645,63647,63649],{"class":146,"line":1348},[144,63646,52157],{"class":154},[144,63648,5157],{"class":51313},[144,63650,51320],{"class":154},[144,63652,63653,63655],{"class":146,"line":1360},[144,63654,6434],{"class":51313},[144,63656,15603],{"class":154},[144,63658,63659,63661,63663,63665],{"class":146,"line":1642},[144,63660,54719],{"class":203},[144,63662,51450],{"class":154},[144,63664,346],{"class":203},[144,63666,1321],{"class":154},[144,63668,63669,63671,63673,63675],{"class":146,"line":1647},[144,63670,54708],{"class":203},[144,63672,51450],{"class":154},[144,63674,346],{"class":203},[144,63676,1321],{"class":154},[144,63678,63679],{"class":146,"line":1653},[144,63680,2217],{"class":154},[144,63682,63683],{"class":146,"line":1658},[144,63684,2430],{"emptyLinePlaceholder":72},[144,63686,63687,63690],{"class":146,"line":1672},[144,63688,63689],{"class":1993},"    .tab",[144,63691,15603],{"class":154},[144,63693,63694,63696,63698,63701,63703],{"class":146,"line":1677},[144,63695,54784],{"class":203},[144,63697,51450],{"class":154},[144,63699,63700],{"class":203},"590",[144,63702,51505],{"class":150},[144,63704,1321],{"class":154},[144,63706,63707,63709,63711,63714,63716],{"class":146,"line":1683},[144,63708,54798],{"class":203},[144,63710,51450],{"class":154},[144,63712,63713],{"class":203},"340",[144,63715,51505],{"class":150},[144,63717,1321],{"class":154},[144,63719,63720,63722,63724,63726,63728],{"class":146,"line":1704},[144,63721,54719],{"class":203},[144,63723,51450],{"class":154},[144,63725,855],{"class":203},[144,63727,51505],{"class":150},[144,63729,1321],{"class":154},[144,63731,63732,63734,63736,63738,63740,63742,63744],{"class":146,"line":1709},[144,63733,61990],{"class":203},[144,63735,51450],{"class":154},[144,63737,372],{"class":203},[144,63739,51505],{"class":150},[144,63741,51534],{"class":203},[144,63743,62257],{"class":203},[144,63745,1321],{"class":154},[144,63747,63748],{"class":146,"line":1723},[144,63749,2217],{"class":154},[144,63751,63752],{"class":146,"line":1728},[144,63753,2430],{"emptyLinePlaceholder":72},[144,63755,63756,63759],{"class":146,"line":1757},[144,63757,63758],{"class":1993},"    .tab-nav",[144,63760,15603],{"class":154},[144,63762,63763,63765,63767,63769,63771],{"class":146,"line":1762},[144,63764,54784],{"class":203},[144,63766,51450],{"class":154},[144,63768,466],{"class":203},[144,63770,483],{"class":150},[144,63772,1321],{"class":154},[144,63774,63775,63777,63779,63781,63783],{"class":146,"line":1779},[144,63776,54798],{"class":203},[144,63778,51450],{"class":154},[144,63780,1062],{"class":203},[144,63782,51505],{"class":150},[144,63784,1321],{"class":154},[144,63786,63787,63789,63791,63793,63795],{"class":146,"line":1784},[144,63788,57372],{"class":203},[144,63790,51450],{"class":154},[144,63792,1062],{"class":203},[144,63794,51505],{"class":150},[144,63796,1321],{"class":154},[144,63798,63799,63801,63803,63805],{"class":146,"line":1789},[144,63800,55022],{"class":203},[144,63802,51450],{"class":154},[144,63804,51490],{"class":203},[144,63806,1321],{"class":154},[144,63808,63809,63811,63813,63815],{"class":146,"line":1794},[144,63810,55033],{"class":203},[144,63812,51450],{"class":154},[144,63814,51681],{"class":203},[144,63816,1321],{"class":154},[144,63818,63819],{"class":146,"line":1808},[144,63820,2217],{"class":154},[144,63822,63823],{"class":146,"line":1813},[144,63824,2430],{"emptyLinePlaceholder":72},[144,63826,63827,63829,63832],{"class":146,"line":2607},[144,63828,63758],{"class":1993},[144,63830,63831],{"class":51313}," h3",[144,63833,15603],{"class":154},[144,63835,63836,63838,63840,63842,63844],{"class":146,"line":2621},[144,63837,54935],{"class":203},[144,63839,51450],{"class":154},[144,63841,955],{"class":203},[144,63843,51505],{"class":150},[144,63845,1321],{"class":154},[144,63847,63848,63850,63852,63855],{"class":146,"line":2629},[144,63849,62347],{"class":203},[144,63851,51450],{"class":154},[144,63853,63854],{"class":203},"normal",[144,63856,1321],{"class":154},[144,63858,63859,63861,63863,63865,63867],{"class":146,"line":2634},[144,63860,62013],{"class":203},[144,63862,51450],{"class":154},[144,63864,855],{"class":203},[144,63866,51505],{"class":150},[144,63868,1321],{"class":154},[144,63870,63871],{"class":146,"line":2640},[144,63872,2217],{"class":154},[144,63874,63875],{"class":146,"line":2646},[144,63876,2430],{"emptyLinePlaceholder":72},[144,63878,63879,63881,63883],{"class":146,"line":2651},[144,63880,63758],{"class":1993},[144,63882,61305],{"class":51313},[144,63884,15603],{"class":154},[144,63886,63887,63889,63891,63893],{"class":146,"line":7979},[144,63888,54745],{"class":203},[144,63890,51450],{"class":154},[144,63892,54750],{"class":203},[144,63894,1321],{"class":154},[144,63896,63897,63899,63901,63903],{"class":146,"line":8003},[144,63898,55022],{"class":203},[144,63900,51450],{"class":154},[144,63902,51490],{"class":203},[144,63904,1321],{"class":154},[144,63906,63907,63909,63911,63913],{"class":146,"line":8008},[144,63908,55033],{"class":203},[144,63910,51450],{"class":154},[144,63912,51593],{"class":203},[144,63914,1321],{"class":154},[144,63916,63917],{"class":146,"line":8014},[144,63918,2217],{"class":154},[144,63920,63921],{"class":146,"line":8041},[144,63922,2430],{"emptyLinePlaceholder":72},[144,63924,63925,63927,63929,63931],{"class":146,"line":8046},[144,63926,63758],{"class":1993},[144,63928,61305],{"class":51313},[144,63930,55088],{"class":51313},[144,63932,15603],{"class":154},[144,63934,63935,63937,63939,63941,63943,63945],{"class":146,"line":8052},[144,63936,54719],{"class":203},[144,63938,51450],{"class":154},[144,63940,346],{"class":203},[144,63942,8981],{"class":203},[144,63944,51505],{"class":150},[144,63946,1321],{"class":154},[144,63948,63949,63951,63953,63955,63957],{"class":146,"line":8064},[144,63950,54935],{"class":203},[144,63952,51450],{"class":154},[144,63954,704],{"class":203},[144,63956,51505],{"class":150},[144,63958,1321],{"class":154},[144,63960,63961],{"class":146,"line":8076},[144,63962,2217],{"class":154},[144,63964,63965],{"class":146,"line":8088},[144,63966,2430],{"emptyLinePlaceholder":72},[144,63968,63969,63971,63973,63975,63977],{"class":146,"line":9747},[144,63970,63758],{"class":1993},[144,63972,61305],{"class":51313},[144,63974,55088],{"class":51313},[144,63976,1429],{"class":51313},[144,63978,15603],{"class":154},[144,63980,63981,63984,63986,63988],{"class":146,"line":9772},[144,63982,63983],{"class":203},"      text-decoration",[144,63985,51450],{"class":154},[144,63987,54750],{"class":203},[144,63989,1321],{"class":154},[144,63991,63992,63994,63996,63998,64000,64002,64005],{"class":146,"line":9795},[144,63993,62245],{"class":203},[144,63995,51450],{"class":154},[144,63997,232],{"class":203},[144,63999,51505],{"class":150},[144,64001,51534],{"class":203},[144,64003,64004],{"class":203}," transparent",[144,64006,1321],{"class":154},[144,64008,64009,64011,64013,64015],{"class":146,"line":9819},[144,64010,57429],{"class":203},[144,64012,51450],{"class":154},[144,64014,62382],{"class":203},[144,64016,1321],{"class":154},[144,64018,64019],{"class":146,"line":9824},[144,64020,2217],{"class":154},[144,64022,64023],{"class":146,"line":9829},[144,64024,2430],{"emptyLinePlaceholder":72},[144,64026,64027,64029,64031,64033,64035,64038],{"class":146,"line":9834},[144,64028,63758],{"class":1993},[144,64030,61305],{"class":51313},[144,64032,55088],{"class":51313},[144,64034,1429],{"class":51313},[144,64036,64037],{"class":1993},".active",[144,64039,15603],{"class":154},[144,64041,64042,64044,64046,64049],{"class":146,"line":9843},[144,64043,61804],{"class":203},[144,64045,51450],{"class":154},[144,64047,64048],{"class":203},"#e1251b",[144,64050,1321],{"class":154},[144,64052,64053,64055,64057,64059],{"class":146,"line":9848},[144,64054,57429],{"class":203},[144,64056,51450],{"class":154},[144,64058,64048],{"class":203},[144,64060,1321],{"class":154},[144,64062,64063],{"class":146,"line":9854},[144,64064,2217],{"class":154},[144,64066,64067],{"class":146,"line":9875},[144,64068,2430],{"emptyLinePlaceholder":72},[144,64070,64071,64074],{"class":146,"line":9881},[144,64072,64073],{"class":1993},"    .tab-content",[144,64075,15603],{"class":154},[144,64077,64078,64080,64082,64084,64087,64089],{"class":146,"line":9895},[144,64079,54708],{"class":203},[144,64081,51450],{"class":154},[144,64083,346],{"class":203},[144,64085,64086],{"class":203}," 16",[144,64088,51505],{"class":150},[144,64090,1321],{"class":154},[144,64092,64093],{"class":146,"line":9901},[144,64094,2217],{"class":154},[144,64096,64097],{"class":146,"line":9928},[144,64098,2430],{"emptyLinePlaceholder":72},[144,64100,64101,64103,64105],{"class":146,"line":9937},[144,64102,64073],{"class":1993},[144,64104,62187],{"class":1993},[144,64106,15603],{"class":154},[144,64108,64109,64111,64113,64115],{"class":146,"line":9943},[144,64110,55022],{"class":203},[144,64112,51450],{"class":154},[144,64114,54750],{"class":203},[144,64116,1321],{"class":154},[144,64118,64119],{"class":146,"line":9951},[144,64120,2217],{"class":154},[144,64122,64123],{"class":146,"line":9956},[144,64124,2430],{"emptyLinePlaceholder":72},[144,64126,64127,64129,64132],{"class":146,"line":16635},[144,64128,64073],{"class":1993},[144,64130,64131],{"class":1993}," .item.active",[144,64133,15603],{"class":154},[144,64135,64136,64138,64140,64142],{"class":146,"line":16641},[144,64137,55022],{"class":203},[144,64139,51450],{"class":154},[144,64141,60882],{"class":203},[144,64143,1321],{"class":154},[144,64145,64146],{"class":146,"line":16664},[144,64147,2217],{"class":154},[144,64149,64150,64152,64154],{"class":146,"line":16670},[144,64151,52430],{"class":154},[144,64153,5157],{"class":51313},[144,64155,51320],{"class":154},[144,64157,64158,64160,64162],{"class":146,"line":16693},[144,64159,51798],{"class":154},[144,64161,51347],{"class":51313},[144,64163,51320],{"class":154},[144,64165,64166],{"class":146,"line":16707},[144,64167,2430],{"emptyLinePlaceholder":72},[144,64169,64170,64172,64174],{"class":146,"line":16727},[144,64171,1065],{"class":154},[144,64173,51813],{"class":51313},[144,64175,51320],{"class":154},[144,64177,64178,64180,64182,64184,64186,64189],{"class":146,"line":16733},[144,64179,52157],{"class":154},[144,64181,51624],{"class":51313},[144,64183,53499],{"class":1993},[144,64185,200],{"class":154},[144,64187,64188],{"class":259},"\"tab\"",[144,64190,51320],{"class":154},[144,64192,64193,64195,64197,64199,64201,64204],{"class":146,"line":16744},[144,64194,51354],{"class":154},[144,64196,51624],{"class":51313},[144,64198,53499],{"class":1993},[144,64200,200],{"class":154},[144,64202,64203],{"class":259},"\"tab-nav\"",[144,64205,51320],{"class":154},[144,64207,64208,64210,64212,64215,64217],{"class":146,"line":16767},[144,64209,55247],{"class":154},[144,64211,115],{"class":51313},[144,64213,64214],{"class":154},">每日特价\u003C\u002F",[144,64216,115],{"class":51313},[144,64218,51320],{"class":154},[144,64220,64221,64223,64225],{"class":146,"line":16789},[144,64222,55247],{"class":154},[144,64224,1162],{"class":51313},[144,64226,51320],{"class":154},[144,64228,64229,64231,64233,64235,64237,64239,64241,64243,64245,64247,64250,64253,64255,64257,64259],{"class":146,"line":16794},[144,64230,55315],{"class":154},[144,64232,101],{"class":51313},[144,64234,61065],{"class":154},[144,64236,393],{"class":51313},[144,64238,53499],{"class":1993},[144,64240,200],{"class":154},[144,64242,59719],{"class":259},[144,64244,61070],{"class":1993},[144,64246,200],{"class":154},[144,64248,64249],{"class":259},"\"javascript:;\"",[144,64251,64252],{"class":154},">精选\u003C\u002F",[144,64254,393],{"class":51313},[144,64256,55327],{"class":154},[144,64258,101],{"class":51313},[144,64260,51320],{"class":154},[144,64262,64263,64265,64267,64269,64271,64273,64275,64277,64280,64282,64284,64286],{"class":146,"line":16800},[144,64264,55315],{"class":154},[144,64266,101],{"class":51313},[144,64268,61065],{"class":154},[144,64270,393],{"class":51313},[144,64272,61070],{"class":1993},[144,64274,200],{"class":154},[144,64276,64249],{"class":259},[144,64278,64279],{"class":154},">美食\u003C\u002F",[144,64281,393],{"class":51313},[144,64283,55327],{"class":154},[144,64285,101],{"class":51313},[144,64287,51320],{"class":154},[144,64289,64290,64292,64294,64296,64298,64300,64302,64304,64307,64309,64311,64313],{"class":146,"line":16814},[144,64291,55315],{"class":154},[144,64293,101],{"class":51313},[144,64295,61065],{"class":154},[144,64297,393],{"class":51313},[144,64299,61070],{"class":1993},[144,64301,200],{"class":154},[144,64303,64249],{"class":259},[144,64305,64306],{"class":154},">百货\u003C\u002F",[144,64308,393],{"class":51313},[144,64310,55327],{"class":154},[144,64312,101],{"class":51313},[144,64314,51320],{"class":154},[144,64316,64317,64319,64321,64323,64325,64327,64329,64331,64334,64336,64338,64340],{"class":146,"line":16827},[144,64318,55315],{"class":154},[144,64320,101],{"class":51313},[144,64322,61065],{"class":154},[144,64324,393],{"class":51313},[144,64326,61070],{"class":1993},[144,64328,200],{"class":154},[144,64330,64249],{"class":259},[144,64332,64333],{"class":154},">个护\u003C\u002F",[144,64335,393],{"class":51313},[144,64337,55327],{"class":154},[144,64339,101],{"class":51313},[144,64341,51320],{"class":154},[144,64343,64344,64346,64348,64350,64352,64354,64356,64358,64361,64363,64365,64367],{"class":146,"line":16832},[144,64345,55315],{"class":154},[144,64347,101],{"class":51313},[144,64349,61065],{"class":154},[144,64351,393],{"class":51313},[144,64353,61070],{"class":1993},[144,64355,200],{"class":154},[144,64357,64249],{"class":259},[144,64359,64360],{"class":154},">预告\u003C\u002F",[144,64362,393],{"class":51313},[144,64364,55327],{"class":154},[144,64366,101],{"class":51313},[144,64368,51320],{"class":154},[144,64370,64371,64373,64375],{"class":146,"line":16846},[144,64372,55420],{"class":154},[144,64374,1162],{"class":51313},[144,64376,51320],{"class":154},[144,64378,64379,64381,64383],{"class":146,"line":16851},[144,64380,51789],{"class":154},[144,64382,51624],{"class":51313},[144,64384,51320],{"class":154},[144,64386,64387,64389,64391,64393,64395,64398],{"class":146,"line":16857},[144,64388,51354],{"class":154},[144,64390,51624],{"class":51313},[144,64392,53499],{"class":1993},[144,64394,200],{"class":154},[144,64396,64397],{"class":259},"\"tab-content\"",[144,64399,51320],{"class":154},[144,64401,64402,64404,64406,64408,64410,64413,64415,64417,64419,64421,64424,64426,64428,64430,64433,64435],{"class":146,"line":16862},[144,64403,55247],{"class":154},[144,64405,51624],{"class":51313},[144,64407,53499],{"class":1993},[144,64409,200],{"class":154},[144,64411,64412],{"class":259},"\"item active\"",[144,64414,61065],{"class":154},[144,64416,28],{"class":51313},[144,64418,55252],{"class":1993},[144,64420,200],{"class":154},[144,64422,64423],{"class":259},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[144,64425,55260],{"class":1993},[144,64427,200],{"class":154},[144,64429,7683],{"class":259},[144,64431,64432],{"class":154}," \u002F>\u003C\u002F",[144,64434,51624],{"class":51313},[144,64436,51320],{"class":154},[144,64438,64439,64441,64443,64445,64447,64449,64451,64453,64455,64457,64460,64462,64464,64466,64468,64470],{"class":146,"line":16876},[144,64440,55247],{"class":154},[144,64442,51624],{"class":51313},[144,64444,53499],{"class":1993},[144,64446,200],{"class":154},[144,64448,62636],{"class":259},[144,64450,61065],{"class":154},[144,64452,28],{"class":51313},[144,64454,55252],{"class":1993},[144,64456,200],{"class":154},[144,64458,64459],{"class":259},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[144,64461,55260],{"class":1993},[144,64463,200],{"class":154},[144,64465,7683],{"class":259},[144,64467,64432],{"class":154},[144,64469,51624],{"class":51313},[144,64471,51320],{"class":154},[144,64473,64474,64476,64478,64480,64482,64484,64486,64488,64490,64492,64495,64497,64499,64501,64503,64505],{"class":146,"line":16881},[144,64475,55247],{"class":154},[144,64477,51624],{"class":51313},[144,64479,53499],{"class":1993},[144,64481,200],{"class":154},[144,64483,62636],{"class":259},[144,64485,61065],{"class":154},[144,64487,28],{"class":51313},[144,64489,55252],{"class":1993},[144,64491,200],{"class":154},[144,64493,64494],{"class":259},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[144,64496,55260],{"class":1993},[144,64498,200],{"class":154},[144,64500,7683],{"class":259},[144,64502,64432],{"class":154},[144,64504,51624],{"class":51313},[144,64506,51320],{"class":154},[144,64508,64509,64511,64513,64515,64517,64519,64521,64523,64525,64527,64530,64532,64534,64536,64538,64540],{"class":146,"line":16886},[144,64510,55247],{"class":154},[144,64512,51624],{"class":51313},[144,64514,53499],{"class":1993},[144,64516,200],{"class":154},[144,64518,62636],{"class":259},[144,64520,61065],{"class":154},[144,64522,28],{"class":51313},[144,64524,55252],{"class":1993},[144,64526,200],{"class":154},[144,64528,64529],{"class":259},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[144,64531,55260],{"class":1993},[144,64533,200],{"class":154},[144,64535,7683],{"class":259},[144,64537,64432],{"class":154},[144,64539,51624],{"class":51313},[144,64541,51320],{"class":154},[144,64543,64544,64546,64548,64550,64552,64554,64556,64558,64560,64562,64565,64567,64569,64571,64573,64575],{"class":146,"line":16900},[144,64545,55247],{"class":154},[144,64547,51624],{"class":51313},[144,64549,53499],{"class":1993},[144,64551,200],{"class":154},[144,64553,62636],{"class":259},[144,64555,61065],{"class":154},[144,64557,28],{"class":51313},[144,64559,55252],{"class":1993},[144,64561,200],{"class":154},[144,64563,64564],{"class":259},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[144,64566,55260],{"class":1993},[144,64568,200],{"class":154},[144,64570,7683],{"class":259},[144,64572,64432],{"class":154},[144,64574,51624],{"class":51313},[144,64576,51320],{"class":154},[144,64578,64579,64581,64583],{"class":146,"line":16912},[144,64580,51789],{"class":154},[144,64582,51624],{"class":51313},[144,64584,51320],{"class":154},[144,64586,64587,64589,64591],{"class":146,"line":16917},[144,64588,52430],{"class":154},[144,64590,51624],{"class":51313},[144,64592,51320],{"class":154},[144,64594,64595,64597,64599],{"class":146,"line":16930},[144,64596,52157],{"class":154},[144,64598,51826],{"class":51313},[144,64600,51320],{"class":154},[144,64602,64603],{"class":146,"line":16935},[144,64604,64605],{"class":213},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[144,64607,64608],{"class":146,"line":16940},[144,64609,64610],{"class":213},"    \u002F\u002F 1.1 获取 a 元素 \n",[144,64612,64613,64615,64618,64620,64622,64624,64626,64629],{"class":146,"line":16945},[144,64614,11252],{"class":150},[144,64616,64617],{"class":203}," as",[144,64619,13595],{"class":150},[144,64621,54409],{"class":154},[144,64623,55694],{"class":1993},[144,64625,155],{"class":154},[144,64627,64628],{"class":259},"'.tab-nav a'",[144,64630,161],{"class":154},[144,64632,64633],{"class":146,"line":16958},[144,64634,64635],{"class":213},"    \u002F\u002F console.log(as) \n",[144,64637,64638,64640,64642,64644,64646,64648,64650,64652,64654,64657,64659,64661,64663],{"class":146,"line":16963},[144,64639,3231],{"class":150},[144,64641,1688],{"class":154},[144,64643,51860],{"class":150},[144,64645,9469],{"class":154},[144,64647,200],{"class":150},[144,64649,4123],{"class":203},[144,64651,9476],{"class":154},[144,64653,1065],{"class":150},[144,64655,64656],{"class":154}," as.",[144,64658,51981],{"class":203},[144,64660,3244],{"class":154},[144,64662,2322],{"class":150},[144,64664,12473],{"class":154},[144,64666,64667],{"class":146,"line":32646},[144,64668,64669],{"class":213},"      \u002F\u002F console.log(as[i])\n",[144,64671,64672],{"class":146,"line":32652},[144,64673,64674],{"class":213},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[144,64676,64677,64680,64682,64684,64687,64689,64691],{"class":146,"line":32658},[144,64678,64679],{"class":154},"      as[i].",[144,64681,57826],{"class":1993},[144,64683,155],{"class":154},[144,64685,64686],{"class":259},"'mouseenter'",[144,64688,12466],{"class":154},[144,64690,54462],{"class":150},[144,64692,54465],{"class":154},[144,64694,64695],{"class":146,"line":32664},[144,64696,64697],{"class":213},"        \u002F\u002F console.log('鼠标经过')\n",[144,64699,64700],{"class":146,"line":32670},[144,64701,64702],{"class":213},"        \u002F\u002F 排他思想  \n",[144,64704,64705],{"class":146,"line":32681},[144,64706,64707],{"class":213},"        \u002F\u002F 干掉别人 移除类active\n",[144,64709,64710,64712,64714,64716,64719,64721,64723,64725,64728],{"class":146,"line":32687},[144,64711,51938],{"class":154},[144,64713,54412],{"class":1993},[144,64715,155],{"class":154},[144,64717,64718],{"class":259},"'.tab-nav .active'",[144,64720,57016],{"class":154},[144,64722,57019],{"class":1993},[144,64724,155],{"class":154},[144,64726,64727],{"class":259},"'active'",[144,64729,161],{"class":154},[144,64731,64732],{"class":146,"line":32707},[144,64733,64734],{"class":213},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[144,64736,64737,64740,64743,64745,64747,64749],{"class":146,"line":32713},[144,64738,64739],{"class":203},"        this",[144,64741,64742],{"class":154},".classList.",[144,64744,5365],{"class":1993},[144,64746,155],{"class":154},[144,64748,64727],{"class":259},[144,64750,161],{"class":154},[144,64752,64753],{"class":146,"line":32724},[144,64754,2430],{"emptyLinePlaceholder":72},[144,64756,64757],{"class":146,"line":32730},[144,64758,64759],{"class":213},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[144,64761,64762],{"class":146,"line":32736},[144,64763,64764],{"class":213},"        \u002F\u002F 干掉别人\n",[144,64766,64767,64769,64771,64773,64776,64778,64780,64782,64784],{"class":146,"line":32742},[144,64768,51938],{"class":154},[144,64770,54412],{"class":1993},[144,64772,155],{"class":154},[144,64774,64775],{"class":259},"'.tab-content .active'",[144,64777,57016],{"class":154},[144,64779,57019],{"class":1993},[144,64781,155],{"class":154},[144,64783,64727],{"class":259},[144,64785,161],{"class":154},[144,64787,64788],{"class":146,"line":32748},[144,64789,64790],{"class":213},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[144,64792,64793,64795,64797,64799,64802,64804,64806,64808,64810,64812,64814,64816,64818],{"class":146,"line":32754},[144,64794,51938],{"class":154},[144,64796,54412],{"class":1993},[144,64798,155],{"class":154},[144,64800,64801],{"class":259},"`.tab-content .item:nth-child(${",[144,64803,596],{"class":154},[144,64805,45579],{"class":150},[144,64807,25131],{"class":203},[144,64809,57045],{"class":259},[144,64811,57016],{"class":154},[144,64813,5365],{"class":1993},[144,64815,155],{"class":154},[144,64817,64727],{"class":259},[144,64819,161],{"class":154},[144,64821,64822],{"class":146,"line":32760},[144,64823,2430],{"emptyLinePlaceholder":72},[144,64825,64826],{"class":146,"line":32766},[144,64827,64828],{"class":154},"      })\n",[144,64830,64831],{"class":146,"line":32786},[144,64832,2217],{"class":154},[144,64834,64835,64837,64839],{"class":146,"line":32792},[144,64836,52430],{"class":154},[144,64838,51826],{"class":51313},[144,64840,51320],{"class":154},[144,64842,64843,64845,64847],{"class":146,"line":32808},[144,64844,51798],{"class":154},[144,64846,51813],{"class":51313},[144,64848,51320],{"class":154},[144,64850,64851],{"class":146,"line":32814},[144,64852,2430],{"emptyLinePlaceholder":72},[144,64854,64855,64857,64859],{"class":146,"line":32828},[144,64856,51798],{"class":154},[144,64858,50648],{"class":51313},[144,64860,51320],{"class":154},[14,64862,64863],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,64865,64866],{},"在监听事件中，this指向的就是他的调用者",[14,64868,64869],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,64871,53733],{},[14,64873,64874],{},"(function () {",[14,64876,64877],{},"const list = document.querySelector('.xtx-elevator-list')",[14,64879,64880],{},"list.addEventListener('click', function (e) {",[14,64882,64883],{},"if (e.target.tagName === 'A') {",[14,64885,64886],{},"\u002F\u002F 排他思想",[14,64888,64889],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,64891,64892],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,64894,64895],{},"\u002F\u002F console.log(old);",[14,64897,64898],{},"\u002F\u002F 判断",[14,64900,64901],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,64903,64904],{},"if (old) old.classList.remove('active')",[14,64906,64907],{},"e.target.classList.add('active')",[14,64909,1101],{},[14,64911,52477],{},[14,64913,64914],{},"})();",[115,64916,64918],{"id":64917},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[135,64920,64922],{"className":50646,"code":64921,"language":50648,"meta":30,"style":30},"\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",[141,64923,64924,64934,64938,64946,64950,64964,64978,64990,64998,65004,65014,65024,65028,65032,65039,65051,65062,65079,65092,65106,65116,65120,65124,65131,65142,65160,65170,65182,65186,65190,65197,65214,65225,65237,65241,65245,65252,65264,65268,65276,65284,65288,65296,65304,65312,65327,65371,65379,65392,65405,65418,65426,65434,65442,65470,65478,65490,65503,65516,65524,65532,65540,65566,65574,65587,65599,65612,65620,65628,65636,65662,65670,65683,65695,65708,65716,65724,65732,65737,65757,65762,65782,65787,65804,65809,65817,65822,65851,65864,65868,65872,65877,65881,65909,65914,65931,65936,65941,65946,65951,65977,65981,65985,65993,66001,66005],{"__ignoreMap":30},[144,64925,64926,64928,64930,64932],{"class":146,"line":147},[144,64927,51310],{"class":154},[144,64929,51314],{"class":51313},[144,64931,51317],{"class":1993},[144,64933,51320],{"class":154},[144,64935,64936],{"class":146,"line":66},[144,64937,2430],{"emptyLinePlaceholder":72},[144,64939,64940,64942,64944],{"class":146,"line":1210},[144,64941,1065],{"class":154},[144,64943,50648],{"class":51313},[144,64945,51320],{"class":154},[144,64947,64948],{"class":146,"line":1225},[144,64949,2430],{"emptyLinePlaceholder":72},[144,64951,64952,64954,64956,64958,64960,64962],{"class":146,"line":1231},[144,64953,1065],{"class":154},[144,64955,51347],{"class":51313},[144,64957,51329],{"class":1993},[144,64959,200],{"class":154},[144,64961,51334],{"class":259},[144,64963,51320],{"class":154},[144,64965,64966,64968,64970,64972,64974,64976],{"class":146,"line":1245},[144,64967,52157],{"class":154},[144,64969,51357],{"class":51313},[144,64971,51360],{"class":1993},[144,64973,200],{"class":154},[144,64975,51365],{"class":259},[144,64977,51320],{"class":154},[144,64979,64980,64982,64984,64986,64988],{"class":146,"line":1251},[144,64981,52157],{"class":154},[144,64983,51420],{"class":51313},[144,64985,55327],{"class":154},[144,64987,51420],{"class":51313},[144,64989,51320],{"class":154},[144,64991,64992,64994,64996],{"class":146,"line":1342},[144,64993,52157],{"class":154},[144,64995,5157],{"class":51313},[144,64997,51320],{"class":154},[144,64999,65000,65002],{"class":146,"line":1348},[144,65001,6434],{"class":51313},[144,65003,15603],{"class":154},[144,65005,65006,65008,65010,65012],{"class":146,"line":1360},[144,65007,54719],{"class":203},[144,65009,51450],{"class":154},[144,65011,346],{"class":203},[144,65013,1321],{"class":154},[144,65015,65016,65018,65020,65022],{"class":146,"line":1642},[144,65017,54708],{"class":203},[144,65019,51450],{"class":154},[144,65021,346],{"class":203},[144,65023,1321],{"class":154},[144,65025,65026],{"class":146,"line":1647},[144,65027,2217],{"class":154},[144,65029,65030],{"class":146,"line":1653},[144,65031,2430],{"emptyLinePlaceholder":72},[144,65033,65034,65037],{"class":146,"line":1658},[144,65035,65036],{"class":51313},"    table",[144,65038,15603],{"class":154},[144,65040,65041,65044,65046,65049],{"class":146,"line":1672},[144,65042,65043],{"class":203},"      border-collapse",[144,65045,51450],{"class":154},[144,65047,65048],{"class":203},"collapse",[144,65050,1321],{"class":154},[144,65052,65053,65056,65058,65060],{"class":146,"line":1677},[144,65054,65055],{"class":203},"      border-spacing",[144,65057,51450],{"class":154},[144,65059,346],{"class":203},[144,65061,1321],{"class":154},[144,65063,65064,65066,65068,65070,65072,65074,65077],{"class":146,"line":1683},[144,65065,61990],{"class":203},[144,65067,51450],{"class":154},[144,65069,372],{"class":203},[144,65071,51505],{"class":150},[144,65073,51534],{"class":203},[144,65075,65076],{"class":203}," #c0c0c0",[144,65078,1321],{"class":154},[144,65080,65081,65083,65085,65088,65090],{"class":146,"line":1704},[144,65082,54784],{"class":203},[144,65084,51450],{"class":154},[144,65086,65087],{"class":203},"500",[144,65089,51505],{"class":150},[144,65091,1321],{"class":154},[144,65093,65094,65096,65098,65100,65102,65104],{"class":146,"line":1709},[144,65095,54719],{"class":203},[144,65097,51450],{"class":154},[144,65099,466],{"class":203},[144,65101,51505],{"class":150},[144,65103,51569],{"class":203},[144,65105,1321],{"class":154},[144,65107,65108,65110,65112,65114],{"class":146,"line":1723},[144,65109,57299],{"class":203},[144,65111,51450],{"class":154},[144,65113,51605],{"class":203},[144,65115,1321],{"class":154},[144,65117,65118],{"class":146,"line":1728},[144,65119,2217],{"class":154},[144,65121,65122],{"class":146,"line":1757},[144,65123,2430],{"emptyLinePlaceholder":72},[144,65125,65126,65129],{"class":146,"line":1762},[144,65127,65128],{"class":51313},"    th",[144,65130,15603],{"class":154},[144,65132,65133,65135,65137,65140],{"class":146,"line":1779},[144,65134,54897],{"class":203},[144,65136,51450],{"class":154},[144,65138,65139],{"class":203},"#09c",[144,65141,1321],{"class":154},[144,65143,65144,65147,65149,65151,65153,65155,65158],{"class":146,"line":1784},[144,65145,65146],{"class":203},"      font",[144,65148,51450],{"class":154},[144,65150,62352],{"class":203},[144,65152,64086],{"class":203},[144,65154,51505],{"class":150},[144,65156,65157],{"class":259}," \"微软雅黑\"",[144,65159,1321],{"class":154},[144,65161,65162,65164,65166,65168],{"class":146,"line":1789},[144,65163,57429],{"class":203},[144,65165,51450],{"class":154},[144,65167,60855],{"class":203},[144,65169,1321],{"class":154},[144,65171,65172,65174,65176,65178,65180],{"class":146,"line":1794},[144,65173,54798],{"class":203},[144,65175,51450],{"class":154},[144,65177,955],{"class":203},[144,65179,51505],{"class":150},[144,65181,1321],{"class":154},[144,65183,65184],{"class":146,"line":1808},[144,65185,2217],{"class":154},[144,65187,65188],{"class":146,"line":1813},[144,65189,2430],{"emptyLinePlaceholder":72},[144,65191,65192,65195],{"class":146,"line":2607},[144,65193,65194],{"class":51313},"    td",[144,65196,15603],{"class":154},[144,65198,65199,65201,65203,65205,65207,65209,65212],{"class":146,"line":2621},[144,65200,61990],{"class":203},[144,65202,51450],{"class":154},[144,65204,372],{"class":203},[144,65206,51505],{"class":150},[144,65208,51534],{"class":203},[144,65210,65211],{"class":203}," #d0d0d0",[144,65213,1321],{"class":154},[144,65215,65216,65218,65220,65223],{"class":146,"line":2629},[144,65217,57429],{"class":203},[144,65219,51450],{"class":154},[144,65221,65222],{"class":203},"#404060",[144,65224,1321],{"class":154},[144,65226,65227,65229,65231,65233,65235],{"class":146,"line":2634},[144,65228,54708],{"class":203},[144,65230,51450],{"class":154},[144,65232,601],{"class":203},[144,65234,51505],{"class":150},[144,65236,1321],{"class":154},[144,65238,65239],{"class":146,"line":2640},[144,65240,2217],{"class":154},[144,65242,65243],{"class":146,"line":2646},[144,65244,2430],{"emptyLinePlaceholder":72},[144,65246,65247,65250],{"class":146,"line":2651},[144,65248,65249],{"class":1993},"    .allCheck",[144,65251,15603],{"class":154},[144,65253,65254,65256,65258,65260,65262],{"class":146,"line":7979},[144,65255,54784],{"class":203},[144,65257,51450],{"class":154},[144,65259,767],{"class":203},[144,65261,51505],{"class":150},[144,65263,1321],{"class":154},[144,65265,65266],{"class":146,"line":8003},[144,65267,2217],{"class":154},[144,65269,65270,65272,65274],{"class":146,"line":8008},[144,65271,52430],{"class":154},[144,65273,5157],{"class":51313},[144,65275,51320],{"class":154},[144,65277,65278,65280,65282],{"class":146,"line":8014},[144,65279,51798],{"class":154},[144,65281,51347],{"class":51313},[144,65283,51320],{"class":154},[144,65285,65286],{"class":146,"line":8041},[144,65287,2430],{"emptyLinePlaceholder":72},[144,65289,65290,65292,65294],{"class":146,"line":8046},[144,65291,1065],{"class":154},[144,65293,51813],{"class":51313},[144,65295,51320],{"class":154},[144,65297,65298,65300,65302],{"class":146,"line":8052},[144,65299,52157],{"class":154},[144,65301,292],{"class":51313},[144,65303,51320],{"class":154},[144,65305,65306,65308,65310],{"class":146,"line":8064},[144,65307,51354],{"class":154},[144,65309,298],{"class":51313},[144,65311,51320],{"class":154},[144,65313,65314,65316,65318,65320,65322,65325],{"class":146,"line":8076},[144,65315,55247],{"class":154},[144,65317,301],{"class":51313},[144,65319,53499],{"class":1993},[144,65321,200],{"class":154},[144,65323,65324],{"class":259},"\"allCheck\"",[144,65326,51320],{"class":154},[144,65328,65329,65331,65333,65335,65337,65339,65341,65343,65345,65347,65349,65352,65355,65357,65359,65361,65364,65367,65369],{"class":146,"line":8088},[144,65330,55315],{"class":154},[144,65332,53834],{"class":51313},[144,65334,53837],{"class":1993},[144,65336,200],{"class":154},[144,65338,53842],{"class":259},[144,65340,14951],{"class":1993},[144,65342,200],{"class":154},[144,65344,7683],{"class":259},[144,65346,14990],{"class":1993},[144,65348,200],{"class":154},[144,65350,65351],{"class":259},"\"checkAll\"",[144,65353,65354],{"class":154},"> \u003C",[144,65356,144],{"class":51313},[144,65358,53499],{"class":1993},[144,65360,200],{"class":154},[144,65362,65363],{"class":259},"\"all\"",[144,65365,65366],{"class":154},">全选\u003C\u002F",[144,65368,144],{"class":51313},[144,65370,51320],{"class":154},[144,65372,65373,65375,65377],{"class":146,"line":9747},[144,65374,55420],{"class":154},[144,65376,301],{"class":51313},[144,65378,51320],{"class":154},[144,65380,65381,65383,65385,65388,65390],{"class":146,"line":9772},[144,65382,55247],{"class":154},[144,65384,301],{"class":51313},[144,65386,65387],{"class":154},">商品\u003C\u002F",[144,65389,301],{"class":51313},[144,65391,51320],{"class":154},[144,65393,65394,65396,65398,65401,65403],{"class":146,"line":9795},[144,65395,55247],{"class":154},[144,65397,301],{"class":51313},[144,65399,65400],{"class":154},">商家\u003C\u002F",[144,65402,301],{"class":51313},[144,65404,51320],{"class":154},[144,65406,65407,65409,65411,65414,65416],{"class":146,"line":9819},[144,65408,55247],{"class":154},[144,65410,301],{"class":51313},[144,65412,65413],{"class":154},">价格\u003C\u002F",[144,65415,301],{"class":51313},[144,65417,51320],{"class":154},[144,65419,65420,65422,65424],{"class":146,"line":9824},[144,65421,51789],{"class":154},[144,65423,298],{"class":51313},[144,65425,51320],{"class":154},[144,65427,65428,65430,65432],{"class":146,"line":9829},[144,65429,51354],{"class":154},[144,65431,298],{"class":51313},[144,65433,51320],{"class":154},[144,65435,65436,65438,65440],{"class":146,"line":9834},[144,65437,55247],{"class":154},[144,65439,344],{"class":51313},[144,65441,51320],{"class":154},[144,65443,65444,65446,65448,65450,65452,65454,65456,65458,65461,65463,65465,65468],{"class":146,"line":9843},[144,65445,55315],{"class":154},[144,65447,53834],{"class":51313},[144,65449,53837],{"class":1993},[144,65451,200],{"class":154},[144,65453,53842],{"class":259},[144,65455,14951],{"class":1993},[144,65457,200],{"class":154},[144,65459,65460],{"class":259},"\"check\"",[144,65462,53499],{"class":1993},[144,65464,200],{"class":154},[144,65466,65467],{"class":259},"\"ck\"",[144,65469,51320],{"class":154},[144,65471,65472,65474,65476],{"class":146,"line":9848},[144,65473,55420],{"class":154},[144,65475,344],{"class":51313},[144,65477,51320],{"class":154},[144,65479,65480,65482,65484,65486,65488],{"class":146,"line":9854},[144,65481,55247],{"class":154},[144,65483,344],{"class":51313},[144,65485,61186],{"class":154},[144,65487,344],{"class":51313},[144,65489,51320],{"class":154},[144,65491,65492,65494,65496,65499,65501],{"class":146,"line":9875},[144,65493,55247],{"class":154},[144,65495,344],{"class":51313},[144,65497,65498],{"class":154},">小米\u003C\u002F",[144,65500,344],{"class":51313},[144,65502,51320],{"class":154},[144,65504,65505,65507,65509,65512,65514],{"class":146,"line":9881},[144,65506,55247],{"class":154},[144,65508,344],{"class":51313},[144,65510,65511],{"class":154},">￥1999\u003C\u002F",[144,65513,344],{"class":51313},[144,65515,51320],{"class":154},[144,65517,65518,65520,65522],{"class":146,"line":9895},[144,65519,51789],{"class":154},[144,65521,298],{"class":51313},[144,65523,51320],{"class":154},[144,65525,65526,65528,65530],{"class":146,"line":9901},[144,65527,51354],{"class":154},[144,65529,298],{"class":51313},[144,65531,51320],{"class":154},[144,65533,65534,65536,65538],{"class":146,"line":9928},[144,65535,55247],{"class":154},[144,65537,344],{"class":51313},[144,65539,51320],{"class":154},[144,65541,65542,65544,65546,65548,65550,65552,65554,65556,65558,65560,65562,65564],{"class":146,"line":9937},[144,65543,55315],{"class":154},[144,65545,53834],{"class":51313},[144,65547,53837],{"class":1993},[144,65549,200],{"class":154},[144,65551,53842],{"class":259},[144,65553,14951],{"class":1993},[144,65555,200],{"class":154},[144,65557,65460],{"class":259},[144,65559,53499],{"class":1993},[144,65561,200],{"class":154},[144,65563,65467],{"class":259},[144,65565,51320],{"class":154},[144,65567,65568,65570,65572],{"class":146,"line":9943},[144,65569,55420],{"class":154},[144,65571,344],{"class":51313},[144,65573,51320],{"class":154},[144,65575,65576,65578,65580,65583,65585],{"class":146,"line":9951},[144,65577,55247],{"class":154},[144,65579,344],{"class":51313},[144,65581,65582],{"class":154},">小米净水器\u003C\u002F",[144,65584,344],{"class":51313},[144,65586,51320],{"class":154},[144,65588,65589,65591,65593,65595,65597],{"class":146,"line":9956},[144,65590,55247],{"class":154},[144,65592,344],{"class":51313},[144,65594,65498],{"class":154},[144,65596,344],{"class":51313},[144,65598,51320],{"class":154},[144,65600,65601,65603,65605,65608,65610],{"class":146,"line":16635},[144,65602,55247],{"class":154},[144,65604,344],{"class":51313},[144,65606,65607],{"class":154},">￥4999\u003C\u002F",[144,65609,344],{"class":51313},[144,65611,51320],{"class":154},[144,65613,65614,65616,65618],{"class":146,"line":16641},[144,65615,51789],{"class":154},[144,65617,298],{"class":51313},[144,65619,51320],{"class":154},[144,65621,65622,65624,65626],{"class":146,"line":16664},[144,65623,51354],{"class":154},[144,65625,298],{"class":51313},[144,65627,51320],{"class":154},[144,65629,65630,65632,65634],{"class":146,"line":16670},[144,65631,55247],{"class":154},[144,65633,344],{"class":51313},[144,65635,51320],{"class":154},[144,65637,65638,65640,65642,65644,65646,65648,65650,65652,65654,65656,65658,65660],{"class":146,"line":16693},[144,65639,55315],{"class":154},[144,65641,53834],{"class":51313},[144,65643,53837],{"class":1993},[144,65645,200],{"class":154},[144,65647,53842],{"class":259},[144,65649,14951],{"class":1993},[144,65651,200],{"class":154},[144,65653,65460],{"class":259},[144,65655,53499],{"class":1993},[144,65657,200],{"class":154},[144,65659,65467],{"class":259},[144,65661,51320],{"class":154},[144,65663,65664,65666,65668],{"class":146,"line":16707},[144,65665,55420],{"class":154},[144,65667,344],{"class":51313},[144,65669,51320],{"class":154},[144,65671,65672,65674,65676,65679,65681],{"class":146,"line":16727},[144,65673,55247],{"class":154},[144,65675,344],{"class":51313},[144,65677,65678],{"class":154},">小米电视\u003C\u002F",[144,65680,344],{"class":51313},[144,65682,51320],{"class":154},[144,65684,65685,65687,65689,65691,65693],{"class":146,"line":16733},[144,65686,55247],{"class":154},[144,65688,344],{"class":51313},[144,65690,65498],{"class":154},[144,65692,344],{"class":51313},[144,65694,51320],{"class":154},[144,65696,65697,65699,65701,65704,65706],{"class":146,"line":16744},[144,65698,55247],{"class":154},[144,65700,344],{"class":51313},[144,65702,65703],{"class":154},">￥5999\u003C\u002F",[144,65705,344],{"class":51313},[144,65707,51320],{"class":154},[144,65709,65710,65712,65714],{"class":146,"line":16767},[144,65711,51789],{"class":154},[144,65713,298],{"class":51313},[144,65715,51320],{"class":154},[144,65717,65718,65720,65722],{"class":146,"line":16789},[144,65719,52430],{"class":154},[144,65721,292],{"class":51313},[144,65723,51320],{"class":154},[144,65725,65726,65728,65730],{"class":146,"line":16794},[144,65727,52157],{"class":154},[144,65729,51826],{"class":51313},[144,65731,51320],{"class":154},[144,65733,65734],{"class":146,"line":16800},[144,65735,65736],{"class":213},"    \u002F\u002F 1. 获取大复选框\n",[144,65738,65739,65741,65744,65746,65748,65750,65752,65755],{"class":146,"line":16814},[144,65740,11252],{"class":150},[144,65742,65743],{"class":203}," checkAll",[144,65745,13595],{"class":150},[144,65747,54409],{"class":154},[144,65749,54412],{"class":1993},[144,65751,155],{"class":154},[144,65753,65754],{"class":259},"'#checkAll'",[144,65756,161],{"class":154},[144,65758,65759],{"class":146,"line":16827},[144,65760,65761],{"class":213},"    \u002F\u002F 2. 获取所有的小复选框\n",[144,65763,65764,65766,65769,65771,65773,65775,65777,65780],{"class":146,"line":16832},[144,65765,11252],{"class":150},[144,65767,65768],{"class":203}," cks",[144,65770,13595],{"class":150},[144,65772,54409],{"class":154},[144,65774,55694],{"class":1993},[144,65776,155],{"class":154},[144,65778,65779],{"class":259},"'.ck'",[144,65781,161],{"class":154},[144,65783,65784],{"class":146,"line":16846},[144,65785,65786],{"class":213},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[144,65788,65789,65792,65794,65796,65798,65800,65802],{"class":146,"line":16851},[144,65790,65791],{"class":154},"    checkAll.",[144,65793,57826],{"class":1993},[144,65795,155],{"class":154},[144,65797,57831],{"class":259},[144,65799,12466],{"class":154},[144,65801,54462],{"class":150},[144,65803,54465],{"class":154},[144,65805,65806],{"class":146,"line":16857},[144,65807,65808],{"class":213},"      \u002F\u002F 得到当前大复选框的选中状态\n",[144,65810,65811,65814],{"class":146,"line":16862},[144,65812,65813],{"class":213},"      \u002F\u002F console.log(checkAll.checked)",[144,65815,65816],{"class":213},"  \u002F\u002F 得到 是 true 或者是 false\n",[144,65818,65819],{"class":146,"line":16876},[144,65820,65821],{"class":213},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[144,65823,65824,65826,65828,65830,65832,65834,65836,65838,65840,65843,65845,65847,65849],{"class":146,"line":16881},[144,65825,52297],{"class":150},[144,65827,1688],{"class":154},[144,65829,51860],{"class":150},[144,65831,9469],{"class":154},[144,65833,200],{"class":150},[144,65835,4123],{"class":203},[144,65837,9476],{"class":154},[144,65839,1065],{"class":150},[144,65841,65842],{"class":154}," cks.",[144,65844,51981],{"class":203},[144,65846,3244],{"class":154},[144,65848,2322],{"class":150},[144,65850,12473],{"class":154},[144,65852,65853,65856,65858,65861],{"class":146,"line":16886},[144,65854,65855],{"class":154},"        cks[i].checked ",[144,65857,200],{"class":150},[144,65859,65860],{"class":203}," this",[144,65862,65863],{"class":154},".checked\n",[144,65865,65866],{"class":146,"line":16900},[144,65867,52411],{"class":154},[144,65869,65870],{"class":146,"line":16912},[144,65871,33474],{"class":154},[144,65873,65874],{"class":146,"line":16917},[144,65875,65876],{"class":213},"    \u002F\u002F 5. 小复选框控制大复选框\n",[144,65878,65879],{"class":146,"line":16930},[144,65880,2430],{"emptyLinePlaceholder":72},[144,65882,65883,65885,65887,65889,65891,65893,65895,65897,65899,65901,65903,65905,65907],{"class":146,"line":16935},[144,65884,3231],{"class":150},[144,65886,1688],{"class":154},[144,65888,51860],{"class":150},[144,65890,9469],{"class":154},[144,65892,200],{"class":150},[144,65894,4123],{"class":203},[144,65896,9476],{"class":154},[144,65898,1065],{"class":150},[144,65900,65842],{"class":154},[144,65902,51981],{"class":203},[144,65904,3244],{"class":154},[144,65906,2322],{"class":150},[144,65908,12473],{"class":154},[144,65910,65911],{"class":146,"line":16940},[144,65912,65913],{"class":213},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[144,65915,65916,65919,65921,65923,65925,65927,65929],{"class":146,"line":16945},[144,65917,65918],{"class":154},"      cks[i].",[144,65920,57826],{"class":1993},[144,65922,155],{"class":154},[144,65924,57831],{"class":259},[144,65926,12466],{"class":154},[144,65928,54462],{"class":150},[144,65930,54465],{"class":154},[144,65932,65933],{"class":146,"line":16958},[144,65934,65935],{"class":213},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[144,65937,65938],{"class":146,"line":16963},[144,65939,65940],{"class":213},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[144,65942,65943],{"class":146,"line":32646},[144,65944,65945],{"class":213},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[144,65947,65948],{"class":146,"line":32652},[144,65949,65950],{"class":213},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[144,65952,65953,65956,65958,65960,65962,65964,65967,65969,65971,65973,65975],{"class":146,"line":32658},[144,65954,65955],{"class":154},"        checkAll.checked ",[144,65957,200],{"class":150},[144,65959,54409],{"class":154},[144,65961,55694],{"class":1993},[144,65963,155],{"class":154},[144,65965,65966],{"class":259},"'.ck:checked'",[144,65968,30839],{"class":154},[144,65970,51981],{"class":203},[144,65972,57919],{"class":150},[144,65974,65842],{"class":154},[144,65976,55844],{"class":203},[144,65978,65979],{"class":146,"line":32664},[144,65980,64828],{"class":154},[144,65982,65983],{"class":146,"line":32670},[144,65984,2217],{"class":154},[144,65986,65987,65989,65991],{"class":146,"line":32681},[144,65988,52430],{"class":154},[144,65990,51826],{"class":51313},[144,65992,51320],{"class":154},[144,65994,65995,65997,65999],{"class":146,"line":32687},[144,65996,51798],{"class":154},[144,65998,51813],{"class":51313},[144,66000,51320],{"class":154},[144,66002,66003],{"class":146,"line":32707},[144,66004,2430],{"emptyLinePlaceholder":72},[144,66006,66007,66009,66011],{"class":146,"line":32713},[144,66008,51798],{"class":154},[144,66010,50648],{"class":51313},[144,66012,51320],{"class":154},[14,66014,66015],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,66017,66018],{},"用好之间比较得到的布尔值！！！",[14,66020,66021,66022,66025,66026,1688,66029,739,66031,66034],{},"在 JS 里访问的时候，",[141,66023,66024],{},"checkbox.checked"," 是一个 ",[304,66027,66028],{},"布尔值",[141,66030,1393],{},[141,66032,66033],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66036,66037,66038,66041,66042],{},"HTML 的 ",[141,66039,66040],{},"checked=\"checked\""," 只是 ",[304,66043,66044,66045,66048],{},"初始值；JS 的 ",[141,66046,66047],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66050,66051],{},"：checked是一个伪类选择器",[14,66053,66054],{},[28,66055],{"alt":30,"src":66056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66058,66059,66062],{},[66060,66061],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66064,66065],{},[28,66066],{"alt":30,"src":66067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[18,66069,66071],{"id":66070},"_33-dom事件进阶","3.3 DOM事件进阶",[115,66073,66075],{"id":66074},"_331-事件流","3.3.1 事件流",[14,66077,66078],{},[28,66079],{"alt":30,"src":66080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22029,66082,66084],{"id":66083},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66086,66087],{},[28,66088],{"alt":30,"src":66089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[135,66091,66093],{"className":50646,"code":66092,"language":50648,"meta":30,"style":30},"\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",[141,66094,66095,66105,66119,66123,66131,66145,66165,66177,66185,66192,66204,66216,66226,66230,66234,66241,66253,66265,66275,66279,66287,66295,66299,66307,66322,66341,66349,66357,66377,66397,66413,66424,66432,66449,66460,66468,66485,66496,66504,66512,66520,66524],{"__ignoreMap":30},[144,66096,66097,66099,66101,66103],{"class":146,"line":147},[144,66098,51310],{"class":154},[144,66100,51314],{"class":51313},[144,66102,51317],{"class":1993},[144,66104,51320],{"class":154},[144,66106,66107,66109,66111,66113,66115,66117],{"class":146,"line":66},[144,66108,1065],{"class":154},[144,66110,50648],{"class":51313},[144,66112,51329],{"class":1993},[144,66114,200],{"class":154},[144,66116,51334],{"class":259},[144,66118,51320],{"class":154},[144,66120,66121],{"class":146,"line":1210},[144,66122,2430],{"emptyLinePlaceholder":72},[144,66124,66125,66127,66129],{"class":146,"line":1225},[144,66126,1065],{"class":154},[144,66128,51347],{"class":51313},[144,66130,51320],{"class":154},[144,66132,66133,66135,66137,66139,66141,66143],{"class":146,"line":1231},[144,66134,52157],{"class":154},[144,66136,51357],{"class":51313},[144,66138,51360],{"class":1993},[144,66140,200],{"class":154},[144,66142,51365],{"class":259},[144,66144,51320],{"class":154},[144,66146,66147,66149,66151,66153,66155,66157,66159,66161,66163],{"class":146,"line":1245},[144,66148,52157],{"class":154},[144,66150,51357],{"class":51313},[144,66152,14951],{"class":1993},[144,66154,200],{"class":154},[144,66156,51404],{"class":259},[144,66158,51384],{"class":1993},[144,66160,200],{"class":154},[144,66162,51411],{"class":259},[144,66164,51320],{"class":154},[144,66166,66167,66169,66171,66173,66175],{"class":146,"line":1251},[144,66168,52157],{"class":154},[144,66170,51420],{"class":51313},[144,66172,51423],{"class":154},[144,66174,51420],{"class":51313},[144,66176,51320],{"class":154},[144,66178,66179,66181,66183],{"class":146,"line":1342},[144,66180,52157],{"class":154},[144,66182,5157],{"class":51313},[144,66184,51320],{"class":154},[144,66186,66187,66190],{"class":146,"line":1348},[144,66188,66189],{"class":1993},"    .father",[144,66191,15603],{"class":154},[144,66193,66194,66196,66198,66200,66202],{"class":146,"line":1360},[144,66195,54784],{"class":203},[144,66197,51450],{"class":154},[144,66199,65087],{"class":203},[144,66201,51505],{"class":150},[144,66203,1321],{"class":154},[144,66205,66206,66208,66210,66212,66214],{"class":146,"line":1642},[144,66207,54798],{"class":203},[144,66209,51450],{"class":154},[144,66211,65087],{"class":203},[144,66213,51505],{"class":150},[144,66215,1321],{"class":154},[144,66217,66218,66220,66222,66224],{"class":146,"line":1647},[144,66219,54897],{"class":203},[144,66221,51450],{"class":154},[144,66223,51658],{"class":203},[144,66225,1321],{"class":154},[144,66227,66228],{"class":146,"line":1653},[144,66229,2217],{"class":154},[144,66231,66232],{"class":146,"line":1658},[144,66233,2430],{"emptyLinePlaceholder":72},[144,66235,66236,66239],{"class":146,"line":1672},[144,66237,66238],{"class":1993},"    .son",[144,66240,15603],{"class":154},[144,66242,66243,66245,66247,66249,66251],{"class":146,"line":1677},[144,66244,54784],{"class":203},[144,66246,51450],{"class":154},[144,66248,1752],{"class":203},[144,66250,51505],{"class":150},[144,66252,1321],{"class":154},[144,66254,66255,66257,66259,66261,66263],{"class":146,"line":1683},[144,66256,54798],{"class":203},[144,66258,51450],{"class":154},[144,66260,1752],{"class":203},[144,66262,51505],{"class":150},[144,66264,1321],{"class":154},[144,66266,66267,66269,66271,66273],{"class":146,"line":1704},[144,66268,54897],{"class":203},[144,66270,51450],{"class":154},[144,66272,54902],{"class":203},[144,66274,1321],{"class":154},[144,66276,66277],{"class":146,"line":1709},[144,66278,2217],{"class":154},[144,66280,66281,66283,66285],{"class":146,"line":1723},[144,66282,52430],{"class":154},[144,66284,5157],{"class":51313},[144,66286,51320],{"class":154},[144,66288,66289,66291,66293],{"class":146,"line":1728},[144,66290,51798],{"class":154},[144,66292,51347],{"class":51313},[144,66294,51320],{"class":154},[144,66296,66297],{"class":146,"line":1757},[144,66298,2430],{"emptyLinePlaceholder":72},[144,66300,66301,66303,66305],{"class":146,"line":1762},[144,66302,1065],{"class":154},[144,66304,51813],{"class":51313},[144,66306,51320],{"class":154},[144,66308,66309,66311,66313,66315,66317,66320],{"class":146,"line":1779},[144,66310,52157],{"class":154},[144,66312,51624],{"class":51313},[144,66314,53499],{"class":1993},[144,66316,200],{"class":154},[144,66318,66319],{"class":259},"\"father\"",[144,66321,51320],{"class":154},[144,66323,66324,66326,66328,66330,66332,66335,66337,66339],{"class":146,"line":1784},[144,66325,51354],{"class":154},[144,66327,51624],{"class":51313},[144,66329,53499],{"class":1993},[144,66331,200],{"class":154},[144,66333,66334],{"class":259},"\"son\"",[144,66336,55327],{"class":154},[144,66338,51624],{"class":51313},[144,66340,51320],{"class":154},[144,66342,66343,66345,66347],{"class":146,"line":1789},[144,66344,52430],{"class":154},[144,66346,51624],{"class":51313},[144,66348,51320],{"class":154},[144,66350,66351,66353,66355],{"class":146,"line":1794},[144,66352,52157],{"class":154},[144,66354,51826],{"class":51313},[144,66356,51320],{"class":154},[144,66358,66359,66361,66364,66366,66368,66370,66372,66375],{"class":146,"line":1808},[144,66360,11252],{"class":150},[144,66362,66363],{"class":203}," fa",[144,66365,13595],{"class":150},[144,66367,54409],{"class":154},[144,66369,54412],{"class":1993},[144,66371,155],{"class":154},[144,66373,66374],{"class":259},"'.father'",[144,66376,161],{"class":154},[144,66378,66379,66381,66384,66386,66388,66390,66392,66395],{"class":146,"line":1813},[144,66380,11252],{"class":150},[144,66382,66383],{"class":203}," son",[144,66385,13595],{"class":150},[144,66387,54409],{"class":154},[144,66389,54412],{"class":1993},[144,66391,155],{"class":154},[144,66393,66394],{"class":259},"'.son'",[144,66396,161],{"class":154},[144,66398,66399,66401,66403,66405,66407,66409,66411],{"class":146,"line":2607},[144,66400,52420],{"class":154},[144,66402,57826],{"class":1993},[144,66404,155],{"class":154},[144,66406,57831],{"class":259},[144,66408,12466],{"class":154},[144,66410,54462],{"class":150},[144,66412,54465],{"class":154},[144,66414,66415,66417,66419,66422],{"class":146,"line":2621},[144,66416,58938],{"class":1993},[144,66418,155],{"class":154},[144,66420,66421],{"class":259},"'woshiu1'",[144,66423,161],{"class":154},[144,66425,66426,66428,66430],{"class":146,"line":2629},[144,66427,54548],{"class":154},[144,66429,1393],{"class":203},[144,66431,161],{"class":154},[144,66433,66434,66437,66439,66441,66443,66445,66447],{"class":146,"line":2634},[144,66435,66436],{"class":154},"    fa.",[144,66438,57826],{"class":1993},[144,66440,155],{"class":154},[144,66442,57831],{"class":259},[144,66444,12466],{"class":154},[144,66446,54462],{"class":150},[144,66448,54465],{"class":154},[144,66450,66451,66453,66455,66458],{"class":146,"line":2640},[144,66452,58938],{"class":1993},[144,66454,155],{"class":154},[144,66456,66457],{"class":259},"'1'",[144,66459,161],{"class":154},[144,66461,66462,66464,66466],{"class":146,"line":2646},[144,66463,54548],{"class":154},[144,66465,1393],{"class":203},[144,66467,161],{"class":154},[144,66469,66470,66473,66475,66477,66479,66481,66483],{"class":146,"line":2651},[144,66471,66472],{"class":154},"    son.",[144,66474,57826],{"class":1993},[144,66476,155],{"class":154},[144,66478,57831],{"class":259},[144,66480,12466],{"class":154},[144,66482,54462],{"class":150},[144,66484,54465],{"class":154},[144,66486,66487,66489,66491,66494],{"class":146,"line":7979},[144,66488,58938],{"class":1993},[144,66490,155],{"class":154},[144,66492,66493],{"class":259},"'2'",[144,66495,161],{"class":154},[144,66497,66498,66500,66502],{"class":146,"line":8003},[144,66499,54548],{"class":154},[144,66501,1393],{"class":203},[144,66503,161],{"class":154},[144,66505,66506,66508,66510],{"class":146,"line":8008},[144,66507,52430],{"class":154},[144,66509,51826],{"class":51313},[144,66511,51320],{"class":154},[144,66513,66514,66516,66518],{"class":146,"line":8014},[144,66515,51798],{"class":154},[144,66517,51813],{"class":51313},[144,66519,51320],{"class":154},[144,66521,66522],{"class":146,"line":8041},[144,66523,2430],{"emptyLinePlaceholder":72},[144,66525,66526,66528,66530],{"class":146,"line":8046},[144,66527,51798],{"class":154},[144,66529,50648],{"class":51313},[144,66531,51320],{"class":154},[14,66533,66534],{},[28,66535],{"alt":30,"src":66536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,66538,66539],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22029,66541,66543],{"id":66542},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,66545,66546],{},[28,66547],{"alt":30,"src":66548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,66550,66551],{},"反着来",[14,66553,66554],{},"注意是同名事件，比如都是‘click’",[22029,66556,66558],{"id":66557},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,66560,66561],{},[28,66562],{"alt":30,"src":66563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22029,66565,66567],{"id":66566},"_3314-解绑事件","3.3.1.4 解绑事件",[14,66569,66570],{},[28,66571],{"alt":30,"src":66572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,66574,66575],{},[28,66576],{"alt":30,"src":66577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22029,66579,66581],{"id":66580},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[98,66583,66584],{},[101,66585,66586],{},"事件类型的区别",[14,66588,66589],{},[28,66590],{"alt":30,"src":66591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,66593,66594],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[98,66596,66597],{"start":66},[101,66598,66599],{},"注册事件的区别",[14,66601,66602],{},[28,66603],{"alt":30,"src":66604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22029,66606,66608],{"id":66607},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,66610,66611],{},[28,66612],{"alt":30,"src":66613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,66615,66616],{},[28,66617],{"alt":30,"src":66618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[135,66620,66622],{"className":53080,"code":66621,"language":53082,"meta":30,"style":30},"\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",[141,66623,66624,66632,66649,66672,66680,66685,66690,66695,66699,66707,66715],{"__ignoreMap":30},[144,66625,66626,66628,66630],{"class":146,"line":147},[144,66627,1065],{"class":154},[144,66629,51813],{"class":51313},[144,66631,51320],{"class":154},[144,66633,66634,66636,66639,66642,66644,66647],{"class":146,"line":66},[144,66635,52157],{"class":154},[144,66637,66638],{"class":51313},"form",[144,66640,66641],{"class":1993}," action",[144,66643,200],{"class":154},[144,66645,66646],{"class":259},"\"http:\u002F\u002Fwww.itcast.cn\"",[144,66648,51320],{"class":154},[144,66650,66651,66653,66655,66657,66659,66662,66665,66667,66670],{"class":146,"line":1210},[144,66652,51354],{"class":154},[144,66654,53834],{"class":51313},[144,66656,53837],{"class":1993},[144,66658,200],{"class":154},[144,66660,66661],{"class":259},"\"submit\"",[144,66663,66664],{"class":1993}," value",[144,66666,200],{"class":154},[144,66668,66669],{"class":259},"\"免费注册\"",[144,66671,51320],{"class":154},[144,66673,66674,66676,66678],{"class":146,"line":1225},[144,66675,51354],{"class":154},[144,66677,51826],{"class":51313},[144,66679,51320],{"class":154},[144,66681,66682],{"class":146,"line":1231},[144,66683,66684],{"class":154},"      const form = document.querySelector('form')\n",[144,66686,66687],{"class":146,"line":1245},[144,66688,66689],{"class":154},"      form.addEventListener('submit', function (e) {\n",[144,66691,66692],{"class":146,"line":1251},[144,66693,66694],{"class":154},"        e.preventDefault()\n",[144,66696,66697],{"class":146,"line":1342},[144,66698,64828],{"class":154},[144,66700,66701,66703,66705],{"class":146,"line":1348},[144,66702,51789],{"class":154},[144,66704,51826],{"class":51313},[144,66706,51320],{"class":154},[144,66708,66709,66711,66713],{"class":146,"line":1360},[144,66710,52430],{"class":154},[144,66712,66638],{"class":51313},[144,66714,51320],{"class":154},[144,66716,66717,66719,66721],{"class":146,"line":1642},[144,66718,51798],{"class":154},[144,66720,51813],{"class":51313},[144,66722,51320],{"class":154},[14,66724,66725],{},"点击不在跳转！！！",[115,66727,66729],{"id":66728},"_332-事件委托","3.3.2 事件委托",[14,66731,66732],{},[28,66733],{"alt":30,"src":66734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[135,66736,66738],{"className":50646,"code":66737,"language":50648,"meta":30,"style":30},"\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",[141,66739,66740,66750,66764,66768,66776,66790,66810,66822,66830,66834,66842,66850,66862,66874,66886,66898,66910,66923,66931,66939,66944,66963,66984,66989,66994,66999,67004,67013,67017,67027,67031,67036,67041,67055,67065,67069,67073,67081,67089,67093],{"__ignoreMap":30},[144,66741,66742,66744,66746,66748],{"class":146,"line":147},[144,66743,51310],{"class":154},[144,66745,51314],{"class":51313},[144,66747,51317],{"class":1993},[144,66749,51320],{"class":154},[144,66751,66752,66754,66756,66758,66760,66762],{"class":146,"line":66},[144,66753,1065],{"class":154},[144,66755,50648],{"class":51313},[144,66757,51329],{"class":1993},[144,66759,200],{"class":154},[144,66761,51334],{"class":259},[144,66763,51320],{"class":154},[144,66765,66766],{"class":146,"line":1210},[144,66767,2430],{"emptyLinePlaceholder":72},[144,66769,66770,66772,66774],{"class":146,"line":1225},[144,66771,1065],{"class":154},[144,66773,51347],{"class":51313},[144,66775,51320],{"class":154},[144,66777,66778,66780,66782,66784,66786,66788],{"class":146,"line":1231},[144,66779,52157],{"class":154},[144,66781,51357],{"class":51313},[144,66783,51360],{"class":1993},[144,66785,200],{"class":154},[144,66787,51365],{"class":259},[144,66789,51320],{"class":154},[144,66791,66792,66794,66796,66798,66800,66802,66804,66806,66808],{"class":146,"line":1245},[144,66793,52157],{"class":154},[144,66795,51357],{"class":51313},[144,66797,14951],{"class":1993},[144,66799,200],{"class":154},[144,66801,51404],{"class":259},[144,66803,51384],{"class":1993},[144,66805,200],{"class":154},[144,66807,51411],{"class":259},[144,66809,51320],{"class":154},[144,66811,66812,66814,66816,66818,66820],{"class":146,"line":1251},[144,66813,52157],{"class":154},[144,66815,51420],{"class":51313},[144,66817,51423],{"class":154},[144,66819,51420],{"class":51313},[144,66821,51320],{"class":154},[144,66823,66824,66826,66828],{"class":146,"line":1342},[144,66825,51798],{"class":154},[144,66827,51347],{"class":51313},[144,66829,51320],{"class":154},[144,66831,66832],{"class":146,"line":1348},[144,66833,2430],{"emptyLinePlaceholder":72},[144,66835,66836,66838,66840],{"class":146,"line":1360},[144,66837,1065],{"class":154},[144,66839,51813],{"class":51313},[144,66841,51320],{"class":154},[144,66843,66844,66846,66848],{"class":146,"line":1642},[144,66845,52157],{"class":154},[144,66847,1162],{"class":51313},[144,66849,51320],{"class":154},[144,66851,66852,66854,66856,66858,66860],{"class":146,"line":1647},[144,66853,51354],{"class":154},[144,66855,101],{"class":51313},[144,66857,53979],{"class":154},[144,66859,101],{"class":51313},[144,66861,51320],{"class":154},[144,66863,66864,66866,66868,66870,66872],{"class":146,"line":1653},[144,66865,51354],{"class":154},[144,66867,101],{"class":51313},[144,66869,53998],{"class":154},[144,66871,101],{"class":51313},[144,66873,51320],{"class":154},[144,66875,66876,66878,66880,66882,66884],{"class":146,"line":1658},[144,66877,51354],{"class":154},[144,66879,101],{"class":51313},[144,66881,54017],{"class":154},[144,66883,101],{"class":51313},[144,66885,51320],{"class":154},[144,66887,66888,66890,66892,66894,66896],{"class":146,"line":1672},[144,66889,51354],{"class":154},[144,66891,101],{"class":51313},[144,66893,54036],{"class":154},[144,66895,101],{"class":51313},[144,66897,51320],{"class":154},[144,66899,66900,66902,66904,66906,66908],{"class":146,"line":1677},[144,66901,51354],{"class":154},[144,66903,101],{"class":51313},[144,66905,54055],{"class":154},[144,66907,101],{"class":51313},[144,66909,51320],{"class":154},[144,66911,66912,66914,66916,66919,66921],{"class":146,"line":1683},[144,66913,51354],{"class":154},[144,66915,14],{"class":51313},[144,66917,66918],{"class":154},">我不需要变色\u003C\u002F",[144,66920,14],{"class":51313},[144,66922,51320],{"class":154},[144,66924,66925,66927,66929],{"class":146,"line":1704},[144,66926,52430],{"class":154},[144,66928,1162],{"class":51313},[144,66930,51320],{"class":154},[144,66932,66933,66935,66937],{"class":146,"line":1709},[144,66934,52157],{"class":154},[144,66936,51826],{"class":51313},[144,66938,51320],{"class":154},[144,66940,66941],{"class":146,"line":1723},[144,66942,66943],{"class":213},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[144,66945,66946,66948,66950,66952,66954,66956,66958,66961],{"class":146,"line":1728},[144,66947,11252],{"class":150},[144,66949,61305],{"class":203},[144,66951,13595],{"class":150},[144,66953,54409],{"class":154},[144,66955,54412],{"class":1993},[144,66957,155],{"class":154},[144,66959,66960],{"class":259},"'ul'",[144,66962,161],{"class":154},[144,66964,66965,66968,66970,66972,66974,66976,66978,66980,66982],{"class":146,"line":1757},[144,66966,66967],{"class":154},"    ul.",[144,66969,57826],{"class":1993},[144,66971,155],{"class":154},[144,66973,57831],{"class":259},[144,66975,12466],{"class":154},[144,66977,54462],{"class":150},[144,66979,1688],{"class":154},[144,66981,229],{"class":5247},[144,66983,12473],{"class":154},[144,66985,66986],{"class":146,"line":1762},[144,66987,66988],{"class":213},"      \u002F\u002F alert(1)\n",[144,66990,66991],{"class":146,"line":1779},[144,66992,66993],{"class":213},"      \u002F\u002F e.target就是我们点击的对象\n",[144,66995,66996],{"class":146,"line":1784},[144,66997,66998],{"class":213},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[144,67000,67001],{"class":146,"line":1789},[144,67002,67003],{"class":213},"      \u002F\u002F e.target.style.color = 'red'\n",[144,67005,67006,67008,67010],{"class":146,"line":1794},[144,67007,58257],{"class":154},[144,67009,58260],{"class":1993},[144,67011,67012],{"class":154},"(e)\n",[144,67014,67015],{"class":146,"line":1808},[144,67016,2430],{"emptyLinePlaceholder":72},[144,67018,67019,67021,67024],{"class":146,"line":1813},[144,67020,58257],{"class":154},[144,67022,67023],{"class":1993},"dir",[144,67025,67026],{"class":154},"(e.target)\n",[144,67028,67029],{"class":146,"line":2607},[144,67030,2430],{"emptyLinePlaceholder":72},[144,67032,67033],{"class":146,"line":2621},[144,67034,67035],{"class":213},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[144,67037,67038],{"class":146,"line":2629},[144,67039,67040],{"class":213},"      \u002F\u002F 通过tagName来进行判断\n",[144,67042,67043,67045,67048,67050,67053],{"class":146,"line":2634},[144,67044,54493],{"class":150},[144,67046,67047],{"class":154}," (e.target.tagName ",[144,67049,54499],{"class":150},[144,67051,67052],{"class":259}," 'LI'",[144,67054,12473],{"class":154},[144,67056,67057,67060,67062],{"class":146,"line":2640},[144,67058,67059],{"class":154},"        e.target.style.color ",[144,67061,200],{"class":150},[144,67063,67064],{"class":259}," 'red'\n",[144,67066,67067],{"class":146,"line":2646},[144,67068,52411],{"class":154},[144,67070,67071],{"class":146,"line":2651},[144,67072,33474],{"class":154},[144,67074,67075,67077,67079],{"class":146,"line":7979},[144,67076,52430],{"class":154},[144,67078,51826],{"class":51313},[144,67080,51320],{"class":154},[144,67082,67083,67085,67087],{"class":146,"line":8003},[144,67084,51798],{"class":154},[144,67086,51813],{"class":51313},[144,67088,51320],{"class":154},[144,67090,67091],{"class":146,"line":8008},[144,67092,2430],{"emptyLinePlaceholder":72},[144,67094,67095,67097,67099],{"class":146,"line":8014},[144,67096,51798],{"class":154},[144,67098,50648],{"class":51313},[144,67100,51320],{"class":154},[14,67102,67103],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67105,67106],{},"if(e.target.ragName==='P') {}",[14,67108,67109],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67111,67112],{},"通过事件委托的方式实现tab栏切换改造：",[14,67114,67115],{},"一定要记住自定义属性！！！！！！",[14,67117,67118],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67120,67121],{},"id是自定义的属性名",[14,67123,67124],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[135,67126,67128],{"className":50646,"code":67127,"language":50648,"meta":30,"style":30},"\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",[141,67129,67130,67140,67154,67158,67166,67180,67200,67220,67232,67240,67246,67256,67266,67270,67274,67280,67292,67304,67316,67332,67336,67340,67346,67358,67370,67382,67392,67402,67406,67410,67418,67430,67440,67452,67456,67460,67468,67478,67488,67498,67502,67506,67516,67530,67542,67546,67550,67562,67572,67588,67598,67602,67606,67620,67630,67640,67644,67648,67654,67668,67672,67676,67684,67694,67698,67702,67711,67721,67725,67733,67741,67745,67753,67767,67781,67793,67801,67840,67872,67904,67936,67968,67976,67984,67998,68032,68066,68100,68134,68168,68176,68184,68192,68197,68202,68221,68226,68246,68254,68259,68272,68293,68306,68310,68315,68320,68333,68353,68381,68385,68389,68393,68401,68409,68413],{"__ignoreMap":30},[144,67131,67132,67134,67136,67138],{"class":146,"line":147},[144,67133,51310],{"class":154},[144,67135,51314],{"class":51313},[144,67137,51317],{"class":1993},[144,67139,51320],{"class":154},[144,67141,67142,67144,67146,67148,67150,67152],{"class":146,"line":66},[144,67143,1065],{"class":154},[144,67145,50648],{"class":51313},[144,67147,51329],{"class":1993},[144,67149,200],{"class":154},[144,67151,51334],{"class":259},[144,67153,51320],{"class":154},[144,67155,67156],{"class":146,"line":1210},[144,67157,2430],{"emptyLinePlaceholder":72},[144,67159,67160,67162,67164],{"class":146,"line":1225},[144,67161,1065],{"class":154},[144,67163,51347],{"class":51313},[144,67165,51320],{"class":154},[144,67167,67168,67170,67172,67174,67176,67178],{"class":146,"line":1231},[144,67169,52157],{"class":154},[144,67171,51357],{"class":51313},[144,67173,51360],{"class":1993},[144,67175,200],{"class":154},[144,67177,51365],{"class":259},[144,67179,59140],{"class":154},[144,67181,67182,67184,67186,67188,67190,67192,67194,67196,67198],{"class":146,"line":1245},[144,67183,52157],{"class":154},[144,67185,51357],{"class":51313},[144,67187,51376],{"class":1993},[144,67189,200],{"class":154},[144,67191,51381],{"class":259},[144,67193,51384],{"class":1993},[144,67195,200],{"class":154},[144,67197,51389],{"class":259},[144,67199,59140],{"class":154},[144,67201,67202,67204,67206,67208,67210,67212,67214,67216,67218],{"class":146,"line":1251},[144,67203,52157],{"class":154},[144,67205,51357],{"class":51313},[144,67207,14951],{"class":1993},[144,67209,200],{"class":154},[144,67211,51404],{"class":259},[144,67213,51384],{"class":1993},[144,67215,200],{"class":154},[144,67217,51411],{"class":259},[144,67219,59140],{"class":154},[144,67221,67222,67224,67226,67228,67230],{"class":146,"line":1342},[144,67223,52157],{"class":154},[144,67225,51420],{"class":51313},[144,67227,63638],{"class":154},[144,67229,51420],{"class":51313},[144,67231,51320],{"class":154},[144,67233,67234,67236,67238],{"class":146,"line":1348},[144,67235,52157],{"class":154},[144,67237,5157],{"class":51313},[144,67239,51320],{"class":154},[144,67241,67242,67244],{"class":146,"line":1360},[144,67243,6434],{"class":51313},[144,67245,15603],{"class":154},[144,67247,67248,67250,67252,67254],{"class":146,"line":1642},[144,67249,54719],{"class":203},[144,67251,51450],{"class":154},[144,67253,346],{"class":203},[144,67255,1321],{"class":154},[144,67257,67258,67260,67262,67264],{"class":146,"line":1647},[144,67259,54708],{"class":203},[144,67261,51450],{"class":154},[144,67263,346],{"class":203},[144,67265,1321],{"class":154},[144,67267,67268],{"class":146,"line":1653},[144,67269,2217],{"class":154},[144,67271,67272],{"class":146,"line":1658},[144,67273,2430],{"emptyLinePlaceholder":72},[144,67275,67276,67278],{"class":146,"line":1672},[144,67277,63689],{"class":1993},[144,67279,15603],{"class":154},[144,67281,67282,67284,67286,67288,67290],{"class":146,"line":1677},[144,67283,54784],{"class":203},[144,67285,51450],{"class":154},[144,67287,63700],{"class":203},[144,67289,51505],{"class":150},[144,67291,1321],{"class":154},[144,67293,67294,67296,67298,67300,67302],{"class":146,"line":1683},[144,67295,54798],{"class":203},[144,67297,51450],{"class":154},[144,67299,63713],{"class":203},[144,67301,51505],{"class":150},[144,67303,1321],{"class":154},[144,67305,67306,67308,67310,67312,67314],{"class":146,"line":1704},[144,67307,54719],{"class":203},[144,67309,51450],{"class":154},[144,67311,855],{"class":203},[144,67313,51505],{"class":150},[144,67315,1321],{"class":154},[144,67317,67318,67320,67322,67324,67326,67328,67330],{"class":146,"line":1709},[144,67319,61990],{"class":203},[144,67321,51450],{"class":154},[144,67323,372],{"class":203},[144,67325,51505],{"class":150},[144,67327,51534],{"class":203},[144,67329,62257],{"class":203},[144,67331,1321],{"class":154},[144,67333,67334],{"class":146,"line":1723},[144,67335,2217],{"class":154},[144,67337,67338],{"class":146,"line":1728},[144,67339,2430],{"emptyLinePlaceholder":72},[144,67341,67342,67344],{"class":146,"line":1757},[144,67343,63758],{"class":1993},[144,67345,15603],{"class":154},[144,67347,67348,67350,67352,67354,67356],{"class":146,"line":1762},[144,67349,54784],{"class":203},[144,67351,51450],{"class":154},[144,67353,466],{"class":203},[144,67355,483],{"class":150},[144,67357,1321],{"class":154},[144,67359,67360,67362,67364,67366,67368],{"class":146,"line":1779},[144,67361,54798],{"class":203},[144,67363,51450],{"class":154},[144,67365,1062],{"class":203},[144,67367,51505],{"class":150},[144,67369,1321],{"class":154},[144,67371,67372,67374,67376,67378,67380],{"class":146,"line":1784},[144,67373,57372],{"class":203},[144,67375,51450],{"class":154},[144,67377,1062],{"class":203},[144,67379,51505],{"class":150},[144,67381,1321],{"class":154},[144,67383,67384,67386,67388,67390],{"class":146,"line":1789},[144,67385,55022],{"class":203},[144,67387,51450],{"class":154},[144,67389,51490],{"class":203},[144,67391,1321],{"class":154},[144,67393,67394,67396,67398,67400],{"class":146,"line":1794},[144,67395,55033],{"class":203},[144,67397,51450],{"class":154},[144,67399,51681],{"class":203},[144,67401,1321],{"class":154},[144,67403,67404],{"class":146,"line":1808},[144,67405,2217],{"class":154},[144,67407,67408],{"class":146,"line":1813},[144,67409,2430],{"emptyLinePlaceholder":72},[144,67411,67412,67414,67416],{"class":146,"line":2607},[144,67413,63758],{"class":1993},[144,67415,63831],{"class":51313},[144,67417,15603],{"class":154},[144,67419,67420,67422,67424,67426,67428],{"class":146,"line":2621},[144,67421,54935],{"class":203},[144,67423,51450],{"class":154},[144,67425,955],{"class":203},[144,67427,51505],{"class":150},[144,67429,1321],{"class":154},[144,67431,67432,67434,67436,67438],{"class":146,"line":2629},[144,67433,62347],{"class":203},[144,67435,51450],{"class":154},[144,67437,63854],{"class":203},[144,67439,1321],{"class":154},[144,67441,67442,67444,67446,67448,67450],{"class":146,"line":2634},[144,67443,62013],{"class":203},[144,67445,51450],{"class":154},[144,67447,855],{"class":203},[144,67449,51505],{"class":150},[144,67451,1321],{"class":154},[144,67453,67454],{"class":146,"line":2640},[144,67455,2217],{"class":154},[144,67457,67458],{"class":146,"line":2646},[144,67459,2430],{"emptyLinePlaceholder":72},[144,67461,67462,67464,67466],{"class":146,"line":2651},[144,67463,63758],{"class":1993},[144,67465,61305],{"class":51313},[144,67467,15603],{"class":154},[144,67469,67470,67472,67474,67476],{"class":146,"line":7979},[144,67471,54745],{"class":203},[144,67473,51450],{"class":154},[144,67475,54750],{"class":203},[144,67477,1321],{"class":154},[144,67479,67480,67482,67484,67486],{"class":146,"line":8003},[144,67481,55022],{"class":203},[144,67483,51450],{"class":154},[144,67485,51490],{"class":203},[144,67487,1321],{"class":154},[144,67489,67490,67492,67494,67496],{"class":146,"line":8008},[144,67491,55033],{"class":203},[144,67493,51450],{"class":154},[144,67495,51593],{"class":203},[144,67497,1321],{"class":154},[144,67499,67500],{"class":146,"line":8014},[144,67501,2217],{"class":154},[144,67503,67504],{"class":146,"line":8041},[144,67505,2430],{"emptyLinePlaceholder":72},[144,67507,67508,67510,67512,67514],{"class":146,"line":8046},[144,67509,63758],{"class":1993},[144,67511,61305],{"class":51313},[144,67513,55088],{"class":51313},[144,67515,15603],{"class":154},[144,67517,67518,67520,67522,67524,67526,67528],{"class":146,"line":8052},[144,67519,54719],{"class":203},[144,67521,51450],{"class":154},[144,67523,346],{"class":203},[144,67525,8981],{"class":203},[144,67527,51505],{"class":150},[144,67529,1321],{"class":154},[144,67531,67532,67534,67536,67538,67540],{"class":146,"line":8064},[144,67533,54935],{"class":203},[144,67535,51450],{"class":154},[144,67537,704],{"class":203},[144,67539,51505],{"class":150},[144,67541,1321],{"class":154},[144,67543,67544],{"class":146,"line":8076},[144,67545,2217],{"class":154},[144,67547,67548],{"class":146,"line":8088},[144,67549,2430],{"emptyLinePlaceholder":72},[144,67551,67552,67554,67556,67558,67560],{"class":146,"line":9747},[144,67553,63758],{"class":1993},[144,67555,61305],{"class":51313},[144,67557,55088],{"class":51313},[144,67559,1429],{"class":51313},[144,67561,15603],{"class":154},[144,67563,67564,67566,67568,67570],{"class":146,"line":9772},[144,67565,63983],{"class":203},[144,67567,51450],{"class":154},[144,67569,54750],{"class":203},[144,67571,1321],{"class":154},[144,67573,67574,67576,67578,67580,67582,67584,67586],{"class":146,"line":9795},[144,67575,62245],{"class":203},[144,67577,51450],{"class":154},[144,67579,232],{"class":203},[144,67581,51505],{"class":150},[144,67583,51534],{"class":203},[144,67585,64004],{"class":203},[144,67587,1321],{"class":154},[144,67589,67590,67592,67594,67596],{"class":146,"line":9819},[144,67591,57429],{"class":203},[144,67593,51450],{"class":154},[144,67595,62382],{"class":203},[144,67597,1321],{"class":154},[144,67599,67600],{"class":146,"line":9824},[144,67601,2217],{"class":154},[144,67603,67604],{"class":146,"line":9829},[144,67605,2430],{"emptyLinePlaceholder":72},[144,67607,67608,67610,67612,67614,67616,67618],{"class":146,"line":9834},[144,67609,63758],{"class":1993},[144,67611,61305],{"class":51313},[144,67613,55088],{"class":51313},[144,67615,1429],{"class":51313},[144,67617,64037],{"class":1993},[144,67619,15603],{"class":154},[144,67621,67622,67624,67626,67628],{"class":146,"line":9843},[144,67623,61804],{"class":203},[144,67625,51450],{"class":154},[144,67627,64048],{"class":203},[144,67629,1321],{"class":154},[144,67631,67632,67634,67636,67638],{"class":146,"line":9848},[144,67633,57429],{"class":203},[144,67635,51450],{"class":154},[144,67637,64048],{"class":203},[144,67639,1321],{"class":154},[144,67641,67642],{"class":146,"line":9854},[144,67643,2217],{"class":154},[144,67645,67646],{"class":146,"line":9875},[144,67647,2430],{"emptyLinePlaceholder":72},[144,67649,67650,67652],{"class":146,"line":9881},[144,67651,64073],{"class":1993},[144,67653,15603],{"class":154},[144,67655,67656,67658,67660,67662,67664,67666],{"class":146,"line":9895},[144,67657,54708],{"class":203},[144,67659,51450],{"class":154},[144,67661,346],{"class":203},[144,67663,64086],{"class":203},[144,67665,51505],{"class":150},[144,67667,1321],{"class":154},[144,67669,67670],{"class":146,"line":9901},[144,67671,2217],{"class":154},[144,67673,67674],{"class":146,"line":9928},[144,67675,2430],{"emptyLinePlaceholder":72},[144,67677,67678,67680,67682],{"class":146,"line":9937},[144,67679,64073],{"class":1993},[144,67681,62187],{"class":1993},[144,67683,15603],{"class":154},[144,67685,67686,67688,67690,67692],{"class":146,"line":9943},[144,67687,55022],{"class":203},[144,67689,51450],{"class":154},[144,67691,54750],{"class":203},[144,67693,1321],{"class":154},[144,67695,67696],{"class":146,"line":9951},[144,67697,2217],{"class":154},[144,67699,67700],{"class":146,"line":9956},[144,67701,2430],{"emptyLinePlaceholder":72},[144,67703,67704,67706,67709],{"class":146,"line":16635},[144,67705,64073],{"class":1993},[144,67707,67708],{"class":1993}," .active",[144,67710,15603],{"class":154},[144,67712,67713,67715,67717,67719],{"class":146,"line":16641},[144,67714,55022],{"class":203},[144,67716,51450],{"class":154},[144,67718,60882],{"class":203},[144,67720,1321],{"class":154},[144,67722,67723],{"class":146,"line":16664},[144,67724,2217],{"class":154},[144,67726,67727,67729,67731],{"class":146,"line":16670},[144,67728,52430],{"class":154},[144,67730,5157],{"class":51313},[144,67732,51320],{"class":154},[144,67734,67735,67737,67739],{"class":146,"line":16693},[144,67736,51798],{"class":154},[144,67738,51347],{"class":51313},[144,67740,51320],{"class":154},[144,67742,67743],{"class":146,"line":16707},[144,67744,2430],{"emptyLinePlaceholder":72},[144,67746,67747,67749,67751],{"class":146,"line":16727},[144,67748,1065],{"class":154},[144,67750,51813],{"class":51313},[144,67752,51320],{"class":154},[144,67754,67755,67757,67759,67761,67763,67765],{"class":146,"line":16733},[144,67756,52157],{"class":154},[144,67758,51624],{"class":51313},[144,67760,53499],{"class":1993},[144,67762,200],{"class":154},[144,67764,64188],{"class":259},[144,67766,51320],{"class":154},[144,67768,67769,67771,67773,67775,67777,67779],{"class":146,"line":16744},[144,67770,51354],{"class":154},[144,67772,51624],{"class":51313},[144,67774,53499],{"class":1993},[144,67776,200],{"class":154},[144,67778,64203],{"class":259},[144,67780,51320],{"class":154},[144,67782,67783,67785,67787,67789,67791],{"class":146,"line":16767},[144,67784,55247],{"class":154},[144,67786,115],{"class":51313},[144,67788,64214],{"class":154},[144,67790,115],{"class":51313},[144,67792,51320],{"class":154},[144,67794,67795,67797,67799],{"class":146,"line":16789},[144,67796,55247],{"class":154},[144,67798,1162],{"class":51313},[144,67800,51320],{"class":154},[144,67802,67803,67805,67807,67809,67811,67813,67815,67817,67819,67821,67823,67825,67827,67830,67832,67834,67836,67838],{"class":146,"line":16794},[144,67804,55315],{"class":154},[144,67806,101],{"class":51313},[144,67808,61065],{"class":154},[144,67810,393],{"class":51313},[144,67812,53499],{"class":1993},[144,67814,200],{"class":154},[144,67816,59719],{"class":259},[144,67818,61070],{"class":1993},[144,67820,200],{"class":154},[144,67822,64249],{"class":259},[144,67824,53964],{"class":1993},[144,67826,200],{"class":154},[144,67828,67829],{"class":259},"\"0\"",[144,67831,64252],{"class":154},[144,67833,393],{"class":51313},[144,67835,55327],{"class":154},[144,67837,101],{"class":51313},[144,67839,51320],{"class":154},[144,67841,67842,67844,67846,67848,67850,67852,67854,67856,67858,67860,67862,67864,67866,67868,67870],{"class":146,"line":16800},[144,67843,55315],{"class":154},[144,67845,101],{"class":51313},[144,67847,61065],{"class":154},[144,67849,393],{"class":51313},[144,67851,61070],{"class":1993},[144,67853,200],{"class":154},[144,67855,64249],{"class":259},[144,67857,53964],{"class":1993},[144,67859,200],{"class":154},[144,67861,3708],{"class":259},[144,67863,64279],{"class":154},[144,67865,393],{"class":51313},[144,67867,55327],{"class":154},[144,67869,101],{"class":51313},[144,67871,51320],{"class":154},[144,67873,67874,67876,67878,67880,67882,67884,67886,67888,67890,67892,67894,67896,67898,67900,67902],{"class":146,"line":16814},[144,67875,55315],{"class":154},[144,67877,101],{"class":51313},[144,67879,61065],{"class":154},[144,67881,393],{"class":51313},[144,67883,61070],{"class":1993},[144,67885,200],{"class":154},[144,67887,64249],{"class":259},[144,67889,53964],{"class":1993},[144,67891,200],{"class":154},[144,67893,3731],{"class":259},[144,67895,64306],{"class":154},[144,67897,393],{"class":51313},[144,67899,55327],{"class":154},[144,67901,101],{"class":51313},[144,67903,51320],{"class":154},[144,67905,67906,67908,67910,67912,67914,67916,67918,67920,67922,67924,67926,67928,67930,67932,67934],{"class":146,"line":16827},[144,67907,55315],{"class":154},[144,67909,101],{"class":51313},[144,67911,61065],{"class":154},[144,67913,393],{"class":51313},[144,67915,61070],{"class":1993},[144,67917,200],{"class":154},[144,67919,64249],{"class":259},[144,67921,53964],{"class":1993},[144,67923,200],{"class":154},[144,67925,3744],{"class":259},[144,67927,64333],{"class":154},[144,67929,393],{"class":51313},[144,67931,55327],{"class":154},[144,67933,101],{"class":51313},[144,67935,51320],{"class":154},[144,67937,67938,67940,67942,67944,67946,67948,67950,67952,67954,67956,67958,67960,67962,67964,67966],{"class":146,"line":16832},[144,67939,55315],{"class":154},[144,67941,101],{"class":51313},[144,67943,61065],{"class":154},[144,67945,393],{"class":51313},[144,67947,61070],{"class":1993},[144,67949,200],{"class":154},[144,67951,64249],{"class":259},[144,67953,53964],{"class":1993},[144,67955,200],{"class":154},[144,67957,3757],{"class":259},[144,67959,64360],{"class":154},[144,67961,393],{"class":51313},[144,67963,55327],{"class":154},[144,67965,101],{"class":51313},[144,67967,51320],{"class":154},[144,67969,67970,67972,67974],{"class":146,"line":16846},[144,67971,55420],{"class":154},[144,67973,1162],{"class":51313},[144,67975,51320],{"class":154},[144,67977,67978,67980,67982],{"class":146,"line":16851},[144,67979,51789],{"class":154},[144,67981,51624],{"class":51313},[144,67983,51320],{"class":154},[144,67985,67986,67988,67990,67992,67994,67996],{"class":146,"line":16857},[144,67987,51354],{"class":154},[144,67989,51624],{"class":51313},[144,67991,53499],{"class":1993},[144,67993,200],{"class":154},[144,67995,64397],{"class":259},[144,67997,51320],{"class":154},[144,67999,68000,68002,68004,68006,68008,68010,68012,68014,68016,68018,68020,68022,68024,68026,68028,68030],{"class":146,"line":16862},[144,68001,55247],{"class":154},[144,68003,51624],{"class":51313},[144,68005,53499],{"class":1993},[144,68007,200],{"class":154},[144,68009,64412],{"class":259},[144,68011,61065],{"class":154},[144,68013,28],{"class":51313},[144,68015,55252],{"class":1993},[144,68017,200],{"class":154},[144,68019,64423],{"class":259},[144,68021,55260],{"class":1993},[144,68023,200],{"class":154},[144,68025,7683],{"class":259},[144,68027,64432],{"class":154},[144,68029,51624],{"class":51313},[144,68031,51320],{"class":154},[144,68033,68034,68036,68038,68040,68042,68044,68046,68048,68050,68052,68054,68056,68058,68060,68062,68064],{"class":146,"line":16876},[144,68035,55247],{"class":154},[144,68037,51624],{"class":51313},[144,68039,53499],{"class":1993},[144,68041,200],{"class":154},[144,68043,62636],{"class":259},[144,68045,61065],{"class":154},[144,68047,28],{"class":51313},[144,68049,55252],{"class":1993},[144,68051,200],{"class":154},[144,68053,64459],{"class":259},[144,68055,55260],{"class":1993},[144,68057,200],{"class":154},[144,68059,7683],{"class":259},[144,68061,64432],{"class":154},[144,68063,51624],{"class":51313},[144,68065,51320],{"class":154},[144,68067,68068,68070,68072,68074,68076,68078,68080,68082,68084,68086,68088,68090,68092,68094,68096,68098],{"class":146,"line":16881},[144,68069,55247],{"class":154},[144,68071,51624],{"class":51313},[144,68073,53499],{"class":1993},[144,68075,200],{"class":154},[144,68077,62636],{"class":259},[144,68079,61065],{"class":154},[144,68081,28],{"class":51313},[144,68083,55252],{"class":1993},[144,68085,200],{"class":154},[144,68087,64494],{"class":259},[144,68089,55260],{"class":1993},[144,68091,200],{"class":154},[144,68093,7683],{"class":259},[144,68095,64432],{"class":154},[144,68097,51624],{"class":51313},[144,68099,51320],{"class":154},[144,68101,68102,68104,68106,68108,68110,68112,68114,68116,68118,68120,68122,68124,68126,68128,68130,68132],{"class":146,"line":16886},[144,68103,55247],{"class":154},[144,68105,51624],{"class":51313},[144,68107,53499],{"class":1993},[144,68109,200],{"class":154},[144,68111,62636],{"class":259},[144,68113,61065],{"class":154},[144,68115,28],{"class":51313},[144,68117,55252],{"class":1993},[144,68119,200],{"class":154},[144,68121,64529],{"class":259},[144,68123,55260],{"class":1993},[144,68125,200],{"class":154},[144,68127,7683],{"class":259},[144,68129,64432],{"class":154},[144,68131,51624],{"class":51313},[144,68133,51320],{"class":154},[144,68135,68136,68138,68140,68142,68144,68146,68148,68150,68152,68154,68156,68158,68160,68162,68164,68166],{"class":146,"line":16900},[144,68137,55247],{"class":154},[144,68139,51624],{"class":51313},[144,68141,53499],{"class":1993},[144,68143,200],{"class":154},[144,68145,62636],{"class":259},[144,68147,61065],{"class":154},[144,68149,28],{"class":51313},[144,68151,55252],{"class":1993},[144,68153,200],{"class":154},[144,68155,64564],{"class":259},[144,68157,55260],{"class":1993},[144,68159,200],{"class":154},[144,68161,7683],{"class":259},[144,68163,64432],{"class":154},[144,68165,51624],{"class":51313},[144,68167,51320],{"class":154},[144,68169,68170,68172,68174],{"class":146,"line":16912},[144,68171,51789],{"class":154},[144,68173,51624],{"class":51313},[144,68175,51320],{"class":154},[144,68177,68178,68180,68182],{"class":146,"line":16917},[144,68179,52430],{"class":154},[144,68181,51624],{"class":51313},[144,68183,51320],{"class":154},[144,68185,68186,68188,68190],{"class":146,"line":16930},[144,68187,52157],{"class":154},[144,68189,51826],{"class":51313},[144,68191,51320],{"class":154},[144,68193,68194],{"class":146,"line":16935},[144,68195,68196],{"class":213},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[144,68198,68199],{"class":146,"line":16940},[144,68200,68201],{"class":213},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[144,68203,68204,68206,68208,68210,68212,68214,68216,68219],{"class":146,"line":16945},[144,68205,11252],{"class":150},[144,68207,61305],{"class":203},[144,68209,13595],{"class":150},[144,68211,54409],{"class":154},[144,68213,54412],{"class":1993},[144,68215,155],{"class":154},[144,68217,68218],{"class":259},"'.tab-nav ul'",[144,68220,161],{"class":154},[144,68222,68223],{"class":146,"line":16958},[144,68224,68225],{"class":213},"    \u002F\u002F 2.添加事件\n",[144,68227,68228,68230,68232,68234,68236,68238,68240,68242,68244],{"class":146,"line":16963},[144,68229,66967],{"class":154},[144,68231,57826],{"class":1993},[144,68233,155],{"class":154},[144,68235,57831],{"class":259},[144,68237,12466],{"class":154},[144,68239,54462],{"class":150},[144,68241,1688],{"class":154},[144,68243,229],{"class":5247},[144,68245,12473],{"class":154},[144,68247,68248,68250,68252],{"class":146,"line":32646},[144,68249,58257],{"class":154},[144,68251,67023],{"class":1993},[144,68253,67026],{"class":154},[144,68255,68256],{"class":146,"line":32652},[144,68257,68258],{"class":213},"      \u002F\u002Fe.targer是我们点击的对象\n",[144,68260,68261,68263,68265,68267,68270],{"class":146,"line":32658},[144,68262,54493],{"class":150},[144,68264,67047],{"class":154},[144,68266,54499],{"class":150},[144,68268,68269],{"class":259}," 'A'",[144,68271,12473],{"class":154},[144,68273,68274,68276,68278,68280,68283,68285,68287,68289,68291],{"class":146,"line":32664},[144,68275,51938],{"class":154},[144,68277,54412],{"class":1993},[144,68279,155],{"class":154},[144,68281,68282],{"class":259},"'.active'",[144,68284,57016],{"class":154},[144,68286,57019],{"class":1993},[144,68288,155],{"class":154},[144,68290,64727],{"class":259},[144,68292,161],{"class":154},[144,68294,68295,68298,68300,68302,68304],{"class":146,"line":32670},[144,68296,68297],{"class":154},"        e.target.classList.",[144,68299,5365],{"class":1993},[144,68301,155],{"class":154},[144,68303,64727],{"class":259},[144,68305,161],{"class":154},[144,68307,68308],{"class":146,"line":32681},[144,68309,2430],{"emptyLinePlaceholder":72},[144,68311,68312],{"class":146,"line":32687},[144,68313,68314],{"class":213},"        \u002F\u002F 下面大盒子模块\n",[144,68316,68317],{"class":146,"line":32707},[144,68318,68319],{"class":213},"        \u002F\u002F console.log(e.target.dataset.id)\n",[144,68321,68322,68324,68326,68328,68330],{"class":146,"line":32713},[144,68323,61283],{"class":150},[144,68325,3062],{"class":203},[144,68327,13595],{"class":150},[144,68329,45579],{"class":150},[144,68331,68332],{"class":154},"e.target.dataset.id\n",[144,68334,68335,68337,68339,68341,68343,68345,68347,68349,68351],{"class":146,"line":32724},[144,68336,51938],{"class":154},[144,68338,54412],{"class":1993},[144,68340,155],{"class":154},[144,68342,64775],{"class":259},[144,68344,57016],{"class":154},[144,68346,57019],{"class":1993},[144,68348,155],{"class":154},[144,68350,64727],{"class":259},[144,68352,161],{"class":154},[144,68354,68355,68357,68359,68361,68363,68365,68367,68369,68371,68373,68375,68377,68379],{"class":146,"line":32730},[144,68356,51938],{"class":154},[144,68358,54412],{"class":1993},[144,68360,155],{"class":154},[144,68362,64801],{"class":259},[144,68364,596],{"class":154},[144,68366,45579],{"class":150},[144,68368,25131],{"class":203},[144,68370,57045],{"class":259},[144,68372,57016],{"class":154},[144,68374,5365],{"class":1993},[144,68376,155],{"class":154},[144,68378,64727],{"class":259},[144,68380,161],{"class":154},[144,68382,68383],{"class":146,"line":32736},[144,68384,2430],{"emptyLinePlaceholder":72},[144,68386,68387],{"class":146,"line":32742},[144,68388,52411],{"class":154},[144,68390,68391],{"class":146,"line":32748},[144,68392,33474],{"class":154},[144,68394,68395,68397,68399],{"class":146,"line":32754},[144,68396,52430],{"class":154},[144,68398,51826],{"class":51313},[144,68400,51320],{"class":154},[144,68402,68403,68405,68407],{"class":146,"line":32760},[144,68404,51798],{"class":154},[144,68406,51813],{"class":51313},[144,68408,51320],{"class":154},[144,68410,68411],{"class":146,"line":32766},[144,68412,2430],{"emptyLinePlaceholder":72},[144,68414,68415,68417,68419],{"class":146,"line":32786},[144,68416,51798],{"class":154},[144,68418,50648],{"class":51313},[144,68420,51320],{"class":154},[115,68422,68424],{"id":68423},"_333-页面加载事件","3.3.3 页面加载事件",[98,68426,68427],{},[101,68428,68429],{},"load",[14,68431,68432],{},[28,68433],{"alt":30,"src":68434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,68436,68437],{},"window代表整个窗口，比document还要大",[14,68439,68440],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,68442,68443],{},"img.addEventListener('load', function () {",[14,68445,68446],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,68448,52477],{},[98,68450,68451],{"start":66},[101,68452,68453],{},"DOMContentLoaded",[14,68455,68456],{},[28,68457],{"alt":30,"src":68458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,68460,68461],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[115,68463,68465],{"id":68464},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,68467,68468],{},[28,68469],{"alt":30,"src":68470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,68472,68473],{},[28,68474],{"alt":30,"src":68475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,68477,68478],{},[28,68479],{"alt":30,"src":68480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,68482,68483],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,68485,68486],{},"获得的是数字型数据，不带单位",[14,68488,68489],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,68491,68492],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,68494,68495],{},"它是通过document.documentElement来获取",[14,68497,68498],{},[28,68499],{"alt":30,"src":68500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,68502,68503],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[115,68505,68507],{"id":68506},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,68509,68510],{},[28,68511],{"alt":30,"src":68512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,68514,68515],{},[28,68516],{"alt":30,"src":68517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[115,68519,68521],{"id":68520},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,68523,68524],{},[28,68525],{"alt":30,"src":68526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,68528,68529],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,68531,68532],{},[28,68533],{"alt":30,"src":68534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,68536,68537],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,68539,68540],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,68542,68543],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,68545,68546],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,68548,68549],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,68551,68552],{},[28,68553],{"alt":30,"src":68554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,68556,68557],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,68559,68560],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,68562,68563],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,68565,68566],{},"e.pageX-box.getBoundingClientRect()",[115,68568,68570],{"id":68569},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,68572,68573],{},[28,68574],{"alt":30,"src":68575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,68577,68578],{},"这个是相对于视口来说的，它是个方法，不是属性值",[115,68580,68582],{"id":68581},"_338-总结","3.3.8 总结",[14,68584,68585],{},[28,68586],{"alt":30,"src":68587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,68589,68590],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,68592,68593],{},"修改盒子的宽高只能通过width和height来实现",[115,68595,68597],{"id":68596},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[135,68599,68601],{"className":50646,"code":68600,"language":50648,"meta":30,"style":30},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[141,68602,68603,68608,68613,68618,68623],{"__ignoreMap":30},[144,68604,68605],{"class":146,"line":147},[144,68606,68607],{"class":154},"\u002F* 页面滑动 *\u002F\n",[144,68609,68610],{"class":146,"line":66},[144,68611,68612],{"class":154},"html {\n",[144,68614,68615],{"class":146,"line":1210},[144,68616,68617],{"class":154},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[144,68619,68620],{"class":146,"line":1225},[144,68621,68622],{"class":154},"  scroll-behavior: smooth;\n",[144,68624,68625],{"class":146,"line":1231},[144,68626,1595],{"class":154},[14,68628,68629],{},"默认是auto",[115,68631,68633],{"id":68632},"_3310-日期对象","3.3.10 日期对象",[22029,68635,68637],{"id":68636},"_33101-实例化","3.3.10.1 实例化",[14,68639,68640],{},[28,68641],{"alt":30,"src":68642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22029,68644,68646],{"id":68645},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,68648,68649],{},[28,68650],{"alt":30,"src":68651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,68653,68654],{},"月份+1",[14,68656,68657],{},"老外认为第一天为0，星期天",[14,68659,68660],{},"方法使用的时候必须要跟括号",[14,68662,68663],{},"快速获得日期",[14,68665,68666],{},"\u002F\u002F 得到年月日",[14,68668,68669],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,68671,68672],{},"\u002F\u002F 得到当地日期",[14,68674,68675],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,68677,68678],{},"\u002F\u002F 得到当地时间",[14,68680,68681],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,68683,68684],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,68686,68687],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51826,68689,68690],{},"\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,68692,68693],{},"学会去封装函数！",[22029,68695,68697],{"id":68696},"_33103-时间戳","3.3.10.3 时间戳",[14,68699,68700],{},[28,68701],{"alt":30,"src":68702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,68704,68705],{},[28,68706],{"alt":30,"src":68707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,68709,68710],{},"三种方法记住一个就可以",[115,68712,68714],{"id":68713},"_3311-节点操作","3.3.11 节点操作",[22029,68716,68718],{"id":68717},"_33111-dom节点","3.3.11.1 DOM节点",[14,68720,68721],{},[28,68722],{"alt":30,"src":68723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,68725,68726],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22029,68728,68730],{"id":68729},"_33112-查找节点","3.3.11.2 查找节点",[14,68732,68733],{},"前边的document.querySelector()是获取的元素",[14,68735,68736],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,68738,68739],{},[28,68740],{"alt":30,"src":68741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[98,68743,68744],{},[101,68745,68746],{},"父节点",[14,68748,68749],{},[28,68750],{"alt":30,"src":68751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[98,68753,68754],{"start":66},[101,68755,68756],{},"子节点",[14,68758,68759],{},[28,68760],{"alt":30,"src":68761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,68763,68764],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,68766,68767],{},"children获得的是伪数组，是亲儿子",[98,68769,68770],{"start":1210},[101,68771,68772],{},"兄弟节点",[14,68774,68775],{},[28,68776],{"alt":30,"src":68777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22029,68779,68781],{"id":68780},"_33113-增加节点","3.3.11.3 增加节点",[14,68783,68784],{},[28,68785],{"alt":30,"src":68786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,68788,68789],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,68791,68792],{},[28,68793],{"alt":30,"src":68794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,68796,68797],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,68799,68800],{},"下面是写法的部分展示，就按照下边的格式来写",[14,68802,68803],{},"例：",[51826,68805,68806],{},"\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,68808,68809],{},[28,68810],{"alt":30,"src":68811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,68813,68814],{},"false只克隆标签，里边的内容不会克隆过来",[135,68816,68818],{"className":50646,"code":68817,"language":50648,"meta":30,"style":30},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[141,68819,68820],{"__ignoreMap":30},[144,68821,68822],{"class":146,"line":147},[144,68823,68817],{"class":154},[22029,68825,68827],{"id":68826},"_33114-删除节点","3.3.11.4 删除节点",[14,68829,68830],{},[28,68831],{"alt":30,"src":68832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,68834,68835],{},"父亲删儿子",[14,68837,68838],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[115,68840,68842],{"id":68841},"_3312-m端事件","3.3.12 M端事件",[14,68844,68845],{},"M端就是移动端",[14,68847,68848],{},[28,68849],{"alt":30,"src":68850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[115,68852,68854],{"id":68853},"_3313-插件","3.3.13 插件",[14,68856,68857],{},"要熟悉官网！！！",[14,68859,68860],{},[393,68861,68862],{"href":68862,"rel":68863},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23897],[14,68865,68866],{},[393,68867,68868],{"href":68868,"rel":68869},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23897],[115,68871,68873],{"id":68872},"_3314-学生信息表","3.3.14 学生信息表",[98,68875,68876,68879,68882,68885,68888,68891,68894,68897],{},[101,68877,68878],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[101,68880,68881],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[101,68883,68884],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[101,68886,68887],{},"用好表单元素自带的属性，value,name等",[101,68889,68890],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[101,68892,68893],{},"不要忘记事件对象",[101,68895,68896],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[101,68898,68899],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,68901,68902],{},"结构：",[135,68904,68906],{"className":50646,"code":68905,"language":50648,"meta":30,"style":30},"\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",[141,68907,68908,68918,68932,68936,68944,68958,68978,68999,69012,69036,69044,69048,69056,69069,69090,69118,69146,69151,69173,69193,69212,69220,69248,69270,69290,69310,69330,69350,69370,69378,69398,69406,69410,69423,69431,69439,69447,69460,69473,69486,69499,69512,69525,69538,69546,69554,69562,69567,69572,69577,69582,69587,69592,69597,69602,69607,69612,69617,69622,69627,69635,69643,69651,69655,69675,69694,69714,69734,69754,69774,69778,69783,69803,69808,69818,69823,69828,69848,69870,69875,69885,69889,69893,69898,69903,69932,69946,69961,69965,69969,69973,69978,69989,70002,70007,70012,70017,70022,70027,70031,70036,70041,70050,70055,70060,70072,70077,70084,70088,70093,70103,70108,70118,70123,70151,70172,70182,70202,70220,70237,70254,70271,70288,70292,70302,70307,70312,70317,70328,70332,70336,70340,70345,70350,70371,70383,70388,70393,70398,70412,70417,70424,70428,70432,70440,70444,70452,70456],{"__ignoreMap":30},[144,68909,68910,68912,68914,68916],{"class":146,"line":147},[144,68911,51310],{"class":154},[144,68913,51314],{"class":51313},[144,68915,51317],{"class":1993},[144,68917,51320],{"class":154},[144,68919,68920,68922,68924,68926,68928,68930],{"class":146,"line":66},[144,68921,1065],{"class":154},[144,68923,50648],{"class":51313},[144,68925,51329],{"class":1993},[144,68927,200],{"class":154},[144,68929,51334],{"class":259},[144,68931,51320],{"class":154},[144,68933,68934],{"class":146,"line":1210},[144,68935,2430],{"emptyLinePlaceholder":72},[144,68937,68938,68940,68942],{"class":146,"line":1225},[144,68939,1065],{"class":154},[144,68941,51347],{"class":51313},[144,68943,51320],{"class":154},[144,68945,68946,68948,68950,68952,68954,68956],{"class":146,"line":1231},[144,68947,52157],{"class":154},[144,68949,51357],{"class":51313},[144,68951,51360],{"class":1993},[144,68953,200],{"class":154},[144,68955,51365],{"class":259},[144,68957,59140],{"class":154},[144,68959,68960,68962,68964,68966,68968,68970,68972,68974,68976],{"class":146,"line":1245},[144,68961,52157],{"class":154},[144,68963,51357],{"class":51313},[144,68965,14951],{"class":1993},[144,68967,200],{"class":154},[144,68969,51404],{"class":259},[144,68971,51384],{"class":1993},[144,68973,200],{"class":154},[144,68975,51411],{"class":259},[144,68977,59140],{"class":154},[144,68979,68980,68982,68984,68986,68988,68990,68992,68994,68997],{"class":146,"line":1251},[144,68981,52157],{"class":154},[144,68983,51357],{"class":51313},[144,68985,51376],{"class":1993},[144,68987,200],{"class":154},[144,68989,51381],{"class":259},[144,68991,51384],{"class":1993},[144,68993,200],{"class":154},[144,68995,68996],{"class":259},"\"ie=edge\"",[144,68998,59140],{"class":154},[144,69000,69001,69003,69005,69008,69010],{"class":146,"line":1342},[144,69002,52157],{"class":154},[144,69004,51420],{"class":51313},[144,69006,69007],{"class":154},">学生信息管理\u003C\u002F",[144,69009,51420],{"class":51313},[144,69011,51320],{"class":154},[144,69013,69014,69016,69019,69022,69024,69027,69029,69031,69034],{"class":146,"line":1348},[144,69015,52157],{"class":154},[144,69017,69018],{"class":51313},"link",[144,69020,69021],{"class":1993}," rel",[144,69023,200],{"class":154},[144,69025,69026],{"class":259},"\"stylesheet\"",[144,69028,61070],{"class":1993},[144,69030,200],{"class":154},[144,69032,69033],{"class":259},"\"css\u002Findex.css\"",[144,69035,59140],{"class":154},[144,69037,69038,69040,69042],{"class":146,"line":1360},[144,69039,51798],{"class":154},[144,69041,51347],{"class":51313},[144,69043,51320],{"class":154},[144,69045,69046],{"class":146,"line":1642},[144,69047,2430],{"emptyLinePlaceholder":72},[144,69049,69050,69052,69054],{"class":146,"line":1647},[144,69051,1065],{"class":154},[144,69053,51813],{"class":51313},[144,69055,51320],{"class":154},[144,69057,69058,69060,69062,69065,69067],{"class":146,"line":1653},[144,69059,52157],{"class":154},[144,69061,10],{"class":51313},[144,69063,69064],{"class":154},">新增学员\u003C\u002F",[144,69066,10],{"class":51313},[144,69068,51320],{"class":154},[144,69070,69071,69073,69075,69077,69079,69081,69084,69086,69088],{"class":146,"line":1658},[144,69072,52157],{"class":154},[144,69074,66638],{"class":51313},[144,69076,53499],{"class":1993},[144,69078,200],{"class":154},[144,69080,62677],{"class":259},[144,69082,69083],{"class":1993}," autocomplete",[144,69085,200],{"class":154},[144,69087,31789],{"class":259},[144,69089,51320],{"class":154},[144,69091,69092,69095,69097,69099,69101,69103,69105,69107,69110,69112,69114,69116],{"class":146,"line":1672},[144,69093,69094],{"class":154},"    姓名：\u003C",[144,69096,53834],{"class":51313},[144,69098,53837],{"class":1993},[144,69100,200],{"class":154},[144,69102,62712],{"class":259},[144,69104,53499],{"class":1993},[144,69106,200],{"class":154},[144,69108,69109],{"class":259},"\"uname\"",[144,69111,14951],{"class":1993},[144,69113,200],{"class":154},[144,69115,69109],{"class":259},[144,69117,59140],{"class":154},[144,69119,69120,69123,69125,69127,69129,69131,69133,69135,69138,69140,69142,69144],{"class":146,"line":1677},[144,69121,69122],{"class":154},"    年龄：\u003C",[144,69124,53834],{"class":51313},[144,69126,53837],{"class":1993},[144,69128,200],{"class":154},[144,69130,62712],{"class":259},[144,69132,53499],{"class":1993},[144,69134,200],{"class":154},[144,69136,69137],{"class":259},"\"age\"",[144,69139,14951],{"class":1993},[144,69141,200],{"class":154},[144,69143,69137],{"class":259},[144,69145,59140],{"class":154},[144,69147,69148],{"class":146,"line":1683},[144,69149,69150],{"class":154},"    性别:\n",[144,69152,69153,69155,69158,69160,69162,69165,69167,69169,69171],{"class":146,"line":1704},[144,69154,51354],{"class":154},[144,69156,69157],{"class":51313},"select",[144,69159,14951],{"class":1993},[144,69161,200],{"class":154},[144,69163,69164],{"class":259},"\"gender\"",[144,69166,53499],{"class":1993},[144,69168,200],{"class":154},[144,69170,69164],{"class":259},[144,69172,51320],{"class":154},[144,69174,69175,69177,69180,69182,69184,69186,69189,69191],{"class":146,"line":1709},[144,69176,55247],{"class":154},[144,69178,69179],{"class":51313},"option",[144,69181,66664],{"class":1993},[144,69183,200],{"class":154},[144,69185,9992],{"class":259},[144,69187,69188],{"class":154},">男\u003C\u002F",[144,69190,69179],{"class":51313},[144,69192,51320],{"class":154},[144,69194,69195,69197,69199,69201,69203,69205,69208,69210],{"class":146,"line":1723},[144,69196,55247],{"class":154},[144,69198,69179],{"class":51313},[144,69200,66664],{"class":1993},[144,69202,200],{"class":154},[144,69204,10061],{"class":259},[144,69206,69207],{"class":154},">女\u003C\u002F",[144,69209,69179],{"class":51313},[144,69211,51320],{"class":154},[144,69213,69214,69216,69218],{"class":146,"line":1728},[144,69215,51789],{"class":154},[144,69217,69157],{"class":51313},[144,69219,51320],{"class":154},[144,69221,69222,69225,69227,69229,69231,69233,69235,69237,69240,69242,69244,69246],{"class":146,"line":1757},[144,69223,69224],{"class":154},"    薪资：\u003C",[144,69226,53834],{"class":51313},[144,69228,53837],{"class":1993},[144,69230,200],{"class":154},[144,69232,62712],{"class":259},[144,69234,53499],{"class":1993},[144,69236,200],{"class":154},[144,69238,69239],{"class":259},"\"salary\"",[144,69241,14951],{"class":1993},[144,69243,200],{"class":154},[144,69245,69239],{"class":259},[144,69247,59140],{"class":154},[144,69249,69250,69253,69255,69257,69259,69262,69264,69266,69268],{"class":146,"line":1762},[144,69251,69252],{"class":154},"    就业城市：\u003C",[144,69254,69157],{"class":51313},[144,69256,14951],{"class":1993},[144,69258,200],{"class":154},[144,69260,69261],{"class":259},"\"city\"",[144,69263,53499],{"class":1993},[144,69265,200],{"class":154},[144,69267,69261],{"class":259},[144,69269,51320],{"class":154},[144,69271,69272,69274,69276,69278,69280,69283,69286,69288],{"class":146,"line":1779},[144,69273,55247],{"class":154},[144,69275,69179],{"class":51313},[144,69277,66664],{"class":1993},[144,69279,200],{"class":154},[144,69281,69282],{"class":259},"\"北京\"",[144,69284,69285],{"class":154},">北京\u003C\u002F",[144,69287,69179],{"class":51313},[144,69289,51320],{"class":154},[144,69291,69292,69294,69296,69298,69300,69303,69306,69308],{"class":146,"line":1784},[144,69293,55247],{"class":154},[144,69295,69179],{"class":51313},[144,69297,66664],{"class":1993},[144,69299,200],{"class":154},[144,69301,69302],{"class":259},"\"上海\"",[144,69304,69305],{"class":154},">上海\u003C\u002F",[144,69307,69179],{"class":51313},[144,69309,51320],{"class":154},[144,69311,69312,69314,69316,69318,69320,69323,69326,69328],{"class":146,"line":1789},[144,69313,55247],{"class":154},[144,69315,69179],{"class":51313},[144,69317,66664],{"class":1993},[144,69319,200],{"class":154},[144,69321,69322],{"class":259},"\"广州\"",[144,69324,69325],{"class":154},">广州\u003C\u002F",[144,69327,69179],{"class":51313},[144,69329,51320],{"class":154},[144,69331,69332,69334,69336,69338,69340,69343,69346,69348],{"class":146,"line":1794},[144,69333,55247],{"class":154},[144,69335,69179],{"class":51313},[144,69337,66664],{"class":1993},[144,69339,200],{"class":154},[144,69341,69342],{"class":259},"\"深圳\"",[144,69344,69345],{"class":154},">深圳\u003C\u002F",[144,69347,69179],{"class":51313},[144,69349,51320],{"class":154},[144,69351,69352,69354,69356,69358,69360,69363,69366,69368],{"class":146,"line":1808},[144,69353,55247],{"class":154},[144,69355,69179],{"class":51313},[144,69357,66664],{"class":1993},[144,69359,200],{"class":154},[144,69361,69362],{"class":259},"\"曹县\"",[144,69364,69365],{"class":154},">曹县\u003C\u002F",[144,69367,69179],{"class":51313},[144,69369,51320],{"class":154},[144,69371,69372,69374,69376],{"class":146,"line":1813},[144,69373,51789],{"class":154},[144,69375,69157],{"class":51313},[144,69377,51320],{"class":154},[144,69379,69380,69382,69384,69386,69388,69391,69394,69396],{"class":146,"line":2607},[144,69381,51354],{"class":154},[144,69383,53900],{"class":51313},[144,69385,53499],{"class":1993},[144,69387,200],{"class":154},[144,69389,69390],{"class":259},"\"add\"",[144,69392,69393],{"class":154},">录入\u003C\u002F",[144,69395,53900],{"class":51313},[144,69397,51320],{"class":154},[144,69399,69400,69402,69404],{"class":146,"line":2621},[144,69401,52430],{"class":154},[144,69403,66638],{"class":51313},[144,69405,51320],{"class":154},[144,69407,69408],{"class":146,"line":2629},[144,69409,2430],{"emptyLinePlaceholder":72},[144,69411,69412,69414,69416,69419,69421],{"class":146,"line":2634},[144,69413,52157],{"class":154},[144,69415,10],{"class":51313},[144,69417,69418],{"class":154},">就业榜\u003C\u002F",[144,69420,10],{"class":51313},[144,69422,51320],{"class":154},[144,69424,69425,69427,69429],{"class":146,"line":2640},[144,69426,52157],{"class":154},[144,69428,292],{"class":51313},[144,69430,51320],{"class":154},[144,69432,69433,69435,69437],{"class":146,"line":2646},[144,69434,51354],{"class":154},[144,69436,295],{"class":51313},[144,69438,51320],{"class":154},[144,69440,69441,69443,69445],{"class":146,"line":2651},[144,69442,55247],{"class":154},[144,69444,298],{"class":51313},[144,69446,51320],{"class":154},[144,69448,69449,69451,69453,69456,69458],{"class":146,"line":7979},[144,69450,55315],{"class":154},[144,69452,301],{"class":51313},[144,69454,69455],{"class":154},">序号\u003C\u002F",[144,69457,301],{"class":51313},[144,69459,51320],{"class":154},[144,69461,69462,69464,69466,69469,69471],{"class":146,"line":8003},[144,69463,55315],{"class":154},[144,69465,301],{"class":51313},[144,69467,69468],{"class":154},">姓名\u003C\u002F",[144,69470,301],{"class":51313},[144,69472,51320],{"class":154},[144,69474,69475,69477,69479,69482,69484],{"class":146,"line":8008},[144,69476,55315],{"class":154},[144,69478,301],{"class":51313},[144,69480,69481],{"class":154},">年龄\u003C\u002F",[144,69483,301],{"class":51313},[144,69485,51320],{"class":154},[144,69487,69488,69490,69492,69495,69497],{"class":146,"line":8014},[144,69489,55315],{"class":154},[144,69491,301],{"class":51313},[144,69493,69494],{"class":154},">性别\u003C\u002F",[144,69496,301],{"class":51313},[144,69498,51320],{"class":154},[144,69500,69501,69503,69505,69508,69510],{"class":146,"line":8041},[144,69502,55315],{"class":154},[144,69504,301],{"class":51313},[144,69506,69507],{"class":154},">薪资\u003C\u002F",[144,69509,301],{"class":51313},[144,69511,51320],{"class":154},[144,69513,69514,69516,69518,69521,69523],{"class":146,"line":8046},[144,69515,55315],{"class":154},[144,69517,301],{"class":51313},[144,69519,69520],{"class":154},">就业城市\u003C\u002F",[144,69522,301],{"class":51313},[144,69524,51320],{"class":154},[144,69526,69527,69529,69531,69534,69536],{"class":146,"line":8052},[144,69528,55315],{"class":154},[144,69530,301],{"class":51313},[144,69532,69533],{"class":154},">操作\u003C\u002F",[144,69535,301],{"class":51313},[144,69537,51320],{"class":154},[144,69539,69540,69542,69544],{"class":146,"line":8064},[144,69541,55420],{"class":154},[144,69543,298],{"class":51313},[144,69545,51320],{"class":154},[144,69547,69548,69550,69552],{"class":146,"line":8076},[144,69549,51789],{"class":154},[144,69551,295],{"class":51313},[144,69553,51320],{"class":154},[144,69555,69556,69558,69560],{"class":146,"line":8088},[144,69557,51354],{"class":154},[144,69559,339],{"class":51313},[144,69561,51320],{"class":154},[144,69563,69564],{"class":146,"line":9747},[144,69565,69566],{"class":213},"      \u003C!-- \n",[144,69568,69569],{"class":146,"line":9772},[144,69570,69571],{"class":213},"        \u003Ctr>\n",[144,69573,69574],{"class":146,"line":9795},[144,69575,69576],{"class":213},"          \u003Ctd>1001\u003C\u002Ftd>\n",[144,69578,69579],{"class":146,"line":9819},[144,69580,69581],{"class":213},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[144,69583,69584],{"class":146,"line":9824},[144,69585,69586],{"class":213},"          \u003Ctd>19\u003C\u002Ftd>\n",[144,69588,69589],{"class":146,"line":9829},[144,69590,69591],{"class":213},"          \u003Ctd>男\u003C\u002Ftd>\n",[144,69593,69594],{"class":146,"line":9834},[144,69595,69596],{"class":213},"          \u003Ctd>15000\u003C\u002Ftd>\n",[144,69598,69599],{"class":146,"line":9843},[144,69600,69601],{"class":213},"          \u003Ctd>上海\u003C\u002Ftd>\n",[144,69603,69604],{"class":146,"line":9848},[144,69605,69606],{"class":213},"          \u003Ctd>\n",[144,69608,69609],{"class":146,"line":9854},[144,69610,69611],{"class":213},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[144,69613,69614],{"class":146,"line":9875},[144,69615,69616],{"class":213},"          \u003C\u002Ftd>\n",[144,69618,69619],{"class":146,"line":9881},[144,69620,69621],{"class":213},"        \u003C\u002Ftr> \n",[144,69623,69624],{"class":146,"line":9895},[144,69625,69626],{"class":213},"        -->\n",[144,69628,69629,69631,69633],{"class":146,"line":9901},[144,69630,51789],{"class":154},[144,69632,339],{"class":51313},[144,69634,51320],{"class":154},[144,69636,69637,69639,69641],{"class":146,"line":9928},[144,69638,52430],{"class":154},[144,69640,292],{"class":51313},[144,69642,51320],{"class":154},[144,69644,69645,69647,69649],{"class":146,"line":9937},[144,69646,52157],{"class":154},[144,69648,51826],{"class":51313},[144,69650,51320],{"class":154},[144,69652,69653],{"class":146,"line":9943},[144,69654,59971],{"class":213},[144,69656,69657,69659,69662,69664,69666,69668,69670,69673],{"class":146,"line":9951},[144,69658,11252],{"class":150},[144,69660,69661],{"class":203}," uname",[144,69663,13595],{"class":150},[144,69665,54409],{"class":154},[144,69667,54412],{"class":1993},[144,69669,155],{"class":154},[144,69671,69672],{"class":259},"'.uname'",[144,69674,161],{"class":154},[144,69676,69677,69679,69681,69683,69685,69687,69689,69692],{"class":146,"line":9956},[144,69678,11252],{"class":150},[144,69680,15720],{"class":203},[144,69682,13595],{"class":150},[144,69684,54409],{"class":154},[144,69686,54412],{"class":1993},[144,69688,155],{"class":154},[144,69690,69691],{"class":259},"'.age'",[144,69693,161],{"class":154},[144,69695,69696,69698,69701,69703,69705,69707,69709,69712],{"class":146,"line":16635},[144,69697,11252],{"class":150},[144,69699,69700],{"class":203}," gender",[144,69702,13595],{"class":150},[144,69704,54409],{"class":154},[144,69706,54412],{"class":1993},[144,69708,155],{"class":154},[144,69710,69711],{"class":259},"'.gender'",[144,69713,161],{"class":154},[144,69715,69716,69718,69721,69723,69725,69727,69729,69732],{"class":146,"line":16641},[144,69717,11252],{"class":150},[144,69719,69720],{"class":203}," salary",[144,69722,13595],{"class":150},[144,69724,54409],{"class":154},[144,69726,54412],{"class":1993},[144,69728,155],{"class":154},[144,69730,69731],{"class":259},"'.salary'",[144,69733,161],{"class":154},[144,69735,69736,69738,69741,69743,69745,69747,69749,69752],{"class":146,"line":16664},[144,69737,11252],{"class":150},[144,69739,69740],{"class":203}," city",[144,69742,13595],{"class":150},[144,69744,54409],{"class":154},[144,69746,54412],{"class":1993},[144,69748,155],{"class":154},[144,69750,69751],{"class":259},"'.city'",[144,69753,161],{"class":154},[144,69755,69756,69758,69761,69763,69765,69767,69769,69772],{"class":146,"line":16670},[144,69757,11252],{"class":150},[144,69759,69760],{"class":203}," tbody",[144,69762,13595],{"class":150},[144,69764,54409],{"class":154},[144,69766,54412],{"class":1993},[144,69768,155],{"class":154},[144,69770,69771],{"class":259},"'tbody'",[144,69773,161],{"class":154},[144,69775,69776],{"class":146,"line":16693},[144,69777,2430],{"emptyLinePlaceholder":72},[144,69779,69780],{"class":146,"line":16707},[144,69781,69782],{"class":213},"    \u002F\u002F 获取所有带有name属性的元素\n",[144,69784,69785,69787,69790,69792,69794,69796,69798,69801],{"class":146,"line":16727},[144,69786,11252],{"class":150},[144,69788,69789],{"class":203}," items",[144,69791,13595],{"class":150},[144,69793,54409],{"class":154},[144,69795,55694],{"class":1993},[144,69797,155],{"class":154},[144,69799,69800],{"class":259},"'[name]'",[144,69802,161],{"class":154},[144,69804,69805],{"class":146,"line":16733},[144,69806,69807],{"class":213},"    \u002F\u002F 声明一个空的数组\n",[144,69809,69810,69812,69814,69816],{"class":146,"line":16744},[144,69811,11252],{"class":150},[144,69813,57708],{"class":203},[144,69815,13595],{"class":150},[144,69817,51851],{"class":154},[144,69819,69820],{"class":146,"line":16767},[144,69821,69822],{"class":213},"    \u002F\u002F 1.录入模块\n",[144,69824,69825],{"class":146,"line":16789},[144,69826,69827],{"class":213},"    \u002F\u002F 1.1这是一个表单提交事件\n",[144,69829,69830,69832,69835,69837,69839,69841,69843,69846],{"class":146,"line":16794},[144,69831,11252],{"class":150},[144,69833,69834],{"class":203}," info",[144,69836,13595],{"class":150},[144,69838,54409],{"class":154},[144,69840,54412],{"class":1993},[144,69842,155],{"class":154},[144,69844,69845],{"class":259},"'.info'",[144,69847,161],{"class":154},[144,69849,69850,69853,69855,69857,69860,69862,69864,69866,69868],{"class":146,"line":16800},[144,69851,69852],{"class":154},"    info.",[144,69854,57826],{"class":1993},[144,69856,155],{"class":154},[144,69858,69859],{"class":259},"'submit'",[144,69861,12466],{"class":154},[144,69863,54462],{"class":150},[144,69865,1688],{"class":154},[144,69867,229],{"class":5247},[144,69869,12473],{"class":154},[144,69871,69872],{"class":146,"line":16814},[144,69873,69874],{"class":213},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[144,69876,69877,69880,69883],{"class":146,"line":16827},[144,69878,69879],{"class":154},"      e.",[144,69881,69882],{"class":1993},"preventDefault",[144,69884,2006],{"class":154},[144,69886,69887],{"class":146,"line":16832},[144,69888,60025],{"class":213},[144,69890,69891],{"class":146,"line":16846},[144,69892,2430],{"emptyLinePlaceholder":72},[144,69894,69895],{"class":146,"line":16851},[144,69896,69897],{"class":213},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[144,69899,69900],{"class":146,"line":16857},[144,69901,69902],{"class":213},"      \u002F\u002F 先遍历循环\n",[144,69904,69905,69907,69909,69911,69913,69915,69917,69919,69921,69924,69926,69928,69930],{"class":146,"line":16862},[144,69906,52297],{"class":150},[144,69908,1688],{"class":154},[144,69910,51860],{"class":150},[144,69912,9469],{"class":154},[144,69914,200],{"class":150},[144,69916,4123],{"class":203},[144,69918,9476],{"class":154},[144,69920,1065],{"class":150},[144,69922,69923],{"class":154}," items.",[144,69925,51981],{"class":203},[144,69927,3244],{"class":154},[144,69929,2322],{"class":150},[144,69931,12473],{"class":154},[144,69933,69934,69936,69939,69941,69944],{"class":146,"line":16876},[144,69935,2527],{"class":150},[144,69937,69938],{"class":154}," (items[i].value ",[144,69940,54499],{"class":150},[144,69942,69943],{"class":259}," ''",[144,69945,12473],{"class":154},[144,69947,69948,69951,69954,69956,69959],{"class":146,"line":16881},[144,69949,69950],{"class":150},"          return",[144,69952,69953],{"class":1993}," alert",[144,69955,155],{"class":154},[144,69957,69958],{"class":259},"'输入内容不能为空'",[144,69960,161],{"class":154},[144,69962,69963],{"class":146,"line":16886},[144,69964,2559],{"class":154},[144,69966,69967],{"class":146,"line":16900},[144,69968,52411],{"class":154},[144,69970,69971],{"class":146,"line":16912},[144,69972,2430],{"emptyLinePlaceholder":72},[144,69974,69975],{"class":146,"line":16917},[144,69976,69977],{"class":213},"      \u002F\u002F 创建新的对象\n",[144,69979,69980,69982,69985,69987],{"class":146,"line":16930},[144,69981,58241],{"class":150},[144,69983,69984],{"class":203}," obj",[144,69986,13595],{"class":150},[144,69988,15603],{"class":154},[144,69990,69991,69994,69996,69998,70000],{"class":146,"line":16935},[144,69992,69993],{"class":154},"        stuID: arr.",[144,69995,51981],{"class":203},[144,69997,45579],{"class":150},[144,69999,25131],{"class":203},[144,70001,31479],{"class":154},[144,70003,70004],{"class":146,"line":16940},[144,70005,70006],{"class":154},"        uname: uname.value,\n",[144,70008,70009],{"class":146,"line":16945},[144,70010,70011],{"class":154},"        age: age.value,\n",[144,70013,70014],{"class":146,"line":16958},[144,70015,70016],{"class":154},"        gender: gender.value,\n",[144,70018,70019],{"class":146,"line":16963},[144,70020,70021],{"class":154},"        salary: salary.value,\n",[144,70023,70024],{"class":146,"line":32646},[144,70025,70026],{"class":154},"        city: city.value\n",[144,70028,70029],{"class":146,"line":32652},[144,70030,52411],{"class":154},[144,70032,70033],{"class":146,"line":32658},[144,70034,70035],{"class":213},"      \u002F\u002F console.log(obj);\n",[144,70037,70038],{"class":146,"line":32664},[144,70039,70040],{"class":213},"      \u002F\u002F 追加到数组里面\n",[144,70042,70043,70045,70047],{"class":146,"line":32670},[144,70044,58020],{"class":154},[144,70046,51897],{"class":1993},[144,70048,70049],{"class":154},"(obj)\n",[144,70051,70052],{"class":146,"line":32681},[144,70053,70054],{"class":213},"      \u002F\u002F console.log(arr);\n",[144,70056,70057],{"class":146,"line":32687},[144,70058,70059],{"class":213},"      \u002F\u002F 清空表单  reset重置表单\n",[144,70061,70062,70065,70067,70070],{"class":146,"line":32707},[144,70063,70064],{"class":203},"      this",[144,70066,713],{"class":154},[144,70068,70069],{"class":1993},"reset",[144,70071,2006],{"class":154},[144,70073,70074],{"class":146,"line":32713},[144,70075,70076],{"class":213},"      \u002F\u002F 调用渲染函数\n",[144,70078,70079,70082],{"class":146,"line":32724},[144,70080,70081],{"class":1993},"      render",[144,70083,2006],{"class":154},[144,70085,70086],{"class":146,"line":32730},[144,70087,33474],{"class":154},[144,70089,70090],{"class":146,"line":32736},[144,70091,70092],{"class":213},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[144,70094,70095,70098,70101],{"class":146,"line":32742},[144,70096,70097],{"class":150},"    function",[144,70099,70100],{"class":1993}," render",[144,70102,10884],{"class":154},[144,70104,70105],{"class":146,"line":32748},[144,70106,70107],{"class":213},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[144,70109,70110,70113,70115],{"class":146,"line":32754},[144,70111,70112],{"class":154},"      tbody.innerHTML ",[144,70114,200],{"class":150},[144,70116,70117],{"class":259}," ''\n",[144,70119,70120],{"class":146,"line":32760},[144,70121,70122],{"class":213},"      \u002F\u002F 遍历数组\n",[144,70124,70125,70127,70129,70131,70133,70135,70137,70139,70141,70143,70145,70147,70149],{"class":146,"line":32766},[144,70126,52297],{"class":150},[144,70128,1688],{"class":154},[144,70130,51860],{"class":150},[144,70132,9469],{"class":154},[144,70134,200],{"class":150},[144,70136,4123],{"class":203},[144,70138,9476],{"class":154},[144,70140,1065],{"class":150},[144,70142,51978],{"class":154},[144,70144,51981],{"class":203},[144,70146,3244],{"class":154},[144,70148,2322],{"class":150},[144,70150,12473],{"class":154},[144,70152,70153,70155,70158,70160,70162,70165,70167,70170],{"class":146,"line":32786},[144,70154,61283],{"class":150},[144,70156,70157],{"class":203}," tr",[144,70159,13595],{"class":150},[144,70161,54409],{"class":154},[144,70163,70164],{"class":1993},"createElement",[144,70166,155],{"class":154},[144,70168,70169],{"class":259},"'tr'",[144,70171,161],{"class":154},[144,70173,70174,70177,70179],{"class":146,"line":32792},[144,70175,70176],{"class":154},"        tr.innerHTML ",[144,70178,200],{"class":150},[144,70180,70181],{"class":259}," `\n",[144,70183,70184,70187,70189,70191,70193,70196,70199],{"class":146,"line":32808},[144,70185,70186],{"class":259},"        \u003Ctd>${",[144,70188,3910],{"class":154},[144,70190,1045],{"class":259},[144,70192,596],{"class":154},[144,70194,70195],{"class":259},"].",[144,70197,70198],{"class":154},"stuID",[144,70200,70201],{"class":259},"}\u003C\u002Ftd>\n",[144,70203,70204,70207,70209,70211,70213,70215,70218],{"class":146,"line":32814},[144,70205,70206],{"class":259},"          \u003Ctd>${",[144,70208,3910],{"class":154},[144,70210,1045],{"class":259},[144,70212,596],{"class":154},[144,70214,70195],{"class":259},[144,70216,70217],{"class":154},"uname",[144,70219,70201],{"class":259},[144,70221,70222,70224,70226,70228,70230,70232,70235],{"class":146,"line":32828},[144,70223,70206],{"class":259},[144,70225,3910],{"class":154},[144,70227,1045],{"class":259},[144,70229,596],{"class":154},[144,70231,70195],{"class":259},[144,70233,70234],{"class":154},"age",[144,70236,70201],{"class":259},[144,70238,70239,70241,70243,70245,70247,70249,70252],{"class":146,"line":32834},[144,70240,70206],{"class":259},[144,70242,3910],{"class":154},[144,70244,1045],{"class":259},[144,70246,596],{"class":154},[144,70248,70195],{"class":259},[144,70250,70251],{"class":154},"gender",[144,70253,70201],{"class":259},[144,70255,70256,70258,70260,70262,70264,70266,70269],{"class":146,"line":32849},[144,70257,70206],{"class":259},[144,70259,3910],{"class":154},[144,70261,1045],{"class":259},[144,70263,596],{"class":154},[144,70265,70195],{"class":259},[144,70267,70268],{"class":154},"salary",[144,70270,70201],{"class":259},[144,70272,70273,70275,70277,70279,70281,70283,70286],{"class":146,"line":32855},[144,70274,70206],{"class":259},[144,70276,3910],{"class":154},[144,70278,1045],{"class":259},[144,70280,596],{"class":154},[144,70282,70195],{"class":259},[144,70284,70285],{"class":154},"city",[144,70287,70201],{"class":259},[144,70289,70290],{"class":146,"line":32864},[144,70291,69606],{"class":259},[144,70293,70294,70297,70299],{"class":146,"line":32870},[144,70295,70296],{"class":259},"            \u003Ca href=\"javascript:\" data-id=${",[144,70298,596],{"class":154},[144,70300,70301],{"class":259},"}>删除\u003C\u002Fa>\n",[144,70303,70304],{"class":146,"line":32879},[144,70305,70306],{"class":259},"          \u003C\u002Ftd> \n",[144,70308,70309],{"class":146,"line":32885},[144,70310,70311],{"class":259},"          `\n",[144,70313,70314],{"class":146,"line":32891},[144,70315,70316],{"class":213},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[144,70318,70319,70322,70325],{"class":146,"line":32900},[144,70320,70321],{"class":154},"        tbody.",[144,70323,70324],{"class":1993},"appendChild",[144,70326,70327],{"class":154},"(tr)\n",[144,70329,70330],{"class":146,"line":32906},[144,70331,52411],{"class":154},[144,70333,70334],{"class":146,"line":32917},[144,70335,2217],{"class":154},[144,70337,70338],{"class":146,"line":32923},[144,70339,2430],{"emptyLinePlaceholder":72},[144,70341,70342],{"class":146,"line":32942},[144,70343,70344],{"class":213},"    \u002F\u002F 3.删除委托\n",[144,70346,70347],{"class":146,"line":32948},[144,70348,70349],{"class":213},"    \u002F\u002F 3.1 事件委托 tbody\n",[144,70351,70352,70355,70357,70359,70361,70363,70365,70367,70369],{"class":146,"line":32959},[144,70353,70354],{"class":154},"    tbody.",[144,70356,57826],{"class":1993},[144,70358,155],{"class":154},[144,70360,57831],{"class":259},[144,70362,12466],{"class":154},[144,70364,54462],{"class":150},[144,70366,1688],{"class":154},[144,70368,229],{"class":5247},[144,70370,12473],{"class":154},[144,70372,70373,70375,70377,70379,70381],{"class":146,"line":32965},[144,70374,54493],{"class":150},[144,70376,67047],{"class":154},[144,70378,54499],{"class":150},[144,70380,68269],{"class":259},[144,70382,12473],{"class":154},[144,70384,70385],{"class":146,"line":32985},[144,70386,70387],{"class":213},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[144,70389,70390],{"class":146,"line":33001},[144,70391,70392],{"class":213},"        \u002F\u002F console.log(e.target.dataset.id);\n",[144,70394,70395],{"class":146,"line":33007},[144,70396,70397],{"class":213},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[144,70399,70400,70403,70405,70408,70410],{"class":146,"line":33021},[144,70401,70402],{"class":154},"        arr.",[144,70404,58023],{"class":1993},[144,70406,70407],{"class":154},"(e.target.dataset.id, ",[144,70409,372],{"class":203},[144,70411,161],{"class":154},[144,70413,70414],{"class":146,"line":33027},[144,70415,70416],{"class":213},"        \u002F\u002F 重新渲染一次\n",[144,70418,70419,70422],{"class":146,"line":33033},[144,70420,70421],{"class":1993},"        render",[144,70423,2006],{"class":154},[144,70425,70426],{"class":146,"line":33044},[144,70427,52411],{"class":154},[144,70429,70430],{"class":146,"line":33050},[144,70431,33474],{"class":154},[144,70433,70434,70436,70438],{"class":146,"line":33056},[144,70435,52430],{"class":154},[144,70437,51826],{"class":51313},[144,70439,51320],{"class":154},[144,70441,70442],{"class":146,"line":33066},[144,70443,2430],{"emptyLinePlaceholder":72},[144,70445,70446,70448,70450],{"class":146,"line":33072},[144,70447,51798],{"class":154},[144,70449,51813],{"class":51313},[144,70451,51320],{"class":154},[144,70453,70454],{"class":146,"line":33083},[144,70455,2430],{"emptyLinePlaceholder":72},[144,70457,70458,70460,70462],{"class":146,"line":33089},[144,70459,51798],{"class":154},[144,70461,50648],{"class":51313},[144,70463,51320],{"class":154},[14,70465,70466],{},"样式：",[135,70468,70472],{"className":70469,"code":70470,"language":70471,"meta":30,"style":30},"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",[141,70473,70474,70479,70489,70498,70502,70506,70511,70521,70526,70530,70535,70545,70550,70559,70563,70567,70572,70577,70587,70597,70602,70606,70611,70620,70630,70635,70645,70655,70659,70664,70672,70676,70681,70686,70691,70699,70708,70712,70717,70726,70730,70735,70744,70748,70753,70762,70771,70779,70783,70788,70797,70807,70816,70826,70832,70841,70851,70861,70865,70870,70879,70887,70897,70905,70914,70923,70933,70941,70945,70950,70959],{"__ignoreMap":30},[144,70475,70476],{"class":146,"line":147},[144,70477,70478],{"class":154},"* {\n",[144,70480,70481,70484,70486],{"class":146,"line":66},[144,70482,70483],{"class":51313},"  margin",[144,70485,51450],{"class":154},[144,70487,70488],{"class":259},"0;\n",[144,70490,70491,70494,70496],{"class":146,"line":1210},[144,70492,70493],{"class":259},"  padding",[144,70495,51450],{"class":154},[144,70497,70488],{"class":259},[144,70499,70500],{"class":146,"line":1225},[144,70501,1595],{"class":154},[144,70503,70504],{"class":146,"line":1231},[144,70505,2430],{"emptyLinePlaceholder":72},[144,70507,70508],{"class":146,"line":1245},[144,70509,70510],{"class":259},"a {\n",[144,70512,70513,70516,70518],{"class":146,"line":1251},[144,70514,70515],{"class":51313},"  text-decoration",[144,70517,51450],{"class":154},[144,70519,70520],{"class":259},"none;\n",[144,70522,70523],{"class":146,"line":1342},[144,70524,70525],{"class":259},"  color:#721c24;\n",[144,70527,70528],{"class":146,"line":1348},[144,70529,1595],{"class":154},[144,70531,70532],{"class":146,"line":1360},[144,70533,70534],{"class":259},"h1 {\n",[144,70536,70537,70540,70542],{"class":146,"line":1642},[144,70538,70539],{"class":51313},"  text-align",[144,70541,51450],{"class":154},[144,70543,70544],{"class":259},"center;\n",[144,70546,70547],{"class":146,"line":1647},[144,70548,70549],{"class":259},"  color:#333;\n",[144,70551,70552,70554,70556],{"class":146,"line":1653},[144,70553,70483],{"class":51313},[144,70555,51450],{"class":154},[144,70557,70558],{"class":259},"20px 0;\n",[144,70560,70561],{"class":146,"line":1658},[144,70562,2704],{"class":154},[144,70564,70565],{"class":146,"line":1672},[144,70566,1595],{"class":154},[144,70568,70569],{"class":146,"line":1677},[144,70570,70571],{"class":259},"table {\n",[144,70573,70574],{"class":146,"line":1683},[144,70575,70576],{"class":259},"  margin:0 auto;\n",[144,70578,70579,70582,70584],{"class":146,"line":1704},[144,70580,70581],{"class":51313},"  width",[144,70583,51450],{"class":154},[144,70585,70586],{"class":259},"800px;\n",[144,70588,70589,70592,70594],{"class":146,"line":1709},[144,70590,70591],{"class":51313},"  border-collapse",[144,70593,51450],{"class":154},[144,70595,70596],{"class":259},"collapse;\n",[144,70598,70599],{"class":146,"line":1723},[144,70600,70601],{"class":259},"  color:#004085;\n",[144,70603,70604],{"class":146,"line":1728},[144,70605,1595],{"class":154},[144,70607,70608],{"class":146,"line":1757},[144,70609,70610],{"class":259},"th {\n",[144,70612,70613,70615,70617],{"class":146,"line":1762},[144,70614,70493],{"class":51313},[144,70616,51450],{"class":154},[144,70618,70619],{"class":259},"10px;\n",[144,70621,70622,70625,70627],{"class":146,"line":1779},[144,70623,70624],{"class":51313},"  background",[144,70626,51450],{"class":154},[144,70628,70629],{"class":213},"#cfe5ff;\n",[144,70631,70632],{"class":146,"line":1784},[144,70633,70634],{"class":154},"  \n",[144,70636,70637,70640,70642],{"class":146,"line":1789},[144,70638,70639],{"class":51313},"  font-size",[144,70641,51450],{"class":154},[144,70643,70644],{"class":259},"20px;\n",[144,70646,70647,70650,70652],{"class":146,"line":1794},[144,70648,70649],{"class":51313},"  font-weight",[144,70651,51450],{"class":154},[144,70653,70654],{"class":259},"400;\n",[144,70656,70657],{"class":146,"line":1808},[144,70658,1595],{"class":154},[144,70660,70661],{"class":146,"line":1813},[144,70662,70663],{"class":259},"td,th {\n",[144,70665,70666,70669],{"class":146,"line":2607},[144,70667,70668],{"class":259},"  border:1px solid",[144,70670,70671],{"class":213}," #b8daff;\n",[144,70673,70674],{"class":146,"line":2621},[144,70675,1595],{"class":154},[144,70677,70678],{"class":146,"line":2629},[144,70679,70680],{"class":259},"td {\n",[144,70682,70683],{"class":146,"line":2634},[144,70684,70685],{"class":259},"  padding:10px;\n",[144,70687,70688],{"class":146,"line":2640},[144,70689,70690],{"class":259},"  color:#666;\n",[144,70692,70693,70695,70697],{"class":146,"line":2646},[144,70694,70539],{"class":51313},[144,70696,51450],{"class":154},[144,70698,70544],{"class":259},[144,70700,70701,70703,70705],{"class":146,"line":2651},[144,70702,70639],{"class":51313},[144,70704,51450],{"class":154},[144,70706,70707],{"class":259},"16px;\n",[144,70709,70710],{"class":146,"line":7979},[144,70711,1595],{"class":154},[144,70713,70714],{"class":146,"line":8003},[144,70715,70716],{"class":259},"tbody tr {\n",[144,70718,70719,70721,70723],{"class":146,"line":8008},[144,70720,70624],{"class":51313},[144,70722,51450],{"class":154},[144,70724,70725],{"class":213},"#fff;\n",[144,70727,70728],{"class":146,"line":8014},[144,70729,1595],{"class":154},[144,70731,70732],{"class":146,"line":8041},[144,70733,70734],{"class":259},"tbody tr:hover {\n",[144,70736,70737,70739,70741],{"class":146,"line":8046},[144,70738,70624],{"class":51313},[144,70740,51450],{"class":154},[144,70742,70743],{"class":213},"#e1ecf8;\n",[144,70745,70746],{"class":146,"line":8052},[144,70747,1595],{"class":154},[144,70749,70750],{"class":146,"line":8064},[144,70751,70752],{"class":259},".info {\n",[144,70754,70755,70757,70759],{"class":146,"line":8076},[144,70756,70581],{"class":51313},[144,70758,51450],{"class":154},[144,70760,70761],{"class":259},"900px;\n",[144,70763,70764,70766,70768],{"class":146,"line":8088},[144,70765,70483],{"class":51313},[144,70767,51450],{"class":154},[144,70769,70770],{"class":259},"50px auto;\n",[144,70772,70773,70775,70777],{"class":146,"line":9747},[144,70774,70539],{"class":51313},[144,70776,51450],{"class":154},[144,70778,70544],{"class":259},[144,70780,70781],{"class":146,"line":9772},[144,70782,1595],{"class":154},[144,70784,70785],{"class":146,"line":9795},[144,70786,70787],{"class":259},".info  input, .info select {\n",[144,70789,70790,70792,70794],{"class":146,"line":9819},[144,70791,70581],{"class":51313},[144,70793,51450],{"class":154},[144,70795,70796],{"class":259},"80px;\n",[144,70798,70799,70802,70804],{"class":146,"line":9824},[144,70800,70801],{"class":51313},"  height",[144,70803,51450],{"class":154},[144,70805,70806],{"class":259},"27px;\n",[144,70808,70809,70812,70814],{"class":146,"line":9829},[144,70810,70811],{"class":51313},"  outline",[144,70813,51450],{"class":154},[144,70815,70520],{"class":259},[144,70817,70818,70821,70823],{"class":146,"line":9834},[144,70819,70820],{"class":51313},"  border-radius",[144,70822,51450],{"class":154},[144,70824,70825],{"class":259},"5px;\n",[144,70827,70828,70830],{"class":146,"line":9843},[144,70829,70668],{"class":259},[144,70831,70671],{"class":213},[144,70833,70834,70837,70839],{"class":146,"line":9848},[144,70835,70836],{"class":51313},"  padding-left",[144,70838,51450],{"class":154},[144,70840,70825],{"class":259},[144,70842,70843,70846,70848],{"class":146,"line":9854},[144,70844,70845],{"class":51313},"  box-sizing",[144,70847,51450],{"class":154},[144,70849,70850],{"class":259},"border-box;\n",[144,70852,70853,70856,70858],{"class":146,"line":9875},[144,70854,70855],{"class":51313},"  margin-right",[144,70857,51450],{"class":154},[144,70859,70860],{"class":259},"15px;\n",[144,70862,70863],{"class":146,"line":9881},[144,70864,1595],{"class":154},[144,70866,70867],{"class":146,"line":9895},[144,70868,70869],{"class":259},".info button {\n",[144,70871,70872,70874,70876],{"class":146,"line":9901},[144,70873,70581],{"class":51313},[144,70875,51450],{"class":154},[144,70877,70878],{"class":259},"60px;\n",[144,70880,70881,70883,70885],{"class":146,"line":9928},[144,70882,70801],{"class":51313},[144,70884,51450],{"class":154},[144,70886,70806],{"class":259},[144,70888,70889,70892,70894],{"class":146,"line":9937},[144,70890,70891],{"class":51313},"  background-color",[144,70893,51450],{"class":154},[144,70895,70896],{"class":213},"#004085;\n",[144,70898,70899,70901,70903],{"class":146,"line":9943},[144,70900,70811],{"class":51313},[144,70902,51450],{"class":154},[144,70904,70520],{"class":259},[144,70906,70907,70910,70912],{"class":146,"line":9951},[144,70908,70909],{"class":51313},"  border",[144,70911,51450],{"class":154},[144,70913,70488],{"class":259},[144,70915,70916,70919,70921],{"class":146,"line":9956},[144,70917,70918],{"class":51313},"  color",[144,70920,51450],{"class":154},[144,70922,70725],{"class":213},[144,70924,70925,70928,70930],{"class":146,"line":16635},[144,70926,70927],{"class":51313},"  cursor",[144,70929,51450],{"class":154},[144,70931,70932],{"class":259},"pointer;\n",[144,70934,70935,70937,70939],{"class":146,"line":16641},[144,70936,70820],{"class":51313},[144,70938,51450],{"class":154},[144,70940,70825],{"class":259},[144,70942,70943],{"class":146,"line":16664},[144,70944,1595],{"class":154},[144,70946,70947],{"class":146,"line":16670},[144,70948,70949],{"class":259},".info .age {\n",[144,70951,70952,70954,70956],{"class":146,"line":16693},[144,70953,70581],{"class":51313},[144,70955,51450],{"class":154},[144,70957,70958],{"class":259},"50px;\n",[144,70960,70961],{"class":146,"line":16707},[144,70962,1595],{"class":154},[14,70964,70965],{},"思路：",[14,70967,70968],{},[28,70969],{"alt":30,"src":70970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,70972,70973],{},[28,70974],{"alt":30,"src":70975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,70977,70978],{},[28,70979],{"alt":30,"src":70980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[115,70982,70984],{"id":70983},"_3315-重绘回流","3.3.15 重绘回流",[14,70986,70987],{},[28,70988],{"alt":30,"src":70989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,70991,70992],{},[28,70993],{"alt":30,"src":70994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,70996,70997],{},[28,70998],{"alt":30,"src":70999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[18,71001,71003],{"id":71002},"_34-bom","3.4 BOM",[14,71005,71006],{},[28,71007],{"alt":30,"src":71008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,71010,71011],{},"平时写的document省略了window而已，实际上是window.document",[14,71013,71014],{},"函数也是这样，调用的时候实际为window.fn()",[14,71016,71017],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,71019,71020],{},"window大部分情况下可以省略",[115,71022,71024],{"id":71023},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,71026,71027],{},"只执行一次",[14,71029,71030],{},[28,71031],{"alt":30,"src":71032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71034,71035],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71037,71038],{},[28,71039],{"alt":30,"src":71040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[115,71042,71044],{"id":71043},"_342-js执行机制","3.4.2 JS执行机制",[14,71046,71047],{},[28,71048],{"alt":30,"src":71049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71051,71052],{},"两个的结果都是1111 3333 2222",[14,71054,71055],{},[28,71056],{"alt":30,"src":71057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71059,71060],{},[28,71061],{"alt":30,"src":71062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71064,71065],{},[28,71066],{"alt":30,"src":71067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71069,71070],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71072,71073],{},"工作流程：",[14,71075,71076],{},[28,71077],{"alt":30,"src":71078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71080,71081],{},[28,71082],{"alt":30,"src":71083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71085,71086],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71088,71089],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[115,71091,71093],{"id":71092},"_343-location对象","3.4.3 location对象",[14,71095,71096],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71098,71099],{},[28,71100],{"alt":30,"src":71101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71103,71104],{},"href可以跳转页面",[98,71106,71107],{},[101,71108,71109],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71111,71112],{},"search得到提交信息之后网站后边的地址",[14,71114,71115],{},[28,71116],{"alt":30,"src":71117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71119,71120],{},[28,71121],{"alt":30,"src":71122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[98,71124,71125],{"start":66},[101,71126,71127],{},"hash:这个获取单页面应用#后边的地址",[14,71129,71130],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71132,71133],{},[28,71134],{"alt":30,"src":71135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[135,71137,71139],{"className":53080,"code":71138,"language":53082,"meta":30,"style":30},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[141,71140,71141,71161,71181],{"__ignoreMap":30},[144,71142,71143,71145,71147,71149,71151,71154,71157,71159],{"class":146,"line":147},[144,71144,52157],{"class":154},[144,71146,393],{"class":51313},[144,71148,61070],{"class":1993},[144,71150,200],{"class":154},[144,71152,71153],{"class":259},"\"#\u002Fmy\"",[144,71155,71156],{"class":154},">我的\u003C\u002F",[144,71158,393],{"class":51313},[144,71160,51320],{"class":154},[144,71162,71163,71165,71167,71169,71171,71174,71177,71179],{"class":146,"line":66},[144,71164,52157],{"class":154},[144,71166,393],{"class":51313},[144,71168,61070],{"class":1993},[144,71170,200],{"class":154},[144,71172,71173],{"class":259},"\"#\u002Ffriend\"",[144,71175,71176],{"class":154},">关注\u003C\u002F",[144,71178,393],{"class":51313},[144,71180,51320],{"class":154},[144,71182,71183,71185,71187,71189,71191,71194,71197,71199],{"class":146,"line":1210},[144,71184,52157],{"class":154},[144,71186,393],{"class":51313},[144,71188,61070],{"class":1993},[144,71190,200],{"class":154},[144,71192,71193],{"class":259},"\"#\u002Fdownload\"",[144,71195,71196],{"class":154},">下载\u003C\u002F",[144,71198,393],{"class":51313},[144,71200,51320],{"class":154},[14,71202,71203],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[98,71205,71206],{"start":1210},[101,71207,71208,71209,71211,71212,71214],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53729,71210],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53729,71213],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[115,71216,71218],{"id":71217},"_345-navigator对象","3.4.5 navigator对象",[14,71220,71221],{},[28,71222],{"alt":30,"src":71223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[135,71225,71229],{"className":71226,"code":71227,"language":71228,"meta":30,"style":30},"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",[141,71230,71231,71236,71247,71259,71264,71315,71356,71361,71374,71386,71391],{"__ignoreMap":30},[144,71232,71233],{"class":146,"line":147},[144,71234,71235],{"class":213},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[144,71237,71238,71240,71242,71244],{"class":146,"line":66},[144,71239,381],{"class":150},[144,71241,155],{"class":154},[144,71243,54462],{"class":150},[144,71245,71246],{"class":154}," () { \n",[144,71248,71249,71251,71254,71256],{"class":146,"line":1210},[144,71250,6823],{"class":150},[144,71252,71253],{"class":203}," userAgent",[144,71255,13595],{"class":150},[144,71257,71258],{"class":154}," navigator.userAgent \n",[144,71260,71261],{"class":146,"line":1225},[144,71262,71263],{"class":213},"\u002F\u002F 验证是否为Android或iPhone \n",[144,71265,71266,71268,71271,71273,71276,71279,71281,71283,71286,71288,71291,71295,71297,71299,71301,71304,71306,71308,71310,71312],{"class":146,"line":1231},[144,71267,6823],{"class":150},[144,71269,71270],{"class":203}," android",[144,71272,13595],{"class":150},[144,71274,71275],{"class":154}," userAgent.",[144,71277,71278],{"class":1993},"match",[144,71280,155],{"class":154},[144,71282,739],{"class":259},[144,71284,71285],{"class":47990},"(Android);",[144,71287,1141],{"class":150},[144,71289,71290],{"class":203},"[\\s",[144,71292,71294],{"class":71293},"snhLl","\\\u002F",[144,71296,1095],{"class":203},[144,71298,636],{"class":150},[144,71300,155],{"class":47990},[144,71302,71303],{"class":203},"[\\d.]",[144,71305,636],{"class":150},[144,71307,584],{"class":47990},[144,71309,1141],{"class":150},[144,71311,739],{"class":259},[144,71313,71314],{"class":154},") \n",[144,71316,71317,71319,71322,71324,71326,71328,71330,71332,71335,71338,71341,71343,71345,71348,71350,71352,71354],{"class":146,"line":1245},[144,71318,6823],{"class":150},[144,71320,71321],{"class":203}," iphone",[144,71323,13595],{"class":150},[144,71325,71275],{"class":154},[144,71327,71278],{"class":1993},[144,71329,155],{"class":154},[144,71331,739],{"class":259},[144,71333,71334],{"class":47990},"(iPhone",[144,71336,71337],{"class":203},"\\s",[144,71339,71340],{"class":47990},"OS)",[144,71342,71337],{"class":203},[144,71344,155],{"class":47990},[144,71346,71347],{"class":203},"[\\d_]",[144,71349,636],{"class":150},[144,71351,584],{"class":47990},[144,71353,739],{"class":259},[144,71355,71314],{"class":154},[144,71357,71358],{"class":146,"line":1251},[144,71359,71360],{"class":213},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[144,71362,71363,71365,71368,71371],{"class":146,"line":1342},[144,71364,1561],{"class":150},[144,71366,71367],{"class":154}," (android ",[144,71369,71370],{"class":150},"||",[144,71372,71373],{"class":154}," iphone) { \n",[144,71375,71376,71379,71381,71384],{"class":146,"line":1348},[144,71377,71378],{"class":154},"location.href ",[144,71380,200],{"class":150},[144,71382,71383],{"class":259}," 'http:\u002F\u002Fm.itcast.cn'",[144,71385,2704],{"class":154},[144,71387,71388],{"class":146,"line":1360},[144,71389,71390],{"class":154},"} \n",[144,71392,71393],{"class":146,"line":1642},[144,71394,71395],{"class":154},"})()\n",[115,71397,71399],{"id":71398},"_346-histroy对象","3.4.6 histroy对象",[14,71401,71402],{},[28,71403],{"alt":30,"src":71404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,71406,71407],{},"浏览器地址的前进与后退!!!",[14,71409,71410],{},"history.back() 等效于 history.go(-1)",[14,71412,71413],{},"history.forward() 等效于 history.go(1)",[18,71415,71417],{"id":71416},"_35-本地存储","3.5 本地存储",[98,71419,71420,71423,71426],{},[101,71421,71422],{},"数据存储在用户浏览器中",[101,71424,71425],{},"设置、读取方便、甚至页面刷新不丢失数据",[101,71427,71428],{},"容量较大，sessionStorage和localStorage约 5M 左右",[115,71430,71432],{"id":71431},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,71434,71435],{},"只能存储字符串",[14,71437,71438],{},[28,71439],{"alt":30,"src":71440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,71442,71443],{},[28,71444],{"alt":30,"src":71445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,71447,71448],{},"键值对要加引号,不然就会当变量来看了",[14,71450,71451],{},"localStorage.setItem('uname', 'pink')",[14,71453,71454],{},"刷新之后信息不再丢失",[14,71456,71457],{},"操作key,value会跟着变",[14,71459,71460],{},"删除只删除键就可以,即名字",[14,71462,71451],{},[14,71464,71465],{},"改:",[14,71467,71468],{},"localStorage.setItem('uname','red')",[14,71470,71471],{},"有这个键就是改,没有这个键就是改",[14,71473,71474],{},[28,71475],{"alt":30,"src":71476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,71478,71479],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,71481,71482],{},[28,71483],{"alt":30,"src":71484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,71486,71487],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[115,71489,71491],{"id":71490},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,71493,71494],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,71496,71497],{},"特性:",[98,71499,71500,71503,71506,71509],{},[101,71501,71502],{},"生命周期为关闭浏览器窗口",[101,71504,71505],{},"在同一个窗口(页面)下数据可以共享",[101,71507,71508],{},"以键值对的形式存储使用",[101,71510,71511],{},"用法跟localStorage 基本相同",[115,71513,71515],{"id":71514},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,71517,71518],{},"本地只能存储字符串,无法直接存储复杂数据类型",[135,71520,71522],{"className":53080,"code":71521,"language":53082,"meta":30,"style":30},"\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",[141,71523,71524,71532,71537,71542,71547,71552,71556,71561,71566],{"__ignoreMap":30},[144,71525,71526,71528,71530],{"class":146,"line":147},[144,71527,1065],{"class":154},[144,71529,51826],{"class":51313},[144,71531,51320],{"class":154},[144,71533,71534],{"class":146,"line":66},[144,71535,71536],{"class":154},"    const obj = {\n",[144,71538,71539],{"class":146,"line":1210},[144,71540,71541],{"class":154},"      uname: 'pink老师',\n",[144,71543,71544],{"class":146,"line":1225},[144,71545,71546],{"class":154},"      age: 18,\n",[144,71548,71549],{"class":146,"line":1231},[144,71550,71551],{"class":154},"      gender: '女'\n",[144,71553,71554],{"class":146,"line":1245},[144,71555,2217],{"class":154},[144,71557,71558],{"class":146,"line":1251},[144,71559,71560],{"class":154},"    \u002F\u002F 存储复杂数据类型\n",[144,71562,71563],{"class":146,"line":1342},[144,71564,71565],{"class":154},"    localStorage.setItem('obj', obj)\n",[144,71567,71568,71570,71572],{"class":146,"line":1348},[144,71569,52430],{"class":154},[144,71571,51826],{"class":51313},[144,71573,51320],{"class":154},[14,71575,71576],{},[28,71577],{"alt":30,"src":71578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,71580,71581],{},"如果获取一下数据:",[14,71583,71584],{},"log(localStorage.getItem('obj'))",[14,71586,71587],{},[28,71588],{"alt":30,"src":71589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,71591,71592],{},"发现直接存对象是使用不了的!!!",[22029,71594,71596],{"id":71595},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,71598,71599],{},[28,71600],{"alt":30,"src":71601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[135,71603,71605],{"className":50646,"code":71604,"language":50648,"meta":30,"style":30},"\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",[141,71606,71607,71615,71625,71635,71644,71652,71656,71660,71686,71705,71713,71717,71722,71727],{"__ignoreMap":30},[144,71608,71609,71611,71613],{"class":146,"line":147},[144,71610,1065],{"class":154},[144,71612,51826],{"class":51313},[144,71614,51320],{"class":154},[144,71616,71617,71619,71621,71623],{"class":146,"line":66},[144,71618,11252],{"class":150},[144,71620,69984],{"class":203},[144,71622,13595],{"class":150},[144,71624,15603],{"class":154},[144,71626,71627,71630,71633],{"class":146,"line":1210},[144,71628,71629],{"class":154},"      uname: ",[144,71631,71632],{"class":259},"'pink老师'",[144,71634,31479],{"class":154},[144,71636,71637,71640,71642],{"class":146,"line":1225},[144,71638,71639],{"class":154},"      age: ",[144,71641,805],{"class":203},[144,71643,31479],{"class":154},[144,71645,71646,71649],{"class":146,"line":1231},[144,71647,71648],{"class":154},"      gender: ",[144,71650,71651],{"class":259},"'女'\n",[144,71653,71654],{"class":146,"line":1245},[144,71655,2217],{"class":154},[144,71657,71658],{"class":146,"line":1251},[144,71659,71560],{"class":213},[144,71661,71662,71665,71668,71670,71673,71675,71678,71680,71683],{"class":146,"line":1342},[144,71663,71664],{"class":154},"  localStorage.",[144,71666,71667],{"class":1993},"setItem",[144,71669,155],{"class":154},[144,71671,71672],{"class":259},"'obj'",[144,71674,12466],{"class":154},[144,71676,71677],{"class":203},"JSON",[144,71679,713],{"class":154},[144,71681,71682],{"class":1993},"stringify",[144,71684,71685],{"class":154},"(obj))\n",[144,71687,71688,71691,71693,71696,71699,71701,71703],{"class":146,"line":1348},[144,71689,71690],{"class":154},"  console.",[144,71692,58260],{"class":1993},[144,71694,71695],{"class":154},"(localStorage.",[144,71697,71698],{"class":1993},"getItem",[144,71700,155],{"class":154},[144,71702,71672],{"class":259},[144,71704,30510],{"class":154},[144,71706,71707,71709,71711],{"class":146,"line":1360},[144,71708,52430],{"class":154},[144,71710,51826],{"class":51313},[144,71712,51320],{"class":154},[144,71714,71715],{"class":146,"line":1642},[144,71716,70634],{"class":154},[144,71718,71719],{"class":146,"line":1647},[144,71720,71721],{"class":154},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[144,71723,71724],{"class":146,"line":1653},[144,71725,71726],{"class":154},"  类型是字符串的\n",[144,71728,71729],{"class":146,"line":1658},[144,71730,71731],{"class":154},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22029,71733,71735],{"id":71734},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,71737,71738],{},[28,71739],{"alt":30,"src":71740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,71742,71743],{},[28,71744],{"alt":30,"src":71745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[135,71747,71749],{"className":53080,"code":71748,"language":53082,"meta":30,"style":30},"  \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",[141,71750,71751,71759,71763,71767,71771,71775,71779,71784,71789,71794,71799,71804,71809,71814,71819],{"__ignoreMap":30},[144,71752,71753,71755,71757],{"class":146,"line":147},[144,71754,52157],{"class":154},[144,71756,51826],{"class":51313},[144,71758,51320],{"class":154},[144,71760,71761],{"class":146,"line":66},[144,71762,71536],{"class":154},[144,71764,71765],{"class":146,"line":1210},[144,71766,71541],{"class":154},[144,71768,71769],{"class":146,"line":1225},[144,71770,71546],{"class":154},[144,71772,71773],{"class":146,"line":1231},[144,71774,71551],{"class":154},[144,71776,71777],{"class":146,"line":1245},[144,71778,2217],{"class":154},[144,71780,71781],{"class":146,"line":1251},[144,71782,71783],{"class":154},"    \u002F\u002F 1.存储复杂数据类型\n",[144,71785,71786],{"class":146,"line":1342},[144,71787,71788],{"class":154},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[144,71790,71791],{"class":146,"line":1348},[144,71792,71793],{"class":154},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[144,71795,71796],{"class":146,"line":1360},[144,71797,71798],{"class":154},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[144,71800,71801],{"class":146,"line":1642},[144,71802,71803],{"class":154},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[144,71805,71806],{"class":146,"line":1647},[144,71807,71808],{"class":154},"    \u002F\u002F 取\n",[144,71810,71811],{"class":146,"line":1653},[144,71812,71813],{"class":154},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[144,71815,71816],{"class":146,"line":1658},[144,71817,71818],{"class":154},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[144,71820,71821,71823,71825],{"class":146,"line":1672},[144,71822,52430],{"class":154},[144,71824,51826],{"class":51313},[144,71826,51320],{"class":154},[14,71828,71829],{},[28,71830],{"alt":30,"src":71831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[115,71833,71835],{"id":71834},"_356-数组map方法","3.5.6 数组map方法",[14,71837,71838],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,71840,71841],{},[28,71842],{"alt":30,"src":71843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,71845,71846],{},[28,71847],{"alt":30,"src":71848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,71850,71851,71854],{},[304,71852,71853],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,71856,71857],{},"map有返回值，但是forEach没有返回值",[14,71859,71860],{},"map是个方法。用的时候要加 ()",[14,71862,71863],{},"map返回的是一个数组",[115,71865,71867],{"id":71866},"_357-数组中join方法","3.5.7 数组中join方法",[14,71869,71870],{},[28,71871],{"alt":30,"src":71872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,71874,71875],{},"类似于python中拼接字符串一样！",[98,71877,71878,71881,71884],{},[101,71879,71880],{},"小括号为空则逗号分开",[101,71882,71883],{},"小括号为空字符串 ''，则元素之间没有分隔符",[101,71885,71886],{},"小括号用啥符号就用进行分割",[115,71888,71890],{"id":71889},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[98,71892,71893,71896,71899,71902,71905],{},[101,71894,71895],{},"记住本地时间获取快速方式：new Date().toDateString()",[101,71897,71898],{},"尽量减少DOM操作，用好map+join的渲染方式",[101,71900,71901],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[101,71903,71904],{},"return可以实现函数的结束",[101,71906,71907],{},"禁止跳转是 preventDefault() 不要忘记",[135,71909,71911],{"className":50646,"code":71910,"language":50648,"meta":30,"style":30},"\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",[141,71912,71913,71923,71937,71941,71949,71963,71983,71995,72003,72009,72019,72029,72033,72037,72043,72053,72065,72069,72073,72080,72092,72106,72116,72120,72124,72131,72138,72145,72157,72169,72179,72191,72195,72199,72206,72213,72225,72237,72247,72259,72289,72293,72297,72304,72316,72328,72352,72362,72372,72376,72380,72388,72399,72411,72423,72435,72452,72464,72476,72480,72484,72491,72503,72515,72527,72538,72556,72569,72581,72605,72616,72620,72624,72632,72642,72646,72650,72656,72668,72679,72689,72693,72697,72703,72725,72729,72733,72739,72745,72757,72767,72779,72809,72822,72839,72843,72847,72858,72880,72890,72894,72898,72911,72921,72933,72945,72957,72969,72979,72989,72999,73010,73023,73027,73035,73043,73047,73055,73068,73088,73121,73154,73187,73213,73231,73249,73257,73283,73301,73319,73337,73355,73373,73381,73389,73407,73415,73444,73452,73460,73468,73481,73493,73505,73517,73529,73541,73554,73566,73574,73582,73590,73595,73600,73604,73608,73612,73616,73620,73624,73629,73634,73639,73644,73652,73660,73668,73673,73678,73683,73688,73693,73698,73703,73708,73713,73718,73723,73728,73733,73738,73742,73747,73752,73762,73771,73775,73780,73789,73805,73847,73887,73926,73991,73999,74003,74008,74026,74034,74039,74044,74074,74080,74085,74098,74110,74122,74134,74146,74158,74170,74174,74184,74188,74193,74198,74202,74211,74215,74220,74225,74244,74249,74269,74273,74278,74282,74287,74305,74323,74341,74360,74379,74398,74403,74409,74430,74436,74445,74451,74457,74463,74490,74503,74508,74518,74524,74530,74536,74542,74547,74553,74559,74565,74571,74604,74609,74614,74619,74624,74630,74636,74642,74653,74658,74664,74671,74685,74691,74715,74720,74725,74731,74737,74758,74764,74777,74783,74789,74795,74801,74806,74812,74818,74824,74842,74856,74862,74870,74876,74898,74903,74908,74913,74918,74923,74932,74941,74946],{"__ignoreMap":30},[144,71914,71915,71917,71919,71921],{"class":146,"line":147},[144,71916,51310],{"class":154},[144,71918,51314],{"class":51313},[144,71920,51317],{"class":1993},[144,71922,51320],{"class":154},[144,71924,71925,71927,71929,71931,71933,71935],{"class":146,"line":66},[144,71926,1065],{"class":154},[144,71928,50648],{"class":51313},[144,71930,51329],{"class":1993},[144,71932,200],{"class":154},[144,71934,51334],{"class":259},[144,71936,51320],{"class":154},[144,71938,71939],{"class":146,"line":1210},[144,71940,2430],{"emptyLinePlaceholder":72},[144,71942,71943,71945,71947],{"class":146,"line":1225},[144,71944,1065],{"class":154},[144,71946,51347],{"class":51313},[144,71948,51320],{"class":154},[144,71950,71951,71953,71955,71957,71959,71961],{"class":146,"line":1231},[144,71952,52157],{"class":154},[144,71954,51357],{"class":51313},[144,71956,51360],{"class":1993},[144,71958,200],{"class":154},[144,71960,51365],{"class":259},[144,71962,51320],{"class":154},[144,71964,71965,71967,71969,71971,71973,71975,71977,71979,71981],{"class":146,"line":1245},[144,71966,52157],{"class":154},[144,71968,51357],{"class":51313},[144,71970,14951],{"class":1993},[144,71972,200],{"class":154},[144,71974,51404],{"class":259},[144,71976,51384],{"class":1993},[144,71978,200],{"class":154},[144,71980,51411],{"class":259},[144,71982,51320],{"class":154},[144,71984,71985,71987,71989,71991,71993],{"class":146,"line":1251},[144,71986,52157],{"class":154},[144,71988,51420],{"class":51313},[144,71990,51423],{"class":154},[144,71992,51420],{"class":51313},[144,71994,51320],{"class":154},[144,71996,71997,71999,72001],{"class":146,"line":1342},[144,71998,52157],{"class":154},[144,72000,5157],{"class":51313},[144,72002,51320],{"class":154},[144,72004,72005,72007],{"class":146,"line":1348},[144,72006,6434],{"class":51313},[144,72008,15603],{"class":154},[144,72010,72011,72013,72015,72017],{"class":146,"line":1360},[144,72012,54708],{"class":203},[144,72014,51450],{"class":154},[144,72016,346],{"class":203},[144,72018,1321],{"class":154},[144,72020,72021,72023,72025,72027],{"class":146,"line":1642},[144,72022,54719],{"class":203},[144,72024,51450],{"class":154},[144,72026,346],{"class":203},[144,72028,1321],{"class":154},[144,72030,72031],{"class":146,"line":1647},[144,72032,2217],{"class":154},[144,72034,72035],{"class":146,"line":1653},[144,72036,2430],{"emptyLinePlaceholder":72},[144,72038,72039,72041],{"class":146,"line":1658},[144,72040,57292],{"class":51313},[144,72042,15603],{"class":154},[144,72044,72045,72047,72049,72051],{"class":146,"line":1672},[144,72046,57299],{"class":203},[144,72048,51450],{"class":154},[144,72050,51605],{"class":203},[144,72052,1321],{"class":154},[144,72054,72055,72057,72059,72061,72063],{"class":146,"line":1677},[144,72056,62090],{"class":203},[144,72058,51450],{"class":154},[144,72060,855],{"class":203},[144,72062,51505],{"class":150},[144,72064,1321],{"class":154},[144,72066,72067],{"class":146,"line":1683},[144,72068,2217],{"class":154},[144,72070,72071],{"class":146,"line":1704},[144,72072,2430],{"emptyLinePlaceholder":72},[144,72074,72075,72078],{"class":146,"line":1709},[144,72076,72077],{"class":1993},"    .info",[144,72079,15603],{"class":154},[144,72081,72082,72084,72086,72088,72090],{"class":146,"line":1723},[144,72083,54784],{"class":203},[144,72085,51450],{"class":154},[144,72087,51502],{"class":203},[144,72089,51505],{"class":150},[144,72091,1321],{"class":154},[144,72093,72094,72096,72098,72100,72102,72104],{"class":146,"line":1728},[144,72095,54719],{"class":203},[144,72097,51450],{"class":154},[144,72099,601],{"class":203},[144,72101,51505],{"class":150},[144,72103,51569],{"class":203},[144,72105,1321],{"class":154},[144,72107,72108,72110,72112,72114],{"class":146,"line":1757},[144,72109,57299],{"class":203},[144,72111,51450],{"class":154},[144,72113,51605],{"class":203},[144,72115,1321],{"class":154},[144,72117,72118],{"class":146,"line":1762},[144,72119,2217],{"class":154},[144,72121,72122],{"class":146,"line":1779},[144,72123,2430],{"emptyLinePlaceholder":72},[144,72125,72126,72129],{"class":146,"line":1784},[144,72127,72128],{"class":1993},"    .uname",[144,72130,31479],{"class":154},[144,72132,72133,72136],{"class":146,"line":1789},[144,72134,72135],{"class":1993},"    .age",[144,72137,31479],{"class":154},[144,72139,72140,72143],{"class":146,"line":1794},[144,72141,72142],{"class":1993},"    .salary",[144,72144,15603],{"class":154},[144,72146,72147,72149,72151,72153,72155],{"class":146,"line":1808},[144,72148,54784],{"class":203},[144,72150,51450],{"class":154},[144,72152,466],{"class":203},[144,72154,51505],{"class":150},[144,72156,1321],{"class":154},[144,72158,72159,72161,72163,72165,72167],{"class":146,"line":1813},[144,72160,54798],{"class":203},[144,72162,51450],{"class":154},[144,72164,855],{"class":203},[144,72166,51505],{"class":150},[144,72168,1321],{"class":154},[144,72170,72171,72173,72175,72177],{"class":146,"line":2607},[144,72172,61793],{"class":203},[144,72174,51450],{"class":154},[144,72176,54750],{"class":203},[144,72178,1321],{"class":154},[144,72180,72181,72183,72185,72187,72189],{"class":146,"line":2621},[144,72182,61763],{"class":203},[144,72184,51450],{"class":154},[144,72186,730],{"class":203},[144,72188,51505],{"class":150},[144,72190,1321],{"class":154},[144,72192,72193],{"class":146,"line":2629},[144,72194,2217],{"class":154},[144,72196,72197],{"class":146,"line":2634},[144,72198,2430],{"emptyLinePlaceholder":72},[144,72200,72201,72204],{"class":146,"line":2640},[144,72202,72203],{"class":1993},"    .gender",[144,72205,31479],{"class":154},[144,72207,72208,72211],{"class":146,"line":2646},[144,72209,72210],{"class":1993},"    .city",[144,72212,15603],{"class":154},[144,72214,72215,72217,72219,72221,72223],{"class":146,"line":2651},[144,72216,54784],{"class":203},[144,72218,51450],{"class":154},[144,72220,466],{"class":203},[144,72222,51505],{"class":150},[144,72224,1321],{"class":154},[144,72226,72227,72229,72231,72233,72235],{"class":146,"line":7979},[144,72228,54798],{"class":203},[144,72230,51450],{"class":154},[144,72232,980],{"class":203},[144,72234,51505],{"class":150},[144,72236,1321],{"class":154},[144,72238,72239,72241,72243,72245],{"class":146,"line":8003},[144,72240,61793],{"class":203},[144,72242,51450],{"class":154},[144,72244,54750],{"class":203},[144,72246,1321],{"class":154},[144,72248,72249,72251,72253,72255,72257],{"class":146,"line":8008},[144,72250,61763],{"class":203},[144,72252,51450],{"class":154},[144,72254,730],{"class":203},[144,72256,51505],{"class":150},[144,72258,1321],{"class":154},[144,72260,72261,72263,72265,72267,72269,72271,72274,72276,72278,72280,72283,72285,72287],{"class":146,"line":8014},[144,72262,61990],{"class":203},[144,72264,51450],{"class":154},[144,72266,372],{"class":203},[144,72268,51505],{"class":150},[144,72270,51534],{"class":203},[144,72272,72273],{"class":203}," rgb",[144,72275,155],{"class":154},[144,72277,1752],{"class":203},[144,72279,12466],{"class":154},[144,72281,72282],{"class":203},"197",[144,72284,12466],{"class":154},[144,72286,72282],{"class":203},[144,72288,2749],{"class":154},[144,72290,72291],{"class":146,"line":8041},[144,72292,2217],{"class":154},[144,72294,72295],{"class":146,"line":8046},[144,72296,2430],{"emptyLinePlaceholder":72},[144,72298,72299,72302],{"class":146,"line":8052},[144,72300,72301],{"class":51313},"    button",[144,72303,15603],{"class":154},[144,72305,72306,72308,72310,72312,72314],{"class":146,"line":8064},[144,72307,54798],{"class":203},[144,72309,51450],{"class":154},[144,72311,980],{"class":203},[144,72313,51505],{"class":150},[144,72315,1321],{"class":154},[144,72317,72318,72320,72322,72324,72326],{"class":146,"line":8076},[144,72319,54784],{"class":203},[144,72321,51450],{"class":154},[144,72323,639],{"class":203},[144,72325,51505],{"class":150},[144,72327,1321],{"class":154},[144,72329,72330,72332,72334,72337,72339,72341,72343,72346,72348,72350],{"class":146,"line":8088},[144,72331,54897],{"class":203},[144,72333,51450],{"class":154},[144,72335,72336],{"class":203},"rgb",[144,72338,155],{"class":154},[144,72340,1124],{"class":203},[144,72342,12466],{"class":154},[144,72344,72345],{"class":203},"187",[144,72347,12466],{"class":154},[144,72349,454],{"class":203},[144,72351,2749],{"class":154},[144,72353,72354,72356,72358,72360],{"class":146,"line":9747},[144,72355,57429],{"class":203},[144,72357,51450],{"class":154},[144,72359,60855],{"class":203},[144,72361,1321],{"class":154},[144,72363,72364,72366,72368,72370],{"class":146,"line":9772},[144,72365,61990],{"class":203},[144,72367,51450],{"class":154},[144,72369,346],{"class":203},[144,72371,1321],{"class":154},[144,72373,72374],{"class":146,"line":9795},[144,72375,2217],{"class":154},[144,72377,72378],{"class":146,"line":9819},[144,72379,2430],{"emptyLinePlaceholder":72},[144,72381,72382,72384,72386],{"class":146,"line":9824},[144,72383,72301],{"class":51313},[144,72385,51701],{"class":51313},[144,72387,15603],{"class":154},[144,72389,72390,72392,72394,72397],{"class":146,"line":9829},[144,72391,55022],{"class":203},[144,72393,51450],{"class":154},[144,72395,72396],{"class":203},"inline-block",[144,72398,1321],{"class":154},[144,72400,72401,72403,72405,72407,72409],{"class":146,"line":9834},[144,72402,54784],{"class":203},[144,72404,51450],{"class":154},[144,72406,601],{"class":203},[144,72408,51505],{"class":150},[144,72410,1321],{"class":154},[144,72412,72413,72415,72417,72419,72421],{"class":146,"line":9843},[144,72414,54798],{"class":203},[144,72416,51450],{"class":154},[144,72418,601],{"class":203},[144,72420,51505],{"class":150},[144,72422,1321],{"class":154},[144,72424,72425,72427,72429,72431,72433],{"class":146,"line":9848},[144,72426,57372],{"class":203},[144,72428,51450],{"class":154},[144,72430,627],{"class":203},[144,72432,51505],{"class":150},[144,72434,1321],{"class":154},[144,72436,72437,72439,72441,72443,72445,72447,72450],{"class":146,"line":9854},[144,72438,61990],{"class":203},[144,72440,51450],{"class":154},[144,72442,372],{"class":203},[144,72444,51505],{"class":150},[144,72446,51534],{"class":203},[144,72448,72449],{"class":203}," #fff",[144,72451,1321],{"class":154},[144,72453,72454,72456,72458,72460,72462],{"class":146,"line":9875},[144,72455,55147],{"class":203},[144,72457,51450],{"class":154},[144,72459,474],{"class":203},[144,72461,51505],{"class":150},[144,72463,1321],{"class":154},[144,72465,72466,72468,72470,72472,72474],{"class":146,"line":9881},[144,72467,61763],{"class":203},[144,72469,51450],{"class":154},[144,72471,372],{"class":203},[144,72473,51505],{"class":150},[144,72475,1321],{"class":154},[144,72477,72478],{"class":146,"line":9895},[144,72479,2217],{"class":154},[144,72481,72482],{"class":146,"line":9901},[144,72483,2430],{"emptyLinePlaceholder":72},[144,72485,72486,72489],{"class":146,"line":9928},[144,72487,72488],{"class":1993},"    .total",[144,72490,15603],{"class":154},[144,72492,72493,72495,72497,72499,72501],{"class":146,"line":9937},[144,72494,54784],{"class":203},[144,72496,51450],{"class":154},[144,72498,61642],{"class":203},[144,72500,51505],{"class":150},[144,72502,1321],{"class":154},[144,72504,72505,72507,72509,72511,72513],{"class":146,"line":9943},[144,72506,54798],{"class":203},[144,72508,51450],{"class":154},[144,72510,556],{"class":203},[144,72512,51505],{"class":150},[144,72514,1321],{"class":154},[144,72516,72517,72519,72521,72523,72525],{"class":146,"line":9951},[144,72518,57372],{"class":203},[144,72520,51450],{"class":154},[144,72522,556],{"class":203},[144,72524,51505],{"class":150},[144,72526,1321],{"class":154},[144,72528,72529,72531,72533,72536],{"class":146,"line":9956},[144,72530,57299],{"class":203},[144,72532,51450],{"class":154},[144,72534,72535],{"class":203},"right",[144,72537,1321],{"class":154},[144,72539,72540,72542,72544,72546,72548,72550,72552,72554],{"class":146,"line":16635},[144,72541,54719],{"class":203},[144,72543,51450],{"class":154},[144,72545,556],{"class":203},[144,72547,51505],{"class":150},[144,72549,51569],{"class":203},[144,72551,2068],{"class":203},[144,72553,51505],{"class":150},[144,72555,1321],{"class":154},[144,72557,72558,72561,72563,72565,72567],{"class":146,"line":16641},[144,72559,72560],{"class":203},"      padding-right",[144,72562,51450],{"class":154},[144,72564,601],{"class":203},[144,72566,51505],{"class":150},[144,72568,1321],{"class":154},[144,72570,72571,72573,72575,72577,72579],{"class":146,"line":16664},[144,72572,54935],{"class":203},[144,72574,51450],{"class":154},[144,72576,678],{"class":203},[144,72578,51505],{"class":150},[144,72580,1321],{"class":154},[144,72582,72583,72585,72587,72589,72591,72594,72596,72599,72601,72603],{"class":146,"line":16670},[144,72584,54897],{"class":203},[144,72586,51450],{"class":154},[144,72588,72336],{"class":203},[144,72590,155],{"class":154},[144,72592,72593],{"class":203},"237",[144,72595,12466],{"class":154},[144,72597,72598],{"class":203},"235",[144,72600,12466],{"class":154},[144,72602,72598],{"class":203},[144,72604,2749],{"class":154},[144,72606,72607,72610,72612,72614],{"class":146,"line":16693},[144,72608,72609],{"class":203},"      box-sizing",[144,72611,51450],{"class":154},[144,72613,60518],{"class":203},[144,72615,1321],{"class":154},[144,72617,72618],{"class":146,"line":16707},[144,72619,2217],{"class":154},[144,72621,72622],{"class":146,"line":16727},[144,72623,2430],{"emptyLinePlaceholder":72},[144,72625,72626,72628,72630],{"class":146,"line":16733},[144,72627,72488],{"class":1993},[144,72629,51701],{"class":51313},[144,72631,15603],{"class":154},[144,72633,72634,72636,72638,72640],{"class":146,"line":16744},[144,72635,57429],{"class":203},[144,72637,51450],{"class":154},[144,72639,57434],{"class":203},[144,72641,1321],{"class":154},[144,72643,72644],{"class":146,"line":16767},[144,72645,2217],{"class":154},[144,72647,72648],{"class":146,"line":16789},[144,72649,2430],{"emptyLinePlaceholder":72},[144,72651,72652,72654],{"class":146,"line":16794},[144,72653,65036],{"class":51313},[144,72655,15603],{"class":154},[144,72657,72658,72660,72662,72664,72666],{"class":146,"line":16800},[144,72659,54784],{"class":203},[144,72661,51450],{"class":154},[144,72663,61642],{"class":203},[144,72665,51505],{"class":150},[144,72667,1321],{"class":154},[144,72669,72670,72672,72674,72677],{"class":146,"line":16814},[144,72671,54719],{"class":203},[144,72673,51450],{"class":154},[144,72675,72676],{"class":203},"auto",[144,72678,1321],{"class":154},[144,72680,72681,72683,72685,72687],{"class":146,"line":16827},[144,72682,65043],{"class":203},[144,72684,51450],{"class":154},[144,72686,65048],{"class":203},[144,72688,1321],{"class":154},[144,72690,72691],{"class":146,"line":16832},[144,72692,2217],{"class":154},[144,72694,72695],{"class":146,"line":16846},[144,72696,2430],{"emptyLinePlaceholder":72},[144,72698,72699,72701],{"class":146,"line":16851},[144,72700,65128],{"class":51313},[144,72702,15603],{"class":154},[144,72704,72705,72707,72709,72711,72713,72715,72717,72719,72721,72723],{"class":146,"line":16857},[144,72706,54897],{"class":203},[144,72708,51450],{"class":154},[144,72710,72336],{"class":203},[144,72712,155],{"class":154},[144,72714,72593],{"class":203},[144,72716,12466],{"class":154},[144,72718,72598],{"class":203},[144,72720,12466],{"class":154},[144,72722,72598],{"class":203},[144,72724,2749],{"class":154},[144,72726,72727],{"class":146,"line":16862},[144,72728,2217],{"class":154},[144,72730,72731],{"class":146,"line":16876},[144,72732,2430],{"emptyLinePlaceholder":72},[144,72734,72735,72737],{"class":146,"line":16881},[144,72736,65128],{"class":51313},[144,72738,31479],{"class":154},[144,72740,72741,72743],{"class":146,"line":16886},[144,72742,65194],{"class":51313},[144,72744,15603],{"class":154},[144,72746,72747,72749,72751,72753,72755],{"class":146,"line":16900},[144,72748,54798],{"class":203},[144,72750,51450],{"class":154},[144,72752,428],{"class":203},[144,72754,51505],{"class":150},[144,72756,1321],{"class":154},[144,72758,72759,72761,72763,72765],{"class":146,"line":16912},[144,72760,57299],{"class":203},[144,72762,51450],{"class":154},[144,72764,23768],{"class":203},[144,72766,1321],{"class":154},[144,72768,72769,72771,72773,72775,72777],{"class":146,"line":16917},[144,72770,54935],{"class":203},[144,72772,51450],{"class":154},[144,72774,704],{"class":203},[144,72776,51505],{"class":150},[144,72778,1321],{"class":154},[144,72780,72781,72783,72785,72787,72789,72791,72793,72795,72798,72800,72803,72805,72807],{"class":146,"line":16930},[144,72782,61990],{"class":203},[144,72784,51450],{"class":154},[144,72786,372],{"class":203},[144,72788,51505],{"class":150},[144,72790,51534],{"class":203},[144,72792,72273],{"class":203},[144,72794,155],{"class":154},[144,72796,72797],{"class":203},"228",[144,72799,12466],{"class":154},[144,72801,72802],{"class":203},"225",[144,72804,12466],{"class":154},[144,72806,72802],{"class":203},[144,72808,2749],{"class":154},[144,72810,72811,72814,72816,72818,72820],{"class":146,"line":16935},[144,72812,72813],{"class":203},"      padding-left",[144,72815,51450],{"class":154},[144,72817,474],{"class":203},[144,72819,51505],{"class":150},[144,72821,1321],{"class":154},[144,72823,72824,72826,72828,72830,72833,72835,72837],{"class":146,"line":16940},[144,72825,61873],{"class":203},[144,72827,51450],{"class":154},[144,72829,28134],{"class":203},[144,72831,72832],{"class":203}," linear",[144,72834,61880],{"class":203},[144,72836,850],{"class":150},[144,72838,1321],{"class":154},[144,72840,72841],{"class":146,"line":16945},[144,72842,2217],{"class":154},[144,72844,72845],{"class":146,"line":16958},[144,72846,2430],{"emptyLinePlaceholder":72},[144,72848,72849,72852,72854,72856],{"class":146,"line":16963},[144,72850,72851],{"class":51313},"    tbody",[144,72853,70157],{"class":51313},[144,72855,60953],{"class":1993},[144,72857,15603],{"class":154},[144,72859,72860,72862,72864,72866,72868,72870,72872,72874,72876,72878],{"class":146,"line":32646},[144,72861,54897],{"class":203},[144,72863,51450],{"class":154},[144,72865,72336],{"class":203},[144,72867,155],{"class":154},[144,72869,72593],{"class":203},[144,72871,12466],{"class":154},[144,72873,72598],{"class":203},[144,72875,12466],{"class":154},[144,72877,72598],{"class":203},[144,72879,2749],{"class":154},[144,72881,72882,72884,72886,72888],{"class":146,"line":32652},[144,72883,62038],{"class":203},[144,72885,51450],{"class":154},[144,72887,62043],{"class":203},[144,72889,1321],{"class":154},[144,72891,72892],{"class":146,"line":32658},[144,72893,2217],{"class":154},[144,72895,72896],{"class":146,"line":32664},[144,72897,2430],{"emptyLinePlaceholder":72},[144,72899,72900,72902,72904,72907,72909],{"class":146,"line":32670},[144,72901,72851],{"class":51313},[144,72903,70157],{"class":51313},[144,72905,72906],{"class":51313}," td",[144,72908,1429],{"class":51313},[144,72910,15603],{"class":154},[144,72912,72913,72915,72917,72919],{"class":146,"line":32681},[144,72914,55022],{"class":203},[144,72916,51450],{"class":154},[144,72918,60882],{"class":203},[144,72920,1321],{"class":154},[144,72922,72923,72925,72927,72929,72931],{"class":146,"line":32687},[144,72924,54784],{"class":203},[144,72926,51450],{"class":154},[144,72928,1062],{"class":203},[144,72930,51505],{"class":150},[144,72932,1321],{"class":154},[144,72934,72935,72937,72939,72941,72943],{"class":146,"line":32707},[144,72936,54798],{"class":203},[144,72938,51450],{"class":154},[144,72940,980],{"class":203},[144,72942,51505],{"class":150},[144,72944,1321],{"class":154},[144,72946,72947,72949,72951,72953,72955],{"class":146,"line":32713},[144,72948,57372],{"class":203},[144,72950,51450],{"class":154},[144,72952,980],{"class":203},[144,72954,51505],{"class":150},[144,72956,1321],{"class":154},[144,72958,72959,72961,72963,72965,72967],{"class":146,"line":32724},[144,72960,62090],{"class":203},[144,72962,51450],{"class":154},[144,72964,232],{"class":203},[144,72966,51505],{"class":150},[144,72968,1321],{"class":154},[144,72970,72971,72973,72975,72977],{"class":146,"line":32730},[144,72972,57429],{"class":203},[144,72974,51450],{"class":154},[144,72976,60855],{"class":203},[144,72978,1321],{"class":154},[144,72980,72981,72983,72985,72987],{"class":146,"line":32736},[144,72982,57299],{"class":203},[144,72984,51450],{"class":154},[144,72986,51605],{"class":203},[144,72988,1321],{"class":154},[144,72990,72991,72993,72995,72997],{"class":146,"line":32742},[144,72992,63983],{"class":203},[144,72994,51450],{"class":154},[144,72996,54750],{"class":203},[144,72998,1321],{"class":154},[144,73000,73001,73003,73005,73008],{"class":146,"line":32748},[144,73002,54897],{"class":203},[144,73004,51450],{"class":154},[144,73006,73007],{"class":203},"orange",[144,73009,1321],{"class":154},[144,73011,73012,73014,73016,73019,73021],{"class":146,"line":32754},[144,73013,55147],{"class":203},[144,73015,51450],{"class":154},[144,73017,73018],{"class":203},"12.5",[144,73020,51505],{"class":150},[144,73022,1321],{"class":154},[144,73024,73025],{"class":146,"line":32760},[144,73026,2217],{"class":154},[144,73028,73029,73031,73033],{"class":146,"line":32766},[144,73030,52430],{"class":154},[144,73032,5157],{"class":51313},[144,73034,51320],{"class":154},[144,73036,73037,73039,73041],{"class":146,"line":32786},[144,73038,51798],{"class":154},[144,73040,51347],{"class":51313},[144,73042,51320],{"class":154},[144,73044,73045],{"class":146,"line":32792},[144,73046,2430],{"emptyLinePlaceholder":72},[144,73048,73049,73051,73053],{"class":146,"line":32808},[144,73050,1065],{"class":154},[144,73052,51813],{"class":51313},[144,73054,51320],{"class":154},[144,73056,73057,73059,73061,73064,73066],{"class":146,"line":32814},[144,73058,52157],{"class":154},[144,73060,18],{"class":51313},[144,73062,73063],{"class":154},">学生就业统计表\u003C\u002F",[144,73065,18],{"class":51313},[144,73067,51320],{"class":154},[144,73069,73070,73072,73074,73076,73078,73080,73082,73084,73086],{"class":146,"line":32828},[144,73071,52157],{"class":154},[144,73073,66638],{"class":51313},[144,73075,53499],{"class":1993},[144,73077,200],{"class":154},[144,73079,62677],{"class":259},[144,73081,69083],{"class":1993},[144,73083,200],{"class":154},[144,73085,31789],{"class":259},[144,73087,51320],{"class":154},[144,73089,73090,73092,73094,73096,73098,73100,73102,73104,73106,73108,73110,73113,73115,73117,73119],{"class":146,"line":32834},[144,73091,51354],{"class":154},[144,73093,53834],{"class":51313},[144,73095,53837],{"class":1993},[144,73097,200],{"class":154},[144,73099,62712],{"class":259},[144,73101,14951],{"class":1993},[144,73103,200],{"class":154},[144,73105,69109],{"class":259},[144,73107,61033],{"class":1993},[144,73109,200],{"class":154},[144,73111,73112],{"class":259},"\"姓名\"",[144,73114,53499],{"class":1993},[144,73116,200],{"class":154},[144,73118,69109],{"class":259},[144,73120,51320],{"class":154},[144,73122,73123,73125,73127,73129,73131,73133,73135,73137,73139,73141,73143,73146,73148,73150,73152],{"class":146,"line":32849},[144,73124,51354],{"class":154},[144,73126,53834],{"class":51313},[144,73128,53837],{"class":1993},[144,73130,200],{"class":154},[144,73132,62712],{"class":259},[144,73134,14951],{"class":1993},[144,73136,200],{"class":154},[144,73138,69137],{"class":259},[144,73140,61033],{"class":1993},[144,73142,200],{"class":154},[144,73144,73145],{"class":259},"\"年龄\"",[144,73147,53499],{"class":1993},[144,73149,200],{"class":154},[144,73151,69137],{"class":259},[144,73153,51320],{"class":154},[144,73155,73156,73158,73160,73162,73164,73166,73168,73170,73172,73174,73176,73179,73181,73183,73185],{"class":146,"line":32855},[144,73157,51354],{"class":154},[144,73159,53834],{"class":51313},[144,73161,53837],{"class":1993},[144,73163,200],{"class":154},[144,73165,62712],{"class":259},[144,73167,14951],{"class":1993},[144,73169,200],{"class":154},[144,73171,69239],{"class":259},[144,73173,61033],{"class":1993},[144,73175,200],{"class":154},[144,73177,73178],{"class":259},"\"薪资\"",[144,73180,53499],{"class":1993},[144,73182,200],{"class":154},[144,73184,69239],{"class":259},[144,73186,51320],{"class":154},[144,73188,73189,73191,73193,73195,73197,73199,73201,73203,73205,73207,73209,73211],{"class":146,"line":32864},[144,73190,51354],{"class":154},[144,73192,69157],{"class":51313},[144,73194,14951],{"class":1993},[144,73196,200],{"class":154},[144,73198,69164],{"class":259},[144,73200,14990],{"class":1993},[144,73202,200],{"class":154},[144,73204,7683],{"class":259},[144,73206,53499],{"class":1993},[144,73208,200],{"class":154},[144,73210,69164],{"class":259},[144,73212,51320],{"class":154},[144,73214,73215,73217,73219,73221,73223,73225,73227,73229],{"class":146,"line":32870},[144,73216,55247],{"class":154},[144,73218,69179],{"class":51313},[144,73220,66664],{"class":1993},[144,73222,200],{"class":154},[144,73224,9992],{"class":259},[144,73226,69188],{"class":154},[144,73228,69179],{"class":51313},[144,73230,51320],{"class":154},[144,73232,73233,73235,73237,73239,73241,73243,73245,73247],{"class":146,"line":32879},[144,73234,55247],{"class":154},[144,73236,69179],{"class":51313},[144,73238,66664],{"class":1993},[144,73240,200],{"class":154},[144,73242,10061],{"class":259},[144,73244,69207],{"class":154},[144,73246,69179],{"class":51313},[144,73248,51320],{"class":154},[144,73250,73251,73253,73255],{"class":146,"line":32885},[144,73252,51789],{"class":154},[144,73254,69157],{"class":51313},[144,73256,51320],{"class":154},[144,73258,73259,73261,73263,73265,73267,73269,73271,73273,73275,73277,73279,73281],{"class":146,"line":32891},[144,73260,51354],{"class":154},[144,73262,69157],{"class":51313},[144,73264,14951],{"class":1993},[144,73266,200],{"class":154},[144,73268,69261],{"class":259},[144,73270,14990],{"class":1993},[144,73272,200],{"class":154},[144,73274,7683],{"class":259},[144,73276,53499],{"class":1993},[144,73278,200],{"class":154},[144,73280,69261],{"class":259},[144,73282,51320],{"class":154},[144,73284,73285,73287,73289,73291,73293,73295,73297,73299],{"class":146,"line":32900},[144,73286,55247],{"class":154},[144,73288,69179],{"class":51313},[144,73290,66664],{"class":1993},[144,73292,200],{"class":154},[144,73294,69282],{"class":259},[144,73296,69285],{"class":154},[144,73298,69179],{"class":51313},[144,73300,51320],{"class":154},[144,73302,73303,73305,73307,73309,73311,73313,73315,73317],{"class":146,"line":32906},[144,73304,55247],{"class":154},[144,73306,69179],{"class":51313},[144,73308,66664],{"class":1993},[144,73310,200],{"class":154},[144,73312,69302],{"class":259},[144,73314,69305],{"class":154},[144,73316,69179],{"class":51313},[144,73318,51320],{"class":154},[144,73320,73321,73323,73325,73327,73329,73331,73333,73335],{"class":146,"line":32917},[144,73322,55247],{"class":154},[144,73324,69179],{"class":51313},[144,73326,66664],{"class":1993},[144,73328,200],{"class":154},[144,73330,69322],{"class":259},[144,73332,69325],{"class":154},[144,73334,69179],{"class":51313},[144,73336,51320],{"class":154},[144,73338,73339,73341,73343,73345,73347,73349,73351,73353],{"class":146,"line":32923},[144,73340,55247],{"class":154},[144,73342,69179],{"class":51313},[144,73344,66664],{"class":1993},[144,73346,200],{"class":154},[144,73348,69342],{"class":259},[144,73350,69345],{"class":154},[144,73352,69179],{"class":51313},[144,73354,51320],{"class":154},[144,73356,73357,73359,73361,73363,73365,73367,73369,73371],{"class":146,"line":32942},[144,73358,55247],{"class":154},[144,73360,69179],{"class":51313},[144,73362,66664],{"class":1993},[144,73364,200],{"class":154},[144,73366,69362],{"class":259},[144,73368,69365],{"class":154},[144,73370,69179],{"class":51313},[144,73372,51320],{"class":154},[144,73374,73375,73377,73379],{"class":146,"line":32948},[144,73376,51789],{"class":154},[144,73378,69157],{"class":51313},[144,73380,51320],{"class":154},[144,73382,73383,73385,73387],{"class":146,"line":32959},[144,73384,51354],{"class":154},[144,73386,53900],{"class":51313},[144,73388,51320],{"class":154},[144,73390,73391,73393,73395,73398,73400,73403,73405],{"class":146,"line":32965},[144,73392,55247],{"class":154},[144,73394,144],{"class":51313},[144,73396,73397],{"class":154},">+\u003C\u002F",[144,73399,144],{"class":51313},[144,73401,73402],{"class":154},">添加\u003C\u002F",[144,73404,53900],{"class":51313},[144,73406,51320],{"class":154},[144,73408,73409,73411,73413],{"class":146,"line":32985},[144,73410,52430],{"class":154},[144,73412,66638],{"class":51313},[144,73414,51320],{"class":154},[144,73416,73417,73419,73421,73423,73425,73427,73430,73432,73435,73437,73440,73442],{"class":146,"line":33001},[144,73418,52157],{"class":154},[144,73420,51624],{"class":51313},[144,73422,53499],{"class":1993},[144,73424,200],{"class":154},[144,73426,62593],{"class":259},[144,73428,73429],{"class":154},">共有数据 \u003C",[144,73431,144],{"class":51313},[144,73433,73434],{"class":154},">0\u003C\u002F",[144,73436,144],{"class":51313},[144,73438,73439],{"class":154},"> 条\u003C\u002F",[144,73441,51624],{"class":51313},[144,73443,51320],{"class":154},[144,73445,73446,73448,73450],{"class":146,"line":33007},[144,73447,52157],{"class":154},[144,73449,292],{"class":51313},[144,73451,51320],{"class":154},[144,73453,73454,73456,73458],{"class":146,"line":33021},[144,73455,51354],{"class":154},[144,73457,295],{"class":51313},[144,73459,51320],{"class":154},[144,73461,73462,73464,73466],{"class":146,"line":33027},[144,73463,55247],{"class":154},[144,73465,298],{"class":51313},[144,73467,51320],{"class":154},[144,73469,73470,73472,73474,73477,73479],{"class":146,"line":33033},[144,73471,55315],{"class":154},[144,73473,301],{"class":51313},[144,73475,73476],{"class":154},">ID\u003C\u002F",[144,73478,301],{"class":51313},[144,73480,51320],{"class":154},[144,73482,73483,73485,73487,73489,73491],{"class":146,"line":33044},[144,73484,55315],{"class":154},[144,73486,301],{"class":51313},[144,73488,69468],{"class":154},[144,73490,301],{"class":51313},[144,73492,51320],{"class":154},[144,73494,73495,73497,73499,73501,73503],{"class":146,"line":33050},[144,73496,55315],{"class":154},[144,73498,301],{"class":51313},[144,73500,69481],{"class":154},[144,73502,301],{"class":51313},[144,73504,51320],{"class":154},[144,73506,73507,73509,73511,73513,73515],{"class":146,"line":33056},[144,73508,55315],{"class":154},[144,73510,301],{"class":51313},[144,73512,69494],{"class":154},[144,73514,301],{"class":51313},[144,73516,51320],{"class":154},[144,73518,73519,73521,73523,73525,73527],{"class":146,"line":33066},[144,73520,55315],{"class":154},[144,73522,301],{"class":51313},[144,73524,69507],{"class":154},[144,73526,301],{"class":51313},[144,73528,51320],{"class":154},[144,73530,73531,73533,73535,73537,73539],{"class":146,"line":33072},[144,73532,55315],{"class":154},[144,73534,301],{"class":51313},[144,73536,69520],{"class":154},[144,73538,301],{"class":51313},[144,73540,51320],{"class":154},[144,73542,73543,73545,73547,73550,73552],{"class":146,"line":33083},[144,73544,55315],{"class":154},[144,73546,301],{"class":51313},[144,73548,73549],{"class":154},">录入时间\u003C\u002F",[144,73551,301],{"class":51313},[144,73553,51320],{"class":154},[144,73555,73556,73558,73560,73562,73564],{"class":146,"line":33089},[144,73557,55315],{"class":154},[144,73559,301],{"class":51313},[144,73561,69533],{"class":154},[144,73563,301],{"class":51313},[144,73565,51320],{"class":154},[144,73567,73568,73570,73572],{"class":146,"line":33099},[144,73569,55420],{"class":154},[144,73571,298],{"class":51313},[144,73573,51320],{"class":154},[144,73575,73576,73578,73580],{"class":146,"line":33104},[144,73577,51789],{"class":154},[144,73579,295],{"class":51313},[144,73581,51320],{"class":154},[144,73583,73584,73586,73588],{"class":146,"line":33110},[144,73585,51354],{"class":154},[144,73587,339],{"class":51313},[144,73589,51320],{"class":154},[144,73591,73592],{"class":146,"line":33159},[144,73593,73594],{"class":213},"      \u003C!-- \u003Ctr>\n",[144,73596,73597],{"class":146,"line":33206},[144,73598,73599],{"class":213},"        \u003Ctd>1\u003C\u002Ftd>\n",[144,73601,73602],{"class":146,"line":33211},[144,73603,73599],{"class":213},[144,73605,73606],{"class":146,"line":33217},[144,73607,73599],{"class":213},[144,73609,73610],{"class":146,"line":33236},[144,73611,73599],{"class":213},[144,73613,73614],{"class":146,"line":33242},[144,73615,73599],{"class":213},[144,73617,73618],{"class":146,"line":33262},[144,73619,73599],{"class":213},[144,73621,73622],{"class":146,"line":33268},[144,73623,73599],{"class":213},[144,73625,73626],{"class":146,"line":33274},[144,73627,73628],{"class":213},"        \u003Ctd>\n",[144,73630,73631],{"class":146,"line":33284},[144,73632,73633],{"class":213},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[144,73635,73636],{"class":146,"line":33289},[144,73637,73638],{"class":213},"        \u003C\u002Ftd>\n",[144,73640,73641],{"class":146,"line":33295},[144,73642,73643],{"class":213},"      \u003C\u002Ftr> -->\n",[144,73645,73646,73648,73650],{"class":146,"line":33311},[144,73647,51789],{"class":154},[144,73649,339],{"class":51313},[144,73651,51320],{"class":154},[144,73653,73654,73656,73658],{"class":146,"line":33356},[144,73655,52430],{"class":154},[144,73657,292],{"class":51313},[144,73659,51320],{"class":154},[144,73661,73662,73664,73666],{"class":146,"line":33362},[144,73663,52157],{"class":154},[144,73665,51826],{"class":51313},[144,73667,51320],{"class":154},[144,73669,73670],{"class":146,"line":33368},[144,73671,73672],{"class":213},"    \u002F\u002F const initData = [{\n",[144,73674,73675],{"class":146,"line":33374},[144,73676,73677],{"class":213},"    \u002F\u002F   unameId: 1,\n",[144,73679,73680],{"class":146,"line":33385},[144,73681,73682],{"class":213},"    \u002F\u002F   uname: '华晨宇',\n",[144,73684,73685],{"class":146,"line":33391},[144,73686,73687],{"class":213},"    \u002F\u002F   age: 22,\n",[144,73689,73690],{"class":146,"line":33397},[144,73691,73692],{"class":213},"    \u002F\u002F   salary: 12000,\n",[144,73694,73695],{"class":146,"line":33403},[144,73696,73697],{"class":213},"    \u002F\u002F   gender: '男',\n",[144,73699,73700],{"class":146,"line":33421},[144,73701,73702],{"class":213},"    \u002F\u002F   city: '北京',\n",[144,73704,73705],{"class":146,"line":33435},[144,73706,73707],{"class":213},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[144,73709,73710],{"class":146,"line":33444},[144,73711,73712],{"class":213},"    \u002F\u002F }]\n",[144,73714,73715],{"class":146,"line":33453},[144,73716,73717],{"class":213},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[144,73719,73720],{"class":146,"line":33462},[144,73721,73722],{"class":213},"    \u002F\u002F 1.渲染业务\n",[144,73724,73725],{"class":146,"line":33471},[144,73726,73727],{"class":213},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[144,73729,73730],{"class":146,"line":33477},[144,73731,73732],{"class":213},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[144,73734,73735],{"class":146,"line":33483},[144,73736,73737],{"class":213},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[144,73739,73740],{"class":146,"line":33491},[144,73741,2430],{"emptyLinePlaceholder":72},[144,73743,73744],{"class":146,"line":33496},[144,73745,73746],{"class":213},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[144,73748,73749],{"class":146,"line":33502},[144,73750,73751],{"class":213},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[144,73753,73754,73756,73758,73760],{"class":146,"line":33513},[144,73755,11252],{"class":150},[144,73757,57708],{"class":203},[144,73759,13595],{"class":150},[144,73761,51851],{"class":154},[144,73763,73764,73767,73769],{"class":146,"line":33519},[144,73765,73766],{"class":154},"    console.",[144,73768,58260],{"class":1993},[144,73770,52425],{"class":154},[144,73772,73773],{"class":146,"line":33539},[144,73774,2430],{"emptyLinePlaceholder":72},[144,73776,73777],{"class":146,"line":33545},[144,73778,73779],{"class":213},"    \u002F\u002F 时间函数\n",[144,73781,73782,73784,73787],{"class":146,"line":33551},[144,73783,70097],{"class":150},[144,73785,73786],{"class":1993}," getTime",[144,73788,10884],{"class":154},[144,73790,73791,73793,73796,73798,73800,73803],{"class":146,"line":33557},[144,73792,58241],{"class":150},[144,73794,73795],{"class":203}," date",[144,73797,13595],{"class":150},[144,73799,11609],{"class":150},[144,73801,73802],{"class":1993}," Date",[144,73804,2006],{"class":154},[144,73806,73807,73809,73811,73813,73816,73819,73821,73823,73825,73828,73831,73833,73835,73837,73839,73841,73843,73845],{"class":146,"line":33574},[144,73808,58241],{"class":150},[144,73810,16122],{"class":203},[144,73812,13595],{"class":150},[144,73814,73815],{"class":154}," date.",[144,73817,73818],{"class":1993},"getHours",[144,73820,13081],{"class":154},[144,73822,1065],{"class":150},[144,73824,2068],{"class":203},[144,73826,73827],{"class":150}," ?",[144,73829,73830],{"class":259}," '0'",[144,73832,45579],{"class":150},[144,73834,73815],{"class":154},[144,73836,73818],{"class":1993},[144,73838,13081],{"class":154},[144,73840,1014],{"class":150},[144,73842,73815],{"class":154},[144,73844,73818],{"class":1993},[144,73846,2006],{"class":154},[144,73848,73849,73851,73854,73856,73858,73861,73863,73865,73867,73869,73871,73873,73875,73877,73879,73881,73883,73885],{"class":146,"line":33580},[144,73850,58241],{"class":150},[144,73852,73853],{"class":203}," m",[144,73855,13595],{"class":150},[144,73857,73815],{"class":154},[144,73859,73860],{"class":1993},"getMinutes",[144,73862,13081],{"class":154},[144,73864,1065],{"class":150},[144,73866,2068],{"class":203},[144,73868,73827],{"class":150},[144,73870,73830],{"class":259},[144,73872,45579],{"class":150},[144,73874,73815],{"class":154},[144,73876,73860],{"class":1993},[144,73878,13081],{"class":154},[144,73880,1014],{"class":150},[144,73882,73815],{"class":154},[144,73884,73860],{"class":1993},[144,73886,2006],{"class":154},[144,73888,73889,73891,73893,73895,73897,73900,73902,73904,73906,73908,73910,73912,73914,73916,73918,73920,73922,73924],{"class":146,"line":33586},[144,73890,58241],{"class":150},[144,73892,8459],{"class":203},[144,73894,13595],{"class":150},[144,73896,73815],{"class":154},[144,73898,73899],{"class":1993},"getSeconds",[144,73901,13081],{"class":154},[144,73903,1065],{"class":150},[144,73905,2068],{"class":203},[144,73907,73827],{"class":150},[144,73909,73830],{"class":259},[144,73911,45579],{"class":150},[144,73913,73815],{"class":154},[144,73915,73899],{"class":1993},[144,73917,13081],{"class":154},[144,73919,1014],{"class":150},[144,73921,73815],{"class":154},[144,73923,73899],{"class":1993},[144,73925,2006],{"class":154},[144,73927,73928,73930,73933,73935,73937,73940,73942,73945,73947,73950,73952,73954,73957,73959,73961,73963,73965,73967,73969,73972,73974,73977,73979,73982,73984,73986,73988],{"class":146,"line":33592},[144,73929,58241],{"class":150},[144,73931,73932],{"class":203}," str",[144,73934,13595],{"class":150},[144,73936,62916],{"class":259},[144,73938,73939],{"class":154},"date",[144,73941,713],{"class":259},[144,73943,73944],{"class":1993},"getFullYear",[144,73946,2457],{"class":259},[144,73948,73949],{"class":259},"}\u002F${",[144,73951,73939],{"class":154},[144,73953,713],{"class":259},[144,73955,73956],{"class":1993},"getMonth",[144,73958,13081],{"class":259},[144,73960,636],{"class":150},[144,73962,25131],{"class":203},[144,73964,73949],{"class":259},[144,73966,73939],{"class":154},[144,73968,713],{"class":259},[144,73970,73971],{"class":1993},"getDate",[144,73973,2457],{"class":259},[144,73975,73976],{"class":259},"} ${",[144,73978,570],{"class":154},[144,73980,73981],{"class":259},"}:${",[144,73983,699],{"class":154},[144,73985,73981],{"class":259},[144,73987,850],{"class":154},[144,73989,73990],{"class":259},"}`\n",[144,73992,73993,73996],{"class":146,"line":33598},[144,73994,73995],{"class":150},"      return",[144,73997,73998],{"class":154}," str\n",[144,74000,74001],{"class":146,"line":33604},[144,74002,2217],{"class":154},[144,74004,74005],{"class":146,"line":33631},[144,74006,74007],{"class":213},"    \u002F\u002F 渲染函数\n",[144,74009,74010,74012,74014,74016,74018,74020,74022,74024],{"class":146,"line":33655},[144,74011,11252],{"class":150},[144,74013,69760],{"class":203},[144,74015,13595],{"class":150},[144,74017,54409],{"class":154},[144,74019,54412],{"class":1993},[144,74021,155],{"class":154},[144,74023,69771],{"class":259},[144,74025,161],{"class":154},[144,74027,74028,74030,74032],{"class":146,"line":33661},[144,74029,70097],{"class":150},[144,74031,70100],{"class":1993},[144,74033,10884],{"class":154},[144,74035,74036],{"class":146,"line":33667},[144,74037,74038],{"class":213},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[144,74040,74041],{"class":146,"line":33673},[144,74042,74043],{"class":213},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[144,74045,74046,74048,74051,74053,74055,74058,74060,74062,74064,74067,74069,74072],{"class":146,"line":33684},[144,74047,58241],{"class":150},[144,74049,74050],{"class":203}," trArr",[144,74052,13595],{"class":150},[144,74054,51978],{"class":154},[144,74056,74057],{"class":1993},"map",[144,74059,155],{"class":154},[144,74061,54462],{"class":150},[144,74063,1688],{"class":154},[144,74065,74066],{"class":5247},"ele",[144,74068,12466],{"class":154},[144,74070,74071],{"class":5247},"index",[144,74073,12473],{"class":154},[144,74075,74076,74078],{"class":146,"line":33695},[144,74077,14783],{"class":150},[144,74079,70181],{"class":259},[144,74081,74082],{"class":146,"line":33701},[144,74083,74084],{"class":259},"      \u003Ctr>\n",[144,74086,74087,74089,74091,74093,74096],{"class":146,"line":33718},[144,74088,70186],{"class":259},[144,74090,74066],{"class":154},[144,74092,713],{"class":259},[144,74094,74095],{"class":154},"unameId",[144,74097,70201],{"class":259},[144,74099,74100,74102,74104,74106,74108],{"class":146,"line":33741},[144,74101,70186],{"class":259},[144,74103,74066],{"class":154},[144,74105,713],{"class":259},[144,74107,70217],{"class":154},[144,74109,70201],{"class":259},[144,74111,74112,74114,74116,74118,74120],{"class":146,"line":33764},[144,74113,70186],{"class":259},[144,74115,74066],{"class":154},[144,74117,713],{"class":259},[144,74119,70234],{"class":154},[144,74121,70201],{"class":259},[144,74123,74124,74126,74128,74130,74132],{"class":146,"line":33770},[144,74125,70186],{"class":259},[144,74127,74066],{"class":154},[144,74129,713],{"class":259},[144,74131,70251],{"class":154},[144,74133,70201],{"class":259},[144,74135,74136,74138,74140,74142,74144],{"class":146,"line":33775},[144,74137,70186],{"class":259},[144,74139,74066],{"class":154},[144,74141,713],{"class":259},[144,74143,70268],{"class":154},[144,74145,70201],{"class":259},[144,74147,74148,74150,74152,74154,74156],{"class":146,"line":33784},[144,74149,70186],{"class":259},[144,74151,74066],{"class":154},[144,74153,713],{"class":259},[144,74155,70285],{"class":154},[144,74157,70201],{"class":259},[144,74159,74160,74162,74164,74166,74168],{"class":146,"line":33794},[144,74161,70186],{"class":259},[144,74163,74066],{"class":154},[144,74165,713],{"class":259},[144,74167,2417],{"class":154},[144,74169,70201],{"class":259},[144,74171,74172],{"class":146,"line":33800},[144,74173,73628],{"class":259},[144,74175,74176,74179,74181],{"class":146,"line":33805},[144,74177,74178],{"class":259},"          \u003Ca href=\"#\" data-id=\"${",[144,74180,74071],{"class":154},[144,74182,74183],{"class":259},"}\">删除\u003C\u002Fa>\n",[144,74185,74186],{"class":146,"line":33811},[144,74187,73638],{"class":259},[144,74189,74190],{"class":146,"line":33824},[144,74191,74192],{"class":259},"      \u003C\u002Ftr>\n",[144,74194,74195],{"class":146,"line":33830},[144,74196,74197],{"class":259},"  `\n",[144,74199,74200],{"class":146,"line":33841},[144,74201,64828],{"class":154},[144,74203,74204,74206,74208],{"class":146,"line":33852},[144,74205,58257],{"class":154},[144,74207,58260],{"class":1993},[144,74209,74210],{"class":154},"(trArr)\n",[144,74212,74213],{"class":146,"line":33871},[144,74214,2430],{"emptyLinePlaceholder":72},[144,74216,74217],{"class":146,"line":49531},[144,74218,74219],{"class":213},"      \u002F\u002F (2) 把数组转换为字符串join\n",[144,74221,74222],{"class":146,"line":49536},[144,74223,74224],{"class":213},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[144,74226,74227,74229,74231,74234,74237,74239,74242],{"class":146,"line":49545},[144,74228,70112],{"class":154},[144,74230,200],{"class":150},[144,74232,74233],{"class":154}," trArr.",[144,74235,74236],{"class":1993},"join",[144,74238,155],{"class":154},[144,74240,74241],{"class":259},"''",[144,74243,161],{"class":154},[144,74245,74246],{"class":146,"line":49554},[144,74247,74248],{"class":213},"      \u002F\u002F 显示共有几条\n",[144,74250,74251,74253,74255,74257,74260,74263,74265,74267],{"class":146,"line":49559},[144,74252,55784],{"class":154},[144,74254,54412],{"class":1993},[144,74256,155],{"class":154},[144,74258,74259],{"class":259},"'.total span'",[144,74261,74262],{"class":154},").innerHTML ",[144,74264,200],{"class":150},[144,74266,51978],{"class":154},[144,74268,55844],{"class":203},[144,74270,74271],{"class":146,"line":49564},[144,74272,2217],{"class":154},[144,74274,74275],{"class":146,"line":49569},[144,74276,74277],{"class":213},"    \u002F\u002F render()\n",[144,74279,74280],{"class":146,"line":49582},[144,74281,2430],{"emptyLinePlaceholder":72},[144,74283,74284],{"class":146,"line":49587},[144,74285,74286],{"class":213},"    \u002F\u002F 获取DOM对象\n",[144,74288,74289,74291,74293,74295,74297,74299,74301,74303],{"class":146,"line":49596},[144,74290,11252],{"class":150},[144,74292,69834],{"class":203},[144,74294,13595],{"class":150},[144,74296,54409],{"class":154},[144,74298,54412],{"class":1993},[144,74300,155],{"class":154},[144,74302,69845],{"class":259},[144,74304,161],{"class":154},[144,74306,74307,74309,74311,74313,74315,74317,74319,74321],{"class":146,"line":49605},[144,74308,11252],{"class":150},[144,74310,69661],{"class":203},[144,74312,13595],{"class":150},[144,74314,54409],{"class":154},[144,74316,54412],{"class":1993},[144,74318,155],{"class":154},[144,74320,69672],{"class":259},[144,74322,161],{"class":154},[144,74324,74325,74327,74329,74331,74333,74335,74337,74339],{"class":146,"line":49622},[144,74326,11252],{"class":150},[144,74328,15720],{"class":203},[144,74330,13595],{"class":150},[144,74332,54409],{"class":154},[144,74334,54412],{"class":1993},[144,74336,155],{"class":154},[144,74338,69691],{"class":259},[144,74340,161],{"class":154},[144,74342,74344,74346,74348,74350,74352,74354,74356,74358],{"class":146,"line":74343},231,[144,74345,11252],{"class":150},[144,74347,69720],{"class":203},[144,74349,13595],{"class":150},[144,74351,54409],{"class":154},[144,74353,54412],{"class":1993},[144,74355,155],{"class":154},[144,74357,69731],{"class":259},[144,74359,161],{"class":154},[144,74361,74363,74365,74367,74369,74371,74373,74375,74377],{"class":146,"line":74362},232,[144,74364,11252],{"class":150},[144,74366,69700],{"class":203},[144,74368,13595],{"class":150},[144,74370,54409],{"class":154},[144,74372,54412],{"class":1993},[144,74374,155],{"class":154},[144,74376,69711],{"class":259},[144,74378,161],{"class":154},[144,74380,74382,74384,74386,74388,74390,74392,74394,74396],{"class":146,"line":74381},233,[144,74383,11252],{"class":150},[144,74385,69740],{"class":203},[144,74387,13595],{"class":150},[144,74389,54409],{"class":154},[144,74391,54412],{"class":1993},[144,74393,155],{"class":154},[144,74395,69751],{"class":259},[144,74397,161],{"class":154},[144,74399,74401],{"class":146,"line":74400},234,[144,74402,2430],{"emptyLinePlaceholder":72},[144,74404,74406],{"class":146,"line":74405},235,[144,74407,74408],{"class":213},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[144,74410,74412,74414,74416,74418,74420,74422,74424,74426,74428],{"class":146,"line":74411},236,[144,74413,69852],{"class":154},[144,74415,57826],{"class":1993},[144,74417,155],{"class":154},[144,74419,69859],{"class":259},[144,74421,12466],{"class":154},[144,74423,54462],{"class":150},[144,74425,1688],{"class":154},[144,74427,229],{"class":5247},[144,74429,12473],{"class":154},[144,74431,74433],{"class":146,"line":74432},237,[144,74434,74435],{"class":213},"      \u002F\u002F 禁止浏览器跳转\n",[144,74437,74439,74441,74443],{"class":146,"line":74438},238,[144,74440,69879],{"class":154},[144,74442,69882],{"class":1993},[144,74444,2006],{"class":154},[144,74446,74448],{"class":146,"line":74447},239,[144,74449,74450],{"class":213},"      \u002F\u002F 非空判断\n",[144,74452,74454],{"class":146,"line":74453},240,[144,74455,74456],{"class":213},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[144,74458,74460],{"class":146,"line":74459},241,[144,74461,74462],{"class":213},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[144,74464,74466,74468,74470,74472,74475,74477,74480,74483,74485,74487],{"class":146,"line":74465},242,[144,74467,54493],{"class":150},[144,74469,1688],{"class":154},[144,74471,381],{"class":150},[144,74473,74474],{"class":154},"uname.value ",[144,74476,71370],{"class":150},[144,74478,74479],{"class":150}," !",[144,74481,74482],{"class":154},"age.value ",[144,74484,71370],{"class":150},[144,74486,74479],{"class":150},[144,74488,74489],{"class":154},"salary.value) {\n",[144,74491,74493,74495,74497,74499,74501],{"class":146,"line":74492},243,[144,74494,14783],{"class":150},[144,74496,69953],{"class":1993},[144,74498,155],{"class":154},[144,74500,69958],{"class":259},[144,74502,161],{"class":154},[144,74504,74506],{"class":146,"line":74505},244,[144,74507,52411],{"class":154},[144,74509,74511,74513,74515],{"class":146,"line":74510},245,[144,74512,58020],{"class":154},[144,74514,51897],{"class":1993},[144,74516,74517],{"class":154},"({\n",[144,74519,74521],{"class":146,"line":74520},246,[144,74522,74523],{"class":213},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[144,74525,74527],{"class":146,"line":74526},247,[144,74528,74529],{"class":213},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[144,74531,74533],{"class":146,"line":74532},248,[144,74534,74535],{"class":213},"        \u002F\u002F 对象的序号应为数组长度+1\n",[144,74537,74539],{"class":146,"line":74538},249,[144,74540,74541],{"class":213},"        \u002F\u002F unameId: arr.length + 1,\n",[144,74543,74545],{"class":146,"line":74544},250,[144,74546,2430],{"emptyLinePlaceholder":72},[144,74548,74550],{"class":146,"line":74549},251,[144,74551,74552],{"class":213},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[144,74554,74556],{"class":146,"line":74555},252,[144,74557,74558],{"class":213},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[144,74560,74562],{"class":146,"line":74561},253,[144,74563,74564],{"class":213},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[144,74566,74568],{"class":146,"line":74567},254,[144,74569,74570],{"class":213},"        \u002F\u002F 0当假看\n",[144,74572,74574,74577,74579,74581,74584,74586,74588,74590,74593,74595,74597,74600,74602],{"class":146,"line":74573},255,[144,74575,74576],{"class":154},"        unameId: arr.",[144,74578,51981],{"class":203},[144,74580,73827],{"class":150},[144,74582,74583],{"class":154}," arr[arr.",[144,74585,51981],{"class":203},[144,74587,52284],{"class":150},[144,74589,25131],{"class":203},[144,74591,74592],{"class":154},"].unameId ",[144,74594,636],{"class":150},[144,74596,25131],{"class":203},[144,74598,74599],{"class":150}," :",[144,74601,25131],{"class":203},[144,74603,31479],{"class":154},[144,74605,74607],{"class":146,"line":74606},256,[144,74608,70006],{"class":154},[144,74610,74612],{"class":146,"line":74611},257,[144,74613,70011],{"class":154},[144,74615,74617],{"class":146,"line":74616},258,[144,74618,70021],{"class":154},[144,74620,74622],{"class":146,"line":74621},259,[144,74623,70016],{"class":154},[144,74625,74627],{"class":146,"line":74626},260,[144,74628,74629],{"class":154},"        city: city.value,\n",[144,74631,74633],{"class":146,"line":74632},261,[144,74634,74635],{"class":213},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[144,74637,74639],{"class":146,"line":74638},262,[144,74640,74641],{"class":213},"        \u002F\u002F time: new Date().toDateString()\n",[144,74643,74645,74648,74651],{"class":146,"line":74644},263,[144,74646,74647],{"class":154},"        time: ",[144,74649,74650],{"class":1993},"getTime",[144,74652,2006],{"class":154},[144,74654,74656],{"class":146,"line":74655},264,[144,74657,64828],{"class":154},[144,74659,74661],{"class":146,"line":74660},265,[144,74662,74663],{"class":213},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[144,74665,74667,74669],{"class":146,"line":74666},266,[144,74668,70081],{"class":1993},[144,74670,2006],{"class":154},[144,74672,74674,74676,74678,74680,74682],{"class":146,"line":74673},267,[144,74675,70064],{"class":203},[144,74677,713],{"class":154},[144,74679,70069],{"class":1993},[144,74681,13081],{"class":154},[144,74683,74684],{"class":213},"\u002F\u002F重置表单\n",[144,74686,74688],{"class":146,"line":74687},268,[144,74689,74690],{"class":213},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[144,74692,74694,74697,74699,74701,74704,74706,74708,74710,74712],{"class":146,"line":74693},269,[144,74695,74696],{"class":154},"      localStorage.",[144,74698,71667],{"class":1993},[144,74700,155],{"class":154},[144,74702,74703],{"class":259},"'data'",[144,74705,12466],{"class":154},[144,74707,71677],{"class":203},[144,74709,713],{"class":154},[144,74711,71682],{"class":1993},[144,74713,74714],{"class":154},"(arr))\n",[144,74716,74718],{"class":146,"line":74717},270,[144,74719,33474],{"class":154},[144,74721,74723],{"class":146,"line":74722},271,[144,74724,2430],{"emptyLinePlaceholder":72},[144,74726,74728],{"class":146,"line":74727},272,[144,74729,74730],{"class":213},"    \u002F\u002F 3.删除业务\n",[144,74732,74734],{"class":146,"line":74733},273,[144,74735,74736],{"class":213},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[144,74738,74740,74742,74744,74746,74748,74750,74752,74754,74756],{"class":146,"line":74739},274,[144,74741,70354],{"class":154},[144,74743,57826],{"class":1993},[144,74745,155],{"class":154},[144,74747,57831],{"class":259},[144,74749,12466],{"class":154},[144,74751,54462],{"class":150},[144,74753,1688],{"class":154},[144,74755,229],{"class":5247},[144,74757,12473],{"class":154},[144,74759,74761],{"class":146,"line":74760},275,[144,74762,74763],{"class":213},"      \u002F\u002F 判断是否点击的是删除按钮\n",[144,74765,74767,74769,74771,74773,74775],{"class":146,"line":74766},276,[144,74768,54493],{"class":150},[144,74770,67047],{"class":154},[144,74772,54499],{"class":150},[144,74774,68269],{"class":259},[144,74776,12473],{"class":154},[144,74778,74780],{"class":146,"line":74779},277,[144,74781,74782],{"class":213},"        \u002F\u002F alert(1)\n",[144,74784,74786],{"class":146,"line":74785},278,[144,74787,74788],{"class":213},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[144,74790,74792],{"class":146,"line":74791},279,[144,74793,74794],{"class":213},"        \u002F\u002F console.log(e.target)\n",[144,74796,74798],{"class":146,"line":74797},280,[144,74799,74800],{"class":213},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[144,74802,74804],{"class":146,"line":74803},281,[144,74805,2430],{"emptyLinePlaceholder":72},[144,74807,74809],{"class":146,"line":74808},282,[144,74810,74811],{"class":213},"        \u002F\u002F 确认框，确然是否真的要删除\n",[144,74813,74815],{"class":146,"line":74814},283,[144,74816,74817],{"class":213},"        \u002F\u002F confirm()为确认框\n",[144,74819,74821],{"class":146,"line":74820},284,[144,74822,74823],{"class":213},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[144,74825,74827,74829,74831,74834,74836,74839],{"class":146,"line":74826},285,[144,74828,2527],{"class":150},[144,74830,1688],{"class":154},[144,74832,74833],{"class":1993},"confirm",[144,74835,155],{"class":154},[144,74837,74838],{"class":259},"'您确定要删除这条数据吗？'",[144,74840,74841],{"class":154},")) {\n",[144,74843,74845,74848,74850,74852,74854],{"class":146,"line":74844},286,[144,74846,74847],{"class":154},"          arr.",[144,74849,58023],{"class":1993},[144,74851,70407],{"class":154},[144,74853,372],{"class":203},[144,74855,161],{"class":154},[144,74857,74859],{"class":146,"line":74858},287,[144,74860,74861],{"class":213},"          \u002F\u002F 3.4 重新渲染页面\n",[144,74863,74865,74868],{"class":146,"line":74864},288,[144,74866,74867],{"class":1993},"          render",[144,74869,2006],{"class":154},[144,74871,74873],{"class":146,"line":74872},289,[144,74874,74875],{"class":213},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[144,74877,74879,74882,74884,74886,74888,74890,74892,74894,74896],{"class":146,"line":74878},290,[144,74880,74881],{"class":154},"          localStorage.",[144,74883,71667],{"class":1993},[144,74885,155],{"class":154},[144,74887,74703],{"class":259},[144,74889,12466],{"class":154},[144,74891,71677],{"class":203},[144,74893,713],{"class":154},[144,74895,71682],{"class":1993},[144,74897,74714],{"class":154},[144,74899,74901],{"class":146,"line":74900},291,[144,74902,2559],{"class":154},[144,74904,74906],{"class":146,"line":74905},292,[144,74907,52411],{"class":154},[144,74909,74911],{"class":146,"line":74910},293,[144,74912,2430],{"emptyLinePlaceholder":72},[144,74914,74916],{"class":146,"line":74915},294,[144,74917,33474],{"class":154},[144,74919,74921],{"class":146,"line":74920},295,[144,74922,2430],{"emptyLinePlaceholder":72},[144,74924,74926,74928,74930],{"class":146,"line":74925},296,[144,74927,52430],{"class":154},[144,74929,51826],{"class":51313},[144,74931,51320],{"class":154},[144,74933,74935,74937,74939],{"class":146,"line":74934},297,[144,74936,51798],{"class":154},[144,74938,51813],{"class":51313},[144,74940,51320],{"class":154},[144,74942,74944],{"class":146,"line":74943},298,[144,74945,2430],{"emptyLinePlaceholder":72},[144,74947,74949,74951,74953],{"class":146,"line":74948},299,[144,74950,51798],{"class":154},[144,74952,50648],{"class":51313},[144,74954,51320],{"class":154},[18,74956,74958],{"id":74957},"_36-正则表达式","3.6 正则表达式",[14,74960,74961],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,74963,74964],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,74966,74967],{},"正则表达式的作用：",[1162,74969,74970,74977,74983],{},[101,74971,74972,74973,74976],{},"表单验证（ ",[304,74974,74975],{},"匹配"," ）",[101,74978,74979,74980,74976],{},"过滤敏感词（ ",[304,74981,74982],{},"替换",[101,74984,74985,74986,74976],{},"字符串中提取我们想要的部分（ ",[304,74987,74988],{},"提取",[115,74990,74992],{"id":74991},"_361-语法","3.6.1 语法",[14,74994,74995],{},"正则表达式使用步骤：",[98,74997,74998,75001],{},[101,74999,75000],{},"定义规则",[101,75002,75003],{},"查找是否匹配",[14,75005,75006],{},"正则表达式里边不需要写引号",[14,75008,75009],{},[28,75010],{"alt":30,"src":75011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,75013,75014],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,75016,75017],{},"reg.test(str)",[14,75019,75020],{},[28,75021],{"alt":30,"src":75022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,75024,75025],{},[28,75026],{"alt":30,"src":75027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[115,75029,75031],{"id":75030},"_362-元字符","3.6.2 元字符",[98,75033,75034,75037,75040,75043,75050],{},[101,75035,75036],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[101,75038,75039],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[101,75041,75042],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[101,75044,75045,75046],{},"正则验证工具：",[393,75047,75048],{"href":75048,"rel":75049},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23897],[101,75051,75052],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22029,75054,75056],{"id":75055},"_3621-边界符","3.6.2.1 边界符",[14,75058,75059],{},[28,75060],{"alt":30,"src":75061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75063,75064],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75066,75067],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75069,75070],{},"只匹配一次",[14,75072,75073],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22029,75075,75077],{"id":75076},"_3622-量词","3.6.2.2 量词",[14,75079,75080],{},[28,75081],{"alt":30,"src":75082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75084,75085],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22029,75087,75089],{"id":75088},"_3623-元字符","3.6.2.3 元字符",[14,75091,75092],{},[28,75093],{"alt":30,"src":75094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75096,75097],{},"匹配的是a或b或c []只选一个",[14,75099,75100],{},[28,75101],{"alt":30,"src":75102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75104,75105],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75107,75108],{},[28,75109],{"alt":30,"src":75110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75112,75113],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75115,75116],{},[28,75117],{"alt":30,"src":75118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[135,75120,75122],{"className":50646,"code":75121,"language":50648,"meta":30,"style":30},"\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",[141,75123,75124,75134,75148,75152,75160,75174,75194,75206,75214,75218,75226,75234,75239,75270,75297,75325,75329,75334,75362,75393,75398,75403,75434,75466,75498,75502,75507,75538,75568,75598,75602,75607,75638,75669,75699,75729,75733,75738,75771,75775,75780,75811,75842,75846,75851,75882,75912,75943,75947,75952,75984,76015,76046,76073,76104,76136,76169,76200,76231,76263,76294,76302,76310,76314],{"__ignoreMap":30},[144,75125,75126,75128,75130,75132],{"class":146,"line":147},[144,75127,51310],{"class":154},[144,75129,51314],{"class":51313},[144,75131,51317],{"class":1993},[144,75133,51320],{"class":154},[144,75135,75136,75138,75140,75142,75144,75146],{"class":146,"line":66},[144,75137,1065],{"class":154},[144,75139,50648],{"class":51313},[144,75141,51329],{"class":1993},[144,75143,200],{"class":154},[144,75145,51334],{"class":259},[144,75147,51320],{"class":154},[144,75149,75150],{"class":146,"line":1210},[144,75151,2430],{"emptyLinePlaceholder":72},[144,75153,75154,75156,75158],{"class":146,"line":1225},[144,75155,1065],{"class":154},[144,75157,51347],{"class":51313},[144,75159,51320],{"class":154},[144,75161,75162,75164,75166,75168,75170,75172],{"class":146,"line":1231},[144,75163,52157],{"class":154},[144,75165,51357],{"class":51313},[144,75167,51360],{"class":1993},[144,75169,200],{"class":154},[144,75171,51365],{"class":259},[144,75173,51320],{"class":154},[144,75175,75176,75178,75180,75182,75184,75186,75188,75190,75192],{"class":146,"line":1245},[144,75177,52157],{"class":154},[144,75179,51357],{"class":51313},[144,75181,14951],{"class":1993},[144,75183,200],{"class":154},[144,75185,51404],{"class":259},[144,75187,51384],{"class":1993},[144,75189,200],{"class":154},[144,75191,51411],{"class":259},[144,75193,51320],{"class":154},[144,75195,75196,75198,75200,75202,75204],{"class":146,"line":1251},[144,75197,52157],{"class":154},[144,75199,51420],{"class":51313},[144,75201,51423],{"class":154},[144,75203,51420],{"class":51313},[144,75205,51320],{"class":154},[144,75207,75208,75210,75212],{"class":146,"line":1342},[144,75209,51798],{"class":154},[144,75211,51347],{"class":51313},[144,75213,51320],{"class":154},[144,75215,75216],{"class":146,"line":1348},[144,75217,2430],{"emptyLinePlaceholder":72},[144,75219,75220,75222,75224],{"class":146,"line":1360},[144,75221,1065],{"class":154},[144,75223,51813],{"class":51313},[144,75225,51320],{"class":154},[144,75227,75228,75230,75232],{"class":146,"line":1642},[144,75229,52157],{"class":154},[144,75231,51826],{"class":51313},[144,75233,51320],{"class":154},[144,75235,75236],{"class":146,"line":1647},[144,75237,75238],{"class":213},"    \u002F\u002F 元字符中\n",[144,75240,75241,75243,75245,75247,75249,75252,75254,75256,75259,75261,75264,75267],{"class":146,"line":1653},[144,75242,73766],{"class":154},[144,75244,58260],{"class":1993},[144,75246,155],{"class":154},[144,75248,739],{"class":259},[144,75250,75251],{"class":47990},"哈",[144,75253,739],{"class":259},[144,75255,713],{"class":154},[144,75257,75258],{"class":1993},"test",[144,75260,155],{"class":154},[144,75262,75263],{"class":259},"'哈'",[144,75265,75266],{"class":154},"))  ",[144,75268,75269],{"class":213},"\u002F\u002Ftrue\n",[144,75271,75272,75274,75276,75278,75280,75282,75284,75286,75288,75290,75293,75295],{"class":146,"line":1658},[144,75273,73766],{"class":154},[144,75275,58260],{"class":1993},[144,75277,155],{"class":154},[144,75279,739],{"class":259},[144,75281,75251],{"class":47990},[144,75283,739],{"class":259},[144,75285,713],{"class":154},[144,75287,75258],{"class":1993},[144,75289,155],{"class":154},[144,75291,75292],{"class":259},"'哈哈'",[144,75294,75266],{"class":154},[144,75296,75269],{"class":213},[144,75298,75299,75301,75303,75305,75307,75309,75311,75313,75315,75317,75320,75323],{"class":146,"line":1672},[144,75300,73766],{"class":154},[144,75302,58260],{"class":1993},[144,75304,155],{"class":154},[144,75306,739],{"class":259},[144,75308,75251],{"class":47990},[144,75310,739],{"class":259},[144,75312,713],{"class":154},[144,75314,75258],{"class":1993},[144,75316,155],{"class":154},[144,75318,75319],{"class":259},"'二哈'",[144,75321,75322],{"class":154},"))   ",[144,75324,75269],{"class":213},[144,75326,75327],{"class":146,"line":1677},[144,75328,2430],{"emptyLinePlaceholder":72},[144,75330,75331],{"class":146,"line":1683},[144,75332,75333],{"class":213},"    \u002F\u002F 1.边界符\n",[144,75335,75336,75338,75340,75342,75344,75346,75348,75350,75352,75354,75356,75358,75360],{"class":146,"line":1704},[144,75337,73766],{"class":154},[144,75339,58260],{"class":1993},[144,75341,155],{"class":154},[144,75343,739],{"class":259},[144,75345,1121],{"class":150},[144,75347,75251],{"class":47990},[144,75349,739],{"class":259},[144,75351,713],{"class":154},[144,75353,75258],{"class":1993},[144,75355,155],{"class":154},[144,75357,75263],{"class":259},[144,75359,75266],{"class":154},[144,75361,75269],{"class":213},[144,75363,75364,75366,75368,75370,75372,75374,75376,75378,75380,75382,75384,75386,75388,75390],{"class":146,"line":1709},[144,75365,73766],{"class":154},[144,75367,58260],{"class":1993},[144,75369,155],{"class":154},[144,75371,739],{"class":259},[144,75373,1121],{"class":150},[144,75375,75251],{"class":47990},[144,75377,457],{"class":150},[144,75379,739],{"class":259},[144,75381,713],{"class":154},[144,75383,75258],{"class":1993},[144,75385,155],{"class":154},[144,75387,75292],{"class":259},[144,75389,75266],{"class":154},[144,75391,75392],{"class":213},"\u002F\u002Ffalse\n",[144,75394,75395],{"class":146,"line":1723},[144,75396,75397],{"class":213},"    \u002F\u002F 2.量词\n",[144,75399,75400],{"class":146,"line":1728},[144,75401,75402],{"class":213},"    \u002F\u002F 量词 * 类似于 >= 0\n",[144,75404,75405,75407,75409,75411,75413,75415,75417,75420,75422,75424,75426,75428,75430,75432],{"class":146,"line":1757},[144,75406,73766],{"class":154},[144,75408,58260],{"class":1993},[144,75410,155],{"class":154},[144,75412,739],{"class":259},[144,75414,1121],{"class":150},[144,75416,75251],{"class":47990},[144,75418,75419],{"class":150},"*$",[144,75421,739],{"class":259},[144,75423,713],{"class":154},[144,75425,75258],{"class":1993},[144,75427,155],{"class":154},[144,75429,75292],{"class":259},[144,75431,75266],{"class":154},[144,75433,75269],{"class":213},[144,75435,75436,75438,75440,75442,75444,75446,75448,75450,75452,75454,75456,75458,75461,75463],{"class":146,"line":1762},[144,75437,73766],{"class":154},[144,75439,58260],{"class":1993},[144,75441,155],{"class":154},[144,75443,739],{"class":259},[144,75445,1121],{"class":150},[144,75447,75251],{"class":47990},[144,75449,75419],{"class":150},[144,75451,739],{"class":259},[144,75453,713],{"class":154},[144,75455,75258],{"class":1993},[144,75457,155],{"class":154},[144,75459,75460],{"class":259},"'二哈好傻'",[144,75462,75266],{"class":154},[144,75464,75465],{"class":213},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[144,75467,75468,75470,75472,75474,75476,75478,75480,75482,75484,75486,75488,75490,75493,75495],{"class":146,"line":1779},[144,75469,73766],{"class":154},[144,75471,58260],{"class":1993},[144,75473,155],{"class":154},[144,75475,739],{"class":259},[144,75477,1121],{"class":150},[144,75479,75251],{"class":47990},[144,75481,75419],{"class":150},[144,75483,739],{"class":259},[144,75485,713],{"class":154},[144,75487,75258],{"class":1993},[144,75489,155],{"class":154},[144,75491,75492],{"class":259},"'哈好哈'",[144,75494,75322],{"class":154},[144,75496,75497],{"class":213},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[144,75499,75500],{"class":146,"line":1784},[144,75501,2430],{"emptyLinePlaceholder":72},[144,75503,75504],{"class":146,"line":1789},[144,75505,75506],{"class":213},"    \u002F\u002F +类似于>=1\n",[144,75508,75509,75511,75513,75515,75517,75519,75521,75524,75526,75528,75530,75532,75534,75536],{"class":146,"line":1794},[144,75510,73766],{"class":154},[144,75512,58260],{"class":1993},[144,75514,155],{"class":154},[144,75516,739],{"class":259},[144,75518,1121],{"class":150},[144,75520,75251],{"class":47990},[144,75522,75523],{"class":150},"+$",[144,75525,739],{"class":259},[144,75527,713],{"class":154},[144,75529,75258],{"class":1993},[144,75531,155],{"class":154},[144,75533,75292],{"class":259},[144,75535,75266],{"class":154},[144,75537,75269],{"class":213},[144,75539,75540,75542,75544,75546,75548,75550,75552,75554,75556,75558,75560,75562,75564,75566],{"class":146,"line":1808},[144,75541,73766],{"class":154},[144,75543,58260],{"class":1993},[144,75545,155],{"class":154},[144,75547,739],{"class":259},[144,75549,1121],{"class":150},[144,75551,75251],{"class":47990},[144,75553,75523],{"class":150},[144,75555,739],{"class":259},[144,75557,713],{"class":154},[144,75559,75258],{"class":1993},[144,75561,155],{"class":154},[144,75563,75460],{"class":259},[144,75565,75266],{"class":154},[144,75567,75465],{"class":213},[144,75569,75570,75572,75574,75576,75578,75580,75582,75584,75586,75588,75590,75592,75594,75596],{"class":146,"line":1813},[144,75571,73766],{"class":154},[144,75573,58260],{"class":1993},[144,75575,155],{"class":154},[144,75577,739],{"class":259},[144,75579,1121],{"class":150},[144,75581,75251],{"class":47990},[144,75583,75523],{"class":150},[144,75585,739],{"class":259},[144,75587,713],{"class":154},[144,75589,75258],{"class":1993},[144,75591,155],{"class":154},[144,75593,75492],{"class":259},[144,75595,75322],{"class":154},[144,75597,75392],{"class":213},[144,75599,75600],{"class":146,"line":2607},[144,75601,2430],{"emptyLinePlaceholder":72},[144,75603,75604],{"class":146,"line":2621},[144,75605,75606],{"class":213},"    \u002F\u002F ?类似于0次或一次\n",[144,75608,75609,75611,75613,75615,75617,75619,75622,75624,75626,75628,75630,75632,75634,75636],{"class":146,"line":2629},[144,75610,73766],{"class":154},[144,75612,58260],{"class":1993},[144,75614,155],{"class":154},[144,75616,739],{"class":259},[144,75618,1121],{"class":150},[144,75620,75621],{"class":47990},"哈？",[144,75623,457],{"class":150},[144,75625,739],{"class":259},[144,75627,713],{"class":154},[144,75629,75258],{"class":1993},[144,75631,155],{"class":154},[144,75633,74241],{"class":259},[144,75635,75322],{"class":154},[144,75637,75269],{"class":213},[144,75639,75640,75642,75644,75646,75648,75650,75652,75655,75657,75659,75661,75663,75665,75667],{"class":146,"line":2634},[144,75641,73766],{"class":154},[144,75643,58260],{"class":1993},[144,75645,155],{"class":154},[144,75647,739],{"class":259},[144,75649,1121],{"class":150},[144,75651,75251],{"class":47990},[144,75653,75654],{"class":150},"?$",[144,75656,739],{"class":259},[144,75658,713],{"class":154},[144,75660,75258],{"class":1993},[144,75662,155],{"class":154},[144,75664,75292],{"class":259},[144,75666,75266],{"class":154},[144,75668,75392],{"class":213},[144,75670,75671,75673,75675,75677,75679,75681,75683,75685,75687,75689,75691,75693,75695,75697],{"class":146,"line":2640},[144,75672,73766],{"class":154},[144,75674,58260],{"class":1993},[144,75676,155],{"class":154},[144,75678,739],{"class":259},[144,75680,1121],{"class":150},[144,75682,75251],{"class":47990},[144,75684,75654],{"class":150},[144,75686,739],{"class":259},[144,75688,713],{"class":154},[144,75690,75258],{"class":1993},[144,75692,155],{"class":154},[144,75694,75460],{"class":259},[144,75696,75266],{"class":154},[144,75698,75465],{"class":213},[144,75700,75701,75703,75705,75707,75709,75711,75713,75715,75717,75719,75721,75723,75725,75727],{"class":146,"line":2646},[144,75702,73766],{"class":154},[144,75704,58260],{"class":1993},[144,75706,155],{"class":154},[144,75708,739],{"class":259},[144,75710,1121],{"class":150},[144,75712,75251],{"class":47990},[144,75714,75654],{"class":150},[144,75716,739],{"class":259},[144,75718,713],{"class":154},[144,75720,75258],{"class":1993},[144,75722,155],{"class":154},[144,75724,75492],{"class":259},[144,75726,75266],{"class":154},[144,75728,75392],{"class":213},[144,75730,75731],{"class":146,"line":2651},[144,75732,2430],{"emptyLinePlaceholder":72},[144,75734,75735],{"class":146,"line":7979},[144,75736,75737],{"class":213},"    \u002F\u002F {n}写几，就必须出现几次\n",[144,75739,75740,75742,75744,75746,75748,75750,75752,75755,75757,75759,75761,75763,75766,75769],{"class":146,"line":8003},[144,75741,73766],{"class":154},[144,75743,58260],{"class":1993},[144,75745,155],{"class":154},[144,75747,739],{"class":259},[144,75749,1121],{"class":150},[144,75751,75251],{"class":47990},[144,75753,75754],{"class":150},"{4}$",[144,75756,739],{"class":259},[144,75758,713],{"class":154},[144,75760,75258],{"class":1993},[144,75762,155],{"class":154},[144,75764,75765],{"class":259},"'哈哈哈哈'",[144,75767,75768],{"class":154},")) ",[144,75770,75269],{"class":213},[144,75772,75773],{"class":146,"line":8008},[144,75774,2430],{"emptyLinePlaceholder":72},[144,75776,75777],{"class":146,"line":8014},[144,75778,75779],{"class":213},"    \u002F\u002F {n,}大于等于n次\n",[144,75781,75782,75784,75786,75788,75790,75792,75794,75797,75799,75801,75803,75805,75807,75809],{"class":146,"line":8041},[144,75783,73766],{"class":154},[144,75785,58260],{"class":1993},[144,75787,155],{"class":154},[144,75789,739],{"class":259},[144,75791,1121],{"class":150},[144,75793,75251],{"class":47990},[144,75795,75796],{"class":150},"{4,}$",[144,75798,739],{"class":259},[144,75800,713],{"class":154},[144,75802,75258],{"class":1993},[144,75804,155],{"class":154},[144,75806,75765],{"class":259},[144,75808,75768],{"class":154},[144,75810,75269],{"class":213},[144,75812,75813,75815,75817,75819,75821,75823,75825,75827,75829,75831,75833,75835,75838,75840],{"class":146,"line":8046},[144,75814,73766],{"class":154},[144,75816,58260],{"class":1993},[144,75818,155],{"class":154},[144,75820,739],{"class":259},[144,75822,1121],{"class":150},[144,75824,75251],{"class":47990},[144,75826,75796],{"class":150},[144,75828,739],{"class":259},[144,75830,713],{"class":154},[144,75832,75258],{"class":1993},[144,75834,155],{"class":154},[144,75836,75837],{"class":259},"'哈哈哈哈哈'",[144,75839,75768],{"class":154},[144,75841,75269],{"class":213},[144,75843,75844],{"class":146,"line":8052},[144,75845,2430],{"emptyLinePlaceholder":72},[144,75847,75848],{"class":146,"line":8064},[144,75849,75850],{"class":213},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[144,75852,75853,75855,75857,75859,75861,75863,75865,75868,75870,75872,75874,75876,75878,75880],{"class":146,"line":8076},[144,75854,73766],{"class":154},[144,75856,58260],{"class":1993},[144,75858,155],{"class":154},[144,75860,739],{"class":259},[144,75862,1121],{"class":150},[144,75864,75251],{"class":47990},[144,75866,75867],{"class":150},"{4,6}$",[144,75869,739],{"class":259},[144,75871,713],{"class":154},[144,75873,75258],{"class":1993},[144,75875,155],{"class":154},[144,75877,75765],{"class":259},[144,75879,75768],{"class":154},[144,75881,75269],{"class":213},[144,75883,75884,75886,75888,75890,75892,75894,75896,75898,75900,75902,75904,75906,75908,75910],{"class":146,"line":8088},[144,75885,73766],{"class":154},[144,75887,58260],{"class":1993},[144,75889,155],{"class":154},[144,75891,739],{"class":259},[144,75893,1121],{"class":150},[144,75895,75251],{"class":47990},[144,75897,75867],{"class":150},[144,75899,739],{"class":259},[144,75901,713],{"class":154},[144,75903,75258],{"class":1993},[144,75905,155],{"class":154},[144,75907,75837],{"class":259},[144,75909,75768],{"class":154},[144,75911,75269],{"class":213},[144,75913,75914,75916,75918,75920,75922,75924,75926,75928,75930,75932,75934,75936,75939,75941],{"class":146,"line":9747},[144,75915,73766],{"class":154},[144,75917,58260],{"class":1993},[144,75919,155],{"class":154},[144,75921,739],{"class":259},[144,75923,1121],{"class":150},[144,75925,75251],{"class":47990},[144,75927,75867],{"class":150},[144,75929,739],{"class":259},[144,75931,713],{"class":154},[144,75933,75258],{"class":1993},[144,75935,155],{"class":154},[144,75937,75938],{"class":259},"'哈哈哈哈哈哈哈'",[144,75940,75768],{"class":154},[144,75942,75392],{"class":213},[144,75944,75945],{"class":146,"line":9772},[144,75946,2430],{"emptyLinePlaceholder":72},[144,75948,75949],{"class":146,"line":9795},[144,75950,75951],{"class":213},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[144,75953,75954,75956,75958,75960,75962,75964,75967,75969,75971,75973,75975,75977,75980,75982],{"class":146,"line":9819},[144,75955,73766],{"class":154},[144,75957,58260],{"class":1993},[144,75959,155],{"class":154},[144,75961,739],{"class":259},[144,75963,1121],{"class":150},[144,75965,75966],{"class":203},"[abc]",[144,75968,457],{"class":150},[144,75970,739],{"class":259},[144,75972,713],{"class":154},[144,75974,75258],{"class":1993},[144,75976,155],{"class":154},[144,75978,75979],{"class":259},"'a'",[144,75981,75266],{"class":154},[144,75983,75269],{"class":213},[144,75985,75986,75988,75990,75992,75994,75996,75998,76000,76002,76004,76006,76008,76011,76013],{"class":146,"line":9824},[144,75987,73766],{"class":154},[144,75989,58260],{"class":1993},[144,75991,155],{"class":154},[144,75993,739],{"class":259},[144,75995,1121],{"class":150},[144,75997,75966],{"class":203},[144,75999,457],{"class":150},[144,76001,739],{"class":259},[144,76003,713],{"class":154},[144,76005,75258],{"class":1993},[144,76007,155],{"class":154},[144,76009,76010],{"class":259},"'b'",[144,76012,75266],{"class":154},[144,76014,75269],{"class":213},[144,76016,76017,76019,76021,76023,76025,76027,76029,76031,76033,76035,76037,76039,76042,76044],{"class":146,"line":9829},[144,76018,73766],{"class":154},[144,76020,58260],{"class":1993},[144,76022,155],{"class":154},[144,76024,739],{"class":259},[144,76026,1121],{"class":150},[144,76028,75966],{"class":203},[144,76030,457],{"class":150},[144,76032,739],{"class":259},[144,76034,713],{"class":154},[144,76036,75258],{"class":1993},[144,76038,155],{"class":154},[144,76040,76041],{"class":259},"'c'",[144,76043,75266],{"class":154},[144,76045,75269],{"class":213},[144,76047,76048,76050,76052,76054,76056,76058,76060,76062,76064,76066,76069,76071],{"class":146,"line":9834},[144,76049,73766],{"class":154},[144,76051,58260],{"class":1993},[144,76053,155],{"class":154},[144,76055,739],{"class":259},[144,76057,75966],{"class":203},[144,76059,739],{"class":259},[144,76061,713],{"class":154},[144,76063,75258],{"class":1993},[144,76065,155],{"class":154},[144,76067,76068],{"class":259},"'ab'",[144,76070,75266],{"class":154},[144,76072,75269],{"class":213},[144,76074,76075,76077,76079,76081,76083,76085,76087,76089,76091,76093,76095,76097,76099,76101],{"class":146,"line":9843},[144,76076,73766],{"class":154},[144,76078,58260],{"class":1993},[144,76080,155],{"class":154},[144,76082,739],{"class":259},[144,76084,1121],{"class":150},[144,76086,75966],{"class":203},[144,76088,457],{"class":150},[144,76090,739],{"class":259},[144,76092,713],{"class":154},[144,76094,75258],{"class":1993},[144,76096,155],{"class":154},[144,76098,76068],{"class":259},[144,76100,75266],{"class":154},[144,76102,76103],{"class":213},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[144,76105,76106,76108,76110,76112,76114,76116,76118,76121,76123,76125,76127,76129,76131,76133],{"class":146,"line":9848},[144,76107,73766],{"class":154},[144,76109,58260],{"class":1993},[144,76111,155],{"class":154},[144,76113,739],{"class":259},[144,76115,1121],{"class":150},[144,76117,75966],{"class":203},[144,76119,76120],{"class":150},"{2}$",[144,76122,739],{"class":259},[144,76124,713],{"class":154},[144,76126,75258],{"class":1993},[144,76128,155],{"class":154},[144,76130,76068],{"class":259},[144,76132,75266],{"class":154},[144,76134,76135],{"class":213},"\u002F\u002Ftrue   可以选两个\n",[144,76137,76138,76140,76142,76144,76146,76148,76151,76153,76155,76157,76159,76161,76164,76166],{"class":146,"line":9854},[144,76139,73766],{"class":154},[144,76141,58260],{"class":1993},[144,76143,155],{"class":154},[144,76145,739],{"class":259},[144,76147,1121],{"class":150},[144,76149,76150],{"class":203},"[a-z]",[144,76152,457],{"class":150},[144,76154,739],{"class":259},[144,76156,713],{"class":154},[144,76158,75258],{"class":1993},[144,76160,155],{"class":154},[144,76162,76163],{"class":259},"'p'",[144,76165,75322],{"class":154},[144,76167,76168],{"class":213},"\u002F\u002Ftrue   依然只能选一个\n",[144,76170,76171,76173,76175,76177,76179,76181,76184,76186,76188,76190,76192,76194,76196,76198],{"class":146,"line":9875},[144,76172,73766],{"class":154},[144,76174,58260],{"class":1993},[144,76176,155],{"class":154},[144,76178,739],{"class":259},[144,76180,1121],{"class":150},[144,76182,76183],{"class":203},"[A-Z]",[144,76185,457],{"class":150},[144,76187,739],{"class":259},[144,76189,713],{"class":154},[144,76191,75258],{"class":1993},[144,76193,155],{"class":154},[144,76195,76163],{"class":259},[144,76197,75322],{"class":154},[144,76199,75392],{"class":213},[144,76201,76202,76204,76206,76208,76210,76212,76214,76216,76218,76220,76222,76224,76227,76229],{"class":146,"line":9881},[144,76203,73766],{"class":154},[144,76205,58260],{"class":1993},[144,76207,155],{"class":154},[144,76209,739],{"class":259},[144,76211,1121],{"class":150},[144,76213,76183],{"class":203},[144,76215,457],{"class":150},[144,76217,739],{"class":259},[144,76219,713],{"class":154},[144,76221,75258],{"class":1993},[144,76223,155],{"class":154},[144,76225,76226],{"class":259},"'P'",[144,76228,75322],{"class":154},[144,76230,75269],{"class":213},[144,76232,76233,76235,76237,76239,76241,76243,76246,76248,76250,76252,76254,76256,76259,76261],{"class":146,"line":9895},[144,76234,73766],{"class":154},[144,76236,58260],{"class":1993},[144,76238,155],{"class":154},[144,76240,739],{"class":259},[144,76242,1121],{"class":150},[144,76244,76245],{"class":203},"[0-9]",[144,76247,457],{"class":150},[144,76249,739],{"class":259},[144,76251,713],{"class":154},[144,76253,75258],{"class":1993},[144,76255,155],{"class":154},[144,76257,76258],{"class":259},"'0'",[144,76260,75322],{"class":154},[144,76262,75269],{"class":213},[144,76264,76265,76267,76269,76271,76273,76275,76278,76280,76282,76284,76286,76288,76290,76292],{"class":146,"line":9901},[144,76266,73766],{"class":154},[144,76268,58260],{"class":1993},[144,76270,155],{"class":154},[144,76272,739],{"class":259},[144,76274,1121],{"class":150},[144,76276,76277],{"class":203},"[a-zA-Z0-9]",[144,76279,457],{"class":150},[144,76281,739],{"class":259},[144,76283,713],{"class":154},[144,76285,75258],{"class":1993},[144,76287,155],{"class":154},[144,76289,76163],{"class":259},[144,76291,75266],{"class":154},[144,76293,75269],{"class":213},[144,76295,76296,76298,76300],{"class":146,"line":9928},[144,76297,52430],{"class":154},[144,76299,51826],{"class":51313},[144,76301,51320],{"class":154},[144,76303,76304,76306,76308],{"class":146,"line":9937},[144,76305,51798],{"class":154},[144,76307,51813],{"class":51313},[144,76309,51320],{"class":154},[144,76311,76312],{"class":146,"line":9943},[144,76313,2430],{"emptyLinePlaceholder":72},[144,76315,76316,76318,76320],{"class":146,"line":9951},[144,76317,51798],{"class":154},[144,76319,50648],{"class":51313},[144,76321,51320],{"class":154},[22029,76323,76325],{"id":76324},"_3624-修饰符","3.6.2.4 修饰符",[14,76327,76328],{},[28,76329],{"alt":30,"src":76330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,76332,76333],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,76335,76336],{},[28,76337],{"alt":30,"src":76338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[135,76340,76342],{"className":50646,"code":76341,"language":50648,"meta":30,"style":30},"\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",[141,76343,76344,76354,76368,76376,76390,76410,76422,76430,76438,76446,76478,76509,76514,76546,76557,76590,76599,76607,76615],{"__ignoreMap":30},[144,76345,76346,76348,76350,76352],{"class":146,"line":147},[144,76347,51310],{"class":154},[144,76349,51314],{"class":51313},[144,76351,51317],{"class":1993},[144,76353,51320],{"class":154},[144,76355,76356,76358,76360,76362,76364,76366],{"class":146,"line":66},[144,76357,1065],{"class":154},[144,76359,50648],{"class":51313},[144,76361,51329],{"class":1993},[144,76363,200],{"class":154},[144,76365,51334],{"class":259},[144,76367,51320],{"class":154},[144,76369,76370,76372,76374],{"class":146,"line":1210},[144,76371,1065],{"class":154},[144,76373,51347],{"class":51313},[144,76375,51320],{"class":154},[144,76377,76378,76380,76382,76384,76386,76388],{"class":146,"line":1225},[144,76379,52157],{"class":154},[144,76381,51357],{"class":51313},[144,76383,51360],{"class":1993},[144,76385,200],{"class":154},[144,76387,51365],{"class":259},[144,76389,51320],{"class":154},[144,76391,76392,76394,76396,76398,76400,76402,76404,76406,76408],{"class":146,"line":1231},[144,76393,52157],{"class":154},[144,76395,51357],{"class":51313},[144,76397,14951],{"class":1993},[144,76399,200],{"class":154},[144,76401,51404],{"class":259},[144,76403,51384],{"class":1993},[144,76405,200],{"class":154},[144,76407,51411],{"class":259},[144,76409,51320],{"class":154},[144,76411,76412,76414,76416,76418,76420],{"class":146,"line":1245},[144,76413,52157],{"class":154},[144,76415,51420],{"class":51313},[144,76417,51423],{"class":154},[144,76419,51420],{"class":51313},[144,76421,51320],{"class":154},[144,76423,76424,76426,76428],{"class":146,"line":1251},[144,76425,51798],{"class":154},[144,76427,51347],{"class":51313},[144,76429,51320],{"class":154},[144,76431,76432,76434,76436],{"class":146,"line":1342},[144,76433,1065],{"class":154},[144,76435,51813],{"class":51313},[144,76437,51320],{"class":154},[144,76439,76440,76442,76444],{"class":146,"line":1348},[144,76441,52157],{"class":154},[144,76443,51826],{"class":51313},[144,76445,51320],{"class":154},[144,76447,76448,76450,76452,76454,76456,76458,76461,76463,76465,76467,76469,76471,76474,76476],{"class":146,"line":1360},[144,76449,73766],{"class":154},[144,76451,58260],{"class":1993},[144,76453,155],{"class":154},[144,76455,739],{"class":259},[144,76457,1121],{"class":150},[144,76459,76460],{"class":47990},"java",[144,76462,457],{"class":150},[144,76464,739],{"class":259},[144,76466,713],{"class":154},[144,76468,75258],{"class":1993},[144,76470,155],{"class":154},[144,76472,76473],{"class":259},"'java'",[144,76475,75768],{"class":154},[144,76477,75269],{"class":213},[144,76479,76480,76482,76484,76486,76488,76490,76492,76494,76496,76498,76500,76502,76505,76507],{"class":146,"line":1642},[144,76481,73766],{"class":154},[144,76483,58260],{"class":1993},[144,76485,155],{"class":154},[144,76487,739],{"class":259},[144,76489,1121],{"class":150},[144,76491,76460],{"class":47990},[144,76493,457],{"class":150},[144,76495,739],{"class":259},[144,76497,713],{"class":154},[144,76499,75258],{"class":1993},[144,76501,155],{"class":154},[144,76503,76504],{"class":259},"'Java'",[144,76506,75768],{"class":154},[144,76508,75392],{"class":213},[144,76510,76511],{"class":146,"line":1647},[144,76512,76513],{"class":213},"    \u002F\u002F 不区分大小写、\n",[144,76515,76516,76518,76520,76522,76524,76526,76528,76530,76532,76534,76536,76538,76540,76542,76544],{"class":146,"line":1653},[144,76517,73766],{"class":154},[144,76519,58260],{"class":1993},[144,76521,155],{"class":154},[144,76523,739],{"class":259},[144,76525,1121],{"class":150},[144,76527,76460],{"class":47990},[144,76529,457],{"class":150},[144,76531,739],{"class":259},[144,76533,596],{"class":150},[144,76535,713],{"class":154},[144,76537,75258],{"class":1993},[144,76539,155],{"class":154},[144,76541,76504],{"class":259},[144,76543,75768],{"class":154},[144,76545,75269],{"class":213},[144,76547,76548,76550,76552,76554],{"class":146,"line":1658},[144,76549,11252],{"class":150},[144,76551,73932],{"class":203},[144,76553,13595],{"class":150},[144,76555,76556],{"class":259}," 'java是一门编程语言，学完java工资很高'\n",[144,76558,76559,76561,76564,76566,76569,76572,76574,76576,76578,76580,76583,76585,76588],{"class":146,"line":1672},[144,76560,11252],{"class":150},[144,76562,76563],{"class":203}," result",[144,76565,13595],{"class":150},[144,76567,76568],{"class":154}," str.",[144,76570,76571],{"class":1993},"replace",[144,76573,155],{"class":154},[144,76575,739],{"class":259},[144,76577,76460],{"class":47990},[144,76579,739],{"class":259},[144,76581,76582],{"class":150},"ig",[144,76584,12466],{"class":154},[144,76586,76587],{"class":259},"'前端'",[144,76589,161],{"class":154},[144,76591,76592,76594,76596],{"class":146,"line":1677},[144,76593,73766],{"class":154},[144,76595,58260],{"class":1993},[144,76597,76598],{"class":154},"(result)\n",[144,76600,76601,76603,76605],{"class":146,"line":1683},[144,76602,52430],{"class":154},[144,76604,51826],{"class":51313},[144,76606,51320],{"class":154},[144,76608,76609,76611,76613],{"class":146,"line":1704},[144,76610,51798],{"class":154},[144,76612,51813],{"class":51313},[144,76614,51320],{"class":154},[144,76616,76617,76619,76621],{"class":146,"line":1709},[144,76618,51798],{"class":154},[144,76620,50648],{"class":51313},[144,76622,51320],{"class":154},[5157,76624,76625],{},"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":30,"searchDepth":66,"depth":66,"links":76627},[76628,76638,76650,76667,76674,76682],{"id":53373,"depth":66,"text":53374,"children":76629},[76630,76631,76632,76633,76634,76635,76636,76637],{"id":53377,"depth":1210,"text":53378},{"id":53410,"depth":1210,"text":53411},{"id":53449,"depth":1210,"text":53450},{"id":53607,"depth":1210,"text":53608},{"id":53655,"depth":1210,"text":53656},{"id":53792,"depth":1210,"text":53793},{"id":54114,"depth":1210,"text":54115},{"id":57102,"depth":1210,"text":57103},{"id":57130,"depth":66,"text":57131,"children":76639},[76640,76641,76642,76643,76644,76645,76646,76647,76648,76649],{"id":57134,"depth":1210,"text":57135},{"id":57157,"depth":1210,"text":57158},{"id":58072,"depth":1210,"text":58073},{"id":58762,"depth":1210,"text":58763},{"id":59044,"depth":1210,"text":59045},{"id":63205,"depth":1210,"text":63206},{"id":63375,"depth":1210,"text":63376},{"id":63503,"depth":1210,"text":63504},{"id":63528,"depth":1210,"text":63529},{"id":64917,"depth":1210,"text":64918},{"id":66070,"depth":66,"text":66071,"children":76651},[76652,76653,76654,76655,76656,76657,76658,76659,76660,76661,76662,76663,76664,76665,76666],{"id":66074,"depth":1210,"text":66075},{"id":66728,"depth":1210,"text":66729},{"id":68423,"depth":1210,"text":68424},{"id":68464,"depth":1210,"text":68465},{"id":68506,"depth":1210,"text":68507},{"id":68520,"depth":1210,"text":68521},{"id":68569,"depth":1210,"text":68570},{"id":68581,"depth":1210,"text":68582},{"id":68596,"depth":1210,"text":68597},{"id":68632,"depth":1210,"text":68633},{"id":68713,"depth":1210,"text":68714},{"id":68841,"depth":1210,"text":68842},{"id":68853,"depth":1210,"text":68854},{"id":68872,"depth":1210,"text":68873},{"id":70983,"depth":1210,"text":70984},{"id":71002,"depth":66,"text":71003,"children":76668},[76669,76670,76671,76672,76673],{"id":71023,"depth":1210,"text":71024},{"id":71043,"depth":1210,"text":71044},{"id":71092,"depth":1210,"text":71093},{"id":71217,"depth":1210,"text":71218},{"id":71398,"depth":1210,"text":71399},{"id":71416,"depth":66,"text":71417,"children":76675},[76676,76677,76678,76679,76680,76681],{"id":71431,"depth":1210,"text":71432},{"id":71490,"depth":1210,"text":71491},{"id":71514,"depth":1210,"text":71515},{"id":71834,"depth":1210,"text":71835},{"id":71866,"depth":1210,"text":71867},{"id":71889,"depth":1210,"text":71890},{"id":74957,"depth":66,"text":74958,"children":76683},[76684,76685],{"id":74991,"depth":1210,"text":74992},{"id":75030,"depth":1210,"text":75031},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53345,"description":23408},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76692,"title":76693,"body":76694,"description":23408,"extension":70,"meta":92831,"navigation":72,"path":92832,"seo":92833,"stem":92834,"__hash__":92835},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76695,"toc":92767},[76696,76699,76702,76706,76710,76715,76720,76731,76735,76740,76743,76747,76750,76755,76759,76763,76766,76771,76774,76778,76781,76789,76792,76796,76801,76806,76809,76813,76818,76823,76826,76830,76835,76838,76843,76846,76851,76854,76859,76864,76867,76870,76874,76879,76884,76887,76891,76895,76898,76901,76904,76908,76912,76917,76922,76925,76929,76934,76939,76942,76945,76948,76951,76954,76957,76960,76963,76966,76971,76975,76980,76985,76988,76991,76994,76997,77000,77003,77006,77009,77013,77017,77020,77023,77026,77031,77033,77036,77039,77042,77045,77048,77051,77054,77057,77060,77063,77066,77069,77072,77077,77082,77087,77090,77094,77097,77102,77106,77108,77119,77124,77225,77228,77231,77234,77237,77240,77243,77246,77249,77251,77254,77257,77260,77263,77266,77268,77271,77274,77277,77280,77283,77286,77288,77291,77293,77295,77298,77302,77306,77309,77312,77315,77318,77321,77324,77327,77330,77333,77338,77458,77461,77464,77469,77472,77475,77478,77481,77486,77489,77492,77495,77498,77503,77506,77606,77671,77745,77749,77752,77755,77759,77762,77776,77805,77808,77811,77814,77817,77820,77823,77826,77828,77831,77834,77837,77840,77844,77849,77853,77858,77933,77936,78119,78122,78125,78128,78131,78134,78136,78139,78142,78145,78148,78151,78154,78156,78160,78163,78168,78171,78174,78177,78180,78182,78187,78190,78193,78196,78199,78201,78206,78209,78212,78214,78216,78219,78223,78226,78229,78234,78237,78240,78243,78293,78298,78302,78307,78310,78379,78382,78391,78395,78400,78403,78406,78414,78417,78434,80236,80240,80244,80249,80252,80256,80262,80268,80420,80425,80430,80433,80436,80439,80442,80445,80448,80451,80454,80457,80460,80463,80466,80471,80475,80478,80489,80493,80498,80501,80504,80507,80510,80513,80515,80518,80521,80524,80527,80529,80546,80549,80553,80556,80561,80566,80569,80572,80576,80579,80582,80591,80594,80598,80601,80606,80611,80678,80682,80685,80688,80693,80698,80784,80789,80793,80796,80799,80814,80817,80822,80826,80831,80940,80943,80954,81104,81108,81113,81222,81226,81231,81236,81241,81244,81251,81271,81307,81471,81476,81479,81484,81491,81494,81497,81500,81559,81615,81671,81675,81680,81995,81998,82002,82005,82010,82119,82124,82128,82133,82137,82208,82212,82214,82217,82220,82258,82534,82538,82555,82621,82655,82659,82662,82667,82696,82703,82712,82717,82732,82737,82746,82749,82886,82890,82952,82956,82961,83206,83210,83215,83218,83221,83224,83227,83231,83236,84817,84821,84825,84831,84834,84839,84843,84846,84851,84854,84865,84869,84874,84878,84883,84888,84891,84896,84900,84904,84907,84912,84917,84920,84923,84926,85048,85053,85155,85158,85161,85165,85170,85342,85347,85351,85354,85359,85425,85430,85433,85564,85567,85572,85575,85578,85669,85674,85677,85680,85683,85686,85691,85696,85699,85704,85709,85714,85718,85721,85724,85729,85734,85739,85744,85798,85801,85804,85809,85812,85815,85820,85825,85830,85834,85839,85853,85858,85861,85866,85870,85875,85880,85885,85890,85895,85900,85905,85910,85913,85917,85922,85925,85928,85931,85936,85941,85944,85947,85951,85954,85957,85962,85967,85972,85977,85980,85985,85990,86051,86056,86059,86064,87305,87310,87314,87318,87323,87326,87331,87336,87339,87344,87346,87351,87355,87358,87361,87372,87376,87381,87386,87441,87446,87451,87456,87667,87672,87676,87681,87684,87686,87689,87692,88139,88144,88151,88157,88160,88163,88427,88432,88436,88701,88706,88710,88715,88720,88725,88730,89061,89064,89069,89074,89077,89081,89085,89090,89095,89100,89105,89110,89115,89119,89122,89127,89132,89135,89209,89214,89219,89224,89226,89229,89599,89604,89609,89614,89617,89620,89722,89727,89732,89835,89839,89844,89848,89852,89857,89862,89865,89870,89873,89876,90269,90274,90277,90280,90283,90286,90806,90810,90815,90820,90825,90828,90833,90836,90839,91221,91226,91228,91230,91233,91236,91748,91752,91813,91816,91819,91822,91826,91829,91834,91839,92764],[10,76697,76693],{"id":76698},"_4js进阶",[14,76700,76701],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[18,76703,76705],{"id":76704},"_41-作用域","4.1 作用域",[115,76707,76709],{"id":76708},"_411-局部作用域","4.1.1 局部作用域",[14,76711,76712],{},[28,76713],{"alt":30,"src":76714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,76716,76717],{},[28,76718],{"alt":30,"src":76719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1162,76721,76722,76725,76728],{},[101,76723,76724],{},"函数作用域在函数内部",[101,76726,76727],{},"块级作用域在{}",[101,76729,76730],{},"对象的那个{}不是作用域，不是块作用域",[115,76732,76734],{"id":76733},"_412-全局作用域","4.1.2 全局作用域",[14,76736,76737],{},[28,76738],{"alt":30,"src":76739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,76741,76742],{},"window.a=10不要这样写",[115,76744,76746],{"id":76745},"_413-作用域链","4.1.3 作用域链",[14,76748,76749],{},"变量查找机制",[14,76751,76752],{},[28,76753],{"alt":30,"src":76754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[18,76756,76758],{"id":76757},"_42-垃圾回收机制","4.2 垃圾回收机制",[115,76760,76762],{"id":76761},"_421-大体介绍","4.2.1 大体介绍",[14,76764,76765],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,76767,76768],{},[28,76769],{"alt":30,"src":76770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,76772,76773],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[115,76775,76777],{"id":76776},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,76779,76780],{},"堆栈空间分配区别：",[98,76782,76783,76786],{},[101,76784,76785],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[101,76787,76788],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,76790,76791],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22029,76793,76795],{"id":76794},"_4221-引用计数","4.2.2.1 引用计数",[14,76797,76798],{},[28,76799],{"alt":30,"src":76800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,76802,76803],{},[28,76804],{"alt":30,"src":76805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,76807,76808],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22029,76810,76812],{"id":76811},"_4222-标记清除法","4.2.2.2 标记清除法",[14,76814,76815],{},[28,76816],{"alt":30,"src":76817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,76819,76820],{},[28,76821],{"alt":30,"src":76822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,76824,76825],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[18,76827,76829],{"id":76828},"_43-闭包","4.3 闭包",[14,76831,76832],{},[28,76833],{"alt":30,"src":76834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,76836,76837],{},"闭包：内层函数+外层函数的变量",[14,76839,76840],{},[28,76841],{"alt":30,"src":76842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,76844,76845],{},"closure就是闭包",[14,76847,76848],{},[28,76849],{"alt":30,"src":76850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,76852,76853],{},"内层函数必须包含外层函数的变量才是闭包",[14,76855,76856],{},[28,76857],{"alt":30,"src":76858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,76860,76861],{},[28,76862],{"alt":30,"src":76863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,76865,76866],{},"闭包可能会引起内存泄漏",[14,76868,76869],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[18,76871,76873],{"id":76872},"_44-变量提升","4.4 变量提升",[14,76875,76876],{},[28,76877],{"alt":30,"src":76878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,76880,76881],{},[28,76882],{"alt":30,"src":76883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,76885,76886],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[18,76888,76890],{"id":76889},"_45-函数进阶","4.5 函数进阶",[115,76892,76894],{"id":76893},"_451-函数提升","4.5.1 函数提升",[14,76896,76897],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,76899,76900],{},"只提升函数声明，不提升函数调用",[51826,76902,76903],{},"\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",[115,76905,76907],{"id":76906},"_452-函数参数","4.5.2 函数参数",[22029,76909,76911],{"id":76910},"_4521-动态参数","4.5.2.1 动态参数",[14,76913,76914],{},[28,76915],{"alt":30,"src":76916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,76918,76919],{},[28,76920],{"alt":30,"src":76921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,76923,76924],{},"箭头函数里边没有arguments",[22029,76926,76928],{"id":76927},"_4522-剩余参数","4.5.2.2 剩余参数",[14,76930,76931],{},[28,76932],{"alt":30,"src":76933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,76935,76936],{},[28,76937],{"alt":30,"src":76938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,76940,76941],{},"剩余参数使用的时候不需要写...",[14,76943,76944],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,76946,76947],{},"  function getSum(a,b,...arr) {",[14,76949,76950],{},"  console.log(11)",[14,76952,76953],{},"  }",[14,76955,76956],{},"  getSum(1,2,3,4)",[14,76958,76959],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,76961,76962],{},"  getSum(1,2)",[14,76964,76965],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,76967,76968],{},[28,76969],{"alt":30,"src":76970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22029,76972,76974],{"id":76973},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,76976,76977],{},[28,76978],{"alt":30,"src":76979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,76981,76982],{},[28,76983],{"alt":30,"src":76984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,76986,76987],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,76989,76990],{},"展开运算符可以用于数组之间的合并：",[14,76992,76993],{},"const arr1 = [1, 2, 3]",[14,76995,76996],{},"const arr2 = [3, 4, 5]",[14,76998,76999],{},"const arr = [...arr1, ...arr2]",[14,77001,77002],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,77004,77005],{},"剩余参数：函数参数使用，得到真数组",[14,77007,77008],{},"展开运算符：数组中使用，数组展开",[115,77010,77012],{"id":77011},"_453-箭头函数","4.5.3 箭头函数",[22029,77014,77016],{"id":77015},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,77018,77019],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,77021,77022],{},"它不是万能的！！！",[14,77024,77025],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,77027,77028],{},[28,77029],{"alt":30,"src":77030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77032,184],{},[14,77034,77035],{},"① 只有一个形参的时候，可以省略小括号：",[14,77037,77038],{},"const fn=x=>{console.log(x)}",[14,77040,77041],{},"② 只有一行代码时可以省略大括号：",[14,77043,77044],{},"const fn=x=>console.log(11)",[14,77046,77047],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77049,77050],{},"const fn=x=>x+x",[14,77052,77053],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77055,77056],{},"⑤ 阻止表单默认提交：",[14,77058,77059],{},"const form = document.querySelector('form')",[14,77061,77062],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77064,77065],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77067,77068],{},"const fn=uname=>({uname:uname})",[14,77070,77071],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77073,77074],{},[28,77075],{"alt":30,"src":77076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77078,77079],{},[28,77080],{"alt":30,"src":77081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77083,77084],{},[28,77085],{"alt":30,"src":77086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77088,77089],{},"一定不要忘记用()，有()就理解为自带return",[22029,77091,77093],{"id":77092},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77095,77096],{},"箭头函数是没有动态参数的arguments",[14,77098,77099],{},[28,77100],{"alt":30,"src":77101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22029,77103,77105],{"id":77104},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77107,11363],{},[98,77109,77110,77113,77116],{},[101,77111,77112],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[101,77114,77115],{},"事件回调函数使用箭头函数时，this 为全局的 window",[101,77117,77118],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77120,77121],{},[28,77122],{"alt":30,"src":77123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[135,77125,77127],{"className":53080,"code":77126,"language":53082,"meta":30,"style":30},"  \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",[141,77128,77129,77137,77142,77147,77152,77157,77162,77166,77171,77175,77179,77184,77189,77194,77198,77202,77207,77212,77217],{"__ignoreMap":30},[144,77130,77131,77133,77135],{"class":146,"line":147},[144,77132,52157],{"class":154},[144,77134,51826],{"class":51313},[144,77136,51320],{"class":154},[144,77138,77139],{"class":146,"line":66},[144,77140,77141],{"class":154},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[144,77143,77144],{"class":146,"line":1210},[144,77145,77146],{"class":154},"    console.log(this) \u002F\u002F指向window\n",[144,77148,77149],{"class":146,"line":1225},[144,77150,77151],{"class":154},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[144,77153,77154],{"class":146,"line":1231},[144,77155,77156],{"class":154},"    function fn() {\n",[144,77158,77159],{"class":146,"line":1245},[144,77160,77161],{"class":154},"      console.log(this)  \u002F\u002F指向window\n",[144,77163,77164],{"class":146,"line":1251},[144,77165,2217],{"class":154},[144,77167,77168],{"class":146,"line":1342},[144,77169,77170],{"class":154},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[144,77172,77173],{"class":146,"line":1348},[144,77174,2430],{"emptyLinePlaceholder":72},[144,77176,77177],{"class":146,"line":1360},[144,77178,71536],{"class":154},[144,77180,77181],{"class":146,"line":1642},[144,77182,77183],{"class":154},"      name: 'andy',\n",[144,77185,77186],{"class":146,"line":1647},[144,77187,77188],{"class":154},"      sayHai: function () {\n",[144,77190,77191],{"class":146,"line":1653},[144,77192,77193],{"class":154},"        console.log(this)\n",[144,77195,77196],{"class":146,"line":1658},[144,77197,52411],{"class":154},[144,77199,77200],{"class":146,"line":1672},[144,77201,2217],{"class":154},[144,77203,77204],{"class":146,"line":1677},[144,77205,77206],{"class":154},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[144,77208,77209],{"class":146,"line":1683},[144,77210,77211],{"class":154},"    \u002F\u002F 2.箭头函数的this\n",[144,77213,77214],{"class":146,"line":1704},[144,77215,77216],{"class":154},"    const fn = () => console.log(this)\n",[144,77218,77219,77221,77223],{"class":146,"line":1709},[144,77220,52430],{"class":154},[144,77222,51826],{"class":51313},[144,77224,51320],{"class":154},[14,77226,77227],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77229,77230],{},"const fn = () => console.log(this)",[14,77232,77233],{},"fn() \u002F\u002F指向window",[14,77235,77236],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77238,77239],{},"①",[14,77241,77242],{},"const obj = {",[14,77244,77245],{},"uname: 'pink老师',",[14,77247,77248],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77250,1101],{},[14,77252,77253],{},"调用对象里边的函数",[14,77255,77256],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77258,77259],{},"obj.sayHai()",[14,77261,77262],{},"②",[14,77264,77265],{},"const obj1 = {",[14,77267,77245],{},[14,77269,77270],{},"sayHai: function () {",[14,77272,77273],{},"let i = 10",[14,77275,77276],{},"const count = () => {",[14,77278,77279],{},"console.log(this)",[14,77281,77282],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77284,77285],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77287,1101],{},[14,77289,77290],{},"count()",[14,77292,1101],{},[14,77294,1101],{},[14,77296,77297],{},"obj1.sayHai()",[18,77299,77301],{"id":77300},"_46-解构赋值","4.6 解构赋值",[115,77303,77305],{"id":77304},"_461-数组解构","4.6.1 数组解构",[14,77307,77308],{},"以前要是使用数组中的值的话：",[14,77310,77311],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,77313,77314],{},"const arr=[100,60,80]",[14,77316,77317],{},"const max=arr[0]",[14,77319,77320],{},"const min=arr[1]",[14,77322,77323],{},"const avg=arr[2]",[14,77325,77326],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,77328,77329],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,77331,77332],{},"这个写法就类似于上边的那种用很多const的方法",[14,77334,77335],{},[28,77336],{"alt":30,"src":77337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[135,77339,77341],{"className":50646,"code":77340,"language":50648,"meta":30,"style":30},"①变量之间交换值:\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",[141,77342,77343,77348,77353,77358,77363,77368,77372,77376,77381,77385,77390,77395,77399,77404,77409,77420,77430,77435,77440,77445,77449,77453],{"__ignoreMap":30},[144,77344,77345],{"class":146,"line":147},[144,77346,77347],{"class":154},"①变量之间交换值:\n",[144,77349,77350],{"class":146,"line":66},[144,77351,77352],{"class":154},"let a=1\n",[144,77354,77355],{"class":146,"line":1210},[144,77356,77357],{"class":154},"let b=2;\n",[144,77359,77360],{"class":146,"line":1225},[144,77361,77362],{"class":154},"必须加这行代码，不然就会报错\n",[144,77364,77365],{"class":146,"line":1231},[144,77366,77367],{"class":154},"[b,a]=[a,b]\n",[144,77369,77370],{"class":146,"line":1245},[144,77371,2430],{"emptyLinePlaceholder":72},[144,77373,77374],{"class":146,"line":1251},[144,77375,2430],{"emptyLinePlaceholder":72},[144,77377,77378],{"class":146,"line":1342},[144,77379,77380],{"class":154},"可以写成下面的方式：\n",[144,77382,77383],{"class":146,"line":1348},[144,77384,77352],{"class":154},[144,77386,77387],{"class":146,"line":1360},[144,77388,77389],{"class":154},"let b=2\n",[144,77391,77392],{"class":146,"line":1642},[144,77393,77394],{"class":154},";[b,a]=[a,b]\n",[144,77396,77397],{"class":146,"line":1647},[144,77398,2430],{"emptyLinePlaceholder":72},[144,77400,77401],{"class":146,"line":1653},[144,77402,77403],{"class":154},"②排序\n",[144,77405,77406],{"class":146,"line":1658},[144,77407,77408],{"class":154},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[144,77410,77411,77414,77417],{"class":146,"line":1672},[144,77412,77413],{"class":154},"for (let i = 0; i ",[144,77415,1065],{"class":77416},"s7hpK",[144,77418,77419],{"class":154}," arr1.length; i++) {\n",[144,77421,77422,77425,77427],{"class":146,"line":1677},[144,77423,77424],{"class":154},"   for (let j = 0; j ",[144,77426,1065],{"class":77416},[144,77428,77429],{"class":154}," arr1.length - 1; j++) {\n",[144,77431,77432],{"class":146,"line":1683},[144,77433,77434],{"class":154},"      if (arr1[j] > arr1[j + 1]) {\n",[144,77436,77437],{"class":146,"line":1704},[144,77438,77439],{"class":154},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[144,77441,77442],{"class":146,"line":1709},[144,77443,77444],{"class":154},"       }\n",[144,77446,77447],{"class":146,"line":1723},[144,77448,4339],{"class":154},[144,77450,77451],{"class":146,"line":1728},[144,77452,1595],{"class":154},[144,77454,77455],{"class":146,"line":1757},[144,77456,77457],{"class":154},"console.log(arr1)\n",[14,77459,77460],{},"数组解构的细节：",[14,77462,77463],{},"①变量多，单元值少",[14,77465,77466],{},[28,77467],{"alt":30,"src":77468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,77470,77471],{},"防止出现undefined的方法：",[14,77473,77474],{},"const [a=0,b=0] =[1]",[14,77476,77477],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,77479,77480],{},"②变量少，单元值多",[14,77482,77483],{},[28,77484],{"alt":30,"src":77485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,77487,77488],{},"此时可以使用剩余参数来接收多余的值",[14,77490,77491],{},"const [a,b,...c]=[1,2,3,4]",[14,77493,77494],{},"console.log(c) 输出[3,4]",[14,77496,77497],{},"③可以按需导入，忽略某些返回值",[14,77499,77500],{},[28,77501],{"alt":30,"src":77502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,77504,77505],{},"④支持多维数组的结构",[135,77507,77511],{"className":77508,"code":77509,"language":77510,"meta":30,"style":30},"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",[141,77512,77513,77541,77557,77572,77587],{"__ignoreMap":30},[144,77514,77515,77517,77519,77521,77523,77525,77527,77529,77532,77534,77536,77538],{"class":146,"line":147},[144,77516,6823],{"class":150},[144,77518,51846],{"class":154},[144,77520,200],{"class":150},[144,77522,52239],{"class":154},[144,77524,372],{"class":203},[144,77526,12466],{"class":154},[144,77528,232],{"class":203},[144,77530,77531],{"class":154},", [",[144,77533,226],{"class":203},[144,77535,12466],{"class":154},[144,77537,448],{"class":203},[144,77539,77540],{"class":154},"]]\n",[144,77542,77543,77546,77548,77550,77552,77554],{"class":146,"line":66},[144,77544,77545],{"class":154},"console.",[144,77547,58260],{"class":1993},[144,77549,3881],{"class":154},[144,77551,346],{"class":203},[144,77553,4246],{"class":154},[144,77555,77556],{"class":213},"  \u002F\u002F1\n",[144,77558,77559,77561,77563,77565,77567,77569],{"class":146,"line":1210},[144,77560,77545],{"class":154},[144,77562,58260],{"class":1993},[144,77564,3881],{"class":154},[144,77566,372],{"class":203},[144,77568,4246],{"class":154},[144,77570,77571],{"class":213},"  \u002F\u002F2\n",[144,77573,77574,77576,77578,77580,77582,77584],{"class":146,"line":1225},[144,77575,77545],{"class":154},[144,77577,58260],{"class":1993},[144,77579,3881],{"class":154},[144,77581,232],{"class":203},[144,77583,4246],{"class":154},[144,77585,77586],{"class":213},"  \u002F\u002F[3,4]\n",[144,77588,77589,77591,77593,77595,77597,77599,77601,77603],{"class":146,"line":1231},[144,77590,77545],{"class":154},[144,77592,58260],{"class":1993},[144,77594,3881],{"class":154},[144,77596,232],{"class":203},[144,77598,4931],{"class":154},[144,77600,346],{"class":203},[144,77602,4246],{"class":154},[144,77604,77605],{"class":213},"  \u002F\u002F3\n",[135,77607,77609],{"className":77508,"code":77608,"language":77510,"meta":30,"style":30},"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",[141,77610,77611,77638,77649,77660],{"__ignoreMap":30},[144,77612,77613,77615,77618,77620,77622,77624,77626,77628,77630,77632,77634,77636],{"class":146,"line":147},[144,77614,6823],{"class":150},[144,77616,77617],{"class":154}," [a, b, c] ",[144,77619,200],{"class":150},[144,77621,52239],{"class":154},[144,77623,372],{"class":203},[144,77625,12466],{"class":154},[144,77627,232],{"class":203},[144,77629,77531],{"class":154},[144,77631,226],{"class":203},[144,77633,12466],{"class":154},[144,77635,448],{"class":203},[144,77637,77540],{"class":154},[144,77639,77640,77642,77644,77647],{"class":146,"line":66},[144,77641,77545],{"class":154},[144,77643,58260],{"class":1993},[144,77645,77646],{"class":154},"(a)",[144,77648,77556],{"class":213},[144,77650,77651,77653,77655,77658],{"class":146,"line":1210},[144,77652,77545],{"class":154},[144,77654,58260],{"class":1993},[144,77656,77657],{"class":154},"(b)",[144,77659,77571],{"class":213},[144,77661,77662,77664,77666,77669],{"class":146,"line":1225},[144,77663,77545],{"class":154},[144,77665,58260],{"class":1993},[144,77667,77668],{"class":154},"(c)",[144,77670,77586],{"class":213},[135,77672,77674],{"className":77508,"code":77673,"language":77510,"meta":30,"style":30},"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",[141,77675,77676,77703,77713,77723,77733],{"__ignoreMap":30},[144,77677,77678,77680,77683,77685,77687,77689,77691,77693,77695,77697,77699,77701],{"class":146,"line":147},[144,77679,6823],{"class":150},[144,77681,77682],{"class":154}," [a, b, [c, d]] ",[144,77684,200],{"class":150},[144,77686,52239],{"class":154},[144,77688,372],{"class":203},[144,77690,12466],{"class":154},[144,77692,232],{"class":203},[144,77694,77531],{"class":154},[144,77696,226],{"class":203},[144,77698,12466],{"class":154},[144,77700,448],{"class":203},[144,77702,77540],{"class":154},[144,77704,77705,77707,77709,77711],{"class":146,"line":66},[144,77706,77545],{"class":154},[144,77708,58260],{"class":1993},[144,77710,77646],{"class":154},[144,77712,77556],{"class":213},[144,77714,77715,77717,77719,77721],{"class":146,"line":1210},[144,77716,77545],{"class":154},[144,77718,58260],{"class":1993},[144,77720,77657],{"class":154},[144,77722,77571],{"class":213},[144,77724,77725,77727,77729,77731],{"class":146,"line":1225},[144,77726,77545],{"class":154},[144,77728,58260],{"class":1993},[144,77730,77668],{"class":154},[144,77732,77605],{"class":213},[144,77734,77735,77737,77739,77742],{"class":146,"line":1231},[144,77736,77545],{"class":154},[144,77738,58260],{"class":1993},[144,77740,77741],{"class":154},"(d)",[144,77743,77744],{"class":213},"  \u002F\u002F4\n",[115,77746,77748],{"id":77747},"_462-对象解构","4.6.2 对象解构",[14,77750,77751],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,77753,77754],{},"用的非常非常多！！！！！！",[22029,77756,77758],{"id":77757},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,77760,77761],{},"基本语法：",[98,77763,77764,77767,77770,77773],{},[101,77765,77766],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[101,77768,77769],{},"对象属性的值将被赋值给与属性名相同的变量",[101,77771,77772],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[101,77774,77775],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[135,77777,77779],{"className":50646,"code":77778,"language":50648,"meta":30,"style":30},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[141,77780,77781,77786,77791,77796,77800],{"__ignoreMap":30},[144,77782,77783],{"class":146,"line":147},[144,77784,77785],{"class":154},"const obj = {\n",[144,77787,77788],{"class":146,"line":66},[144,77789,77790],{"class":154},"   uname: 'pink老师',\n",[144,77792,77793],{"class":146,"line":1210},[144,77794,77795],{"class":154},"   age: 18,\n",[144,77797,77798],{"class":146,"line":1225},[144,77799,1595],{"class":154},[144,77801,77802],{"class":146,"line":1231},[144,77803,77804],{"class":154},"const { uname, age } = obj\n",[14,77806,77807],{},"上方代码这样写等价于：",[14,77809,77810],{},"const uname等价于obj.uname",[14,77812,77813],{},"变量名可以重新改名：",[14,77815,77816],{},"const uname='red老师'",[14,77818,77819],{},"const user={",[14,77821,77822],{},"  uname:'pink老师',",[14,77824,77825],{},"  age:18",[14,77827,1101],{},[14,77829,77830],{},"const {uname,age}=user",[14,77832,77833],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,77835,77836],{},"const {旧变量名：新变量名}=对象",[14,77838,77839],{},"const {uname:username,age}=user",[22029,77841,77843],{"id":77842},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,77845,77846],{},[28,77847],{"alt":30,"src":77848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22029,77850,77852],{"id":77851},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,77854,77855],{},[28,77856],{"alt":30,"src":77857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[135,77859,77861],{"className":53080,"code":77860,"language":53082,"meta":30,"style":30},"  \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",[141,77862,77863,77871,77876,77881,77886,77891,77896,77901,77906,77911,77915,77920,77925],{"__ignoreMap":30},[144,77864,77865,77867,77869],{"class":146,"line":147},[144,77866,52157],{"class":154},[144,77868,51826],{"class":51313},[144,77870,51320],{"class":154},[144,77872,77873],{"class":146,"line":66},[144,77874,77875],{"class":154},"    const pig = {\n",[144,77877,77878],{"class":146,"line":1210},[144,77879,77880],{"class":154},"      name: '佩奇',\n",[144,77882,77883],{"class":146,"line":1225},[144,77884,77885],{"class":154},"      family: {\n",[144,77887,77888],{"class":146,"line":1231},[144,77889,77890],{"class":154},"        mother: '猪妈妈',\n",[144,77892,77893],{"class":146,"line":1245},[144,77894,77895],{"class":154},"        father: '猪爸爸',\n",[144,77897,77898],{"class":146,"line":1251},[144,77899,77900],{"class":154},"        sister: '乔治'\n",[144,77902,77903],{"class":146,"line":1342},[144,77904,77905],{"class":154},"      },\n",[144,77907,77908],{"class":146,"line":1348},[144,77909,77910],{"class":154},"      age: 6\n",[144,77912,77913],{"class":146,"line":1360},[144,77914,2217],{"class":154},[144,77916,77917],{"class":146,"line":1642},[144,77918,77919],{"class":154},"    \u002F\u002F 多级对象解构\n",[144,77921,77922],{"class":146,"line":1647},[144,77923,77924],{"class":154},"    const { name, family: { mother, father, sister }, age } = pig\n",[144,77926,77927,77929,77931],{"class":146,"line":1653},[144,77928,52430],{"class":154},[144,77930,51826],{"class":51313},[144,77932,51320],{"class":154},[14,77934,77935],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[135,77937,77940],{"className":77938,"code":77939,"language":76460,"meta":30,"style":30},"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",[141,77941,77942,77947,77958,77970,77982,77991,77995,78006,78018,78028,78033,78037,78047,78058,78067,78071,78075,78086,78097,78106,78110,78115],{"__ignoreMap":30},[144,77943,77944],{"class":146,"line":147},[144,77945,77946],{"class":213},"    \u002F\u002F 这是后台传递过来的数据\n",[144,77948,77949,77951,77954,77956],{"class":146,"line":66},[144,77950,11252],{"class":150},[144,77952,77953],{"class":154}," msg ",[144,77955,200],{"class":150},[144,77957,15603],{"class":154},[144,77959,77960,77963,77965,77968],{"class":146,"line":1210},[144,77961,77962],{"class":259},"      \"code\"",[144,77964,1014],{"class":150},[144,77966,77967],{"class":203}," 200",[144,77969,31479],{"class":154},[144,77971,77972,77975,77977,77980],{"class":146,"line":1225},[144,77973,77974],{"class":259},"      \"msg\"",[144,77976,1014],{"class":150},[144,77978,77979],{"class":259}," \"获取新闻列表成功\"",[144,77981,31479],{"class":154},[144,77983,77984,77987,77989],{"class":146,"line":1231},[144,77985,77986],{"class":259},"      \"data\"",[144,77988,1014],{"class":150},[144,77990,55460],{"class":154},[144,77992,77993],{"class":146,"line":1245},[144,77994,2540],{"class":154},[144,77996,77997,78000,78002,78004],{"class":146,"line":1251},[144,77998,77999],{"class":259},"          \"id\"",[144,78001,1014],{"class":150},[144,78003,25131],{"class":203},[144,78005,31479],{"class":154},[144,78007,78008,78011,78013,78016],{"class":146,"line":1342},[144,78009,78010],{"class":259},"          \"title\"",[144,78012,1014],{"class":150},[144,78014,78015],{"class":259}," \"5G商用自己，三大运用商收入下降\"",[144,78017,31479],{"class":154},[144,78019,78020,78023,78025],{"class":146,"line":1348},[144,78021,78022],{"class":259},"          \"count\"",[144,78024,1014],{"class":150},[144,78026,78027],{"class":203}," 58\n",[144,78029,78030],{"class":146,"line":1360},[144,78031,78032],{"class":154},"        },\n",[144,78034,78035],{"class":146,"line":1642},[144,78036,2540],{"class":154},[144,78038,78039,78041,78043,78045],{"class":146,"line":1647},[144,78040,77999],{"class":259},[144,78042,1014],{"class":150},[144,78044,14786],{"class":203},[144,78046,31479],{"class":154},[144,78048,78049,78051,78053,78056],{"class":146,"line":1653},[144,78050,78010],{"class":259},[144,78052,1014],{"class":150},[144,78054,78055],{"class":259}," \"国际媒体头条速览\"",[144,78057,31479],{"class":154},[144,78059,78060,78062,78064],{"class":146,"line":1658},[144,78061,78022],{"class":259},[144,78063,1014],{"class":150},[144,78065,78066],{"class":203}," 56\n",[144,78068,78069],{"class":146,"line":1672},[144,78070,78032],{"class":154},[144,78072,78073],{"class":146,"line":1677},[144,78074,2540],{"class":154},[144,78076,78077,78079,78081,78084],{"class":146,"line":1683},[144,78078,77999],{"class":259},[144,78080,1014],{"class":150},[144,78082,78083],{"class":203}," 3",[144,78085,31479],{"class":154},[144,78087,78088,78090,78092,78095],{"class":146,"line":1704},[144,78089,78010],{"class":259},[144,78091,1014],{"class":150},[144,78093,78094],{"class":259}," \"乌克兰和俄罗斯持续冲突\"",[144,78096,31479],{"class":154},[144,78098,78099,78101,78103],{"class":146,"line":1709},[144,78100,78022],{"class":259},[144,78102,1014],{"class":150},[144,78104,78105],{"class":203}," 1669\n",[144,78107,78108],{"class":146,"line":1723},[144,78109,78032],{"class":154},[144,78111,78112],{"class":146,"line":1728},[144,78113,78114],{"class":154},"      ]\n",[144,78116,78117],{"class":146,"line":1757},[144,78118,2217],{"class":154},[14,78120,78121],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78123,78124],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78126,78127],{},"\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,78129,78130],{},"function({data}) {",[14,78132,78133],{},"console.log(data)",[14,78135,1101],{},[14,78137,78138],{},"render(msg)",[14,78140,78141],{},"实参传递给形参的时候解构了",[14,78143,78144],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78146,78147],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78149,78150],{},"function render({data:mydata}) {",[14,78152,78153],{},"  console.log(data)",[14,78155,1101],{},[115,78157,78159],{"id":78158},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78161,78162],{},"有两种情况：一个是数组结构，一个是立即执行函数",[98,78164,78165],{},[101,78166,78167],{},"如果对一个数组进行遍历，有两种方式：",[14,78169,78170],{},"①法1",[14,78172,78173],{},"const arr=[1,2,3]",[14,78175,78176],{},"arr.map(function(item,index) {",[14,78178,78179],{},"  console.log(item)",[14,78181,52477],{},[14,78183,78184],{},[28,78185],{"alt":30,"src":78186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78188,78189],{},"②法2",[14,78191,78192],{},"const str='pink'",[14,78194,78195],{},"[1,2,3].map(function(item,index) {",[14,78197,78198],{},"console.log(item)",[14,78200,52477],{},[14,78202,78203],{},[28,78204],{"alt":30,"src":78205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78207,78208],{},"此时会报错",[14,78210,78211],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78213,78198],{},[14,78215,52477],{},[14,78217,78218],{},"内部会当成这样处理，所以我们用分号进行隔开",[18,78220,78222],{"id":78221},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78224,78225],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78227,78228],{},"可以理解为加强版的for循环",[14,78230,78231],{},[28,78232],{"alt":30,"src":78233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78235,78236],{},"里边不写return，不返回数组，只遍历不返回",[14,78238,78239],{},"map是返回数组",[14,78241,78242],{},"forEach主要用于遍历数组对象",[135,78244,78246],{"className":53080,"code":78245,"language":53082,"meta":30,"style":30},"  \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",[141,78247,78248,78256,78261,78266,78271,78276,78280,78285],{"__ignoreMap":30},[144,78249,78250,78252,78254],{"class":146,"line":147},[144,78251,52157],{"class":154},[144,78253,51826],{"class":51313},[144,78255,51320],{"class":154},[144,78257,78258],{"class":146,"line":66},[144,78259,78260],{"class":154},"    const arr = ['red', 'green', 'pink']\n",[144,78262,78263],{"class":146,"line":1210},[144,78264,78265],{"class":154},"    const result = arr.forEach(function (item, index) {\n",[144,78267,78268],{"class":146,"line":1225},[144,78269,78270],{"class":154},"      console.log(item)\n",[144,78272,78273],{"class":146,"line":1231},[144,78274,78275],{"class":154},"      console.log(index)\n",[144,78277,78278],{"class":146,"line":1245},[144,78279,33474],{"class":154},[144,78281,78282],{"class":146,"line":1251},[144,78283,78284],{"class":154},"    console.log(result)\n",[144,78286,78287,78289,78291],{"class":146,"line":1342},[144,78288,52430],{"class":154},[144,78290,51826],{"class":51313},[144,78292,51320],{"class":154},[14,78294,78295],{},[28,78296],{"alt":30,"src":78297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[18,78299,78301],{"id":78300},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,78303,78304],{},[28,78305],{"alt":30,"src":78306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,78308,78309],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[135,78311,78313],{"className":53080,"code":78312,"language":53082,"meta":30,"style":30},"\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",[141,78314,78315,78323,78331,78336,78341,78345,78349,78354,78358,78363,78371],{"__ignoreMap":30},[144,78316,78317,78319,78321],{"class":146,"line":147},[144,78318,1065],{"class":154},[144,78320,51813],{"class":51313},[144,78322,51320],{"class":154},[144,78324,78325,78327,78329],{"class":146,"line":66},[144,78326,52157],{"class":154},[144,78328,51826],{"class":51313},[144,78330,51320],{"class":154},[144,78332,78333],{"class":146,"line":1210},[144,78334,78335],{"class":154},"    const arr = [10, 20, 30]\n",[144,78337,78338],{"class":146,"line":1225},[144,78339,78340],{"class":154},"    const newArr = arr.filter(function (item, index) {\n",[144,78342,78343],{"class":146,"line":1231},[144,78344,78270],{"class":154},[144,78346,78347],{"class":146,"line":1245},[144,78348,78275],{"class":154},[144,78350,78351],{"class":146,"line":1251},[144,78352,78353],{"class":154},"      return item >= 20\n",[144,78355,78356],{"class":146,"line":1342},[144,78357,33474],{"class":154},[144,78359,78360],{"class":146,"line":1348},[144,78361,78362],{"class":154},"    console.log(newArr)\n",[144,78364,78365,78367,78369],{"class":146,"line":1360},[144,78366,52430],{"class":154},[144,78368,51826],{"class":51313},[144,78370,51320],{"class":154},[144,78372,78373,78375,78377],{"class":146,"line":1642},[144,78374,51798],{"class":154},[144,78376,51813],{"class":51313},[144,78378,51320],{"class":154},[14,78380,78381],{},"这个也可以写成箭头函数：",[135,78383,78385],{"className":50646,"code":78384,"language":50648,"meta":30,"style":30},"const newArr = arr.filter(item => item >= 20)\n",[141,78386,78387],{"__ignoreMap":30},[144,78388,78389],{"class":146,"line":147},[144,78390,78384],{"class":154},[18,78392,78394],{"id":78393},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,78396,78397],{},[28,78398],{"alt":30,"src":78399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,78401,78402],{},"步骤：",[14,78404,78405],{},"①：渲染页面模块",[1162,78407,78408,78411],{},[101,78409,78410],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[101,78412,78413],{},"用forEach+字符串的形式",[14,78415,78416],{},"②：点击不同需求，显示不同页面内容",[1162,78418,78419,78422,78425,78428,78431],{},[101,78420,78421],{},"点击采取事件委托方式 .filter",[101,78423,78424],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[101,78426,78427],{},"筛选条件是根据点击的 data-index 来判断",[101,78429,78430],{},"可以使用对象解构，把事件对象解构",[101,78432,78433],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[135,78435,78437],{"className":50646,"code":78436,"language":50648,"meta":30,"style":30},"\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",[141,78438,78439,78449,78463,78467,78475,78489,78509,78521,78529,78535,78545,78555,78565,78569,78573,78579,78592,78604,78614,78626,78630,78634,78641,78654,78666,78683,78701,78714,78718,78722,78734,78744,78748,78752,78759,78800,78827,78837,78841,78845,78853,78865,78869,78873,78881,78893,78905,78916,78920,78924,78933,78945,78956,78960,78964,78973,78985,78997,79001,79005,79012,79022,79034,79046,79061,79065,79069,79077,79093,79103,79113,79123,79135,79139,79143,79153,79164,79174,79178,79186,79194,79198,79206,79221,79247,79272,79297,79316,79324,79338,79343,79348,79353,79358,79363,79371,79379,79384,79395,79400,79410,79420,79430,79440,79444,79448,79457,79466,79475,79484,79488,79492,79501,79510,79519,79528,79532,79536,79545,79554,79563,79572,79576,79580,79589,79598,79607,79616,79620,79624,79633,79642,79651,79660,79664,79668,79677,79686,79695,79704,79708,79712,79721,79730,79738,79747,79751,79755,79759,79764,79776,79781,79793,79797,79814,79842,79851,79856,79866,79876,79885,79890,79895,79899,79904,79921,79925,79930,79938,79943,79970,79975,79995,80000,80012,80017,80022,80027,80038,80052,80089,80107,80140,80157,80181,80185,80190,80196,80200,80204,80208,80216,80224,80228],{"__ignoreMap":30},[144,78440,78441,78443,78445,78447],{"class":146,"line":147},[144,78442,51310],{"class":154},[144,78444,51314],{"class":51313},[144,78446,51317],{"class":1993},[144,78448,51320],{"class":154},[144,78450,78451,78453,78455,78457,78459,78461],{"class":146,"line":66},[144,78452,1065],{"class":154},[144,78454,50648],{"class":51313},[144,78456,51329],{"class":1993},[144,78458,200],{"class":154},[144,78460,51334],{"class":259},[144,78462,51320],{"class":154},[144,78464,78465],{"class":146,"line":1210},[144,78466,2430],{"emptyLinePlaceholder":72},[144,78468,78469,78471,78473],{"class":146,"line":1225},[144,78470,1065],{"class":154},[144,78472,51347],{"class":51313},[144,78474,51320],{"class":154},[144,78476,78477,78479,78481,78483,78485,78487],{"class":146,"line":1231},[144,78478,52157],{"class":154},[144,78480,51357],{"class":51313},[144,78482,51360],{"class":1993},[144,78484,200],{"class":154},[144,78486,51365],{"class":259},[144,78488,51320],{"class":154},[144,78490,78491,78493,78495,78497,78499,78501,78503,78505,78507],{"class":146,"line":1245},[144,78492,52157],{"class":154},[144,78494,51357],{"class":51313},[144,78496,14951],{"class":1993},[144,78498,200],{"class":154},[144,78500,51404],{"class":259},[144,78502,51384],{"class":1993},[144,78504,200],{"class":154},[144,78506,51411],{"class":259},[144,78508,51320],{"class":154},[144,78510,78511,78513,78515,78517,78519],{"class":146,"line":1251},[144,78512,52157],{"class":154},[144,78514,51420],{"class":51313},[144,78516,51423],{"class":154},[144,78518,51420],{"class":51313},[144,78520,51320],{"class":154},[144,78522,78523,78525,78527],{"class":146,"line":1342},[144,78524,52157],{"class":154},[144,78526,5157],{"class":51313},[144,78528,51320],{"class":154},[144,78530,78531,78533],{"class":146,"line":1348},[144,78532,6434],{"class":51313},[144,78534,15603],{"class":154},[144,78536,78537,78539,78541,78543],{"class":146,"line":1360},[144,78538,54708],{"class":203},[144,78540,51450],{"class":154},[144,78542,346],{"class":203},[144,78544,1321],{"class":154},[144,78546,78547,78549,78551,78553],{"class":146,"line":1642},[144,78548,54719],{"class":203},[144,78550,51450],{"class":154},[144,78552,346],{"class":203},[144,78554,1321],{"class":154},[144,78556,78557,78559,78561,78563],{"class":146,"line":1647},[144,78558,72609],{"class":203},[144,78560,51450],{"class":154},[144,78562,60518],{"class":203},[144,78564,1321],{"class":154},[144,78566,78567],{"class":146,"line":1653},[144,78568,2217],{"class":154},[144,78570,78571],{"class":146,"line":1658},[144,78572,2430],{"emptyLinePlaceholder":72},[144,78574,78575,78577],{"class":146,"line":1672},[144,78576,62136],{"class":1993},[144,78578,15603],{"class":154},[144,78580,78581,78583,78585,78588,78590],{"class":146,"line":1677},[144,78582,54784],{"class":203},[144,78584,51450],{"class":154},[144,78586,78587],{"class":203},"990",[144,78589,51505],{"class":150},[144,78591,1321],{"class":154},[144,78593,78594,78596,78598,78600,78602],{"class":146,"line":1683},[144,78595,54719],{"class":203},[144,78597,51450],{"class":154},[144,78599,346],{"class":203},[144,78601,51569],{"class":203},[144,78603,1321],{"class":154},[144,78605,78606,78608,78610,78612],{"class":146,"line":1704},[144,78607,55022],{"class":203},[144,78609,51450],{"class":154},[144,78611,51490],{"class":203},[144,78613,1321],{"class":154},[144,78615,78616,78619,78621,78624],{"class":146,"line":1709},[144,78617,78618],{"class":203},"      flex-wrap",[144,78620,51450],{"class":154},[144,78622,78623],{"class":203},"wrap",[144,78625,1321],{"class":154},[144,78627,78628],{"class":146,"line":1723},[144,78629,2217],{"class":154},[144,78631,78632],{"class":146,"line":1728},[144,78633,2430],{"emptyLinePlaceholder":72},[144,78635,78636,78639],{"class":146,"line":1757},[144,78637,78638],{"class":1993},"    .item",[144,78640,15603],{"class":154},[144,78642,78643,78645,78647,78650,78652],{"class":146,"line":1762},[144,78644,54784],{"class":203},[144,78646,51450],{"class":154},[144,78648,78649],{"class":203},"240",[144,78651,51505],{"class":150},[144,78653,1321],{"class":154},[144,78655,78656,78658,78660,78662,78664],{"class":146,"line":1779},[144,78657,62013],{"class":203},[144,78659,51450],{"class":154},[144,78661,601],{"class":203},[144,78663,51505],{"class":150},[144,78665,1321],{"class":154},[144,78667,78668,78670,78672,78674,78676,78679,78681],{"class":146,"line":1784},[144,78669,54708],{"class":203},[144,78671,51450],{"class":154},[144,78673,855],{"class":203},[144,78675,51505],{"class":150},[144,78677,78678],{"class":203}," 30",[144,78680,51505],{"class":150},[144,78682,1321],{"class":154},[144,78684,78685,78687,78689,78691,78694,78697,78699],{"class":146,"line":1789},[144,78686,61873],{"class":203},[144,78688,51450],{"class":154},[144,78690,28134],{"class":203},[144,78692,78693],{"class":203}," ease",[144,78695,78696],{"class":203}," .5",[144,78698,850],{"class":150},[144,78700,1321],{"class":154},[144,78702,78703,78706,78708,78710,78712],{"class":146,"line":1794},[144,78704,78705],{"class":203},"      margin-bottom",[144,78707,51450],{"class":154},[144,78709,855],{"class":203},[144,78711,51505],{"class":150},[144,78713,1321],{"class":154},[144,78715,78716],{"class":146,"line":1808},[144,78717,2217],{"class":154},[144,78719,78720],{"class":146,"line":1813},[144,78721,2430],{"emptyLinePlaceholder":72},[144,78723,78724,78727,78729,78732],{"class":146,"line":2607},[144,78725,78726],{"class":1993},"    .item:nth-child",[144,78728,155],{"class":154},[144,78730,78731],{"class":203},"4n",[144,78733,12473],{"class":154},[144,78735,78736,78738,78740,78742],{"class":146,"line":2621},[144,78737,62013],{"class":203},[144,78739,51450],{"class":154},[144,78741,346],{"class":203},[144,78743,1321],{"class":154},[144,78745,78746],{"class":146,"line":2629},[144,78747,2217],{"class":154},[144,78749,78750],{"class":146,"line":2634},[144,78751,2430],{"emptyLinePlaceholder":72},[144,78753,78754,78757],{"class":146,"line":2640},[144,78755,78756],{"class":1993},"    .item:hover",[144,78758,15603],{"class":154},[144,78760,78761,78764,78766,78768,78770,78772,78774,78776,78778,78781,78783,78785,78787,78789,78791,78793,78795,78798],{"class":146,"line":2646},[144,78762,78763],{"class":203},"      box-shadow",[144,78765,51450],{"class":154},[144,78767,346],{"class":203},[144,78769,51505],{"class":150},[144,78771,4123],{"class":203},[144,78773,51505],{"class":150},[144,78775,2178],{"class":203},[144,78777,51505],{"class":150},[144,78779,78780],{"class":203}," rgba",[144,78782,155],{"class":154},[144,78784,346],{"class":203},[144,78786,12466],{"class":154},[144,78788,346],{"class":203},[144,78790,12466],{"class":154},[144,78792,346],{"class":203},[144,78794,12466],{"class":154},[144,78796,78797],{"class":203},".2",[144,78799,2749],{"class":154},[144,78801,78802,78805,78807,78810,78812,78814,78816,78819,78821,78823,78825],{"class":146,"line":2651},[144,78803,78804],{"class":203},"      transform",[144,78806,51450],{"class":154},[144,78808,78809],{"class":203},"translate3d",[144,78811,155],{"class":154},[144,78813,346],{"class":203},[144,78815,12466],{"class":154},[144,78817,78818],{"class":203},"-4",[144,78820,51505],{"class":150},[144,78822,12466],{"class":154},[144,78824,346],{"class":203},[144,78826,2749],{"class":154},[144,78828,78829,78831,78833,78835],{"class":146,"line":7979},[144,78830,62038],{"class":203},[144,78832,51450],{"class":154},[144,78834,62043],{"class":203},[144,78836,1321],{"class":154},[144,78838,78839],{"class":146,"line":8003},[144,78840,2217],{"class":154},[144,78842,78843],{"class":146,"line":8008},[144,78844,2430],{"emptyLinePlaceholder":72},[144,78846,78847,78849,78851],{"class":146,"line":8014},[144,78848,78638],{"class":1993},[144,78850,55628],{"class":51313},[144,78852,15603],{"class":154},[144,78854,78855,78857,78859,78861,78863],{"class":146,"line":8041},[144,78856,54784],{"class":203},[144,78858,51450],{"class":154},[144,78860,466],{"class":203},[144,78862,483],{"class":150},[144,78864,1321],{"class":154},[144,78866,78867],{"class":146,"line":8046},[144,78868,2217],{"class":154},[144,78870,78871],{"class":146,"line":8052},[144,78872,2430],{"emptyLinePlaceholder":72},[144,78874,78875,78877,78879],{"class":146,"line":8064},[144,78876,78638],{"class":1993},[144,78878,62317],{"class":1993},[144,78880,15603],{"class":154},[144,78882,78883,78885,78887,78889,78891],{"class":146,"line":8076},[144,78884,54935],{"class":203},[144,78886,51450],{"class":154},[144,78888,805],{"class":203},[144,78890,51505],{"class":150},[144,78892,1321],{"class":154},[144,78894,78895,78897,78899,78901,78903],{"class":146,"line":8088},[144,78896,78705],{"class":203},[144,78898,51450],{"class":154},[144,78900,601],{"class":203},[144,78902,51505],{"class":150},[144,78904,1321],{"class":154},[144,78906,78907,78909,78911,78914],{"class":146,"line":9747},[144,78908,57429],{"class":203},[144,78910,51450],{"class":154},[144,78912,78913],{"class":203},"#666",[144,78915,1321],{"class":154},[144,78917,78918],{"class":146,"line":9772},[144,78919,2217],{"class":154},[144,78921,78922],{"class":146,"line":9795},[144,78923,2430],{"emptyLinePlaceholder":72},[144,78925,78926,78928,78931],{"class":146,"line":9819},[144,78927,78638],{"class":1993},[144,78929,78930],{"class":1993}," .price",[144,78932,15603],{"class":154},[144,78934,78935,78937,78939,78941,78943],{"class":146,"line":9824},[144,78936,54935],{"class":203},[144,78938,51450],{"class":154},[144,78940,905],{"class":203},[144,78942,51505],{"class":150},[144,78944,1321],{"class":154},[144,78946,78947,78949,78951,78954],{"class":146,"line":9829},[144,78948,57429],{"class":203},[144,78950,51450],{"class":154},[144,78952,78953],{"class":203},"firebrick",[144,78955,1321],{"class":154},[144,78957,78958],{"class":146,"line":9834},[144,78959,2217],{"class":154},[144,78961,78962],{"class":146,"line":9843},[144,78963,2430],{"emptyLinePlaceholder":72},[144,78965,78966,78968,78971],{"class":146,"line":9848},[144,78967,78638],{"class":1993},[144,78969,78970],{"class":1993}," .price::before",[144,78972,15603],{"class":154},[144,78974,78975,78978,78980,78983],{"class":146,"line":9854},[144,78976,78977],{"class":203},"      content",[144,78979,51450],{"class":154},[144,78981,78982],{"class":259},"'￥'",[144,78984,1321],{"class":154},[144,78986,78987,78989,78991,78993,78995],{"class":146,"line":9875},[144,78988,54935],{"class":203},[144,78990,51450],{"class":154},[144,78992,704],{"class":203},[144,78994,51505],{"class":150},[144,78996,1321],{"class":154},[144,78998,78999],{"class":146,"line":9881},[144,79000,2217],{"class":154},[144,79002,79003],{"class":146,"line":9895},[144,79004,2430],{"emptyLinePlaceholder":72},[144,79006,79007,79010],{"class":146,"line":9901},[144,79008,79009],{"class":1993},"    .filter",[144,79011,15603],{"class":154},[144,79013,79014,79016,79018,79020],{"class":146,"line":9928},[144,79015,55022],{"class":203},[144,79017,51450],{"class":154},[144,79019,51490],{"class":203},[144,79021,1321],{"class":154},[144,79023,79024,79026,79028,79030,79032],{"class":146,"line":9937},[144,79025,54784],{"class":203},[144,79027,51450],{"class":154},[144,79029,78587],{"class":203},[144,79031,51505],{"class":150},[144,79033,1321],{"class":154},[144,79035,79036,79038,79040,79042,79044],{"class":146,"line":9943},[144,79037,54719],{"class":203},[144,79039,51450],{"class":154},[144,79041,346],{"class":203},[144,79043,51569],{"class":203},[144,79045,1321],{"class":154},[144,79047,79048,79050,79052,79054,79056,79058],{"class":146,"line":9951},[144,79049,54708],{"class":203},[144,79051,51450],{"class":154},[144,79053,811],{"class":203},[144,79055,51505],{"class":150},[144,79057,78678],{"class":203},[144,79059,79060],{"class":150},"px\n",[144,79062,79063],{"class":146,"line":9956},[144,79064,2217],{"class":154},[144,79066,79067],{"class":146,"line":16635},[144,79068,2430],{"emptyLinePlaceholder":72},[144,79070,79071,79073,79075],{"class":146,"line":16641},[144,79072,79009],{"class":1993},[144,79074,1429],{"class":51313},[144,79076,15603],{"class":154},[144,79078,79079,79081,79083,79085,79087,79089,79091],{"class":146,"line":16664},[144,79080,54708],{"class":203},[144,79082,51450],{"class":154},[144,79084,601],{"class":203},[144,79086,51505],{"class":150},[144,79088,8981],{"class":203},[144,79090,51505],{"class":150},[144,79092,1321],{"class":154},[144,79094,79095,79097,79099,79101],{"class":146,"line":16670},[144,79096,61734],{"class":203},[144,79098,51450],{"class":154},[144,79100,61831],{"class":203},[144,79102,1321],{"class":154},[144,79104,79105,79107,79109,79111],{"class":146,"line":16693},[144,79106,57429],{"class":203},[144,79108,51450],{"class":154},[144,79110,78913],{"class":203},[144,79112,1321],{"class":154},[144,79114,79115,79117,79119,79121],{"class":146,"line":16707},[144,79116,63983],{"class":203},[144,79118,51450],{"class":154},[144,79120,54750],{"class":203},[144,79122,1321],{"class":154},[144,79124,79125,79127,79129,79131,79133],{"class":146,"line":16727},[144,79126,61763],{"class":203},[144,79128,51450],{"class":154},[144,79130,855],{"class":203},[144,79132,51505],{"class":150},[144,79134,1321],{"class":154},[144,79136,79137],{"class":146,"line":16733},[144,79138,2217],{"class":154},[144,79140,79141],{"class":146,"line":16744},[144,79142,2430],{"emptyLinePlaceholder":72},[144,79144,79145,79147,79149,79151],{"class":146,"line":16767},[144,79146,79009],{"class":1993},[144,79148,1429],{"class":51313},[144,79150,61913],{"class":1993},[144,79152,15603],{"class":154},[144,79154,79155,79157,79159,79162],{"class":146,"line":16789},[144,79156,54897],{"class":203},[144,79158,51450],{"class":154},[144,79160,79161],{"class":203},"#05943c",[144,79163,1321],{"class":154},[144,79165,79166,79168,79170,79172],{"class":146,"line":16794},[144,79167,57429],{"class":203},[144,79169,51450],{"class":154},[144,79171,60855],{"class":203},[144,79173,1321],{"class":154},[144,79175,79176],{"class":146,"line":16800},[144,79177,2217],{"class":154},[144,79179,79180,79182,79184],{"class":146,"line":16814},[144,79181,52430],{"class":154},[144,79183,5157],{"class":51313},[144,79185,51320],{"class":154},[144,79187,79188,79190,79192],{"class":146,"line":16827},[144,79189,51798],{"class":154},[144,79191,51347],{"class":51313},[144,79193,51320],{"class":154},[144,79195,79196],{"class":146,"line":16832},[144,79197,2430],{"emptyLinePlaceholder":72},[144,79199,79200,79202,79204],{"class":146,"line":16846},[144,79201,1065],{"class":154},[144,79203,51813],{"class":51313},[144,79205,51320],{"class":154},[144,79207,79208,79210,79212,79214,79216,79219],{"class":146,"line":16851},[144,79209,52157],{"class":154},[144,79211,51624],{"class":51313},[144,79213,53499],{"class":1993},[144,79215,200],{"class":154},[144,79217,79218],{"class":259},"\"filter\"",[144,79220,51320],{"class":154},[144,79222,79223,79225,79227,79229,79231,79233,79236,79238,79240,79243,79245],{"class":146,"line":16857},[144,79224,51354],{"class":154},[144,79226,393],{"class":51313},[144,79228,61070],{"class":1993},[144,79230,200],{"class":154},[144,79232,61075],{"class":259},[144,79234,79235],{"class":1993}," data-index",[144,79237,200],{"class":154},[144,79239,3708],{"class":259},[144,79241,79242],{"class":154},">0-100元\u003C\u002F",[144,79244,393],{"class":51313},[144,79246,51320],{"class":154},[144,79248,79249,79251,79253,79255,79257,79259,79261,79263,79265,79268,79270],{"class":146,"line":16862},[144,79250,51354],{"class":154},[144,79252,393],{"class":51313},[144,79254,61070],{"class":1993},[144,79256,200],{"class":154},[144,79258,61075],{"class":259},[144,79260,79235],{"class":1993},[144,79262,200],{"class":154},[144,79264,3731],{"class":259},[144,79266,79267],{"class":154},">100-300元\u003C\u002F",[144,79269,393],{"class":51313},[144,79271,51320],{"class":154},[144,79273,79274,79276,79278,79280,79282,79284,79286,79288,79290,79293,79295],{"class":146,"line":16876},[144,79275,51354],{"class":154},[144,79277,393],{"class":51313},[144,79279,61070],{"class":1993},[144,79281,200],{"class":154},[144,79283,61075],{"class":259},[144,79285,79235],{"class":1993},[144,79287,200],{"class":154},[144,79289,3744],{"class":259},[144,79291,79292],{"class":154},">300元以上\u003C\u002F",[144,79294,393],{"class":51313},[144,79296,51320],{"class":154},[144,79298,79299,79301,79303,79305,79307,79309,79312,79314],{"class":146,"line":16881},[144,79300,51354],{"class":154},[144,79302,393],{"class":51313},[144,79304,61070],{"class":1993},[144,79306,200],{"class":154},[144,79308,61075],{"class":259},[144,79310,79311],{"class":154},">全部区间\u003C\u002F",[144,79313,393],{"class":51313},[144,79315,51320],{"class":154},[144,79317,79318,79320,79322],{"class":146,"line":16886},[144,79319,52430],{"class":154},[144,79321,51624],{"class":51313},[144,79323,51320],{"class":154},[144,79325,79326,79328,79330,79332,79334,79336],{"class":146,"line":16900},[144,79327,52157],{"class":154},[144,79329,51624],{"class":51313},[144,79331,53499],{"class":1993},[144,79333,200],{"class":154},[144,79335,62621],{"class":259},[144,79337,51320],{"class":154},[144,79339,79340],{"class":146,"line":16912},[144,79341,79342],{"class":213},"    \u003C!-- \u003Cdiv class=\"item\">\n",[144,79344,79345],{"class":146,"line":16917},[144,79346,79347],{"class":213},"      \u003Cimg src=\"\" alt=\"\">\n",[144,79349,79350],{"class":146,"line":16930},[144,79351,79352],{"class":213},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[144,79354,79355],{"class":146,"line":16935},[144,79356,79357],{"class":213},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[144,79359,79360],{"class":146,"line":16940},[144,79361,79362],{"class":213},"    \u003C\u002Fdiv> -->\n",[144,79364,79365,79367,79369],{"class":146,"line":16945},[144,79366,52430],{"class":154},[144,79368,51624],{"class":51313},[144,79370,51320],{"class":154},[144,79372,79373,79375,79377],{"class":146,"line":16958},[144,79374,52157],{"class":154},[144,79376,51826],{"class":51313},[144,79378,51320],{"class":154},[144,79380,79381],{"class":146,"line":16963},[144,79382,79383],{"class":213},"    \u002F\u002F 2. 初始化数据\n",[144,79385,79386,79388,79391,79393],{"class":146,"line":32646},[144,79387,11252],{"class":150},[144,79389,79390],{"class":203}," goodsList",[144,79392,13595],{"class":150},[144,79394,55460],{"class":154},[144,79396,79397],{"class":146,"line":32652},[144,79398,79399],{"class":154},"      {\n",[144,79401,79402,79405,79408],{"class":146,"line":32658},[144,79403,79404],{"class":154},"        id: ",[144,79406,79407],{"class":259},"'4001172'",[144,79409,31479],{"class":154},[144,79411,79412,79415,79418],{"class":146,"line":32664},[144,79413,79414],{"class":154},"        name: ",[144,79416,79417],{"class":259},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[144,79419,31479],{"class":154},[144,79421,79422,79425,79428],{"class":146,"line":32670},[144,79423,79424],{"class":154},"        price: ",[144,79426,79427],{"class":259},"'289.00'",[144,79429,31479],{"class":154},[144,79431,79432,79435,79438],{"class":146,"line":32681},[144,79433,79434],{"class":154},"        picture: ",[144,79436,79437],{"class":259},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[144,79439,31479],{"class":154},[144,79441,79442],{"class":146,"line":32687},[144,79443,77905],{"class":154},[144,79445,79446],{"class":146,"line":32707},[144,79447,79399],{"class":154},[144,79449,79450,79452,79455],{"class":146,"line":32713},[144,79451,79404],{"class":154},[144,79453,79454],{"class":259},"'4001594'",[144,79456,31479],{"class":154},[144,79458,79459,79461,79464],{"class":146,"line":32724},[144,79460,79414],{"class":154},[144,79462,79463],{"class":259},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[144,79465,31479],{"class":154},[144,79467,79468,79470,79473],{"class":146,"line":32730},[144,79469,79424],{"class":154},[144,79471,79472],{"class":259},"'288.00'",[144,79474,31479],{"class":154},[144,79476,79477,79479,79482],{"class":146,"line":32736},[144,79478,79434],{"class":154},[144,79480,79481],{"class":259},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[144,79483,31479],{"class":154},[144,79485,79486],{"class":146,"line":32742},[144,79487,77905],{"class":154},[144,79489,79490],{"class":146,"line":32748},[144,79491,79399],{"class":154},[144,79493,79494,79496,79499],{"class":146,"line":32754},[144,79495,79404],{"class":154},[144,79497,79498],{"class":259},"'4001009'",[144,79500,31479],{"class":154},[144,79502,79503,79505,79508],{"class":146,"line":32760},[144,79504,79414],{"class":154},[144,79506,79507],{"class":259},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[144,79509,31479],{"class":154},[144,79511,79512,79514,79517],{"class":146,"line":32766},[144,79513,79424],{"class":154},[144,79515,79516],{"class":259},"'109.00'",[144,79518,31479],{"class":154},[144,79520,79521,79523,79526],{"class":146,"line":32786},[144,79522,79434],{"class":154},[144,79524,79525],{"class":259},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[144,79527,31479],{"class":154},[144,79529,79530],{"class":146,"line":32792},[144,79531,77905],{"class":154},[144,79533,79534],{"class":146,"line":32808},[144,79535,79399],{"class":154},[144,79537,79538,79540,79543],{"class":146,"line":32814},[144,79539,79404],{"class":154},[144,79541,79542],{"class":259},"'4001874'",[144,79544,31479],{"class":154},[144,79546,79547,79549,79552],{"class":146,"line":32828},[144,79548,79414],{"class":154},[144,79550,79551],{"class":259},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[144,79553,31479],{"class":154},[144,79555,79556,79558,79561],{"class":146,"line":32834},[144,79557,79424],{"class":154},[144,79559,79560],{"class":259},"'488.00'",[144,79562,31479],{"class":154},[144,79564,79565,79567,79570],{"class":146,"line":32849},[144,79566,79434],{"class":154},[144,79568,79569],{"class":259},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[144,79571,31479],{"class":154},[144,79573,79574],{"class":146,"line":32855},[144,79575,77905],{"class":154},[144,79577,79578],{"class":146,"line":32864},[144,79579,79399],{"class":154},[144,79581,79582,79584,79587],{"class":146,"line":32870},[144,79583,79404],{"class":154},[144,79585,79586],{"class":259},"'4001649'",[144,79588,31479],{"class":154},[144,79590,79591,79593,79596],{"class":146,"line":32879},[144,79592,79414],{"class":154},[144,79594,79595],{"class":259},"'大师监制龙泉青瓷茶叶罐'",[144,79597,31479],{"class":154},[144,79599,79600,79602,79605],{"class":146,"line":32885},[144,79601,79424],{"class":154},[144,79603,79604],{"class":259},"'139.00'",[144,79606,31479],{"class":154},[144,79608,79609,79611,79614],{"class":146,"line":32891},[144,79610,79434],{"class":154},[144,79612,79613],{"class":259},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[144,79615,31479],{"class":154},[144,79617,79618],{"class":146,"line":32900},[144,79619,77905],{"class":154},[144,79621,79622],{"class":146,"line":32906},[144,79623,79399],{"class":154},[144,79625,79626,79628,79631],{"class":146,"line":32917},[144,79627,79404],{"class":154},[144,79629,79630],{"class":259},"'3997185'",[144,79632,31479],{"class":154},[144,79634,79635,79637,79640],{"class":146,"line":32923},[144,79636,79414],{"class":154},[144,79638,79639],{"class":259},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[144,79641,31479],{"class":154},[144,79643,79644,79646,79649],{"class":146,"line":32942},[144,79645,79424],{"class":154},[144,79647,79648],{"class":259},"'108.00'",[144,79650,31479],{"class":154},[144,79652,79653,79655,79658],{"class":146,"line":32948},[144,79654,79434],{"class":154},[144,79656,79657],{"class":259},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[144,79659,31479],{"class":154},[144,79661,79662],{"class":146,"line":32959},[144,79663,77905],{"class":154},[144,79665,79666],{"class":146,"line":32965},[144,79667,79399],{"class":154},[144,79669,79670,79672,79675],{"class":146,"line":32985},[144,79671,79404],{"class":154},[144,79673,79674],{"class":259},"'3997403'",[144,79676,31479],{"class":154},[144,79678,79679,79681,79684],{"class":146,"line":33001},[144,79680,79414],{"class":154},[144,79682,79683],{"class":259},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[144,79685,31479],{"class":154},[144,79687,79688,79690,79693],{"class":146,"line":33007},[144,79689,79424],{"class":154},[144,79691,79692],{"class":259},"'100.00'",[144,79694,31479],{"class":154},[144,79696,79697,79699,79702],{"class":146,"line":33021},[144,79698,79434],{"class":154},[144,79700,79701],{"class":259},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[144,79703,31479],{"class":154},[144,79705,79706],{"class":146,"line":33027},[144,79707,77905],{"class":154},[144,79709,79710],{"class":146,"line":33033},[144,79711,79399],{"class":154},[144,79713,79714,79716,79719],{"class":146,"line":33044},[144,79715,79404],{"class":154},[144,79717,79718],{"class":259},"'3998274'",[144,79720,31479],{"class":154},[144,79722,79723,79725,79728],{"class":146,"line":33050},[144,79724,79414],{"class":154},[144,79726,79727],{"class":259},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[144,79729,31479],{"class":154},[144,79731,79732,79734,79736],{"class":146,"line":33056},[144,79733,79424],{"class":154},[144,79735,79604],{"class":259},[144,79737,31479],{"class":154},[144,79739,79740,79742,79745],{"class":146,"line":33066},[144,79741,79434],{"class":154},[144,79743,79744],{"class":259},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[144,79746,31479],{"class":154},[144,79748,79749],{"class":146,"line":33072},[144,79750,77905],{"class":154},[144,79752,79753],{"class":146,"line":33083},[144,79754,53122],{"class":154},[144,79756,79757],{"class":146,"line":33089},[144,79758,2430],{"emptyLinePlaceholder":72},[144,79760,79761],{"class":146,"line":33099},[144,79762,79763],{"class":213},"    \u002F\u002F 1.渲染函数\n",[144,79765,79766,79768,79770,79772,79774],{"class":146,"line":33104},[144,79767,70097],{"class":150},[144,79769,70100],{"class":1993},[144,79771,155],{"class":154},[144,79773,3910],{"class":5247},[144,79775,12473],{"class":154},[144,79777,79778],{"class":146,"line":33110},[144,79779,79780],{"class":213},"      \u002F\u002F 声明空字符串\n",[144,79782,79783,79786,79789,79791],{"class":146,"line":33159},[144,79784,79785],{"class":150},"      let",[144,79787,79788],{"class":154}," str ",[144,79790,200],{"class":150},[144,79792,70117],{"class":259},[144,79794,79795],{"class":146,"line":33206},[144,79796,70122],{"class":213},[144,79798,79799,79801,79804,79806,79809,79812],{"class":146,"line":33211},[144,79800,58020],{"class":154},[144,79802,79803],{"class":1993},"forEach",[144,79805,155],{"class":154},[144,79807,79808],{"class":5247},"item",[144,79810,79811],{"class":150}," =>",[144,79813,15603],{"class":154},[144,79815,79816,79818,79821,79824,79826,79829,79831,79834,79837,79839],{"class":146,"line":33217},[144,79817,61283],{"class":150},[144,79819,79820],{"class":154}," { ",[144,79822,79823],{"class":203},"name",[144,79825,12466],{"class":154},[144,79827,79828],{"class":203},"price",[144,79830,12466],{"class":154},[144,79832,79833],{"class":203},"picture",[144,79835,79836],{"class":154}," } ",[144,79838,200],{"class":150},[144,79840,79841],{"class":154}," item\n",[144,79843,79844,79847,79849],{"class":146,"line":33236},[144,79845,79846],{"class":154},"        str ",[144,79848,9508],{"class":150},[144,79850,70181],{"class":259},[144,79852,79853],{"class":146,"line":33242},[144,79854,79855],{"class":259},"          \u003Cdiv class=\"item\">\n",[144,79857,79858,79861,79863],{"class":146,"line":33262},[144,79859,79860],{"class":259},"            \u003Cimg src=\"${",[144,79862,79833],{"class":154},[144,79864,79865],{"class":259},"}\" alt=\"\">\n",[144,79867,79868,79871,79873],{"class":146,"line":33268},[144,79869,79870],{"class":259},"            \u003Cp class=\"name\">${",[144,79872,79823],{"class":154},[144,79874,79875],{"class":259},"}\u003C\u002Fp>\n",[144,79877,79878,79881,79883],{"class":146,"line":33274},[144,79879,79880],{"class":259},"            \u003Cp class=\"price\">${",[144,79882,79828],{"class":154},[144,79884,79875],{"class":259},[144,79886,79887],{"class":146,"line":33284},[144,79888,79889],{"class":259},"          \u003C\u002Fdiv>\n",[144,79891,79892],{"class":146,"line":33289},[144,79893,79894],{"class":259},"        `\n",[144,79896,79897],{"class":146,"line":33295},[144,79898,64828],{"class":154},[144,79900,79901],{"class":146,"line":33311},[144,79902,79903],{"class":213},"      \u002F\u002F 追加给List\n",[144,79905,79906,79908,79910,79912,79915,79917,79919],{"class":146,"line":33356},[144,79907,55784],{"class":154},[144,79909,54412],{"class":1993},[144,79911,155],{"class":154},[144,79913,79914],{"class":259},"'.list'",[144,79916,74262],{"class":154},[144,79918,200],{"class":150},[144,79920,73998],{"class":154},[144,79922,79923],{"class":146,"line":33362},[144,79924,2217],{"class":154},[144,79926,79927],{"class":146,"line":33368},[144,79928,79929],{"class":213},"    \u002F\u002F 页面一打开就需要渲染\n",[144,79931,79932,79935],{"class":146,"line":33374},[144,79933,79934],{"class":1993},"    render",[144,79936,79937],{"class":154},"(goodsList)\n",[144,79939,79940],{"class":146,"line":33385},[144,79941,79942],{"class":213},"    \u002F\u002F 2.过滤筛选\n",[144,79944,79945,79947,79949,79951,79954,79956,79958,79960,79962,79964,79966,79968],{"class":146,"line":33391},[144,79946,52420],{"class":154},[144,79948,54412],{"class":1993},[144,79950,155],{"class":154},[144,79952,79953],{"class":259},"'.filter'",[144,79955,30839],{"class":154},[144,79957,57826],{"class":1993},[144,79959,155],{"class":154},[144,79961,57831],{"class":259},[144,79963,12466],{"class":154},[144,79965,229],{"class":5247},[144,79967,79811],{"class":150},[144,79969,15603],{"class":154},[144,79971,79972],{"class":146,"line":33397},[144,79973,79974],{"class":213},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[144,79976,79977,79979,79981,79984,79986,79988,79990,79992],{"class":146,"line":33403},[144,79978,58241],{"class":150},[144,79980,79820],{"class":154},[144,79982,79983],{"class":203},"tagName",[144,79985,12466],{"class":154},[144,79987,31550],{"class":203},[144,79989,79836],{"class":154},[144,79991,200],{"class":150},[144,79993,79994],{"class":154}," e.target\n",[144,79996,79997],{"class":146,"line":33421},[144,79998,79999],{"class":213},"      \u002F\u002F 判断\n",[144,80001,80002,80004,80006,80008,80010],{"class":146,"line":33435},[144,80003,54493],{"class":150},[144,80005,67047],{"class":154},[144,80007,54499],{"class":150},[144,80009,68269],{"class":259},[144,80011,12473],{"class":154},[144,80013,80014],{"class":146,"line":33444},[144,80015,80016],{"class":213},"        \u002F\u002F console.log(11)\n",[144,80018,80019],{"class":146,"line":33453},[144,80020,80021],{"class":213},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[144,80023,80024],{"class":146,"line":33462},[144,80025,80026],{"class":213},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[144,80028,80029,80031,80033,80035],{"class":146,"line":33471},[144,80030,51843],{"class":150},[144,80032,51846],{"class":154},[144,80034,200],{"class":150},[144,80036,80037],{"class":154}," goodsList\n",[144,80039,80040,80042,80045,80047,80050],{"class":146,"line":33477},[144,80041,2527],{"class":150},[144,80043,80044],{"class":154}," (dataset.index ",[144,80046,54499],{"class":150},[144,80048,80049],{"class":259}," '1'",[144,80051,12473],{"class":154},[144,80053,80054,80057,80059,80062,80065,80067,80069,80071,80074,80076,80078,80081,80083,80085,80087],{"class":146,"line":33483},[144,80055,80056],{"class":154},"          arr ",[144,80058,200],{"class":150},[144,80060,80061],{"class":154}," goodsList.",[144,80063,80064],{"class":1993},"filter",[144,80066,155],{"class":154},[144,80068,79808],{"class":5247},[144,80070,79811],{"class":150},[144,80072,80073],{"class":154}," item.price ",[144,80075,1740],{"class":150},[144,80077,4123],{"class":203},[144,80079,80080],{"class":150}," &&",[144,80082,80073],{"class":154},[144,80084,1618],{"class":150},[144,80086,5785],{"class":203},[144,80088,161],{"class":154},[144,80090,80091,80094,80096,80098,80100,80102,80105],{"class":146,"line":33491},[144,80092,80093],{"class":154},"        } ",[144,80095,1731],{"class":150},[144,80097,1734],{"class":150},[144,80099,80044],{"class":154},[144,80101,54499],{"class":150},[144,80103,80104],{"class":259}," '2'",[144,80106,12473],{"class":154},[144,80108,80109,80111,80113,80115,80117,80119,80121,80123,80125,80127,80129,80131,80133,80135,80138],{"class":146,"line":33496},[144,80110,80056],{"class":154},[144,80112,200],{"class":150},[144,80114,80061],{"class":154},[144,80116,80064],{"class":1993},[144,80118,155],{"class":154},[144,80120,79808],{"class":5247},[144,80122,79811],{"class":150},[144,80124,80073],{"class":154},[144,80126,1740],{"class":150},[144,80128,5785],{"class":203},[144,80130,80080],{"class":150},[144,80132,80073],{"class":154},[144,80134,1618],{"class":150},[144,80136,80137],{"class":203}," 300",[144,80139,161],{"class":154},[144,80141,80142,80144,80146,80148,80150,80152,80155],{"class":146,"line":33502},[144,80143,80093],{"class":154},[144,80145,1731],{"class":150},[144,80147,1734],{"class":150},[144,80149,80044],{"class":154},[144,80151,54499],{"class":150},[144,80153,80154],{"class":259}," '3'",[144,80156,12473],{"class":154},[144,80158,80159,80161,80163,80165,80167,80169,80171,80173,80175,80177,80179],{"class":146,"line":33513},[144,80160,80056],{"class":154},[144,80162,200],{"class":150},[144,80164,80061],{"class":154},[144,80166,80064],{"class":1993},[144,80168,155],{"class":154},[144,80170,79808],{"class":5247},[144,80172,79811],{"class":150},[144,80174,80073],{"class":154},[144,80176,1740],{"class":150},[144,80178,80137],{"class":203},[144,80180,161],{"class":154},[144,80182,80183],{"class":146,"line":33519},[144,80184,2559],{"class":154},[144,80186,80187],{"class":146,"line":33539},[144,80188,80189],{"class":213},"        \u002F\u002F 渲染函数\n",[144,80191,80192,80194],{"class":146,"line":33545},[144,80193,70421],{"class":1993},[144,80195,52425],{"class":154},[144,80197,80198],{"class":146,"line":33551},[144,80199,52411],{"class":154},[144,80201,80202],{"class":146,"line":33557},[144,80203,2430],{"emptyLinePlaceholder":72},[144,80205,80206],{"class":146,"line":33574},[144,80207,33474],{"class":154},[144,80209,80210,80212,80214],{"class":146,"line":33580},[144,80211,52430],{"class":154},[144,80213,51826],{"class":51313},[144,80215,51320],{"class":154},[144,80217,80218,80220,80222],{"class":146,"line":33586},[144,80219,51798],{"class":154},[144,80221,51813],{"class":51313},[144,80223,51320],{"class":154},[144,80225,80226],{"class":146,"line":33592},[144,80227,2430],{"emptyLinePlaceholder":72},[144,80229,80230,80232,80234],{"class":146,"line":33598},[144,80231,51798],{"class":154},[144,80233,50648],{"class":51313},[144,80235,51320],{"class":154},[18,80237,80239],{"id":80238},"_410-深入了解对象","4.10 深入了解对象",[115,80241,80243],{"id":80242},"_4101-创建对象","4.10.1 创建对象",[14,80245,80246],{},[28,80247],{"alt":30,"src":80248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80250,80251],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[115,80253,80255],{"id":80254},"_4102-构造函数","4.10.2 构造函数",[14,80257,80258,80261],{},[304,80259,80260],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80263,80264,80267],{},[304,80265,80266],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[135,80269,80271],{"className":50646,"code":80270,"language":50648,"meta":30,"style":30},"\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",[141,80272,80273,80281,80286,80307,80320,80332,80344,80348,80353,80380,80385,80412],{"__ignoreMap":30},[144,80274,80275,80277,80279],{"class":146,"line":147},[144,80276,1065],{"class":154},[144,80278,51826],{"class":51313},[144,80280,51320],{"class":154},[144,80282,80283],{"class":146,"line":66},[144,80284,80285],{"class":213},"\u002F\u002F例：\n",[144,80287,80288,80290,80293,80295,80297,80299,80301,80303,80305],{"class":146,"line":1210},[144,80289,54462],{"class":150},[144,80291,80292],{"class":1993}," Pig",[144,80294,155],{"class":154},[144,80296,79823],{"class":5247},[144,80298,533],{"class":154},[144,80300,70234],{"class":5247},[144,80302,533],{"class":154},[144,80304,70251],{"class":5247},[144,80306,12473],{"class":154},[144,80308,80309,80312,80315,80317],{"class":146,"line":1225},[144,80310,80311],{"class":203},"    this",[144,80313,80314],{"class":154},".name",[144,80316,200],{"class":150},[144,80318,80319],{"class":154},"name\n",[144,80321,80322,80324,80327,80329],{"class":146,"line":1231},[144,80323,80311],{"class":203},[144,80325,80326],{"class":154},".age",[144,80328,200],{"class":150},[144,80330,80331],{"class":154},"age\n",[144,80333,80334,80336,80339,80341],{"class":146,"line":1245},[144,80335,80311],{"class":203},[144,80337,80338],{"class":154},".gender",[144,80340,200],{"class":150},[144,80342,80343],{"class":154},"gender    \n",[144,80345,80346],{"class":146,"line":1251},[144,80347,1595],{"class":154},[144,80349,80350],{"class":146,"line":1342},[144,80351,80352],{"class":213},"\u002F\u002F创建佩奇对象\n",[144,80354,80355,80357,80360,80362,80364,80366,80369,80371,80373,80375,80378],{"class":146,"line":1348},[144,80356,6823],{"class":150},[144,80358,80359],{"class":203}," Peppa",[144,80361,11748],{"class":150},[144,80363,80292],{"class":1993},[144,80365,155],{"class":154},[144,80367,80368],{"class":259},"'佩奇'",[144,80370,533],{"class":154},[144,80372,499],{"class":203},[144,80374,533],{"class":154},[144,80376,80377],{"class":259},"'女'",[144,80379,161],{"class":154},[144,80381,80382],{"class":146,"line":1360},[144,80383,80384],{"class":213},"\u002F\u002F创建乔治对象\n",[144,80386,80387,80389,80392,80394,80396,80398,80401,80403,80405,80407,80410],{"class":146,"line":1642},[144,80388,6823],{"class":150},[144,80390,80391],{"class":203}," George",[144,80393,11748],{"class":150},[144,80395,80292],{"class":1993},[144,80397,155],{"class":154},[144,80399,80400],{"class":259},"'乔治'",[144,80402,533],{"class":154},[144,80404,226],{"class":203},[144,80406,533],{"class":154},[144,80408,80409],{"class":259},"'男'",[144,80411,161],{"class":154},[144,80413,80414,80416,80418],{"class":146,"line":1647},[144,80415,51798],{"class":154},[144,80417,51826],{"class":51313},[144,80419,51320],{"class":154},[14,80421,80422],{},[28,80423],{"alt":30,"src":80424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,80426,80427],{},[28,80428],{"alt":30,"src":80429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,80431,80432],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,80434,80435],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,80437,80438],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,80440,80441],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,80443,80444],{},"这里用等号是因为：对象.属性=值",[14,80446,80447],{},"①利用对象字面量创建对象",[14,80449,80450],{},"const o={",[14,80452,80453],{},"name:'pink'",[14,80455,80456],{},"} ②利用new Object创建对象",[14,80458,80459],{},"const o=new Object({name:'pink'})",[14,80461,80462],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,80464,80465],{},"构造函数创建对象的执行过程：",[14,80467,80468],{},[28,80469],{"alt":30,"src":80470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[115,80472,80474],{"id":80473},"_4103-实例成员","4.10.3 实例成员",[14,80476,80477],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[98,80479,80480,80483,80486],{},[101,80481,80482],{},"实例对象的属性和方法即为实例成员",[101,80484,80485],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[101,80487,80488],{},"构造函数创建的实例对象彼此独立互不影响",[115,80490,80492],{"id":80491},"_4104-静态成员","4.10.4 静态成员",[14,80494,80495],{},[28,80496],{"alt":30,"src":80497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,80499,80500],{},"静态成员有Date.now() Math.PI Math.random()",[14,80502,80503],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,80505,80506],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,80508,80509],{},"function Pig(name) n {",[14,80511,80512],{},"this.name=name",[14,80514,1101],{},[14,80516,80517],{},"Pig.eyes=2",[14,80519,80520],{},"Pig.sayHai=function () { console.log(this) }",[14,80522,80523],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,80525,80526],{},"console.log(Pig.eyes) \u002F\u002F2",[14,80528,11363],{},[98,80530,80531,80534,80537,80540,80543],{},[101,80532,80533],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[101,80535,80536],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[101,80538,80539],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[101,80541,80542],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[101,80544,80545],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,80547,80548],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[115,80550,80552],{"id":80551},"_4105-内置构造函数","4.10.5 内置构造函数",[14,80554,80555],{},"内置构造函数包含：",[14,80557,80558],{},[28,80559],{"alt":30,"src":80560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,80562,80563],{},[28,80564],{"alt":30,"src":80565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,80567,80568],{},"这些基本数据类型，js对他们进行了包装",[51826,80570,80571],{},"\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",[22029,80573,80575],{"id":80574},"_41051-object","4.10.5.1 Object",[14,80577,80578],{},"Object 是内置的构造函数，用于创建普通对象",[14,80580,80581],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[135,80583,80585],{"className":50646,"code":80584,"language":50648,"meta":30,"style":30},"const user=new Object({name:'小明',age:15})\n",[141,80586,80587],{"__ignoreMap":30},[144,80588,80589],{"class":146,"line":147},[144,80590,80584],{"class":154},[14,80592,80593],{},"三个常用的静态方法：",[22941,80595,80597],{"id":80596},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,80599,80600],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,80602,80603],{},[28,80604],{"alt":30,"src":80605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,80607,80608],{},[28,80609],{"alt":30,"src":80610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[135,80612,80614],{"className":53080,"code":80613,"language":53082,"meta":30,"style":30},"\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",[141,80615,80616,80624,80632,80637,80642,80647,80652,80657,80662,80670],{"__ignoreMap":30},[144,80617,80618,80620,80622],{"class":146,"line":147},[144,80619,1065],{"class":154},[144,80621,51813],{"class":51313},[144,80623,51320],{"class":154},[144,80625,80626,80628,80630],{"class":146,"line":66},[144,80627,52157],{"class":154},[144,80629,51826],{"class":51313},[144,80631,51320],{"class":154},[144,80633,80634],{"class":146,"line":1210},[144,80635,80636],{"class":154},"    const o = { name: 'pink', age: 6 }\n",[144,80638,80639],{"class":146,"line":1225},[144,80640,80641],{"class":154},"    \u002F\u002F 获得所有属性名\n",[144,80643,80644],{"class":146,"line":1231},[144,80645,80646],{"class":154},"    const arr = Object.keys(o)\n",[144,80648,80649],{"class":146,"line":1245},[144,80650,80651],{"class":154},"    console.log(arr)\n",[144,80653,80654],{"class":146,"line":1251},[144,80655,80656],{"class":154},"    \u002F\u002F 获得所有属性值\n",[144,80658,80659],{"class":146,"line":1342},[144,80660,80661],{"class":154},"    console.log(Object.values(o))\n",[144,80663,80664,80666,80668],{"class":146,"line":1348},[144,80665,52430],{"class":154},[144,80667,51826],{"class":51313},[144,80669,51320],{"class":154},[144,80671,80672,80674,80676],{"class":146,"line":1360},[144,80673,51798],{"class":154},[144,80675,51813],{"class":51313},[144,80677,51320],{"class":154},[22941,80679,80681],{"id":80680},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,80683,80684],{},"Object.assign(oo,o)",[14,80686,80687],{},"后的东西添加给前 是追加",[14,80689,80690],{},[28,80691],{"alt":30,"src":80692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,80694,80695],{},[28,80696],{"alt":30,"src":80697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[135,80699,80701],{"className":53080,"code":80700,"language":53082,"meta":30,"style":30},"\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",[141,80702,80703,80711,80719,80723,80727,80731,80735,80739,80743,80748,80753,80758,80763,80768,80776],{"__ignoreMap":30},[144,80704,80705,80707,80709],{"class":146,"line":147},[144,80706,1065],{"class":154},[144,80708,51813],{"class":51313},[144,80710,51320],{"class":154},[144,80712,80713,80715,80717],{"class":146,"line":66},[144,80714,52157],{"class":154},[144,80716,51826],{"class":51313},[144,80718,51320],{"class":154},[144,80720,80721],{"class":146,"line":1210},[144,80722,80636],{"class":154},[144,80724,80725],{"class":146,"line":1225},[144,80726,80641],{"class":154},[144,80728,80729],{"class":146,"line":1231},[144,80730,80646],{"class":154},[144,80732,80733],{"class":146,"line":1245},[144,80734,80651],{"class":154},[144,80736,80737],{"class":146,"line":1251},[144,80738,80656],{"class":154},[144,80740,80741],{"class":146,"line":1342},[144,80742,80661],{"class":154},[144,80744,80745],{"class":146,"line":1348},[144,80746,80747],{"class":154},"    const oo = {}\n",[144,80749,80750],{"class":146,"line":1360},[144,80751,80752],{"class":154},"    Object.assign(oo, o)\n",[144,80754,80755],{"class":146,"line":1642},[144,80756,80757],{"class":154},"    console.log(oo)\n",[144,80759,80760],{"class":146,"line":1647},[144,80761,80762],{"class":154},"    Object.assign(o, { gender: '女' })\n",[144,80764,80765],{"class":146,"line":1653},[144,80766,80767],{"class":154},"    console.log(o)\n",[144,80769,80770,80772,80774],{"class":146,"line":1658},[144,80771,52430],{"class":154},[144,80773,51826],{"class":51313},[144,80775,51320],{"class":154},[144,80777,80778,80780,80782],{"class":146,"line":1672},[144,80779,51798],{"class":154},[144,80781,51813],{"class":51313},[144,80783,51320],{"class":154},[14,80785,80786],{},[28,80787],{"alt":30,"src":80788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22029,80790,80792],{"id":80791},"_41052-array","4.10.5.2 Array",[14,80794,80795],{},"Array 是内置的构造函数，用于创建数组",[14,80797,80798],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[135,80800,80802],{"className":50646,"code":80801,"language":50648,"meta":30,"style":30},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[141,80803,80804,80809],{"__ignoreMap":30},[144,80805,80806],{"class":146,"line":147},[144,80807,80808],{"class":154},"const arr=new Array(3,5)\n",[144,80810,80811],{"class":146,"line":66},[144,80812,80813],{"class":154},"console.log(arr)  \u002F\u002F[3,5]\n",[14,80815,80816],{},"Array的实例方法，这个方法是实例成员",[14,80818,80819],{},[28,80820],{"alt":30,"src":80821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22941,80823,80825],{"id":80824},"_410521-reduce","4.10.5.2.1 reduce",[14,80827,80828],{},[28,80829],{"alt":30,"src":80830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[135,80832,80834],{"className":53080,"code":80833,"language":53082,"meta":30,"style":30},"\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",[141,80835,80836,80844,80852,80857,80862,80867,80872,80876,80881,80886,80891,80895,80900,80905,80909,80914,80919,80924,80932],{"__ignoreMap":30},[144,80837,80838,80840,80842],{"class":146,"line":147},[144,80839,1065],{"class":154},[144,80841,51813],{"class":51313},[144,80843,51320],{"class":154},[144,80845,80846,80848,80850],{"class":146,"line":66},[144,80847,52157],{"class":154},[144,80849,51826],{"class":51313},[144,80851,51320],{"class":154},[144,80853,80854],{"class":146,"line":1210},[144,80855,80856],{"class":154},"    const arr = [1, 5, 8]\n",[144,80858,80859],{"class":146,"line":1225},[144,80860,80861],{"class":154},"    \u002F\u002F 1.没有初始值\n",[144,80863,80864],{"class":146,"line":1231},[144,80865,80866],{"class":154},"    const total = arr.reduce(function (prev, current) {\n",[144,80868,80869],{"class":146,"line":1245},[144,80870,80871],{"class":154},"      return prev + current\n",[144,80873,80874],{"class":146,"line":1251},[144,80875,33474],{"class":154},[144,80877,80878],{"class":146,"line":1342},[144,80879,80880],{"class":154},"    console.log(total)   \u002F\u002F14\n",[144,80882,80883],{"class":146,"line":1348},[144,80884,80885],{"class":154},"    \u002F\u002F 2.有初始值\n",[144,80887,80888],{"class":146,"line":1360},[144,80889,80890],{"class":154},"    const total1 = arr.reduce(function (prev, current) {\n",[144,80892,80893],{"class":146,"line":1642},[144,80894,80871],{"class":154},[144,80896,80897],{"class":146,"line":1647},[144,80898,80899],{"class":154},"    }, 10)\n",[144,80901,80902],{"class":146,"line":1653},[144,80903,80904],{"class":154},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[144,80906,80907],{"class":146,"line":1658},[144,80908,2430],{"emptyLinePlaceholder":72},[144,80910,80911],{"class":146,"line":1672},[144,80912,80913],{"class":154},"    \u002F\u002F 3.箭头函数写法\n",[144,80915,80916],{"class":146,"line":1677},[144,80917,80918],{"class":154},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[144,80920,80921],{"class":146,"line":1683},[144,80922,80923],{"class":154},"    console.log(total2)   \u002F\u002F24\n",[144,80925,80926,80928,80930],{"class":146,"line":1704},[144,80927,52430],{"class":154},[144,80929,51826],{"class":51313},[144,80931,51320],{"class":154},[144,80933,80934,80936,80938],{"class":146,"line":1709},[144,80935,51798],{"class":154},[144,80937,51813],{"class":51313},[144,80939,51320],{"class":154},[14,80941,80942],{},"执行过程：",[98,80944,80945,80948,80951],{},[101,80946,80947],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[101,80949,80950],{},"每一次循环，把返回值给作为下一次循环的上一次值",[101,80952,80953],{},"如果有起始值，则起始值作为上一次值",[135,80955,80957],{"className":53080,"code":80956,"language":53082,"meta":30,"style":30},"\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",[141,80958,80959,80967,80975,80979,80983,80987,80991,80995,80999,81004,81009,81014,81019,81024,81028,81032,81036,81040,81044,81048,81053,81057,81062,81066,81071,81076,81080,81084,81088,81096],{"__ignoreMap":30},[144,80960,80961,80963,80965],{"class":146,"line":147},[144,80962,1065],{"class":154},[144,80964,51813],{"class":51313},[144,80966,51320],{"class":154},[144,80968,80969,80971,80973],{"class":146,"line":66},[144,80970,52157],{"class":154},[144,80972,51826],{"class":51313},[144,80974,51320],{"class":154},[144,80976,80977],{"class":146,"line":1210},[144,80978,80856],{"class":154},[144,80980,80981],{"class":146,"line":1225},[144,80982,80861],{"class":154},[144,80984,80985],{"class":146,"line":1231},[144,80986,80866],{"class":154},[144,80988,80989],{"class":146,"line":1245},[144,80990,80871],{"class":154},[144,80992,80993],{"class":146,"line":1251},[144,80994,33474],{"class":154},[144,80996,80997],{"class":146,"line":1342},[144,80998,80880],{"class":154},[144,81000,81001],{"class":146,"line":1348},[144,81002,81003],{"class":154},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[144,81005,81006],{"class":146,"line":1360},[144,81007,81008],{"class":154},"    \u002F\u002F     1              5                    6\n",[144,81010,81011],{"class":146,"line":1642},[144,81012,81013],{"class":154},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[144,81015,81016],{"class":146,"line":1647},[144,81017,81018],{"class":154},"    \u002F\u002F     6              8                    14\n",[144,81020,81021],{"class":146,"line":1653},[144,81022,81023],{"class":154},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[144,81025,81026],{"class":146,"line":1658},[144,81027,80885],{"class":154},[144,81029,81030],{"class":146,"line":1672},[144,81031,80890],{"class":154},[144,81033,81034],{"class":146,"line":1677},[144,81035,80871],{"class":154},[144,81037,81038],{"class":146,"line":1683},[144,81039,80899],{"class":154},[144,81041,81042],{"class":146,"line":1704},[144,81043,80904],{"class":154},[144,81045,81046],{"class":146,"line":1709},[144,81047,81003],{"class":154},[144,81049,81050],{"class":146,"line":1723},[144,81051,81052],{"class":154},"    \u002F\u002F     10             1                     11\n",[144,81054,81055],{"class":146,"line":1728},[144,81056,81013],{"class":154},[144,81058,81059],{"class":146,"line":1757},[144,81060,81061],{"class":154},"    \u002F\u002F     11             5                    16\n",[144,81063,81064],{"class":146,"line":1762},[144,81065,81013],{"class":154},[144,81067,81068],{"class":146,"line":1779},[144,81069,81070],{"class":154},"    \u002F\u002F     16             8                    24\n",[144,81072,81073],{"class":146,"line":1784},[144,81074,81075],{"class":154},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[144,81077,81078],{"class":146,"line":1789},[144,81079,80913],{"class":154},[144,81081,81082],{"class":146,"line":1794},[144,81083,80918],{"class":154},[144,81085,81086],{"class":146,"line":1808},[144,81087,80923],{"class":154},[144,81089,81090,81092,81094],{"class":146,"line":1813},[144,81091,52430],{"class":154},[144,81093,51826],{"class":51313},[144,81095,51320],{"class":154},[144,81097,81098,81100,81102],{"class":146,"line":2607},[144,81099,51798],{"class":154},[144,81101,51813],{"class":51313},[144,81103,51320],{"class":154},[22941,81105,81107],{"id":81106},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81109,81110],{},[28,81111],{"alt":30,"src":81112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[135,81114,81116],{"className":53080,"code":81115,"language":53082,"meta":30,"style":30},"\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",[141,81117,81118,81126,81134,81139,81144,81149,81154,81158,81163,81168,81173,81178,81183,81188,81192,81197,81201,81206,81214],{"__ignoreMap":30},[144,81119,81120,81122,81124],{"class":146,"line":147},[144,81121,1065],{"class":154},[144,81123,51813],{"class":51313},[144,81125,51320],{"class":154},[144,81127,81128,81130,81132],{"class":146,"line":66},[144,81129,52157],{"class":154},[144,81131,51826],{"class":51313},[144,81133,51320],{"class":154},[144,81135,81136],{"class":146,"line":1210},[144,81137,81138],{"class":154},"    const arr = [\n",[144,81140,81141],{"class":146,"line":1225},[144,81142,81143],{"class":154},"      { name: '张三', salary: 10000 },\n",[144,81145,81146],{"class":146,"line":1231},[144,81147,81148],{"class":154},"      { name: '李四', salary: 10000 },\n",[144,81150,81151],{"class":146,"line":1245},[144,81152,81153],{"class":154},"      { name: '王五', salary: 10000 }\n",[144,81155,81156],{"class":146,"line":1251},[144,81157,53122],{"class":154},[144,81159,81160],{"class":146,"line":1342},[144,81161,81162],{"class":154},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[144,81164,81165],{"class":146,"line":1348},[144,81166,81167],{"class":154},"    \u002F\u002F prev是累计值\n",[144,81169,81170],{"class":146,"line":1360},[144,81171,81172],{"class":154},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[144,81174,81175],{"class":146,"line":1642},[144,81176,81177],{"class":154},"    console.log(total)\n",[144,81179,81180],{"class":146,"line":1647},[144,81181,81182],{"class":154},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[144,81184,81185],{"class":146,"line":1653},[144,81186,81187],{"class":154},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[144,81189,81190],{"class":146,"line":1658},[144,81191,81182],{"class":154},[144,81193,81194],{"class":146,"line":1672},[144,81195,81196],{"class":154},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[144,81198,81199],{"class":146,"line":1677},[144,81200,81182],{"class":154},[144,81202,81203],{"class":146,"line":1683},[144,81204,81205],{"class":154},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[144,81207,81208,81210,81212],{"class":146,"line":1704},[144,81209,52430],{"class":154},[144,81211,51826],{"class":51313},[144,81213,51320],{"class":154},[144,81215,81216,81218,81220],{"class":146,"line":1709},[144,81217,51798],{"class":154},[144,81219,51813],{"class":51313},[144,81221,51320],{"class":154},[22941,81223,81225],{"id":81224},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81227,81228],{},[28,81229],{"alt":30,"src":81230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81232,81233],{},[28,81234],{"alt":30,"src":81235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[98,81237,81238],{},[101,81239,81240],{},"find()",[14,81242,81243],{},"循环查找，找到第一个就ok",[14,81245,81246],{},[393,81247,81250],{"href":81248,"rel":81249},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23897],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[135,81252,81254],{"className":50646,"code":81253,"language":50648,"meta":30,"style":30},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[141,81255,81256,81261,81266],{"__ignoreMap":30},[144,81257,81258],{"class":146,"line":147},[144,81259,81260],{"class":154},"const array1 = [5, 12, 8, 130, 44]\n",[144,81262,81263],{"class":146,"line":66},[144,81264,81265],{"class":154},"const found = array1.find((element) => element > 10)\n",[144,81267,81268],{"class":146,"line":1210},[144,81269,81270],{"class":154},"console.log(found)  \u002F\u002F12\n",[14,81272,81273,81275,81276,81281,81282,81285,81286,81288,81289,81294,81295,81297,81298,81300,81301,81303,81304],{},[141,81274,81240],{}," 方法是一个",[393,81277,81280],{"href":81278,"rel":81279},"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",[23897],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[141,81283,81284],{},"callbackFn"," 函数，直到 ",[141,81287,81284],{}," 返回一个",[393,81290,81293],{"href":81291,"rel":81292},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23897],"真值","。然后 ",[141,81296,81240],{}," 返回该元素并停止迭代数组。如果 ",[141,81299,81284],{}," 从未返回真值，则 ",[141,81302,81240],{}," 返回 ",[141,81305,81306],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[135,81308,81310],{"className":53080,"code":81309,"language":53082,"meta":30,"style":30},"\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",[141,81311,81312,81320,81328,81333,81338,81343,81347,81352,81357,81361,81366,81371,81375,81379,81384,81389,81393,81397,81402,81407,81412,81417,81422,81426,81431,81436,81441,81446,81450,81455,81463],{"__ignoreMap":30},[144,81313,81314,81316,81318],{"class":146,"line":147},[144,81315,1065],{"class":154},[144,81317,51813],{"class":51313},[144,81319,51320],{"class":154},[144,81321,81322,81324,81326],{"class":146,"line":66},[144,81323,52157],{"class":154},[144,81325,51826],{"class":51313},[144,81327,51320],{"class":154},[144,81329,81330],{"class":146,"line":1210},[144,81331,81332],{"class":154},"    const arr = ['red', 'blue', 'green']\n",[144,81334,81335],{"class":146,"line":1225},[144,81336,81337],{"class":154},"    const found = arr.find(item => item === 'pink')\n",[144,81339,81340],{"class":146,"line":1231},[144,81341,81342],{"class":154},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[144,81344,81345],{"class":146,"line":1245},[144,81346,2430],{"emptyLinePlaceholder":72},[144,81348,81349],{"class":146,"line":1251},[144,81350,81351],{"class":154},"    \u002F\u002F 使用场景，用于查找数据\n",[144,81353,81354],{"class":146,"line":1342},[144,81355,81356],{"class":154},"    const arr1 = [\n",[144,81358,81359],{"class":146,"line":1348},[144,81360,79399],{"class":154},[144,81362,81363],{"class":146,"line":1360},[144,81364,81365],{"class":154},"        name: '小米',\n",[144,81367,81368],{"class":146,"line":1642},[144,81369,81370],{"class":154},"        price: 1999\n",[144,81372,81373],{"class":146,"line":1647},[144,81374,77905],{"class":154},[144,81376,81377],{"class":146,"line":1653},[144,81378,79399],{"class":154},[144,81380,81381],{"class":146,"line":1658},[144,81382,81383],{"class":154},"        name: '华为',\n",[144,81385,81386],{"class":146,"line":1672},[144,81387,81388],{"class":154},"        price: 3999\n",[144,81390,81391],{"class":146,"line":1677},[144,81392,52411],{"class":154},[144,81394,81395],{"class":146,"line":1683},[144,81396,53122],{"class":154},[144,81398,81399],{"class":146,"line":1704},[144,81400,81401],{"class":154},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[144,81403,81404],{"class":146,"line":1709},[144,81405,81406],{"class":154},"    \u002F\u002F const found1 = arr1.find(item => {\n",[144,81408,81409],{"class":146,"line":1723},[144,81410,81411],{"class":154},"    \u002F\u002F   if (item.name === '小米') {\n",[144,81413,81414],{"class":146,"line":1728},[144,81415,81416],{"class":154},"    \u002F\u002F     return item\n",[144,81418,81419],{"class":146,"line":1757},[144,81420,81421],{"class":154},"    \u002F\u002F   }\n",[144,81423,81424],{"class":146,"line":1762},[144,81425,63303],{"class":154},[144,81427,81428],{"class":146,"line":1779},[144,81429,81430],{"class":154},"    \u002F\u002F 另一种写法\n",[144,81432,81433],{"class":146,"line":1784},[144,81434,81435],{"class":154},"    const found1 = arr1.find(item => {\n",[144,81437,81438],{"class":146,"line":1789},[144,81439,81440],{"class":154},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[144,81442,81443],{"class":146,"line":1794},[144,81444,81445],{"class":154},"      return item.name = '小米'\n",[144,81447,81448],{"class":146,"line":1808},[144,81449,33474],{"class":154},[144,81451,81452],{"class":146,"line":1813},[144,81453,81454],{"class":154},"    console.log(found1)\n",[144,81456,81457,81459,81461],{"class":146,"line":2607},[144,81458,52430],{"class":154},[144,81460,51826],{"class":51313},[144,81462,51320],{"class":154},[144,81464,81465,81467,81469],{"class":146,"line":2621},[144,81466,51798],{"class":154},[144,81468,51813],{"class":51313},[144,81470,51320],{"class":154},[14,81472,81473],{},[28,81474],{"alt":30,"src":81475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,81477,81478],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[98,81480,81481],{"start":66},[101,81482,81483],{},"every()返回的是布尔值",[14,81485,81486],{},[393,81487,81490],{"href":81488,"rel":81489},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23897],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,81492,81493],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,81495,81496],{},"some是只有有一个就没问题",[14,81498,81499],{},"every是必须全是才行",[135,81501,81505],{"className":81502,"code":81503,"language":81504,"meta":30,"style":30},"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",[141,81506,81507,81523,81537,81541,81550],{"__ignoreMap":30},[144,81508,81509,81511,81514,81516,81518,81521],{"class":146,"line":147},[144,81510,54462],{"class":150},[144,81512,81513],{"class":154}," isBigEnough(element, ",[144,81515,74071],{"class":150},[144,81517,12466],{"class":154},[144,81519,81520],{"class":150},"array",[144,81522,12473],{"class":154},[144,81524,81525,81528,81531,81533,81535],{"class":146,"line":66},[144,81526,81527],{"class":150},"  return",[144,81529,81530],{"class":154}," element ",[144,81532,1740],{"class":150},[144,81534,2068],{"class":203},[144,81536,1321],{"class":154},[144,81538,81539],{"class":146,"line":1210},[144,81540,1595],{"class":154},[144,81542,81543,81546,81548],{"class":146,"line":1225},[144,81544,81545],{"class":154},"[12, 5, 8, 130, 44].every(isBigEnough); ",[144,81547,33342],{"class":150},[144,81549,54529],{"class":154},[144,81551,81552,81555,81557],{"class":146,"line":1231},[144,81553,81554],{"class":154},"[12, 54, 18, 130, 44].every(isBigEnough); ",[144,81556,33342],{"class":150},[144,81558,57953],{"class":154},[135,81560,81562],{"className":53080,"code":81561,"language":53082,"meta":30,"style":30},"\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",[141,81563,81564,81572,81580,81585,81589,81594,81599,81607],{"__ignoreMap":30},[144,81565,81566,81568,81570],{"class":146,"line":147},[144,81567,1065],{"class":154},[144,81569,51813],{"class":51313},[144,81571,51320],{"class":154},[144,81573,81574,81576,81578],{"class":146,"line":66},[144,81575,52157],{"class":154},[144,81577,51826],{"class":51313},[144,81579,51320],{"class":154},[144,81581,81582],{"class":146,"line":1210},[144,81583,81584],{"class":154},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[144,81586,81587],{"class":146,"line":1225},[144,81588,78335],{"class":154},[144,81590,81591],{"class":146,"line":1231},[144,81592,81593],{"class":154},"    const flag = arr.every(item => item >= 10)\n",[144,81595,81596],{"class":146,"line":1245},[144,81597,81598],{"class":154},"    console.log(flag)    \u002F\u002Ftrue\n",[144,81600,81601,81603,81605],{"class":146,"line":1251},[144,81602,52430],{"class":154},[144,81604,51826],{"class":51313},[144,81606,51320],{"class":154},[144,81608,81609,81611,81613],{"class":146,"line":1342},[144,81610,51798],{"class":154},[144,81612,51813],{"class":51313},[144,81614,51320],{"class":154},[135,81616,81618],{"className":53080,"code":81617,"language":53082,"meta":30,"style":30},"\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",[141,81619,81620,81628,81636,81640,81645,81650,81655,81663],{"__ignoreMap":30},[144,81621,81622,81624,81626],{"class":146,"line":147},[144,81623,1065],{"class":154},[144,81625,51813],{"class":51313},[144,81627,51320],{"class":154},[144,81629,81630,81632,81634],{"class":146,"line":66},[144,81631,52157],{"class":154},[144,81633,51826],{"class":51313},[144,81635,51320],{"class":154},[144,81637,81638],{"class":146,"line":1210},[144,81639,81584],{"class":154},[144,81641,81642],{"class":146,"line":1225},[144,81643,81644],{"class":154},"    const arr = [10, 0, 5]\n",[144,81646,81647],{"class":146,"line":1231},[144,81648,81649],{"class":154},"    const flag = arr.some(item => item >= 10)\n",[144,81651,81652],{"class":146,"line":1245},[144,81653,81654],{"class":154},"    console.log(flag)   \u002F\u002Ftrue\n",[144,81656,81657,81659,81661],{"class":146,"line":1251},[144,81658,52430],{"class":154},[144,81660,51826],{"class":51313},[144,81662,51320],{"class":154},[144,81664,81665,81667,81669],{"class":146,"line":1342},[144,81666,51798],{"class":154},[144,81668,51813],{"class":51313},[144,81670,51320],{"class":154},[22941,81672,81674],{"id":81673},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,81676,81677],{},[28,81678],{"alt":30,"src":81679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[135,81681,81683],{"className":50646,"code":81682,"language":50648,"meta":30,"style":30},"\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",[141,81684,81685,81695,81709,81713,81721,81735,81755,81767,81775,81782,81794,81806,81818,81830,81840,81850,81854,81862,81870,81874,81882,81894,81902,81924,81929,81934,81967,81975,81983,81987],{"__ignoreMap":30},[144,81686,81687,81689,81691,81693],{"class":146,"line":147},[144,81688,51310],{"class":154},[144,81690,51314],{"class":51313},[144,81692,51317],{"class":1993},[144,81694,51320],{"class":154},[144,81696,81697,81699,81701,81703,81705,81707],{"class":146,"line":66},[144,81698,1065],{"class":154},[144,81700,50648],{"class":51313},[144,81702,51329],{"class":1993},[144,81704,200],{"class":154},[144,81706,51334],{"class":259},[144,81708,51320],{"class":154},[144,81710,81711],{"class":146,"line":1210},[144,81712,2430],{"emptyLinePlaceholder":72},[144,81714,81715,81717,81719],{"class":146,"line":1225},[144,81716,1065],{"class":154},[144,81718,51347],{"class":51313},[144,81720,51320],{"class":154},[144,81722,81723,81725,81727,81729,81731,81733],{"class":146,"line":1231},[144,81724,52157],{"class":154},[144,81726,51357],{"class":51313},[144,81728,51360],{"class":1993},[144,81730,200],{"class":154},[144,81732,51365],{"class":259},[144,81734,51320],{"class":154},[144,81736,81737,81739,81741,81743,81745,81747,81749,81751,81753],{"class":146,"line":1245},[144,81738,52157],{"class":154},[144,81740,51357],{"class":51313},[144,81742,14951],{"class":1993},[144,81744,200],{"class":154},[144,81746,51404],{"class":259},[144,81748,51384],{"class":1993},[144,81750,200],{"class":154},[144,81752,51411],{"class":259},[144,81754,51320],{"class":154},[144,81756,81757,81759,81761,81763,81765],{"class":146,"line":1251},[144,81758,52157],{"class":154},[144,81760,51420],{"class":51313},[144,81762,51423],{"class":154},[144,81764,51420],{"class":51313},[144,81766,51320],{"class":154},[144,81768,81769,81771,81773],{"class":146,"line":1342},[144,81770,52157],{"class":154},[144,81772,5157],{"class":51313},[144,81774,51320],{"class":154},[144,81776,81777,81780],{"class":146,"line":1348},[144,81778,81779],{"class":51313},"    div",[144,81781,15603],{"class":154},[144,81783,81784,81786,81788,81790,81792],{"class":146,"line":1360},[144,81785,54784],{"class":203},[144,81787,51450],{"class":154},[144,81789,1752],{"class":203},[144,81791,51505],{"class":150},[144,81793,1321],{"class":154},[144,81795,81796,81798,81800,81802,81804],{"class":146,"line":1642},[144,81797,54798],{"class":203},[144,81799,51450],{"class":154},[144,81801,556],{"class":203},[144,81803,51505],{"class":150},[144,81805,1321],{"class":154},[144,81807,81808,81810,81812,81814,81816],{"class":146,"line":1647},[144,81809,57372],{"class":203},[144,81811,51450],{"class":154},[144,81813,556],{"class":203},[144,81815,51505],{"class":150},[144,81817,1321],{"class":154},[144,81819,81820,81822,81824,81826,81828],{"class":146,"line":1653},[144,81821,65146],{"class":203},[144,81823,51450],{"class":154},[144,81825,653],{"class":203},[144,81827,51505],{"class":150},[144,81829,1321],{"class":154},[144,81831,81832,81834,81836,81838],{"class":146,"line":1658},[144,81833,57299],{"class":203},[144,81835,51450],{"class":154},[144,81837,51605],{"class":203},[144,81839,1321],{"class":154},[144,81841,81842,81844,81846,81848],{"class":146,"line":1672},[144,81843,54897],{"class":203},[144,81845,51450],{"class":154},[144,81847,51658],{"class":203},[144,81849,1321],{"class":154},[144,81851,81852],{"class":146,"line":1677},[144,81853,2217],{"class":154},[144,81855,81856,81858,81860],{"class":146,"line":1683},[144,81857,52430],{"class":154},[144,81859,5157],{"class":51313},[144,81861,51320],{"class":154},[144,81863,81864,81866,81868],{"class":146,"line":1704},[144,81865,51798],{"class":154},[144,81867,51347],{"class":51313},[144,81869,51320],{"class":154},[144,81871,81872],{"class":146,"line":1709},[144,81873,2430],{"emptyLinePlaceholder":72},[144,81875,81876,81878,81880],{"class":146,"line":1723},[144,81877,1065],{"class":154},[144,81879,51813],{"class":51313},[144,81881,51320],{"class":154},[144,81883,81884,81886,81888,81890,81892],{"class":146,"line":1728},[144,81885,52157],{"class":154},[144,81887,51624],{"class":51313},[144,81889,55327],{"class":154},[144,81891,51624],{"class":51313},[144,81893,51320],{"class":154},[144,81895,81896,81898,81900],{"class":146,"line":1757},[144,81897,52157],{"class":154},[144,81899,51826],{"class":51313},[144,81901,51320],{"class":154},[144,81903,81904,81906,81909,81911,81914,81917,81919,81922],{"class":146,"line":1762},[144,81905,11252],{"class":150},[144,81907,81908],{"class":203}," spec",[144,81910,13595],{"class":150},[144,81912,81913],{"class":154}," { size: ",[144,81915,81916],{"class":259},"'40cm*40cm'",[144,81918,55477],{"class":154},[144,81920,81921],{"class":259},"'黑色'",[144,81923,55617],{"class":154},[144,81925,81926],{"class":146,"line":1779},[144,81927,81928],{"class":213},"    \u002F\u002F const arr = Object.values(spec)\n",[144,81930,81931],{"class":146,"line":1784},[144,81932,81933],{"class":213},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[144,81935,81936,81938,81940,81942,81945,81947,81949,81952,81955,81958,81960,81962,81965],{"class":146,"line":1789},[144,81937,52420],{"class":154},[144,81939,54412],{"class":1993},[144,81941,155],{"class":154},[144,81943,81944],{"class":259},"'div'",[144,81946,74262],{"class":154},[144,81948,200],{"class":150},[144,81950,81951],{"class":154}," Object.",[144,81953,81954],{"class":1993},"values",[144,81956,81957],{"class":154},"(spec).",[144,81959,74236],{"class":1993},[144,81961,155],{"class":154},[144,81963,81964],{"class":259},"'\u002F'",[144,81966,161],{"class":154},[144,81968,81969,81971,81973],{"class":146,"line":1794},[144,81970,52430],{"class":154},[144,81972,51826],{"class":51313},[144,81974,51320],{"class":154},[144,81976,81977,81979,81981],{"class":146,"line":1808},[144,81978,51798],{"class":154},[144,81980,51813],{"class":51313},[144,81982,51320],{"class":154},[144,81984,81985],{"class":146,"line":1813},[144,81986,2430],{"emptyLinePlaceholder":72},[144,81988,81989,81991,81993],{"class":146,"line":2607},[144,81990,51798],{"class":154},[144,81992,50648],{"class":51313},[144,81994,51320],{"class":154},[14,81996,81997],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22941,81999,82001],{"id":82000},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,82003,82004],{},"静态方法，将伪数组转换为真数组",[14,82006,82007],{},[28,82008],{"alt":30,"src":82009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[135,82011,82013],{"className":53080,"code":82012,"language":53082,"meta":30,"style":30},"\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",[141,82014,82015,82023,82031,82043,82055,82067,82075,82083,82088,82093,82098,82103,82111],{"__ignoreMap":30},[144,82016,82017,82019,82021],{"class":146,"line":147},[144,82018,1065],{"class":154},[144,82020,51813],{"class":51313},[144,82022,51320],{"class":154},[144,82024,82025,82027,82029],{"class":146,"line":66},[144,82026,52157],{"class":154},[144,82028,1162],{"class":51313},[144,82030,51320],{"class":154},[144,82032,82033,82035,82037,82039,82041],{"class":146,"line":1210},[144,82034,51354],{"class":154},[144,82036,101],{"class":51313},[144,82038,55327],{"class":154},[144,82040,101],{"class":51313},[144,82042,51320],{"class":154},[144,82044,82045,82047,82049,82051,82053],{"class":146,"line":1225},[144,82046,51354],{"class":154},[144,82048,101],{"class":51313},[144,82050,55327],{"class":154},[144,82052,101],{"class":51313},[144,82054,51320],{"class":154},[144,82056,82057,82059,82061,82063,82065],{"class":146,"line":1231},[144,82058,51354],{"class":154},[144,82060,101],{"class":51313},[144,82062,55327],{"class":154},[144,82064,101],{"class":51313},[144,82066,51320],{"class":154},[144,82068,82069,82071,82073],{"class":146,"line":1245},[144,82070,52430],{"class":154},[144,82072,1162],{"class":51313},[144,82074,51320],{"class":154},[144,82076,82077,82079,82081],{"class":146,"line":1251},[144,82078,52157],{"class":154},[144,82080,51826],{"class":51313},[144,82082,51320],{"class":154},[144,82084,82085],{"class":146,"line":1342},[144,82086,82087],{"class":154},"    const lis = document.querySelectorAll('li')\n",[144,82089,82090],{"class":146,"line":1348},[144,82091,82092],{"class":154},"    const liss = Array.from(lis)\n",[144,82094,82095],{"class":146,"line":1360},[144,82096,82097],{"class":154},"    liss.pop()\n",[144,82099,82100],{"class":146,"line":1642},[144,82101,82102],{"class":154},"    console.log(liss)\n",[144,82104,82105,82107,82109],{"class":146,"line":1647},[144,82106,52430],{"class":154},[144,82108,51826],{"class":51313},[144,82110,51320],{"class":154},[144,82112,82113,82115,82117],{"class":146,"line":1653},[144,82114,51798],{"class":154},[144,82116,51813],{"class":51313},[144,82118,51320],{"class":154},[14,82120,82121],{},[28,82122],{"alt":30,"src":82123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22029,82125,82127],{"id":82126},"_41053-string","4.10.5.3 String",[14,82129,82130],{},[28,82131],{"alt":30,"src":82132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22941,82134,82136],{"id":82135},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[135,82138,82140],{"className":53080,"code":82139,"language":53082,"meta":30,"style":30},"\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",[141,82141,82142,82150,82158,82163,82168,82173,82177,82182,82187,82192,82200],{"__ignoreMap":30},[144,82143,82144,82146,82148],{"class":146,"line":147},[144,82145,1065],{"class":154},[144,82147,51813],{"class":51313},[144,82149,51320],{"class":154},[144,82151,82152,82154,82156],{"class":146,"line":66},[144,82153,52157],{"class":154},[144,82155,51826],{"class":51313},[144,82157,51320],{"class":154},[144,82159,82160],{"class":146,"line":1210},[144,82161,82162],{"class":154},"    \u002F\u002F 把字符串转化为数组\n",[144,82164,82165],{"class":146,"line":1225},[144,82166,82167],{"class":154},"    const str = 'pink,red'\n",[144,82169,82170],{"class":146,"line":1231},[144,82171,82172],{"class":154},"    const arr = str.split(',')\n",[144,82174,82175],{"class":146,"line":1245},[144,82176,80651],{"class":154},[144,82178,82179],{"class":146,"line":1251},[144,82180,82181],{"class":154},"    const str1 = '2025-8-25'\n",[144,82183,82184],{"class":146,"line":1342},[144,82185,82186],{"class":154},"    const arr1 = str1.split('-')\n",[144,82188,82189],{"class":146,"line":1348},[144,82190,82191],{"class":154},"    console.log(arr1)\n",[144,82193,82194,82196,82198],{"class":146,"line":1360},[144,82195,52430],{"class":154},[144,82197,51826],{"class":51313},[144,82199,51320],{"class":154},[144,82201,82202,82204,82206],{"class":146,"line":1642},[144,82203,51798],{"class":154},[144,82205,51813],{"class":51313},[144,82207,51320],{"class":154},[22941,82209,82211],{"id":82210},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82213,5212],{},[14,82215,82216],{},"substring(indexStart)",[14,82218,82219],{},"substring(indexStart, indexEnd)",[1162,82221,82222,82233,82245,82255],{},[101,82223,82224,82225,82228,82229,82232],{},"如果省略了 ",[141,82226,82227],{},"indexEnd","，则 ",[141,82230,82231],{},"substring()"," 提取字符直到字符串的末尾",[101,82234,82235,82236,82239,82240,82228,82242,82244],{},"如果 ",[141,82237,82238],{},"indexStart"," 等于 ",[141,82241,82227],{},[141,82243,82231],{}," 返回一个空字符串",[101,82246,82235,82247,82249,82250,82228,82252,82254],{},[141,82248,82238],{}," 大于 ",[141,82251,82227],{},[141,82253,82231],{}," 的效果就像交换了这两个参数一样",[101,82256,82257],{},"结束的索引号不包含想要截取的部分",[135,82259,82261],{"className":81502,"code":82260,"language":81504,"meta":30,"style":30},"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",[141,82262,82263,82275,82279,82313,82343,82347,82378,82382,82409,82439,82469,82473,82504],{"__ignoreMap":30},[144,82264,82265,82268,82270,82273],{"class":146,"line":147},[144,82266,82267],{"class":154},"const anyString ",[144,82269,200],{"class":150},[144,82271,82272],{"class":259}," \"Mozilla\"",[144,82274,1321],{"class":154},[144,82276,82277],{"class":146,"line":66},[144,82278,2430],{"emptyLinePlaceholder":72},[144,82280,82281,82284,82286,82288,82290,82293,82295,82298,82300,82302,82304,82306,82308,82310],{"class":146,"line":1210},[144,82282,82283],{"class":203},"console",[144,82285,713],{"class":154},[144,82287,58260],{"class":203},[144,82289,155],{"class":154},[144,82291,82292],{"class":203},"anyString",[144,82294,713],{"class":154},[144,82296,82297],{"class":203},"substring",[144,82299,155],{"class":154},[144,82301,346],{"class":203},[144,82303,12466],{"class":154},[144,82305,372],{"class":203},[144,82307,75266],{"class":154},[144,82309,33342],{"class":150},[144,82311,82312],{"class":259}," 'M'\n",[144,82314,82315,82317,82319,82321,82323,82325,82327,82329,82331,82333,82335,82337,82339,82341],{"class":146,"line":1225},[144,82316,82283],{"class":203},[144,82318,713],{"class":154},[144,82320,58260],{"class":203},[144,82322,155],{"class":154},[144,82324,82292],{"class":203},[144,82326,713],{"class":154},[144,82328,82297],{"class":203},[144,82330,155],{"class":154},[144,82332,372],{"class":203},[144,82334,12466],{"class":154},[144,82336,346],{"class":203},[144,82338,75266],{"class":154},[144,82340,33342],{"class":150},[144,82342,82312],{"class":259},[144,82344,82345],{"class":146,"line":1231},[144,82346,2430],{"emptyLinePlaceholder":72},[144,82348,82349,82351,82353,82355,82357,82359,82361,82363,82365,82367,82369,82371,82373,82375],{"class":146,"line":1245},[144,82350,82283],{"class":203},[144,82352,713],{"class":154},[144,82354,58260],{"class":203},[144,82356,155],{"class":154},[144,82358,82292],{"class":203},[144,82360,713],{"class":154},[144,82362,82297],{"class":203},[144,82364,155],{"class":154},[144,82366,346],{"class":203},[144,82368,12466],{"class":154},[144,82370,499],{"class":203},[144,82372,75266],{"class":154},[144,82374,33342],{"class":150},[144,82376,82377],{"class":259}," 'Mozill'\n",[144,82379,82380],{"class":146,"line":1251},[144,82381,2430],{"emptyLinePlaceholder":72},[144,82383,82384,82386,82388,82390,82392,82394,82396,82398,82400,82402,82404,82406],{"class":146,"line":1342},[144,82385,82283],{"class":203},[144,82387,713],{"class":154},[144,82389,58260],{"class":203},[144,82391,155],{"class":154},[144,82393,82292],{"class":203},[144,82395,713],{"class":154},[144,82397,82297],{"class":203},[144,82399,155],{"class":154},[144,82401,448],{"class":203},[144,82403,75266],{"class":154},[144,82405,33342],{"class":150},[144,82407,82408],{"class":259}," 'lla'\n",[144,82410,82411,82413,82415,82417,82419,82421,82423,82425,82427,82429,82431,82433,82435,82437],{"class":146,"line":1348},[144,82412,82283],{"class":203},[144,82414,713],{"class":154},[144,82416,58260],{"class":203},[144,82418,155],{"class":154},[144,82420,82292],{"class":203},[144,82422,713],{"class":154},[144,82424,82297],{"class":203},[144,82426,155],{"class":154},[144,82428,448],{"class":203},[144,82430,12466],{"class":154},[144,82432,524],{"class":203},[144,82434,75322],{"class":154},[144,82436,33342],{"class":150},[144,82438,82408],{"class":259},[144,82440,82441,82443,82445,82447,82449,82451,82453,82455,82457,82459,82461,82463,82465,82467],{"class":146,"line":1360},[144,82442,82283],{"class":203},[144,82444,713],{"class":154},[144,82446,58260],{"class":203},[144,82448,155],{"class":154},[144,82450,82292],{"class":203},[144,82452,713],{"class":154},[144,82454,82297],{"class":203},[144,82456,155],{"class":154},[144,82458,524],{"class":203},[144,82460,12466],{"class":154},[144,82462,448],{"class":203},[144,82464,75266],{"class":154},[144,82466,33342],{"class":150},[144,82468,82408],{"class":259},[144,82470,82471],{"class":146,"line":1642},[144,82472,2430],{"emptyLinePlaceholder":72},[144,82474,82475,82477,82479,82481,82483,82485,82487,82489,82491,82493,82495,82497,82499,82501],{"class":146,"line":1647},[144,82476,82283],{"class":203},[144,82478,713],{"class":154},[144,82480,58260],{"class":203},[144,82482,155],{"class":154},[144,82484,82292],{"class":203},[144,82486,713],{"class":154},[144,82488,82297],{"class":203},[144,82490,155],{"class":154},[144,82492,346],{"class":203},[144,82494,12466],{"class":154},[144,82496,524],{"class":203},[144,82498,75266],{"class":154},[144,82500,33342],{"class":150},[144,82502,82503],{"class":259}," 'Mozilla'\n",[144,82505,82506,82508,82510,82512,82514,82516,82518,82520,82522,82524,82526,82528,82530,82532],{"class":146,"line":1653},[144,82507,82283],{"class":203},[144,82509,713],{"class":154},[144,82511,58260],{"class":203},[144,82513,155],{"class":154},[144,82515,82292],{"class":203},[144,82517,713],{"class":154},[144,82519,82297],{"class":203},[144,82521,155],{"class":154},[144,82523,346],{"class":203},[144,82525,12466],{"class":154},[144,82527,601],{"class":203},[144,82529,75266],{"class":154},[144,82531,33342],{"class":150},[144,82533,82503],{"class":259},[22941,82535,82537],{"id":82536},"_410533-startswith","4.10.5.3.3 startsWith",[14,82539,82540,82543,82544,82549,82550,82552,82553],{},[141,82541,82542],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[304,82545,82546],{},[141,82547,82548],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[141,82551,1393],{}," 或 ",[141,82554,66033],{},[135,82556,82558],{"className":77508,"code":82557,"language":77510,"meta":30,"style":30},"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",[141,82559,82560,82572,82591,82596,82616],{"__ignoreMap":30},[144,82561,82562,82564,82567,82569],{"class":146,"line":147},[144,82563,6823],{"class":150},[144,82565,82566],{"class":154}," str1 ",[144,82568,200],{"class":150},[144,82570,82571],{"class":259}," \"Saturday night plans\"\n",[144,82573,82574,82576,82578,82581,82584,82586,82589],{"class":146,"line":66},[144,82575,77545],{"class":154},[144,82577,58260],{"class":1993},[144,82579,82580],{"class":154},"(str1.",[144,82582,82583],{"class":1993},"startsWith",[144,82585,155],{"class":154},[144,82587,82588],{"class":259},"\"Sat\"",[144,82590,30510],{"class":154},[144,82592,82593],{"class":146,"line":1210},[144,82594,82595],{"class":213},"\u002F\u002F Expected output: true\n",[144,82597,82598,82600,82602,82604,82606,82608,82610,82612,82614],{"class":146,"line":1225},[144,82599,77545],{"class":154},[144,82601,58260],{"class":1993},[144,82603,82580],{"class":154},[144,82605,82583],{"class":1993},[144,82607,155],{"class":154},[144,82609,82588],{"class":259},[144,82611,12466],{"class":154},[144,82613,226],{"class":203},[144,82615,30510],{"class":154},[144,82617,82618],{"class":146,"line":1231},[144,82619,82620],{"class":213},"\u002F\u002F Expected output: false\n",[135,82622,82624],{"className":50646,"code":82623,"language":50648,"meta":30,"style":30},"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",[141,82625,82626,82631,82636,82640,82645,82650],{"__ignoreMap":30},[144,82627,82628],{"class":146,"line":147},[144,82629,82630],{"class":154},"startsWith(searchString)\n",[144,82632,82633],{"class":146,"line":66},[144,82634,82635],{"class":154},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[144,82637,82638],{"class":146,"line":1210},[144,82639,2430],{"emptyLinePlaceholder":72},[144,82641,82642],{"class":146,"line":1225},[144,82643,82644],{"class":154},"const str3 = 'pink老师上课中'\n",[144,82646,82647],{"class":146,"line":1231},[144,82648,82649],{"class":154},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[144,82651,82652],{"class":146,"line":1245},[144,82653,82654],{"class":154},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22941,82656,82658],{"id":82657},"_410534-includes","4.10.5.3.4 includes",[14,82660,82661],{},"includes(searchString) includes(searchString, position)",[98,82663,82664],{},[101,82665,82666],{},"searchString:",[14,82668,82669,82670,82672,82673,82678,82679,82684,82685,21531,82688,82691,82692,82695],{},"一个要在 ",[141,82671,1330],{}," 中查找的字符串。",[393,82674,82677],{"href":82675,"rel":82676},"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",[23897],"不能是正则表达式","。所有非正则表达式的值都会被",[393,82680,82683],{"href":82681,"rel":82682},"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",[23897],"强制转换为字符串","，因此如果该参数被省略或传入 ",[141,82686,82687],{},"undefined",[141,82689,82690],{},"includes()"," 方法会在字符串中搜索 ",[141,82693,82694],{},"\"undefined\"","，这通常不是你想要的",[98,82697,82698],{"start":66},[101,82699,82700,1014],{},[141,82701,82702],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,82704,82705,82706,82709,82710],{},"在字符串中开始搜索 ",[141,82707,82708],{},"searchString"," 的位置。默认值为 ",[141,82711,346],{},[98,82713,82714],{"start":1210},[101,82715,82716],{},"返回值：",[14,82718,82719,82720,82722,82723,82727,82728],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[141,82721,82708],{}," 为空字符串的情况），则返回 ",[304,82724,82725],{},[141,82726,1393],{}," ，否则返回 ",[304,82729,82730],{},[141,82731,66033],{},[98,82733,82734],{"start":1225},[101,82735,82736],{},"异常：",[14,82738,82235,82739,13826,82741,82745],{},[141,82740,82708],{},[393,82742,82744],{"href":82675,"rel":82743},[23897],"是一个正则表达式","，则会抛出",[14,82747,82748],{},"只要是有就是true，不需要非得以谁开头结尾",[135,82750,82752],{"className":77508,"code":82751,"language":77510,"meta":30,"style":30},"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",[141,82753,82754,82765,82788,82807,82827,82849,82868],{"__ignoreMap":30},[144,82755,82756,82758,82760,82762],{"class":146,"line":147},[144,82757,6823],{"class":150},[144,82759,79788],{"class":154},[144,82761,200],{"class":150},[144,82763,82764],{"class":259}," \"To be, or not to be, that is the question.\"\n",[144,82766,82767,82769,82771,82774,82777,82779,82782,82785],{"class":146,"line":66},[144,82768,77545],{"class":154},[144,82770,58260],{"class":1993},[144,82772,82773],{"class":154},"(str.",[144,82775,82776],{"class":1993},"includes",[144,82778,155],{"class":154},[144,82780,82781],{"class":259},"\"To be\"",[144,82783,82784],{"class":154},"))",[144,82786,82787],{"class":213},"  \u002F\u002F true\n",[144,82789,82790,82792,82794,82796,82798,82800,82803,82805],{"class":146,"line":1210},[144,82791,77545],{"class":154},[144,82793,58260],{"class":1993},[144,82795,82773],{"class":154},[144,82797,82776],{"class":1993},[144,82799,155],{"class":154},[144,82801,82802],{"class":259},"\"question\"",[144,82804,82784],{"class":154},[144,82806,82787],{"class":213},[144,82808,82809,82811,82813,82815,82817,82819,82822,82824],{"class":146,"line":1225},[144,82810,77545],{"class":154},[144,82812,58260],{"class":1993},[144,82814,82773],{"class":154},[144,82816,82776],{"class":1993},[144,82818,155],{"class":154},[144,82820,82821],{"class":259},"\"nonexistent\"",[144,82823,82784],{"class":154},[144,82825,82826],{"class":213},"  \u002F\u002F false\n",[144,82828,82829,82831,82833,82835,82837,82839,82841,82843,82845,82847],{"class":146,"line":1231},[144,82830,77545],{"class":154},[144,82832,58260],{"class":1993},[144,82834,82773],{"class":154},[144,82836,82776],{"class":1993},[144,82838,155],{"class":154},[144,82840,82781],{"class":259},[144,82842,12466],{"class":154},[144,82844,372],{"class":203},[144,82846,82784],{"class":154},[144,82848,82826],{"class":213},[144,82850,82851,82853,82855,82857,82859,82861,82864,82866],{"class":146,"line":1245},[144,82852,77545],{"class":154},[144,82854,58260],{"class":1993},[144,82856,82773],{"class":154},[144,82858,82776],{"class":1993},[144,82860,155],{"class":154},[144,82862,82863],{"class":259},"\"TO BE\"",[144,82865,82784],{"class":154},[144,82867,82826],{"class":213},[144,82869,82870,82872,82874,82876,82878,82880,82882,82884],{"class":146,"line":1251},[144,82871,77545],{"class":154},[144,82873,58260],{"class":1993},[144,82875,82773],{"class":154},[144,82877,82776],{"class":1993},[144,82879,155],{"class":154},[144,82881,7683],{"class":259},[144,82883,82784],{"class":154},[144,82885,82787],{"class":213},[22941,82887,82889],{"id":82888},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[135,82891,82893],{"className":53080,"code":82892,"language":53082,"meta":30,"style":30},"\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",[141,82894,82895,82903,82911,82916,82921,82926,82931,82936,82944],{"__ignoreMap":30},[144,82896,82897,82899,82901],{"class":146,"line":147},[144,82898,1065],{"class":154},[144,82900,51813],{"class":51313},[144,82902,51320],{"class":154},[144,82904,82905,82907,82909],{"class":146,"line":66},[144,82906,52157],{"class":154},[144,82908,51826],{"class":51313},[144,82910,51320],{"class":154},[144,82912,82913],{"class":146,"line":1210},[144,82914,82915],{"class":154},"    const num = 10\n",[144,82917,82918],{"class":146,"line":1225},[144,82919,82920],{"class":154},"    \u002F\u002F 强制转换\n",[144,82922,82923],{"class":146,"line":1231},[144,82924,82925],{"class":154},"    console.log(String(num))\n",[144,82927,82928],{"class":146,"line":1245},[144,82929,82930],{"class":154},"    \u002F\u002F toString()方法转换\n",[144,82932,82933],{"class":146,"line":1251},[144,82934,82935],{"class":154},"    console.log(num.toString())\n",[144,82937,82938,82940,82942],{"class":146,"line":1342},[144,82939,52430],{"class":154},[144,82941,51826],{"class":51313},[144,82943,51320],{"class":154},[144,82945,82946,82948,82950],{"class":146,"line":1348},[144,82947,51798],{"class":154},[144,82949,51813],{"class":51313},[144,82951,51320],{"class":154},[22941,82953,82955],{"id":82954},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,82957,82958],{},[28,82959],{"alt":30,"src":82960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[135,82962,82964],{"className":50646,"code":82963,"language":50648,"meta":30,"style":30},"\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",[141,82965,82966,82976,82990,82994,83002,83016,83036,83048,83056,83060,83068,83080,83088,83100,83105,83110,83115,83162,83178,83186,83194,83198],{"__ignoreMap":30},[144,82967,82968,82970,82972,82974],{"class":146,"line":147},[144,82969,51310],{"class":154},[144,82971,51314],{"class":51313},[144,82973,51317],{"class":1993},[144,82975,51320],{"class":154},[144,82977,82978,82980,82982,82984,82986,82988],{"class":146,"line":66},[144,82979,1065],{"class":154},[144,82981,50648],{"class":51313},[144,82983,51329],{"class":1993},[144,82985,200],{"class":154},[144,82987,51334],{"class":259},[144,82989,51320],{"class":154},[144,82991,82992],{"class":146,"line":1210},[144,82993,2430],{"emptyLinePlaceholder":72},[144,82995,82996,82998,83000],{"class":146,"line":1225},[144,82997,1065],{"class":154},[144,82999,51347],{"class":51313},[144,83001,51320],{"class":154},[144,83003,83004,83006,83008,83010,83012,83014],{"class":146,"line":1231},[144,83005,52157],{"class":154},[144,83007,51357],{"class":51313},[144,83009,51360],{"class":1993},[144,83011,200],{"class":154},[144,83013,51365],{"class":259},[144,83015,51320],{"class":154},[144,83017,83018,83020,83022,83024,83026,83028,83030,83032,83034],{"class":146,"line":1245},[144,83019,52157],{"class":154},[144,83021,51357],{"class":51313},[144,83023,14951],{"class":1993},[144,83025,200],{"class":154},[144,83027,51404],{"class":259},[144,83029,51384],{"class":1993},[144,83031,200],{"class":154},[144,83033,51411],{"class":259},[144,83035,51320],{"class":154},[144,83037,83038,83040,83042,83044,83046],{"class":146,"line":1251},[144,83039,52157],{"class":154},[144,83041,51420],{"class":51313},[144,83043,51423],{"class":154},[144,83045,51420],{"class":51313},[144,83047,51320],{"class":154},[144,83049,83050,83052,83054],{"class":146,"line":1342},[144,83051,51798],{"class":154},[144,83053,51347],{"class":51313},[144,83055,51320],{"class":154},[144,83057,83058],{"class":146,"line":1348},[144,83059,2430],{"emptyLinePlaceholder":72},[144,83061,83062,83064,83066],{"class":146,"line":1360},[144,83063,1065],{"class":154},[144,83065,51813],{"class":51313},[144,83067,51320],{"class":154},[144,83069,83070,83072,83074,83076,83078],{"class":146,"line":1642},[144,83071,52157],{"class":154},[144,83073,51624],{"class":51313},[144,83075,55327],{"class":154},[144,83077,51624],{"class":51313},[144,83079,51320],{"class":154},[144,83081,83082,83084,83086],{"class":146,"line":1647},[144,83083,52157],{"class":154},[144,83085,51826],{"class":51313},[144,83087,51320],{"class":154},[144,83089,83090,83092,83095,83097],{"class":146,"line":1653},[144,83091,11252],{"class":150},[144,83093,83094],{"class":203}," gift",[144,83096,13595],{"class":150},[144,83098,83099],{"class":259}," '50g的茶叶，清洗球'\n",[144,83101,83102],{"class":146,"line":1658},[144,83103,83104],{"class":213},"    \u002F\u002F 1.把字符串拆分为数组\n",[144,83106,83107],{"class":146,"line":1672},[144,83108,83109],{"class":213},"    \u002F\u002F console.log(gift.split(','))\n",[144,83111,83112],{"class":146,"line":1677},[144,83113,83114],{"class":213},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[144,83116,83117,83119,83121,83123,83126,83129,83131,83134,83136,83138,83140,83142,83144,83147,83149,83152,83154,83156,83158,83160],{"class":146,"line":1683},[144,83118,11252],{"class":150},[144,83120,73932],{"class":203},[144,83122,13595],{"class":150},[144,83124,83125],{"class":154}," gift.",[144,83127,83128],{"class":1993},"split",[144,83130,155],{"class":154},[144,83132,83133],{"class":259},"'，'",[144,83135,30839],{"class":154},[144,83137,74057],{"class":1993},[144,83139,155],{"class":154},[144,83141,79808],{"class":5247},[144,83143,79811],{"class":150},[144,83145,83146],{"class":259}," `\u003Cspan>【赠品】${",[144,83148,79808],{"class":154},[144,83150,83151],{"class":259},"}\u003C\u002Fspan>\u003Cbr>`",[144,83153,30839],{"class":154},[144,83155,74236],{"class":1993},[144,83157,155],{"class":154},[144,83159,74241],{"class":259},[144,83161,161],{"class":154},[144,83163,83164,83166,83168,83170,83172,83174,83176],{"class":146,"line":1704},[144,83165,52420],{"class":154},[144,83167,54412],{"class":1993},[144,83169,155],{"class":154},[144,83171,81944],{"class":259},[144,83173,74262],{"class":154},[144,83175,200],{"class":150},[144,83177,73998],{"class":154},[144,83179,83180,83182,83184],{"class":146,"line":1709},[144,83181,52430],{"class":154},[144,83183,51826],{"class":51313},[144,83185,51320],{"class":154},[144,83187,83188,83190,83192],{"class":146,"line":1723},[144,83189,51798],{"class":154},[144,83191,51813],{"class":51313},[144,83193,51320],{"class":154},[144,83195,83196],{"class":146,"line":1728},[144,83197,2430],{"emptyLinePlaceholder":72},[144,83199,83200,83202,83204],{"class":146,"line":1757},[144,83201,51798],{"class":154},[144,83203,50648],{"class":51313},[144,83205,51320],{"class":154},[22029,83207,83209],{"id":83208},"_41054-number","4.10.5.4 Number",[14,83211,83212],{},[28,83213],{"alt":30,"src":83214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83216,83217],{},"整数也可以进行toFixed来保留小数",[14,83219,83220],{},"比如：",[14,83222,83223],{},"const price=10",[14,83225,83226],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22029,83228,83230],{"id":83229},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83232,83233],{},[28,83234],{"alt":30,"src":83235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[135,83237,83239],{"className":50646,"code":83238,"language":50648,"meta":30,"style":30},"\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",[141,83240,83241,83251,83265,83269,83277,83291,83311,83323,83331,83337,83347,83357,83367,83371,83375,83381,83393,83407,83411,83415,83421,83433,83449,83459,83475,83479,83483,83489,83499,83509,83513,83517,83525,83537,83549,83561,83565,83569,83577,83589,83593,83597,83608,83618,83630,83642,83652,83656,83660,83668,83677,83689,83699,83709,83713,83717,83725,83734,83741,83751,83763,83767,83771,83780,83790,83801,83813,83825,83829,83833,83842,83852,83863,83867,83871,83877,83889,83901,83911,83921,83939,83951,83955,83959,83968,83980,83990,84000,84012,84016,84024,84032,84036,84044,84058,84066,84080,84108,84116,84124,84134,84138,84146,84154,84163,84171,84180,84190,84194,84198,84206,84214,84223,84231,84239,84252,84256,84260,84268,84276,84285,84293,84301,84316,84320,84324,84332,84340,84349,84357,84365,84379,84387,84391,84395,84400,84426,84431,84468,84473,84496,84501,84555,84560,84596,84600,84606,84611,84620,84634,84643,84662,84671,84681,84686,84691,84704,84709,84763,84789,84797,84805,84809],{"__ignoreMap":30},[144,83242,83243,83245,83247,83249],{"class":146,"line":147},[144,83244,51310],{"class":154},[144,83246,51314],{"class":51313},[144,83248,51317],{"class":1993},[144,83250,51320],{"class":154},[144,83252,83253,83255,83257,83259,83261,83263],{"class":146,"line":66},[144,83254,1065],{"class":154},[144,83256,50648],{"class":51313},[144,83258,51329],{"class":1993},[144,83260,200],{"class":154},[144,83262,51334],{"class":259},[144,83264,51320],{"class":154},[144,83266,83267],{"class":146,"line":1210},[144,83268,2430],{"emptyLinePlaceholder":72},[144,83270,83271,83273,83275],{"class":146,"line":1225},[144,83272,1065],{"class":154},[144,83274,51347],{"class":51313},[144,83276,51320],{"class":154},[144,83278,83279,83281,83283,83285,83287,83289],{"class":146,"line":1231},[144,83280,52157],{"class":154},[144,83282,51357],{"class":51313},[144,83284,51360],{"class":1993},[144,83286,200],{"class":154},[144,83288,51365],{"class":259},[144,83290,51320],{"class":154},[144,83292,83293,83295,83297,83299,83301,83303,83305,83307,83309],{"class":146,"line":1245},[144,83294,52157],{"class":154},[144,83296,51357],{"class":51313},[144,83298,14951],{"class":1993},[144,83300,200],{"class":154},[144,83302,51404],{"class":259},[144,83304,51384],{"class":1993},[144,83306,200],{"class":154},[144,83308,51411],{"class":259},[144,83310,51320],{"class":154},[144,83312,83313,83315,83317,83319,83321],{"class":146,"line":1251},[144,83314,52157],{"class":154},[144,83316,51420],{"class":51313},[144,83318,51423],{"class":154},[144,83320,51420],{"class":51313},[144,83322,51320],{"class":154},[144,83324,83325,83327,83329],{"class":146,"line":1342},[144,83326,52157],{"class":154},[144,83328,5157],{"class":51313},[144,83330,51320],{"class":154},[144,83332,83333,83335],{"class":146,"line":1348},[144,83334,6434],{"class":51313},[144,83336,15603],{"class":154},[144,83338,83339,83341,83343,83345],{"class":146,"line":1360},[144,83340,54708],{"class":203},[144,83342,51450],{"class":154},[144,83344,346],{"class":203},[144,83346,1321],{"class":154},[144,83348,83349,83351,83353,83355],{"class":146,"line":1642},[144,83350,54719],{"class":203},[144,83352,51450],{"class":154},[144,83354,346],{"class":203},[144,83356,1321],{"class":154},[144,83358,83359,83361,83363,83365],{"class":146,"line":1647},[144,83360,72609],{"class":203},[144,83362,51450],{"class":154},[144,83364,60518],{"class":203},[144,83366,1321],{"class":154},[144,83368,83369],{"class":146,"line":1653},[144,83370,2217],{"class":154},[144,83372,83373],{"class":146,"line":1658},[144,83374,2430],{"emptyLinePlaceholder":72},[144,83376,83377,83379],{"class":146,"line":1672},[144,83378,62136],{"class":1993},[144,83380,15603],{"class":154},[144,83382,83383,83385,83387,83389,83391],{"class":146,"line":1677},[144,83384,54784],{"class":203},[144,83386,51450],{"class":154},[144,83388,78587],{"class":203},[144,83390,51505],{"class":150},[144,83392,1321],{"class":154},[144,83394,83395,83397,83399,83401,83403,83405],{"class":146,"line":1683},[144,83396,54719],{"class":203},[144,83398,51450],{"class":154},[144,83400,466],{"class":203},[144,83402,51505],{"class":150},[144,83404,51569],{"class":203},[144,83406,1321],{"class":154},[144,83408,83409],{"class":146,"line":1704},[144,83410,2217],{"class":154},[144,83412,83413],{"class":146,"line":1709},[144,83414,2430],{"emptyLinePlaceholder":72},[144,83416,83417,83419],{"class":146,"line":1723},[144,83418,78638],{"class":1993},[144,83420,15603],{"class":154},[144,83422,83423,83425,83427,83429,83431],{"class":146,"line":1728},[144,83424,54708],{"class":203},[144,83426,51450],{"class":154},[144,83428,730],{"class":203},[144,83430,51505],{"class":150},[144,83432,1321],{"class":154},[144,83434,83435,83437,83439,83441,83443,83445,83447],{"class":146,"line":1757},[144,83436,61873],{"class":203},[144,83438,51450],{"class":154},[144,83440,28134],{"class":203},[144,83442,78693],{"class":203},[144,83444,78696],{"class":203},[144,83446,850],{"class":150},[144,83448,1321],{"class":154},[144,83450,83451,83453,83455,83457],{"class":146,"line":1762},[144,83452,55022],{"class":203},[144,83454,51450],{"class":154},[144,83456,51490],{"class":203},[144,83458,1321],{"class":154},[144,83460,83461,83463,83465,83467,83469,83471,83473],{"class":146,"line":1779},[144,83462,61990],{"class":203},[144,83464,51450],{"class":154},[144,83466,372],{"class":203},[144,83468,51505],{"class":150},[144,83470,51534],{"class":203},[144,83472,62257],{"class":203},[144,83474,1321],{"class":154},[144,83476,83477],{"class":146,"line":1784},[144,83478,2217],{"class":154},[144,83480,83481],{"class":146,"line":1789},[144,83482,2430],{"emptyLinePlaceholder":72},[144,83484,83485,83487],{"class":146,"line":1794},[144,83486,78756],{"class":1993},[144,83488,15603],{"class":154},[144,83490,83491,83493,83495,83497],{"class":146,"line":1808},[144,83492,62038],{"class":203},[144,83494,51450],{"class":154},[144,83496,62043],{"class":203},[144,83498,1321],{"class":154},[144,83500,83501,83503,83505,83507],{"class":146,"line":1813},[144,83502,54897],{"class":203},[144,83504,51450],{"class":154},[144,83506,61831],{"class":203},[144,83508,1321],{"class":154},[144,83510,83511],{"class":146,"line":2607},[144,83512,2217],{"class":154},[144,83514,83515],{"class":146,"line":2621},[144,83516,2430],{"emptyLinePlaceholder":72},[144,83518,83519,83521,83523],{"class":146,"line":2629},[144,83520,78638],{"class":1993},[144,83522,55628],{"class":51313},[144,83524,15603],{"class":154},[144,83526,83527,83529,83531,83533,83535],{"class":146,"line":2634},[144,83528,54784],{"class":203},[144,83530,51450],{"class":154},[144,83532,767],{"class":203},[144,83534,51505],{"class":150},[144,83536,1321],{"class":154},[144,83538,83539,83541,83543,83545,83547],{"class":146,"line":2640},[144,83540,54798],{"class":203},[144,83542,51450],{"class":154},[144,83544,767],{"class":203},[144,83546,51505],{"class":150},[144,83548,1321],{"class":154},[144,83550,83551,83553,83555,83557,83559],{"class":146,"line":2646},[144,83552,61763],{"class":203},[144,83554,51450],{"class":154},[144,83556,474],{"class":203},[144,83558,51505],{"class":150},[144,83560,1321],{"class":154},[144,83562,83563],{"class":146,"line":2651},[144,83564,2217],{"class":154},[144,83566,83567],{"class":146,"line":7979},[144,83568,2430],{"emptyLinePlaceholder":72},[144,83570,83571,83573,83575],{"class":146,"line":8003},[144,83572,78638],{"class":1993},[144,83574,62317],{"class":1993},[144,83576,15603],{"class":154},[144,83578,83579,83581,83583,83585,83587],{"class":146,"line":8008},[144,83580,54784],{"class":203},[144,83582,51450],{"class":154},[144,83584,1752],{"class":203},[144,83586,51505],{"class":150},[144,83588,1321],{"class":154},[144,83590,83591],{"class":146,"line":8014},[144,83592,2217],{"class":154},[144,83594,83595],{"class":146,"line":8041},[144,83596,2430],{"emptyLinePlaceholder":72},[144,83598,83599,83601,83603,83606],{"class":146,"line":8046},[144,83600,78638],{"class":1993},[144,83602,62317],{"class":1993},[144,83604,83605],{"class":1993}," .tag",[144,83607,15603],{"class":154},[144,83609,83610,83612,83614,83616],{"class":146,"line":8052},[144,83611,55022],{"class":203},[144,83613,51450],{"class":154},[144,83615,60882],{"class":203},[144,83617,1321],{"class":154},[144,83619,83620,83622,83624,83626,83628],{"class":146,"line":8064},[144,83621,54708],{"class":203},[144,83623,51450],{"class":154},[144,83625,232],{"class":203},[144,83627,51505],{"class":150},[144,83629,1321],{"class":154},[144,83631,83632,83634,83636,83638,83640],{"class":146,"line":8076},[144,83633,54935],{"class":203},[144,83635,51450],{"class":154},[144,83637,653],{"class":203},[144,83639,51505],{"class":150},[144,83641,1321],{"class":154},[144,83643,83644,83646,83648,83650],{"class":146,"line":8088},[144,83645,57429],{"class":203},[144,83647,51450],{"class":154},[144,83649,62083],{"class":203},[144,83651,1321],{"class":154},[144,83653,83654],{"class":146,"line":9747},[144,83655,2217],{"class":154},[144,83657,83658],{"class":146,"line":9772},[144,83659,2430],{"emptyLinePlaceholder":72},[144,83661,83662,83664,83666],{"class":146,"line":9795},[144,83663,78638],{"class":1993},[144,83665,78930],{"class":1993},[144,83667,31479],{"class":154},[144,83669,83670,83672,83675],{"class":146,"line":9819},[144,83671,78638],{"class":1993},[144,83673,83674],{"class":1993}," .sub-total",[144,83676,15603],{"class":154},[144,83678,83679,83681,83683,83685,83687],{"class":146,"line":9824},[144,83680,54935],{"class":203},[144,83682,51450],{"class":154},[144,83684,805],{"class":203},[144,83686,51505],{"class":150},[144,83688,1321],{"class":154},[144,83690,83691,83693,83695,83697],{"class":146,"line":9829},[144,83692,57429],{"class":203},[144,83694,51450],{"class":154},[144,83696,78953],{"class":203},[144,83698,1321],{"class":154},[144,83700,83701,83703,83705,83707],{"class":146,"line":9834},[144,83702,61850],{"class":203},[144,83704,51450],{"class":154},[144,83706,372],{"class":203},[144,83708,1321],{"class":154},[144,83710,83711],{"class":146,"line":9843},[144,83712,2217],{"class":154},[144,83714,83715],{"class":146,"line":9848},[144,83716,2430],{"emptyLinePlaceholder":72},[144,83718,83719,83721,83723],{"class":146,"line":9854},[144,83720,78638],{"class":1993},[144,83722,78970],{"class":1993},[144,83724,31479],{"class":154},[144,83726,83727,83729,83732],{"class":146,"line":9875},[144,83728,78638],{"class":1993},[144,83730,83731],{"class":1993}," .sub-total::before",[144,83733,31479],{"class":154},[144,83735,83736,83739],{"class":146,"line":9881},[144,83737,83738],{"class":1993},"    .amount::before",[144,83740,15603],{"class":154},[144,83742,83743,83745,83747,83749],{"class":146,"line":9895},[144,83744,78977],{"class":203},[144,83746,51450],{"class":154},[144,83748,78982],{"class":259},[144,83750,1321],{"class":154},[144,83752,83753,83755,83757,83759,83761],{"class":146,"line":9901},[144,83754,54935],{"class":203},[144,83756,51450],{"class":154},[144,83758,653],{"class":203},[144,83760,51505],{"class":150},[144,83762,1321],{"class":154},[144,83764,83765],{"class":146,"line":9928},[144,83766,2217],{"class":154},[144,83768,83769],{"class":146,"line":9937},[144,83770,2430],{"emptyLinePlaceholder":72},[144,83772,83773,83775,83778],{"class":146,"line":9943},[144,83774,78638],{"class":1993},[144,83776,83777],{"class":1993}," .spec",[144,83779,15603],{"class":154},[144,83781,83782,83784,83786,83788],{"class":146,"line":9951},[144,83783,61850],{"class":203},[144,83785,51450],{"class":154},[144,83787,232],{"class":203},[144,83789,1321],{"class":154},[144,83791,83792,83794,83796,83799],{"class":146,"line":9956},[144,83793,57429],{"class":203},[144,83795,51450],{"class":154},[144,83797,83798],{"class":203},"#888",[144,83800,1321],{"class":154},[144,83802,83803,83805,83807,83809,83811],{"class":146,"line":16635},[144,83804,54935],{"class":203},[144,83806,51450],{"class":154},[144,83808,704],{"class":203},[144,83810,51505],{"class":150},[144,83812,1321],{"class":154},[144,83814,83815,83817,83819,83821,83823],{"class":146,"line":16641},[144,83816,62013],{"class":203},[144,83818,51450],{"class":154},[144,83820,855],{"class":203},[144,83822,51505],{"class":150},[144,83824,1321],{"class":154},[144,83826,83827],{"class":146,"line":16664},[144,83828,2217],{"class":154},[144,83830,83831],{"class":146,"line":16670},[144,83832,2430],{"emptyLinePlaceholder":72},[144,83834,83835,83837,83840],{"class":146,"line":16693},[144,83836,78638],{"class":1993},[144,83838,83839],{"class":1993}," .count",[144,83841,15603],{"class":154},[144,83843,83844,83846,83848,83850],{"class":146,"line":16707},[144,83845,61850],{"class":203},[144,83847,51450],{"class":154},[144,83849,372],{"class":203},[144,83851,1321],{"class":154},[144,83853,83854,83856,83858,83861],{"class":146,"line":16727},[144,83855,57429],{"class":203},[144,83857,51450],{"class":154},[144,83859,83860],{"class":203},"#aaa",[144,83862,1321],{"class":154},[144,83864,83865],{"class":146,"line":16733},[144,83866,2217],{"class":154},[144,83868,83869],{"class":146,"line":16744},[144,83870,2430],{"emptyLinePlaceholder":72},[144,83872,83873,83875],{"class":146,"line":16767},[144,83874,72488],{"class":1993},[144,83876,15603],{"class":154},[144,83878,83879,83881,83883,83885,83887],{"class":146,"line":16789},[144,83880,54784],{"class":203},[144,83882,51450],{"class":154},[144,83884,78587],{"class":203},[144,83886,51505],{"class":150},[144,83888,1321],{"class":154},[144,83890,83891,83893,83895,83897,83899],{"class":146,"line":16794},[144,83892,54719],{"class":203},[144,83894,51450],{"class":154},[144,83896,346],{"class":203},[144,83898,51569],{"class":203},[144,83900,1321],{"class":154},[144,83902,83903,83905,83907,83909],{"class":146,"line":16800},[144,83904,55022],{"class":203},[144,83906,51450],{"class":154},[144,83908,51490],{"class":203},[144,83910,1321],{"class":154},[144,83912,83913,83915,83917,83919],{"class":146,"line":16814},[144,83914,55033],{"class":203},[144,83916,51450],{"class":154},[144,83918,51593],{"class":203},[144,83920,1321],{"class":154},[144,83922,83923,83926,83928,83930,83932,83934,83937],{"class":146,"line":16827},[144,83924,83925],{"class":203},"      border-top",[144,83927,51450],{"class":154},[144,83929,372],{"class":203},[144,83931,51505],{"class":150},[144,83933,51534],{"class":203},[144,83935,83936],{"class":203}," #4e4e4e",[144,83938,1321],{"class":154},[144,83940,83941,83943,83945,83947,83949],{"class":146,"line":16832},[144,83942,54708],{"class":203},[144,83944,51450],{"class":154},[144,83946,855],{"class":203},[144,83948,51505],{"class":150},[144,83950,1321],{"class":154},[144,83952,83953],{"class":146,"line":16846},[144,83954,2217],{"class":154},[144,83956,83957],{"class":146,"line":16851},[144,83958,2430],{"emptyLinePlaceholder":72},[144,83960,83961,83963,83966],{"class":146,"line":16857},[144,83962,72488],{"class":1993},[144,83964,83965],{"class":1993}," .amount",[144,83967,15603],{"class":154},[144,83969,83970,83972,83974,83976,83978],{"class":146,"line":16862},[144,83971,54935],{"class":203},[144,83973,51450],{"class":154},[144,83975,805],{"class":203},[144,83977,51505],{"class":150},[144,83979,1321],{"class":154},[144,83981,83982,83984,83986,83988],{"class":146,"line":16876},[144,83983,57429],{"class":203},[144,83985,51450],{"class":154},[144,83987,78953],{"class":203},[144,83989,1321],{"class":154},[144,83991,83992,83994,83996,83998],{"class":146,"line":16881},[144,83993,62347],{"class":203},[144,83995,51450],{"class":154},[144,83997,51502],{"class":203},[144,83999,1321],{"class":154},[144,84001,84002,84004,84006,84008,84010],{"class":146,"line":16886},[144,84003,61763],{"class":203},[144,84005,51450],{"class":154},[144,84007,811],{"class":203},[144,84009,51505],{"class":150},[144,84011,1321],{"class":154},[144,84013,84014],{"class":146,"line":16900},[144,84015,2217],{"class":154},[144,84017,84018,84020,84022],{"class":146,"line":16912},[144,84019,52430],{"class":154},[144,84021,5157],{"class":51313},[144,84023,51320],{"class":154},[144,84025,84026,84028,84030],{"class":146,"line":16917},[144,84027,51798],{"class":154},[144,84029,51347],{"class":51313},[144,84031,51320],{"class":154},[144,84033,84034],{"class":146,"line":16930},[144,84035,2430],{"emptyLinePlaceholder":72},[144,84037,84038,84040,84042],{"class":146,"line":16935},[144,84039,1065],{"class":154},[144,84041,51813],{"class":51313},[144,84043,51320],{"class":154},[144,84045,84046,84048,84050,84052,84054,84056],{"class":146,"line":16940},[144,84047,52157],{"class":154},[144,84049,51624],{"class":51313},[144,84051,53499],{"class":1993},[144,84053,200],{"class":154},[144,84055,62621],{"class":259},[144,84057,51320],{"class":154},[144,84059,84060,84062,84064],{"class":146,"line":16945},[144,84061,52430],{"class":154},[144,84063,51624],{"class":51313},[144,84065,51320],{"class":154},[144,84067,84068,84070,84072,84074,84076,84078],{"class":146,"line":16958},[144,84069,52157],{"class":154},[144,84071,51624],{"class":51313},[144,84073,53499],{"class":1993},[144,84075,200],{"class":154},[144,84077,62593],{"class":259},[144,84079,51320],{"class":154},[144,84081,84082,84084,84086,84089,84091,84093,84095,84098,84100,84102,84104,84106],{"class":146,"line":16963},[144,84083,51354],{"class":154},[144,84085,51624],{"class":51313},[144,84087,84088],{"class":154},">合计：\u003C",[144,84090,144],{"class":51313},[144,84092,53499],{"class":1993},[144,84094,200],{"class":154},[144,84096,84097],{"class":259},"\"amount\"",[144,84099,55327],{"class":154},[144,84101,144],{"class":51313},[144,84103,55327],{"class":154},[144,84105,51624],{"class":51313},[144,84107,51320],{"class":154},[144,84109,84110,84112,84114],{"class":146,"line":32646},[144,84111,52430],{"class":154},[144,84113,51624],{"class":51313},[144,84115,51320],{"class":154},[144,84117,84118,84120,84122],{"class":146,"line":32652},[144,84119,52157],{"class":154},[144,84121,51826],{"class":51313},[144,84123,51320],{"class":154},[144,84125,84126,84128,84130,84132],{"class":146,"line":32658},[144,84127,11252],{"class":150},[144,84129,79390],{"class":203},[144,84131,13595],{"class":150},[144,84133,55460],{"class":154},[144,84135,84136],{"class":146,"line":32664},[144,84137,79399],{"class":154},[144,84139,84140,84142,84144],{"class":146,"line":32670},[144,84141,79404],{"class":154},[144,84143,79407],{"class":259},[144,84145,31479],{"class":154},[144,84147,84148,84150,84152],{"class":146,"line":32681},[144,84149,79414],{"class":154},[144,84151,79417],{"class":259},[144,84153,31479],{"class":154},[144,84155,84156,84158,84161],{"class":146,"line":32687},[144,84157,79424],{"class":154},[144,84159,84160],{"class":203},"289.9",[144,84162,31479],{"class":154},[144,84164,84165,84167,84169],{"class":146,"line":32707},[144,84166,79434],{"class":154},[144,84168,79437],{"class":259},[144,84170,31479],{"class":154},[144,84172,84173,84176,84178],{"class":146,"line":32713},[144,84174,84175],{"class":154},"        count: ",[144,84177,232],{"class":203},[144,84179,31479],{"class":154},[144,84181,84182,84185,84188],{"class":146,"line":32724},[144,84183,84184],{"class":154},"        spec: { color: ",[144,84186,84187],{"class":259},"'白色'",[144,84189,55617],{"class":154},[144,84191,84192],{"class":146,"line":32730},[144,84193,77905],{"class":154},[144,84195,84196],{"class":146,"line":32736},[144,84197,79399],{"class":154},[144,84199,84200,84202,84204],{"class":146,"line":32742},[144,84201,79404],{"class":154},[144,84203,79498],{"class":259},[144,84205,31479],{"class":154},[144,84207,84208,84210,84212],{"class":146,"line":32748},[144,84209,79414],{"class":154},[144,84211,79507],{"class":259},[144,84213,31479],{"class":154},[144,84215,84216,84218,84221],{"class":146,"line":32754},[144,84217,79424],{"class":154},[144,84219,84220],{"class":203},"109.8",[144,84222,31479],{"class":154},[144,84224,84225,84227,84229],{"class":146,"line":32760},[144,84226,79434],{"class":154},[144,84228,79525],{"class":259},[144,84230,31479],{"class":154},[144,84232,84233,84235,84237],{"class":146,"line":32766},[144,84234,84175],{"class":154},[144,84236,226],{"class":203},[144,84238,31479],{"class":154},[144,84240,84241,84244,84246,84248,84250],{"class":146,"line":32786},[144,84242,84243],{"class":154},"        spec: { size: ",[144,84245,81916],{"class":259},[144,84247,55477],{"class":154},[144,84249,81921],{"class":259},[144,84251,55617],{"class":154},[144,84253,84254],{"class":146,"line":32792},[144,84255,77905],{"class":154},[144,84257,84258],{"class":146,"line":32808},[144,84259,79399],{"class":154},[144,84261,84262,84264,84266],{"class":146,"line":32814},[144,84263,79404],{"class":154},[144,84265,79542],{"class":259},[144,84267,31479],{"class":154},[144,84269,84270,84272,84274],{"class":146,"line":32828},[144,84271,79414],{"class":154},[144,84273,79551],{"class":259},[144,84275,31479],{"class":154},[144,84277,84278,84280,84283],{"class":146,"line":32834},[144,84279,79424],{"class":154},[144,84281,84282],{"class":203},"488",[144,84284,31479],{"class":154},[144,84286,84287,84289,84291],{"class":146,"line":32849},[144,84288,79434],{"class":154},[144,84290,79569],{"class":259},[144,84292,31479],{"class":154},[144,84294,84295,84297,84299],{"class":146,"line":32855},[144,84296,84175],{"class":154},[144,84298,372],{"class":203},[144,84300,31479],{"class":154},[144,84302,84303,84305,84308,84311,84314],{"class":146,"line":32864},[144,84304,84184],{"class":154},[144,84306,84307],{"class":259},"'青色'",[144,84309,84310],{"class":154},", sum: ",[144,84312,84313],{"class":259},"'一大四小'",[144,84315,55617],{"class":154},[144,84317,84318],{"class":146,"line":32870},[144,84319,77905],{"class":154},[144,84321,84322],{"class":146,"line":32879},[144,84323,79399],{"class":154},[144,84325,84326,84328,84330],{"class":146,"line":32885},[144,84327,79404],{"class":154},[144,84329,79586],{"class":259},[144,84331,31479],{"class":154},[144,84333,84334,84336,84338],{"class":146,"line":32891},[144,84335,79414],{"class":154},[144,84337,79595],{"class":259},[144,84339,31479],{"class":154},[144,84341,84342,84344,84347],{"class":146,"line":32900},[144,84343,79424],{"class":154},[144,84345,84346],{"class":203},"139",[144,84348,31479],{"class":154},[144,84350,84351,84353,84355],{"class":146,"line":32906},[144,84352,79434],{"class":154},[144,84354,79613],{"class":259},[144,84356,31479],{"class":154},[144,84358,84359,84361,84363],{"class":146,"line":32917},[144,84360,84175],{"class":154},[144,84362,372],{"class":203},[144,84364,31479],{"class":154},[144,84366,84367,84369,84372,84374,84377],{"class":146,"line":32923},[144,84368,84243],{"class":154},[144,84370,84371],{"class":259},"'小号'",[144,84373,55477],{"class":154},[144,84375,84376],{"class":259},"'紫色'",[144,84378,55483],{"class":154},[144,84380,84381,84384],{"class":146,"line":32942},[144,84382,84383],{"class":154},"        gift: ",[144,84385,84386],{"class":259},"'50g茶叶,清洗球'\n",[144,84388,84389],{"class":146,"line":32948},[144,84390,52411],{"class":154},[144,84392,84393],{"class":146,"line":32959},[144,84394,53122],{"class":154},[144,84396,84397],{"class":146,"line":32965},[144,84398,84399],{"class":213},"    \u002F\u002F  1.根据数据渲染页面\n",[144,84401,84402,84404,84406,84408,84410,84412,84414,84416,84418,84420,84422,84424],{"class":146,"line":32985},[144,84403,52420],{"class":154},[144,84405,54412],{"class":1993},[144,84407,155],{"class":154},[144,84409,79914],{"class":259},[144,84411,74262],{"class":154},[144,84413,200],{"class":150},[144,84415,80061],{"class":154},[144,84417,74057],{"class":1993},[144,84419,155],{"class":154},[144,84421,79808],{"class":5247},[144,84423,79811],{"class":150},[144,84425,15603],{"class":154},[144,84427,84428],{"class":146,"line":33001},[144,84429,84430],{"class":213},"      \u002F\u002F 对象解构\n",[144,84432,84433,84435,84437,84439,84441,84443,84445,84448,84450,84452,84454,84457,84459,84462,84464,84466],{"class":146,"line":33007},[144,84434,58241],{"class":150},[144,84436,79820],{"class":154},[144,84438,79833],{"class":203},[144,84440,12466],{"class":154},[144,84442,79823],{"class":203},[144,84444,12466],{"class":154},[144,84446,84447],{"class":203},"count",[144,84449,12466],{"class":154},[144,84451,79828],{"class":203},[144,84453,12466],{"class":154},[144,84455,84456],{"class":203},"spec",[144,84458,12466],{"class":154},[144,84460,84461],{"class":203},"gift",[144,84463,79836],{"class":154},[144,84465,200],{"class":150},[144,84467,79841],{"class":154},[144,84469,84470],{"class":146,"line":33021},[144,84471,84472],{"class":213},"      \u002F\u002F 规格文字模块处理\n",[144,84474,84475,84477,84480,84482,84484,84486,84488,84490,84492,84494],{"class":146,"line":33027},[144,84476,58241],{"class":150},[144,84478,84479],{"class":203}," text",[144,84481,13595],{"class":150},[144,84483,81951],{"class":154},[144,84485,81954],{"class":1993},[144,84487,81957],{"class":154},[144,84489,74236],{"class":1993},[144,84491,155],{"class":154},[144,84493,81964],{"class":259},[144,84495,161],{"class":154},[144,84497,84498],{"class":146,"line":33033},[144,84499,84500],{"class":213},"      \u002F\u002F 处理赠品模块\n",[144,84502,84503,84505,84507,84509,84512,84514,84516,84518,84520,84523,84525,84527,84529,84531,84533,84536,84538,84541,84543,84545,84547,84549,84551,84553],{"class":146,"line":33044},[144,84504,58241],{"class":150},[144,84506,73932],{"class":203},[144,84508,13595],{"class":150},[144,84510,84511],{"class":154}," gift ",[144,84513,1141],{"class":150},[144,84515,83125],{"class":154},[144,84517,83128],{"class":1993},[144,84519,155],{"class":154},[144,84521,84522],{"class":259},"','",[144,84524,30839],{"class":154},[144,84526,74057],{"class":1993},[144,84528,155],{"class":154},[144,84530,79808],{"class":5247},[144,84532,79811],{"class":150},[144,84534,84535],{"class":259}," `\u003Cspan class=\"tag\">【赠品】${",[144,84537,79808],{"class":154},[144,84539,84540],{"class":259},"}\u003C\u002Fspan>`",[144,84542,30839],{"class":154},[144,84544,74236],{"class":1993},[144,84546,155],{"class":154},[144,84548,74241],{"class":259},[144,84550,13745],{"class":154},[144,84552,1014],{"class":150},[144,84554,70117],{"class":259},[144,84556,84557],{"class":146,"line":33050},[144,84558,84559],{"class":213},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[144,84561,84562,84564,84567,84569,84572,84574,84576,84578,84581,84583,84585,84587,84590,84592,84594],{"class":146,"line":33056},[144,84563,58241],{"class":150},[144,84565,84566],{"class":203}," subtotal",[144,84568,13595],{"class":150},[144,84570,84571],{"class":154}," ((price ",[144,84573,610],{"class":150},[144,84575,5785],{"class":203},[144,84577,6549],{"class":150},[144,84579,84580],{"class":154}," count) ",[144,84582,739],{"class":150},[144,84584,5785],{"class":203},[144,84586,30839],{"class":154},[144,84588,84589],{"class":1993},"toFixed",[144,84591,155],{"class":154},[144,84593,232],{"class":203},[144,84595,161],{"class":154},[144,84597,84598],{"class":146,"line":33066},[144,84599,2430],{"emptyLinePlaceholder":72},[144,84601,84602,84604],{"class":146,"line":33072},[144,84603,73995],{"class":150},[144,84605,70181],{"class":259},[144,84607,84608],{"class":146,"line":33083},[144,84609,84610],{"class":259},"        \u003Cdiv class=\"item\">\n",[144,84612,84613,84616,84618],{"class":146,"line":33089},[144,84614,84615],{"class":259},"          \u003Cimg src=\"${",[144,84617,79833],{"class":154},[144,84619,79865],{"class":259},[144,84621,84622,84625,84627,84630,84632],{"class":146,"line":33099},[144,84623,84624],{"class":259},"          \u003Cp class=\"name\">${",[144,84626,79823],{"class":154},[144,84628,84629],{"class":259},"}${",[144,84631,1330],{"class":154},[144,84633,79875],{"class":259},[144,84635,84636,84639,84641],{"class":146,"line":33104},[144,84637,84638],{"class":259},"          \u003Cp class=\"spec\">${",[144,84640,5218],{"class":154},[144,84642,79875],{"class":259},[144,84644,84645,84648,84650,84652,84654,84656,84658,84660],{"class":146,"line":33110},[144,84646,84647],{"class":259},"          \u003Cp class=\"price\">${",[144,84649,79828],{"class":154},[144,84651,713],{"class":259},[144,84653,84589],{"class":1993},[144,84655,155],{"class":259},[144,84657,232],{"class":203},[144,84659,584],{"class":259},[144,84661,79875],{"class":259},[144,84663,84664,84667,84669],{"class":146,"line":33159},[144,84665,84666],{"class":259},"          \u003Cp class=\"count\">x${",[144,84668,84447],{"class":154},[144,84670,79875],{"class":259},[144,84672,84673,84676,84679],{"class":146,"line":33206},[144,84674,84675],{"class":259},"          \u003Cp class=\"sub-total\">${",[144,84677,84678],{"class":154},"subtotal",[144,84680,79875],{"class":259},[144,84682,84683],{"class":146,"line":33211},[144,84684,84685],{"class":259},"        \u003C\u002Fdiv> \n",[144,84687,84688],{"class":146,"line":33217},[144,84689,84690],{"class":259},"             `\n",[144,84692,84693,84696,84698,84700,84702],{"class":146,"line":33236},[144,84694,84695],{"class":154},"    }).",[144,84697,74236],{"class":1993},[144,84699,155],{"class":154},[144,84701,74241],{"class":259},[144,84703,161],{"class":154},[144,84705,84706],{"class":146,"line":33242},[144,84707,84708],{"class":213},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[144,84710,84711,84713,84715,84717,84719,84722,84724,84727,84729,84731,84733,84736,84739,84741,84744,84746,84748,84750,84753,84755,84757,84759,84761],{"class":146,"line":33262},[144,84712,11252],{"class":150},[144,84714,62798],{"class":203},[144,84716,13595],{"class":150},[144,84718,80061],{"class":154},[144,84720,84721],{"class":1993},"reduce",[144,84723,2406],{"class":154},[144,84725,84726],{"class":5247},"prev",[144,84728,12466],{"class":154},[144,84730,79808],{"class":5247},[144,84732,13745],{"class":154},[144,84734,84735],{"class":150},"=>",[144,84737,84738],{"class":154}," prev ",[144,84740,636],{"class":150},[144,84742,84743],{"class":154}," (item.price ",[144,84745,610],{"class":150},[144,84747,5785],{"class":203},[144,84749,6549],{"class":150},[144,84751,84752],{"class":154}," item.count) ",[144,84754,739],{"class":150},[144,84756,5785],{"class":203},[144,84758,12466],{"class":154},[144,84760,346],{"class":203},[144,84762,161],{"class":154},[144,84764,84765,84767,84769,84771,84774,84776,84778,84781,84783,84785,84787],{"class":146,"line":33268},[144,84766,52420],{"class":154},[144,84768,54412],{"class":1993},[144,84770,155],{"class":154},[144,84772,84773],{"class":259},"'.amount'",[144,84775,74262],{"class":154},[144,84777,200],{"class":150},[144,84779,84780],{"class":154}," total.",[144,84782,84589],{"class":1993},[144,84784,155],{"class":154},[144,84786,232],{"class":203},[144,84788,161],{"class":154},[144,84790,84791,84793,84795],{"class":146,"line":33274},[144,84792,52430],{"class":154},[144,84794,51826],{"class":51313},[144,84796,51320],{"class":154},[144,84798,84799,84801,84803],{"class":146,"line":33284},[144,84800,51798],{"class":154},[144,84802,51813],{"class":51313},[144,84804,51320],{"class":154},[144,84806,84807],{"class":146,"line":33289},[144,84808,2430],{"emptyLinePlaceholder":72},[144,84810,84811,84813,84815],{"class":146,"line":33295},[144,84812,51798],{"class":154},[144,84814,50648],{"class":51313},[144,84816,51320],{"class":154},[18,84818,84820],{"id":84819},"_411-编程思想","4.11 编程思想",[115,84822,84824],{"id":84823},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,84826,84827,84830],{},[304,84828,84829],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,84832,84833],{},"调用就可以了",[14,84835,84836],{},[28,84837],{"alt":30,"src":84838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[115,84840,84842],{"id":84841},"_4112-面向对象","4.11.2 面向对象",[14,84844,84845],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,84847,84848],{},[28,84849],{"alt":30,"src":84850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,84852,84853],{},"面向对象的特性：",[1162,84855,84856,84859,84862],{},[101,84857,84858],{},"封装性",[101,84860,84861],{},"继承性",[101,84863,84864],{},"多态性",[115,84866,84868],{"id":84867},"_4113-两者比较","4.11.3 两者比较",[14,84870,84871],{},[28,84872],{"alt":30,"src":84873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[18,84875,84877],{"id":84876},"_412-构造函数回顾","4.12 构造函数回顾",[14,84879,84880],{},[28,84881],{"alt":30,"src":84882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,84884,84885],{},[28,84886],{"alt":30,"src":84887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,84889,84890],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,84892,84893],{},[28,84894],{"alt":30,"src":84895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[18,84897,84899],{"id":84898},"_413-原型","4.13 原型",[115,84901,84903],{"id":84902},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,84905,84906],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,84908,84909],{},[28,84910],{"alt":30,"src":84911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,84913,84914],{},[28,84915],{"alt":30,"src":84916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,84918,84919],{},"原型是构造函数的属性，它也是一个对象",[14,84921,84922],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,84924,84925],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[135,84927,84929],{"className":53080,"code":84928,"language":53082,"meta":30,"style":30},"\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",[141,84930,84931,84939,84944,84952,84957,84962,84967,84972,84977,84981,84985,84989,84994,84999,85003,85008,85013,85018,85023,85028,85032,85040],{"__ignoreMap":30},[144,84932,84933,84935,84937],{"class":146,"line":147},[144,84934,1065],{"class":154},[144,84936,51813],{"class":51313},[144,84938,51320],{"class":154},[144,84940,84941],{"class":146,"line":66},[144,84942,84943],{"class":213},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[144,84945,84946,84948,84950],{"class":146,"line":1210},[144,84947,52157],{"class":154},[144,84949,51826],{"class":51313},[144,84951,51320],{"class":154},[144,84953,84954],{"class":146,"line":1225},[144,84955,84956],{"class":154},"    function Star(uname, age) {\n",[144,84958,84959],{"class":146,"line":1231},[144,84960,84961],{"class":154},"      this.uname = uname,\n",[144,84963,84964],{"class":146,"line":1245},[144,84965,84966],{"class":154},"        this.age = age\n",[144,84968,84969],{"class":146,"line":1251},[144,84970,84971],{"class":154},"      \u002F\u002F this.sing = function () {\n",[144,84973,84974],{"class":146,"line":1342},[144,84975,84976],{"class":154},"      \u002F\u002F   console.log('唱歌')\n",[144,84978,84979],{"class":146,"line":1348},[144,84980,2430],{"emptyLinePlaceholder":72},[144,84982,84983],{"class":146,"line":1360},[144,84984,60050],{"class":154},[144,84986,84987],{"class":146,"line":1642},[144,84988,2217],{"class":154},[144,84990,84991],{"class":146,"line":1647},[144,84992,84993],{"class":154},"    Star.prototype.sing = function () {\n",[144,84995,84996],{"class":146,"line":1653},[144,84997,84998],{"class":154},"      console.log('唱歌')\n",[144,85000,85001],{"class":146,"line":1658},[144,85002,2217],{"class":154},[144,85004,85005],{"class":146,"line":1672},[144,85006,85007],{"class":154},"    \u002F\u002F console.dir(Star.prototype)\n",[144,85009,85010],{"class":146,"line":1677},[144,85011,85012],{"class":154},"    const pink = new Star('pink', 18)\n",[144,85014,85015],{"class":146,"line":1683},[144,85016,85017],{"class":154},"    const red = new Star('red', 20)\n",[144,85019,85020],{"class":146,"line":1704},[144,85021,85022],{"class":154},"    pink.sing()\n",[144,85024,85025],{"class":146,"line":1709},[144,85026,85027],{"class":154},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[144,85029,85030],{"class":146,"line":1723},[144,85031,2430],{"emptyLinePlaceholder":72},[144,85033,85034,85036,85038],{"class":146,"line":1728},[144,85035,52430],{"class":154},[144,85037,51826],{"class":51313},[144,85039,51320],{"class":154},[144,85041,85042,85044,85046],{"class":146,"line":1757},[144,85043,51798],{"class":154},[144,85045,51813],{"class":51313},[144,85047,51320],{"class":154},[14,85049,85050],{},[28,85051],{"alt":30,"src":85052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[135,85054,85056],{"className":53080,"code":85055,"language":53082,"meta":30,"style":30},"\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",[141,85057,85058,85066,85074,85079,85084,85089,85094,85098,85103,85108,85113,85117,85122,85126,85130,85135,85139,85147],{"__ignoreMap":30},[144,85059,85060,85062,85064],{"class":146,"line":147},[144,85061,1065],{"class":154},[144,85063,51813],{"class":51313},[144,85065,51320],{"class":154},[144,85067,85068,85070,85072],{"class":146,"line":66},[144,85069,52157],{"class":154},[144,85071,51826],{"class":51313},[144,85073,51320],{"class":154},[144,85075,85076],{"class":146,"line":1210},[144,85077,85078],{"class":154},"    let that\n",[144,85080,85081],{"class":146,"line":1225},[144,85082,85083],{"class":154},"    function Star(uname) {\n",[144,85085,85086],{"class":146,"line":1231},[144,85087,85088],{"class":154},"      this.uname = uname\n",[144,85090,85091],{"class":146,"line":1245},[144,85092,85093],{"class":154},"      that = this\n",[144,85095,85096],{"class":146,"line":1251},[144,85097,2217],{"class":154},[144,85099,85100],{"class":146,"line":1342},[144,85101,85102],{"class":154},"    \u002F\u002F 实例对象是 ldh\n",[144,85104,85105],{"class":146,"line":1348},[144,85106,85107],{"class":154},"    const ldh = new Star('刘德华')\n",[144,85109,85110],{"class":146,"line":1360},[144,85111,85112],{"class":154},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[144,85114,85115],{"class":146,"line":1642},[144,85116,2430],{"emptyLinePlaceholder":72},[144,85118,85119],{"class":146,"line":1647},[144,85120,85121],{"class":154},"    Star.sing = function () {\n",[144,85123,85124],{"class":146,"line":1653},[144,85125,84998],{"class":154},[144,85127,85128],{"class":146,"line":1658},[144,85129,2217],{"class":154},[144,85131,85132],{"class":146,"line":1672},[144,85133,85134],{"class":154},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[144,85136,85137],{"class":146,"line":1677},[144,85138,2430],{"emptyLinePlaceholder":72},[144,85140,85141,85143,85145],{"class":146,"line":1683},[144,85142,52430],{"class":154},[144,85144,51826],{"class":51313},[144,85146,51320],{"class":154},[144,85148,85149,85151,85153],{"class":146,"line":1704},[144,85150,51798],{"class":154},[144,85152,51813],{"class":51313},[144,85154,51320],{"class":154},[14,85156,85157],{},"构造函数的this指向的是实例对象；",[14,85159,85160],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[115,85162,85164],{"id":85163},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85166,85167],{},[28,85168],{"alt":30,"src":85169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[135,85171,85173],{"className":53080,"code":85172,"language":53082,"meta":30,"style":30},"\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",[141,85174,85175,85183,85191,85196,85201,85206,85211,85216,85221,85226,85231,85236,85241,85245,85250,85255,85260,85265,85269,85274,85279,85284,85289,85293,85298,85303,85308,85313,85317,85322,85326,85334],{"__ignoreMap":30},[144,85176,85177,85179,85181],{"class":146,"line":147},[144,85178,1065],{"class":154},[144,85180,51813],{"class":51313},[144,85182,51320],{"class":154},[144,85184,85185,85187,85189],{"class":146,"line":66},[144,85186,52157],{"class":154},[144,85188,51826],{"class":51313},[144,85190,51320],{"class":154},[144,85192,85193],{"class":146,"line":1210},[144,85194,85195],{"class":154},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[144,85197,85198],{"class":146,"line":1225},[144,85199,85200],{"class":154},"    const arr = [1, 2, 3]\n",[144,85202,85203],{"class":146,"line":1231},[144,85204,85205],{"class":154},"    \u002F\u002F 自己定义数组的扩展方法\n",[144,85207,85208],{"class":146,"line":1245},[144,85209,85210],{"class":154},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[144,85212,85213],{"class":146,"line":1251},[144,85214,85215],{"class":154},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[144,85217,85218],{"class":146,"line":1342},[144,85219,85220],{"class":154},"    \u002F\u002F ①.最大值\n",[144,85222,85223],{"class":146,"line":1348},[144,85224,85225],{"class":154},"    Array.prototype.max = function () {\n",[144,85227,85228],{"class":146,"line":1360},[144,85229,85230],{"class":154},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[144,85232,85233],{"class":146,"line":1642},[144,85234,85235],{"class":154},"      return Math.max(...this)\n",[144,85237,85238],{"class":146,"line":1647},[144,85239,85240],{"class":154},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[144,85242,85243],{"class":146,"line":1653},[144,85244,2217],{"class":154},[144,85246,85247],{"class":146,"line":1658},[144,85248,85249],{"class":154},"    console.log(arr.max())\n",[144,85251,85252],{"class":146,"line":1672},[144,85253,85254],{"class":154},"    \u002F\u002F ②最小值\n",[144,85256,85257],{"class":146,"line":1677},[144,85258,85259],{"class":154},"    Array.prototype.min = function () {\n",[144,85261,85262],{"class":146,"line":1683},[144,85263,85264],{"class":154},"      return Math.min(...this)\n",[144,85266,85267],{"class":146,"line":1704},[144,85268,2217],{"class":154},[144,85270,85271],{"class":146,"line":1709},[144,85272,85273],{"class":154},"    console.log(arr.min())\n",[144,85275,85276],{"class":146,"line":1723},[144,85277,85278],{"class":154},"    \u002F\u002F③求和\n",[144,85280,85281],{"class":146,"line":1728},[144,85282,85283],{"class":154},"    Array.prototype.sum = function () {\n",[144,85285,85286],{"class":146,"line":1757},[144,85287,85288],{"class":154},"      return this.reduce((prev, current) => prev + current, 0)\n",[144,85290,85291],{"class":146,"line":1762},[144,85292,2217],{"class":154},[144,85294,85295],{"class":146,"line":1779},[144,85296,85297],{"class":154},"    console.log(arr.sum())\n",[144,85299,85300],{"class":146,"line":1784},[144,85301,85302],{"class":154},"    \u002F\u002F ③排序\n",[144,85304,85305],{"class":146,"line":1789},[144,85306,85307],{"class":154},"    Array.prototype.rever = function () {\n",[144,85309,85310],{"class":146,"line":1794},[144,85311,85312],{"class":154},"      return this.reverse()\n",[144,85314,85315],{"class":146,"line":1808},[144,85316,2217],{"class":154},[144,85318,85319],{"class":146,"line":1813},[144,85320,85321],{"class":154},"    console.log(arr.rever())\n",[144,85323,85324],{"class":146,"line":2607},[144,85325,2430],{"emptyLinePlaceholder":72},[144,85327,85328,85330,85332],{"class":146,"line":2621},[144,85329,52430],{"class":154},[144,85331,51826],{"class":51313},[144,85333,51320],{"class":154},[144,85335,85336,85338,85340],{"class":146,"line":2629},[144,85337,51798],{"class":154},[144,85339,51813],{"class":51313},[144,85341,51320],{"class":154},[14,85343,85344],{},[28,85345],{"alt":30,"src":85346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[115,85348,85350],{"id":85349},"_4133-constructor-属性","4.13.3 constructor 属性",[14,85352,85353],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,85355,85356],{},[28,85357],{"alt":30,"src":85358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[135,85360,85362],{"className":53080,"code":85361,"language":53082,"meta":30,"style":30},"\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",[141,85363,85364,85372,85380,85385,85390,85394,85399,85404,85409,85417],{"__ignoreMap":30},[144,85365,85366,85368,85370],{"class":146,"line":147},[144,85367,1065],{"class":154},[144,85369,51813],{"class":51313},[144,85371,51320],{"class":154},[144,85373,85374,85376,85378],{"class":146,"line":66},[144,85375,52157],{"class":154},[144,85377,51826],{"class":51313},[144,85379,51320],{"class":154},[144,85381,85382],{"class":146,"line":1210},[144,85383,85384],{"class":154},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[144,85386,85387],{"class":146,"line":1225},[144,85388,85389],{"class":154},"    function Star() {\n",[144,85391,85392],{"class":146,"line":1231},[144,85393,2217],{"class":154},[144,85395,85396],{"class":146,"line":1245},[144,85397,85398],{"class":154},"    const ldh = new Star()\n",[144,85400,85401],{"class":146,"line":1251},[144,85402,85403],{"class":154},"    console.log(Star.prototype)\n",[144,85405,85406],{"class":146,"line":1342},[144,85407,85408],{"class":154},"    console.log(Star.prototype.constructor === Star)\n",[144,85410,85411,85413,85415],{"class":146,"line":1348},[144,85412,52430],{"class":154},[144,85414,51826],{"class":51313},[144,85416,51320],{"class":154},[144,85418,85419,85421,85423],{"class":146,"line":1360},[144,85420,51798],{"class":154},[144,85422,51813],{"class":51313},[144,85424,51320],{"class":154},[14,85426,85427],{},[28,85428],{"alt":30,"src":85429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,85431,85432],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[135,85434,85436],{"className":53080,"code":85435,"language":53082,"meta":30,"style":30},"  \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",[141,85437,85438,85446,85450,85454,85458,85463,85468,85473,85477,85482,85487,85492,85497,85502,85507,85511,85515,85520,85525,85530,85534,85539,85544,85548,85552,85556],{"__ignoreMap":30},[144,85439,85440,85442,85444],{"class":146,"line":147},[144,85441,52157],{"class":154},[144,85443,51826],{"class":51313},[144,85445,51320],{"class":154},[144,85447,85448],{"class":146,"line":66},[144,85449,85384],{"class":154},[144,85451,85452],{"class":146,"line":1210},[144,85453,85389],{"class":154},[144,85455,85456],{"class":146,"line":1225},[144,85457,2217],{"class":154},[144,85459,85460],{"class":146,"line":1231},[144,85461,85462],{"class":154},"    \u002F\u002F const ldh = new Star()\n",[144,85464,85465],{"class":146,"line":1245},[144,85466,85467],{"class":154},"    \u002F\u002F console.log(Star.prototype)\n",[144,85469,85470],{"class":146,"line":1251},[144,85471,85472],{"class":154},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[144,85474,85475],{"class":146,"line":1342},[144,85476,2430],{"emptyLinePlaceholder":72},[144,85478,85479],{"class":146,"line":1348},[144,85480,85481],{"class":154},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[144,85483,85484],{"class":146,"line":1360},[144,85485,85486],{"class":154},"    \u002F\u002F Star.prototype.sing = function () {\n",[144,85488,85489],{"class":146,"line":1642},[144,85490,85491],{"class":154},"    \u002F\u002F   console.log('唱歌')\n",[144,85493,85494],{"class":146,"line":1647},[144,85495,85496],{"class":154},"    \u002F\u002F }\n",[144,85498,85499],{"class":146,"line":1653},[144,85500,85501],{"class":154},"    \u002F\u002F Star.prototype.dance = function () {\n",[144,85503,85504],{"class":146,"line":1658},[144,85505,85506],{"class":154},"    \u002F\u002F   console.log('跳舞')\n",[144,85508,85509],{"class":146,"line":1672},[144,85510,85496],{"class":154},[144,85512,85513],{"class":146,"line":1677},[144,85514,85403],{"class":154},[144,85516,85517],{"class":146,"line":1683},[144,85518,85519],{"class":154},"    Star.prototype = {\n",[144,85521,85522],{"class":146,"line":1704},[144,85523,85524],{"class":154},"      sing: function () {\n",[144,85526,85527],{"class":146,"line":1709},[144,85528,85529],{"class":154},"        console.log('唱歌')\n",[144,85531,85532],{"class":146,"line":1723},[144,85533,77905],{"class":154},[144,85535,85536],{"class":146,"line":1728},[144,85537,85538],{"class":154},"      dance: function () {\n",[144,85540,85541],{"class":146,"line":1757},[144,85542,85543],{"class":154},"        console.log('跳舞')\n",[144,85545,85546],{"class":146,"line":1762},[144,85547,52411],{"class":154},[144,85549,85550],{"class":146,"line":1779},[144,85551,2217],{"class":154},[144,85553,85554],{"class":146,"line":1784},[144,85555,85403],{"class":154},[144,85557,85558,85560,85562],{"class":146,"line":1789},[144,85559,52430],{"class":154},[144,85561,51826],{"class":51313},[144,85563,51320],{"class":154},[14,85565,85566],{},"进行输出结果后会发现：",[14,85568,85569],{},[28,85570],{"alt":30,"src":85571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,85573,85574],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,85576,85577],{},"所以，要重新指回创造这个原型对象的构造函数",[135,85579,85581],{"className":71226,"code":85580,"language":71228,"meta":30,"style":30},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[141,85582,85583,85597,85602,85607,85618,85631,85636,85647,85661,85665],{"__ignoreMap":30},[144,85584,85585,85588,85590,85593,85595],{"class":146,"line":147},[144,85586,85587],{"class":203},"Star",[144,85589,713],{"class":154},[144,85591,85592],{"class":203},"prototype",[144,85594,13595],{"class":150},[144,85596,15603],{"class":154},[144,85598,85599],{"class":146,"line":66},[144,85600,85601],{"class":213},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[144,85603,85604],{"class":146,"line":1210},[144,85605,85606],{"class":154},"  constructor: Star,\n",[144,85608,85609,85612,85614,85616],{"class":146,"line":1225},[144,85610,85611],{"class":1993},"  sing",[144,85613,51450],{"class":154},[144,85615,54462],{"class":150},[144,85617,54465],{"class":154},[144,85619,85620,85622,85624,85626,85629],{"class":146,"line":1231},[144,85621,73766],{"class":154},[144,85623,58260],{"class":1993},[144,85625,155],{"class":154},[144,85627,85628],{"class":259},"'唱歌'",[144,85630,161],{"class":154},[144,85632,85633],{"class":146,"line":1245},[144,85634,85635],{"class":154},"   },\n",[144,85637,85638,85641,85643,85645],{"class":146,"line":1251},[144,85639,85640],{"class":1993},"   dance",[144,85642,51450],{"class":154},[144,85644,54462],{"class":150},[144,85646,54465],{"class":154},[144,85648,85649,85652,85654,85656,85659],{"class":146,"line":1342},[144,85650,85651],{"class":154},"     console.",[144,85653,58260],{"class":1993},[144,85655,155],{"class":154},[144,85657,85658],{"class":259},"'跳舞'",[144,85660,161],{"class":154},[144,85662,85663],{"class":146,"line":1348},[144,85664,4339],{"class":154},[144,85666,85667],{"class":146,"line":1360},[144,85668,1595],{"class":154},[14,85670,85671],{},[28,85672],{"alt":30,"src":85673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,85675,85676],{},"总结1：",[14,85678,85679],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,85681,85682],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,85684,85685],{},"constructor指的是他的来源",[14,85687,85688],{},[28,85689],{"alt":30,"src":85690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,85692,85693],{},[28,85694],{"alt":30,"src":85695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,85697,85698],{},"总结2：",[14,85700,85701],{},[28,85702],{"alt":30,"src":85703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,85705,85706],{},[28,85707],{"alt":30,"src":85708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,85710,85711],{},[28,85712],{"alt":30,"src":85713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[115,85715,85717],{"id":85716},"_4134-对象原型","4.13.4 对象原型",[14,85719,85720],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,85722,85723],{},"对象原型就是__proto__这个属性",[14,85725,85726],{},[28,85727],{"alt":30,"src":85728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,85730,85731],{},[28,85732],{"alt":30,"src":85733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,85735,85736],{},[28,85737],{"alt":30,"src":85738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,85740,85741],{},[28,85742],{"alt":30,"src":85743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[135,85745,85747],{"className":53080,"code":85746,"language":53082,"meta":30,"style":30},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[141,85748,85749,85757,85765,85769,85773,85777,85782,85790],{"__ignoreMap":30},[144,85750,85751,85753,85755],{"class":146,"line":147},[144,85752,1065],{"class":154},[144,85754,51813],{"class":51313},[144,85756,51320],{"class":154},[144,85758,85759,85761,85763],{"class":146,"line":66},[144,85760,52157],{"class":154},[144,85762,51826],{"class":51313},[144,85764,51320],{"class":154},[144,85766,85767],{"class":146,"line":1210},[144,85768,85389],{"class":154},[144,85770,85771],{"class":146,"line":1225},[144,85772,2217],{"class":154},[144,85774,85775],{"class":146,"line":1231},[144,85776,85398],{"class":154},[144,85778,85779],{"class":146,"line":1245},[144,85780,85781],{"class":154},"    console.log(ldh)\n",[144,85783,85784,85786,85788],{"class":146,"line":1251},[144,85785,52430],{"class":154},[144,85787,51826],{"class":51313},[144,85789,51320],{"class":154},[144,85791,85792,85794,85796],{"class":146,"line":1342},[144,85793,51798],{"class":154},[144,85795,51813],{"class":51313},[144,85797,51320],{"class":154},[14,85799,85800],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,85802,85803],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,85805,85806],{},[28,85807],{"alt":30,"src":85808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,85810,85811],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,85813,85814],{},"对象原型指向原型对象",[14,85816,85817],{},[28,85818],{"alt":30,"src":85819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,85821,85822],{},[28,85823],{"alt":30,"src":85824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,85826,85827],{},[28,85828],{"alt":30,"src":85829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[115,85831,85833],{"id":85832},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,85835,85836],{},[28,85837],{"alt":30,"src":85838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[98,85840,85841,85844,85847,85850],{},[101,85842,85843],{},"构造函数通过new的形式实例化得到实例对象",[101,85845,85846],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[101,85848,85849],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[101,85851,85852],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,85854,85855],{},[28,85856],{"alt":30,"src":85857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,85859,85860],{},"题目梳理：",[14,85862,85863],{},[28,85864],{"alt":30,"src":85865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[115,85867,85869],{"id":85868},"_4136-原型继承","4.13.6 原型继承",[14,85871,85872],{},[28,85873],{"alt":30,"src":85874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,85876,85877],{},[28,85878],{"alt":30,"src":85879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,85881,85882],{},[28,85883],{"alt":30,"src":85884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,85886,85887],{},[28,85888],{"alt":30,"src":85889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,85891,85892],{},[28,85893],{"alt":30,"src":85894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,85896,85897],{},[28,85898],{"alt":30,"src":85899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,85901,85902],{},[28,85903],{"alt":30,"src":85904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,85906,85907],{},[28,85908],{"alt":30,"src":85909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,85911,85912],{},"回顾：构造函数每次new得到对象都是不同的",[115,85914,85916],{"id":85915},"_4137-原型链","4.13.7 原型链",[14,85918,85919],{},[28,85920],{"alt":30,"src":85921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,85923,85924],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,85926,85927],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,85929,85930],{},"大哥是Object",[14,85932,85933],{},[28,85934],{"alt":30,"src":85935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,85937,85938],{},[28,85939],{"alt":30,"src":85940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,85942,85943],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,85945,85946],{},"万物皆对象",[115,85948,85950],{"id":85949},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,85952,85953],{},"模态框",[14,85955,85956],{},"以后遇见这个效果直接使用这个就行",[14,85958,85959],{},[28,85960],{"alt":30,"src":85961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,85963,85964],{},[28,85965],{"alt":30,"src":85966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,85968,85969],{},[28,85970],{"alt":30,"src":85971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,85973,85974],{},[28,85975],{"alt":30,"src":85976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,85978,85979],{},"补充知识点：",[98,85981,85982],{},[101,85983,85984],{},"append()",[14,85986,85987],{},[28,85988],{"alt":30,"src":85989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[135,85991,85993],{"className":50646,"code":85992,"language":50648,"meta":30,"style":30},"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",[141,85994,85995,86000,86005,86010,86014,86018,86022,86027,86032,86037,86041],{"__ignoreMap":30},[144,85996,85997],{"class":146,"line":147},[144,85998,85999],{"class":154},"append(param1)\n",[144,86001,86002],{"class":146,"line":66},[144,86003,86004],{"class":154},"append(param1, param2)\n",[144,86006,86007],{"class":146,"line":1210},[144,86008,86009],{"class":154},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[144,86011,86012],{"class":146,"line":1225},[144,86013,2430],{"emptyLinePlaceholder":72},[144,86015,86016],{"class":146,"line":1231},[144,86017,2430],{"emptyLinePlaceholder":72},[144,86019,86020],{"class":146,"line":1245},[144,86021,2430],{"emptyLinePlaceholder":72},[144,86023,86024],{"class":146,"line":1251},[144,86025,86026],{"class":154},"let div = document.createElement(\"div\");\n",[144,86028,86029],{"class":146,"line":1342},[144,86030,86031],{"class":154},"let p = document.createElement(\"p\");\n",[144,86033,86034],{"class":146,"line":1348},[144,86035,86036],{"class":154},"div.append(p);\n",[144,86038,86039],{"class":146,"line":1360},[144,86040,2430],{"emptyLinePlaceholder":72},[144,86042,86043,86046,86048],{"class":146,"line":1642},[144,86044,86045],{"class":154},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[144,86047,14],{"class":51313},[144,86049,86050],{"class":154},"> ]\n",[98,86052,86053],{"start":66},[101,86054,86055],{},"remove()",[14,86057,86058],{},"自己删自己",[14,86060,86061],{},[28,86062],{"alt":30,"src":86063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[135,86065,86067],{"className":50646,"code":86066,"language":50648,"meta":30,"style":30},"\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",[141,86068,86069,86079,86093,86097,86105,86119,86139,86151,86159,86166,86178,86191,86226,86238,86249,86261,86273,86285,86312,86322,86326,86330,86339,86351,86365,86375,86387,86391,86395,86405,86416,86426,86436,86449,86462,86472,86476,86480,86489,86499,86511,86515,86519,86528,86538,86548,86560,86564,86568,86578,86594,86605,86615,86625,86637,86649,86661,86665,86669,86682,86693,86697,86705,86713,86717,86725,86745,86765,86773,86778,86804,86809,86814,86833,86838,86850,86855,86866,86876,86886,86891,86896,86900,86905,86910,86915,86935,86940,86960,86965,86979,86984,86989,86994,87010,87014,87019,87048,87053,87058,87063,87074,87078,87082,87086,87091,87116,87121,87146,87151,87160,87164,87169,87194,87198,87223,87227,87236,87240,87245,87263,87273,87277,87285,87293,87297],{"__ignoreMap":30},[144,86070,86071,86073,86075,86077],{"class":146,"line":147},[144,86072,51310],{"class":154},[144,86074,51314],{"class":51313},[144,86076,51317],{"class":1993},[144,86078,51320],{"class":154},[144,86080,86081,86083,86085,86087,86089,86091],{"class":146,"line":66},[144,86082,1065],{"class":154},[144,86084,50648],{"class":51313},[144,86086,51329],{"class":1993},[144,86088,200],{"class":154},[144,86090,51334],{"class":259},[144,86092,51320],{"class":154},[144,86094,86095],{"class":146,"line":1210},[144,86096,2430],{"emptyLinePlaceholder":72},[144,86098,86099,86101,86103],{"class":146,"line":1225},[144,86100,1065],{"class":154},[144,86102,51347],{"class":51313},[144,86104,51320],{"class":154},[144,86106,86107,86109,86111,86113,86115,86117],{"class":146,"line":1231},[144,86108,52157],{"class":154},[144,86110,51357],{"class":51313},[144,86112,51360],{"class":1993},[144,86114,200],{"class":154},[144,86116,51365],{"class":259},[144,86118,51320],{"class":154},[144,86120,86121,86123,86125,86127,86129,86131,86133,86135,86137],{"class":146,"line":1245},[144,86122,52157],{"class":154},[144,86124,51357],{"class":51313},[144,86126,14951],{"class":1993},[144,86128,200],{"class":154},[144,86130,51404],{"class":259},[144,86132,51384],{"class":1993},[144,86134,200],{"class":154},[144,86136,51411],{"class":259},[144,86138,51320],{"class":154},[144,86140,86141,86143,86145,86147,86149],{"class":146,"line":1251},[144,86142,52157],{"class":154},[144,86144,51420],{"class":51313},[144,86146,51423],{"class":154},[144,86148,51420],{"class":51313},[144,86150,51320],{"class":154},[144,86152,86153,86155,86157],{"class":146,"line":1342},[144,86154,52157],{"class":154},[144,86156,5157],{"class":51313},[144,86158,51320],{"class":154},[144,86160,86161,86164],{"class":146,"line":1348},[144,86162,86163],{"class":1993},"    .modal",[144,86165,15603],{"class":154},[144,86167,86168,86170,86172,86174,86176],{"class":146,"line":1360},[144,86169,54784],{"class":203},[144,86171,51450],{"class":154},[144,86173,4003],{"class":203},[144,86175,51505],{"class":150},[144,86177,1321],{"class":154},[144,86179,86180,86183,86185,86187,86189],{"class":146,"line":1642},[144,86181,86182],{"class":203},"      min-height",[144,86184,51450],{"class":154},[144,86186,466],{"class":203},[144,86188,51505],{"class":150},[144,86190,1321],{"class":154},[144,86192,86193,86195,86197,86199,86201,86203,86205,86207,86209,86211,86213,86215,86217,86219,86221,86224],{"class":146,"line":1647},[144,86194,78763],{"class":203},[144,86196,51450],{"class":154},[144,86198,346],{"class":203},[144,86200,4123],{"class":203},[144,86202,2068],{"class":203},[144,86204,51505],{"class":150},[144,86206,78780],{"class":203},[144,86208,155],{"class":154},[144,86210,346],{"class":203},[144,86212,12466],{"class":154},[144,86214,346],{"class":203},[144,86216,12466],{"class":154},[144,86218,346],{"class":203},[144,86220,12466],{"class":154},[144,86222,86223],{"class":203},"0.1",[144,86225,2749],{"class":154},[144,86227,86228,86230,86232,86234,86236],{"class":146,"line":1653},[144,86229,55147],{"class":203},[144,86231,51450],{"class":154},[144,86233,448],{"class":203},[144,86235,51505],{"class":150},[144,86237,1321],{"class":154},[144,86239,86240,86242,86244,86247],{"class":146,"line":1658},[144,86241,54772],{"class":203},[144,86243,51450],{"class":154},[144,86245,86246],{"class":203},"fixed",[144,86248,1321],{"class":154},[144,86250,86251,86254,86256,86259],{"class":146,"line":1672},[144,86252,86253],{"class":203},"      z-index",[144,86255,51450],{"class":154},[144,86257,86258],{"class":203},"999",[144,86260,1321],{"class":154},[144,86262,86263,86265,86267,86269,86271],{"class":146,"line":1677},[144,86264,54851],{"class":203},[144,86266,51450],{"class":154},[144,86268,811],{"class":203},[144,86270,483],{"class":150},[144,86272,1321],{"class":154},[144,86274,86275,86277,86279,86281,86283],{"class":146,"line":1683},[144,86276,54960],{"class":203},[144,86278,51450],{"class":154},[144,86280,811],{"class":203},[144,86282,483],{"class":150},[144,86284,1321],{"class":154},[144,86286,86287,86289,86291,86293,86295,86298,86300,86302,86304,86306,86308,86310],{"class":146,"line":1704},[144,86288,78804],{"class":203},[144,86290,51450],{"class":154},[144,86292,78809],{"class":203},[144,86294,155],{"class":154},[144,86296,86297],{"class":203},"-50",[144,86299,483],{"class":150},[144,86301,12466],{"class":154},[144,86303,86297],{"class":203},[144,86305,483],{"class":150},[144,86307,12466],{"class":154},[144,86309,346],{"class":203},[144,86311,2749],{"class":154},[144,86313,86314,86316,86318,86320],{"class":146,"line":1709},[144,86315,54897],{"class":203},[144,86317,51450],{"class":154},[144,86319,60855],{"class":203},[144,86321,1321],{"class":154},[144,86323,86324],{"class":146,"line":1723},[144,86325,2217],{"class":154},[144,86327,86328],{"class":146,"line":1728},[144,86329,2430],{"emptyLinePlaceholder":72},[144,86331,86332,86334,86337],{"class":146,"line":1757},[144,86333,86163],{"class":1993},[144,86335,86336],{"class":1993}," .header",[144,86338,15603],{"class":154},[144,86340,86341,86343,86345,86347,86349],{"class":146,"line":1762},[144,86342,57372],{"class":203},[144,86344,51450],{"class":154},[144,86346,556],{"class":203},[144,86348,51505],{"class":150},[144,86350,1321],{"class":154},[144,86352,86353,86355,86357,86359,86361,86363],{"class":146,"line":1779},[144,86354,54708],{"class":203},[144,86356,51450],{"class":154},[144,86358,346],{"class":203},[144,86360,2068],{"class":203},[144,86362,51505],{"class":150},[144,86364,1321],{"class":154},[144,86366,86367,86369,86371,86373],{"class":146,"line":1784},[144,86368,54772],{"class":203},[144,86370,51450],{"class":154},[144,86372,54777],{"class":203},[144,86374,1321],{"class":154},[144,86376,86377,86379,86381,86383,86385],{"class":146,"line":1789},[144,86378,54935],{"class":203},[144,86380,51450],{"class":154},[144,86382,855],{"class":203},[144,86384,51505],{"class":150},[144,86386,1321],{"class":154},[144,86388,86389],{"class":146,"line":1794},[144,86390,2217],{"class":154},[144,86392,86393],{"class":146,"line":1808},[144,86394,2430],{"emptyLinePlaceholder":72},[144,86396,86397,86399,86401,86403],{"class":146,"line":1813},[144,86398,86163],{"class":1993},[144,86400,86336],{"class":1993},[144,86402,3062],{"class":51313},[144,86404,15603],{"class":154},[144,86406,86407,86410,86412,86414],{"class":146,"line":2607},[144,86408,86409],{"class":203},"      font-style",[144,86411,51450],{"class":154},[144,86413,63854],{"class":203},[144,86415,1321],{"class":154},[144,86417,86418,86420,86422,86424],{"class":146,"line":2621},[144,86419,57429],{"class":203},[144,86421,51450],{"class":154},[144,86423,62083],{"class":203},[144,86425,1321],{"class":154},[144,86427,86428,86430,86432,86434],{"class":146,"line":2629},[144,86429,54772],{"class":203},[144,86431,51450],{"class":154},[144,86433,54844],{"class":203},[144,86435,1321],{"class":154},[144,86437,86438,86441,86443,86445,86447],{"class":146,"line":2634},[144,86439,86440],{"class":203},"      right",[144,86442,51450],{"class":154},[144,86444,730],{"class":203},[144,86446,51505],{"class":150},[144,86448,1321],{"class":154},[144,86450,86451,86453,86455,86458,86460],{"class":146,"line":2640},[144,86452,54960],{"class":203},[144,86454,51450],{"class":154},[144,86456,86457],{"class":203},"-2",[144,86459,51505],{"class":150},[144,86461,1321],{"class":154},[144,86463,86464,86466,86468,86470],{"class":146,"line":2646},[144,86465,62038],{"class":203},[144,86467,51450],{"class":154},[144,86469,62043],{"class":203},[144,86471,1321],{"class":154},[144,86473,86474],{"class":146,"line":2651},[144,86475,2217],{"class":154},[144,86477,86478],{"class":146,"line":7979},[144,86479,2430],{"emptyLinePlaceholder":72},[144,86481,86482,86484,86487],{"class":146,"line":8003},[144,86483,86163],{"class":1993},[144,86485,86486],{"class":1993}," .body",[144,86488,15603],{"class":154},[144,86490,86491,86493,86495,86497],{"class":146,"line":8008},[144,86492,57299],{"class":203},[144,86494,51450],{"class":154},[144,86496,51605],{"class":203},[144,86498,1321],{"class":154},[144,86500,86501,86503,86505,86507,86509],{"class":146,"line":8014},[144,86502,54708],{"class":203},[144,86504,51450],{"class":154},[144,86506,601],{"class":203},[144,86508,51505],{"class":150},[144,86510,1321],{"class":154},[144,86512,86513],{"class":146,"line":8041},[144,86514,2217],{"class":154},[144,86516,86517],{"class":146,"line":8046},[144,86518,2430],{"emptyLinePlaceholder":72},[144,86520,86521,86523,86526],{"class":146,"line":8052},[144,86522,86163],{"class":1993},[144,86524,86525],{"class":1993}," .footer",[144,86527,15603],{"class":154},[144,86529,86530,86532,86534,86536],{"class":146,"line":8064},[144,86531,55022],{"class":203},[144,86533,51450],{"class":154},[144,86535,51490],{"class":203},[144,86537,1321],{"class":154},[144,86539,86540,86542,86544,86546],{"class":146,"line":8076},[144,86541,55033],{"class":203},[144,86543,51450],{"class":154},[144,86545,51593],{"class":203},[144,86547,1321],{"class":154},[144,86549,86550,86552,86554,86556,86558],{"class":146,"line":8088},[144,86551,54708],{"class":203},[144,86553,51450],{"class":154},[144,86555,601],{"class":203},[144,86557,51505],{"class":150},[144,86559,1321],{"class":154},[144,86561,86562],{"class":146,"line":9747},[144,86563,2217],{"class":154},[144,86565,86566],{"class":146,"line":9772},[144,86567,2430],{"emptyLinePlaceholder":72},[144,86569,86570,86572,86574,86576],{"class":146,"line":9795},[144,86571,86163],{"class":1993},[144,86573,86525],{"class":1993},[144,86575,1429],{"class":51313},[144,86577,15603],{"class":154},[144,86579,86580,86582,86584,86586,86588,86590,86592],{"class":146,"line":9819},[144,86581,54708],{"class":203},[144,86583,51450],{"class":154},[144,86585,226],{"class":203},[144,86587,51505],{"class":150},[144,86589,2113],{"class":203},[144,86591,51505],{"class":150},[144,86593,1321],{"class":154},[144,86595,86596,86598,86600,86603],{"class":146,"line":9824},[144,86597,61734],{"class":203},[144,86599,51450],{"class":154},[144,86601,86602],{"class":203},"#ccc",[144,86604,1321],{"class":154},[144,86606,86607,86609,86611,86613],{"class":146,"line":9829},[144,86608,63983],{"class":203},[144,86610,51450],{"class":154},[144,86612,54750],{"class":203},[144,86614,1321],{"class":154},[144,86616,86617,86619,86621,86623],{"class":146,"line":9834},[144,86618,57429],{"class":203},[144,86620,51450],{"class":154},[144,86622,60855],{"class":203},[144,86624,1321],{"class":154},[144,86626,86627,86629,86631,86633,86635],{"class":146,"line":9843},[144,86628,55147],{"class":203},[144,86630,51450],{"class":154},[144,86632,232],{"class":203},[144,86634,51505],{"class":150},[144,86636,1321],{"class":154},[144,86638,86639,86641,86643,86645,86647],{"class":146,"line":9848},[144,86640,61763],{"class":203},[144,86642,51450],{"class":154},[144,86644,601],{"class":203},[144,86646,51505],{"class":150},[144,86648,1321],{"class":154},[144,86650,86651,86653,86655,86657,86659],{"class":146,"line":9854},[144,86652,54935],{"class":203},[144,86654,51450],{"class":154},[144,86656,704],{"class":203},[144,86658,51505],{"class":150},[144,86660,1321],{"class":154},[144,86662,86663],{"class":146,"line":9875},[144,86664,2217],{"class":154},[144,86666,86667],{"class":146,"line":9881},[144,86668,2430],{"emptyLinePlaceholder":72},[144,86670,86671,86673,86675,86677,86680],{"class":146,"line":9895},[144,86672,86163],{"class":1993},[144,86674,86525],{"class":1993},[144,86676,1429],{"class":51313},[144,86678,86679],{"class":1993},".submit",[144,86681,15603],{"class":154},[144,86683,86684,86686,86688,86691],{"class":146,"line":9901},[144,86685,54897],{"class":203},[144,86687,51450],{"class":154},[144,86689,86690],{"class":203},"#369",[144,86692,1321],{"class":154},[144,86694,86695],{"class":146,"line":9928},[144,86696,2217],{"class":154},[144,86698,86699,86701,86703],{"class":146,"line":9937},[144,86700,52430],{"class":154},[144,86702,5157],{"class":51313},[144,86704,51320],{"class":154},[144,86706,86707,86709,86711],{"class":146,"line":9943},[144,86708,51798],{"class":154},[144,86710,51347],{"class":51313},[144,86712,51320],{"class":154},[144,86714,86715],{"class":146,"line":9951},[144,86716,2430],{"emptyLinePlaceholder":72},[144,86718,86719,86721,86723],{"class":146,"line":9956},[144,86720,1065],{"class":154},[144,86722,51813],{"class":51313},[144,86724,51320],{"class":154},[144,86726,86727,86729,86731,86733,86735,86738,86741,86743],{"class":146,"line":16635},[144,86728,52157],{"class":154},[144,86730,53900],{"class":51313},[144,86732,14990],{"class":1993},[144,86734,200],{"class":154},[144,86736,86737],{"class":259},"\"delete\"",[144,86739,86740],{"class":154},">删除\u003C\u002F",[144,86742,53900],{"class":51313},[144,86744,51320],{"class":154},[144,86746,86747,86749,86751,86753,86755,86758,86761,86763],{"class":146,"line":16641},[144,86748,52157],{"class":154},[144,86750,53900],{"class":51313},[144,86752,14990],{"class":1993},[144,86754,200],{"class":154},[144,86756,86757],{"class":259},"\"login\"",[144,86759,86760],{"class":154},">登录\u003C\u002F",[144,86762,53900],{"class":51313},[144,86764,51320],{"class":154},[144,86766,86767,86769,86771],{"class":146,"line":16664},[144,86768,52157],{"class":154},[144,86770,51826],{"class":51313},[144,86772,51320],{"class":154},[144,86774,86775],{"class":146,"line":16670},[144,86776,86777],{"class":213},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[144,86779,86780,86782,86785,86787,86789,86791,86793,86795,86798,86800,86802],{"class":146,"line":16693},[144,86781,70097],{"class":150},[144,86783,86784],{"class":1993}," Modal",[144,86786,155],{"class":154},[144,86788,51420],{"class":5247},[144,86790,13595],{"class":150},[144,86792,69943],{"class":259},[144,86794,12466],{"class":154},[144,86796,86797],{"class":5247},"message",[144,86799,13595],{"class":150},[144,86801,69943],{"class":259},[144,86803,12473],{"class":154},[144,86805,86806],{"class":146,"line":16707},[144,86807,86808],{"class":213},"      \u002F\u002F 创建Model 模态框盒子\n",[144,86810,86811],{"class":146,"line":16727},[144,86812,86813],{"class":213},"      \u002F\u002F 1.1 创建div标签\n",[144,86815,86816,86818,86821,86823,86825,86827,86829,86831],{"class":146,"line":16733},[144,86817,70064],{"class":203},[144,86819,86820],{"class":154},".modalBox ",[144,86822,200],{"class":150},[144,86824,54409],{"class":154},[144,86826,70164],{"class":1993},[144,86828,155],{"class":154},[144,86830,81944],{"class":259},[144,86832,161],{"class":154},[144,86834,86835],{"class":146,"line":16744},[144,86836,86837],{"class":213},"      \u002F\u002F 1.2 给div 添加类名为model\n",[144,86839,86840,86842,86845,86847],{"class":146,"line":16767},[144,86841,70064],{"class":203},[144,86843,86844],{"class":154},".modalBox.className ",[144,86846,200],{"class":150},[144,86848,86849],{"class":259}," 'modal'\n",[144,86851,86852],{"class":146,"line":16789},[144,86853,86854],{"class":213},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[144,86856,86857,86859,86862,86864],{"class":146,"line":16794},[144,86858,70064],{"class":203},[144,86860,86861],{"class":154},".modalBox.innerHTML ",[144,86863,200],{"class":150},[144,86865,70181],{"class":259},[144,86867,86868,86871,86873],{"class":146,"line":16800},[144,86869,86870],{"class":259},"        \u003Cdiv class=\"header\">${",[144,86872,51420],{"class":154},[144,86874,86875],{"class":259},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[144,86877,86878,86881,86883],{"class":146,"line":16814},[144,86879,86880],{"class":259},"        \u003Cdiv class=\"body\">${",[144,86882,86797],{"class":154},[144,86884,86885],{"class":259},"}\u003C\u002Fdiv>\n",[144,86887,86888],{"class":146,"line":16827},[144,86889,86890],{"class":259},"      `\n",[144,86892,86893],{"class":146,"line":16832},[144,86894,86895],{"class":213},"      \u002F\u002F console.log(this.modalBox)\n",[144,86897,86898],{"class":146,"line":16846},[144,86899,2217],{"class":154},[144,86901,86902],{"class":146,"line":16851},[144,86903,86904],{"class":213},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[144,86906,86907],{"class":146,"line":16857},[144,86908,86909],{"class":213},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[144,86911,86912],{"class":146,"line":16862},[144,86913,86914],{"class":213},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[144,86916,86917,86920,86922,86924,86926,86929,86931,86933],{"class":146,"line":16876},[144,86918,86919],{"class":203},"    Modal",[144,86921,713],{"class":154},[144,86923,85592],{"class":203},[144,86925,713],{"class":154},[144,86927,86928],{"class":1993},"open",[144,86930,13595],{"class":150},[144,86932,58931],{"class":150},[144,86934,54465],{"class":154},[144,86936,86937],{"class":146,"line":16881},[144,86938,86939],{"class":213},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[144,86941,86942,86944,86947,86949,86951,86953,86955,86958],{"class":146,"line":16886},[144,86943,58241],{"class":150},[144,86945,86946],{"class":203}," box",[144,86948,13595],{"class":150},[144,86950,54409],{"class":154},[144,86952,54412],{"class":1993},[144,86954,155],{"class":154},[144,86956,86957],{"class":259},"'.modal'",[144,86959,161],{"class":154},[144,86961,86962],{"class":146,"line":16900},[144,86963,86964],{"class":213},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[144,86966,86967,86970,86972,86975,86977],{"class":146,"line":16912},[144,86968,86969],{"class":154},"      box ",[144,86971,1745],{"class":150},[144,86973,86974],{"class":154}," box.",[144,86976,57019],{"class":1993},[144,86978,2006],{"class":154},[144,86980,86981],{"class":146,"line":16917},[144,86982,86983],{"class":213},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[144,86985,86986],{"class":146,"line":16930},[144,86987,86988],{"class":213},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[144,86990,86991],{"class":146,"line":16935},[144,86992,86993],{"class":213},"      \u002F\u002F append可以增加对象\n",[144,86995,86996,86999,87002,87004,87007],{"class":146,"line":16940},[144,86997,86998],{"class":154},"      document.body.",[144,87000,87001],{"class":1993},"append",[144,87003,155],{"class":154},[144,87005,87006],{"class":203},"this",[144,87008,87009],{"class":154},".modalBox)\n",[144,87011,87012],{"class":146,"line":16945},[144,87013,2430],{"emptyLinePlaceholder":72},[144,87015,87016],{"class":146,"line":16958},[144,87017,87018],{"class":213},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[144,87020,87021,87023,87026,87028,87030,87033,87035,87037,87039,87041,87044,87046],{"class":146,"line":16963},[144,87022,70064],{"class":203},[144,87024,87025],{"class":154},".modalBox.",[144,87027,54412],{"class":1993},[144,87029,155],{"class":154},[144,87031,87032],{"class":259},"'i'",[144,87034,30839],{"class":154},[144,87036,57826],{"class":1993},[144,87038,155],{"class":154},[144,87040,57831],{"class":259},[144,87042,87043],{"class":154},", () ",[144,87045,84735],{"class":150},[144,87047,15603],{"class":154},[144,87049,87050],{"class":146,"line":32646},[144,87051,87052],{"class":213},"        \u002F\u002F 这个地方需要用到箭头函数\n",[144,87054,87055],{"class":146,"line":32652},[144,87056,87057],{"class":213},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[144,87059,87060],{"class":146,"line":32658},[144,87061,87062],{"class":213},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[144,87064,87065,87067,87069,87072],{"class":146,"line":32664},[144,87066,64739],{"class":203},[144,87068,713],{"class":154},[144,87070,87071],{"class":1993},"close",[144,87073,2006],{"class":154},[144,87075,87076],{"class":146,"line":32670},[144,87077,64828],{"class":154},[144,87079,87080],{"class":146,"line":32681},[144,87081,2217],{"class":154},[144,87083,87084],{"class":146,"line":32687},[144,87085,2430],{"emptyLinePlaceholder":72},[144,87087,87088],{"class":146,"line":32707},[144,87089,87090],{"class":213},"    \u002F\u002F 测试一下 点击 删除按钮\n",[144,87092,87093,87095,87097,87099,87102,87104,87106,87108,87110,87112,87114],{"class":146,"line":32713},[144,87094,52420],{"class":154},[144,87096,54412],{"class":1993},[144,87098,155],{"class":154},[144,87100,87101],{"class":259},"'#delete'",[144,87103,30839],{"class":154},[144,87105,57826],{"class":1993},[144,87107,155],{"class":154},[144,87109,57831],{"class":259},[144,87111,87043],{"class":154},[144,87113,84735],{"class":150},[144,87115,15603],{"class":154},[144,87117,87118],{"class":146,"line":32724},[144,87119,87120],{"class":213},"      \u002F\u002F 先调用Model构造函数\n",[144,87122,87123,87125,87128,87130,87132,87134,87136,87139,87141,87144],{"class":146,"line":32730},[144,87124,58241],{"class":150},[144,87126,87127],{"class":203}," del",[144,87129,13595],{"class":150},[144,87131,11609],{"class":150},[144,87133,86784],{"class":1993},[144,87135,155],{"class":154},[144,87137,87138],{"class":259},"'温馨的提示'",[144,87140,12466],{"class":154},[144,87142,87143],{"class":259},"'您没有删除权限操作'",[144,87145,161],{"class":154},[144,87147,87148],{"class":146,"line":32736},[144,87149,87150],{"class":213},"      \u002F\u002F 实例对象调用open方法\n",[144,87152,87153,87156,87158],{"class":146,"line":32742},[144,87154,87155],{"class":154},"      del.",[144,87157,86928],{"class":1993},[144,87159,2006],{"class":154},[144,87161,87162],{"class":146,"line":32748},[144,87163,33474],{"class":154},[144,87165,87166],{"class":146,"line":32754},[144,87167,87168],{"class":213},"    \u002F\u002F 测试一下 点击 登录按钮\n",[144,87170,87171,87173,87175,87177,87180,87182,87184,87186,87188,87190,87192],{"class":146,"line":32760},[144,87172,52420],{"class":154},[144,87174,54412],{"class":1993},[144,87176,155],{"class":154},[144,87178,87179],{"class":259},"'#login'",[144,87181,30839],{"class":154},[144,87183,57826],{"class":1993},[144,87185,155],{"class":154},[144,87187,57831],{"class":259},[144,87189,87043],{"class":154},[144,87191,84735],{"class":150},[144,87193,15603],{"class":154},[144,87195,87196],{"class":146,"line":32766},[144,87197,87120],{"class":213},[144,87199,87200,87202,87205,87207,87209,87211,87213,87216,87218,87221],{"class":146,"line":32786},[144,87201,58241],{"class":150},[144,87203,87204],{"class":203}," log",[144,87206,13595],{"class":150},[144,87208,11609],{"class":150},[144,87210,86784],{"class":1993},[144,87212,155],{"class":154},[144,87214,87215],{"class":259},"'友情提示'",[144,87217,12466],{"class":154},[144,87219,87220],{"class":259},"'您还没有登录呢'",[144,87222,161],{"class":154},[144,87224,87225],{"class":146,"line":32792},[144,87226,87150],{"class":213},[144,87228,87229,87232,87234],{"class":146,"line":32808},[144,87230,87231],{"class":154},"      log.",[144,87233,86928],{"class":1993},[144,87235,2006],{"class":154},[144,87237,87238],{"class":146,"line":32814},[144,87239,33474],{"class":154},[144,87241,87242],{"class":146,"line":32828},[144,87243,87244],{"class":213},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[144,87246,87247,87249,87251,87253,87255,87257,87259,87261],{"class":146,"line":32834},[144,87248,86919],{"class":203},[144,87250,713],{"class":154},[144,87252,85592],{"class":203},[144,87254,713],{"class":154},[144,87256,87071],{"class":1993},[144,87258,13595],{"class":150},[144,87260,58931],{"class":150},[144,87262,54465],{"class":154},[144,87264,87265,87267,87269,87271],{"class":146,"line":32849},[144,87266,70064],{"class":203},[144,87268,87025],{"class":154},[144,87270,57019],{"class":1993},[144,87272,2006],{"class":154},[144,87274,87275],{"class":146,"line":32855},[144,87276,2217],{"class":154},[144,87278,87279,87281,87283],{"class":146,"line":32864},[144,87280,52430],{"class":154},[144,87282,51826],{"class":51313},[144,87284,51320],{"class":154},[144,87286,87287,87289,87291],{"class":146,"line":32870},[144,87288,51798],{"class":154},[144,87290,51813],{"class":51313},[144,87292,51320],{"class":154},[144,87294,87295],{"class":146,"line":32879},[144,87296,2430],{"emptyLinePlaceholder":72},[144,87298,87299,87301,87303],{"class":146,"line":32885},[144,87300,51798],{"class":154},[144,87302,50648],{"class":51313},[144,87304,51320],{"class":154},[14,87306,87307],{},[28,87308],{"alt":30,"src":87309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[18,87311,87313],{"id":87312},"_414-深浅拷贝","4.14 深浅拷贝",[115,87315,87317],{"id":87316},"_4141-浅拷贝","4.14.1 浅拷贝",[14,87319,87320],{},[28,87321],{"alt":30,"src":87322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,87324,87325],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,87327,87328],{},[28,87329],{"alt":30,"src":87330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,87332,87333],{},[28,87334],{"alt":30,"src":87335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,87337,87338],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,87340,87341],{},[28,87342],{"alt":30,"src":87343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,87345,11363],{},[14,87347,87348],{},[28,87349],{"alt":30,"src":87350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[115,87352,87354],{"id":87353},"_4142-深拷贝","4.14.2 深拷贝",[14,87356,87357],{},"深拷贝：拷贝的是对象，不是地址",[14,87359,87360],{},"常用的三种方法：",[98,87362,87363,87366,87369],{},[101,87364,87365],{},"通过递归实现深拷贝",[101,87367,87368],{},"lodash\u002FcloneDeep",[101,87370,87371],{},"通过JSON.stringify()实现",[22029,87373,87375],{"id":87374},"_41421-递归函数","4.14.2.1 递归函数",[14,87377,87378],{},[28,87379],{"alt":30,"src":87380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[98,87382,87383],{},[101,87384,87385],{},"死递归占溢出：",[135,87387,87389],{"className":53080,"code":87388,"language":53082,"meta":30,"style":30},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[141,87390,87391,87399,87407,87411,87416,87420,87425,87433],{"__ignoreMap":30},[144,87392,87393,87395,87397],{"class":146,"line":147},[144,87394,1065],{"class":154},[144,87396,51813],{"class":51313},[144,87398,51320],{"class":154},[144,87400,87401,87403,87405],{"class":146,"line":66},[144,87402,52157],{"class":154},[144,87404,51826],{"class":51313},[144,87406,51320],{"class":154},[144,87408,87409],{"class":146,"line":1210},[144,87410,77156],{"class":154},[144,87412,87413],{"class":146,"line":1225},[144,87414,87415],{"class":154},"      fn()\n",[144,87417,87418],{"class":146,"line":1231},[144,87419,2217],{"class":154},[144,87421,87422],{"class":146,"line":1245},[144,87423,87424],{"class":154},"    fn()\n",[144,87426,87427,87429,87431],{"class":146,"line":1251},[144,87428,52430],{"class":154},[144,87430,51826],{"class":51313},[144,87432,51320],{"class":154},[144,87434,87435,87437,87439],{"class":146,"line":1342},[144,87436,51798],{"class":154},[144,87438,51813],{"class":51313},[144,87440,51320],{"class":154},[98,87442,87443],{"start":66},[101,87444,87445],{},"递归函数要加判断条件：",[14,87447,87448],{},[28,87449],{"alt":30,"src":87450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[98,87452,87453],{"start":1210},[101,87454,87455],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[135,87457,87459],{"className":50646,"code":87458,"language":50648,"meta":30,"style":30},"\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",[141,87460,87461,87471,87485,87489,87497,87511,87531,87543,87551,87555,87563,87575,87583,87591,87616,87628,87632,87639,87647,87655,87659],{"__ignoreMap":30},[144,87462,87463,87465,87467,87469],{"class":146,"line":147},[144,87464,51310],{"class":154},[144,87466,51314],{"class":51313},[144,87468,51317],{"class":1993},[144,87470,51320],{"class":154},[144,87472,87473,87475,87477,87479,87481,87483],{"class":146,"line":66},[144,87474,1065],{"class":154},[144,87476,50648],{"class":51313},[144,87478,51329],{"class":1993},[144,87480,200],{"class":154},[144,87482,51334],{"class":259},[144,87484,51320],{"class":154},[144,87486,87487],{"class":146,"line":1210},[144,87488,2430],{"emptyLinePlaceholder":72},[144,87490,87491,87493,87495],{"class":146,"line":1225},[144,87492,1065],{"class":154},[144,87494,51347],{"class":51313},[144,87496,51320],{"class":154},[144,87498,87499,87501,87503,87505,87507,87509],{"class":146,"line":1231},[144,87500,52157],{"class":154},[144,87502,51357],{"class":51313},[144,87504,51360],{"class":1993},[144,87506,200],{"class":154},[144,87508,51365],{"class":259},[144,87510,51320],{"class":154},[144,87512,87513,87515,87517,87519,87521,87523,87525,87527,87529],{"class":146,"line":1245},[144,87514,52157],{"class":154},[144,87516,51357],{"class":51313},[144,87518,14951],{"class":1993},[144,87520,200],{"class":154},[144,87522,51404],{"class":259},[144,87524,51384],{"class":1993},[144,87526,200],{"class":154},[144,87528,51411],{"class":259},[144,87530,51320],{"class":154},[144,87532,87533,87535,87537,87539,87541],{"class":146,"line":1251},[144,87534,52157],{"class":154},[144,87536,51420],{"class":51313},[144,87538,51423],{"class":154},[144,87540,51420],{"class":51313},[144,87542,51320],{"class":154},[144,87544,87545,87547,87549],{"class":146,"line":1342},[144,87546,51798],{"class":154},[144,87548,51347],{"class":51313},[144,87550,51320],{"class":154},[144,87552,87553],{"class":146,"line":1348},[144,87554,2430],{"emptyLinePlaceholder":72},[144,87556,87557,87559,87561],{"class":146,"line":1360},[144,87558,1065],{"class":154},[144,87560,51813],{"class":51313},[144,87562,51320],{"class":154},[144,87564,87565,87567,87569,87571,87573],{"class":146,"line":1642},[144,87566,52157],{"class":154},[144,87568,51624],{"class":51313},[144,87570,55327],{"class":154},[144,87572,51624],{"class":51313},[144,87574,51320],{"class":154},[144,87576,87577,87579,87581],{"class":146,"line":1647},[144,87578,52157],{"class":154},[144,87580,51826],{"class":51313},[144,87582,51320],{"class":154},[144,87584,87585,87587,87589],{"class":146,"line":1653},[144,87586,70097],{"class":150},[144,87588,73786],{"class":1993},[144,87590,10884],{"class":154},[144,87592,87593,87595,87597,87599,87601,87603,87605,87607,87609,87611,87614],{"class":146,"line":1658},[144,87594,55784],{"class":154},[144,87596,54412],{"class":1993},[144,87598,155],{"class":154},[144,87600,81944],{"class":259},[144,87602,74262],{"class":154},[144,87604,200],{"class":150},[144,87606,11609],{"class":150},[144,87608,73802],{"class":1993},[144,87610,17292],{"class":154},[144,87612,87613],{"class":1993},"toLocaleString",[144,87615,2006],{"class":154},[144,87617,87618,87621,87624,87626],{"class":146,"line":1672},[144,87619,87620],{"class":1993},"      setTimeout",[144,87622,87623],{"class":154},"(getTime, ",[144,87625,6441],{"class":203},[144,87627,161],{"class":154},[144,87629,87630],{"class":146,"line":1677},[144,87631,2217],{"class":154},[144,87633,87634,87637],{"class":146,"line":1683},[144,87635,87636],{"class":1993},"    getTime",[144,87638,2006],{"class":154},[144,87640,87641,87643,87645],{"class":146,"line":1704},[144,87642,52430],{"class":154},[144,87644,51826],{"class":51313},[144,87646,51320],{"class":154},[144,87648,87649,87651,87653],{"class":146,"line":1709},[144,87650,51798],{"class":154},[144,87652,51813],{"class":51313},[144,87654,51320],{"class":154},[144,87656,87657],{"class":146,"line":1723},[144,87658,2430],{"emptyLinePlaceholder":72},[144,87660,87661,87663,87665],{"class":146,"line":1728},[144,87662,51798],{"class":154},[144,87664,50648],{"class":51313},[144,87666,51320],{"class":154},[14,87668,87669],{},[28,87670],{"alt":30,"src":87671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[98,87673,87674],{"start":1225},[101,87675,87365],{},[14,87677,87678],{},[28,87679],{"alt":30,"src":87680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,87682,87683],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,87685,39202],{},[14,87687,87688],{},"这个是简易版的递归函数深拷贝",[14,87690,87691],{},"一定要注意先数组再对象，因为万物皆可对象",[135,87693,87695],{"className":50646,"code":87694,"language":50648,"meta":30,"style":30},"\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",[141,87696,87697,87707,87721,87725,87733,87747,87767,87779,87787,87791,87799,87807,87817,87826,87834,87850,87854,87862,87866,87870,87882,87887,87906,87922,87927,87932,87937,87952,87957,87962,87971,87979,87996,88004,88010,88018,88023,88028,88037,88041,88045,88049,88060,88069,88079,88093,88103,88111,88119,88127,88131],{"__ignoreMap":30},[144,87698,87699,87701,87703,87705],{"class":146,"line":147},[144,87700,51310],{"class":154},[144,87702,51314],{"class":51313},[144,87704,51317],{"class":1993},[144,87706,51320],{"class":154},[144,87708,87709,87711,87713,87715,87717,87719],{"class":146,"line":66},[144,87710,1065],{"class":154},[144,87712,50648],{"class":51313},[144,87714,51329],{"class":1993},[144,87716,200],{"class":154},[144,87718,51334],{"class":259},[144,87720,51320],{"class":154},[144,87722,87723],{"class":146,"line":1210},[144,87724,2430],{"emptyLinePlaceholder":72},[144,87726,87727,87729,87731],{"class":146,"line":1225},[144,87728,1065],{"class":154},[144,87730,51347],{"class":51313},[144,87732,51320],{"class":154},[144,87734,87735,87737,87739,87741,87743,87745],{"class":146,"line":1231},[144,87736,52157],{"class":154},[144,87738,51357],{"class":51313},[144,87740,51360],{"class":1993},[144,87742,200],{"class":154},[144,87744,51365],{"class":259},[144,87746,51320],{"class":154},[144,87748,87749,87751,87753,87755,87757,87759,87761,87763,87765],{"class":146,"line":1245},[144,87750,52157],{"class":154},[144,87752,51357],{"class":51313},[144,87754,14951],{"class":1993},[144,87756,200],{"class":154},[144,87758,51404],{"class":259},[144,87760,51384],{"class":1993},[144,87762,200],{"class":154},[144,87764,51411],{"class":259},[144,87766,51320],{"class":154},[144,87768,87769,87771,87773,87775,87777],{"class":146,"line":1251},[144,87770,52157],{"class":154},[144,87772,51420],{"class":51313},[144,87774,51423],{"class":154},[144,87776,51420],{"class":51313},[144,87778,51320],{"class":154},[144,87780,87781,87783,87785],{"class":146,"line":1342},[144,87782,51798],{"class":154},[144,87784,51347],{"class":51313},[144,87786,51320],{"class":154},[144,87788,87789],{"class":146,"line":1348},[144,87790,2430],{"emptyLinePlaceholder":72},[144,87792,87793,87795,87797],{"class":146,"line":1360},[144,87794,1065],{"class":154},[144,87796,51813],{"class":51313},[144,87798,51320],{"class":154},[144,87800,87801,87803,87805],{"class":146,"line":1642},[144,87802,52157],{"class":154},[144,87804,51826],{"class":51313},[144,87806,51320],{"class":154},[144,87808,87809,87811,87813,87815],{"class":146,"line":1647},[144,87810,11252],{"class":150},[144,87812,69984],{"class":203},[144,87814,13595],{"class":150},[144,87816,15603],{"class":154},[144,87818,87819,87821,87824],{"class":146,"line":1653},[144,87820,71629],{"class":154},[144,87822,87823],{"class":259},"'pink'",[144,87825,31479],{"class":154},[144,87827,87828,87830,87832],{"class":146,"line":1658},[144,87829,71639],{"class":154},[144,87831,805],{"class":203},[144,87833,31479],{"class":154},[144,87835,87836,87839,87842,87844,87847],{"class":146,"line":1672},[144,87837,87838],{"class":154},"      hobby: [",[144,87840,87841],{"class":259},"'乒乓球'",[144,87843,12466],{"class":154},[144,87845,87846],{"class":259},"'足球'",[144,87848,87849],{"class":154},"],\n",[144,87851,87852],{"class":146,"line":1677},[144,87853,77885],{"class":154},[144,87855,87856,87859],{"class":146,"line":1683},[144,87857,87858],{"class":154},"        baby: ",[144,87860,87861],{"class":259},"'小pink'\n",[144,87863,87864],{"class":146,"line":1704},[144,87865,52411],{"class":154},[144,87867,87868],{"class":146,"line":1709},[144,87869,2217],{"class":154},[144,87871,87872,87874,87877,87879],{"class":146,"line":1723},[144,87873,11252],{"class":150},[144,87875,87876],{"class":203}," o",[144,87878,13595],{"class":150},[144,87880,87881],{"class":154}," {}\n",[144,87883,87884],{"class":146,"line":1728},[144,87885,87886],{"class":213},"    \u002F\u002F 拷贝函数\n",[144,87888,87889,87891,87894,87896,87899,87901,87904],{"class":146,"line":1757},[144,87890,70097],{"class":150},[144,87892,87893],{"class":1993}," deepCopy",[144,87895,155],{"class":154},[144,87897,87898],{"class":5247},"newObj",[144,87900,12466],{"class":154},[144,87902,87903],{"class":5247},"oldObj",[144,87905,12473],{"class":154},[144,87907,87908,87910,87912,87914,87917,87919],{"class":146,"line":1762},[144,87909,52297],{"class":150},[144,87911,1688],{"class":154},[144,87913,51860],{"class":150},[144,87915,87916],{"class":154}," k ",[144,87918,26056],{"class":150},[144,87920,87921],{"class":154}," oldObj) {\n",[144,87923,87924],{"class":146,"line":1779},[144,87925,87926],{"class":213},"        \u002F\u002F 处理数组的问题\n",[144,87928,87929],{"class":146,"line":1784},[144,87930,87931],{"class":213},"        \u002F\u002F 判断是否属于数组\n",[144,87933,87934],{"class":146,"line":1789},[144,87935,87936],{"class":213},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[144,87938,87939,87941,87944,87947,87950],{"class":146,"line":1794},[144,87940,2527],{"class":150},[144,87942,87943],{"class":154}," (oldObj[k] ",[144,87945,87946],{"class":150},"instanceof",[144,87948,87949],{"class":1993}," Array",[144,87951,12473],{"class":154},[144,87953,87954],{"class":146,"line":1808},[144,87955,87956],{"class":213},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[144,87958,87959],{"class":146,"line":1813},[144,87960,87961],{"class":213},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[144,87963,87964,87967,87969],{"class":146,"line":2607},[144,87965,87966],{"class":154},"          newObj[k] ",[144,87968,200],{"class":150},[144,87970,51851],{"class":154},[144,87972,87973,87976],{"class":146,"line":2621},[144,87974,87975],{"class":1993},"          deepCopy",[144,87977,87978],{"class":154},"(newObj[k], oldObj[k])\n",[144,87980,87981,87983,87985,87987,87989,87991,87994],{"class":146,"line":2629},[144,87982,80093],{"class":154},[144,87984,1731],{"class":150},[144,87986,1734],{"class":150},[144,87988,87943],{"class":154},[144,87990,87946],{"class":150},[144,87992,87993],{"class":1993}," Object",[144,87995,12473],{"class":154},[144,87997,87998,88000,88002],{"class":146,"line":2634},[144,87999,87966],{"class":154},[144,88001,200],{"class":150},[144,88003,87881],{"class":154},[144,88005,88006,88008],{"class":146,"line":2640},[144,88007,87975],{"class":1993},[144,88009,87978],{"class":154},[144,88011,88012,88014,88016],{"class":146,"line":2646},[144,88013,80093],{"class":154},[144,88015,1731],{"class":150},[144,88017,15603],{"class":154},[144,88019,88020],{"class":146,"line":2651},[144,88021,88022],{"class":213},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[144,88024,88025],{"class":146,"line":7979},[144,88026,88027],{"class":213},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[144,88029,88030,88032,88034],{"class":146,"line":8003},[144,88031,87966],{"class":154},[144,88033,200],{"class":150},[144,88035,88036],{"class":154}," oldObj[k]\n",[144,88038,88039],{"class":146,"line":8008},[144,88040,2559],{"class":154},[144,88042,88043],{"class":146,"line":8014},[144,88044,52411],{"class":154},[144,88046,88047],{"class":146,"line":8041},[144,88048,2217],{"class":154},[144,88050,88051,88054,88057],{"class":146,"line":8046},[144,88052,88053],{"class":1993},"    deepCopy",[144,88055,88056],{"class":154},"(o, obj) ",[144,88058,88059],{"class":213},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[144,88061,88062,88064,88066],{"class":146,"line":8052},[144,88063,73766],{"class":154},[144,88065,58260],{"class":1993},[144,88067,88068],{"class":154},"(o)\n",[144,88070,88071,88074,88076],{"class":146,"line":8064},[144,88072,88073],{"class":154},"    o.age ",[144,88075,200],{"class":150},[144,88077,88078],{"class":203}," 20\n",[144,88080,88081,88084,88086,88088,88090],{"class":146,"line":8076},[144,88082,88083],{"class":154},"    o.hobby[",[144,88085,346],{"class":203},[144,88087,4473],{"class":154},[144,88089,200],{"class":150},[144,88091,88092],{"class":259}," '篮球'\n",[144,88094,88095,88098,88100],{"class":146,"line":8088},[144,88096,88097],{"class":154},"    o.family ",[144,88099,200],{"class":150},[144,88101,88102],{"class":259}," '老pink'\n",[144,88104,88105,88107,88109],{"class":146,"line":9747},[144,88106,73766],{"class":154},[144,88108,58260],{"class":1993},[144,88110,70049],{"class":154},[144,88112,88113,88115,88117],{"class":146,"line":9772},[144,88114,52430],{"class":154},[144,88116,51826],{"class":51313},[144,88118,51320],{"class":154},[144,88120,88121,88123,88125],{"class":146,"line":9795},[144,88122,51798],{"class":154},[144,88124,51813],{"class":51313},[144,88126,51320],{"class":154},[144,88128,88129],{"class":146,"line":9819},[144,88130,2430],{"emptyLinePlaceholder":72},[144,88132,88133,88135,88137],{"class":146,"line":9824},[144,88134,51798],{"class":154},[144,88136,50648],{"class":51313},[144,88138,51320],{"class":154},[14,88140,88141],{},[28,88142],{"alt":30,"src":88143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22029,88145,88147,88148],{"id":88146},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[304,88149,88150],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88152,88153],{},[393,88154,88155],{"href":88155,"rel":88156},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23897],[14,88158,88159],{},"lodash里边的方法都要加上一个下划线_",[14,88161,88162],{},"_.cloneDeep()",[135,88164,88166],{"className":50646,"code":88165,"language":50648,"meta":30,"style":30},"\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",[141,88167,88168,88178,88192,88196,88204,88218,88238,88250,88258,88262,88270,88275,88294,88302,88312,88320,88328,88340,88344,88350,88354,88358,88374,88382,88391,88399,88407,88415,88419],{"__ignoreMap":30},[144,88169,88170,88172,88174,88176],{"class":146,"line":147},[144,88171,51310],{"class":154},[144,88173,51314],{"class":51313},[144,88175,51317],{"class":1993},[144,88177,51320],{"class":154},[144,88179,88180,88182,88184,88186,88188,88190],{"class":146,"line":66},[144,88181,1065],{"class":154},[144,88183,50648],{"class":51313},[144,88185,51329],{"class":1993},[144,88187,200],{"class":154},[144,88189,51334],{"class":259},[144,88191,51320],{"class":154},[144,88193,88194],{"class":146,"line":1210},[144,88195,2430],{"emptyLinePlaceholder":72},[144,88197,88198,88200,88202],{"class":146,"line":1225},[144,88199,1065],{"class":154},[144,88201,51347],{"class":51313},[144,88203,51320],{"class":154},[144,88205,88206,88208,88210,88212,88214,88216],{"class":146,"line":1231},[144,88207,52157],{"class":154},[144,88209,51357],{"class":51313},[144,88211,51360],{"class":1993},[144,88213,200],{"class":154},[144,88215,51365],{"class":259},[144,88217,51320],{"class":154},[144,88219,88220,88222,88224,88226,88228,88230,88232,88234,88236],{"class":146,"line":1245},[144,88221,52157],{"class":154},[144,88223,51357],{"class":51313},[144,88225,14951],{"class":1993},[144,88227,200],{"class":154},[144,88229,51404],{"class":259},[144,88231,51384],{"class":1993},[144,88233,200],{"class":154},[144,88235,51411],{"class":259},[144,88237,51320],{"class":154},[144,88239,88240,88242,88244,88246,88248],{"class":146,"line":1251},[144,88241,52157],{"class":154},[144,88243,51420],{"class":51313},[144,88245,51423],{"class":154},[144,88247,51420],{"class":51313},[144,88249,51320],{"class":154},[144,88251,88252,88254,88256],{"class":146,"line":1342},[144,88253,51798],{"class":154},[144,88255,51347],{"class":51313},[144,88257,51320],{"class":154},[144,88259,88260],{"class":146,"line":1348},[144,88261,2430],{"emptyLinePlaceholder":72},[144,88263,88264,88266,88268],{"class":146,"line":1360},[144,88265,1065],{"class":154},[144,88267,51813],{"class":51313},[144,88269,51320],{"class":154},[144,88271,88272],{"class":146,"line":1642},[144,88273,88274],{"class":213},"  \u003C!-- 先引用这个库 -->\n",[144,88276,88277,88279,88281,88283,88285,88288,88290,88292],{"class":146,"line":1647},[144,88278,52157],{"class":154},[144,88280,51826],{"class":51313},[144,88282,55252],{"class":1993},[144,88284,200],{"class":154},[144,88286,88287],{"class":259},"\"lodash.min.js\"",[144,88289,55327],{"class":154},[144,88291,51826],{"class":51313},[144,88293,51320],{"class":154},[144,88295,88296,88298,88300],{"class":146,"line":1653},[144,88297,52157],{"class":154},[144,88299,51826],{"class":51313},[144,88301,51320],{"class":154},[144,88303,88304,88306,88308,88310],{"class":146,"line":1658},[144,88305,11252],{"class":150},[144,88307,69984],{"class":203},[144,88309,13595],{"class":150},[144,88311,15603],{"class":154},[144,88313,88314,88316,88318],{"class":146,"line":1672},[144,88315,71629],{"class":154},[144,88317,87823],{"class":259},[144,88319,31479],{"class":154},[144,88321,88322,88324,88326],{"class":146,"line":1677},[144,88323,71639],{"class":154},[144,88325,805],{"class":203},[144,88327,31479],{"class":154},[144,88329,88330,88332,88334,88336,88338],{"class":146,"line":1683},[144,88331,87838],{"class":154},[144,88333,87841],{"class":259},[144,88335,12466],{"class":154},[144,88337,87846],{"class":259},[144,88339,87849],{"class":154},[144,88341,88342],{"class":146,"line":1704},[144,88343,77885],{"class":154},[144,88345,88346,88348],{"class":146,"line":1709},[144,88347,87858],{"class":154},[144,88349,87861],{"class":259},[144,88351,88352],{"class":146,"line":1723},[144,88353,52411],{"class":154},[144,88355,88356],{"class":146,"line":1728},[144,88357,2217],{"class":154},[144,88359,88360,88362,88364,88366,88369,88372],{"class":146,"line":1757},[144,88361,11252],{"class":150},[144,88363,87876],{"class":203},[144,88365,13595],{"class":150},[144,88367,88368],{"class":154}," _.",[144,88370,88371],{"class":1993},"cloneDeep",[144,88373,70049],{"class":154},[144,88375,88376,88378,88380],{"class":146,"line":1762},[144,88377,73766],{"class":154},[144,88379,58260],{"class":1993},[144,88381,88068],{"class":154},[144,88383,88384,88387,88389],{"class":146,"line":1779},[144,88385,88386],{"class":154},"    o.family.baby ",[144,88388,200],{"class":150},[144,88390,88102],{"class":259},[144,88392,88393,88395,88397],{"class":146,"line":1784},[144,88394,73766],{"class":154},[144,88396,58260],{"class":1993},[144,88398,70049],{"class":154},[144,88400,88401,88403,88405],{"class":146,"line":1789},[144,88402,52430],{"class":154},[144,88404,51826],{"class":51313},[144,88406,51320],{"class":154},[144,88408,88409,88411,88413],{"class":146,"line":1794},[144,88410,51798],{"class":154},[144,88412,51813],{"class":51313},[144,88414,51320],{"class":154},[144,88416,88417],{"class":146,"line":1808},[144,88418,2430],{"emptyLinePlaceholder":72},[144,88420,88421,88423,88425],{"class":146,"line":1813},[144,88422,51798],{"class":154},[144,88424,50648],{"class":51313},[144,88426,51320],{"class":154},[14,88428,88429],{},[28,88430],{"alt":30,"src":88431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22029,88433,88435],{"id":88434},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[135,88437,88439],{"className":50646,"code":88438,"language":50648,"meta":30,"style":30},"\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",[141,88440,88441,88451,88465,88469,88477,88491,88511,88523,88531,88535,88543,88551,88561,88569,88577,88589,88593,88599,88603,88607,88612,88617,88622,88648,88656,88665,88673,88681,88689,88693],{"__ignoreMap":30},[144,88442,88443,88445,88447,88449],{"class":146,"line":147},[144,88444,51310],{"class":154},[144,88446,51314],{"class":51313},[144,88448,51317],{"class":1993},[144,88450,51320],{"class":154},[144,88452,88453,88455,88457,88459,88461,88463],{"class":146,"line":66},[144,88454,1065],{"class":154},[144,88456,50648],{"class":51313},[144,88458,51329],{"class":1993},[144,88460,200],{"class":154},[144,88462,51334],{"class":259},[144,88464,51320],{"class":154},[144,88466,88467],{"class":146,"line":1210},[144,88468,2430],{"emptyLinePlaceholder":72},[144,88470,88471,88473,88475],{"class":146,"line":1225},[144,88472,1065],{"class":154},[144,88474,51347],{"class":51313},[144,88476,51320],{"class":154},[144,88478,88479,88481,88483,88485,88487,88489],{"class":146,"line":1231},[144,88480,52157],{"class":154},[144,88482,51357],{"class":51313},[144,88484,51360],{"class":1993},[144,88486,200],{"class":154},[144,88488,51365],{"class":259},[144,88490,51320],{"class":154},[144,88492,88493,88495,88497,88499,88501,88503,88505,88507,88509],{"class":146,"line":1245},[144,88494,52157],{"class":154},[144,88496,51357],{"class":51313},[144,88498,14951],{"class":1993},[144,88500,200],{"class":154},[144,88502,51404],{"class":259},[144,88504,51384],{"class":1993},[144,88506,200],{"class":154},[144,88508,51411],{"class":259},[144,88510,51320],{"class":154},[144,88512,88513,88515,88517,88519,88521],{"class":146,"line":1251},[144,88514,52157],{"class":154},[144,88516,51420],{"class":51313},[144,88518,51423],{"class":154},[144,88520,51420],{"class":51313},[144,88522,51320],{"class":154},[144,88524,88525,88527,88529],{"class":146,"line":1342},[144,88526,51798],{"class":154},[144,88528,51347],{"class":51313},[144,88530,51320],{"class":154},[144,88532,88533],{"class":146,"line":1348},[144,88534,2430],{"emptyLinePlaceholder":72},[144,88536,88537,88539,88541],{"class":146,"line":1360},[144,88538,1065],{"class":154},[144,88540,51813],{"class":51313},[144,88542,51320],{"class":154},[144,88544,88545,88547,88549],{"class":146,"line":1642},[144,88546,52157],{"class":154},[144,88548,51826],{"class":51313},[144,88550,51320],{"class":154},[144,88552,88553,88555,88557,88559],{"class":146,"line":1647},[144,88554,11252],{"class":150},[144,88556,69984],{"class":203},[144,88558,13595],{"class":150},[144,88560,15603],{"class":154},[144,88562,88563,88565,88567],{"class":146,"line":1653},[144,88564,71629],{"class":154},[144,88566,87823],{"class":259},[144,88568,31479],{"class":154},[144,88570,88571,88573,88575],{"class":146,"line":1658},[144,88572,71639],{"class":154},[144,88574,805],{"class":203},[144,88576,31479],{"class":154},[144,88578,88579,88581,88583,88585,88587],{"class":146,"line":1672},[144,88580,87838],{"class":154},[144,88582,87841],{"class":259},[144,88584,12466],{"class":154},[144,88586,87846],{"class":259},[144,88588,87849],{"class":154},[144,88590,88591],{"class":146,"line":1677},[144,88592,77885],{"class":154},[144,88594,88595,88597],{"class":146,"line":1683},[144,88596,87858],{"class":154},[144,88598,87861],{"class":259},[144,88600,88601],{"class":146,"line":1704},[144,88602,52411],{"class":154},[144,88604,88605],{"class":146,"line":1709},[144,88606,2217],{"class":154},[144,88608,88609],{"class":146,"line":1723},[144,88610,88611],{"class":213},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[144,88613,88614],{"class":146,"line":1728},[144,88615,88616],{"class":213},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[144,88618,88619],{"class":146,"line":1757},[144,88620,88621],{"class":213},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[144,88623,88624,88626,88628,88630,88633,88635,88638,88640,88642,88644,88646],{"class":146,"line":1762},[144,88625,11252],{"class":150},[144,88627,87876],{"class":203},[144,88629,13595],{"class":150},[144,88631,88632],{"class":203}," JSON",[144,88634,713],{"class":154},[144,88636,88637],{"class":1993},"parse",[144,88639,155],{"class":154},[144,88641,71677],{"class":203},[144,88643,713],{"class":154},[144,88645,71682],{"class":1993},[144,88647,71685],{"class":154},[144,88649,88650,88652,88654],{"class":146,"line":1779},[144,88651,73766],{"class":154},[144,88653,58260],{"class":1993},[144,88655,88068],{"class":154},[144,88657,88658,88660,88662],{"class":146,"line":1784},[144,88659,88386],{"class":154},[144,88661,200],{"class":150},[144,88663,88664],{"class":259}," '123'\n",[144,88666,88667,88669,88671],{"class":146,"line":1789},[144,88668,73766],{"class":154},[144,88670,58260],{"class":1993},[144,88672,70049],{"class":154},[144,88674,88675,88677,88679],{"class":146,"line":1794},[144,88676,52430],{"class":154},[144,88678,51826],{"class":51313},[144,88680,51320],{"class":154},[144,88682,88683,88685,88687],{"class":146,"line":1808},[144,88684,51798],{"class":154},[144,88686,51813],{"class":51313},[144,88688,51320],{"class":154},[144,88690,88691],{"class":146,"line":1813},[144,88692,2430],{"emptyLinePlaceholder":72},[144,88694,88695,88697,88699],{"class":146,"line":2607},[144,88696,51798],{"class":154},[144,88698,50648],{"class":51313},[144,88700,51320],{"class":154},[14,88702,88703],{},[28,88704],{"alt":30,"src":88705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[18,88707,88709],{"id":88708},"_415-异常处理","4.15 异常处理",[98,88711,88712],{},[101,88713,88714],{},"throw抛异常",[14,88716,88717],{},[28,88718],{"alt":30,"src":88719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[98,88721,88722],{"start":66},[101,88723,88724],{},"try\u002Fcatch 捕获错误信息",[14,88726,88727],{},[28,88728],{"alt":30,"src":88729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[135,88731,88733],{"className":50646,"code":88732,"language":50648,"meta":30,"style":30},"\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",[141,88734,88735,88745,88759,88763,88771,88785,88805,88817,88825,88829,88837,88849,88857,88866,88873,88878,88897,88906,88917,88922,88932,88937,88942,88947,88964,88968,88973,88980,88992,88996,89008,89012,89016,89021,89026,89033,89041,89049,89053],{"__ignoreMap":30},[144,88736,88737,88739,88741,88743],{"class":146,"line":147},[144,88738,51310],{"class":154},[144,88740,51314],{"class":51313},[144,88742,51317],{"class":1993},[144,88744,51320],{"class":154},[144,88746,88747,88749,88751,88753,88755,88757],{"class":146,"line":66},[144,88748,1065],{"class":154},[144,88750,50648],{"class":51313},[144,88752,51329],{"class":1993},[144,88754,200],{"class":154},[144,88756,51334],{"class":259},[144,88758,51320],{"class":154},[144,88760,88761],{"class":146,"line":1210},[144,88762,2430],{"emptyLinePlaceholder":72},[144,88764,88765,88767,88769],{"class":146,"line":1225},[144,88766,1065],{"class":154},[144,88768,51347],{"class":51313},[144,88770,51320],{"class":154},[144,88772,88773,88775,88777,88779,88781,88783],{"class":146,"line":1231},[144,88774,52157],{"class":154},[144,88776,51357],{"class":51313},[144,88778,51360],{"class":1993},[144,88780,200],{"class":154},[144,88782,51365],{"class":259},[144,88784,51320],{"class":154},[144,88786,88787,88789,88791,88793,88795,88797,88799,88801,88803],{"class":146,"line":1245},[144,88788,52157],{"class":154},[144,88790,51357],{"class":51313},[144,88792,14951],{"class":1993},[144,88794,200],{"class":154},[144,88796,51404],{"class":259},[144,88798,51384],{"class":1993},[144,88800,200],{"class":154},[144,88802,51411],{"class":259},[144,88804,51320],{"class":154},[144,88806,88807,88809,88811,88813,88815],{"class":146,"line":1251},[144,88808,52157],{"class":154},[144,88810,51420],{"class":51313},[144,88812,51423],{"class":154},[144,88814,51420],{"class":51313},[144,88816,51320],{"class":154},[144,88818,88819,88821,88823],{"class":146,"line":1342},[144,88820,51798],{"class":154},[144,88822,51347],{"class":51313},[144,88824,51320],{"class":154},[144,88826,88827],{"class":146,"line":1348},[144,88828,2430],{"emptyLinePlaceholder":72},[144,88830,88831,88833,88835],{"class":146,"line":1360},[144,88832,1065],{"class":154},[144,88834,51813],{"class":51313},[144,88836,51320],{"class":154},[144,88838,88839,88841,88843,88845,88847],{"class":146,"line":1642},[144,88840,52157],{"class":154},[144,88842,14],{"class":51313},[144,88844,53507],{"class":154},[144,88846,14],{"class":51313},[144,88848,51320],{"class":154},[144,88850,88851,88853,88855],{"class":146,"line":1647},[144,88852,52157],{"class":154},[144,88854,51826],{"class":51313},[144,88856,51320],{"class":154},[144,88858,88859,88861,88864],{"class":146,"line":1653},[144,88860,70097],{"class":150},[144,88862,88863],{"class":1993}," fn",[144,88865,10884],{"class":154},[144,88867,88868,88871],{"class":146,"line":1658},[144,88869,88870],{"class":150},"      try",[144,88872,15603],{"class":154},[144,88874,88875],{"class":146,"line":1672},[144,88876,88877],{"class":213},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[144,88879,88880,88882,88884,88886,88888,88890,88892,88895],{"class":146,"line":1677},[144,88881,61283],{"class":150},[144,88883,6856],{"class":203},[144,88885,13595],{"class":150},[144,88887,54409],{"class":154},[144,88889,54412],{"class":1993},[144,88891,155],{"class":154},[144,88893,88894],{"class":259},"'.p'",[144,88896,161],{"class":154},[144,88898,88899,88902,88904],{"class":146,"line":1683},[144,88900,88901],{"class":154},"        p.style.color ",[144,88903,200],{"class":150},[144,88905,67064],{"class":259},[144,88907,88908,88911,88914],{"class":146,"line":1704},[144,88909,88910],{"class":154},"      } ",[144,88912,88913],{"class":150},"catch",[144,88915,88916],{"class":154}," (err) {\n",[144,88918,88919],{"class":146,"line":1709},[144,88920,88921],{"class":213},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[144,88923,88924,88927,88929],{"class":146,"line":1723},[144,88925,88926],{"class":154},"        console.",[144,88928,58260],{"class":1993},[144,88930,88931],{"class":154},"(err.message)\n",[144,88933,88934],{"class":146,"line":1728},[144,88935,88936],{"class":213},"        \u002F\u002F 想要中断程序，需要加return\n",[144,88938,88939],{"class":146,"line":1757},[144,88940,88941],{"class":213},"        \u002F\u002F return\n",[144,88943,88944],{"class":146,"line":1762},[144,88945,88946],{"class":213},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[144,88948,88949,88952,88954,88957,88959,88962],{"class":146,"line":1779},[144,88950,88951],{"class":150},"        throw",[144,88953,11609],{"class":150},[144,88955,88956],{"class":1993}," Error",[144,88958,155],{"class":154},[144,88960,88961],{"class":259},"'你看看，选择器错误了吧'",[144,88963,161],{"class":154},[144,88965,88966],{"class":146,"line":1784},[144,88967,52411],{"class":154},[144,88969,88970],{"class":146,"line":1789},[144,88971,88972],{"class":213},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[144,88974,88975,88978],{"class":146,"line":1794},[144,88976,88977],{"class":150},"      finally",[144,88979,15603],{"class":154},[144,88981,88982,88985,88987,88990],{"class":146,"line":1808},[144,88983,88984],{"class":1993},"        alert",[144,88986,155],{"class":154},[144,88988,88989],{"class":259},"'弹出对话框'",[144,88991,161],{"class":154},[144,88993,88994],{"class":146,"line":1813},[144,88995,52411],{"class":154},[144,88997,88998,89000,89002,89004,89006],{"class":146,"line":2607},[144,88999,58257],{"class":154},[144,89001,58260],{"class":1993},[144,89003,155],{"class":154},[144,89005,627],{"class":203},[144,89007,161],{"class":154},[144,89009,89010],{"class":146,"line":2621},[144,89011,2430],{"emptyLinePlaceholder":72},[144,89013,89014],{"class":146,"line":2629},[144,89015,2217],{"class":154},[144,89017,89018],{"class":146,"line":2634},[144,89019,89020],{"class":213},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[144,89022,89023],{"class":146,"line":2640},[144,89024,89025],{"class":213},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[144,89027,89028,89031],{"class":146,"line":2646},[144,89029,89030],{"class":1993},"    fn",[144,89032,2006],{"class":154},[144,89034,89035,89037,89039],{"class":146,"line":2651},[144,89036,52430],{"class":154},[144,89038,51826],{"class":51313},[144,89040,51320],{"class":154},[144,89042,89043,89045,89047],{"class":146,"line":7979},[144,89044,51798],{"class":154},[144,89046,51813],{"class":51313},[144,89048,51320],{"class":154},[144,89050,89051],{"class":146,"line":8003},[144,89052,2430],{"emptyLinePlaceholder":72},[144,89054,89055,89057,89059],{"class":146,"line":8008},[144,89056,51798],{"class":154},[144,89058,50648],{"class":51313},[144,89060,51320],{"class":154},[14,89062,89063],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[98,89065,89066],{"start":1210},[101,89067,89068],{},"debugger",[14,89070,89071],{},[28,89072],{"alt":30,"src":89073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89075,89076],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[18,89078,89080],{"id":89079},"_416-处理this","4.16 处理this",[115,89082,89084],{"id":89083},"_4161-this的指向","4.16.1 this的指向",[98,89086,89087],{},[101,89088,89089],{},"普通函数的this",[14,89091,89092],{},[28,89093],{"alt":30,"src":89094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[98,89096,89097],{"start":66},[101,89098,89099],{},"箭头函数的this",[14,89101,89102],{},[28,89103],{"alt":30,"src":89104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89106,89107],{},[28,89108],{"alt":30,"src":89109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89111,89112],{},[28,89113],{"alt":30,"src":89114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[115,89116,89118],{"id":89117},"_4162-this的改变","4.16.2 this的改变",[14,89120,89121],{},"call() apply() bind()",[98,89123,89124],{},[101,89125,89126],{},"call()",[14,89128,89129],{},[28,89130],{"alt":30,"src":89131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89133,89134],{},"两个作用：①调用函数；②改变this指向",[135,89136,89138],{"className":53080,"code":89137,"language":53082,"meta":30,"style":30},"\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",[141,89139,89140,89148,89156,89160,89165,89169,89174,89179,89184,89188,89193,89201],{"__ignoreMap":30},[144,89141,89142,89144,89146],{"class":146,"line":147},[144,89143,1065],{"class":154},[144,89145,51813],{"class":51313},[144,89147,51320],{"class":154},[144,89149,89150,89152,89154],{"class":146,"line":66},[144,89151,52157],{"class":154},[144,89153,51826],{"class":51313},[144,89155,51320],{"class":154},[144,89157,89158],{"class":146,"line":1210},[144,89159,71536],{"class":154},[144,89161,89162],{"class":146,"line":1225},[144,89163,89164],{"class":154},"      uname: 'pink'\n",[144,89166,89167],{"class":146,"line":1231},[144,89168,2217],{"class":154},[144,89170,89171],{"class":146,"line":1245},[144,89172,89173],{"class":154},"    function fn(x, y) {\n",[144,89175,89176],{"class":146,"line":1251},[144,89177,89178],{"class":154},"      console.log(this)  \u002F\u002Fwindow\n",[144,89180,89181],{"class":146,"line":1342},[144,89182,89183],{"class":154},"      console.log(x + y)\n",[144,89185,89186],{"class":146,"line":1348},[144,89187,2217],{"class":154},[144,89189,89190],{"class":146,"line":1360},[144,89191,89192],{"class":154},"    fn.call(obj, 1, 2)\n",[144,89194,89195,89197,89199],{"class":146,"line":1642},[144,89196,52430],{"class":154},[144,89198,51826],{"class":51313},[144,89200,51320],{"class":154},[144,89202,89203,89205,89207],{"class":146,"line":1647},[144,89204,51798],{"class":154},[144,89206,51813],{"class":51313},[144,89208,51320],{"class":154},[14,89210,89211],{},[28,89212],{"alt":30,"src":89213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[98,89215,89216],{"start":66},[101,89217,89218],{},"apply()",[14,89220,89221],{},[28,89222],{"alt":30,"src":89223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89225,89134],{},[14,89227,89228],{},"call传递的是普通参数，而apply必须传递的是数组",[135,89230,89232],{"className":50646,"code":89231,"language":50648,"meta":30,"style":30},"\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",[141,89233,89234,89244,89258,89262,89270,89284,89304,89316,89324,89328,89336,89344,89354,89361,89365,89370,89386,89398,89412,89416,89421,89440,89445,89449,89454,89459,89467,89472,89494,89499,89515,89531,89543,89547,89552,89571,89579,89587,89591],{"__ignoreMap":30},[144,89235,89236,89238,89240,89242],{"class":146,"line":147},[144,89237,51310],{"class":154},[144,89239,51314],{"class":51313},[144,89241,51317],{"class":1993},[144,89243,51320],{"class":154},[144,89245,89246,89248,89250,89252,89254,89256],{"class":146,"line":66},[144,89247,1065],{"class":154},[144,89249,50648],{"class":51313},[144,89251,51329],{"class":1993},[144,89253,200],{"class":154},[144,89255,51334],{"class":259},[144,89257,51320],{"class":154},[144,89259,89260],{"class":146,"line":1210},[144,89261,2430],{"emptyLinePlaceholder":72},[144,89263,89264,89266,89268],{"class":146,"line":1225},[144,89265,1065],{"class":154},[144,89267,51347],{"class":51313},[144,89269,51320],{"class":154},[144,89271,89272,89274,89276,89278,89280,89282],{"class":146,"line":1231},[144,89273,52157],{"class":154},[144,89275,51357],{"class":51313},[144,89277,51360],{"class":1993},[144,89279,200],{"class":154},[144,89281,51365],{"class":259},[144,89283,51320],{"class":154},[144,89285,89286,89288,89290,89292,89294,89296,89298,89300,89302],{"class":146,"line":1245},[144,89287,52157],{"class":154},[144,89289,51357],{"class":51313},[144,89291,14951],{"class":1993},[144,89293,200],{"class":154},[144,89295,51404],{"class":259},[144,89297,51384],{"class":1993},[144,89299,200],{"class":154},[144,89301,51411],{"class":259},[144,89303,51320],{"class":154},[144,89305,89306,89308,89310,89312,89314],{"class":146,"line":1251},[144,89307,52157],{"class":154},[144,89309,51420],{"class":51313},[144,89311,51423],{"class":154},[144,89313,51420],{"class":51313},[144,89315,51320],{"class":154},[144,89317,89318,89320,89322],{"class":146,"line":1342},[144,89319,51798],{"class":154},[144,89321,51347],{"class":51313},[144,89323,51320],{"class":154},[144,89325,89326],{"class":146,"line":1348},[144,89327,2430],{"emptyLinePlaceholder":72},[144,89329,89330,89332,89334],{"class":146,"line":1360},[144,89331,1065],{"class":154},[144,89333,51813],{"class":51313},[144,89335,51320],{"class":154},[144,89337,89338,89340,89342],{"class":146,"line":1642},[144,89339,52157],{"class":154},[144,89341,51826],{"class":51313},[144,89343,51320],{"class":154},[144,89345,89346,89348,89350,89352],{"class":146,"line":1647},[144,89347,11252],{"class":150},[144,89349,69984],{"class":203},[144,89351,13595],{"class":150},[144,89353,15603],{"class":154},[144,89355,89356,89358],{"class":146,"line":1653},[144,89357,71639],{"class":154},[144,89359,89360],{"class":203},"18\n",[144,89362,89363],{"class":146,"line":1658},[144,89364,2217],{"class":154},[144,89366,89367],{"class":146,"line":1672},[144,89368,89369],{"class":213},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[144,89371,89372,89374,89376,89378,89380,89382,89384],{"class":146,"line":1677},[144,89373,70097],{"class":150},[144,89375,88863],{"class":1993},[144,89377,155],{"class":154},[144,89379,975],{"class":5247},[144,89381,12466],{"class":154},[144,89383,1000],{"class":5247},[144,89385,12473],{"class":154},[144,89387,89388,89390,89392,89394,89396],{"class":146,"line":1683},[144,89389,58257],{"class":154},[144,89391,58260],{"class":1993},[144,89393,155],{"class":154},[144,89395,87006],{"class":203},[144,89397,161],{"class":154},[144,89399,89400,89402,89404,89407,89409],{"class":146,"line":1704},[144,89401,58257],{"class":154},[144,89403,58260],{"class":1993},[144,89405,89406],{"class":154},"(x ",[144,89408,636],{"class":150},[144,89410,89411],{"class":154}," y)\n",[144,89413,89414],{"class":146,"line":1709},[144,89415,2217],{"class":154},[144,89417,89418],{"class":146,"line":1723},[144,89419,89420],{"class":213},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[144,89422,89423,89426,89429,89432,89434,89436,89438],{"class":146,"line":1728},[144,89424,89425],{"class":154},"    fn.",[144,89427,89428],{"class":1993},"apply",[144,89430,89431],{"class":154},"(obj, [",[144,89433,372],{"class":203},[144,89435,12466],{"class":154},[144,89437,232],{"class":203},[144,89439,4687],{"class":154},[144,89441,89442],{"class":146,"line":1757},[144,89443,89444],{"class":213},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[144,89446,89447],{"class":146,"line":1762},[144,89448,2430],{"emptyLinePlaceholder":72},[144,89450,89451],{"class":146,"line":1779},[144,89452,89453],{"class":213},"    \u002F\u002F 使用场景：求数组最大值\n",[144,89455,89456],{"class":146,"line":1784},[144,89457,89458],{"class":213},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[144,89460,89461,89464],{"class":146,"line":1789},[144,89462,89463],{"class":213},"    \u002F\u002F console.log(max)",[144,89465,89466],{"class":213},"   \u002F\u002F3\n",[144,89468,89469],{"class":146,"line":1794},[144,89470,89471],{"class":213},"    \u002F\u002F 指向空或者Math都是可以的\n",[144,89473,89474,89476,89478,89480,89482,89484,89486,89488,89490,89492],{"class":146,"line":1808},[144,89475,11252],{"class":150},[144,89477,57708],{"class":203},[144,89479,13595],{"class":150},[144,89481,52239],{"class":154},[144,89483,466],{"class":203},[144,89485,12466],{"class":154},[144,89487,659],{"class":203},[144,89489,12466],{"class":154},[144,89491,690],{"class":203},[144,89493,33259],{"class":154},[144,89495,89496],{"class":146,"line":1813},[144,89497,89498],{"class":213},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[144,89500,89501,89503,89505,89507,89510,89512],{"class":146,"line":2607},[144,89502,11252],{"class":150},[144,89504,5982],{"class":203},[144,89506,13595],{"class":150},[144,89508,89509],{"class":154}," Math.max.",[144,89511,89428],{"class":1993},[144,89513,89514],{"class":154},"(Math, arr)\n",[144,89516,89517,89519,89522,89524,89527,89529],{"class":146,"line":2621},[144,89518,11252],{"class":150},[144,89520,89521],{"class":203}," min",[144,89523,13595],{"class":150},[144,89525,89526],{"class":154}," Math.min.",[144,89528,89428],{"class":1993},[144,89530,89514],{"class":154},[144,89532,89533,89535,89537,89540],{"class":146,"line":2629},[144,89534,73766],{"class":154},[144,89536,58260],{"class":1993},[144,89538,89539],{"class":154},"(max, min)     ",[144,89541,89542],{"class":213},"\u002F\u002F100,4\n",[144,89544,89545],{"class":146,"line":2634},[144,89546,2430],{"emptyLinePlaceholder":72},[144,89548,89549],{"class":146,"line":2640},[144,89550,89551],{"class":213},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[144,89553,89554,89556,89558,89561,89563,89565,89568],{"class":146,"line":2646},[144,89555,73766],{"class":154},[144,89557,58260],{"class":1993},[144,89559,89560],{"class":154},"(Max.",[144,89562,6046],{"class":1993},[144,89564,155],{"class":154},[144,89566,89567],{"class":150},"...",[144,89569,89570],{"class":154},"arr))\n",[144,89572,89573,89575,89577],{"class":146,"line":2651},[144,89574,52430],{"class":154},[144,89576,51826],{"class":51313},[144,89578,51320],{"class":154},[144,89580,89581,89583,89585],{"class":146,"line":7979},[144,89582,51798],{"class":154},[144,89584,51813],{"class":51313},[144,89586,51320],{"class":154},[144,89588,89589],{"class":146,"line":8003},[144,89590,2430],{"emptyLinePlaceholder":72},[144,89592,89593,89595,89597],{"class":146,"line":8008},[144,89594,51798],{"class":154},[144,89596,50648],{"class":51313},[144,89598,51320],{"class":154},[14,89600,89601],{},[28,89602],{"alt":30,"src":89603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[98,89605,89606],{"start":1210},[101,89607,89608],{},"bind()",[14,89610,89611],{},[28,89612],{"alt":30,"src":89613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,89615,89616],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,89618,89619],{},"bind的语法跟call很相似",[135,89621,89623],{"className":53080,"code":89622,"language":53082,"meta":30,"style":30},"\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",[141,89624,89625,89633,89641,89645,89650,89654,89658,89663,89667,89672,89677,89682,89687,89692,89697,89702,89706,89714],{"__ignoreMap":30},[144,89626,89627,89629,89631],{"class":146,"line":147},[144,89628,1065],{"class":154},[144,89630,51813],{"class":51313},[144,89632,51320],{"class":154},[144,89634,89635,89637,89639],{"class":146,"line":66},[144,89636,52157],{"class":154},[144,89638,51826],{"class":51313},[144,89640,51320],{"class":154},[144,89642,89643],{"class":146,"line":1210},[144,89644,71536],{"class":154},[144,89646,89647],{"class":146,"line":1225},[144,89648,89649],{"class":154},"      age: 18\n",[144,89651,89652],{"class":146,"line":1231},[144,89653,2217],{"class":154},[144,89655,89656],{"class":146,"line":1245},[144,89657,77156],{"class":154},[144,89659,89660],{"class":146,"line":1251},[144,89661,89662],{"class":154},"      console.log(this)\n",[144,89664,89665],{"class":146,"line":1342},[144,89666,2217],{"class":154},[144,89668,89669],{"class":146,"line":1348},[144,89670,89671],{"class":154},"    \u002F\u002F 1.bind 不会调用函数\n",[144,89673,89674],{"class":146,"line":1360},[144,89675,89676],{"class":154},"    \u002F\u002F 2.bind能改变this的指向\n",[144,89678,89679],{"class":146,"line":1642},[144,89680,89681],{"class":154},"    fn.bind()\n",[144,89683,89684],{"class":146,"line":1647},[144,89685,89686],{"class":154},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[144,89688,89689],{"class":146,"line":1653},[144,89690,89691],{"class":154},"    const fun = fn.bind(obj)\n",[144,89693,89694],{"class":146,"line":1658},[144,89695,89696],{"class":154},"    \u002F\u002F console.log(fun)\n",[144,89698,89699],{"class":146,"line":1672},[144,89700,89701],{"class":154},"    \u002F\u002F 调用,查看this的指向\n",[144,89703,89704],{"class":146,"line":1677},[144,89705,52664],{"class":154},[144,89707,89708,89710,89712],{"class":146,"line":1683},[144,89709,52430],{"class":154},[144,89711,51826],{"class":51313},[144,89713,51320],{"class":154},[144,89715,89716,89718,89720],{"class":146,"line":1704},[144,89717,51798],{"class":154},[144,89719,51813],{"class":51313},[144,89721,51320],{"class":154},[14,89723,89724],{},[28,89725],{"alt":30,"src":89726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[98,89728,89729],{"start":1225},[101,89730,89731],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[135,89733,89735],{"className":53080,"code":89734,"language":53082,"meta":30,"style":30},"\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",[141,89736,89737,89745,89758,89766,89771,89775,89780,89785,89790,89795,89800,89805,89810,89815,89819,89827],{"__ignoreMap":30},[144,89738,89739,89741,89743],{"class":146,"line":147},[144,89740,1065],{"class":154},[144,89742,51813],{"class":51313},[144,89744,51320],{"class":154},[144,89746,89747,89749,89751,89754,89756],{"class":146,"line":66},[144,89748,52157],{"class":154},[144,89750,53900],{"class":51313},[144,89752,89753],{"class":154},">禁用\u003C\u002F",[144,89755,53900],{"class":51313},[144,89757,51320],{"class":154},[144,89759,89760,89762,89764],{"class":146,"line":1210},[144,89761,52157],{"class":154},[144,89763,51826],{"class":51313},[144,89765,51320],{"class":154},[144,89767,89768],{"class":146,"line":1225},[144,89769,89770],{"class":154},"    const btn = document.querySelector('button')\n",[144,89772,89773],{"class":146,"line":1231},[144,89774,59029],{"class":154},[144,89776,89777],{"class":146,"line":1245},[144,89778,89779],{"class":154},"      this.disabled = true\n",[144,89781,89782],{"class":146,"line":1251},[144,89783,89784],{"class":154},"      \u002F\u002F 定时器是window进行调用的\n",[144,89786,89787],{"class":146,"line":1342},[144,89788,89789],{"class":154},"      setTimeout(function () {\n",[144,89791,89792],{"class":146,"line":1348},[144,89793,89794],{"class":154},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[144,89796,89797],{"class":146,"line":1360},[144,89798,89799],{"class":154},"        this.disabled = false\n",[144,89801,89802],{"class":146,"line":1642},[144,89803,89804],{"class":154},"      }.bind(this), 2000)\n",[144,89806,89807],{"class":146,"line":1647},[144,89808,89809],{"class":154},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[144,89811,89812],{"class":146,"line":1653},[144,89813,89814],{"class":154},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[144,89816,89817],{"class":146,"line":1658},[144,89818,33474],{"class":154},[144,89820,89821,89823,89825],{"class":146,"line":1672},[144,89822,52430],{"class":154},[144,89824,51826],{"class":51313},[144,89826,51320],{"class":154},[144,89828,89829,89831,89833],{"class":146,"line":1677},[144,89830,51798],{"class":154},[144,89832,51813],{"class":51313},[144,89834,51320],{"class":154},[98,89836,89837],{"start":1231},[101,89838,21984],{},[14,89840,89841],{},[28,89842],{"alt":30,"src":89843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[18,89845,89847],{"id":89846},"_417-性能优化","4.17 性能优化",[115,89849,89851],{"id":89850},"_4171-防抖","4.17.1 防抖",[14,89853,89854],{},[28,89855],{"alt":30,"src":89856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,89858,89859],{},[304,89860,89861],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,89863,89864],{},"防抖实现方式：",[1162,89866,89867],{},[101,89868,89869],{},"lodash 提供了防抖处理",[14,89871,89872],{},"_.debounce(func,[wait=0],[options={}])",[14,89874,89875],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[135,89877,89879],{"className":50646,"code":89878,"language":50648,"meta":30,"style":30},"\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",[141,89880,89881,89891,89905,89909,89917,89931,89951,89963,89971,89977,89987,89999,90011,90022,90034,90044,90054,90067,90071,90079,90087,90091,90099,90117,90135,90143,90162,90172,90181,90192,90197,90201,90206,90211,90216,90241,90249,90257,90261],{"__ignoreMap":30},[144,89882,89883,89885,89887,89889],{"class":146,"line":147},[144,89884,51310],{"class":154},[144,89886,51314],{"class":51313},[144,89888,51317],{"class":1993},[144,89890,51320],{"class":154},[144,89892,89893,89895,89897,89899,89901,89903],{"class":146,"line":66},[144,89894,1065],{"class":154},[144,89896,50648],{"class":51313},[144,89898,51329],{"class":1993},[144,89900,200],{"class":154},[144,89902,51334],{"class":259},[144,89904,51320],{"class":154},[144,89906,89907],{"class":146,"line":1210},[144,89908,2430],{"emptyLinePlaceholder":72},[144,89910,89911,89913,89915],{"class":146,"line":1225},[144,89912,1065],{"class":154},[144,89914,51347],{"class":51313},[144,89916,51320],{"class":154},[144,89918,89919,89921,89923,89925,89927,89929],{"class":146,"line":1231},[144,89920,52157],{"class":154},[144,89922,51357],{"class":51313},[144,89924,51360],{"class":1993},[144,89926,200],{"class":154},[144,89928,51365],{"class":259},[144,89930,51320],{"class":154},[144,89932,89933,89935,89937,89939,89941,89943,89945,89947,89949],{"class":146,"line":1245},[144,89934,52157],{"class":154},[144,89936,51357],{"class":51313},[144,89938,14951],{"class":1993},[144,89940,200],{"class":154},[144,89942,51404],{"class":259},[144,89944,51384],{"class":1993},[144,89946,200],{"class":154},[144,89948,51411],{"class":259},[144,89950,51320],{"class":154},[144,89952,89953,89955,89957,89959,89961],{"class":146,"line":1251},[144,89954,52157],{"class":154},[144,89956,51420],{"class":51313},[144,89958,51423],{"class":154},[144,89960,51420],{"class":51313},[144,89962,51320],{"class":154},[144,89964,89965,89967,89969],{"class":146,"line":1342},[144,89966,52157],{"class":154},[144,89968,5157],{"class":51313},[144,89970,51320],{"class":154},[144,89972,89973,89975],{"class":146,"line":1348},[144,89974,54765],{"class":1993},[144,89976,15603],{"class":154},[144,89978,89979,89981,89983,89985],{"class":146,"line":1360},[144,89980,72609],{"class":203},[144,89982,51450],{"class":154},[144,89984,60518],{"class":203},[144,89986,1321],{"class":154},[144,89988,89989,89991,89993,89995,89997],{"class":146,"line":1642},[144,89990,54784],{"class":203},[144,89992,51450],{"class":154},[144,89994,1752],{"class":203},[144,89996,51505],{"class":150},[144,89998,1321],{"class":154},[144,90000,90001,90003,90005,90007,90009],{"class":146,"line":1647},[144,90002,54798],{"class":203},[144,90004,51450],{"class":154},[144,90006,1752],{"class":203},[144,90008,51505],{"class":150},[144,90010,1321],{"class":154},[144,90012,90013,90015,90017,90020],{"class":146,"line":1653},[144,90014,54897],{"class":203},[144,90016,51450],{"class":154},[144,90018,90019],{"class":203},"gray",[144,90021,1321],{"class":154},[144,90023,90024,90026,90028,90030,90032],{"class":146,"line":1658},[144,90025,54935],{"class":203},[144,90027,51450],{"class":154},[144,90029,980],{"class":203},[144,90031,51505],{"class":150},[144,90033,1321],{"class":154},[144,90035,90036,90038,90040,90042],{"class":146,"line":1672},[144,90037,57429],{"class":203},[144,90039,51450],{"class":154},[144,90041,60855],{"class":203},[144,90043,1321],{"class":154},[144,90045,90046,90048,90050,90052],{"class":146,"line":1677},[144,90047,57299],{"class":203},[144,90049,51450],{"class":154},[144,90051,51605],{"class":203},[144,90053,1321],{"class":154},[144,90055,90056,90059,90061,90063,90065],{"class":146,"line":1683},[144,90057,90058],{"class":203},"      padding-top",[144,90060,51450],{"class":154},[144,90062,474],{"class":203},[144,90064,51505],{"class":150},[144,90066,1321],{"class":154},[144,90068,90069],{"class":146,"line":1704},[144,90070,2217],{"class":154},[144,90072,90073,90075,90077],{"class":146,"line":1709},[144,90074,52430],{"class":154},[144,90076,5157],{"class":51313},[144,90078,51320],{"class":154},[144,90080,90081,90083,90085],{"class":146,"line":1723},[144,90082,51798],{"class":154},[144,90084,51347],{"class":51313},[144,90086,51320],{"class":154},[144,90088,90089],{"class":146,"line":1728},[144,90090,2430],{"emptyLinePlaceholder":72},[144,90092,90093,90095,90097],{"class":146,"line":1757},[144,90094,1065],{"class":154},[144,90096,51813],{"class":51313},[144,90098,51320],{"class":154},[144,90100,90101,90103,90105,90107,90109,90111,90113,90115],{"class":146,"line":1762},[144,90102,52157],{"class":154},[144,90104,51624],{"class":51313},[144,90106,53499],{"class":1993},[144,90108,200],{"class":154},[144,90110,53504],{"class":259},[144,90112,55327],{"class":154},[144,90114,51624],{"class":51313},[144,90116,51320],{"class":154},[144,90118,90119,90121,90123,90125,90127,90129,90131,90133],{"class":146,"line":1779},[144,90120,52157],{"class":154},[144,90122,51826],{"class":51313},[144,90124,55252],{"class":1993},[144,90126,200],{"class":154},[144,90128,88287],{"class":259},[144,90130,55327],{"class":154},[144,90132,51826],{"class":51313},[144,90134,51320],{"class":154},[144,90136,90137,90139,90141],{"class":146,"line":1784},[144,90138,52157],{"class":154},[144,90140,51826],{"class":51313},[144,90142,51320],{"class":154},[144,90144,90145,90147,90149,90151,90153,90155,90157,90160],{"class":146,"line":1789},[144,90146,11252],{"class":150},[144,90148,86946],{"class":203},[144,90150,13595],{"class":150},[144,90152,54409],{"class":154},[144,90154,54412],{"class":1993},[144,90156,155],{"class":154},[144,90158,90159],{"class":259},"'.box'",[144,90161,161],{"class":154},[144,90163,90164,90166,90168,90170],{"class":146,"line":1794},[144,90165,52232],{"class":150},[144,90167,9469],{"class":154},[144,90169,200],{"class":150},[144,90171,47346],{"class":203},[144,90173,90174,90176,90179],{"class":146,"line":1808},[144,90175,70097],{"class":150},[144,90177,90178],{"class":1993}," mouseMove",[144,90180,10884],{"class":154},[144,90182,90183,90186,90188,90190],{"class":146,"line":1813},[144,90184,90185],{"class":154},"      box.innerHTML ",[144,90187,200],{"class":150},[144,90189,3062],{"class":154},[144,90191,2732],{"class":150},[144,90193,90194],{"class":146,"line":2607},[144,90195,90196],{"class":213},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[144,90198,90199],{"class":146,"line":2621},[144,90200,2217],{"class":154},[144,90202,90203],{"class":146,"line":2629},[144,90204,90205],{"class":213},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[144,90207,90208],{"class":146,"line":2634},[144,90209,90210],{"class":213},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[144,90212,90213],{"class":146,"line":2640},[144,90214,90215],{"class":213},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[144,90217,90218,90221,90223,90225,90228,90231,90234,90237,90239],{"class":146,"line":2646},[144,90219,90220],{"class":154},"    box.",[144,90222,57826],{"class":1993},[144,90224,155],{"class":154},[144,90226,90227],{"class":259},"'mousemove'",[144,90229,90230],{"class":154},", _.",[144,90232,90233],{"class":1993},"debounce",[144,90235,90236],{"class":154},"(mouseMove, ",[144,90238,65087],{"class":203},[144,90240,30510],{"class":154},[144,90242,90243,90245,90247],{"class":146,"line":2651},[144,90244,52430],{"class":154},[144,90246,51826],{"class":51313},[144,90248,51320],{"class":154},[144,90250,90251,90253,90255],{"class":146,"line":7979},[144,90252,51798],{"class":154},[144,90254,51813],{"class":51313},[144,90256,51320],{"class":154},[144,90258,90259],{"class":146,"line":8003},[144,90260,2430],{"emptyLinePlaceholder":72},[144,90262,90263,90265,90267],{"class":146,"line":8008},[144,90264,51798],{"class":154},[144,90266,50648],{"class":51313},[144,90268,51320],{"class":154},[1162,90270,90271],{},[101,90272,90273],{},"手写一个防抖函数来处理",[14,90275,90276],{},"防抖的核心就是利用定时器来实现的：",[14,90278,90279],{},"①声明一个定时器变量",[14,90281,90282],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90284,90285],{},"③如果没有定时器则开启定时器，记得存到变量里面",[135,90287,90289],{"className":50646,"code":90288,"language":50648,"meta":30,"style":30},"\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",[141,90290,90291,90301,90315,90319,90327,90341,90361,90373,90381,90387,90397,90409,90421,90431,90443,90453,90463,90475,90479,90487,90495,90499,90507,90525,90543,90551,90569,90579,90587,90597,90601,90605,90609,90614,90619,90624,90629,90634,90639,90657,90664,90669,90677,90682,90695,90711,90721,90726,90730,90734,90754,90758,90763,90768,90773,90778,90786,90794,90798],{"__ignoreMap":30},[144,90292,90293,90295,90297,90299],{"class":146,"line":147},[144,90294,51310],{"class":154},[144,90296,51314],{"class":51313},[144,90298,51317],{"class":1993},[144,90300,51320],{"class":154},[144,90302,90303,90305,90307,90309,90311,90313],{"class":146,"line":66},[144,90304,1065],{"class":154},[144,90306,50648],{"class":51313},[144,90308,51329],{"class":1993},[144,90310,200],{"class":154},[144,90312,51334],{"class":259},[144,90314,51320],{"class":154},[144,90316,90317],{"class":146,"line":1210},[144,90318,2430],{"emptyLinePlaceholder":72},[144,90320,90321,90323,90325],{"class":146,"line":1225},[144,90322,1065],{"class":154},[144,90324,51347],{"class":51313},[144,90326,51320],{"class":154},[144,90328,90329,90331,90333,90335,90337,90339],{"class":146,"line":1231},[144,90330,52157],{"class":154},[144,90332,51357],{"class":51313},[144,90334,51360],{"class":1993},[144,90336,200],{"class":154},[144,90338,51365],{"class":259},[144,90340,51320],{"class":154},[144,90342,90343,90345,90347,90349,90351,90353,90355,90357,90359],{"class":146,"line":1245},[144,90344,52157],{"class":154},[144,90346,51357],{"class":51313},[144,90348,14951],{"class":1993},[144,90350,200],{"class":154},[144,90352,51404],{"class":259},[144,90354,51384],{"class":1993},[144,90356,200],{"class":154},[144,90358,51411],{"class":259},[144,90360,51320],{"class":154},[144,90362,90363,90365,90367,90369,90371],{"class":146,"line":1251},[144,90364,52157],{"class":154},[144,90366,51420],{"class":51313},[144,90368,51423],{"class":154},[144,90370,51420],{"class":51313},[144,90372,51320],{"class":154},[144,90374,90375,90377,90379],{"class":146,"line":1342},[144,90376,52157],{"class":154},[144,90378,5157],{"class":51313},[144,90380,51320],{"class":154},[144,90382,90383,90385],{"class":146,"line":1348},[144,90384,54765],{"class":1993},[144,90386,15603],{"class":154},[144,90388,90389,90391,90393,90395],{"class":146,"line":1360},[144,90390,72609],{"class":203},[144,90392,51450],{"class":154},[144,90394,60518],{"class":203},[144,90396,1321],{"class":154},[144,90398,90399,90401,90403,90405,90407],{"class":146,"line":1642},[144,90400,54784],{"class":203},[144,90402,51450],{"class":154},[144,90404,1752],{"class":203},[144,90406,51505],{"class":150},[144,90408,1321],{"class":154},[144,90410,90411,90413,90415,90417,90419],{"class":146,"line":1647},[144,90412,54798],{"class":203},[144,90414,51450],{"class":154},[144,90416,1752],{"class":203},[144,90418,51505],{"class":150},[144,90420,1321],{"class":154},[144,90422,90423,90425,90427,90429],{"class":146,"line":1653},[144,90424,54897],{"class":203},[144,90426,51450],{"class":154},[144,90428,90019],{"class":203},[144,90430,1321],{"class":154},[144,90432,90433,90435,90437,90439,90441],{"class":146,"line":1658},[144,90434,54935],{"class":203},[144,90436,51450],{"class":154},[144,90438,980],{"class":203},[144,90440,51505],{"class":150},[144,90442,1321],{"class":154},[144,90444,90445,90447,90449,90451],{"class":146,"line":1672},[144,90446,57429],{"class":203},[144,90448,51450],{"class":154},[144,90450,60855],{"class":203},[144,90452,1321],{"class":154},[144,90454,90455,90457,90459,90461],{"class":146,"line":1677},[144,90456,57299],{"class":203},[144,90458,51450],{"class":154},[144,90460,51605],{"class":203},[144,90462,1321],{"class":154},[144,90464,90465,90467,90469,90471,90473],{"class":146,"line":1683},[144,90466,90058],{"class":203},[144,90468,51450],{"class":154},[144,90470,474],{"class":203},[144,90472,51505],{"class":150},[144,90474,1321],{"class":154},[144,90476,90477],{"class":146,"line":1704},[144,90478,2217],{"class":154},[144,90480,90481,90483,90485],{"class":146,"line":1709},[144,90482,52430],{"class":154},[144,90484,5157],{"class":51313},[144,90486,51320],{"class":154},[144,90488,90489,90491,90493],{"class":146,"line":1723},[144,90490,51798],{"class":154},[144,90492,51347],{"class":51313},[144,90494,51320],{"class":154},[144,90496,90497],{"class":146,"line":1728},[144,90498,2430],{"emptyLinePlaceholder":72},[144,90500,90501,90503,90505],{"class":146,"line":1757},[144,90502,1065],{"class":154},[144,90504,51813],{"class":51313},[144,90506,51320],{"class":154},[144,90508,90509,90511,90513,90515,90517,90519,90521,90523],{"class":146,"line":1762},[144,90510,52157],{"class":154},[144,90512,51624],{"class":51313},[144,90514,53499],{"class":1993},[144,90516,200],{"class":154},[144,90518,53504],{"class":259},[144,90520,55327],{"class":154},[144,90522,51624],{"class":51313},[144,90524,51320],{"class":154},[144,90526,90527,90529,90531,90533,90535,90537,90539,90541],{"class":146,"line":1779},[144,90528,52157],{"class":154},[144,90530,51826],{"class":51313},[144,90532,55252],{"class":1993},[144,90534,200],{"class":154},[144,90536,88287],{"class":259},[144,90538,55327],{"class":154},[144,90540,51826],{"class":51313},[144,90542,51320],{"class":154},[144,90544,90545,90547,90549],{"class":146,"line":1784},[144,90546,52157],{"class":154},[144,90548,51826],{"class":51313},[144,90550,51320],{"class":154},[144,90552,90553,90555,90557,90559,90561,90563,90565,90567],{"class":146,"line":1789},[144,90554,11252],{"class":150},[144,90556,86946],{"class":203},[144,90558,13595],{"class":150},[144,90560,54409],{"class":154},[144,90562,54412],{"class":1993},[144,90564,155],{"class":154},[144,90566,90159],{"class":259},[144,90568,161],{"class":154},[144,90570,90571,90573,90575,90577],{"class":146,"line":1794},[144,90572,52232],{"class":150},[144,90574,9469],{"class":154},[144,90576,200],{"class":150},[144,90578,47346],{"class":203},[144,90580,90581,90583,90585],{"class":146,"line":1808},[144,90582,70097],{"class":150},[144,90584,90178],{"class":1993},[144,90586,10884],{"class":154},[144,90588,90589,90591,90593,90595],{"class":146,"line":1813},[144,90590,90185],{"class":154},[144,90592,200],{"class":150},[144,90594,3062],{"class":154},[144,90596,2732],{"class":150},[144,90598,90599],{"class":146,"line":2607},[144,90600,90196],{"class":213},[144,90602,90603],{"class":146,"line":2621},[144,90604,2217],{"class":154},[144,90606,90607],{"class":146,"line":2629},[144,90608,90205],{"class":213},[144,90610,90611],{"class":146,"line":2634},[144,90612,90613],{"class":213},"    \u002F\u002F 手写防抖函数\n",[144,90615,90616],{"class":146,"line":2640},[144,90617,90618],{"class":213},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[144,90620,90621],{"class":146,"line":2646},[144,90622,90623],{"class":213},"    \u002F\u002F 1.声明定时器变量\n",[144,90625,90626],{"class":146,"line":2651},[144,90627,90628],{"class":213},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[144,90630,90631],{"class":146,"line":7979},[144,90632,90633],{"class":213},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[144,90635,90636],{"class":146,"line":8003},[144,90637,90638],{"class":213},"    \u002F\u002F 4.定时器里面写函数调用\n",[144,90640,90641,90643,90646,90648,90651,90653,90655],{"class":146,"line":8008},[144,90642,70097],{"class":150},[144,90644,90645],{"class":1993}," debounce",[144,90647,155],{"class":154},[144,90649,90650],{"class":5247},"fn",[144,90652,12466],{"class":154},[144,90654,875],{"class":5247},[144,90656,12473],{"class":154},[144,90658,90659,90661],{"class":146,"line":8014},[144,90660,79785],{"class":150},[144,90662,90663],{"class":154}," timer\n",[144,90665,90666],{"class":146,"line":8041},[144,90667,90668],{"class":213},"      \u002F\u002F return 返回一个匿名函数\n",[144,90670,90671,90673,90675],{"class":146,"line":8046},[144,90672,73995],{"class":150},[144,90674,58931],{"class":150},[144,90676,54465],{"class":154},[144,90678,90679],{"class":146,"line":8052},[144,90680,90681],{"class":213},"        \u002F\u002F 这里边写第二三四步\n",[144,90683,90684,90686,90689,90692],{"class":146,"line":8064},[144,90685,2527],{"class":150},[144,90687,90688],{"class":154}," (timer) ",[144,90690,90691],{"class":1993},"clearTimeout",[144,90693,90694],{"class":154},"(timer)\n",[144,90696,90697,90700,90702,90705,90707,90709],{"class":146,"line":8076},[144,90698,90699],{"class":154},"        timer ",[144,90701,200],{"class":150},[144,90703,90704],{"class":1993}," setTimeout",[144,90706,155],{"class":154},[144,90708,54462],{"class":150},[144,90710,54465],{"class":154},[144,90712,90713,90716,90718],{"class":146,"line":8088},[144,90714,90715],{"class":1993},"          fn",[144,90717,13081],{"class":154},[144,90719,90720],{"class":213},"\u002F\u002F加小括号调用fn }, t)\n",[144,90722,90723],{"class":146,"line":9747},[144,90724,90725],{"class":154},"        }, t)\n",[144,90727,90728],{"class":146,"line":9772},[144,90729,52411],{"class":154},[144,90731,90732],{"class":146,"line":9795},[144,90733,2217],{"class":154},[144,90735,90736,90738,90740,90742,90744,90746,90748,90750,90752],{"class":146,"line":9819},[144,90737,90220],{"class":154},[144,90739,57826],{"class":1993},[144,90741,155],{"class":154},[144,90743,90227],{"class":259},[144,90745,12466],{"class":154},[144,90747,90233],{"class":1993},[144,90749,90236],{"class":154},[144,90751,65087],{"class":203},[144,90753,30510],{"class":154},[144,90755,90756],{"class":146,"line":9824},[144,90757,2430],{"emptyLinePlaceholder":72},[144,90759,90760],{"class":146,"line":9829},[144,90761,90762],{"class":213},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[144,90764,90765],{"class":146,"line":9834},[144,90766,90767],{"class":213},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[144,90769,90770],{"class":146,"line":9843},[144,90771,90772],{"class":213},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[144,90774,90775],{"class":146,"line":9848},[144,90776,90777],{"class":213},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[144,90779,90780,90782,90784],{"class":146,"line":9854},[144,90781,52430],{"class":154},[144,90783,51826],{"class":51313},[144,90785,51320],{"class":154},[144,90787,90788,90790,90792],{"class":146,"line":9875},[144,90789,51798],{"class":154},[144,90791,51813],{"class":51313},[144,90793,51320],{"class":154},[144,90795,90796],{"class":146,"line":9881},[144,90797,2430],{"emptyLinePlaceholder":72},[144,90799,90800,90802,90804],{"class":146,"line":9895},[144,90801,51798],{"class":154},[144,90803,50648],{"class":51313},[144,90805,51320],{"class":154},[115,90807,90809],{"id":90808},"_4172-节流","4.17.2 节流",[14,90811,90812],{},[28,90813],{"alt":30,"src":90814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,90816,90817],{},[28,90818],{"alt":30,"src":90819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,90821,90822],{},[304,90823,90824],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,90826,90827],{},"实现方式：",[1162,90829,90830],{},[101,90831,90832],{},"lodash 提供的节流函数来处理",[14,90834,90835],{},"_.throttle(func,[wait=0],[options=])",[14,90837,90838],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[135,90840,90842],{"className":50646,"code":90841,"language":50648,"meta":30,"style":30},"\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",[141,90843,90844,90854,90868,90872,90880,90894,90914,90926,90934,90940,90950,90962,90974,90984,90996,91006,91016,91028,91032,91040,91048,91052,91060,91078,91096,91104,91122,91132,91140,91150,91154,91158,91162,91167,91172,91193,91201,91209,91213],{"__ignoreMap":30},[144,90845,90846,90848,90850,90852],{"class":146,"line":147},[144,90847,51310],{"class":154},[144,90849,51314],{"class":51313},[144,90851,51317],{"class":1993},[144,90853,51320],{"class":154},[144,90855,90856,90858,90860,90862,90864,90866],{"class":146,"line":66},[144,90857,1065],{"class":154},[144,90859,50648],{"class":51313},[144,90861,51329],{"class":1993},[144,90863,200],{"class":154},[144,90865,51334],{"class":259},[144,90867,51320],{"class":154},[144,90869,90870],{"class":146,"line":1210},[144,90871,2430],{"emptyLinePlaceholder":72},[144,90873,90874,90876,90878],{"class":146,"line":1225},[144,90875,1065],{"class":154},[144,90877,51347],{"class":51313},[144,90879,51320],{"class":154},[144,90881,90882,90884,90886,90888,90890,90892],{"class":146,"line":1231},[144,90883,52157],{"class":154},[144,90885,51357],{"class":51313},[144,90887,51360],{"class":1993},[144,90889,200],{"class":154},[144,90891,51365],{"class":259},[144,90893,51320],{"class":154},[144,90895,90896,90898,90900,90902,90904,90906,90908,90910,90912],{"class":146,"line":1245},[144,90897,52157],{"class":154},[144,90899,51357],{"class":51313},[144,90901,14951],{"class":1993},[144,90903,200],{"class":154},[144,90905,51404],{"class":259},[144,90907,51384],{"class":1993},[144,90909,200],{"class":154},[144,90911,51411],{"class":259},[144,90913,51320],{"class":154},[144,90915,90916,90918,90920,90922,90924],{"class":146,"line":1251},[144,90917,52157],{"class":154},[144,90919,51420],{"class":51313},[144,90921,51423],{"class":154},[144,90923,51420],{"class":51313},[144,90925,51320],{"class":154},[144,90927,90928,90930,90932],{"class":146,"line":1342},[144,90929,52157],{"class":154},[144,90931,5157],{"class":51313},[144,90933,51320],{"class":154},[144,90935,90936,90938],{"class":146,"line":1348},[144,90937,54765],{"class":1993},[144,90939,15603],{"class":154},[144,90941,90942,90944,90946,90948],{"class":146,"line":1360},[144,90943,72609],{"class":203},[144,90945,51450],{"class":154},[144,90947,60518],{"class":203},[144,90949,1321],{"class":154},[144,90951,90952,90954,90956,90958,90960],{"class":146,"line":1642},[144,90953,54784],{"class":203},[144,90955,51450],{"class":154},[144,90957,1752],{"class":203},[144,90959,51505],{"class":150},[144,90961,1321],{"class":154},[144,90963,90964,90966,90968,90970,90972],{"class":146,"line":1647},[144,90965,54798],{"class":203},[144,90967,51450],{"class":154},[144,90969,1752],{"class":203},[144,90971,51505],{"class":150},[144,90973,1321],{"class":154},[144,90975,90976,90978,90980,90982],{"class":146,"line":1653},[144,90977,54897],{"class":203},[144,90979,51450],{"class":154},[144,90981,90019],{"class":203},[144,90983,1321],{"class":154},[144,90985,90986,90988,90990,90992,90994],{"class":146,"line":1658},[144,90987,54935],{"class":203},[144,90989,51450],{"class":154},[144,90991,980],{"class":203},[144,90993,51505],{"class":150},[144,90995,1321],{"class":154},[144,90997,90998,91000,91002,91004],{"class":146,"line":1672},[144,90999,57429],{"class":203},[144,91001,51450],{"class":154},[144,91003,60855],{"class":203},[144,91005,1321],{"class":154},[144,91007,91008,91010,91012,91014],{"class":146,"line":1677},[144,91009,57299],{"class":203},[144,91011,51450],{"class":154},[144,91013,51605],{"class":203},[144,91015,1321],{"class":154},[144,91017,91018,91020,91022,91024,91026],{"class":146,"line":1683},[144,91019,90058],{"class":203},[144,91021,51450],{"class":154},[144,91023,474],{"class":203},[144,91025,51505],{"class":150},[144,91027,1321],{"class":154},[144,91029,91030],{"class":146,"line":1704},[144,91031,2217],{"class":154},[144,91033,91034,91036,91038],{"class":146,"line":1709},[144,91035,52430],{"class":154},[144,91037,5157],{"class":51313},[144,91039,51320],{"class":154},[144,91041,91042,91044,91046],{"class":146,"line":1723},[144,91043,51798],{"class":154},[144,91045,51347],{"class":51313},[144,91047,51320],{"class":154},[144,91049,91050],{"class":146,"line":1728},[144,91051,2430],{"emptyLinePlaceholder":72},[144,91053,91054,91056,91058],{"class":146,"line":1757},[144,91055,1065],{"class":154},[144,91057,51813],{"class":51313},[144,91059,51320],{"class":154},[144,91061,91062,91064,91066,91068,91070,91072,91074,91076],{"class":146,"line":1762},[144,91063,52157],{"class":154},[144,91065,51624],{"class":51313},[144,91067,53499],{"class":1993},[144,91069,200],{"class":154},[144,91071,53504],{"class":259},[144,91073,55327],{"class":154},[144,91075,51624],{"class":51313},[144,91077,51320],{"class":154},[144,91079,91080,91082,91084,91086,91088,91090,91092,91094],{"class":146,"line":1779},[144,91081,52157],{"class":154},[144,91083,51826],{"class":51313},[144,91085,55252],{"class":1993},[144,91087,200],{"class":154},[144,91089,88287],{"class":259},[144,91091,55327],{"class":154},[144,91093,51826],{"class":51313},[144,91095,51320],{"class":154},[144,91097,91098,91100,91102],{"class":146,"line":1784},[144,91099,52157],{"class":154},[144,91101,51826],{"class":51313},[144,91103,51320],{"class":154},[144,91105,91106,91108,91110,91112,91114,91116,91118,91120],{"class":146,"line":1789},[144,91107,11252],{"class":150},[144,91109,86946],{"class":203},[144,91111,13595],{"class":150},[144,91113,54409],{"class":154},[144,91115,54412],{"class":1993},[144,91117,155],{"class":154},[144,91119,90159],{"class":259},[144,91121,161],{"class":154},[144,91123,91124,91126,91128,91130],{"class":146,"line":1794},[144,91125,52232],{"class":150},[144,91127,9469],{"class":154},[144,91129,200],{"class":150},[144,91131,47346],{"class":203},[144,91133,91134,91136,91138],{"class":146,"line":1808},[144,91135,70097],{"class":150},[144,91137,90178],{"class":1993},[144,91139,10884],{"class":154},[144,91141,91142,91144,91146,91148],{"class":146,"line":1813},[144,91143,90185],{"class":154},[144,91145,200],{"class":150},[144,91147,3062],{"class":154},[144,91149,2732],{"class":150},[144,91151,91152],{"class":146,"line":2607},[144,91153,90196],{"class":213},[144,91155,91156],{"class":146,"line":2621},[144,91157,2217],{"class":154},[144,91159,91160],{"class":146,"line":2629},[144,91161,90205],{"class":213},[144,91163,91164],{"class":146,"line":2634},[144,91165,91166],{"class":213},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[144,91168,91169],{"class":146,"line":2640},[144,91170,91171],{"class":213},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[144,91173,91174,91176,91178,91180,91182,91184,91187,91189,91191],{"class":146,"line":2646},[144,91175,90220],{"class":154},[144,91177,57826],{"class":1993},[144,91179,155],{"class":154},[144,91181,90227],{"class":259},[144,91183,90230],{"class":154},[144,91185,91186],{"class":1993},"throttle",[144,91188,90236],{"class":154},[144,91190,65087],{"class":203},[144,91192,30510],{"class":154},[144,91194,91195,91197,91199],{"class":146,"line":2651},[144,91196,52430],{"class":154},[144,91198,51826],{"class":51313},[144,91200,51320],{"class":154},[144,91202,91203,91205,91207],{"class":146,"line":7979},[144,91204,51798],{"class":154},[144,91206,51813],{"class":51313},[144,91208,51320],{"class":154},[144,91210,91211],{"class":146,"line":8003},[144,91212,2430],{"emptyLinePlaceholder":72},[144,91214,91215,91217,91219],{"class":146,"line":8008},[144,91216,51798],{"class":154},[144,91218,50648],{"class":51313},[144,91220,51320],{"class":154},[1162,91222,91223],{},[101,91224,91225],{},"手写一个节流函数来处理",[14,91227,70965],{},[14,91229,90279],{},[14,91231,91232],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91234,91235],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[135,91237,91239],{"className":50646,"code":91238,"language":50648,"meta":30,"style":30},"\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",[141,91240,91241,91251,91265,91269,91277,91291,91311,91323,91331,91337,91347,91359,91371,91381,91393,91403,91413,91425,91429,91437,91445,91449,91457,91475,91493,91501,91519,91529,91537,91547,91551,91555,91559,91564,91569,91574,91579,91584,91589,91606,91612,91620,91631,91646,91653,91658,91663,91673,91678,91683,91688,91692,91696,91700,91720,91728,91736,91740],{"__ignoreMap":30},[144,91242,91243,91245,91247,91249],{"class":146,"line":147},[144,91244,51310],{"class":154},[144,91246,51314],{"class":51313},[144,91248,51317],{"class":1993},[144,91250,51320],{"class":154},[144,91252,91253,91255,91257,91259,91261,91263],{"class":146,"line":66},[144,91254,1065],{"class":154},[144,91256,50648],{"class":51313},[144,91258,51329],{"class":1993},[144,91260,200],{"class":154},[144,91262,51334],{"class":259},[144,91264,51320],{"class":154},[144,91266,91267],{"class":146,"line":1210},[144,91268,2430],{"emptyLinePlaceholder":72},[144,91270,91271,91273,91275],{"class":146,"line":1225},[144,91272,1065],{"class":154},[144,91274,51347],{"class":51313},[144,91276,51320],{"class":154},[144,91278,91279,91281,91283,91285,91287,91289],{"class":146,"line":1231},[144,91280,52157],{"class":154},[144,91282,51357],{"class":51313},[144,91284,51360],{"class":1993},[144,91286,200],{"class":154},[144,91288,51365],{"class":259},[144,91290,51320],{"class":154},[144,91292,91293,91295,91297,91299,91301,91303,91305,91307,91309],{"class":146,"line":1245},[144,91294,52157],{"class":154},[144,91296,51357],{"class":51313},[144,91298,14951],{"class":1993},[144,91300,200],{"class":154},[144,91302,51404],{"class":259},[144,91304,51384],{"class":1993},[144,91306,200],{"class":154},[144,91308,51411],{"class":259},[144,91310,51320],{"class":154},[144,91312,91313,91315,91317,91319,91321],{"class":146,"line":1251},[144,91314,52157],{"class":154},[144,91316,51420],{"class":51313},[144,91318,51423],{"class":154},[144,91320,51420],{"class":51313},[144,91322,51320],{"class":154},[144,91324,91325,91327,91329],{"class":146,"line":1342},[144,91326,52157],{"class":154},[144,91328,5157],{"class":51313},[144,91330,51320],{"class":154},[144,91332,91333,91335],{"class":146,"line":1348},[144,91334,54765],{"class":1993},[144,91336,15603],{"class":154},[144,91338,91339,91341,91343,91345],{"class":146,"line":1360},[144,91340,72609],{"class":203},[144,91342,51450],{"class":154},[144,91344,60518],{"class":203},[144,91346,1321],{"class":154},[144,91348,91349,91351,91353,91355,91357],{"class":146,"line":1642},[144,91350,54784],{"class":203},[144,91352,51450],{"class":154},[144,91354,1752],{"class":203},[144,91356,51505],{"class":150},[144,91358,1321],{"class":154},[144,91360,91361,91363,91365,91367,91369],{"class":146,"line":1647},[144,91362,54798],{"class":203},[144,91364,51450],{"class":154},[144,91366,1752],{"class":203},[144,91368,51505],{"class":150},[144,91370,1321],{"class":154},[144,91372,91373,91375,91377,91379],{"class":146,"line":1653},[144,91374,54897],{"class":203},[144,91376,51450],{"class":154},[144,91378,90019],{"class":203},[144,91380,1321],{"class":154},[144,91382,91383,91385,91387,91389,91391],{"class":146,"line":1658},[144,91384,54935],{"class":203},[144,91386,51450],{"class":154},[144,91388,980],{"class":203},[144,91390,51505],{"class":150},[144,91392,1321],{"class":154},[144,91394,91395,91397,91399,91401],{"class":146,"line":1672},[144,91396,57429],{"class":203},[144,91398,51450],{"class":154},[144,91400,60855],{"class":203},[144,91402,1321],{"class":154},[144,91404,91405,91407,91409,91411],{"class":146,"line":1677},[144,91406,57299],{"class":203},[144,91408,51450],{"class":154},[144,91410,51605],{"class":203},[144,91412,1321],{"class":154},[144,91414,91415,91417,91419,91421,91423],{"class":146,"line":1683},[144,91416,90058],{"class":203},[144,91418,51450],{"class":154},[144,91420,474],{"class":203},[144,91422,51505],{"class":150},[144,91424,1321],{"class":154},[144,91426,91427],{"class":146,"line":1704},[144,91428,2217],{"class":154},[144,91430,91431,91433,91435],{"class":146,"line":1709},[144,91432,52430],{"class":154},[144,91434,5157],{"class":51313},[144,91436,51320],{"class":154},[144,91438,91439,91441,91443],{"class":146,"line":1723},[144,91440,51798],{"class":154},[144,91442,51347],{"class":51313},[144,91444,51320],{"class":154},[144,91446,91447],{"class":146,"line":1728},[144,91448,2430],{"emptyLinePlaceholder":72},[144,91450,91451,91453,91455],{"class":146,"line":1757},[144,91452,1065],{"class":154},[144,91454,51813],{"class":51313},[144,91456,51320],{"class":154},[144,91458,91459,91461,91463,91465,91467,91469,91471,91473],{"class":146,"line":1762},[144,91460,52157],{"class":154},[144,91462,51624],{"class":51313},[144,91464,53499],{"class":1993},[144,91466,200],{"class":154},[144,91468,53504],{"class":259},[144,91470,55327],{"class":154},[144,91472,51624],{"class":51313},[144,91474,51320],{"class":154},[144,91476,91477,91479,91481,91483,91485,91487,91489,91491],{"class":146,"line":1779},[144,91478,52157],{"class":154},[144,91480,51826],{"class":51313},[144,91482,55252],{"class":1993},[144,91484,200],{"class":154},[144,91486,88287],{"class":259},[144,91488,55327],{"class":154},[144,91490,51826],{"class":51313},[144,91492,51320],{"class":154},[144,91494,91495,91497,91499],{"class":146,"line":1784},[144,91496,52157],{"class":154},[144,91498,51826],{"class":51313},[144,91500,51320],{"class":154},[144,91502,91503,91505,91507,91509,91511,91513,91515,91517],{"class":146,"line":1789},[144,91504,11252],{"class":150},[144,91506,86946],{"class":203},[144,91508,13595],{"class":150},[144,91510,54409],{"class":154},[144,91512,54412],{"class":1993},[144,91514,155],{"class":154},[144,91516,90159],{"class":259},[144,91518,161],{"class":154},[144,91520,91521,91523,91525,91527],{"class":146,"line":1794},[144,91522,52232],{"class":150},[144,91524,9469],{"class":154},[144,91526,200],{"class":150},[144,91528,47346],{"class":203},[144,91530,91531,91533,91535],{"class":146,"line":1808},[144,91532,70097],{"class":150},[144,91534,90178],{"class":1993},[144,91536,10884],{"class":154},[144,91538,91539,91541,91543,91545],{"class":146,"line":1813},[144,91540,90185],{"class":154},[144,91542,200],{"class":150},[144,91544,3062],{"class":154},[144,91546,2732],{"class":150},[144,91548,91549],{"class":146,"line":2607},[144,91550,90196],{"class":213},[144,91552,91553],{"class":146,"line":2621},[144,91554,2217],{"class":154},[144,91556,91557],{"class":146,"line":2629},[144,91558,90205],{"class":213},[144,91560,91561],{"class":146,"line":2634},[144,91562,91563],{"class":213},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[144,91565,91566],{"class":146,"line":2640},[144,91567,91568],{"class":213},"    \u002F\u002F 1.声明一个定时器变量\n",[144,91570,91571],{"class":146,"line":2646},[144,91572,91573],{"class":213},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[144,91575,91576],{"class":146,"line":2651},[144,91577,91578],{"class":213},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[144,91580,91581],{"class":146,"line":7979},[144,91582,91583],{"class":213},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[144,91585,91586],{"class":146,"line":8003},[144,91587,91588],{"class":213},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[144,91590,91591,91593,91596,91598,91600,91602,91604],{"class":146,"line":8008},[144,91592,70097],{"class":150},[144,91594,91595],{"class":1993}," throttle",[144,91597,155],{"class":154},[144,91599,90650],{"class":5247},[144,91601,12466],{"class":154},[144,91603,875],{"class":5247},[144,91605,12473],{"class":154},[144,91607,91608,91610],{"class":146,"line":8014},[144,91609,79785],{"class":150},[144,91611,90663],{"class":154},[144,91613,91614,91616,91618],{"class":146,"line":8041},[144,91615,73995],{"class":150},[144,91617,58931],{"class":150},[144,91619,54465],{"class":154},[144,91621,91622,91624,91626,91628],{"class":146,"line":8046},[144,91623,2527],{"class":150},[144,91625,1688],{"class":154},[144,91627,381],{"class":150},[144,91629,91630],{"class":154},"timer) {\n",[144,91632,91633,91636,91638,91640,91642,91644],{"class":146,"line":8052},[144,91634,91635],{"class":154},"          timer ",[144,91637,200],{"class":150},[144,91639,90704],{"class":1993},[144,91641,155],{"class":154},[144,91643,54462],{"class":150},[144,91645,54465],{"class":154},[144,91647,91648,91651],{"class":146,"line":8064},[144,91649,91650],{"class":1993},"            fn",[144,91652,2006],{"class":154},[144,91654,91655],{"class":146,"line":8076},[144,91656,91657],{"class":213},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[144,91659,91660],{"class":146,"line":8088},[144,91661,91662],{"class":213},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[144,91664,91665,91668,91670],{"class":146,"line":9747},[144,91666,91667],{"class":154},"            timer ",[144,91669,200],{"class":150},[144,91671,91672],{"class":203}," null\n",[144,91674,91675],{"class":146,"line":9772},[144,91676,91677],{"class":213},"            \u002F\u002F 不能用clearTimeout(timer)\n",[144,91679,91680],{"class":146,"line":9795},[144,91681,91682],{"class":213},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[144,91684,91685],{"class":146,"line":9819},[144,91686,91687],{"class":154},"          }, t)\n",[144,91689,91690],{"class":146,"line":9824},[144,91691,2559],{"class":154},[144,91693,91694],{"class":146,"line":9829},[144,91695,52411],{"class":154},[144,91697,91698],{"class":146,"line":9834},[144,91699,2217],{"class":154},[144,91701,91702,91704,91706,91708,91710,91712,91714,91716,91718],{"class":146,"line":9843},[144,91703,90220],{"class":154},[144,91705,57826],{"class":1993},[144,91707,155],{"class":154},[144,91709,90227],{"class":259},[144,91711,12466],{"class":154},[144,91713,91186],{"class":1993},[144,91715,90236],{"class":154},[144,91717,65087],{"class":203},[144,91719,30510],{"class":154},[144,91721,91722,91724,91726],{"class":146,"line":9848},[144,91723,52430],{"class":154},[144,91725,51826],{"class":51313},[144,91727,51320],{"class":154},[144,91729,91730,91732,91734],{"class":146,"line":9854},[144,91731,51798],{"class":154},[144,91733,51813],{"class":51313},[144,91735,51320],{"class":154},[144,91737,91738],{"class":146,"line":9875},[144,91739,2430],{"emptyLinePlaceholder":72},[144,91741,91742,91744,91746],{"class":146,"line":9881},[144,91743,51798],{"class":154},[144,91745,50648],{"class":51313},[144,91747,51320],{"class":154},[115,91749,91751],{"id":91750},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[135,91753,91755],{"className":53080,"code":91754,"language":53082,"meta":30,"style":30},"\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",[141,91756,91757,91765,91773,91778,91783,91788,91793,91797,91805],{"__ignoreMap":30},[144,91758,91759,91761,91763],{"class":146,"line":147},[144,91760,1065],{"class":154},[144,91762,51813],{"class":51313},[144,91764,51320],{"class":154},[144,91766,91767,91769,91771],{"class":146,"line":66},[144,91768,52157],{"class":154},[144,91770,51826],{"class":51313},[144,91772,51320],{"class":154},[144,91774,91775],{"class":146,"line":1210},[144,91776,91777],{"class":154},"    let timer = null\n",[144,91779,91780],{"class":146,"line":1225},[144,91781,91782],{"class":154},"    timer = setTimeout(() => {\n",[144,91784,91785],{"class":146,"line":1231},[144,91786,91787],{"class":154},"      clearTimeout(timer)\n",[144,91789,91790],{"class":146,"line":1245},[144,91791,91792],{"class":154},"      console.log(timer)\n",[144,91794,91795],{"class":146,"line":1251},[144,91796,60238],{"class":154},[144,91798,91799,91801,91803],{"class":146,"line":1342},[144,91800,52430],{"class":154},[144,91802,51826],{"class":51313},[144,91804,51320],{"class":154},[144,91806,91807,91809,91811],{"class":146,"line":1348},[144,91808,51798],{"class":154},[144,91810,51813],{"class":51313},[144,91812,51320],{"class":154},[14,91814,91815],{},"输出为1",[14,91817,91818],{},"在开启的定时器里边写清除定时器",[14,91820,91821],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[115,91823,91825],{"id":91824},"_4174-节流综合案例","4.17.4 节流综合案例",[14,91827,91828],{},"页面打开，可以记录上一次的视频播放位置",[14,91830,91831],{},[28,91832],{"alt":30,"src":91833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,91835,91836],{},[28,91837],{"alt":30,"src":91838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[135,91840,91842],{"className":50646,"code":91841,"language":50648,"meta":30,"style":30},"\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",[141,91843,91844,91854,91868,91872,91880,91894,91914,91934,91956,91969,91977,91983,91993,92003,92013,92017,92021,92028,92041,92053,92057,92061,92071,92083,92097,92101,92105,92112,92122,92135,92147,92157,92167,92183,92195,92199,92203,92211,92221,92233,92243,92253,92263,92267,92271,92281,92292,92296,92304,92312,92316,92324,92339,92354,92369,92390,92398,92406,92421,92443,92451,92466,92492,92518,92544,92552,92560,92579,92587,92592,92611,92616,92634,92639,92644,92652,92657,92671,92679,92684,92701,92705,92710,92732,92736,92744,92752,92756],{"__ignoreMap":30},[144,91845,91846,91848,91850,91852],{"class":146,"line":147},[144,91847,51310],{"class":154},[144,91849,51314],{"class":51313},[144,91851,51317],{"class":1993},[144,91853,51320],{"class":154},[144,91855,91856,91858,91860,91862,91864,91866],{"class":146,"line":66},[144,91857,1065],{"class":154},[144,91859,50648],{"class":51313},[144,91861,51329],{"class":1993},[144,91863,200],{"class":154},[144,91865,51334],{"class":259},[144,91867,51320],{"class":154},[144,91869,91870],{"class":146,"line":1210},[144,91871,2430],{"emptyLinePlaceholder":72},[144,91873,91874,91876,91878],{"class":146,"line":1225},[144,91875,1065],{"class":154},[144,91877,51347],{"class":51313},[144,91879,51320],{"class":154},[144,91881,91882,91884,91886,91888,91890,91892],{"class":146,"line":1231},[144,91883,52157],{"class":154},[144,91885,51357],{"class":51313},[144,91887,51360],{"class":1993},[144,91889,200],{"class":154},[144,91891,51365],{"class":259},[144,91893,59140],{"class":154},[144,91895,91896,91898,91900,91902,91904,91906,91908,91910,91912],{"class":146,"line":1245},[144,91897,52157],{"class":154},[144,91899,51357],{"class":51313},[144,91901,51376],{"class":1993},[144,91903,200],{"class":154},[144,91905,51381],{"class":259},[144,91907,51384],{"class":1993},[144,91909,200],{"class":154},[144,91911,51389],{"class":259},[144,91913,59140],{"class":154},[144,91915,91916,91918,91920,91922,91924,91926,91928,91930,91932],{"class":146,"line":1251},[144,91917,52157],{"class":154},[144,91919,51357],{"class":51313},[144,91921,14951],{"class":1993},[144,91923,200],{"class":154},[144,91925,51404],{"class":259},[144,91927,51384],{"class":1993},[144,91929,200],{"class":154},[144,91931,51411],{"class":259},[144,91933,59140],{"class":154},[144,91935,91936,91938,91940,91942,91944,91947,91949,91951,91954],{"class":146,"line":1342},[144,91937,52157],{"class":154},[144,91939,51357],{"class":51313},[144,91941,14951],{"class":1993},[144,91943,200],{"class":154},[144,91945,91946],{"class":259},"\"referrer\"",[144,91948,51384],{"class":1993},[144,91950,200],{"class":154},[144,91952,91953],{"class":259},"\"never\"",[144,91955,59140],{"class":154},[144,91957,91958,91960,91962,91965,91967],{"class":146,"line":1348},[144,91959,52157],{"class":154},[144,91961,51420],{"class":51313},[144,91963,91964],{"class":154},">综合案例\u003C\u002F",[144,91966,51420],{"class":51313},[144,91968,51320],{"class":154},[144,91970,91971,91973,91975],{"class":146,"line":1360},[144,91972,52157],{"class":154},[144,91974,5157],{"class":51313},[144,91976,51320],{"class":154},[144,91978,91979,91981],{"class":146,"line":1642},[144,91980,6434],{"class":51313},[144,91982,15603],{"class":154},[144,91984,91985,91987,91989,91991],{"class":146,"line":1647},[144,91986,54708],{"class":203},[144,91988,51450],{"class":154},[144,91990,346],{"class":203},[144,91992,1321],{"class":154},[144,91994,91995,91997,91999,92001],{"class":146,"line":1653},[144,91996,54719],{"class":203},[144,91998,51450],{"class":154},[144,92000,346],{"class":203},[144,92002,1321],{"class":154},[144,92004,92005,92007,92009,92011],{"class":146,"line":1658},[144,92006,72609],{"class":203},[144,92008,51450],{"class":154},[144,92010,60518],{"class":203},[144,92012,1321],{"class":154},[144,92014,92015],{"class":146,"line":1672},[144,92016,2217],{"class":154},[144,92018,92019],{"class":146,"line":1677},[144,92020,2430],{"emptyLinePlaceholder":72},[144,92022,92023,92026],{"class":146,"line":1683},[144,92024,92025],{"class":1993},"    .container",[144,92027,15603],{"class":154},[144,92029,92030,92032,92034,92037,92039],{"class":146,"line":1704},[144,92031,54784],{"class":203},[144,92033,51450],{"class":154},[144,92035,92036],{"class":203},"1200",[144,92038,51505],{"class":150},[144,92040,1321],{"class":154},[144,92042,92043,92045,92047,92049,92051],{"class":146,"line":1709},[144,92044,54719],{"class":203},[144,92046,51450],{"class":154},[144,92048,346],{"class":203},[144,92050,51569],{"class":203},[144,92052,1321],{"class":154},[144,92054,92055],{"class":146,"line":1723},[144,92056,2217],{"class":154},[144,92058,92059],{"class":146,"line":1728},[144,92060,2430],{"emptyLinePlaceholder":72},[144,92062,92063,92066,92069],{"class":146,"line":1757},[144,92064,92065],{"class":1993},"    .video",[144,92067,92068],{"class":51313}," video",[144,92070,15603],{"class":154},[144,92072,92073,92075,92077,92079,92081],{"class":146,"line":1762},[144,92074,54784],{"class":203},[144,92076,51450],{"class":154},[144,92078,466],{"class":203},[144,92080,483],{"class":150},[144,92082,1321],{"class":154},[144,92084,92085,92087,92089,92091,92093,92095],{"class":146,"line":1779},[144,92086,54708],{"class":203},[144,92088,51450],{"class":154},[144,92090,855],{"class":203},[144,92092,51505],{"class":150},[144,92094,4123],{"class":203},[144,92096,1321],{"class":154},[144,92098,92099],{"class":146,"line":1784},[144,92100,2217],{"class":154},[144,92102,92103],{"class":146,"line":1789},[144,92104,2430],{"emptyLinePlaceholder":72},[144,92106,92107,92110],{"class":146,"line":1794},[144,92108,92109],{"class":1993},"    .elevator",[144,92111,15603],{"class":154},[144,92113,92114,92116,92118,92120],{"class":146,"line":1808},[144,92115,54772],{"class":203},[144,92117,51450],{"class":154},[144,92119,86246],{"class":203},[144,92121,1321],{"class":154},[144,92123,92124,92126,92128,92131,92133],{"class":146,"line":1813},[144,92125,54960],{"class":203},[144,92127,51450],{"class":154},[144,92129,92130],{"class":203},"280",[144,92132,51505],{"class":150},[144,92134,1321],{"class":154},[144,92136,92137,92139,92141,92143,92145],{"class":146,"line":2607},[144,92138,86440],{"class":203},[144,92140,51450],{"class":154},[144,92142,855],{"class":203},[144,92144,51505],{"class":150},[144,92146,1321],{"class":154},[144,92148,92149,92151,92153,92155],{"class":146,"line":2621},[144,92150,86253],{"class":203},[144,92152,51450],{"class":154},[144,92154,86258],{"class":203},[144,92156,1321],{"class":154},[144,92158,92159,92161,92163,92165],{"class":146,"line":2629},[144,92160,61734],{"class":203},[144,92162,51450],{"class":154},[144,92164,60855],{"class":203},[144,92166,1321],{"class":154},[144,92168,92169,92171,92173,92175,92177,92179,92181],{"class":146,"line":2634},[144,92170,61990],{"class":203},[144,92172,51450],{"class":154},[144,92174,372],{"class":203},[144,92176,51505],{"class":150},[144,92178,51534],{"class":203},[144,92180,62257],{"class":203},[144,92182,1321],{"class":154},[144,92184,92185,92187,92189,92191,92193],{"class":146,"line":2640},[144,92186,54784],{"class":203},[144,92188,51450],{"class":154},[144,92190,1062],{"class":203},[144,92192,51505],{"class":150},[144,92194,1321],{"class":154},[144,92196,92197],{"class":146,"line":2646},[144,92198,2217],{"class":154},[144,92200,92201],{"class":146,"line":2651},[144,92202,2430],{"emptyLinePlaceholder":72},[144,92204,92205,92207,92209],{"class":146,"line":7979},[144,92206,92109],{"class":1993},[144,92208,1429],{"class":51313},[144,92210,15603],{"class":154},[144,92212,92213,92215,92217,92219],{"class":146,"line":8003},[144,92214,55022],{"class":203},[144,92216,51450],{"class":154},[144,92218,60882],{"class":203},[144,92220,1321],{"class":154},[144,92222,92223,92225,92227,92229,92231],{"class":146,"line":8008},[144,92224,54708],{"class":203},[144,92226,51450],{"class":154},[144,92228,601],{"class":203},[144,92230,51505],{"class":150},[144,92232,1321],{"class":154},[144,92234,92235,92237,92239,92241],{"class":146,"line":8014},[144,92236,63983],{"class":203},[144,92238,51450],{"class":154},[144,92240,54750],{"class":203},[144,92242,1321],{"class":154},[144,92244,92245,92247,92249,92251],{"class":146,"line":8041},[144,92246,57299],{"class":203},[144,92248,51450],{"class":154},[144,92250,51605],{"class":203},[144,92252,1321],{"class":154},[144,92254,92255,92257,92259,92261],{"class":146,"line":8046},[144,92256,57429],{"class":203},[144,92258,51450],{"class":154},[144,92260,62083],{"class":203},[144,92262,1321],{"class":154},[144,92264,92265],{"class":146,"line":8052},[144,92266,2217],{"class":154},[144,92268,92269],{"class":146,"line":8064},[144,92270,2430],{"emptyLinePlaceholder":72},[144,92272,92273,92275,92277,92279],{"class":146,"line":8076},[144,92274,92109],{"class":1993},[144,92276,1429],{"class":51313},[144,92278,64037],{"class":1993},[144,92280,15603],{"class":154},[144,92282,92283,92285,92287,92290],{"class":146,"line":8088},[144,92284,57429],{"class":203},[144,92286,51450],{"class":154},[144,92288,92289],{"class":203},"#1286ff",[144,92291,1321],{"class":154},[144,92293,92294],{"class":146,"line":9747},[144,92295,2217],{"class":154},[144,92297,92298,92300,92302],{"class":146,"line":9772},[144,92299,52430],{"class":154},[144,92301,5157],{"class":51313},[144,92303,51320],{"class":154},[144,92305,92306,92308,92310],{"class":146,"line":9795},[144,92307,51798],{"class":154},[144,92309,51347],{"class":51313},[144,92311,51320],{"class":154},[144,92313,92314],{"class":146,"line":9819},[144,92315,2430],{"emptyLinePlaceholder":72},[144,92317,92318,92320,92322],{"class":146,"line":9824},[144,92319,1065],{"class":154},[144,92321,51813],{"class":51313},[144,92323,51320],{"class":154},[144,92325,92326,92328,92330,92332,92334,92337],{"class":146,"line":9829},[144,92327,52157],{"class":154},[144,92329,51624],{"class":51313},[144,92331,53499],{"class":1993},[144,92333,200],{"class":154},[144,92335,92336],{"class":259},"\"container\"",[144,92338,51320],{"class":154},[144,92340,92341,92343,92345,92347,92349,92352],{"class":146,"line":9834},[144,92342,51354],{"class":154},[144,92344,51624],{"class":51313},[144,92346,53499],{"class":1993},[144,92348,200],{"class":154},[144,92350,92351],{"class":259},"\"header\"",[144,92353,51320],{"class":154},[144,92355,92356,92358,92360,92362,92364,92367],{"class":146,"line":9843},[144,92357,55247],{"class":154},[144,92359,393],{"class":51313},[144,92361,61070],{"class":1993},[144,92363,200],{"class":154},[144,92365,92366],{"class":259},"\"http:\u002F\u002Fpip.itcast.cn\"",[144,92368,51320],{"class":154},[144,92370,92371,92373,92375,92377,92379,92382,92384,92386,92388],{"class":146,"line":9848},[144,92372,55315],{"class":154},[144,92374,28],{"class":51313},[144,92376,55252],{"class":1993},[144,92378,200],{"class":154},[144,92380,92381],{"class":259},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[144,92383,55260],{"class":1993},[144,92385,200],{"class":154},[144,92387,7683],{"class":259},[144,92389,59140],{"class":154},[144,92391,92392,92394,92396],{"class":146,"line":9854},[144,92393,55420],{"class":154},[144,92395,393],{"class":51313},[144,92397,51320],{"class":154},[144,92399,92400,92402,92404],{"class":146,"line":9875},[144,92401,51789],{"class":154},[144,92403,51624],{"class":51313},[144,92405,51320],{"class":154},[144,92407,92408,92410,92412,92414,92416,92419],{"class":146,"line":9881},[144,92409,51354],{"class":154},[144,92411,51624],{"class":51313},[144,92413,53499],{"class":1993},[144,92415,200],{"class":154},[144,92417,92418],{"class":259},"\"video\"",[144,92420,51320],{"class":154},[144,92422,92423,92425,92427,92429,92431,92434,92437,92439,92441],{"class":146,"line":9895},[144,92424,55247],{"class":154},[144,92426,28196],{"class":51313},[144,92428,55252],{"class":1993},[144,92430,200],{"class":154},[144,92432,92433],{"class":259},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[144,92435,92436],{"class":1993}," controls",[144,92438,55327],{"class":154},[144,92440,28196],{"class":51313},[144,92442,51320],{"class":154},[144,92444,92445,92447,92449],{"class":146,"line":9901},[144,92446,51789],{"class":154},[144,92448,51624],{"class":51313},[144,92450,51320],{"class":154},[144,92452,92453,92455,92457,92459,92461,92464],{"class":146,"line":9928},[144,92454,51354],{"class":154},[144,92456,51624],{"class":51313},[144,92458,53499],{"class":1993},[144,92460,200],{"class":154},[144,92462,92463],{"class":259},"\"elevator\"",[144,92465,51320],{"class":154},[144,92467,92468,92470,92472,92474,92476,92478,92481,92483,92485,92488,92490],{"class":146,"line":9937},[144,92469,55247],{"class":154},[144,92471,393],{"class":51313},[144,92473,61070],{"class":1993},[144,92475,200],{"class":154},[144,92477,64249],{"class":259},[144,92479,92480],{"class":1993}," data-ref",[144,92482,200],{"class":154},[144,92484,92418],{"class":259},[144,92486,92487],{"class":154},">视频介绍\u003C\u002F",[144,92489,393],{"class":51313},[144,92491,51320],{"class":154},[144,92493,92494,92496,92498,92500,92502,92504,92506,92508,92511,92514,92516],{"class":146,"line":9943},[144,92495,55247],{"class":154},[144,92497,393],{"class":51313},[144,92499,61070],{"class":1993},[144,92501,200],{"class":154},[144,92503,64249],{"class":259},[144,92505,92480],{"class":1993},[144,92507,200],{"class":154},[144,92509,92510],{"class":259},"\"intro\"",[144,92512,92513],{"class":154},">课程简介\u003C\u002F",[144,92515,393],{"class":51313},[144,92517,51320],{"class":154},[144,92519,92520,92522,92524,92526,92528,92530,92532,92534,92537,92540,92542],{"class":146,"line":9951},[144,92521,55247],{"class":154},[144,92523,393],{"class":51313},[144,92525,61070],{"class":1993},[144,92527,200],{"class":154},[144,92529,64249],{"class":259},[144,92531,92480],{"class":1993},[144,92533,200],{"class":154},[144,92535,92536],{"class":259},"\"outline\"",[144,92538,92539],{"class":154},">评论列表\u003C\u002F",[144,92541,393],{"class":51313},[144,92543,51320],{"class":154},[144,92545,92546,92548,92550],{"class":146,"line":9956},[144,92547,51789],{"class":154},[144,92549,51624],{"class":51313},[144,92551,51320],{"class":154},[144,92553,92554,92556,92558],{"class":146,"line":16635},[144,92555,52430],{"class":154},[144,92557,51624],{"class":51313},[144,92559,51320],{"class":154},[144,92561,92562,92564,92566,92568,92570,92573,92575,92577],{"class":146,"line":16641},[144,92563,52157],{"class":154},[144,92565,51826],{"class":51313},[144,92567,55252],{"class":1993},[144,92569,200],{"class":154},[144,92571,92572],{"class":259},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[144,92574,55327],{"class":154},[144,92576,51826],{"class":51313},[144,92578,51320],{"class":154},[144,92580,92581,92583,92585],{"class":146,"line":16664},[144,92582,52157],{"class":154},[144,92584,51826],{"class":51313},[144,92586,51320],{"class":154},[144,92588,92589],{"class":146,"line":16670},[144,92590,92591],{"class":213},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[144,92593,92594,92596,92598,92600,92602,92604,92606,92609],{"class":146,"line":16693},[144,92595,11252],{"class":150},[144,92597,92068],{"class":203},[144,92599,13595],{"class":150},[144,92601,54409],{"class":154},[144,92603,54412],{"class":1993},[144,92605,155],{"class":154},[144,92607,92608],{"class":259},"'video'",[144,92610,161],{"class":154},[144,92612,92613],{"class":146,"line":16707},[144,92614,92615],{"class":213},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[144,92617,92618,92621,92623,92625,92627,92630,92632],{"class":146,"line":16727},[144,92619,92620],{"class":154},"    video.ontimeupdate ",[144,92622,200],{"class":150},[144,92624,88368],{"class":154},[144,92626,91186],{"class":1993},[144,92628,92629],{"class":154},"(() ",[144,92631,84735],{"class":150},[144,92633,15603],{"class":154},[144,92635,92636],{"class":146,"line":16733},[144,92637,92638],{"class":213},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[144,92640,92641],{"class":146,"line":16744},[144,92642,92643],{"class":213},"      \u002F\u002F 控制台输出当前的时间\n",[144,92645,92646,92649],{"class":146,"line":16767},[144,92647,92648],{"class":213},"      \u002F\u002F console.log(video.currentTime)",[144,92650,92651],{"class":213},"  \u002F\u002F获得当前的视频时间\n",[144,92653,92654],{"class":146,"line":16789},[144,92655,92656],{"class":213},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[144,92658,92659,92661,92663,92665,92668],{"class":146,"line":16794},[144,92660,74696],{"class":154},[144,92662,71667],{"class":1993},[144,92664,155],{"class":154},[144,92666,92667],{"class":259},"'currentTime'",[144,92669,92670],{"class":154},", video.currentTime)\n",[144,92672,92673,92675,92677],{"class":146,"line":16800},[144,92674,54548],{"class":154},[144,92676,6441],{"class":203},[144,92678,161],{"class":154},[144,92680,92681],{"class":146,"line":16814},[144,92682,92683],{"class":213},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[144,92685,92686,92689,92692,92694,92697,92699],{"class":146,"line":16827},[144,92687,92688],{"class":154},"    video.",[144,92690,92691],{"class":1993},"onloadeddata",[144,92693,13595],{"class":150},[144,92695,92696],{"class":154}," () ",[144,92698,84735],{"class":150},[144,92700,15603],{"class":154},[144,92702,92703],{"class":146,"line":16832},[144,92704,60025],{"class":213},[144,92706,92707],{"class":146,"line":16846},[144,92708,92709],{"class":213},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[144,92711,92712,92715,92717,92720,92722,92724,92726,92728,92730],{"class":146,"line":16851},[144,92713,92714],{"class":154},"      video.currentTime ",[144,92716,200],{"class":150},[144,92718,92719],{"class":154}," localStorage.",[144,92721,71698],{"class":1993},[144,92723,155],{"class":154},[144,92725,92667],{"class":259},[144,92727,13745],{"class":154},[144,92729,71370],{"class":150},[144,92731,47346],{"class":203},[144,92733,92734],{"class":146,"line":16857},[144,92735,2217],{"class":154},[144,92737,92738,92740,92742],{"class":146,"line":16862},[144,92739,52430],{"class":154},[144,92741,51826],{"class":51313},[144,92743,51320],{"class":154},[144,92745,92746,92748,92750],{"class":146,"line":16876},[144,92747,51798],{"class":154},[144,92749,51813],{"class":51313},[144,92751,51320],{"class":154},[144,92753,92754],{"class":146,"line":16881},[144,92755,2430],{"emptyLinePlaceholder":72},[144,92757,92758,92760,92762],{"class":146,"line":16886},[144,92759,51798],{"class":154},[144,92761,50648],{"class":51313},[144,92763,51320],{"class":154},[5157,92765,92766],{},"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":30,"searchDepth":66,"depth":66,"links":92768},[92769,92774,92778,92779,92780,92785,92790,92791,92792,92793,92800,92805,92806,92816,92820,92821,92825],{"id":76704,"depth":66,"text":76705,"children":92770},[92771,92772,92773],{"id":76708,"depth":1210,"text":76709},{"id":76733,"depth":1210,"text":76734},{"id":76745,"depth":1210,"text":76746},{"id":76757,"depth":66,"text":76758,"children":92775},[92776,92777],{"id":76761,"depth":1210,"text":76762},{"id":76776,"depth":1210,"text":76777},{"id":76828,"depth":66,"text":76829},{"id":76872,"depth":66,"text":76873},{"id":76889,"depth":66,"text":76890,"children":92781},[92782,92783,92784],{"id":76893,"depth":1210,"text":76894},{"id":76906,"depth":1210,"text":76907},{"id":77011,"depth":1210,"text":77012},{"id":77300,"depth":66,"text":77301,"children":92786},[92787,92788,92789],{"id":77304,"depth":1210,"text":77305},{"id":77747,"depth":1210,"text":77748},{"id":78158,"depth":1210,"text":78159},{"id":78221,"depth":66,"text":78222},{"id":78300,"depth":66,"text":78301},{"id":78393,"depth":66,"text":78394},{"id":80238,"depth":66,"text":80239,"children":92794},[92795,92796,92797,92798,92799],{"id":80242,"depth":1210,"text":80243},{"id":80254,"depth":1210,"text":80255},{"id":80473,"depth":1210,"text":80474},{"id":80491,"depth":1210,"text":80492},{"id":80551,"depth":1210,"text":80552},{"id":84819,"depth":66,"text":84820,"children":92801},[92802,92803,92804],{"id":84823,"depth":1210,"text":84824},{"id":84841,"depth":1210,"text":84842},{"id":84867,"depth":1210,"text":84868},{"id":84876,"depth":66,"text":84877},{"id":84898,"depth":66,"text":84899,"children":92807},[92808,92809,92810,92811,92812,92813,92814,92815],{"id":84902,"depth":1210,"text":84903},{"id":85163,"depth":1210,"text":85164},{"id":85349,"depth":1210,"text":85350},{"id":85716,"depth":1210,"text":85717},{"id":85832,"depth":1210,"text":85833},{"id":85868,"depth":1210,"text":85869},{"id":85915,"depth":1210,"text":85916},{"id":85949,"depth":1210,"text":85950},{"id":87312,"depth":66,"text":87313,"children":92817},[92818,92819],{"id":87316,"depth":1210,"text":87317},{"id":87353,"depth":1210,"text":87354},{"id":88708,"depth":66,"text":88709},{"id":89079,"depth":66,"text":89080,"children":92822},[92823,92824],{"id":89083,"depth":1210,"text":89084},{"id":89117,"depth":1210,"text":89118},{"id":89846,"depth":66,"text":89847,"children":92826},[92827,92828,92829,92830],{"id":89850,"depth":1210,"text":89851},{"id":90808,"depth":1210,"text":90809},{"id":91750,"depth":1210,"text":91751},{"id":91824,"depth":1210,"text":91825},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76693,"description":23408},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92837,"title":92838,"body":92839,"description":92850,"extension":70,"meta":92851,"navigation":72,"path":92853,"seo":92854,"stem":92855,"__hash__":92856},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92840,"toc":92848},[92841],[14,92842,92843,92844],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[393,92845,92846],{"href":92846,"rel":92847},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23897],{"title":30,"searchDepth":66,"depth":66,"links":92849},[],"三件套第三套学习",{"category":92852},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92838,"description":92850},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92858,"title":92859,"body":92860,"description":23408,"extension":70,"meta":92965,"navigation":72,"path":92966,"seo":92967,"stem":92968,"__hash__":92969},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92861,"toc":92960},[92862,92869,92872,92875,92878,92882,92891,92894,92897,92901,92910,92913,92917,92920,92940,92943,92957],[14,92863,92864],{},[393,92865,92868],{"href":92866,"rel":92867},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[23897],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92870,92859],{"id":92871},"_1安装",[14,92873,92874],{},"numpy是科学计算基础库,底层是C语言",[14,92876,92877],{},"三种方式：",[18,92879,92881],{"id":92880},"_11-通过pip安装","1.1 通过pip安装",[135,92883,92885],{"className":30391,"code":92884,"language":30393,"meta":30,"style":30},"pip install numpy\n",[141,92886,92887],{"__ignoreMap":30},[144,92888,92889],{"class":146,"line":147},[144,92890,92884],{"class":154},[14,92892,92893],{},"首选方式，自动处理依赖项",[14,92895,92896],{},"在提示系统命令符中使用cmd",[18,92898,92900],{"id":92899},"_12-通过anaconda安装","1.2 通过Anaconda安装",[135,92902,92904],{"className":30391,"code":92903,"language":30393,"meta":30,"style":30},"conda install numpy\n",[141,92905,92906],{"__ignoreMap":30},[144,92907,92908],{"class":146,"line":147},[144,92909,92903],{"class":154},[14,92911,92912],{},"自动解决环境依赖",[18,92914,92916],{"id":92915},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,92918,92919],{},"对于Debian\u002FUbuntu",[135,92921,92923],{"className":30391,"code":92922,"language":30393,"meta":30,"style":30},"sudo apt-get install python3-numpy\n",[141,92924,92925],{"__ignoreMap":30},[144,92926,92927,92930,92932,92935,92937],{"class":146,"line":147},[144,92928,92929],{"class":154},"sudo apt",[144,92931,687],{"class":150},[144,92933,92934],{"class":154},"get install python3",[144,92936,687],{"class":150},[144,92938,92939],{"class":154},"numpy\n",[14,92941,92942],{},"对于Fedora:",[135,92944,92946],{"className":30391,"code":92945,"language":30393,"meta":30,"style":30},"sudo dnf install python3-numpy\n",[141,92947,92948],{"__ignoreMap":30},[144,92949,92950,92953,92955],{"class":146,"line":147},[144,92951,92952],{"class":154},"sudo dnf install python3",[144,92954,687],{"class":150},[144,92956,92939],{"class":154},[5157,92958,92959],{},"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":30,"searchDepth":66,"depth":66,"links":92961},[92962,92963,92964],{"id":92880,"depth":66,"text":92881},{"id":92899,"depth":66,"text":92900},{"id":92915,"depth":66,"text":92916},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92859,"description":23408},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":92971,"title":92972,"body":92973,"description":23408,"extension":70,"meta":93086,"navigation":72,"path":93087,"seo":93088,"stem":93089,"__hash__":93090},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":92974,"toc":93084},[92975,92978,92981,92984,92987,92990,92993,92996,92999,93002,93078,93081],[10,92976,92972],{"id":92977},"_10算数函数",[14,92979,92980],{},"加减乘除运算跟python基础语法没区别",[14,92982,92983],{},"除了python那种方法外还可以使用函数",[14,92985,92986],{},"加：np.add(a,b)",[14,92988,92989],{},"减：np.subtract(a,b)",[14,92991,92992],{},"乘：np.multiply(a,b)",[14,92994,92995],{},"除：np.divide(a,b) == a\u002Fb",[14,92997,92998],{},"取余：np.mod(a,b) == a%b",[14,93000,93001],{},"必须会的用法：",[135,93003,93005],{"className":30391,"code":93004,"language":30393,"meta":30,"style":30},"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",[141,93006,93007,93029,93050,93060,93073],{"__ignoreMap":30},[144,93008,93009,93011,93013,93016,93018,93021,93023,93025,93027],{"class":146,"line":147},[144,93010,393],{"class":154},[144,93012,200],{"class":150},[144,93014,93015],{"class":154},"np.arange(",[144,93017,575],{"class":203},[144,93019,93020],{"class":154},").reshape(",[144,93022,226],{"class":203},[144,93024,533],{"class":154},[144,93026,226],{"class":203},[144,93028,161],{"class":154},[144,93030,93031,93033,93035,93038,93040,93042,93044,93046,93048],{"class":146,"line":66},[144,93032,418],{"class":154},[144,93034,200],{"class":150},[144,93036,93037],{"class":154},"np.array([",[144,93039,601],{"class":203},[144,93041,533],{"class":154},[144,93043,601],{"class":203},[144,93045,533],{"class":154},[144,93047,601],{"class":203},[144,93049,4687],{"class":154},[144,93051,93052,93055,93057],{"class":146,"line":1210},[144,93053,93054],{"class":154},"result",[144,93056,200],{"class":150},[144,93058,93059],{"class":154},"np.empty_like(a)\n",[144,93061,93062,93065,93068,93070],{"class":146,"line":1225},[144,93063,93064],{"class":154},"np.add(a,b,",[144,93066,93067],{"class":5247},"out",[144,93069,200],{"class":150},[144,93071,93072],{"class":154},"result)\n",[144,93074,93075],{"class":146,"line":1231},[144,93076,93077],{"class":154},"result\n",[14,93079,93080],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5157,93082,93083],{},"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":30,"searchDepth":66,"depth":66,"links":93085},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":92972,"description":23408},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93092,"title":93093,"body":93094,"description":23408,"extension":70,"meta":93856,"navigation":72,"path":93857,"seo":93858,"stem":93859,"__hash__":93860},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93095,"toc":93843},[93096,93099,93102,93105,93109,93148,93152,93196,93256,93260,93263,93302,93305,93350,93354,93390,93394,93463,93467,93531,93535,93538,93541,93544,93547,93583,93587,93627,93631,93703,93706,93710,93773,93777,93840],[10,93097,93093],{"id":93098},"_11统计函数",[14,93100,93101],{},"sum max min mean",[14,93103,93104],{},"这些有axis参数，可以指定方向",[18,93106,93108],{"id":93107},"_111-sum求和函数","11.1 sum()求和函数",[135,93110,93112],{"className":30391,"code":93111,"language":30393,"meta":30,"style":30},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[141,93113,93114,93119,93140],{"__ignoreMap":30},[144,93115,93116],{"class":146,"line":147},[144,93117,93118],{"class":213},"#创建一维数组\n",[144,93120,93121,93123,93125,93128,93130,93132,93134,93136,93138],{"class":146,"line":66},[144,93122,393],{"class":154},[144,93124,200],{"class":150},[144,93126,93127],{"class":154},"np.random.randint(",[144,93129,372],{"class":203},[144,93131,533],{"class":154},[144,93133,466],{"class":203},[144,93135,533],{"class":154},[144,93137,855],{"class":203},[144,93139,161],{"class":154},[144,93141,93142,93145],{"class":146,"line":1210},[144,93143,93144],{"class":154},"np.sum(a)",[144,93146,93147],{"class":213},"#求和\n",[18,93149,93151],{"id":93150},"_112-max求最大值函数","11.2 max()求最大值函数",[135,93153,93155],{"className":30391,"code":93154,"language":30393,"meta":30,"style":30},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[141,93156,93157,93161,93181,93186,93191],{"__ignoreMap":30},[144,93158,93159],{"class":146,"line":147},[144,93160,93118],{"class":213},[144,93162,93163,93165,93167,93169,93171,93173,93175,93177,93179],{"class":146,"line":66},[144,93164,393],{"class":154},[144,93166,200],{"class":150},[144,93168,93127],{"class":154},[144,93170,372],{"class":203},[144,93172,533],{"class":154},[144,93174,466],{"class":203},[144,93176,533],{"class":154},[144,93178,855],{"class":203},[144,93180,161],{"class":154},[144,93182,93183],{"class":146,"line":1210},[144,93184,93185],{"class":154},"np.max(a)\n",[144,93187,93188],{"class":146,"line":1225},[144,93189,93190],{"class":213},"#最大索引(求最大元素的索引)arg\n",[144,93192,93193],{"class":146,"line":1231},[144,93194,93195],{"class":154},"np.argmax(a)\n",[135,93197,93199],{"className":30391,"code":93198,"language":30393,"meta":30,"style":30},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[141,93200,93201,93222,93242,93246],{"__ignoreMap":30},[144,93202,93203,93205,93207,93210,93212,93214,93216,93218,93220],{"class":146,"line":147},[144,93204,10950],{"class":154},[144,93206,200],{"class":150},[144,93208,93209],{"class":154}," np.array([",[144,93211,372],{"class":203},[144,93213,12466],{"class":154},[144,93215,474],{"class":203},[144,93217,12466],{"class":154},[144,93219,226],{"class":203},[144,93221,4687],{"class":154},[144,93223,93224,93226,93228,93230,93232,93234,93236,93238,93240],{"class":146,"line":66},[144,93225,10976],{"class":154},[144,93227,200],{"class":150},[144,93229,93209],{"class":154},[144,93231,226],{"class":203},[144,93233,12466],{"class":154},[144,93235,232],{"class":203},[144,93237,12466],{"class":154},[144,93239,448],{"class":203},[144,93241,4687],{"class":154},[144,93243,93244],{"class":146,"line":1210},[144,93245,2430],{"emptyLinePlaceholder":72},[144,93247,93248,93250,93253],{"class":146,"line":1225},[144,93249,30428],{"class":203},[144,93251,93252],{"class":154},"(np.maximum(a, b))   ",[144,93254,93255],{"class":213},"# [3 5 4]，每个位置上取较大值\n",[18,93257,93259],{"id":93258},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93261,93262],{},"①一维数组：",[135,93264,93266],{"className":30391,"code":93265,"language":30393,"meta":30,"style":30},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[141,93267,93268,93272,93292,93297],{"__ignoreMap":30},[144,93269,93270],{"class":146,"line":147},[144,93271,93118],{"class":213},[144,93273,93274,93276,93278,93280,93282,93284,93286,93288,93290],{"class":146,"line":66},[144,93275,393],{"class":154},[144,93277,200],{"class":150},[144,93279,93127],{"class":154},[144,93281,372],{"class":203},[144,93283,533],{"class":154},[144,93285,466],{"class":203},[144,93287,533],{"class":154},[144,93289,855],{"class":203},[144,93291,161],{"class":154},[144,93293,93294],{"class":146,"line":1210},[144,93295,93296],{"class":213},"#求平均值\n",[144,93298,93299],{"class":146,"line":1225},[144,93300,93301],{"class":154},"np.mean(a)\n",[14,93303,93304],{},"②二维数组",[135,93306,93308],{"className":30391,"code":93307,"language":30393,"meta":30,"style":30},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[141,93309,93310,93315,93340,93345],{"__ignoreMap":30},[144,93311,93312],{"class":146,"line":147},[144,93313,93314],{"class":213},"#二维数组\n",[144,93316,93317,93320,93322,93324,93326,93328,93330,93332,93334,93336,93338],{"class":146,"line":66},[144,93318,93319],{"class":154},"aa",[144,93321,200],{"class":150},[144,93323,93015],{"class":154},[144,93325,372],{"class":203},[144,93327,533],{"class":154},[144,93329,678],{"class":203},[144,93331,93020],{"class":154},[144,93333,226],{"class":203},[144,93335,533],{"class":154},[144,93337,448],{"class":203},[144,93339,161],{"class":154},[144,93341,93342],{"class":146,"line":1210},[144,93343,93344],{"class":213},"#对数组中的所有数求平均\n",[144,93346,93347],{"class":146,"line":1225},[144,93348,93349],{"class":154},"np.mean(aa)\n",[18,93351,93353],{"id":93352},"_114-median求中位数函数","11.4 median()求中位数函数",[135,93355,93357],{"className":30391,"code":93356,"language":30393,"meta":30,"style":30},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[141,93358,93359,93364,93380,93385],{"__ignoreMap":30},[144,93360,93361],{"class":146,"line":147},[144,93362,93363],{"class":213},"#求中位数\n",[144,93365,93366,93368,93370,93372,93374,93376,93378],{"class":146,"line":66},[144,93367,418],{"class":154},[144,93369,200],{"class":150},[144,93371,93015],{"class":154},[144,93373,372],{"class":203},[144,93375,533],{"class":154},[144,93377,601],{"class":203},[144,93379,161],{"class":154},[144,93381,93382],{"class":146,"line":1210},[144,93383,93384],{"class":154},"np.median(b)\n",[144,93386,93387],{"class":146,"line":1225},[144,93388,93389],{"class":213},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[18,93391,93393],{"id":93392},"_115-power求幂运算函数","11.5 power()求幂运算函数",[135,93395,93397],{"className":30391,"code":93396,"language":30393,"meta":30,"style":30},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[141,93398,93399,93415,93420,93425,93434,93439,93448],{"__ignoreMap":30},[144,93400,93401,93403,93405,93407,93409,93411,93413],{"class":146,"line":147},[144,93402,418],{"class":154},[144,93404,200],{"class":150},[144,93406,93015],{"class":154},[144,93408,372],{"class":203},[144,93410,533],{"class":154},[144,93412,601],{"class":203},[144,93414,161],{"class":154},[144,93416,93417],{"class":146,"line":66},[144,93418,93419],{"class":213},"#幂运算\n",[144,93421,93422],{"class":146,"line":1210},[144,93423,93424],{"class":213},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[144,93426,93427,93430,93432],{"class":146,"line":1225},[144,93428,93429],{"class":154},"np.power(b,",[144,93431,232],{"class":203},[144,93433,161],{"class":154},[144,93435,93436],{"class":146,"line":1231},[144,93437,93438],{"class":213},"#或者以下代码，将数据存储起来\n",[144,93440,93441,93443,93445],{"class":146,"line":1245},[144,93442,1000],{"class":154},[144,93444,200],{"class":150},[144,93446,93447],{"class":154},"np.empty_like(b)\n",[144,93449,93450,93452,93454,93456,93458,93460],{"class":146,"line":1251},[144,93451,93429],{"class":154},[144,93453,232],{"class":203},[144,93455,533],{"class":154},[144,93457,93067],{"class":5247},[144,93459,200],{"class":150},[144,93461,93462],{"class":154},"y)\n",[18,93464,93466],{"id":93465},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[135,93468,93470],{"className":30391,"code":93469,"language":30393,"meta":30,"style":30},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[141,93471,93472,93488,93493,93498,93502,93520],{"__ignoreMap":30},[144,93473,93474,93476,93478,93480,93482,93484,93486],{"class":146,"line":147},[144,93475,418],{"class":154},[144,93477,200],{"class":150},[144,93479,93015],{"class":154},[144,93481,372],{"class":203},[144,93483,533],{"class":154},[144,93485,601],{"class":203},[144,93487,161],{"class":154},[144,93489,93490],{"class":146,"line":66},[144,93491,93492],{"class":213},"#开方\n",[144,93494,93495],{"class":146,"line":1210},[144,93496,93497],{"class":154},"np.sqrt(b)\n",[144,93499,93500],{"class":146,"line":1225},[144,93501,93438],{"class":213},[144,93503,93504,93506,93508,93511,93514,93516,93518],{"class":146,"line":1231},[144,93505,1000],{"class":154},[144,93507,200],{"class":150},[144,93509,93510],{"class":154},"np.empty_like(b,",[144,93512,93513],{"class":5247},"dtype",[144,93515,200],{"class":150},[144,93517,194],{"class":203},[144,93519,161],{"class":154},[144,93521,93522,93525,93527,93529],{"class":146,"line":1245},[144,93523,93524],{"class":154},"np.sqrt(b,",[144,93526,93067],{"class":5247},[144,93528,200],{"class":150},[144,93530,93462],{"class":154},[18,93532,93534],{"id":93533},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,93536,93537],{},"对数组中的元素累计求和，可指定轴",[14,93539,93540],{},"#累计求和的意思是：",[14,93542,93543],{},"a = np.array([1, 2, 3, 4])",[14,93545,93546],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[135,93548,93550],{"className":30391,"code":93549,"language":30393,"meta":30,"style":30},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[141,93551,93552,93568,93573,93578],{"__ignoreMap":30},[144,93553,93554,93556,93558,93560,93562,93564,93566],{"class":146,"line":147},[144,93555,418],{"class":154},[144,93557,200],{"class":150},[144,93559,93015],{"class":154},[144,93561,372],{"class":203},[144,93563,533],{"class":154},[144,93565,601],{"class":203},[144,93567,161],{"class":154},[144,93569,93570],{"class":146,"line":66},[144,93571,93572],{"class":154},"np.cumsum(b)\n",[144,93574,93575],{"class":146,"line":1210},[144,93576,93577],{"class":213},"#结果：\n",[144,93579,93580],{"class":146,"line":1225},[144,93581,93582],{"class":213},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[18,93584,93586],{"id":93585},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[135,93588,93590],{"className":30391,"code":93589,"language":30393,"meta":30,"style":30},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[141,93591,93592,93608,93613,93618,93622],{"__ignoreMap":30},[144,93593,93594,93596,93598,93600,93602,93604,93606],{"class":146,"line":147},[144,93595,418],{"class":154},[144,93597,200],{"class":150},[144,93599,93015],{"class":154},[144,93601,372],{"class":203},[144,93603,533],{"class":154},[144,93605,601],{"class":203},[144,93607,161],{"class":154},[144,93609,93610],{"class":146,"line":66},[144,93611,93612],{"class":213},"#对数组中的元素累计求积，可指定轴\n",[144,93614,93615],{"class":146,"line":1210},[144,93616,93617],{"class":154},"np.cumprod(b)\n",[144,93619,93620],{"class":146,"line":1225},[144,93621,93577],{"class":213},[144,93623,93624],{"class":146,"line":1231},[144,93625,93626],{"class":213},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[18,93628,93630],{"id":93629},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[135,93632,93634],{"className":30391,"code":93633,"language":30393,"meta":30,"style":30},"#删除数组中的重复数据，并对数据进行排序\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",[141,93635,93636,93641,93689,93694,93698],{"__ignoreMap":30},[144,93637,93638],{"class":146,"line":147},[144,93639,93640],{"class":213},"#删除数组中的重复数据，并对数据进行排序\n",[144,93642,93643,93645,93647,93649,93651,93653,93655,93657,93659,93661,93663,93665,93667,93669,93671,93673,93675,93677,93679,93681,93683,93685,93687],{"class":146,"line":66},[144,93644,393],{"class":154},[144,93646,200],{"class":150},[144,93648,93037],{"class":154},[144,93650,372],{"class":203},[144,93652,533],{"class":154},[144,93654,232],{"class":203},[144,93656,533],{"class":154},[144,93658,226],{"class":203},[144,93660,533],{"class":154},[144,93662,653],{"class":203},[144,93664,533],{"class":154},[144,93666,226],{"class":203},[144,93668,533],{"class":154},[144,93670,601],{"class":203},[144,93672,533],{"class":154},[144,93674,352],{"class":203},[144,93676,533],{"class":154},[144,93678,346],{"class":203},[144,93680,533],{"class":154},[144,93682,930],{"class":203},[144,93684,533],{"class":154},[144,93686,448],{"class":203},[144,93688,4687],{"class":154},[144,93690,93691],{"class":146,"line":1210},[144,93692,93693],{"class":154},"np.unique(a)\n",[144,93695,93696],{"class":146,"line":1225},[144,93697,93577],{"class":213},[144,93699,93700],{"class":146,"line":1231},[144,93701,93702],{"class":213},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,93704,93705],{},"升序形式排序",[18,93707,93709],{"id":93708},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[135,93711,93713],{"className":30391,"code":93712,"language":30393,"meta":30,"style":30},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[141,93714,93715,93763,93768],{"__ignoreMap":30},[144,93716,93717,93719,93721,93723,93725,93727,93729,93731,93733,93735,93737,93739,93741,93743,93745,93747,93749,93751,93753,93755,93757,93759,93761],{"class":146,"line":147},[144,93718,393],{"class":154},[144,93720,200],{"class":150},[144,93722,93037],{"class":154},[144,93724,372],{"class":203},[144,93726,533],{"class":154},[144,93728,232],{"class":203},[144,93730,533],{"class":154},[144,93732,226],{"class":203},[144,93734,533],{"class":154},[144,93736,653],{"class":203},[144,93738,533],{"class":154},[144,93740,226],{"class":203},[144,93742,533],{"class":154},[144,93744,601],{"class":203},[144,93746,533],{"class":154},[144,93748,352],{"class":203},[144,93750,533],{"class":154},[144,93752,346],{"class":203},[144,93754,533],{"class":154},[144,93756,930],{"class":203},[144,93758,533],{"class":154},[144,93760,448],{"class":203},[144,93762,4687],{"class":154},[144,93764,93765],{"class":146,"line":66},[144,93766,93767],{"class":213},"#返回数组中非零元素的索引\n",[144,93769,93770],{"class":146,"line":1210},[144,93771,93772],{"class":154},"np.nonzero(a)\n",[18,93774,93776],{"id":93775},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[135,93778,93780],{"className":30391,"code":93779,"language":30393,"meta":30,"style":30},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[141,93781,93782,93830,93835],{"__ignoreMap":30},[144,93783,93784,93786,93788,93790,93792,93794,93796,93798,93800,93802,93804,93806,93808,93810,93812,93814,93816,93818,93820,93822,93824,93826,93828],{"class":146,"line":147},[144,93785,393],{"class":154},[144,93787,200],{"class":150},[144,93789,93037],{"class":154},[144,93791,372],{"class":203},[144,93793,533],{"class":154},[144,93795,232],{"class":203},[144,93797,533],{"class":154},[144,93799,226],{"class":203},[144,93801,533],{"class":154},[144,93803,653],{"class":203},[144,93805,533],{"class":154},[144,93807,226],{"class":203},[144,93809,533],{"class":154},[144,93811,601],{"class":203},[144,93813,533],{"class":154},[144,93815,352],{"class":203},[144,93817,533],{"class":154},[144,93819,346],{"class":203},[144,93821,533],{"class":154},[144,93823,930],{"class":203},[144,93825,533],{"class":154},[144,93827,448],{"class":203},[144,93829,4687],{"class":154},[144,93831,93832],{"class":146,"line":66},[144,93833,93834],{"class":213},"#计算一组数中最大值与最小值的差，可指定轴\n",[144,93836,93837],{"class":146,"line":1210},[144,93838,93839],{"class":154},"np.ptp(a)\n",[5157,93841,93842],{},"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":30,"searchDepth":66,"depth":66,"links":93844},[93845,93846,93847,93848,93849,93850,93851,93852,93853,93854,93855],{"id":93107,"depth":66,"text":93108},{"id":93150,"depth":66,"text":93151},{"id":93258,"depth":66,"text":93259},{"id":93352,"depth":66,"text":93353},{"id":93392,"depth":66,"text":93393},{"id":93465,"depth":66,"text":93466},{"id":93533,"depth":66,"text":93534},{"id":93585,"depth":66,"text":93586},{"id":93629,"depth":66,"text":93630},{"id":93708,"depth":66,"text":93709},{"id":93775,"depth":66,"text":93776},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93093,"description":23408},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93862,"title":93863,"body":93864,"description":23408,"extension":70,"meta":94519,"navigation":72,"path":94520,"seo":94521,"stem":94522,"__hash__":94523},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93865,"toc":94507},[93866,93869,93873,93876,94092,94096,94099,94308,94312,94378,94383,94387,94390,94393,94431,94435,94438,94443,94447,94450,94453,94458,94462,94465,94469,94472,94475,94480,94484,94487,94490,94495,94499,94504],[10,93867,93863],{"id":93868},"_12其他常用函数",[18,93870,93872],{"id":93871},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,93874,93875],{},"将数组的数据按照行列复制扩展",[135,93877,93879],{"className":30391,"code":93878,"language":30393,"meta":30,"style":30},"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",[141,93880,93881,93897,93906,93910,93915,93920,93933,93937,93942,93947,93952,93956,93961,93985,93997,94001,94005,94010,94015,94020,94025,94029,94042,94046,94050,94055,94060,94065,94070,94075,94079,94083,94088],{"__ignoreMap":30},[144,93882,93883,93885,93887,93889,93891,93893,93895],{"class":146,"line":147},[144,93884,393],{"class":154},[144,93886,200],{"class":150},[144,93888,93015],{"class":154},[144,93890,372],{"class":203},[144,93892,533],{"class":154},[144,93894,474],{"class":203},[144,93896,161],{"class":154},[144,93898,93899,93902,93904],{"class":146,"line":66},[144,93900,93901],{"class":154},"np.tile(a,",[144,93903,232],{"class":203},[144,93905,161],{"class":154},[144,93907,93908],{"class":146,"line":1210},[144,93909,93577],{"class":213},[144,93911,93912],{"class":146,"line":1225},[144,93913,93914],{"class":213},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[144,93916,93917],{"class":146,"line":1231},[144,93918,93919],{"class":213},"#行复制两次，列复制三次\n",[144,93921,93922,93925,93927,93929,93931],{"class":146,"line":1245},[144,93923,93924],{"class":154},"np.tile(a,(",[144,93926,232],{"class":203},[144,93928,533],{"class":154},[144,93930,226],{"class":203},[144,93932,30510],{"class":154},[144,93934,93935],{"class":146,"line":1251},[144,93936,93577],{"class":213},[144,93938,93939],{"class":146,"line":1342},[144,93940,93941],{"class":259},"'''\n",[144,93943,93944],{"class":146,"line":1348},[144,93945,93946],{"class":259},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[144,93948,93949],{"class":146,"line":1360},[144,93950,93951],{"class":259},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[144,93953,93954],{"class":146,"line":1642},[144,93955,93941],{"class":259},[144,93957,93958],{"class":146,"line":1647},[144,93959,93960],{"class":213},"#创建二维数组\n",[144,93962,93963,93965,93967,93969,93971,93973,93975,93977,93979,93981,93983],{"class":146,"line":1653},[144,93964,93319],{"class":154},[144,93966,200],{"class":150},[144,93968,93015],{"class":154},[144,93970,372],{"class":203},[144,93972,533],{"class":154},[144,93974,678],{"class":203},[144,93976,93020],{"class":154},[144,93978,448],{"class":203},[144,93980,533],{"class":154},[144,93982,226],{"class":203},[144,93984,161],{"class":154},[144,93986,93987,93990,93992,93994],{"class":146,"line":1658},[144,93988,93989],{"class":154},"np.tile(aa,",[144,93991,232],{"class":203},[144,93993,584],{"class":154},[144,93995,93996],{"class":213},"#一个数的时候就是行\n",[144,93998,93999],{"class":146,"line":1672},[144,94000,93577],{"class":213},[144,94002,94003],{"class":146,"line":1677},[144,94004,93941],{"class":259},[144,94006,94007],{"class":146,"line":1683},[144,94008,94009],{"class":259},"array([[ 1,  2,  3,  1,  2,  3],\n",[144,94011,94012],{"class":146,"line":1704},[144,94013,94014],{"class":259},"       [ 4,  5,  6,  4,  5,  6],\n",[144,94016,94017],{"class":146,"line":1709},[144,94018,94019],{"class":259},"       [ 7,  8,  9,  7,  8,  9],\n",[144,94021,94022],{"class":146,"line":1723},[144,94023,94024],{"class":259},"       [10, 11, 12, 10, 11, 12]])\n",[144,94026,94027],{"class":146,"line":1728},[144,94028,93941],{"class":259},[144,94030,94031,94034,94036,94038,94040],{"class":146,"line":1757},[144,94032,94033],{"class":154},"np.tile(aa,(",[144,94035,232],{"class":203},[144,94037,533],{"class":154},[144,94039,226],{"class":203},[144,94041,30510],{"class":154},[144,94043,94044],{"class":146,"line":1762},[144,94045,93577],{"class":213},[144,94047,94048],{"class":146,"line":1779},[144,94049,93941],{"class":259},[144,94051,94052],{"class":146,"line":1784},[144,94053,94054],{"class":259},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[144,94056,94057],{"class":146,"line":1789},[144,94058,94059],{"class":259},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[144,94061,94062],{"class":146,"line":1794},[144,94063,94064],{"class":259},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[144,94066,94067],{"class":146,"line":1808},[144,94068,94069],{"class":259},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[144,94071,94072],{"class":146,"line":1813},[144,94073,94074],{"class":259},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[144,94076,94077],{"class":146,"line":2607},[144,94078,94059],{"class":259},[144,94080,94081],{"class":146,"line":2621},[144,94082,94064],{"class":259},[144,94084,94085],{"class":146,"line":2629},[144,94086,94087],{"class":259},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[144,94089,94090],{"class":146,"line":2634},[144,94091,93941],{"class":259},[18,94093,94095],{"id":94094},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94097,94098],{},"repeat()将数组中的每个元素重复若干次",[135,94100,94102],{"className":30391,"code":94101,"language":30393,"meta":30,"style":30},"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",[141,94103,94104,94120,94129,94133,94138,94162,94167,94176,94180,94185,94189,94194,94210,94214,94218,94223,94228,94233,94237,94242,94246,94251,94256,94260,94276,94280,94284,94289,94294,94299,94304],{"__ignoreMap":30},[144,94105,94106,94108,94110,94112,94114,94116,94118],{"class":146,"line":147},[144,94107,393],{"class":154},[144,94109,200],{"class":150},[144,94111,93015],{"class":154},[144,94113,372],{"class":203},[144,94115,533],{"class":154},[144,94117,474],{"class":203},[144,94119,161],{"class":154},[144,94121,94122,94125,94127],{"class":146,"line":66},[144,94123,94124],{"class":154},"np.repeat(a,",[144,94126,226],{"class":203},[144,94128,161],{"class":154},[144,94130,94131],{"class":146,"line":1210},[144,94132,93577],{"class":213},[144,94134,94135],{"class":146,"line":1225},[144,94136,94137],{"class":213},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[144,94139,94140,94142,94144,94146,94148,94150,94152,94154,94156,94158,94160],{"class":146,"line":1231},[144,94141,93319],{"class":154},[144,94143,200],{"class":150},[144,94145,93015],{"class":154},[144,94147,372],{"class":203},[144,94149,533],{"class":154},[144,94151,678],{"class":203},[144,94153,93020],{"class":154},[144,94155,448],{"class":203},[144,94157,533],{"class":154},[144,94159,226],{"class":203},[144,94161,161],{"class":154},[144,94163,94164],{"class":146,"line":1245},[144,94165,94166],{"class":213},"#这个重复之后二维变成一维\n",[144,94168,94169,94172,94174],{"class":146,"line":1251},[144,94170,94171],{"class":154},"np.repeat(aa,",[144,94173,232],{"class":203},[144,94175,161],{"class":154},[144,94177,94178],{"class":146,"line":1342},[144,94179,93941],{"class":259},[144,94181,94182],{"class":146,"line":1348},[144,94183,94184],{"class":259},"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",[144,94186,94187],{"class":146,"line":1360},[144,94188,93941],{"class":259},[144,94190,94191],{"class":146,"line":1642},[144,94192,94193],{"class":213},"#指定axis\n",[144,94195,94196,94198,94200,94202,94204,94206,94208],{"class":146,"line":1647},[144,94197,94171],{"class":154},[144,94199,232],{"class":203},[144,94201,533],{"class":154},[144,94203,47527],{"class":5247},[144,94205,200],{"class":150},[144,94207,346],{"class":203},[144,94209,161],{"class":154},[144,94211,94212],{"class":146,"line":1653},[144,94213,93577],{"class":213},[144,94215,94216],{"class":146,"line":1658},[144,94217,93941],{"class":259},[144,94219,94220],{"class":146,"line":1672},[144,94221,94222],{"class":259},"array([[ 1,  2,  3],\n",[144,94224,94225],{"class":146,"line":1677},[144,94226,94227],{"class":259},"       [ 1,  2,  3],\n",[144,94229,94230],{"class":146,"line":1683},[144,94231,94232],{"class":259},"       [ 4,  5,  6],\n",[144,94234,94235],{"class":146,"line":1704},[144,94236,94232],{"class":259},[144,94238,94239],{"class":146,"line":1709},[144,94240,94241],{"class":259},"       [ 7,  8,  9],\n",[144,94243,94244],{"class":146,"line":1723},[144,94245,94241],{"class":259},[144,94247,94248],{"class":146,"line":1728},[144,94249,94250],{"class":259},"       [10, 11, 12],\n",[144,94252,94253],{"class":146,"line":1757},[144,94254,94255],{"class":259},"       [10, 11, 12]])\n",[144,94257,94258],{"class":146,"line":1762},[144,94259,93941],{"class":259},[144,94261,94262,94264,94266,94268,94270,94272,94274],{"class":146,"line":1779},[144,94263,94171],{"class":154},[144,94265,232],{"class":203},[144,94267,533],{"class":154},[144,94269,47527],{"class":5247},[144,94271,200],{"class":150},[144,94273,372],{"class":203},[144,94275,161],{"class":154},[144,94277,94278],{"class":146,"line":1784},[144,94279,93577],{"class":213},[144,94281,94282],{"class":146,"line":1789},[144,94283,93941],{"class":259},[144,94285,94286],{"class":146,"line":1794},[144,94287,94288],{"class":259},"array([[ 1,  1,  2,  2,  3,  3],\n",[144,94290,94291],{"class":146,"line":1808},[144,94292,94293],{"class":259},"       [ 4,  4,  5,  5,  6,  6],\n",[144,94295,94296],{"class":146,"line":1813},[144,94297,94298],{"class":259},"       [ 7,  7,  8,  8,  9,  9],\n",[144,94300,94301],{"class":146,"line":2607},[144,94302,94303],{"class":259},"       [10, 10, 11, 11, 12, 12]])\n",[144,94305,94306],{"class":146,"line":2621},[144,94307,93941],{"class":259},[18,94309,94311],{"id":94310},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[135,94313,94315],{"className":30391,"code":94314,"language":30393,"meta":30,"style":30},"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",[141,94316,94317,94333,94338,94350,94354,94359,94369,94373],{"__ignoreMap":30},[144,94318,94319,94321,94323,94325,94327,94329,94331],{"class":146,"line":147},[144,94320,393],{"class":154},[144,94322,200],{"class":150},[144,94324,93015],{"class":154},[144,94326,372],{"class":203},[144,94328,533],{"class":154},[144,94330,474],{"class":203},[144,94332,161],{"class":154},[144,94334,94335],{"class":146,"line":66},[144,94336,94337],{"class":213},"#array([，2，3，4])\n",[144,94339,94340,94343,94345,94347],{"class":146,"line":1210},[144,94341,94342],{"class":154},"np.roll(a,",[144,94344,232],{"class":203},[144,94346,584],{"class":154},[144,94348,94349],{"class":213},"#传正数向后调多少位，传负数向前调多少位\n",[144,94351,94352],{"class":146,"line":1225},[144,94353,93577],{"class":213},[144,94355,94356],{"class":146,"line":1231},[144,94357,94358],{"class":213},"#array([3, 4, 1, 2])\n",[144,94360,94361,94363,94365,94367],{"class":146,"line":1245},[144,94362,94342],{"class":154},[144,94364,687],{"class":150},[144,94366,372],{"class":203},[144,94368,161],{"class":154},[144,94370,94371],{"class":146,"line":1251},[144,94372,93577],{"class":213},[144,94374,94375],{"class":146,"line":1342},[144,94376,94377],{"class":213},"#array([2, 3, 4, 1])\n",[14,94379,94380],{},[28,94381],{"alt":30,"src":94382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[18,94384,94386],{"id":94385},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,94388,94389],{},"resize()重新调整数组的大小",[14,94391,94392],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[135,94394,94396],{"className":30391,"code":94395,"language":30393,"meta":30,"style":30},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[141,94397,94398,94403,94416],{"__ignoreMap":30},[144,94399,94400],{"class":146,"line":147},[144,94401,94402],{"class":213},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[144,94404,94405,94408,94410,94412,94414],{"class":146,"line":66},[144,94406,94407],{"class":154},"np.resize(aa,(",[144,94409,232],{"class":203},[144,94411,533],{"class":154},[144,94413,499],{"class":203},[144,94415,30510],{"class":154},[144,94417,94418,94420,94422,94424,94426,94428],{"class":146,"line":1210},[144,94419,94407],{"class":154},[144,94421,232],{"class":203},[144,94423,533],{"class":154},[144,94425,575],{"class":203},[144,94427,82784],{"class":154},[144,94429,94430],{"class":213},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[18,94432,94434],{"id":94433},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,94436,94437],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,94439,94440],{},[28,94441],{"alt":30,"src":94442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[18,94444,94446],{"id":94445},"_126-保存加载文件","12.6 保存加载文件",[14,94448,94449],{},"savetxt():将数据保存到txt文件中",[14,94451,94452],{},"loadtxt():从文件加载数据",[14,94454,94455],{},[28,94456],{"alt":30,"src":94457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[18,94459,94461],{"id":94460},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,94463,94464],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[18,94466,94468],{"id":94467},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,94470,94471],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,94473,94474],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,94476,94477],{},[28,94478],{"alt":30,"src":94479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[18,94481,94483],{"id":94482},"_129-where语句","12.9 where语句",[14,94485,94486],{},"np.where(条件,x,y)",[14,94488,94489],{},"如果条件为True,对应值为x,否则对应值为y",[14,94491,94492],{},[28,94493],{"alt":30,"src":94494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[18,94496,94498],{"id":94497},"_1210-dot矩阵","12.10 dot()矩阵",[14,94500,94501],{},[28,94502],{"alt":30,"src":94503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5157,94505,94506],{},"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":30,"searchDepth":66,"depth":66,"links":94508},[94509,94510,94511,94512,94513,94514,94515,94516,94517,94518],{"id":93871,"depth":66,"text":93872},{"id":94094,"depth":66,"text":94095},{"id":94310,"depth":66,"text":94311},{"id":94385,"depth":66,"text":94386},{"id":94433,"depth":66,"text":94434},{"id":94445,"depth":66,"text":94446},{"id":94460,"depth":66,"text":94461},{"id":94467,"depth":66,"text":94468},{"id":94482,"depth":66,"text":94483},{"id":94497,"depth":66,"text":94498},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93863,"description":23408},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94525,"title":94526,"body":94527,"description":23408,"extension":70,"meta":94880,"navigation":72,"path":94881,"seo":94882,"stem":94883,"__hash__":94884},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94528,"toc":94878},[94529,94532,94535,94538,94541,94544,94609,94611,94875],[10,94530,94526],{"id":94531},"_13数组排序",[14,94533,94534],{},"排序主要用到的方法是np.sort和np.argsort",[14,94536,94537],{},"其中np.sort()对数组直接排序",[14,94539,94540],{},"而np.argsort()是返回排序后的原始索引",[14,94542,94543],{},"①一维数组",[135,94545,94547],{"className":30391,"code":94546,"language":30393,"meta":30,"style":30},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[141,94548,94549,94553,94593,94601],{"__ignoreMap":30},[144,94550,94551],{"class":146,"line":147},[144,94552,93118],{"class":213},[144,94554,94555,94557,94559,94561,94563,94565,94567,94569,94571,94573,94575,94577,94579,94581,94583,94585,94587,94589,94591],{"class":146,"line":66},[144,94556,393],{"class":154},[144,94558,200],{"class":150},[144,94560,93037],{"class":154},[144,94562,226],{"class":203},[144,94564,533],{"class":154},[144,94566,653],{"class":203},[144,94568,533],{"class":154},[144,94570,550],{"class":203},[144,94572,533],{"class":154},[144,94574,930],{"class":203},[144,94576,533],{"class":154},[144,94578,434],{"class":203},[144,94580,533],{"class":154},[144,94582,1048],{"class":203},[144,94584,533],{"class":154},[144,94586,499],{"class":203},[144,94588,533],{"class":154},[144,94590,601],{"class":203},[144,94592,4687],{"class":154},[144,94594,94595,94598],{"class":146,"line":1210},[144,94596,94597],{"class":154},"np.sort(a)",[144,94599,94600],{"class":213},"#升序排序\n",[144,94602,94603,94606],{"class":146,"line":1225},[144,94604,94605],{"class":154},"np.argsort(a)",[144,94607,94608],{"class":213},"#按照元素大小来索引排序\n",[14,94610,93304],{},[135,94612,94614],{"className":30391,"code":94613,"language":30393,"meta":30,"style":30},"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",[141,94615,94616,94628,94654,94659,94663,94668,94673,94678,94683,94687,94695,94699,94704,94709,94714,94719,94723,94728,94741,94745,94750,94755,94760,94765,94769,94774,94786,94790,94794,94798,94802,94806,94810,94815,94830,94835,94844,94849,94853,94857,94862,94866,94871],{"__ignoreMap":30},[144,94617,94618,94621,94623,94625],{"class":146,"line":147},[144,94619,94620],{"class":154},"np.random.seed(",[144,94622,346],{"class":203},[144,94624,584],{"class":154},[144,94626,94627],{"class":213},"#保证每次值一样\n",[144,94629,94630,94632,94634,94636,94638,94640,94642,94644,94646,94648,94650,94652],{"class":146,"line":66},[144,94631,93319],{"class":154},[144,94633,200],{"class":150},[144,94635,93127],{"class":154},[144,94637,466],{"class":203},[144,94639,533],{"class":154},[144,94641,31509],{"class":5247},[144,94643,200],{"class":150},[144,94645,155],{"class":154},[144,94647,448],{"class":203},[144,94649,533],{"class":154},[144,94651,499],{"class":203},[144,94653,30510],{"class":154},[144,94655,94656],{"class":146,"line":1210},[144,94657,94658],{"class":213},"#原数组：\n",[144,94660,94661],{"class":146,"line":1225},[144,94662,93941],{"class":259},[144,94664,94665],{"class":146,"line":1231},[144,94666,94667],{"class":259},"array([[44, 47, 64, 67, 67,  9],\n",[144,94669,94670],{"class":146,"line":1245},[144,94671,94672],{"class":259},"       [83, 21, 36, 87, 70, 88],\n",[144,94674,94675],{"class":146,"line":1251},[144,94676,94677],{"class":259},"       [88, 12, 58, 65, 39, 87],\n",[144,94679,94680],{"class":146,"line":1342},[144,94681,94682],{"class":259},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[144,94684,94685],{"class":146,"line":1348},[144,94686,93941],{"class":259},[144,94688,94689,94692],{"class":146,"line":1360},[144,94690,94691],{"class":154},"np.sort(aa)",[144,94693,94694],{"class":213},"#每行进行了排序\n",[144,94696,94697],{"class":146,"line":1642},[144,94698,93941],{"class":259},[144,94700,94701],{"class":146,"line":1647},[144,94702,94703],{"class":259},"array([[ 9, 44, 47, 64, 67, 67],\n",[144,94705,94706],{"class":146,"line":1653},[144,94707,94708],{"class":259},"       [21, 36, 70, 83, 87, 88],\n",[144,94710,94711],{"class":146,"line":1658},[144,94712,94713],{"class":259},"       [12, 39, 58, 65, 87, 88],\n",[144,94715,94716],{"class":146,"line":1672},[144,94717,94718],{"class":259},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[144,94720,94721],{"class":146,"line":1677},[144,94722,93941],{"class":259},[144,94724,94725],{"class":146,"line":1683},[144,94726,94727],{"class":213},"#axis=0时\n",[144,94729,94730,94733,94735,94737,94739],{"class":146,"line":1704},[144,94731,94732],{"class":154},"np.sort(aa,",[144,94734,47527],{"class":5247},[144,94736,200],{"class":150},[144,94738,346],{"class":203},[144,94740,161],{"class":154},[144,94742,94743],{"class":146,"line":1709},[144,94744,93941],{"class":259},[144,94746,94747],{"class":146,"line":1723},[144,94748,94749],{"class":259},"array([[44, 12, 36, 37, 25,  9],\n",[144,94751,94752],{"class":146,"line":1728},[144,94753,94754],{"class":259},"       [46, 21, 58, 65, 39, 77],\n",[144,94756,94757],{"class":146,"line":1757},[144,94758,94759],{"class":259},"       [83, 47, 64, 67, 67, 87],\n",[144,94761,94762],{"class":146,"line":1762},[144,94763,94764],{"class":259},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[144,94766,94767],{"class":146,"line":1779},[144,94768,93941],{"class":259},[144,94770,94771],{"class":146,"line":1784},[144,94772,94773],{"class":213},"#axis=1时,为默认值\n",[144,94775,94776,94778,94780,94782,94784],{"class":146,"line":1789},[144,94777,94732],{"class":154},[144,94779,47527],{"class":5247},[144,94781,200],{"class":150},[144,94783,372],{"class":203},[144,94785,161],{"class":154},[144,94787,94788],{"class":146,"line":1794},[144,94789,93941],{"class":259},[144,94791,94792],{"class":146,"line":1808},[144,94793,94703],{"class":259},[144,94795,94796],{"class":146,"line":1813},[144,94797,94708],{"class":259},[144,94799,94800],{"class":146,"line":2607},[144,94801,94713],{"class":259},[144,94803,94804],{"class":146,"line":2621},[144,94805,94718],{"class":259},[144,94807,94808],{"class":146,"line":2629},[144,94809,93941],{"class":259},[144,94811,94812],{"class":146,"line":2634},[144,94813,94814],{"class":213},"#按最后一列排序\n",[144,94816,94817,94819,94821,94824,94826,94828],{"class":146,"line":2640},[144,94818,418],{"class":154},[144,94820,200],{"class":150},[144,94822,94823],{"class":154},"aa[:,",[144,94825,687],{"class":150},[144,94827,372],{"class":203},[144,94829,33259],{"class":154},[144,94831,94832],{"class":146,"line":2646},[144,94833,94834],{"class":213},"#获取最后一列排好序的索引\n",[144,94836,94837,94839,94841],{"class":146,"line":2651},[144,94838,74071],{"class":154},[144,94840,200],{"class":150},[144,94842,94843],{"class":154},"np.argsort(b)\n",[144,94845,94846],{"class":146,"line":7979},[144,94847,94848],{"class":154},"aa[index]\n",[144,94850,94851],{"class":146,"line":8003},[144,94852,93941],{"class":259},[144,94854,94855],{"class":146,"line":8008},[144,94856,94667],{"class":259},[144,94858,94859],{"class":146,"line":8014},[144,94860,94861],{"class":259},"       [46, 88, 81, 37, 25, 77],\n",[144,94863,94864],{"class":146,"line":8041},[144,94865,94677],{"class":259},[144,94867,94868],{"class":146,"line":8046},[144,94869,94870],{"class":259},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[144,94872,94873],{"class":146,"line":8052},[144,94874,93941],{"class":259},[5157,94876,94877],{},"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":30,"searchDepth":66,"depth":66,"links":94879},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94526,"description":23408},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94886,"title":94887,"body":94888,"description":23408,"extension":70,"meta":94918,"navigation":72,"path":94919,"seo":94920,"stem":94921,"__hash__":94922},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94889,"toc":94916},[94890,94893,94896,94899,94902,94905,94908,94911],[10,94891,94887],{"id":94892},"_14广播机制",[14,94894,94895],{},"广播的规则：",[14,94897,94898],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,94900,94901],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,94903,94904],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,94906,94907],{},"3.如果没有维度形状为1，则会引发异常",[14,94909,94910],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,94912,94913],{},[28,94914],{"alt":30,"src":94915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":30,"searchDepth":66,"depth":66,"links":94917},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94887,"description":23408},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94924,"title":94925,"body":94926,"description":23408,"extension":70,"meta":95024,"navigation":72,"path":95025,"seo":95026,"stem":95027,"__hash__":95028},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94927,"toc":95022},[94928,94931,94934,95019],[10,94929,94925],{"id":94930},"_15比较掩码",[14,94932,94933],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[135,94935,94937],{"className":30391,"code":94936,"language":30393,"meta":30,"style":30},"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",[141,94938,94939,94985,94996,95010,95014],{"__ignoreMap":30},[144,94940,94941,94943,94945,94948,94950,94952,94954,94956,94958,94960,94962,94964,94966,94968,94970,94972,94974,94976,94978,94980,94982],{"class":146,"line":147},[144,94942,393],{"class":154},[144,94944,200],{"class":150},[144,94946,94947],{"class":154},"np.array([[",[144,94949,372],{"class":203},[144,94951,533],{"class":154},[144,94953,232],{"class":203},[144,94955,533],{"class":154},[144,94957,226],{"class":203},[144,94959,48043],{"class":154},[144,94961,627],{"class":203},[144,94963,533],{"class":154},[144,94965,653],{"class":203},[144,94967,533],{"class":154},[144,94969,678],{"class":203},[144,94971,48043],{"class":154},[144,94973,880],{"class":203},[144,94975,533],{"class":154},[144,94977,905],{"class":203},[144,94979,533],{"class":154},[144,94981,930],{"class":203},[144,94983,94984],{"class":154},"]])\n",[144,94986,94987,94989,94991,94993],{"class":146,"line":66},[144,94988,393],{"class":154},[144,94990,1065],{"class":150},[144,94992,855],{"class":203},[144,94994,94995],{"class":213},"#结果是一个由True,False组成的数组\n",[144,94997,94998,95001,95003,95005,95007],{"class":146,"line":1210},[144,94999,95000],{"class":154},"a[a",[144,95002,1065],{"class":150},[144,95004,855],{"class":203},[144,95006,1095],{"class":154},[144,95008,95009],{"class":213},"#小于20的元素会存到这个数组中\n",[144,95011,95012],{"class":146,"line":1225},[144,95013,93577],{"class":213},[144,95015,95016],{"class":146,"line":1231},[144,95017,95018],{"class":213},"#array([ 1,  2,  3, 11, 12, 13])\n",[5157,95020,95021],{},"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":30,"searchDepth":66,"depth":66,"links":95023},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94925,"description":23408},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95030,"title":95031,"body":95032,"description":23408,"extension":70,"meta":95124,"navigation":72,"path":95125,"seo":95126,"stem":95127,"__hash__":95128},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95033,"toc":95122},[95034,95037,95040,95043,95046,95049,95114,95119],[10,95035,95031],{"id":95036},"_16魔法命令time",[14,95038,95039],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95041,95042],{},"%:行模式",[14,95044,95045],{},"%%:单元格模式",[14,95047,95048],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[135,95050,95052],{"className":30391,"code":95051,"language":30393,"meta":30,"style":30},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[141,95053,95054,95059,95066,95071,95080,95093,95097,95105],{"__ignoreMap":30},[144,95055,95056],{"class":146,"line":147},[144,95057,95058],{"class":213},"#程序执行时间\n",[144,95060,95061,95063],{"class":146,"line":66},[144,95062,30405],{"class":150},[144,95064,95065],{"class":154}," time \n",[144,95067,95068],{"class":146,"line":1210},[144,95069,95070],{"class":213},"#获取时间\n",[144,95072,95073,95076,95078],{"class":146,"line":1225},[144,95074,95075],{"class":154},"start",[144,95077,200],{"class":150},[144,95079,32431],{"class":154},[144,95081,95082,95085,95088,95090],{"class":146,"line":1231},[144,95083,95084],{"class":154},"time.sleep(",[144,95086,95087],{"class":203},"0.4",[144,95089,584],{"class":154},[144,95091,95092],{"class":213},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[144,95094,95095],{"class":146,"line":1245},[144,95096,95070],{"class":213},[144,95098,95099,95101,95103],{"class":146,"line":1251},[144,95100,45814],{"class":154},[144,95102,200],{"class":150},[144,95104,32431],{"class":154},[144,95106,95107,95109,95111],{"class":146,"line":1342},[144,95108,45814],{"class":154},[144,95110,687],{"class":150},[144,95112,95113],{"class":154},"start\n",[14,95115,95116],{},[28,95117],{"alt":30,"src":95118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5157,95120,95121],{},"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":30,"searchDepth":66,"depth":66,"links":95123},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95031,"description":23408},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95130,"title":95131,"body":95132,"description":23408,"extension":70,"meta":95167,"navigation":72,"path":95168,"seo":95169,"stem":95170,"__hash__":95171},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95133,"toc":95165},[95134,95137,95140,95143,95146,95149,95152,95155,95160],[10,95135,95131],{"id":95136},"_17魔法命令timeit",[14,95138,95139],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95141,95142],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95144,95145],{},"单元格模式：",[14,95147,95148],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95150,95151],{},"初始化语句执行次数由轮数来决定",[14,95153,95154],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95156,95157],{},[28,95158],{"alt":30,"src":95159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95161,95162],{},[28,95163],{"alt":30,"src":95164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":30,"searchDepth":66,"depth":66,"links":95166},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95131,"description":23408},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95173,"title":95174,"body":95175,"description":23408,"extension":70,"meta":95193,"navigation":72,"path":95194,"seo":95195,"stem":95196,"__hash__":95197},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95176,"toc":95191},[95177,95180,95183,95186],[10,95178,95174],{"id":95179},"_18魔法命令writefile和run",[14,95181,95182],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95184,95185],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95187,95188],{},[28,95189],{"alt":30,"src":95190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":30,"searchDepth":66,"depth":66,"links":95192},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95174,"description":23408},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95199,"title":95200,"body":95201,"description":23408,"extension":70,"meta":95254,"navigation":72,"path":95255,"seo":95256,"stem":95257,"__hash__":95258},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95202,"toc":95252},[95203,95206,95209,95211,95214,95217,95222,95225,95228,95231,95234,95237,95240,95243,95246,95249],[10,95204,95200],{"id":95205},"_19魔法命令memit",[14,95207,95208],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95210,24612],{},[14,95212,95213],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95215,95216],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,95218,95219],{},[28,95220],{"alt":30,"src":95221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95223,95224],{},"补充：",[14,95226,95227],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95229,95230],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95232,95233],{},"解决方法：",[14,95235,95236],{},"1.cmd",[14,95238,95239],{},"2.依次输入以下代码：",[14,95241,95242],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95244,95245],{},"pip install --upgrade ipython",[14,95247,95248],{},"#升级 memory_profiler 和 setuptools",[14,95250,95251],{},"pip install --upgrade memory_profiler setuptools",{"title":30,"searchDepth":66,"depth":66,"links":95253},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95200,"description":23408},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95260,"title":95261,"body":95262,"description":23408,"extension":70,"meta":96908,"navigation":72,"path":96909,"seo":96910,"stem":96911,"__hash__":96912},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95263,"toc":96878},[95264,95267,95271,95275,95336,95339,95344,95348,95353,95358,95363,95368,95371,95376,95380,95384,95417,95420,95423,95426,95478,95481,95517,95520,95562,95566,95587,95589,95626,95628,95633,95635,95640,95644,95647,95675,95679,95683,95736,95740,95832,95836,95840,95843,95848,95852,95877,95882,95886,95889,95892,95895,95898,95901,95904,95907,95919,95923,95927,95930,95962,95965,95988,95991,96017,96020,96046,96049,96083,96086,96148,96152,96155,96159,96162,96188,96191,96194,96199,96202,96271,96273,96278,96339,96342,96353,96359,96364,96368,96371,96384,96388,96403,96405,96428,96430,96456,96459,96462,96465,96513,96515,96520,96524,96528,96555,96559,96586,96589,96594,96599,96689,96693,96751,96756,96759,96762,96804,96808,96864,96869,96872,96875],[10,95265,95261],{"id":95266},"_2创建数组",[18,95268,95270],{"id":95269},"_21-array函数创建数组","2.1 array()函数创建数组",[115,95272,95274],{"id":95273},"_221-函数语句","2.2.1 函数语句",[135,95276,95278],{"className":30391,"code":95277,"language":30393,"meta":30,"style":30},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[141,95279,95280],{"__ignoreMap":30},[144,95281,95282,95285,95288,95290,95292,95294,95296,95298,95301,95303,95306,95308,95311,95313,95315,95317,95320,95322,95325,95327,95330,95332,95334],{"class":146,"line":147},[144,95283,95284],{"class":154},"numpy.array(",[144,95286,95287],{"class":203},"object",[144,95289,12466],{"class":154},[144,95291,93513],{"class":5247},[144,95293,13595],{"class":150},[144,95295,38946],{"class":203},[144,95297,12466],{"class":154},[144,95299,95300],{"class":5247},"copy",[144,95302,13595],{"class":150},[144,95304,95305],{"class":203}," True",[144,95307,12466],{"class":154},[144,95309,95310],{"class":5247},"order",[144,95312,13595],{"class":150},[144,95314,38946],{"class":203},[144,95316,12466],{"class":154},[144,95318,95319],{"class":5247},"subok",[144,95321,13595],{"class":150},[144,95323,95324],{"class":203}," False",[144,95326,12466],{"class":154},[144,95328,95329],{"class":5247},"ndmin",[144,95331,13595],{"class":150},[144,95333,4123],{"class":203},[144,95335,161],{"class":154},[14,95337,95338],{},"参数：",[14,95340,95341],{},[28,95342],{"alt":30,"src":95343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[115,95345,95347],{"id":95346},"_222-实例","2.2.2 实例",[14,95349,95350],{},[28,95351],{"alt":30,"src":95352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95354,95355],{},[28,95356],{"alt":30,"src":95357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95359,95360],{},[28,95361],{"alt":30,"src":95362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95364,95365],{},[28,95366],{"alt":30,"src":95367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,95369,95370],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,95372,95373],{},[28,95374],{"alt":30,"src":95375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[18,95377,95379],{"id":95378},"_22-随机数创建数组","2.2 随机数创建数组",[115,95381,95383],{"id":95382},"_221-random语句","2.2.1 random语句",[135,95385,95387],{"className":30391,"code":95386,"language":30393,"meta":30,"style":30},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[141,95388,95389,95394,95399,95407,95412],{"__ignoreMap":30},[144,95390,95391],{"class":146,"line":147},[144,95392,95393],{"class":213},"#random.random()\n",[144,95395,95396],{"class":146,"line":66},[144,95397,95398],{"class":213},"#确定随机种子,就是每次运行结果是相同的\n",[144,95400,95401,95403,95405],{"class":146,"line":1210},[144,95402,94620],{"class":154},[144,95404,346],{"class":203},[144,95406,161],{"class":154},[144,95408,95409],{"class":146,"line":1225},[144,95410,95411],{"class":154},"np.random.random()\n",[144,95413,95414],{"class":146,"line":1231},[144,95415,95416],{"class":213},"#生成一个随机的数目\n",[14,95418,95419],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,95421,95422],{},"可以指定数组形状 size",[14,95424,95425],{},"①生成一维数组",[135,95427,95429],{"className":30391,"code":95428,"language":30393,"meta":30,"style":30},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[141,95430,95431,95436,95449,95454,95470],{"__ignoreMap":30},[144,95432,95433],{"class":146,"line":147},[144,95434,95435],{"class":213},"#random.random(size())\n",[144,95437,95438,95441,95443,95445,95447],{"class":146,"line":66},[144,95439,95440],{"class":154},"np.random.random(",[144,95442,31509],{"class":5247},[144,95444,200],{"class":150},[144,95446,474],{"class":203},[144,95448,161],{"class":154},[144,95450,95451],{"class":146,"line":1210},[144,95452,95453],{"class":213},"#生成一位的五个元素\n",[144,95455,95456,95458,95460,95462,95464,95466,95468],{"class":146,"line":1225},[144,95457,393],{"class":154},[144,95459,200],{"class":150},[144,95461,95440],{"class":154},[144,95463,31509],{"class":5247},[144,95465,200],{"class":150},[144,95467,448],{"class":203},[144,95469,161],{"class":154},[144,95471,95472,95475],{"class":146,"line":1231},[144,95473,95474],{"class":154},"a.shape ",[144,95476,95477],{"class":213},"#输出数组形状\n",[14,95479,95480],{},"②生成二维数组",[135,95482,95484],{"className":30391,"code":95483,"language":30393,"meta":30,"style":30},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[141,95485,95486,95490,95512],{"__ignoreMap":30},[144,95487,95488],{"class":146,"line":147},[144,95489,93314],{"class":213},[144,95491,95492,95494,95496,95498,95500,95502,95504,95506,95508,95510],{"class":146,"line":66},[144,95493,93319],{"class":154},[144,95495,200],{"class":150},[144,95497,95440],{"class":154},[144,95499,31509],{"class":5247},[144,95501,200],{"class":150},[144,95503,155],{"class":154},[144,95505,448],{"class":203},[144,95507,533],{"class":154},[144,95509,474],{"class":203},[144,95511,30510],{"class":154},[144,95513,95514],{"class":146,"line":1210},[144,95515,95516],{"class":213},"#生成四行五列的数组\n",[14,95518,95519],{},"③生成三维数组",[135,95521,95523],{"className":30391,"code":95522,"language":30393,"meta":30,"style":30},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[141,95524,95525,95530,95557],{"__ignoreMap":30},[144,95526,95527],{"class":146,"line":147},[144,95528,95529],{"class":213},"#三维数组\n",[144,95531,95532,95535,95537,95539,95541,95543,95545,95547,95549,95551,95553,95555],{"class":146,"line":66},[144,95533,95534],{"class":154},"aaa",[144,95536,200],{"class":150},[144,95538,95440],{"class":154},[144,95540,31509],{"class":5247},[144,95542,200],{"class":150},[144,95544,155],{"class":154},[144,95546,232],{"class":203},[144,95548,533],{"class":154},[144,95550,226],{"class":203},[144,95552,533],{"class":154},[144,95554,448],{"class":203},[144,95556,30510],{"class":154},[144,95558,95559],{"class":146,"line":1210},[144,95560,95561],{"class":154},"aaa.shape\n",[115,95563,95565],{"id":95564},"_222-randint语句","2.2.2 randint语句",[135,95567,95569],{"className":30391,"code":95568,"language":30393,"meta":30,"style":30},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[141,95570,95571,95576],{"__ignoreMap":30},[144,95572,95573],{"class":146,"line":147},[144,95574,95575],{"class":213},"#生成随机的整数 random.randint(low,high,size)\n",[144,95577,95578,95580,95582,95584],{"class":146,"line":66},[144,95579,93127],{"class":154},[144,95581,474],{"class":203},[144,95583,13745],{"class":154},[144,95585,95586],{"class":213},"#0~5中的随机一个数\n",[14,95588,95425],{},[135,95590,95592],{"className":30391,"code":95591,"language":30393,"meta":30,"style":30},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[141,95593,95594,95599,95621],{"__ignoreMap":30},[144,95595,95596],{"class":146,"line":147},[144,95597,95598],{"class":213},"#一维\n",[144,95600,95601,95603,95605,95607,95609,95611,95613,95615,95617,95619],{"class":146,"line":66},[144,95602,93127],{"class":154},[144,95604,372],{"class":203},[144,95606,533],{"class":154},[144,95608,627],{"class":203},[144,95610,533],{"class":154},[144,95612,31509],{"class":5247},[144,95614,200],{"class":150},[144,95616,155],{"class":154},[144,95618,601],{"class":203},[144,95620,30510],{"class":154},[144,95622,95623],{"class":146,"line":1210},[144,95624,95625],{"class":213},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,95627,95480],{},[14,95629,95630],{},[28,95631],{"alt":30,"src":95632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,95634,95519],{},[14,95636,95637],{},[28,95638],{"alt":30,"src":95639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[115,95641,95643],{"id":95642},"_222-rand语句","2.2.2 rand语句",[14,95645,95646],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[135,95648,95650],{"className":30391,"code":95649,"language":30393,"meta":30,"style":30},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[141,95651,95652,95665,95670],{"__ignoreMap":30},[144,95653,95654,95657,95659,95661,95663],{"class":146,"line":147},[144,95655,95656],{"class":154},"np.random.rand(",[144,95658,466],{"class":203},[144,95660,533],{"class":154},[144,95662,601],{"class":203},[144,95664,161],{"class":154},[144,95666,95667],{"class":146,"line":66},[144,95668,95669],{"class":213},"#第一个参数100：行数，表示有100个样本\n",[144,95671,95672],{"class":146,"line":1210},[144,95673,95674],{"class":213},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[18,95676,95678],{"id":95677},"_23-arange创建数组","2.3 arange()创建数组",[115,95680,95682],{"id":95681},"_231-函数语句","2.3.1 函数语句",[135,95684,95686],{"className":30391,"code":95685,"language":30393,"meta":30,"style":30},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[141,95687,95688,95702,95707,95712,95717,95722,95727,95732],{"__ignoreMap":30},[144,95689,95690,95693,95695,95697,95700],{"class":146,"line":147},[144,95691,95692],{"class":154},"numpy.arange([start,] stop[, step], ",[144,95694,93513],{"class":5247},[144,95696,200],{"class":150},[144,95698,95699],{"class":203},"None",[144,95701,161],{"class":154},[144,95703,95704],{"class":146,"line":66},[144,95705,95706],{"class":213},"#参数\n",[144,95708,95709],{"class":146,"line":1210},[144,95710,95711],{"class":259},"\"\"\"\n",[144,95713,95714],{"class":146,"line":1225},[144,95715,95716],{"class":259},"start:起始值，可选，默认从 0 开始。\n",[144,95718,95719],{"class":146,"line":1231},[144,95720,95721],{"class":259},"stop:结束值（不包含该值）。\n",[144,95723,95724],{"class":146,"line":1245},[144,95725,95726],{"class":259},"step:步长，可选，默认是 1。可以为浮点数。\n",[144,95728,95729],{"class":146,"line":1251},[144,95730,95731],{"class":259},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[144,95733,95734],{"class":146,"line":1342},[144,95735,95711],{"class":259},[115,95737,95739],{"id":95738},"_232-实例","2.3.2 实例",[135,95741,95743],{"className":30391,"code":95742,"language":30393,"meta":30,"style":30},"#创建一维数组\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",[141,95744,95745,95749,95773,95778,95783,95787,95810,95814,95818,95823,95828],{"__ignoreMap":30},[144,95746,95747],{"class":146,"line":147},[144,95748,93118],{"class":213},[144,95750,95751,95753,95755,95757,95759,95761,95763,95765,95767,95769,95771],{"class":146,"line":66},[144,95752,93015],{"class":154},[144,95754,372],{"class":203},[144,95756,533],{"class":154},[144,95758,880],{"class":203},[144,95760,533],{"class":154},[144,95762,372],{"class":203},[144,95764,533],{"class":154},[144,95766,93513],{"class":5247},[144,95768,200],{"class":150},[144,95770,158],{"class":203},[144,95772,161],{"class":154},[144,95774,95775],{"class":146,"line":1210},[144,95776,95777],{"class":213},"#输出结果：\n",[144,95779,95780],{"class":146,"line":1225},[144,95781,95782],{"class":213},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[144,95784,95785],{"class":146,"line":1231},[144,95786,93960],{"class":213},[144,95788,95789,95792,95794,95796,95798,95801,95803,95805,95807],{"class":146,"line":1245},[144,95790,95791],{"class":154},"np.array([np.arange(",[144,95793,372],{"class":203},[144,95795,533],{"class":154},[144,95797,448],{"class":203},[144,95799,95800],{"class":154},"),np.arange(",[144,95802,448],{"class":203},[144,95804,533],{"class":154},[144,95806,524],{"class":203},[144,95808,95809],{"class":154},")])\n",[144,95811,95812],{"class":146,"line":1251},[144,95813,93577],{"class":213},[144,95815,95816],{"class":146,"line":1342},[144,95817,95711],{"class":259},[144,95819,95820],{"class":146,"line":1348},[144,95821,95822],{"class":259},"array([[1, 2, 3],\n",[144,95824,95825],{"class":146,"line":1360},[144,95826,95827],{"class":259},"       [4, 5, 6]])\n",[144,95829,95830],{"class":146,"line":1642},[144,95831,95711],{"class":259},[18,95833,95835],{"id":95834},"_24-生态分布","2.4 生态分布",[115,95837,95839],{"id":95838},"_241-标准正态分布","2.4.1 标准正态分布",[14,95841,95842],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,95844,95845],{},[28,95846],{"alt":30,"src":95847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[115,95849,95851],{"id":95850},"_242-常规正态分布","2.4.2 常规正态分布",[135,95853,95855],{"className":30391,"code":95854,"language":30393,"meta":30,"style":30},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[141,95856,95857,95862,95867,95872],{"__ignoreMap":30},[144,95858,95859],{"class":146,"line":147},[144,95860,95861],{"class":154},"random.normal(loc,scale,size)也可以生成正态分布\n",[144,95863,95864],{"class":146,"line":66},[144,95865,95866],{"class":213},"#loc:期望\n",[144,95868,95869],{"class":146,"line":1210},[144,95870,95871],{"class":213},"#scale:方差\n",[144,95873,95874],{"class":146,"line":1225},[144,95875,95876],{"class":213},"#size:用于确定是几维的数列\n",[14,95878,95879],{},[28,95880],{"alt":30,"src":95881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[18,95883,95885],{"id":95884},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,95887,95888],{},"ndim:秩，维度个数",[14,95890,95891],{},"size:数组元素的个数",[14,95893,95894],{},"shape:数组的形状",[14,95896,95897],{},"dtype:数组元素的类型",[14,95899,95900],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,95902,95903],{},"他们都是属性，通过数组.属性的形式来确定",[14,95905,95906],{},"如果需要输出多个可以通过以下方式：",[135,95908,95910],{"className":30391,"code":95909,"language":30393,"meta":30,"style":30},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[141,95911,95912],{"__ignoreMap":30},[144,95913,95914,95916],{"class":146,"line":147},[144,95915,30428],{"class":203},[144,95917,95918],{"class":154},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[18,95920,95922],{"id":95921},"_26-其他方式创建数组","2.6 其他方式创建数组",[115,95924,95926],{"id":95925},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,95928,95929],{},"①创建一维数组",[135,95931,95933],{"className":30391,"code":95932,"language":30393,"meta":30,"style":30},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[141,95934,95935,95944,95948,95953,95958],{"__ignoreMap":30},[144,95936,95937,95940,95942],{"class":146,"line":147},[144,95938,95939],{"class":154},"np.zeros(",[144,95941,601],{"class":203},[144,95943,161],{"class":154},[144,95945,95946],{"class":146,"line":66},[144,95947,95711],{"class":259},[144,95949,95950],{"class":146,"line":1210},[144,95951,95952],{"class":259},"输出结果：\n",[144,95954,95955],{"class":146,"line":1225},[144,95956,95957],{"class":259},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[144,95959,95960],{"class":146,"line":1231},[144,95961,95711],{"class":259},[14,95963,95964],{},"上方代码等价于：",[135,95966,95968],{"className":30391,"code":95967,"language":30393,"meta":30,"style":30},"np.zeros(shape=(10))#创建10个元素的0数组\n",[141,95969,95970],{"__ignoreMap":30},[144,95971,95972,95974,95977,95979,95981,95983,95985],{"class":146,"line":147},[144,95973,95939],{"class":154},[144,95975,95976],{"class":5247},"shape",[144,95978,200],{"class":150},[144,95980,155],{"class":154},[144,95982,601],{"class":203},[144,95984,82784],{"class":154},[144,95986,95987],{"class":213},"#创建10个元素的0数组\n",[14,95989,95990],{},"也可以指定类型",[135,95992,95994],{"className":30391,"code":95993,"language":30393,"meta":30,"style":30},"#指定类型\nnp.zeros(5,dtype=int)\n",[141,95995,95996,96001],{"__ignoreMap":30},[144,95997,95998],{"class":146,"line":147},[144,95999,96000],{"class":213},"#指定类型\n",[144,96002,96003,96005,96007,96009,96011,96013,96015],{"class":146,"line":66},[144,96004,95939],{"class":154},[144,96006,474],{"class":203},[144,96008,533],{"class":154},[144,96010,93513],{"class":5247},[144,96012,200],{"class":150},[144,96014,158],{"class":203},[144,96016,161],{"class":154},[14,96018,96019],{},"②创建二维数组",[135,96021,96023],{"className":30391,"code":96022,"language":30393,"meta":30,"style":30},"np.zeros((3,4),dtype=int)\n",[141,96024,96025],{"__ignoreMap":30},[144,96026,96027,96030,96032,96034,96036,96038,96040,96042,96044],{"class":146,"line":147},[144,96028,96029],{"class":154},"np.zeros((",[144,96031,226],{"class":203},[144,96033,533],{"class":154},[144,96035,448],{"class":203},[144,96037,42269],{"class":154},[144,96039,93513],{"class":5247},[144,96041,200],{"class":150},[144,96043,158],{"class":203},[144,96045,161],{"class":154},[14,96047,96048],{},"③创建三维数组",[135,96050,96052],{"className":30391,"code":96051,"language":30393,"meta":30,"style":30},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[141,96053,96054,96059],{"__ignoreMap":30},[144,96055,96056],{"class":146,"line":147},[144,96057,96058],{"class":213},"#创建三维数组\n",[144,96060,96061,96063,96065,96067,96069,96071,96073,96075,96077,96079,96081],{"class":146,"line":66},[144,96062,96029],{"class":154},[144,96064,226],{"class":203},[144,96066,533],{"class":154},[144,96068,448],{"class":203},[144,96070,533],{"class":154},[144,96072,474],{"class":203},[144,96074,42269],{"class":154},[144,96076,93513],{"class":5247},[144,96078,200],{"class":150},[144,96080,158],{"class":203},[144,96082,161],{"class":154},[14,96084,96085],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[135,96087,96089],{"className":30391,"code":96088,"language":30393,"meta":30,"style":30},"#使用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",[141,96090,96091,96096,96111,96116,96121,96143],{"__ignoreMap":30},[144,96092,96093],{"class":146,"line":147},[144,96094,96095],{"class":213},"#使用zeros_like将创建的一维数组变成全0的数组\n",[144,96097,96098,96100,96102,96104,96106,96108],{"class":146,"line":66},[144,96099,393],{"class":154},[144,96101,200],{"class":150},[144,96103,93015],{"class":154},[144,96105,448],{"class":203},[144,96107,584],{"class":154},[144,96109,96110],{"class":213},"#这个得到的结果：一维数组0，1，2，3\n",[144,96112,96113],{"class":146,"line":1210},[144,96114,96115],{"class":154},"np.zeros_like(a)\n",[144,96117,96118],{"class":146,"line":1225},[144,96119,96120],{"class":213},"#使用zeros_like将创建的二维数组变成全0的数组\n",[144,96122,96123,96125,96127,96129,96131,96133,96135,96137,96139,96141],{"class":146,"line":1231},[144,96124,93319],{"class":154},[144,96126,200],{"class":150},[144,96128,95440],{"class":154},[144,96130,31509],{"class":5247},[144,96132,200],{"class":150},[144,96134,155],{"class":154},[144,96136,448],{"class":203},[144,96138,533],{"class":154},[144,96140,474],{"class":203},[144,96142,30510],{"class":154},[144,96144,96145],{"class":146,"line":1245},[144,96146,96147],{"class":154},"np.zeros_like(aa)\n",[115,96149,96151],{"id":96150},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96153,96154],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[115,96156,96158],{"id":96157},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96160,96161],{},"①empty()用法",[135,96163,96165],{"className":30391,"code":96164,"language":30393,"meta":30,"style":30},"numpy.empty(shape,dtype=float,order='c')\n",[141,96166,96167],{"__ignoreMap":30},[144,96168,96169,96172,96174,96176,96178,96180,96182,96184,96186],{"class":146,"line":147},[144,96170,96171],{"class":154},"numpy.empty(shape,",[144,96173,93513],{"class":5247},[144,96175,200],{"class":150},[144,96177,194],{"class":203},[144,96179,533],{"class":154},[144,96181,95310],{"class":5247},[144,96183,200],{"class":150},[144,96185,76041],{"class":259},[144,96187,161],{"class":154},[14,96189,96190],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96192,96193],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96195,96196],{},[28,96197],{"alt":30,"src":96198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96200,96201],{},"②empty()用法",[135,96203,96205],{"className":30391,"code":96204,"language":30393,"meta":30,"style":30},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[141,96206,96207,96228,96240,96261,96266],{"__ignoreMap":30},[144,96208,96209,96211,96213,96216,96218,96220,96222,96224,96226],{"class":146,"line":147},[144,96210,1000],{"class":154},[144,96212,200],{"class":150},[144,96214,96215],{"class":154},"np.empty(",[144,96217,601],{"class":203},[144,96219,533],{"class":154},[144,96221,93513],{"class":5247},[144,96223,200],{"class":150},[144,96225,158],{"class":203},[144,96227,161],{"class":154},[144,96229,96230,96232,96234,96236,96238],{"class":146,"line":66},[144,96231,975],{"class":154},[144,96233,200],{"class":150},[144,96235,93015],{"class":154},[144,96237,474],{"class":203},[144,96239,161],{"class":154},[144,96241,96242,96245,96247,96250,96252,96254,96257,96259],{"class":146,"line":1210},[144,96243,96244],{"class":154},"np.add(",[144,96246,232],{"class":203},[144,96248,96249],{"class":154},",x,",[144,96251,93067],{"class":5247},[144,96253,200],{"class":150},[144,96255,96256],{"class":154},"y[:",[144,96258,474],{"class":203},[144,96260,4687],{"class":154},[144,96262,96263],{"class":146,"line":1225},[144,96264,96265],{"class":213},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[144,96267,96268],{"class":146,"line":1231},[144,96269,96270],{"class":154},"y\n",[14,96272,11545],{},[14,96274,96275],{},[28,96276],{"alt":30,"src":96277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[135,96279,96281],{"className":30391,"code":96280,"language":30393,"meta":30,"style":30},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[141,96282,96283,96299,96319,96334],{"__ignoreMap":30},[144,96284,96285,96287,96289,96291,96293,96295,96297],{"class":146,"line":147},[144,96286,975],{"class":154},[144,96288,200],{"class":150},[144,96290,93015],{"class":154},[144,96292,372],{"class":203},[144,96294,533],{"class":154},[144,96296,499],{"class":203},[144,96298,161],{"class":154},[144,96300,96301,96303,96305,96307,96309,96311,96313,96315,96317],{"class":146,"line":66},[144,96302,1000],{"class":154},[144,96304,200],{"class":150},[144,96306,96215],{"class":154},[144,96308,474],{"class":203},[144,96310,533],{"class":154},[144,96312,93513],{"class":5247},[144,96314,200],{"class":150},[144,96316,158],{"class":203},[144,96318,161],{"class":154},[144,96320,96321,96324,96326,96328,96330,96332],{"class":146,"line":1210},[144,96322,96323],{"class":154},"np.add(x,",[144,96325,232],{"class":203},[144,96327,533],{"class":154},[144,96329,93067],{"class":5247},[144,96331,200],{"class":150},[144,96333,93462],{"class":154},[144,96335,96336],{"class":146,"line":1225},[144,96337,96338],{"class":213},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96340,96341],{},"③empty_like()",[14,96343,96344],{},[304,96345,96346,96347,96352],{},"创建一个",[304,96348,96349],{},[304,96350,96351],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96354,96355,96358],{},[141,96356,96357],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96360,96361],{},[28,96362],{"alt":30,"src":96363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[115,96365,96367],{"id":96366},"_264-用法","2.6.4 ？？用法",[14,96369,96370],{},"当想查看一个函数的参数时，可以通过？？来实现",[135,96372,96374],{"className":30391,"code":96373,"language":30393,"meta":30,"style":30},"np.full??\n",[141,96375,96376],{"__ignoreMap":30},[144,96377,96378,96381],{"class":146,"line":147},[144,96379,96380],{"class":154},"np.full",[144,96382,96383],{"class":77416},"??\n",[115,96385,96387],{"id":96386},"_265-full创建数组","2.6.5 full()创建数组",[135,96389,96391],{"className":30391,"code":96390,"language":30393,"meta":30,"style":30},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[141,96392,96393,96398],{"__ignoreMap":30},[144,96394,96395],{"class":146,"line":147},[144,96396,96397],{"class":154},"full(shape,fill_value)\n",[144,96399,96400],{"class":146,"line":66},[144,96401,96402],{"class":154},"创建全为某个指定值的数组\n",[14,96404,94543],{},[135,96406,96408],{"className":30391,"code":96407,"language":30393,"meta":30,"style":30},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[141,96409,96410,96415],{"__ignoreMap":30},[144,96411,96412],{"class":146,"line":147},[144,96413,96414],{"class":213},"#创建一个一维数组,以20进行填充\n",[144,96416,96417,96420,96422,96424,96426],{"class":146,"line":66},[144,96418,96419],{"class":154},"np.full(",[144,96421,601],{"class":203},[144,96423,533],{"class":154},[144,96425,855],{"class":203},[144,96427,161],{"class":154},[14,96429,93304],{},[135,96431,96433],{"className":30391,"code":96432,"language":30393,"meta":30,"style":30},"#创建二维数组\nnp.full((3,5),11)\n",[141,96434,96435,96439],{"__ignoreMap":30},[144,96436,96437],{"class":146,"line":147},[144,96438,93960],{"class":213},[144,96440,96441,96444,96446,96448,96450,96452,96454],{"class":146,"line":66},[144,96442,96443],{"class":154},"np.full((",[144,96445,226],{"class":203},[144,96447,533],{"class":154},[144,96449,474],{"class":203},[144,96451,42269],{"class":154},[144,96453,627],{"class":203},[144,96455,161],{"class":154},[14,96457,96458],{},"③full_like用法",[14,96460,96461],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,96463,96464],{},"这里是指定填充而已",[135,96466,96468],{"className":30391,"code":96467,"language":30393,"meta":30,"style":30},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[141,96469,96470,96475,96499,96504],{"__ignoreMap":30},[144,96471,96472],{"class":146,"line":147},[144,96473,96474],{"class":213},"#创建一个指定形状数组\n",[144,96476,96477,96479,96481,96483,96485,96487,96489,96491,96493,96495,96497],{"class":146,"line":66},[144,96478,393],{"class":154},[144,96480,200],{"class":150},[144,96482,93015],{"class":154},[144,96484,372],{"class":203},[144,96486,533],{"class":154},[144,96488,480],{"class":203},[144,96490,93020],{"class":154},[144,96492,448],{"class":203},[144,96494,533],{"class":154},[144,96496,575],{"class":203},[144,96498,161],{"class":154},[144,96500,96501],{"class":146,"line":1210},[144,96502,96503],{"class":213},"#进行指定填充\n",[144,96505,96506,96509,96511],{"class":146,"line":1225},[144,96507,96508],{"class":154},"np.full_like(a,",[144,96510,601],{"class":203},[144,96512,161],{"class":154},[14,96514,11545],{},[14,96516,96517],{},[28,96518],{"alt":30,"src":96519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[115,96521,96523],{"id":96522},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22029,96525,96527],{"id":96526},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[135,96529,96531],{"className":30391,"code":96530,"language":30393,"meta":30,"style":30},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[141,96532,96533,96550],{"__ignoreMap":30},[144,96534,96535,96538,96540,96542,96544,96546,96548],{"class":146,"line":147},[144,96536,96537],{"class":154},"np.eye(",[144,96539,448],{"class":203},[144,96541,533],{"class":154},[144,96543,93513],{"class":5247},[144,96545,200],{"class":150},[144,96547,158],{"class":203},[144,96549,161],{"class":154},[144,96551,96552],{"class":146,"line":66},[144,96553,96554],{"class":213},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22029,96556,96558],{"id":96557},"_2662-法2identity","2.6.6.2 法2：identity()",[135,96560,96562],{"className":30391,"code":96561,"language":30393,"meta":30,"style":30},"#identity()\nnp.identity(5,dtype=int)\n",[141,96563,96564,96569],{"__ignoreMap":30},[144,96565,96566],{"class":146,"line":147},[144,96567,96568],{"class":213},"#identity()\n",[144,96570,96571,96574,96576,96578,96580,96582,96584],{"class":146,"line":66},[144,96572,96573],{"class":154},"np.identity(",[144,96575,474],{"class":203},[144,96577,533],{"class":154},[144,96579,93513],{"class":5247},[144,96581,200],{"class":150},[144,96583,158],{"class":203},[144,96585,161],{"class":154},[14,96587,96588],{},"两个函数是有区别的",[14,96590,96591],{},[28,96592],{"alt":30,"src":96593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,96595,96596],{},[28,96597],{"alt":30,"src":96598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[135,96600,96602],{"className":30391,"code":96601,"language":30393,"meta":30,"style":30},"# 创建一个 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",[141,96603,96604,96609,96621,96626,96631,96636,96641,96645,96650,96670,96674,96679,96684],{"__ignoreMap":30},[144,96605,96606],{"class":146,"line":147},[144,96607,96608],{"class":213},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[144,96610,96611,96613,96615,96617,96619],{"class":146,"line":66},[144,96612,96537],{"class":154},[144,96614,226],{"class":203},[144,96616,12466],{"class":154},[144,96618,448],{"class":203},[144,96620,161],{"class":154},[144,96622,96623],{"class":146,"line":1210},[144,96624,96625],{"class":213},"# 输出:\n",[144,96627,96628],{"class":146,"line":1225},[144,96629,96630],{"class":213},"# [[1. 0. 0. 0.]\n",[144,96632,96633],{"class":146,"line":1231},[144,96634,96635],{"class":213},"#  [0. 1. 0. 0.]\n",[144,96637,96638],{"class":146,"line":1245},[144,96639,96640],{"class":213},"#  [0. 0. 1. 0.]]\n",[144,96642,96643],{"class":146,"line":1251},[144,96644,2430],{"emptyLinePlaceholder":72},[144,96646,96647],{"class":146,"line":1342},[144,96648,96649],{"class":213},"# 对角线向上偏移1\n",[144,96651,96652,96654,96656,96658,96660,96662,96664,96666,96668],{"class":146,"line":1348},[144,96653,96537],{"class":154},[144,96655,226],{"class":203},[144,96657,12466],{"class":154},[144,96659,448],{"class":203},[144,96661,12466],{"class":154},[144,96663,648],{"class":5247},[144,96665,200],{"class":150},[144,96667,372],{"class":203},[144,96669,161],{"class":154},[144,96671,96672],{"class":146,"line":1360},[144,96673,96625],{"class":213},[144,96675,96676],{"class":146,"line":1642},[144,96677,96678],{"class":213},"# [[0. 1. 0. 0.]\n",[144,96680,96681],{"class":146,"line":1647},[144,96682,96683],{"class":213},"#  [0. 0. 1. 0.]\n",[144,96685,96686],{"class":146,"line":1653},[144,96687,96688],{"class":213},"#  [0. 0. 0. 1.]]\n",[115,96690,96692],{"id":96691},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[135,96694,96696],{"className":30391,"code":96695,"language":30393,"meta":30,"style":30},"#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",[141,96697,96698,96703,96707,96712,96717,96722,96727,96732,96737,96742,96747],{"__ignoreMap":30},[144,96699,96700],{"class":146,"line":147},[144,96701,96702],{"class":213},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[144,96704,96705],{"class":146,"line":66},[144,96706,95711],{"class":259},[144,96708,96709],{"class":146,"line":1210},[144,96710,96711],{"class":259},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[144,96713,96714],{"class":146,"line":1225},[144,96715,96716],{"class":259},"参数介绍：\n",[144,96718,96719],{"class":146,"line":1231},[144,96720,96721],{"class":259},"start：序列的起始值\n",[144,96723,96724],{"class":146,"line":1245},[144,96725,96726],{"class":259},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[144,96728,96729],{"class":146,"line":1251},[144,96730,96731],{"class":259},"num：要生长的等步长的样本数量，默认为50\n",[144,96733,96734],{"class":146,"line":1342},[144,96735,96736],{"class":259},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[144,96738,96739],{"class":146,"line":1348},[144,96740,96741],{"class":259},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[144,96743,96744],{"class":146,"line":1360},[144,96745,96746],{"class":259},"dtype：ndarry的数据类型\n",[144,96748,96749],{"class":146,"line":1642},[144,96750,95711],{"class":259},[14,96752,96753],{},[28,96754],{"alt":30,"src":96755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,96757,96758],{},"这里num=是可以省略的",[14,96760,96761],{},"也就是下方两行代码结果是一模一样的",[135,96763,96765],{"className":30391,"code":96764,"language":30393,"meta":30,"style":30},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[141,96766,96767,96784],{"__ignoreMap":30},[144,96768,96769,96772,96774,96776,96778,96780,96782],{"class":146,"line":147},[144,96770,96771],{"class":154},"np.linspace(",[144,96773,372],{"class":203},[144,96775,533],{"class":154},[144,96777,474],{"class":203},[144,96779,533],{"class":154},[144,96781,474],{"class":203},[144,96783,161],{"class":154},[144,96785,96786,96788,96790,96792,96794,96796,96798,96800,96802],{"class":146,"line":66},[144,96787,96771],{"class":154},[144,96789,372],{"class":203},[144,96791,533],{"class":154},[144,96793,474],{"class":203},[144,96795,533],{"class":154},[144,96797,1695],{"class":5247},[144,96799,200],{"class":150},[144,96801,474],{"class":203},[144,96803,161],{"class":154},[115,96805,96807],{"id":96806},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[135,96809,96811],{"className":30391,"code":96810,"language":30393,"meta":30,"style":30},"#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",[141,96812,96813,96818,96822,96827,96832,96837,96842,96846,96851,96856,96860],{"__ignoreMap":30},[144,96814,96815],{"class":146,"line":147},[144,96816,96817],{"class":213},"#logspace函数用于创建一个等比数列，格式如下：\n",[144,96819,96820],{"class":146,"line":66},[144,96821,95711],{"class":259},[144,96823,96824],{"class":146,"line":1210},[144,96825,96826],{"class":259},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[144,96828,96829],{"class":146,"line":1225},[144,96830,96831],{"class":259},"参数为：\n",[144,96833,96834],{"class":146,"line":1231},[144,96835,96836],{"class":259},"start:序列的起始位置为：base**start\n",[144,96838,96839],{"class":146,"line":1245},[144,96840,96841],{"class":259},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[144,96843,96844],{"class":146,"line":1251},[144,96845,96731],{"class":259},[144,96847,96848],{"class":146,"line":1342},[144,96849,96850],{"class":259},"endpoint：是否包含 stop 这个值，默认是 True\n",[144,96852,96853],{"class":146,"line":1348},[144,96854,96855],{"class":259},"base：对数的底数，默认是 10（常见对数）\n",[144,96857,96858],{"class":146,"line":1360},[144,96859,96746],{"class":259},[144,96861,96862],{"class":146,"line":1642},[144,96863,95711],{"class":259},[14,96865,96866],{},[28,96867],{"alt":30,"src":96868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,96870,96871],{},"logspace()函数中的num参数也是可以不写num=的",[14,96873,96874],{},"endpoint是不可以省略的",[5157,96876,96877],{},"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":30,"searchDepth":66,"depth":66,"links":96879},[96880,96884,96889,96893,96897,96898],{"id":95269,"depth":66,"text":95270,"children":96881},[96882,96883],{"id":95273,"depth":1210,"text":95274},{"id":95346,"depth":1210,"text":95347},{"id":95378,"depth":66,"text":95379,"children":96885},[96886,96887,96888],{"id":95382,"depth":1210,"text":95383},{"id":95564,"depth":1210,"text":95565},{"id":95642,"depth":1210,"text":95643},{"id":95677,"depth":66,"text":95678,"children":96890},[96891,96892],{"id":95681,"depth":1210,"text":95682},{"id":95738,"depth":1210,"text":95739},{"id":95834,"depth":66,"text":95835,"children":96894},[96895,96896],{"id":95838,"depth":1210,"text":95839},{"id":95850,"depth":1210,"text":95851},{"id":95884,"depth":66,"text":95885},{"id":95921,"depth":66,"text":95922,"children":96899},[96900,96901,96902,96903,96904,96905,96906,96907],{"id":95925,"depth":1210,"text":95926},{"id":96150,"depth":1210,"text":96151},{"id":96157,"depth":1210,"text":96158},{"id":96366,"depth":1210,"text":96367},{"id":96386,"depth":1210,"text":96387},{"id":96522,"depth":1210,"text":96523},{"id":96691,"depth":1210,"text":96692},{"id":96806,"depth":1210,"text":96807},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95261,"description":23408},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96914,"title":96915,"body":96916,"description":23408,"extension":70,"meta":97009,"navigation":72,"path":97010,"seo":97011,"stem":97012,"__hash__":97013},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96917,"toc":97007},[96918,96921,96924,96927,96930,96933,96936,96939,96942,96945,96948,96951,96953,96956,96959,96964,96967,96970,97004],[10,96919,96915],{"id":96920},"_20魔法命令mprun",[14,96922,96923],{},"逐行分析数据内存的使用情况",[14,96925,96926],{},"语法格式：",[14,96928,96929],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,96931,96932],{},"分析结果列如下：",[14,96934,96935],{},"Line行号",[14,96937,96938],{},"Mem usage内存使用大小",[14,96940,96941],{},"increment内存增量",[14,96943,96944],{},"Line content代码内容",[14,96946,96947],{},"补充说明：",[14,96949,96950],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,96952,95216],{},[14,96954,96955],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,96957,96958],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,96960,96961],{},[28,96962],{"alt":30,"src":96963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,96965,96966],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,96968,96969],{},"这时候需要重新加载模块",[135,96971,96973],{"className":30391,"code":96972,"language":30393,"meta":30,"style":30},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[141,96974,96975,96980,96987,96992],{"__ignoreMap":30},[144,96976,96977],{"class":146,"line":147},[144,96978,96979],{"class":213},"#重新加载模块\n",[144,96981,96982,96984],{"class":146,"line":66},[144,96983,30405],{"class":150},[144,96985,96986],{"class":154}," importlib\n",[144,96988,96989],{"class":146,"line":1210},[144,96990,96991],{"class":154},"importlib.reload(mprun_test)\n",[144,96993,96994,96996,96999,97001],{"class":146,"line":1225},[144,96995,483],{"class":150},[144,96997,96998],{"class":154},"mprun ",[144,97000,687],{"class":150},[144,97002,97003],{"class":154},"f mprun_test.fun_test mprun_test.fun_test()\n",[5157,97005,97006],{},"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":30,"searchDepth":66,"depth":66,"links":97008},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96915,"description":23408},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97015,"title":97016,"body":97017,"description":23408,"extension":70,"meta":97034,"navigation":72,"path":97035,"seo":97036,"stem":97037,"__hash__":97038},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97018,"toc":97032},[97019,97022,97027],[10,97020,97016],{"id":97021},"_3一维数组的索引和切片",[14,97023,97024],{},[28,97025],{"alt":30,"src":97026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,97028,97029],{},[28,97030],{"alt":30,"src":97031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":30,"searchDepth":66,"depth":66,"links":97033},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97016,"description":23408},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97040,"title":97041,"body":97042,"description":23408,"extension":70,"meta":97525,"navigation":72,"path":97526,"seo":97527,"stem":97528,"__hash__":97529},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97043,"toc":97523},[97044,97047,97050,97055,97088,97091,97129,97132,97166,97169,97274,97277,97314,97317,97418,97421,97472,97475,97517,97520],[10,97045,97041],{"id":97046},"_4二维数组的索引与切片",[14,97048,97049],{},"①获取指定单个元素",[14,97051,97052],{},[28,97053],{"alt":30,"src":97054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[135,97056,97058],{"className":30391,"code":97057,"language":30393,"meta":30,"style":30},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[141,97059,97060,97065,97070,97075],{"__ignoreMap":30},[144,97061,97062],{"class":146,"line":147},[144,97063,97064],{"class":213},"#获取元素9\n",[144,97066,97067],{"class":146,"line":66},[144,97068,97069],{"class":213},"#先获取所在行，再获取所在列\n",[144,97071,97072],{"class":146,"line":1210},[144,97073,97074],{"class":213},"#数组[行索引号，列索引号]\n",[144,97076,97077,97080,97082,97084,97086],{"class":146,"line":1225},[144,97078,97079],{"class":154},"a[",[144,97081,372],{"class":203},[144,97083,533],{"class":154},[144,97085,232],{"class":203},[144,97087,33259],{"class":154},[14,97089,97090],{},"②获取整行元素",[135,97092,97094],{"className":30391,"code":97093,"language":30393,"meta":30,"style":30},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[141,97095,97096,97101,97106,97114,97119],{"__ignoreMap":30},[144,97097,97098],{"class":146,"line":147},[144,97099,97100],{"class":213},"#获取整行 数组[行索引号]\n",[144,97102,97103],{"class":146,"line":66},[144,97104,97105],{"class":213},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[144,97107,97108,97110,97112],{"class":146,"line":1210},[144,97109,97079],{"class":154},[144,97111,232],{"class":203},[144,97113,33259],{"class":154},[144,97115,97116],{"class":146,"line":1225},[144,97117,97118],{"class":213},"#也可以负索引获取一行\n",[144,97120,97121,97123,97125,97127],{"class":146,"line":1231},[144,97122,97079],{"class":154},[144,97124,687],{"class":150},[144,97126,372],{"class":203},[144,97128,33259],{"class":154},[14,97130,97131],{},"③获取整列元素",[135,97133,97135],{"className":30391,"code":97134,"language":30393,"meta":30,"style":30},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[141,97136,97137,97142,97151,97156],{"__ignoreMap":30},[144,97138,97139],{"class":146,"line":147},[144,97140,97141],{"class":213},"#获取整列 数组名[:,列索引]\n",[144,97143,97144,97147,97149],{"class":146,"line":66},[144,97145,97146],{"class":154},"a[:,",[144,97148,232],{"class":203},[144,97150,33259],{"class":154},[144,97152,97153],{"class":146,"line":1210},[144,97154,97155],{"class":213},"#也可以负索引获取一列\n",[144,97157,97158,97160,97162,97164],{"class":146,"line":1225},[144,97159,97146],{"class":154},[144,97161,687],{"class":150},[144,97163,372],{"class":203},[144,97165,33259],{"class":154},[14,97167,97168],{},"④部分行部分列的元素",[135,97170,97172],{"className":30391,"code":97171,"language":30393,"meta":30,"style":30},"#部分行部分列 数组名[行切片，列切片]\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",[141,97173,97174,97179,97189,97193,97197,97202,97207,97211,97223,97227,97231,97236,97241,97246,97251,97255,97260],{"__ignoreMap":30},[144,97175,97176],{"class":146,"line":147},[144,97177,97178],{"class":213},"#部分行部分列 数组名[行切片，列切片]\n",[144,97180,97181,97184,97186],{"class":146,"line":66},[144,97182,97183],{"class":154},"a[:",[144,97185,232],{"class":203},[144,97187,97188],{"class":154},",:]\n",[144,97190,97191],{"class":146,"line":1210},[144,97192,93577],{"class":213},[144,97194,97195],{"class":146,"line":1225},[144,97196,93941],{"class":259},[144,97198,97199],{"class":146,"line":1231},[144,97200,97201],{"class":259},"array([[ 1,  2,  3,  4,  5,  6],\n",[144,97203,97204],{"class":146,"line":1245},[144,97205,97206],{"class":259},"       [ 7,  8,  9, 10, 11, 12]])\n",[144,97208,97209],{"class":146,"line":1251},[144,97210,93941],{"class":259},[144,97212,97213,97215,97217,97219,97221],{"class":146,"line":1342},[144,97214,97146],{"class":154},[144,97216,372],{"class":203},[144,97218,1014],{"class":154},[144,97220,448],{"class":203},[144,97222,33259],{"class":154},[144,97224,97225],{"class":146,"line":1348},[144,97226,93577],{"class":213},[144,97228,97229],{"class":146,"line":1360},[144,97230,93941],{"class":259},[144,97232,97233],{"class":146,"line":1642},[144,97234,97235],{"class":259},"array([[ 2,  3,  4],\n",[144,97237,97238],{"class":146,"line":1647},[144,97239,97240],{"class":259},"       [ 8,  9, 10],\n",[144,97242,97243],{"class":146,"line":1653},[144,97244,97245],{"class":259},"       [14, 15, 16],\n",[144,97247,97248],{"class":146,"line":1658},[144,97249,97250],{"class":259},"       [20, 21, 22]])\n",[144,97252,97253],{"class":146,"line":1672},[144,97254,93941],{"class":259},[144,97256,97257],{"class":146,"line":1677},[144,97258,97259],{"class":213},"#对列行同时进行切片，使用了step参数\n",[144,97261,97262,97265,97267,97270,97272],{"class":146,"line":1683},[144,97263,97264],{"class":154},"a[::",[144,97266,232],{"class":203},[144,97268,97269],{"class":154},",::",[144,97271,232],{"class":203},[144,97273,33259],{"class":154},[14,97275,97276],{},"⑤同时获取两个元素",[135,97278,97280],{"className":30391,"code":97279,"language":30393,"meta":30,"style":30},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[141,97281,97282,97287,97292],{"__ignoreMap":30},[144,97283,97284],{"class":146,"line":147},[144,97285,97286],{"class":213},"#同时获取第三行第二列，第四行第一列\n",[144,97288,97289],{"class":146,"line":66},[144,97290,97291],{"class":213},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[144,97293,97294,97297,97299,97301,97303,97305,97307,97309,97311],{"class":146,"line":1210},[144,97295,97296],{"class":154},"a[(",[144,97298,232],{"class":203},[144,97300,533],{"class":154},[144,97302,226],{"class":203},[144,97304,42260],{"class":154},[144,97306,372],{"class":203},[144,97308,533],{"class":154},[144,97310,346],{"class":203},[144,97312,97313],{"class":154},")]\n",[14,97315,97316],{},"⑥切片，对行进行反向获取",[135,97318,97320],{"className":30391,"code":97319,"language":30393,"meta":30,"style":30},"#切片 对所有行进行反向获取\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",[141,97321,97322,97327,97337,97341,97345,97350,97355,97360,97365,97369,97374,97390,97394,97399,97404,97409,97414],{"__ignoreMap":30},[144,97323,97324],{"class":146,"line":147},[144,97325,97326],{"class":213},"#切片 对所有行进行反向获取\n",[144,97328,97329,97331,97333,97335],{"class":146,"line":66},[144,97330,97264],{"class":154},[144,97332,687],{"class":150},[144,97334,372],{"class":203},[144,97336,33259],{"class":154},[144,97338,97339],{"class":146,"line":1210},[144,97340,93577],{"class":213},[144,97342,97343],{"class":146,"line":1225},[144,97344,93941],{"class":259},[144,97346,97347],{"class":146,"line":1231},[144,97348,97349],{"class":259},"array([[19, 20, 21, 22, 23, 24],\n",[144,97351,97352],{"class":146,"line":1245},[144,97353,97354],{"class":259},"       [13, 14, 15, 16, 17, 18],\n",[144,97356,97357],{"class":146,"line":1251},[144,97358,97359],{"class":259},"       [ 7,  8,  9, 10, 11, 12],\n",[144,97361,97362],{"class":146,"line":1342},[144,97363,97364],{"class":259},"       [ 1,  2,  3,  4,  5,  6]])\n",[144,97366,97367],{"class":146,"line":1348},[144,97368,93941],{"class":259},[144,97370,97371],{"class":146,"line":1360},[144,97372,97373],{"class":213},"#对行列都进行反向切片获取\n",[144,97375,97376,97378,97380,97382,97384,97386,97388],{"class":146,"line":1642},[144,97377,97264],{"class":154},[144,97379,687],{"class":150},[144,97381,372],{"class":203},[144,97383,97269],{"class":154},[144,97385,687],{"class":150},[144,97387,372],{"class":203},[144,97389,33259],{"class":154},[144,97391,97392],{"class":146,"line":1647},[144,97393,93941],{"class":259},[144,97395,97396],{"class":146,"line":1653},[144,97397,97398],{"class":259},"array([[24, 23, 22, 21, 20, 19],\n",[144,97400,97401],{"class":146,"line":1658},[144,97402,97403],{"class":259},"       [18, 17, 16, 15, 14, 13],\n",[144,97405,97406],{"class":146,"line":1672},[144,97407,97408],{"class":259},"       [12, 11, 10,  9,  8,  7],\n",[144,97410,97411],{"class":146,"line":1677},[144,97412,97413],{"class":259},"       [ 6,  5,  4,  3,  2,  1]])\n",[144,97415,97416],{"class":146,"line":1683},[144,97417,93941],{"class":259},[14,97419,97420],{},"⑦修改元素",[135,97422,97424],{"className":30391,"code":97423,"language":30393,"meta":30,"style":30},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[141,97425,97426,97431,97449,97454],{"__ignoreMap":30},[144,97427,97428],{"class":146,"line":147},[144,97429,97430],{"class":213},"#获取前两行和前两列\n",[144,97432,97433,97436,97438,97440,97442,97445,97447],{"class":146,"line":66},[144,97434,97435],{"class":154},"sub_a",[144,97437,200],{"class":150},[144,97439,97183],{"class":154},[144,97441,232],{"class":203},[144,97443,97444],{"class":154},",:",[144,97446,232],{"class":203},[144,97448,33259],{"class":154},[144,97450,97451],{"class":146,"line":1210},[144,97452,97453],{"class":213},"#修改sub_a第一个元素的值\n",[144,97455,97456,97459,97461,97463,97465,97467,97469],{"class":146,"line":1225},[144,97457,97458],{"class":154},"sub_a[",[144,97460,346],{"class":203},[144,97462,533],{"class":154},[144,97464,346],{"class":203},[144,97466,1095],{"class":154},[144,97468,200],{"class":150},[144,97470,97471],{"class":203},"100\n",[14,97473,97474],{},"⑧数组复制copy()",[135,97476,97478],{"className":30391,"code":97477,"language":30393,"meta":30,"style":30},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[141,97479,97480,97485,97495,97500],{"__ignoreMap":30},[144,97481,97482],{"class":146,"line":147},[144,97483,97484],{"class":213},"#数组复制\n",[144,97486,97487,97490,97492],{"class":146,"line":66},[144,97488,97489],{"class":154},"copy_a",[144,97491,200],{"class":150},[144,97493,97494],{"class":154},"np.copy(sub_a)\n",[144,97496,97497],{"class":146,"line":1210},[144,97498,97499],{"class":213},"#修改copy_a后不影响原数组\n",[144,97501,97502,97505,97507,97509,97511,97513,97515],{"class":146,"line":1225},[144,97503,97504],{"class":154},"copy_a[",[144,97506,346],{"class":203},[144,97508,533],{"class":154},[144,97510,346],{"class":203},[144,97512,1095],{"class":154},[144,97514,200],{"class":150},[144,97516,97471],{"class":203},[14,97518,97519],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5157,97521,97522],{},"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":30,"searchDepth":66,"depth":66,"links":97524},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97041,"description":23408},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97531,"title":97532,"body":97533,"description":23408,"extension":70,"meta":98025,"navigation":72,"path":98026,"seo":98027,"stem":98028,"__hash__":98029},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97534,"toc":98017},[97535,97538,97542,97545,97548,97601,97604,97629,97632,97651,97671,97674,97690,97694,97740,97744,97786,97790,97793,97796,97799,97802,97805,97867,97927,97931,97934,97991,97995,98000,98009,98014],[10,97536,97532],{"id":97537},"_5改变数组的维度",[18,97539,97541],{"id":97540},"_51-使用reshape","5.1 使用reshape()",[14,97543,97544],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,97546,97547],{},"①一维数组转换为二维数组",[135,97549,97551],{"className":30391,"code":97550,"language":30393,"meta":30,"style":30},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[141,97552,97553,97569,97574,97579,97584],{"__ignoreMap":30},[144,97554,97555,97557,97559,97561,97563,97565,97567],{"class":146,"line":147},[144,97556,393],{"class":154},[144,97558,200],{"class":150},[144,97560,93015],{"class":154},[144,97562,372],{"class":203},[144,97564,533],{"class":154},[144,97566,678],{"class":203},[144,97568,161],{"class":154},[144,97570,97571],{"class":146,"line":66},[144,97572,97573],{"class":213},"#将一维数组进行转换\n",[144,97575,97576],{"class":146,"line":1210},[144,97577,97578],{"class":213},"#注意点：元素个数不可以变\n",[144,97580,97581],{"class":146,"line":1225},[144,97582,97583],{"class":213},"#转换维度要保持一致，不一致就异常！！！\n",[144,97585,97586,97588,97590,97593,97595,97597,97599],{"class":146,"line":1231},[144,97587,93319],{"class":154},[144,97589,200],{"class":150},[144,97591,97592],{"class":154},"a.reshape(",[144,97594,232],{"class":203},[144,97596,533],{"class":154},[144,97598,499],{"class":203},[144,97600,161],{"class":154},[14,97602,97603],{},"②一维数组转换为三维数组",[135,97605,97607],{"className":30391,"code":97606,"language":30393,"meta":30,"style":30},"aaa=a.reshape(2,3,2)\n",[141,97608,97609],{"__ignoreMap":30},[144,97610,97611,97613,97615,97617,97619,97621,97623,97625,97627],{"class":146,"line":147},[144,97612,95534],{"class":154},[144,97614,200],{"class":150},[144,97616,97592],{"class":154},[144,97618,232],{"class":203},[144,97620,533],{"class":154},[144,97622,226],{"class":203},[144,97624,533],{"class":154},[144,97626,232],{"class":203},[144,97628,161],{"class":154},[14,97630,97631],{},"③二维数组转化为一维数组",[135,97633,97635],{"className":30391,"code":97634,"language":30393,"meta":30,"style":30},"#知道元素个数：\naa.reshape(12)\n",[141,97636,97637,97642],{"__ignoreMap":30},[144,97638,97639],{"class":146,"line":147},[144,97640,97641],{"class":213},"#知道元素个数：\n",[144,97643,97644,97647,97649],{"class":146,"line":66},[144,97645,97646],{"class":154},"aa.reshape(",[144,97648,653],{"class":203},[144,97650,161],{"class":154},[135,97652,97654],{"className":30391,"code":97653,"language":30393,"meta":30,"style":30},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[141,97655,97656,97661],{"__ignoreMap":30},[144,97657,97658],{"class":146,"line":147},[144,97659,97660],{"class":213},"#不知道元素个数，参数传递-1\n",[144,97662,97663,97665,97667,97669],{"class":146,"line":66},[144,97664,97646],{"class":154},[144,97666,687],{"class":150},[144,97668,372],{"class":203},[144,97670,161],{"class":154},[14,97672,97673],{},"④三维数组转换为一维数组",[135,97675,97677],{"className":30391,"code":97676,"language":30393,"meta":30,"style":30},"aaa.reshape(-1)\n",[141,97678,97679],{"__ignoreMap":30},[144,97680,97681,97684,97686,97688],{"class":146,"line":147},[144,97682,97683],{"class":154},"aaa.reshape(",[144,97685,687],{"class":150},[144,97687,372],{"class":203},[144,97689,161],{"class":154},[18,97691,97693],{"id":97692},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[135,97695,97697],{"className":30391,"code":97696,"language":30393,"meta":30,"style":30},"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",[141,97698,97699,97726,97731,97735],{"__ignoreMap":30},[144,97700,97701,97703,97705,97707,97709,97711,97713,97715,97717,97719,97721,97723],{"class":146,"line":147},[144,97702,93319],{"class":154},[144,97704,200],{"class":150},[144,97706,93015],{"class":154},[144,97708,372],{"class":203},[144,97710,533],{"class":154},[144,97712,678],{"class":203},[144,97714,93020],{"class":154},[144,97716,232],{"class":203},[144,97718,533],{"class":154},[144,97720,499],{"class":203},[144,97722,584],{"class":154},[144,97724,97725],{"class":213},"#转换为2行6列的数组\n",[144,97727,97728],{"class":146,"line":66},[144,97729,97730],{"class":154},"aa.revel()\n",[144,97732,97733],{"class":146,"line":1210},[144,97734,93577],{"class":213},[144,97736,97737],{"class":146,"line":1225},[144,97738,97739],{"class":213},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[18,97741,97743],{"id":97742},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[135,97745,97747],{"className":30391,"code":97746,"language":30393,"meta":30,"style":30},"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",[141,97748,97749,97773,97778,97782],{"__ignoreMap":30},[144,97750,97751,97753,97755,97757,97759,97761,97763,97765,97767,97769,97771],{"class":146,"line":147},[144,97752,93319],{"class":154},[144,97754,200],{"class":150},[144,97756,93015],{"class":154},[144,97758,372],{"class":203},[144,97760,533],{"class":154},[144,97762,678],{"class":203},[144,97764,93020],{"class":154},[144,97766,232],{"class":203},[144,97768,533],{"class":154},[144,97770,499],{"class":203},[144,97772,161],{"class":154},[144,97774,97775],{"class":146,"line":66},[144,97776,97777],{"class":154},"aa.flatten()\n",[144,97779,97780],{"class":146,"line":1210},[144,97781,93577],{"class":213},[144,97783,97784],{"class":146,"line":1225},[144,97785,97739],{"class":213},[18,97787,97789],{"id":97788},"_54-使用resize","5.4 使用resize()",[14,97791,97792],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,97794,97795],{},"通过resize方法可以改变数组的维度",[14,97797,97798],{},"#resize修改数组维度",[14,97800,97801],{},"#以元组的形式指定形状",[14,97803,97804],{},"#改变的是原数组",[135,97806,97808],{"className":30391,"code":97807,"language":30393,"meta":30,"style":30},"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",[141,97809,97810,97826,97846,97859,97863],{"__ignoreMap":30},[144,97811,97812,97814,97816,97818,97820,97822,97824],{"class":146,"line":147},[144,97813,393],{"class":154},[144,97815,200],{"class":150},[144,97817,93015],{"class":154},[144,97819,372],{"class":203},[144,97821,533],{"class":154},[144,97823,678],{"class":203},[144,97825,161],{"class":154},[144,97827,97828,97831,97833,97835,97837,97839,97841,97843],{"class":146,"line":66},[144,97829,97830],{"class":154},"a.shape",[144,97832,200],{"class":150},[144,97834,155],{"class":154},[144,97836,232],{"class":203},[144,97838,533],{"class":154},[144,97840,499],{"class":203},[144,97842,584],{"class":154},[144,97844,97845],{"class":213},"#改变了原数组\n",[144,97847,97848,97850,97852,97855,97857],{"class":146,"line":1210},[144,97849,393],{"class":154},[144,97851,200],{"class":150},[144,97853,97854],{"class":154},"resize((",[144,97856,653],{"class":203},[144,97858,30510],{"class":154},[144,97860,97861],{"class":146,"line":1225},[144,97862,93577],{"class":213},[144,97864,97865],{"class":146,"line":1231},[144,97866,97739],{"class":213},[135,97868,97870],{"className":30391,"code":97869,"language":30393,"meta":30,"style":30},"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",[141,97871,97872,97885,97889,97893,97898,97903,97908,97913,97918,97923],{"__ignoreMap":30},[144,97873,97874,97877,97879,97881,97883],{"class":146,"line":147},[144,97875,97876],{"class":154},"a.resize((",[144,97878,499],{"class":203},[144,97880,533],{"class":154},[144,97882,232],{"class":203},[144,97884,30510],{"class":154},[144,97886,97887],{"class":146,"line":66},[144,97888,93577],{"class":213},[144,97890,97891],{"class":146,"line":1210},[144,97892,93941],{"class":259},[144,97894,97895],{"class":146,"line":1225},[144,97896,97897],{"class":259},"array([[ 1,  2],\n",[144,97899,97900],{"class":146,"line":1231},[144,97901,97902],{"class":259},"       [ 3,  4],\n",[144,97904,97905],{"class":146,"line":1245},[144,97906,97907],{"class":259},"       [ 5,  6],\n",[144,97909,97910],{"class":146,"line":1251},[144,97911,97912],{"class":259},"       [ 7,  8],\n",[144,97914,97915],{"class":146,"line":1342},[144,97916,97917],{"class":259},"       [ 9, 10],\n",[144,97919,97920],{"class":146,"line":1348},[144,97921,97922],{"class":259},"       [11, 12]])\n",[144,97924,97925],{"class":146,"line":1360},[144,97926,93941],{"class":259},[18,97928,97930],{"id":97929},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,97932,97933],{},"改变了原数组",[135,97935,97937],{"className":30391,"code":97936,"language":30393,"meta":30,"style":30},"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",[141,97938,97939,97955,97971,97975,97979,97983,97987],{"__ignoreMap":30},[144,97940,97941,97943,97945,97947,97949,97951,97953],{"class":146,"line":147},[144,97942,393],{"class":154},[144,97944,200],{"class":150},[144,97946,93015],{"class":154},[144,97948,372],{"class":203},[144,97950,533],{"class":154},[144,97952,678],{"class":203},[144,97954,161],{"class":154},[144,97956,97957,97959,97961,97963,97965,97967,97969],{"class":146,"line":66},[144,97958,97830],{"class":154},[144,97960,200],{"class":150},[144,97962,155],{"class":154},[144,97964,232],{"class":203},[144,97966,533],{"class":154},[144,97968,499],{"class":203},[144,97970,161],{"class":154},[144,97972,97973],{"class":146,"line":1210},[144,97974,93577],{"class":213},[144,97976,97977],{"class":146,"line":1225},[144,97978,93941],{"class":259},[144,97980,97981],{"class":146,"line":1231},[144,97982,97201],{"class":259},[144,97984,97985],{"class":146,"line":1245},[144,97986,97206],{"class":259},[144,97988,97989],{"class":146,"line":1251},[144,97990,93941],{"class":259},[18,97992,97994],{"id":97993},"_56-重要比较","5.6 重要比较：",[14,97996,97997],{},[28,97998],{"alt":30,"src":97999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,98001,98002,98003,98005,98006,98008],{},"口诀：NumPy 函数要么用 ",[141,98004,95976],{},"，要么用 ",[141,98007,31509],{},"，创建结构用 shape，造数据用 size",[14,98010,98011],{},[28,98012],{"alt":30,"src":98013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5157,98015,98016],{},"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":30,"searchDepth":66,"depth":66,"links":98018},[98019,98020,98021,98022,98023,98024],{"id":97540,"depth":66,"text":97541},{"id":97692,"depth":66,"text":97693},{"id":97742,"depth":66,"text":97743},{"id":97788,"depth":66,"text":97789},{"id":97929,"depth":66,"text":97930},{"id":97993,"depth":66,"text":97994},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97532,"description":23408},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98031,"title":98032,"body":98033,"description":23408,"extension":70,"meta":99105,"navigation":72,"path":99106,"seo":99107,"stem":99108,"__hash__":99109},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98034,"toc":99099},[98035,98038,98042,98045,98048,98051,98116,98119,98159,98162,98244,98247,98252,98274,98276,98281,98286,98289,98292,98447,98450,98652,98656,98659,98662,98730,98732,98737,98740,98743,98823,98827,98830,98832,98905,98907,98912,98914,98994,98998,99001,99004,99007,99010,99013,99016,99096],[10,98036,98032],{"id":98037},"_6数组的拼接",[18,98039,98041],{"id":98040},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98043,98044],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98046,98047],{},"函数内部传两个数列构成的数列或者元组",[14,98049,98050],{},"①一维数组的拼接",[135,98052,98054],{"className":30391,"code":98053,"language":30393,"meta":30,"style":30},"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",[141,98055,98056,98076,98096,98101,98106,98111],{"__ignoreMap":30},[144,98057,98058,98060,98062,98064,98066,98068,98070,98072,98074],{"class":146,"line":147},[144,98059,393],{"class":154},[144,98061,200],{"class":150},[144,98063,93037],{"class":154},[144,98065,372],{"class":203},[144,98067,533],{"class":154},[144,98069,232],{"class":203},[144,98071,533],{"class":154},[144,98073,226],{"class":203},[144,98075,4687],{"class":154},[144,98077,98078,98080,98082,98084,98086,98088,98090,98092,98094],{"class":146,"line":66},[144,98079,418],{"class":154},[144,98081,200],{"class":150},[144,98083,93037],{"class":154},[144,98085,448],{"class":203},[144,98087,533],{"class":154},[144,98089,474],{"class":203},[144,98091,533],{"class":154},[144,98093,499],{"class":203},[144,98095,4687],{"class":154},[144,98097,98098],{"class":146,"line":1210},[144,98099,98100],{"class":213},"#调用concatenate进行数组拼接\n",[144,98102,98103],{"class":146,"line":1225},[144,98104,98105],{"class":154},"np.concatenate((a,b))\n",[144,98107,98108],{"class":146,"line":1231},[144,98109,98110],{"class":213},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[144,98112,98113],{"class":146,"line":1245},[144,98114,98115],{"class":213},"#np.concatenate([a,b])\n",[14,98117,98118],{},"②一维多个数组拼接",[135,98120,98122],{"className":30391,"code":98121,"language":30393,"meta":30,"style":30},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[141,98123,98124,98129,98149,98154],{"__ignoreMap":30},[144,98125,98126],{"class":146,"line":147},[144,98127,98128],{"class":213},"#也可以多个数组进行拼接\n",[144,98130,98131,98133,98135,98137,98139,98141,98143,98145,98147],{"class":146,"line":66},[144,98132,443],{"class":154},[144,98134,200],{"class":150},[144,98136,93037],{"class":154},[144,98138,601],{"class":203},[144,98140,533],{"class":154},[144,98142,627],{"class":203},[144,98144,533],{"class":154},[144,98146,678],{"class":203},[144,98148,4687],{"class":154},[144,98150,98151],{"class":146,"line":1210},[144,98152,98153],{"class":154},"c\n",[144,98155,98156],{"class":146,"line":1225},[144,98157,98158],{"class":154},"np.concatenate((a,b,c))\n",[14,98160,98161],{},"③二维数组拼接",[135,98163,98165],{"className":30391,"code":98164,"language":30393,"meta":30,"style":30},"#二维数组使用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",[141,98166,98167,98172,98196,98221,98226,98231],{"__ignoreMap":30},[144,98168,98169],{"class":146,"line":147},[144,98170,98171],{"class":213},"#二维数组使用concatenate进行拼接\n",[144,98173,98174,98176,98178,98180,98182,98184,98186,98188,98190,98192,98194],{"class":146,"line":66},[144,98175,93319],{"class":154},[144,98177,200],{"class":150},[144,98179,93015],{"class":154},[144,98181,372],{"class":203},[144,98183,533],{"class":154},[144,98185,678],{"class":203},[144,98187,93020],{"class":154},[144,98189,226],{"class":203},[144,98191,533],{"class":154},[144,98193,448],{"class":203},[144,98195,161],{"class":154},[144,98197,98198,98201,98203,98205,98207,98209,98211,98213,98215,98217,98219],{"class":146,"line":1210},[144,98199,98200],{"class":154},"bb",[144,98202,200],{"class":150},[144,98204,93015],{"class":154},[144,98206,492],{"class":203},[144,98208,533],{"class":154},[144,98210,797],{"class":203},[144,98212,93020],{"class":154},[144,98214,226],{"class":203},[144,98216,533],{"class":154},[144,98218,448],{"class":203},[144,98220,161],{"class":154},[144,98222,98223],{"class":146,"line":1225},[144,98224,98225],{"class":213},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[144,98227,98228],{"class":146,"line":1231},[144,98229,98230],{"class":213},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[144,98232,98233,98236,98238,98240,98242],{"class":146,"line":1245},[144,98234,98235],{"class":154},"np.concatenate((aa,bb),",[144,98237,47527],{"class":5247},[144,98239,200],{"class":150},[144,98241,346],{"class":203},[144,98243,161],{"class":154},[14,98245,98246],{},"结果：",[14,98248,98249],{},[28,98250],{"alt":30,"src":98251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[135,98253,98255],{"className":30391,"code":98254,"language":30393,"meta":30,"style":30},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[141,98256,98257,98262],{"__ignoreMap":30},[144,98258,98259],{"class":146,"line":147},[144,98260,98261],{"class":213},"#指定axis为1进行拼接\n",[144,98263,98264,98266,98268,98270,98272],{"class":146,"line":66},[144,98265,98235],{"class":154},[144,98267,47527],{"class":5247},[144,98269,200],{"class":150},[144,98271,372],{"class":203},[144,98273,161],{"class":154},[14,98275,98246],{},[14,98277,98278],{},[28,98279],{"alt":30,"src":98280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98282,98283],{},[304,98284,98285],{},"二维数组总结：0竖着方向，1横着方向",[14,98287,98288],{},"④三维数组拼接",[14,98290,98291],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[135,98293,98295],{"className":30391,"code":98294,"language":30393,"meta":30,"style":30},"#两个三行六列\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",[141,98296,98297,98302,98330,98360,98365,98382,98387,98392,98397,98414,98419,98424,98429,98442],{"__ignoreMap":30},[144,98298,98299],{"class":146,"line":147},[144,98300,98301],{"class":213},"#两个三行六列\n",[144,98303,98304,98306,98308,98310,98312,98314,98316,98318,98320,98322,98324,98326,98328],{"class":146,"line":66},[144,98305,95534],{"class":154},[144,98307,200],{"class":150},[144,98309,93015],{"class":154},[144,98311,372],{"class":203},[144,98313,533],{"class":154},[144,98315,480],{"class":203},[144,98317,93020],{"class":154},[144,98319,232],{"class":203},[144,98321,533],{"class":154},[144,98323,226],{"class":203},[144,98325,533],{"class":154},[144,98327,499],{"class":203},[144,98329,161],{"class":154},[144,98331,98332,98335,98337,98339,98341,98343,98346,98348,98350,98352,98354,98356,98358],{"class":146,"line":1210},[144,98333,98334],{"class":154},"bbb",[144,98336,200],{"class":150},[144,98338,93015],{"class":154},[144,98340,492],{"class":203},[144,98342,533],{"class":154},[144,98344,98345],{"class":203},"137",[144,98347,93020],{"class":154},[144,98349,232],{"class":203},[144,98351,533],{"class":154},[144,98353,226],{"class":203},[144,98355,533],{"class":154},[144,98357,499],{"class":203},[144,98359,161],{"class":154},[144,98361,98362],{"class":146,"line":1225},[144,98363,98364],{"class":213},"#axis=0\n",[144,98366,98367,98369,98371,98374,98376,98378,98380],{"class":146,"line":1231},[144,98368,850],{"class":154},[144,98370,200],{"class":150},[144,98372,98373],{"class":154},"np.concatenate((aaa,bbb),",[144,98375,47527],{"class":5247},[144,98377,200],{"class":150},[144,98379,346],{"class":203},[144,98381,161],{"class":154},[144,98383,98384],{"class":146,"line":1245},[144,98385,98386],{"class":154},"s.shape\n",[144,98388,98389],{"class":146,"line":1251},[144,98390,98391],{"class":213},"#输出：(4,3,6)\n",[144,98393,98394],{"class":146,"line":1342},[144,98395,98396],{"class":213},"#axis=1\n",[144,98398,98399,98402,98404,98406,98408,98410,98412],{"class":146,"line":1348},[144,98400,98401],{"class":154},"ss",[144,98403,200],{"class":150},[144,98405,98373],{"class":154},[144,98407,47527],{"class":5247},[144,98409,200],{"class":150},[144,98411,372],{"class":203},[144,98413,161],{"class":154},[144,98415,98416],{"class":146,"line":1360},[144,98417,98418],{"class":154},"ss.shape\n",[144,98420,98421],{"class":146,"line":1642},[144,98422,98423],{"class":213},"#输出：(2,6,6)\n",[144,98425,98426],{"class":146,"line":1647},[144,98427,98428],{"class":213},"#axis=2\n",[144,98430,98431,98433,98435,98437,98439],{"class":146,"line":1653},[144,98432,98373],{"class":154},[144,98434,47527],{"class":5247},[144,98436,200],{"class":150},[144,98438,232],{"class":203},[144,98440,98441],{"class":154},").shape\n",[144,98443,98444],{"class":146,"line":1658},[144,98445,98446],{"class":213},"#输出：（2，3，12）\n",[14,98448,98449],{},"⑤四维数组拼接",[135,98451,98453],{"className":30391,"code":98452,"language":30393,"meta":30,"style":30},"#两个三行六列\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",[141,98454,98455,98459,98487,98515,98540,98566,98570,98583,98588,98592,98604,98609,98613,98625,98630,98635,98647],{"__ignoreMap":30},[144,98456,98457],{"class":146,"line":147},[144,98458,98301],{"class":213},[144,98460,98461,98463,98465,98467,98469,98471,98473,98475,98477,98479,98481,98483,98485],{"class":146,"line":66},[144,98462,95534],{"class":154},[144,98464,200],{"class":150},[144,98466,93015],{"class":154},[144,98468,372],{"class":203},[144,98470,533],{"class":154},[144,98472,480],{"class":203},[144,98474,93020],{"class":154},[144,98476,232],{"class":203},[144,98478,533],{"class":154},[144,98480,226],{"class":203},[144,98482,533],{"class":154},[144,98484,499],{"class":203},[144,98486,161],{"class":154},[144,98488,98489,98491,98493,98495,98497,98499,98501,98503,98505,98507,98509,98511,98513],{"class":146,"line":1210},[144,98490,98334],{"class":154},[144,98492,200],{"class":150},[144,98494,93015],{"class":154},[144,98496,492],{"class":203},[144,98498,533],{"class":154},[144,98500,98345],{"class":203},[144,98502,93020],{"class":154},[144,98504,232],{"class":203},[144,98506,533],{"class":154},[144,98508,226],{"class":203},[144,98510,533],{"class":154},[144,98512,499],{"class":203},[144,98514,161],{"class":154},[144,98516,98517,98520,98522,98524,98526,98528,98530,98532,98534,98536,98538],{"class":146,"line":1225},[144,98518,98519],{"class":154},"aaaa",[144,98521,200],{"class":150},[144,98523,97683],{"class":154},[144,98525,232],{"class":203},[144,98527,533],{"class":154},[144,98529,226],{"class":203},[144,98531,533],{"class":154},[144,98533,226],{"class":203},[144,98535,533],{"class":154},[144,98537,232],{"class":203},[144,98539,161],{"class":154},[144,98541,98542,98545,98547,98550,98552,98554,98556,98558,98560,98562,98564],{"class":146,"line":1231},[144,98543,98544],{"class":154},"bbbb",[144,98546,200],{"class":150},[144,98548,98549],{"class":154},"bbb.reshape(",[144,98551,232],{"class":203},[144,98553,533],{"class":154},[144,98555,226],{"class":203},[144,98557,533],{"class":154},[144,98559,226],{"class":203},[144,98561,533],{"class":154},[144,98563,232],{"class":203},[144,98565,161],{"class":154},[144,98567,98568],{"class":146,"line":1245},[144,98569,98364],{"class":213},[144,98571,98572,98575,98577,98579,98581],{"class":146,"line":1251},[144,98573,98574],{"class":154},"np.concatenate((aaaa,bbbb),",[144,98576,47527],{"class":5247},[144,98578,200],{"class":150},[144,98580,346],{"class":203},[144,98582,98441],{"class":154},[144,98584,98585],{"class":146,"line":1342},[144,98586,98587],{"class":213},"#结果：（4，3，3，2）\n",[144,98589,98590],{"class":146,"line":1348},[144,98591,98396],{"class":213},[144,98593,98594,98596,98598,98600,98602],{"class":146,"line":1360},[144,98595,98574],{"class":154},[144,98597,47527],{"class":5247},[144,98599,200],{"class":150},[144,98601,372],{"class":203},[144,98603,98441],{"class":154},[144,98605,98606],{"class":146,"line":1642},[144,98607,98608],{"class":213},"#结果：（2，6，3，2）\n",[144,98610,98611],{"class":146,"line":1647},[144,98612,98428],{"class":213},[144,98614,98615,98617,98619,98621,98623],{"class":146,"line":1653},[144,98616,98574],{"class":154},[144,98618,47527],{"class":5247},[144,98620,200],{"class":150},[144,98622,232],{"class":203},[144,98624,98441],{"class":154},[144,98626,98627],{"class":146,"line":1658},[144,98628,98629],{"class":213},"#结果：（2，3，6，2）\n",[144,98631,98632],{"class":146,"line":1672},[144,98633,98634],{"class":213},"#axis=3\n",[144,98636,98637,98639,98641,98643,98645],{"class":146,"line":1677},[144,98638,98574],{"class":154},[144,98640,47527],{"class":5247},[144,98642,200],{"class":150},[144,98644,226],{"class":203},[144,98646,98441],{"class":154},[144,98648,98649],{"class":146,"line":1683},[144,98650,98651],{"class":213},"#结果：（2，3，3，4）\n",[18,98653,98655],{"id":98654},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,98657,98658],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,98660,98661],{},"①二维数组",[135,98663,98665],{"className":30391,"code":98664,"language":30393,"meta":30,"style":30},"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",[141,98666,98667,98691,98715,98720,98725],{"__ignoreMap":30},[144,98668,98669,98671,98673,98675,98677,98679,98681,98683,98685,98687,98689],{"class":146,"line":147},[144,98670,93319],{"class":154},[144,98672,200],{"class":150},[144,98674,93015],{"class":154},[144,98676,372],{"class":203},[144,98678,533],{"class":154},[144,98680,678],{"class":203},[144,98682,93020],{"class":154},[144,98684,226],{"class":203},[144,98686,533],{"class":154},[144,98688,448],{"class":203},[144,98690,161],{"class":154},[144,98692,98693,98695,98697,98699,98701,98703,98705,98707,98709,98711,98713],{"class":146,"line":66},[144,98694,98200],{"class":154},[144,98696,200],{"class":150},[144,98698,93015],{"class":154},[144,98700,492],{"class":203},[144,98702,533],{"class":154},[144,98704,797],{"class":203},[144,98706,93020],{"class":154},[144,98708,226],{"class":203},[144,98710,533],{"class":154},[144,98712,448],{"class":203},[144,98714,161],{"class":154},[144,98716,98717],{"class":146,"line":1210},[144,98718,98719],{"class":154},"np.hstack((aa,bb))\n",[144,98721,98722],{"class":146,"line":1225},[144,98723,98724],{"class":213},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[144,98726,98727],{"class":146,"line":1231},[144,98728,98729],{"class":213},"#np.hstack([aa,bb])\n",[14,98731,98246],{},[14,98733,98734],{},[28,98735],{"alt":30,"src":98736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,98738,98739],{},"等效于concatenate()函数中axis=1时的情况",[14,98741,98742],{},"②三维数组",[135,98744,98746],{"className":30391,"code":98745,"language":30393,"meta":30,"style":30},"#两个三行六列\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",[141,98747,98748,98752,98780,98808,98813,98818],{"__ignoreMap":30},[144,98749,98750],{"class":146,"line":147},[144,98751,98301],{"class":213},[144,98753,98754,98756,98758,98760,98762,98764,98766,98768,98770,98772,98774,98776,98778],{"class":146,"line":66},[144,98755,95534],{"class":154},[144,98757,200],{"class":150},[144,98759,93015],{"class":154},[144,98761,372],{"class":203},[144,98763,533],{"class":154},[144,98765,480],{"class":203},[144,98767,93020],{"class":154},[144,98769,232],{"class":203},[144,98771,533],{"class":154},[144,98773,226],{"class":203},[144,98775,533],{"class":154},[144,98777,499],{"class":203},[144,98779,161],{"class":154},[144,98781,98782,98784,98786,98788,98790,98792,98794,98796,98798,98800,98802,98804,98806],{"class":146,"line":1210},[144,98783,98334],{"class":154},[144,98785,200],{"class":150},[144,98787,93015],{"class":154},[144,98789,492],{"class":203},[144,98791,533],{"class":154},[144,98793,98345],{"class":203},[144,98795,93020],{"class":154},[144,98797,232],{"class":203},[144,98799,533],{"class":154},[144,98801,226],{"class":203},[144,98803,533],{"class":154},[144,98805,499],{"class":203},[144,98807,161],{"class":154},[144,98809,98810],{"class":146,"line":1225},[144,98811,98812],{"class":213},"#使用hstack\n",[144,98814,98815],{"class":146,"line":1231},[144,98816,98817],{"class":154},"np.hstack((aaa,bbb)).shape\n",[144,98819,98820],{"class":146,"line":1245},[144,98821,98822],{"class":213},"#输出：（2，6，6）\n",[18,98824,98826],{"id":98825},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,98828,98829],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,98831,98661],{},[135,98833,98835],{"className":30391,"code":98834,"language":30393,"meta":30,"style":30},"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",[141,98836,98837,98861,98885,98890,98895,98900],{"__ignoreMap":30},[144,98838,98839,98841,98843,98845,98847,98849,98851,98853,98855,98857,98859],{"class":146,"line":147},[144,98840,93319],{"class":154},[144,98842,200],{"class":150},[144,98844,93015],{"class":154},[144,98846,372],{"class":203},[144,98848,533],{"class":154},[144,98850,678],{"class":203},[144,98852,93020],{"class":154},[144,98854,226],{"class":203},[144,98856,533],{"class":154},[144,98858,448],{"class":203},[144,98860,161],{"class":154},[144,98862,98863,98865,98867,98869,98871,98873,98875,98877,98879,98881,98883],{"class":146,"line":66},[144,98864,98200],{"class":154},[144,98866,200],{"class":150},[144,98868,93015],{"class":154},[144,98870,492],{"class":203},[144,98872,533],{"class":154},[144,98874,797],{"class":203},[144,98876,93020],{"class":154},[144,98878,226],{"class":203},[144,98880,533],{"class":154},[144,98882,448],{"class":203},[144,98884,161],{"class":154},[144,98886,98887],{"class":146,"line":1210},[144,98888,98889],{"class":213},"#vstack 垂直方向进行堆叠\n",[144,98891,98892],{"class":146,"line":1225},[144,98893,98894],{"class":154},"np.vstack((aa,bb))\n",[144,98896,98897],{"class":146,"line":1231},[144,98898,98899],{"class":213},"#与hstack传的参数类似，等价于：\n",[144,98901,98902],{"class":146,"line":1245},[144,98903,98904],{"class":154},"np.vstack([aa,bb])\n",[14,98906,98246],{},[14,98908,98909],{},[28,98910],{"alt":30,"src":98911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,98913,98742],{},[135,98915,98917],{"className":30391,"code":98916,"language":30393,"meta":30,"style":30},"#两个三行六列\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",[141,98918,98919,98923,98951,98979,98984,98989],{"__ignoreMap":30},[144,98920,98921],{"class":146,"line":147},[144,98922,98301],{"class":213},[144,98924,98925,98927,98929,98931,98933,98935,98937,98939,98941,98943,98945,98947,98949],{"class":146,"line":66},[144,98926,95534],{"class":154},[144,98928,200],{"class":150},[144,98930,93015],{"class":154},[144,98932,372],{"class":203},[144,98934,533],{"class":154},[144,98936,480],{"class":203},[144,98938,93020],{"class":154},[144,98940,232],{"class":203},[144,98942,533],{"class":154},[144,98944,226],{"class":203},[144,98946,533],{"class":154},[144,98948,499],{"class":203},[144,98950,161],{"class":154},[144,98952,98953,98955,98957,98959,98961,98963,98965,98967,98969,98971,98973,98975,98977],{"class":146,"line":1210},[144,98954,98334],{"class":154},[144,98956,200],{"class":150},[144,98958,93015],{"class":154},[144,98960,492],{"class":203},[144,98962,533],{"class":154},[144,98964,98345],{"class":203},[144,98966,93020],{"class":154},[144,98968,232],{"class":203},[144,98970,533],{"class":154},[144,98972,226],{"class":203},[144,98974,533],{"class":154},[144,98976,499],{"class":203},[144,98978,161],{"class":154},[144,98980,98981],{"class":146,"line":1225},[144,98982,98983],{"class":213},"#使用vstack\n",[144,98985,98986],{"class":146,"line":1231},[144,98987,98988],{"class":154},"np.vstack((aaa,bbb)).shape\n",[144,98990,98991],{"class":146,"line":1245},[144,98992,98993],{"class":213},"#输出：（4，3，6）\n",[18,98995,98997],{"id":98996},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,98999,99000],{},"该方法是三维数组特有的方法",[14,99002,99003],{},"也就是说",[14,99005,99006],{},"一维数组拼接方法用：concatenate()",[14,99008,99009],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,99011,99012],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,99014,99015],{},"四维数组及多维数组只能用concatenate进行拼接",[135,99017,99019],{"className":30391,"code":99018,"language":30393,"meta":30,"style":30},"#两个三行六列\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",[141,99020,99021,99025,99053,99081,99086,99091],{"__ignoreMap":30},[144,99022,99023],{"class":146,"line":147},[144,99024,98301],{"class":213},[144,99026,99027,99029,99031,99033,99035,99037,99039,99041,99043,99045,99047,99049,99051],{"class":146,"line":66},[144,99028,95534],{"class":154},[144,99030,200],{"class":150},[144,99032,93015],{"class":154},[144,99034,372],{"class":203},[144,99036,533],{"class":154},[144,99038,480],{"class":203},[144,99040,93020],{"class":154},[144,99042,232],{"class":203},[144,99044,533],{"class":154},[144,99046,226],{"class":203},[144,99048,533],{"class":154},[144,99050,499],{"class":203},[144,99052,161],{"class":154},[144,99054,99055,99057,99059,99061,99063,99065,99067,99069,99071,99073,99075,99077,99079],{"class":146,"line":1210},[144,99056,98334],{"class":154},[144,99058,200],{"class":150},[144,99060,93015],{"class":154},[144,99062,492],{"class":203},[144,99064,533],{"class":154},[144,99066,98345],{"class":203},[144,99068,93020],{"class":154},[144,99070,232],{"class":203},[144,99072,533],{"class":154},[144,99074,226],{"class":203},[144,99076,533],{"class":154},[144,99078,499],{"class":203},[144,99080,161],{"class":154},[144,99082,99083],{"class":146,"line":1225},[144,99084,99085],{"class":213},"#使用dstack\n",[144,99087,99088],{"class":146,"line":1231},[144,99089,99090],{"class":154},"np.dstack((aaa,bbb)).shape\n",[144,99092,99093],{"class":146,"line":1245},[144,99094,99095],{"class":213},"#结果：（2，3，12）\n",[5157,99097,99098],{},"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":30,"searchDepth":66,"depth":66,"links":99100},[99101,99102,99103,99104],{"id":98040,"depth":66,"text":98041},{"id":98654,"depth":66,"text":98655},{"id":98825,"depth":66,"text":98826},{"id":98996,"depth":66,"text":98997},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98032,"description":23408},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99111,"title":99112,"body":99113,"description":23408,"extension":70,"meta":99388,"navigation":72,"path":99389,"seo":99390,"stem":99391,"__hash__":99392},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99114,"toc":99386},[99115,99118,99121,99215,99218,99221,99224,99227,99230,99233,99236,99239,99383],[10,99116,99112],{"id":99117},"_7数组转置",[14,99119,99120],{},"使用transpose()函数",[135,99122,99124],{"className":30391,"code":99123,"language":30393,"meta":30,"style":30},"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",[141,99125,99126,99136,99160,99165,99170,99175,99180,99188,99192,99196,99201,99206,99211],{"__ignoreMap":30},[144,99127,99128,99130,99132,99134],{"class":146,"line":147},[144,99129,30405],{"class":150},[144,99131,31393],{"class":154},[144,99133,31396],{"class":150},[144,99135,31399],{"class":154},[144,99137,99138,99140,99142,99144,99146,99148,99150,99152,99154,99156,99158],{"class":146,"line":66},[144,99139,393],{"class":154},[144,99141,200],{"class":150},[144,99143,31730],{"class":154},[144,99145,372],{"class":203},[144,99147,533],{"class":154},[144,99149,678],{"class":203},[144,99151,93020],{"class":154},[144,99153,448],{"class":203},[144,99155,533],{"class":154},[144,99157,226],{"class":203},[144,99159,161],{"class":154},[144,99161,99162],{"class":146,"line":1210},[144,99163,99164],{"class":213},"#二维数组转置\n",[144,99166,99167],{"class":146,"line":1225},[144,99168,99169],{"class":213},"#调用transpose()函数\n",[144,99171,99172],{"class":146,"line":1231},[144,99173,99174],{"class":154},"a.transpose()\n",[144,99176,99177],{"class":146,"line":1245},[144,99178,99179],{"class":213},"#对于二维数组也可以采用.T来实现\n",[144,99181,99182,99185],{"class":146,"line":1251},[144,99183,99184],{"class":154},"a.T",[144,99186,99187],{"class":213},"#与上述代码一样\n",[144,99189,99190],{"class":146,"line":1342},[144,99191,93577],{"class":213},[144,99193,99194],{"class":146,"line":1348},[144,99195,93941],{"class":259},[144,99197,99198],{"class":146,"line":1360},[144,99199,99200],{"class":259},"array([[ 1,  4,  7, 10],\n",[144,99202,99203],{"class":146,"line":1642},[144,99204,99205],{"class":259},"       [ 2,  5,  8, 11],\n",[144,99207,99208],{"class":146,"line":1647},[144,99209,99210],{"class":259},"       [ 3,  6,  9, 12]])\n",[144,99212,99213],{"class":146,"line":1653},[144,99214,93941],{"class":259},[14,99216,99217],{},"也可以使用np.transpose()的形式",[14,99219,99220],{},"#多维数组进行转置 np.transpose()",[14,99222,99223],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99225,99226],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99228,99229],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99231,99232],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99234,99235],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99237,99238],{},"四维及以上的数组也是一样的道理",[135,99240,99242],{"className":30391,"code":99241,"language":30393,"meta":30,"style":30},"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",[141,99243,99244,99272,99277,99282,99287,99305,99310,99342,99347,99352,99357,99378],{"__ignoreMap":30},[144,99245,99246,99248,99250,99252,99254,99256,99258,99260,99262,99264,99266,99268,99270],{"class":146,"line":147},[144,99247,975],{"class":154},[144,99249,200],{"class":150},[144,99251,93015],{"class":154},[144,99253,372],{"class":203},[144,99255,533],{"class":154},[144,99257,480],{"class":203},[144,99259,93020],{"class":154},[144,99261,226],{"class":203},[144,99263,533],{"class":154},[144,99265,499],{"class":203},[144,99267,533],{"class":154},[144,99269,232],{"class":203},[144,99271,161],{"class":154},[144,99273,99274],{"class":146,"line":66},[144,99275,99276],{"class":154},"x.shape\n",[144,99278,99279],{"class":146,"line":1210},[144,99280,99281],{"class":213},"#结果：（3,6,2）\n",[144,99283,99284],{"class":146,"line":1225},[144,99285,99286],{"class":213},"#使用np.transpose()进行转置 变为(2,6,3)\n",[144,99288,99289,99292,99294,99296,99298,99300,99302],{"class":146,"line":1231},[144,99290,99291],{"class":154},"np.transpose(x,(",[144,99293,232],{"class":203},[144,99295,533],{"class":154},[144,99297,372],{"class":203},[144,99299,533],{"class":154},[144,99301,346],{"class":203},[144,99303,99304],{"class":154},")).shape\n",[144,99306,99307],{"class":146,"line":1245},[144,99308,99309],{"class":213},"#结果：(2,6,3)\n",[144,99311,99312,99314,99316,99318,99320,99322,99324,99326,99328,99330,99332,99334,99336,99338,99340],{"class":146,"line":1251},[144,99313,98519],{"class":154},[144,99315,200],{"class":150},[144,99317,93015],{"class":154},[144,99319,372],{"class":203},[144,99321,533],{"class":154},[144,99323,480],{"class":203},[144,99325,93020],{"class":154},[144,99327,226],{"class":203},[144,99329,533],{"class":154},[144,99331,232],{"class":203},[144,99333,533],{"class":154},[144,99335,372],{"class":203},[144,99337,533],{"class":154},[144,99339,499],{"class":203},[144,99341,161],{"class":154},[144,99343,99344],{"class":146,"line":1342},[144,99345,99346],{"class":154},"aaaa.shape\n",[144,99348,99349],{"class":146,"line":1348},[144,99350,99351],{"class":213},"#结果：（3，2，1，6）\n",[144,99353,99354],{"class":146,"line":1360},[144,99355,99356],{"class":213},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[144,99358,99359,99362,99364,99366,99368,99370,99372,99374,99376],{"class":146,"line":1642},[144,99360,99361],{"class":154},"np.transpose(aaaa,(",[144,99363,372],{"class":203},[144,99365,533],{"class":154},[144,99367,232],{"class":203},[144,99369,533],{"class":154},[144,99371,346],{"class":203},[144,99373,533],{"class":154},[144,99375,226],{"class":203},[144,99377,99304],{"class":154},[144,99379,99380],{"class":146,"line":1647},[144,99381,99382],{"class":213},"#结果：(2,1,3,6)\n",[5157,99384,99385],{},"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":30,"searchDepth":66,"depth":66,"links":99387},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99112,"description":23408},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99394,"title":99395,"body":99396,"description":23408,"extension":70,"meta":100130,"navigation":72,"path":100131,"seo":100132,"stem":100133,"__hash__":100134},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99397,"toc":100128},[99398,99401,99404,99407,99410,99413,99416,99419,99422,99531,99534,99537,100125],[10,99399,99395],{"id":99400},"_8数组分割",[14,99402,99403],{},"split分割",[14,99405,99406],{},"numpy.split(ary,indics_or_sections,axis)",[14,99408,99409],{},"解释：",[14,99411,99412],{},"ary:被分割的数组",[14,99414,99415],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,99417,99418],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,99420,99421],{},"①一维数组的分割",[135,99423,99425],{"className":30391,"code":99424,"language":30393,"meta":30,"style":30},"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",[141,99426,99427,99443,99448,99457,99461,99466,99474,99478,99483,99488,99501,99505,99510,99522,99526],{"__ignoreMap":30},[144,99428,99429,99431,99433,99435,99437,99439,99441],{"class":146,"line":147},[144,99430,393],{"class":154},[144,99432,200],{"class":150},[144,99434,93015],{"class":154},[144,99436,372],{"class":203},[144,99438,533],{"class":154},[144,99440,575],{"class":203},[144,99442,161],{"class":154},[144,99444,99445],{"class":146,"line":66},[144,99446,99447],{"class":213},"#如果传入整数，必须能够平分，否则会报错\n",[144,99449,99450,99453,99455],{"class":146,"line":1210},[144,99451,99452],{"class":154},"np.split(a,",[144,99454,232],{"class":203},[144,99456,161],{"class":154},[144,99458,99459],{"class":146,"line":1225},[144,99460,93577],{"class":213},[144,99462,99463],{"class":146,"line":1231},[144,99464,99465],{"class":213},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[144,99467,99468,99470,99472],{"class":146,"line":1245},[144,99469,99452],{"class":154},[144,99471,448],{"class":203},[144,99473,161],{"class":154},[144,99475,99476],{"class":146,"line":1251},[144,99477,93577],{"class":213},[144,99479,99480],{"class":146,"line":1342},[144,99481,99482],{"class":213},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[144,99484,99485],{"class":146,"line":1348},[144,99486,99487],{"class":213},"#传入数组\n",[144,99489,99490,99493,99495,99497,99499],{"class":146,"line":1360},[144,99491,99492],{"class":154},"np.split(a,[",[144,99494,226],{"class":203},[144,99496,533],{"class":154},[144,99498,474],{"class":203},[144,99500,4687],{"class":154},[144,99502,99503],{"class":146,"line":1642},[144,99504,93577],{"class":213},[144,99506,99507],{"class":146,"line":1647},[144,99508,99509],{"class":213},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[144,99511,99512,99514,99516,99518,99520],{"class":146,"line":1653},[144,99513,99492],{"class":154},[144,99515,474],{"class":203},[144,99517,533],{"class":154},[144,99519,524],{"class":203},[144,99521,4687],{"class":154},[144,99523,99524],{"class":146,"line":1658},[144,99525,93577],{"class":213},[144,99527,99528],{"class":146,"line":1672},[144,99529,99530],{"class":213},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,99532,99533],{},"②二维数组的分割",[14,99535,99536],{},"使用split()",[135,99538,99540],{"className":30391,"code":99539,"language":30393,"meta":30,"style":30},"#二维数组分割\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",[141,99541,99542,99547,99571,99576,99585,99589,99593,99598,99603,99608,99613,99618,99623,99628,99632,99645,99649,99653,99657,99661,99665,99670,99675,99680,99684,99689,99705,99709,99713,99718,99723,99728,99733,99738,99743,99748,99753,99758,99763,99768,99773,99778,99783,99788,99793,99798,99803,99807,99811,99831,99835,99839,99844,99849,99854,99859,99864,99869,99874,99879,99884,99889,99894,99899,99904,99909,99914,99919,99924,99929,99933,99938,99947,99951,99955,99959,99963,99967,99971,99975,99979,99983,99992,99996,100000,100004,100008,100012,100016,100020,100024,100028,100032,100036,100040,100044,100048,100052,100056,100060,100064,100068,100072,100076,100089,100093,100097,100101,100105,100109,100113,100117,100121],{"__ignoreMap":30},[144,99543,99544],{"class":146,"line":147},[144,99545,99546],{"class":213},"#二维数组分割\n",[144,99548,99549,99551,99553,99555,99557,99559,99561,99563,99565,99567,99569],{"class":146,"line":66},[144,99550,93319],{"class":154},[144,99552,200],{"class":150},[144,99554,93015],{"class":154},[144,99556,372],{"class":203},[144,99558,533],{"class":154},[144,99560,480],{"class":203},[144,99562,93020],{"class":154},[144,99564,499],{"class":203},[144,99566,533],{"class":154},[144,99568,499],{"class":203},[144,99570,161],{"class":154},[144,99572,99573],{"class":146,"line":1210},[144,99574,99575],{"class":213},"#默认axis=0  传入整数平均分,按行来的\n",[144,99577,99578,99581,99583],{"class":146,"line":1225},[144,99579,99580],{"class":154},"np.split(aa,",[144,99582,226],{"class":203},[144,99584,161],{"class":154},[144,99586,99587],{"class":146,"line":1231},[144,99588,95777],{"class":213},[144,99590,99591],{"class":146,"line":1245},[144,99592,93941],{"class":259},[144,99594,99595],{"class":146,"line":1251},[144,99596,99597],{"class":259},"[array([[ 1,  2,  3,  4,  5,  6],\n",[144,99599,99600],{"class":146,"line":1342},[144,99601,99602],{"class":259},"        [ 7,  8,  9, 10, 11, 12]]),\n",[144,99604,99605],{"class":146,"line":1348},[144,99606,99607],{"class":259}," array([[13, 14, 15, 16, 17, 18],\n",[144,99609,99610],{"class":146,"line":1360},[144,99611,99612],{"class":259},"        [19, 20, 21, 22, 23, 24]]),\n",[144,99614,99615],{"class":146,"line":1642},[144,99616,99617],{"class":259}," array([[25, 26, 27, 28, 29, 30],\n",[144,99619,99620],{"class":146,"line":1647},[144,99621,99622],{"class":259},"        [31, 32, 33, 34, 35, 36]])]\n",[144,99624,99625],{"class":146,"line":1653},[144,99626,99627],{"class":259}," '''\n",[144,99629,99630],{"class":146,"line":1658},[144,99631,99487],{"class":213},[144,99633,99634,99637,99639,99641,99643],{"class":146,"line":1672},[144,99635,99636],{"class":154},"np.split(aa,[",[144,99638,232],{"class":203},[144,99640,533],{"class":154},[144,99642,474],{"class":203},[144,99644,4687],{"class":154},[144,99646,99647],{"class":146,"line":1677},[144,99648,95777],{"class":213},[144,99650,99651],{"class":146,"line":1683},[144,99652,93941],{"class":259},[144,99654,99655],{"class":146,"line":1704},[144,99656,99597],{"class":259},[144,99658,99659],{"class":146,"line":1709},[144,99660,99602],{"class":259},[144,99662,99663],{"class":146,"line":1723},[144,99664,99607],{"class":259},[144,99666,99667],{"class":146,"line":1728},[144,99668,99669],{"class":259},"        [19, 20, 21, 22, 23, 24],\n",[144,99671,99672],{"class":146,"line":1757},[144,99673,99674],{"class":259},"        [25, 26, 27, 28, 29, 30]]),\n",[144,99676,99677],{"class":146,"line":1762},[144,99678,99679],{"class":259}," array([[31, 32, 33, 34, 35, 36]])]\n",[144,99681,99682],{"class":146,"line":1779},[144,99683,93941],{"class":259},[144,99685,99686],{"class":146,"line":1784},[144,99687,99688],{"class":213},"#axis=1 按照列来分\n",[144,99690,99691,99693,99695,99697,99699,99701,99703],{"class":146,"line":1789},[144,99692,99580],{"class":154},[144,99694,226],{"class":203},[144,99696,533],{"class":154},[144,99698,47527],{"class":5247},[144,99700,200],{"class":150},[144,99702,372],{"class":203},[144,99704,161],{"class":154},[144,99706,99707],{"class":146,"line":1794},[144,99708,95777],{"class":213},[144,99710,99711],{"class":146,"line":1808},[144,99712,93941],{"class":259},[144,99714,99715],{"class":146,"line":1813},[144,99716,99717],{"class":259},"[array([[ 1,  2],\n",[144,99719,99720],{"class":146,"line":2607},[144,99721,99722],{"class":259},"        [ 7,  8],\n",[144,99724,99725],{"class":146,"line":2621},[144,99726,99727],{"class":259},"        [13, 14],\n",[144,99729,99730],{"class":146,"line":2629},[144,99731,99732],{"class":259},"        [19, 20],\n",[144,99734,99735],{"class":146,"line":2634},[144,99736,99737],{"class":259},"        [25, 26],\n",[144,99739,99740],{"class":146,"line":2640},[144,99741,99742],{"class":259},"        [31, 32]]),\n",[144,99744,99745],{"class":146,"line":2646},[144,99746,99747],{"class":259}," array([[ 3,  4],\n",[144,99749,99750],{"class":146,"line":2651},[144,99751,99752],{"class":259},"        [ 9, 10],\n",[144,99754,99755],{"class":146,"line":7979},[144,99756,99757],{"class":259},"        [15, 16],\n",[144,99759,99760],{"class":146,"line":8003},[144,99761,99762],{"class":259},"        [21, 22],\n",[144,99764,99765],{"class":146,"line":8008},[144,99766,99767],{"class":259},"        [27, 28],\n",[144,99769,99770],{"class":146,"line":8014},[144,99771,99772],{"class":259},"        [33, 34]]),\n",[144,99774,99775],{"class":146,"line":8041},[144,99776,99777],{"class":259}," array([[ 5,  6],\n",[144,99779,99780],{"class":146,"line":8046},[144,99781,99782],{"class":259},"        [11, 12],\n",[144,99784,99785],{"class":146,"line":8052},[144,99786,99787],{"class":259},"        [17, 18],\n",[144,99789,99790],{"class":146,"line":8064},[144,99791,99792],{"class":259},"        [23, 24],\n",[144,99794,99795],{"class":146,"line":8076},[144,99796,99797],{"class":259},"        [29, 30],\n",[144,99799,99800],{"class":146,"line":8088},[144,99801,99802],{"class":259},"        [35, 36]])]\n",[144,99804,99805],{"class":146,"line":9747},[144,99806,99627],{"class":259},[144,99808,99809],{"class":146,"line":9772},[144,99810,99487],{"class":213},[144,99812,99813,99815,99817,99819,99821,99823,99825,99827,99829],{"class":146,"line":9795},[144,99814,99636],{"class":154},[144,99816,372],{"class":203},[144,99818,533],{"class":154},[144,99820,232],{"class":203},[144,99822,41622],{"class":154},[144,99824,47527],{"class":5247},[144,99826,200],{"class":150},[144,99828,372],{"class":203},[144,99830,161],{"class":154},[144,99832,99833],{"class":146,"line":9819},[144,99834,93577],{"class":213},[144,99836,99837],{"class":146,"line":9824},[144,99838,93941],{"class":259},[144,99840,99841],{"class":146,"line":9829},[144,99842,99843],{"class":259},"[array([[ 1],\n",[144,99845,99846],{"class":146,"line":9834},[144,99847,99848],{"class":259},"        [ 7],\n",[144,99850,99851],{"class":146,"line":9843},[144,99852,99853],{"class":259},"        [13],\n",[144,99855,99856],{"class":146,"line":9848},[144,99857,99858],{"class":259},"        [19],\n",[144,99860,99861],{"class":146,"line":9854},[144,99862,99863],{"class":259},"        [25],\n",[144,99865,99866],{"class":146,"line":9875},[144,99867,99868],{"class":259},"        [31]]),\n",[144,99870,99871],{"class":146,"line":9881},[144,99872,99873],{"class":259}," array([[ 2],\n",[144,99875,99876],{"class":146,"line":9895},[144,99877,99878],{"class":259},"        [ 8],\n",[144,99880,99881],{"class":146,"line":9901},[144,99882,99883],{"class":259},"        [14],\n",[144,99885,99886],{"class":146,"line":9928},[144,99887,99888],{"class":259},"        [20],\n",[144,99890,99891],{"class":146,"line":9937},[144,99892,99893],{"class":259},"        [26],\n",[144,99895,99896],{"class":146,"line":9943},[144,99897,99898],{"class":259},"        [32]]),\n",[144,99900,99901],{"class":146,"line":9951},[144,99902,99903],{"class":259}," array([[ 3,  4,  5,  6],\n",[144,99905,99906],{"class":146,"line":9956},[144,99907,99908],{"class":259},"        [ 9, 10, 11, 12],\n",[144,99910,99911],{"class":146,"line":16635},[144,99912,99913],{"class":259},"        [15, 16, 17, 18],\n",[144,99915,99916],{"class":146,"line":16641},[144,99917,99918],{"class":259},"        [21, 22, 23, 24],\n",[144,99920,99921],{"class":146,"line":16664},[144,99922,99923],{"class":259},"        [27, 28, 29, 30],\n",[144,99925,99926],{"class":146,"line":16670},[144,99927,99928],{"class":259},"        [33, 34, 35, 36]])]\n",[144,99930,99931],{"class":146,"line":16693},[144,99932,93941],{"class":259},[144,99934,99935],{"class":146,"line":16707},[144,99936,99937],{"class":213},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[144,99939,99940,99943,99945],{"class":146,"line":16727},[144,99941,99942],{"class":154},"np.vsplit(aa,",[144,99944,226],{"class":203},[144,99946,161],{"class":154},[144,99948,99949],{"class":146,"line":16733},[144,99950,93577],{"class":213},[144,99952,99953],{"class":146,"line":16744},[144,99954,93941],{"class":259},[144,99956,99957],{"class":146,"line":16767},[144,99958,99597],{"class":259},[144,99960,99961],{"class":146,"line":16789},[144,99962,99602],{"class":259},[144,99964,99965],{"class":146,"line":16794},[144,99966,99607],{"class":259},[144,99968,99969],{"class":146,"line":16800},[144,99970,99612],{"class":259},[144,99972,99973],{"class":146,"line":16814},[144,99974,99617],{"class":259},[144,99976,99977],{"class":146,"line":16827},[144,99978,99622],{"class":259},[144,99980,99981],{"class":146,"line":16832},[144,99982,93941],{"class":259},[144,99984,99985,99988,99990],{"class":146,"line":16846},[144,99986,99987],{"class":154},"np.hsplit(aa,",[144,99989,226],{"class":203},[144,99991,161],{"class":154},[144,99993,99994],{"class":146,"line":16851},[144,99995,93577],{"class":213},[144,99997,99998],{"class":146,"line":16857},[144,99999,93941],{"class":259},[144,100001,100002],{"class":146,"line":16862},[144,100003,99717],{"class":259},[144,100005,100006],{"class":146,"line":16876},[144,100007,99722],{"class":259},[144,100009,100010],{"class":146,"line":16881},[144,100011,99727],{"class":259},[144,100013,100014],{"class":146,"line":16886},[144,100015,99732],{"class":259},[144,100017,100018],{"class":146,"line":16900},[144,100019,99737],{"class":259},[144,100021,100022],{"class":146,"line":16912},[144,100023,99742],{"class":259},[144,100025,100026],{"class":146,"line":16917},[144,100027,99747],{"class":259},[144,100029,100030],{"class":146,"line":16930},[144,100031,99752],{"class":259},[144,100033,100034],{"class":146,"line":16935},[144,100035,99757],{"class":259},[144,100037,100038],{"class":146,"line":16940},[144,100039,99762],{"class":259},[144,100041,100042],{"class":146,"line":16945},[144,100043,99767],{"class":259},[144,100045,100046],{"class":146,"line":16958},[144,100047,99772],{"class":259},[144,100049,100050],{"class":146,"line":16963},[144,100051,99777],{"class":259},[144,100053,100054],{"class":146,"line":32646},[144,100055,99782],{"class":259},[144,100057,100058],{"class":146,"line":32652},[144,100059,99787],{"class":259},[144,100061,100062],{"class":146,"line":32658},[144,100063,99792],{"class":259},[144,100065,100066],{"class":146,"line":32664},[144,100067,99797],{"class":259},[144,100069,100070],{"class":146,"line":32670},[144,100071,99802],{"class":259},[144,100073,100074],{"class":146,"line":32681},[144,100075,93941],{"class":259},[144,100077,100078,100081,100083,100085,100087],{"class":146,"line":32687},[144,100079,100080],{"class":154},"np.vsplit(aa,[",[144,100082,232],{"class":203},[144,100084,533],{"class":154},[144,100086,474],{"class":203},[144,100088,4687],{"class":154},[144,100090,100091],{"class":146,"line":32707},[144,100092,93577],{"class":213},[144,100094,100095],{"class":146,"line":32713},[144,100096,93941],{"class":259},[144,100098,100099],{"class":146,"line":32724},[144,100100,99597],{"class":259},[144,100102,100103],{"class":146,"line":32730},[144,100104,99602],{"class":259},[144,100106,100107],{"class":146,"line":32736},[144,100108,99607],{"class":259},[144,100110,100111],{"class":146,"line":32742},[144,100112,99669],{"class":259},[144,100114,100115],{"class":146,"line":32748},[144,100116,99674],{"class":259},[144,100118,100119],{"class":146,"line":32754},[144,100120,99679],{"class":259},[144,100122,100123],{"class":146,"line":32760},[144,100124,99627],{"class":259},[5157,100126,100127],{},"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":30,"searchDepth":66,"depth":66,"links":100129},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99395,"description":23408},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100136,"title":100137,"body":100138,"description":23408,"extension":70,"meta":100632,"navigation":72,"path":100633,"seo":100634,"stem":100635,"__hash__":100636},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100139,"toc":100623},[100140,100143,100146,100171,100175,100234,100286,100290,100292,100328,100382,100384,100422,100493,100497,100502,100506,100509,100542,100545,100549,100552,100555,100558,100561,100566,100570,100573,100576,100579,100582,100587,100591,100596,100599,100620],[10,100141,100137],{"id":100142},"_9数学函数",[14,100144,100145],{},"补充回顾：python的列表推导式",[135,100147,100149],{"className":30391,"code":100148,"language":30393,"meta":30,"style":30},"[1\u002Fi for i in a]\n",[141,100150,100151],{"__ignoreMap":30},[144,100152,100153,100155,100157,100159,100162,100164,100166,100168],{"class":146,"line":147},[144,100154,1045],{"class":154},[144,100156,372],{"class":203},[144,100158,739],{"class":150},[144,100160,100161],{"class":154},"i ",[144,100163,3055],{"class":150},[144,100165,9469],{"class":154},[144,100167,26056],{"class":150},[144,100169,100170],{"class":154}," a]\n",[18,100172,100174],{"id":100173},"_91-求倒数","9.1 求倒数",[135,100176,100178],{"className":30391,"code":100177,"language":30393,"meta":30,"style":30},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[141,100179,100180,100185,100213,100225],{"__ignoreMap":30},[144,100181,100182],{"class":146,"line":147},[144,100183,100184],{"class":213},"#数组求倒数\n",[144,100186,100187,100189,100191,100193,100195,100197,100199,100201,100203,100205,100207,100209,100211],{"class":146,"line":66},[144,100188,393],{"class":154},[144,100190,200],{"class":150},[144,100192,1045],{"class":154},[144,100194,372],{"class":203},[144,100196,533],{"class":154},[144,100198,232],{"class":203},[144,100200,533],{"class":154},[144,100202,226],{"class":203},[144,100204,533],{"class":154},[144,100206,448],{"class":203},[144,100208,533],{"class":154},[144,100210,474],{"class":203},[144,100212,33259],{"class":154},[144,100214,100215,100217,100219,100222],{"class":146,"line":1210},[144,100216,418],{"class":154},[144,100218,200],{"class":150},[144,100220,100221],{"class":154},"np.array(a)",[144,100223,100224],{"class":213},"#将列表转换为数组\n",[144,100226,100227,100229,100231],{"class":146,"line":1225},[144,100228,372],{"class":203},[144,100230,739],{"class":150},[144,100232,100233],{"class":154},"b\n",[135,100235,100237],{"className":30391,"code":100236,"language":30393,"meta":30,"style":30},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[141,100238,100239,100267,100276,100281],{"__ignoreMap":30},[144,100240,100241,100243,100245,100247,100249,100251,100253,100255,100257,100259,100261,100263,100265],{"class":146,"line":147},[144,100242,393],{"class":154},[144,100244,200],{"class":150},[144,100246,1045],{"class":154},[144,100248,372],{"class":203},[144,100250,533],{"class":154},[144,100252,232],{"class":203},[144,100254,533],{"class":154},[144,100256,226],{"class":203},[144,100258,533],{"class":154},[144,100260,448],{"class":203},[144,100262,533],{"class":154},[144,100264,474],{"class":203},[144,100266,33259],{"class":154},[144,100268,100269,100271,100273],{"class":146,"line":66},[144,100270,418],{"class":154},[144,100272,200],{"class":150},[144,100274,100275],{"class":154},"np.array(a)\n",[144,100277,100278],{"class":146,"line":1210},[144,100279,100280],{"class":213},"#调用numpy中的函数reciprocal()\n",[144,100282,100283],{"class":146,"line":1225},[144,100284,100285],{"class":154},"np.reciprocal(b)\n",[18,100287,100289],{"id":100288},"_92-求平方","9.2 求平方",[14,100291,94543],{},[135,100293,100295],{"className":30391,"code":100294,"language":30393,"meta":30,"style":30},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[141,100296,100297,100302,100307,100323],{"__ignoreMap":30},[144,100298,100299],{"class":146,"line":147},[144,100300,100301],{"class":213},"#square()，求平方\n",[144,100303,100304],{"class":146,"line":66},[144,100305,100306],{"class":213},"#一维数组\n",[144,100308,100309,100311,100313,100315,100317,100319,100321],{"class":146,"line":1210},[144,100310,393],{"class":154},[144,100312,200],{"class":150},[144,100314,93015],{"class":154},[144,100316,372],{"class":203},[144,100318,533],{"class":154},[144,100320,601],{"class":203},[144,100322,161],{"class":154},[144,100324,100325],{"class":146,"line":1225},[144,100326,100327],{"class":154},"np.square(a)\n",[135,100329,100331],{"className":30391,"code":100330,"language":30393,"meta":30,"style":30},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[141,100332,100333,100338,100343,100364],{"__ignoreMap":30},[144,100334,100335],{"class":146,"line":147},[144,100336,100337],{"class":213},"#或者通过循环遍历的形式来计算\n",[144,100339,100340],{"class":146,"line":66},[144,100341,100342],{"class":213},"#这是一个列表\n",[144,100344,100345,100348,100350,100352,100354,100356,100358,100361],{"class":146,"line":1210},[144,100346,100347],{"class":154},"[i",[144,100349,610],{"class":150},[144,100351,100161],{"class":154},[144,100353,3055],{"class":150},[144,100355,9469],{"class":154},[144,100357,26056],{"class":150},[144,100359,100360],{"class":154}," a]",[144,100362,100363],{"class":213},"#这个求完之后在数列当中\n",[144,100365,100366,100369,100371,100373,100375,100377,100379],{"class":146,"line":1225},[144,100367,100368],{"class":154},"np.array([i",[144,100370,610],{"class":150},[144,100372,100161],{"class":154},[144,100374,3055],{"class":150},[144,100376,9469],{"class":154},[144,100378,26056],{"class":150},[144,100380,100381],{"class":154}," a])\n",[14,100383,93304],{},[135,100385,100387],{"className":30391,"code":100386,"language":30393,"meta":30,"style":30},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[141,100388,100389,100393,100417],{"__ignoreMap":30},[144,100390,100391],{"class":146,"line":147},[144,100392,93314],{"class":213},[144,100394,100395,100397,100399,100401,100403,100405,100407,100409,100411,100413,100415],{"class":146,"line":66},[144,100396,93319],{"class":154},[144,100398,200],{"class":150},[144,100400,93015],{"class":154},[144,100402,372],{"class":203},[144,100404,533],{"class":154},[144,100406,678],{"class":203},[144,100408,93020],{"class":154},[144,100410,448],{"class":203},[144,100412,533],{"class":154},[144,100414,226],{"class":203},[144,100416,161],{"class":154},[144,100418,100419],{"class":146,"line":1210},[144,100420,100421],{"class":154},"np.square(aa)\n",[135,100423,100425],{"className":30391,"code":100424,"language":30393,"meta":30,"style":30},"#传统的方式\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",[141,100426,100427,100432,100441,100457,100473,100488],{"__ignoreMap":30},[144,100428,100429],{"class":146,"line":147},[144,100430,100431],{"class":213},"#传统的方式\n",[144,100433,100434,100436,100438],{"class":146,"line":66},[144,100435,98200],{"class":154},[144,100437,200],{"class":150},[144,100439,100440],{"class":154},"np.empty_like(aa)\n",[144,100442,100443,100445,100447,100449,100451,100453,100455],{"class":146,"line":1210},[144,100444,3055],{"class":150},[144,100446,9469],{"class":154},[144,100448,26056],{"class":150},[144,100450,32456],{"class":203},[144,100452,155],{"class":154},[144,100454,448],{"class":203},[144,100456,30799],{"class":154},[144,100458,100459,100461,100463,100465,100467,100469,100471],{"class":146,"line":1225},[144,100460,3231],{"class":150},[144,100462,9531],{"class":154},[144,100464,26056],{"class":150},[144,100466,32456],{"class":203},[144,100468,155],{"class":154},[144,100470,226],{"class":203},[144,100472,30799],{"class":154},[144,100474,100475,100478,100480,100483,100485],{"class":146,"line":1231},[144,100476,100477],{"class":154},"        bb[i,j]",[144,100479,200],{"class":150},[144,100481,100482],{"class":154},"aa[i,j]",[144,100484,610],{"class":150},[144,100486,100487],{"class":154},"aa[i,j]\n",[144,100489,100490],{"class":146,"line":1245},[144,100491,100492],{"class":154},"bb\n",[18,100494,100496],{"id":100495},"_93-求各元素的符号","9.3 求各元素的符号",[14,100498,100499],{},[28,100500],{"alt":30,"src":100501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[18,100503,100505],{"id":100504},"_94-modf函数","9.4 modf函数",[14,100507,100508],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[135,100510,100512],{"className":30391,"code":100511,"language":30393,"meta":30,"style":30},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[141,100513,100514,100537],{"__ignoreMap":30},[144,100515,100516,100518,100520,100522,100524,100526,100528,100530,100532,100535],{"class":146,"line":147},[144,100517,393],{"class":154},[144,100519,200],{"class":150},[144,100521,93015],{"class":154},[144,100523,687],{"class":150},[144,100525,601],{"class":203},[144,100527,533],{"class":154},[144,100529,601],{"class":203},[144,100531,533],{"class":154},[144,100533,100534],{"class":203},"0.3",[144,100536,161],{"class":154},[144,100538,100539],{"class":146,"line":66},[144,100540,100541],{"class":154},"np.modf(a)\n",[14,100543,100544],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[18,100546,100548],{"id":100547},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,100550,100551],{},"np.cell()",[14,100553,100554],{},"np.floor()",[14,100556,100557],{},"np.rint()",[14,100559,100560],{},"对各元素分别向上取整、向下取整、四舍五入",[14,100562,100563],{},[28,100564],{"alt":30,"src":100565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[18,100567,100569],{"id":100568},"_96-around函数","9.6 around()函数",[14,100571,100572],{},"around()函数也可以实现对数的小数位数进行操作",[14,100574,100575],{},"其中的参数：",[14,100577,100578],{},"1.要传的数组",[14,100580,100581],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,100583,100584],{},[28,100585],{"alt":30,"src":100586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[18,100588,100590],{"id":100589},"_97-三角函数","9.7 三角函数",[14,100592,100593],{},[28,100594],{"alt":30,"src":100595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,100597,100598],{},"引入图像模块非常重要",[135,100600,100602],{"className":30391,"code":100601,"language":30393,"meta":30,"style":30},"from matplotlib import pyplot as plt\n",[141,100603,100604],{"__ignoreMap":30},[144,100605,100606,100608,100611,100613,100616,100618],{"class":146,"line":147},[144,100607,30750],{"class":150},[144,100609,100610],{"class":154}," matplotlib ",[144,100612,30405],{"class":150},[144,100614,100615],{"class":154}," pyplot ",[144,100617,31396],{"class":150},[144,100619,31450],{"class":154},[5157,100621,100622],{},"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":30,"searchDepth":66,"depth":66,"links":100624},[100625,100626,100627,100628,100629,100630,100631],{"id":100173,"depth":66,"text":100174},{"id":100288,"depth":66,"text":100289},{"id":100495,"depth":66,"text":100496},{"id":100504,"depth":66,"text":100505},{"id":100547,"depth":66,"text":100548},{"id":100568,"depth":66,"text":100569},{"id":100589,"depth":66,"text":100590},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100137,"description":23408},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100638,"title":100639,"body":100640,"description":23408,"extension":70,"meta":100644,"navigation":72,"path":100645,"seo":100646,"stem":100647,"__hash__":100648},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100641,"toc":100642},[],{"title":30,"searchDepth":66,"depth":66,"links":100643},[],{"category":50433},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100639,"description":23408},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100650,"title":100651,"body":100652,"description":30,"extension":70,"meta":102660,"navigation":72,"path":102661,"seo":102662,"stem":102663,"__hash__":102664},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100653,"toc":102636},[100654,100657,100661,100664,100667,100673,100676,100699,100702,100736,100739,100780,100784,100787,100880,100883,100927,100930,100947,100950,100964,100967,100970,101015,101018,101055,101059,101062,101068,101073,101093,101097,101100,101166,101169,101187,101191,101194,101223,101233,101239,101243,101246,101252,101263,101267,101270,101300,101303,101583,101586,101589,101600,101603,101606,101628,101635,101638,101656,101659,101662,101676,101684,101687,101713,101719,101722,101725,101735,101747,101767,101776,101796,101806,101830,101843,101857,101862,101903,101920,101945,101957,101977,101983,102028,102047,102064,102077,102093,102100,102112,102121,102156,102177,102202,102215,102239,102254,102279,102282,102303,102312,102315,102326,102330,102333,102339,102351,102358,102362,102365,102377,102380,102394,102397,102407,102417,102420,102460,102463,102467,102473,102476,102490,102494,102497,102530,102534,102537,102560,102568,102571,102577,102583,102586,102589,102617,102621,102624,102630,102633],[10,100655,100651],{"id":100656},"_1环境安装与第一个-mujoco-程序",[18,100658,100660],{"id":100659},"_1目标说明","1.目标说明",[14,100662,100663],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,100665,100666],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[135,100668,100671],{"className":100669,"code":100670,"language":5218,"meta":30},[5216],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[141,100672,100670],{"__ignoreMap":30},[14,100674,100675],{},"需要掌握:",[98,100677,100678,100681,100684,100689,100694],{},[101,100679,100680],{},"Fedora 44 下 MuJoCo 的系统依赖",[101,100682,100683],{},"Python 虚拟环境创建",[101,100685,100686],{},[141,100687,100688],{},"mujoco.MjModel",[101,100690,100691],{},[141,100692,100693],{},"mujoco.MjData",[101,100695,100696],{},[141,100697,100698],{},"mujoco.mj_step(model, data)",[14,100700,100701],{},"MuJoCo 中最重要的两个对象:",[292,100703,100704,100714],{},[295,100705,100706],{},[298,100707,100708,100711],{},[301,100709,100710],{"align":23768},"对象",[301,100712,100713],{"align":23768},"含义",[339,100715,100716,100726],{},[298,100717,100718,100723],{},[344,100719,100720],{"align":23768},[141,100721,100722],{},"MjModel",[344,100724,100725],{"align":23768},"模型结构，来自 XML，基本不随时间变化",[298,100727,100728,100733],{},[344,100729,100730],{"align":23768},[141,100731,100732],{},"MjData",[344,100734,100735],{"align":23768},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,100737,100738],{},"可以先用一个类比理解：",[292,100740,100741,100751],{},[295,100742,100743],{},[298,100744,100745,100748],{},[301,100746,100747],{"align":23768},"类比",[301,100749,100750],{"align":23768},"MuJoCo 对象",[339,100752,100753,100762,100771],{},[298,100754,100755,100758],{},[344,100756,100757],{"align":23768},"游戏地图和角色配置",[344,100759,100760],{"align":23768},[141,100761,100722],{},[298,100763,100764,100767],{},[344,100765,100766],{"align":23768},"游戏运行到当前帧的状态",[344,100768,100769],{"align":23768},[141,100770,100732],{},[298,100772,100773,100776],{},[344,100774,100775],{"align":23768},"前进一帧",[344,100777,100778],{"align":23768},[141,100779,100698],{},[18,100781,100783],{"id":100782},"_2环境与依赖安装","2.环境与依赖安装",[14,100785,100786],{},"Fedora 44 系统依赖:",[135,100788,100790],{"className":23854,"code":100789,"language":23856,"meta":30,"style":30},"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",[141,100791,100792,100804,100817,100830,100840,100850,100869],{"__ignoreMap":30},[144,100793,100794,100796,100798,100800,100802],{"class":146,"line":147},[144,100795,24589],{"class":1993},[144,100797,26328],{"class":259},[144,100799,23866],{"class":259},[144,100801,26413],{"class":203},[144,100803,24691],{"class":203},[144,100805,100806,100809,100812,100815],{"class":146,"line":66},[144,100807,100808],{"class":259},"  python3",[144,100810,100811],{"class":259}," python3-pip",[144,100813,100814],{"class":259}," python3-virtualenv",[144,100816,24691],{"class":203},[144,100818,100819,100822,100825,100828],{"class":146,"line":1210},[144,100820,100821],{"class":259},"  mesa-libGL",[144,100823,100824],{"class":259}," mesa-libGLU",[144,100826,100827],{"class":259}," mesa-dri-drivers",[144,100829,24691],{"class":203},[144,100831,100832,100835,100838],{"class":146,"line":1225},[144,100833,100834],{"class":259},"  libglvnd-glx",[144,100836,100837],{"class":259}," libglvnd-opengl",[144,100839,24691],{"class":203},[144,100841,100842,100845,100848],{"class":146,"line":1231},[144,100843,100844],{"class":259},"  glfw",[144,100846,100847],{"class":259}," glfw-devel",[144,100849,24691],{"class":203},[144,100851,100852,100855,100858,100861,100864,100867],{"class":146,"line":1245},[144,100853,100854],{"class":259},"  libX11",[144,100856,100857],{"class":259}," libXcursor",[144,100859,100860],{"class":259}," libXi",[144,100862,100863],{"class":259}," libXinerama",[144,100865,100866],{"class":259}," libXrandr",[144,100868,24691],{"class":203},[144,100870,100871,100874,100877],{"class":146,"line":1251},[144,100872,100873],{"class":259},"  gcc",[144,100875,100876],{"class":259}," gcc-c++",[144,100878,100879],{"class":259}," make\n",[14,100881,100882],{},"创建 Python 环境:",[135,100884,100886],{"className":23854,"code":100885,"language":23856,"meta":30,"style":30},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[141,100887,100888,100902,100910],{"__ignoreMap":30},[144,100889,100890,100893,100896,100899],{"class":146,"line":147},[144,100891,100892],{"class":1993},"python3",[144,100894,100895],{"class":203}," -m",[144,100897,100898],{"class":259}," venv",[144,100900,100901],{"class":259}," .venv\n",[144,100903,100904,100907],{"class":146,"line":66},[144,100905,100906],{"class":203},"source",[144,100908,100909],{"class":259}," .venv\u002Fbin\u002Factivate\n",[144,100911,100912,100914,100916,100919,100921,100924],{"class":146,"line":1210},[144,100913,30393],{"class":1993},[144,100915,100895],{"class":203},[144,100917,100918],{"class":259}," pip",[144,100920,23866],{"class":259},[144,100922,100923],{"class":203}," --upgrade",[144,100925,100926],{"class":259}," pip\n",[14,100928,100929],{},"pip 安装:",[135,100931,100933],{"className":23854,"code":100932,"language":23856,"meta":30,"style":30},"pip install \"mujoco>=2.3\" numpy\n",[141,100934,100935],{"__ignoreMap":30},[144,100936,100937,100939,100941,100944],{"class":146,"line":147},[144,100938,23863],{"class":1993},[144,100940,23866],{"class":259},[144,100942,100943],{"class":259}," \"mujoco>=2.3\"",[144,100945,100946],{"class":259}," numpy\n",[14,100948,100949],{},"安装完成后，先做最小检查：",[135,100951,100953],{"className":23854,"code":100952,"language":23856,"meta":30,"style":30},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[141,100954,100955],{"__ignoreMap":30},[144,100956,100957,100959,100961],{"class":146,"line":147},[144,100958,30393],{"class":1993},[144,100960,30371],{"class":203},[144,100962,100963],{"class":259}," \"import mujoco; print(mujoco.__version__)\"\n",[14,100965,100966],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,100968,100969],{},"conda 安装:",[135,100971,100973],{"className":23854,"code":100972,"language":23856,"meta":30,"style":30},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[141,100974,100975,100995,101005],{"__ignoreMap":30},[144,100976,100977,100979,100981,100983,100986,100989,100992],{"class":146,"line":147},[144,100978,30343],{"class":1993},[144,100980,29189],{"class":259},[144,100982,25128],{"class":203},[144,100984,100985],{"class":259}," mujoco-study",[144,100987,100988],{"class":259}," python=",[144,100990,100991],{"class":203},"3.10",[144,100993,100994],{"class":203}," -y\n",[144,100996,100997,100999,101002],{"class":146,"line":66},[144,100998,30343],{"class":1993},[144,101000,101001],{"class":259}," activate",[144,101003,101004],{"class":259}," mujoco-study\n",[144,101006,101007,101009,101011,101013],{"class":146,"line":1210},[144,101008,23863],{"class":1993},[144,101010,23866],{"class":259},[144,101012,100943],{"class":259},[144,101014,100946],{"class":259},[14,101016,101017],{},"版本冲突说明:",[98,101019,101020,101026,101036,101045],{},[101,101021,101022,101023,28398],{},"不要安装 ",[141,101024,101025],{},"mujoco-py",[101,101027,101028,101029,101031,101032,101035],{},"如果旧项目里同时安装了 ",[141,101030,101025],{}," 和 ",[141,101033,101034],{},"mujoco","，建议新建干净虚拟环境。",[101,101037,101038,101041,101042,28398],{},[141,101039,101040],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[141,101043,101044],{},"~\u002F.mujoco\u002Fmujoco210",[101,101046,101047,101048,82552,101051,101054],{},"离屏渲染可能涉及 OpenGL 后端，",[141,101049,101050],{},"MUJOCO_GL=egl",[141,101052,101053],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[18,101056,101058],{"id":101057},"_3核心概念解释","3.核心概念解释",[14,101060,101061],{},"MuJoCo 的基本执行流程:",[135,101063,101066],{"className":101064,"code":101065,"language":5218,"meta":30},[5216],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[141,101067,101065],{"__ignoreMap":30},[14,101069,101070,101072],{},[141,101071,100722],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101074,101075,101077,101078,367,101081,367,101084,367,101087,367,101090,28398],{},[141,101076,100732],{}," 存放仿真运行时状态，例如 ",[141,101079,101080],{},"data.time",[141,101082,101083],{},"data.qpos",[141,101085,101086],{},"data.qvel",[141,101088,101089],{},"data.ctrl",[141,101091,101092],{},"data.xpos",[115,101094,101096],{"id":101095},"xml-是什么","XML 是什么",[14,101098,101099],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[135,101101,101103],{"className":53080,"code":101102,"language":53082,"meta":30,"style":30},"\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",[141,101104,101105,101127,101158],{"__ignoreMap":30},[144,101106,101107,101109,101111,101113,101115,101117,101120,101122,101125],{"class":146,"line":147},[144,101108,1065],{"class":154},[144,101110,51813],{"class":51313},[144,101112,14951],{"class":1993},[144,101114,200],{"class":154},[144,101116,53504],{"class":259},[144,101118,101119],{"class":1993}," pos",[144,101121,200],{"class":154},[144,101123,101124],{"class":259},"\"0 0 1\"",[144,101126,51320],{"class":154},[144,101128,101129,101131,101134,101136,101138,101141,101143,101145,101147,101150,101152,101155],{"class":146,"line":66},[144,101130,52157],{"class":154},[144,101132,101133],{"class":51313},"geom",[144,101135,14951],{"class":1993},[144,101137,200],{"class":154},[144,101139,101140],{"class":259},"\"box_geom\"",[144,101142,53837],{"class":1993},[144,101144,200],{"class":154},[144,101146,53504],{"class":259},[144,101148,101149],{"class":1993}," size",[144,101151,200],{"class":154},[144,101153,101154],{"class":259},"\"0.1 0.1 0.1\"",[144,101156,101157],{"class":154},"\u002F>\n",[144,101159,101160,101162,101164],{"class":146,"line":1210},[144,101161,51798],{"class":154},[144,101163,51813],{"class":51313},[144,101165,51320],{"class":154},[14,101167,101168],{},"这段意思是：",[98,101170,101171,101177,101184],{},[101,101172,101173,101174,101176],{},"创建一个叫 ",[141,101175,53727],{}," 的刚体。",[101,101178,101179,101180,101183],{},"它初始放在 ",[141,101181,101182],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[101,101185,101186],{},"它里面有一个盒子形状的几何体。",[115,101188,101190],{"id":101189},"timestep-是什么","timestep 是什么",[14,101192,101193],{},"XML 里的：",[135,101195,101197],{"className":53080,"code":101196,"language":53082,"meta":30,"style":30},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[141,101198,101199],{"__ignoreMap":30},[144,101200,101201,101203,101205,101208,101210,101213,101216,101218,101221],{"class":146,"line":147},[144,101202,1065],{"class":154},[144,101204,69179],{"class":51313},[144,101206,101207],{"class":1993}," timestep",[144,101209,200],{"class":154},[144,101211,101212],{"class":259},"\"0.01\"",[144,101214,101215],{"class":1993}," gravity",[144,101217,200],{"class":154},[144,101219,101220],{"class":259},"\"0 0 -9.81\"",[144,101222,101157],{"class":154},[14,101224,101225,101226,101229,101230,101232],{},"表示每调用一次 ",[141,101227,101228],{},"mj_step","，仿真时间前进 ",[141,101231,38999],{}," 秒。循环 100 次，大约就是 1 秒：",[135,101234,101237],{"className":101235,"code":101236,"language":5218,"meta":30},[5216],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[141,101238,101236],{"__ignoreMap":30},[115,101240,101242],{"id":101241},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101244,101245],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[135,101247,101250],{"className":101248,"code":101249,"language":5218,"meta":30},[5216],"x y z qw qx qy qz\n",[141,101251,101249],{"__ignoreMap":30},[14,101253,101254,101255,101258,101259,101262],{},"表示一个自由刚体的位置和姿态。其中 ",[141,101256,101257],{},"x y z"," 是位置，",[141,101260,101261],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[18,101264,101266],{"id":101265},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101268,101269],{},"新建文件:",[135,101271,101273],{"className":23854,"code":101272,"language":23856,"meta":30,"style":30},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[141,101274,101275,101285,101292],{"__ignoreMap":30},[144,101276,101277,101280,101282],{"class":146,"line":147},[144,101278,101279],{"class":1993},"mkdir",[144,101281,29229],{"class":203},[144,101283,101284],{"class":259}," mujoco_tutorial\n",[144,101286,101287,101290],{"class":146,"line":66},[144,101288,101289],{"class":203},"cd",[144,101291,101284],{"class":259},[144,101293,101294,101297],{"class":146,"line":1210},[144,101295,101296],{"class":1993},"touch",[144,101298,101299],{"class":259}," ch1_first_sim.py\n",[14,101301,101302],{},"写入:",[135,101304,101306],{"className":30391,"code":101305,"language":30393,"meta":30,"style":30},"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",[141,101307,101308,101315,101319,101323,101333,101338,101343,101347,101352,101357,101361,101366,101371,101376,101381,101386,101391,101395,101399,101403,101416,101430,101440,101444,101456,101468,101480,101492,101504,101508,101525,101530,101534,101545,101556,101560,101564,101578],{"__ignoreMap":30},[144,101309,101310,101312],{"class":146,"line":147},[144,101311,30405],{"class":150},[144,101313,101314],{"class":154}," mujoco\n",[144,101316,101317],{"class":146,"line":66},[144,101318,2430],{"emptyLinePlaceholder":72},[144,101320,101321],{"class":146,"line":1210},[144,101322,2430],{"emptyLinePlaceholder":72},[144,101324,101325,101328,101330],{"class":146,"line":1225},[144,101326,101327],{"class":203},"XML",[144,101329,13595],{"class":150},[144,101331,101332],{"class":259}," \"\"\"\n",[144,101334,101335],{"class":146,"line":1231},[144,101336,101337],{"class":259},"\u003Cmujoco model=\"first_sim\">\n",[144,101339,101340],{"class":146,"line":1245},[144,101341,101342],{"class":259},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[144,101344,101345],{"class":146,"line":1251},[144,101346,2430],{"emptyLinePlaceholder":72},[144,101348,101349],{"class":146,"line":1342},[144,101350,101351],{"class":259},"  \u003Cworldbody>\n",[144,101353,101354],{"class":146,"line":1348},[144,101355,101356],{"class":259},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[144,101358,101359],{"class":146,"line":1360},[144,101360,2430],{"emptyLinePlaceholder":72},[144,101362,101363],{"class":146,"line":1642},[144,101364,101365],{"class":259},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[144,101367,101368],{"class":146,"line":1647},[144,101369,101370],{"class":259},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[144,101372,101373],{"class":146,"line":1653},[144,101374,101375],{"class":259},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[144,101377,101378],{"class":146,"line":1658},[144,101379,101380],{"class":259},"    \u003C\u002Fbody>\n",[144,101382,101383],{"class":146,"line":1672},[144,101384,101385],{"class":259},"  \u003C\u002Fworldbody>\n",[144,101387,101388],{"class":146,"line":1677},[144,101389,101390],{"class":259},"\u003C\u002Fmujoco>\n",[144,101392,101393],{"class":146,"line":1683},[144,101394,95711],{"class":259},[144,101396,101397],{"class":146,"line":1704},[144,101398,2430],{"emptyLinePlaceholder":72},[144,101400,101401],{"class":146,"line":1709},[144,101402,2430],{"emptyLinePlaceholder":72},[144,101404,101405,101407,101409,101412,101414],{"class":146,"line":1723},[144,101406,31960],{"class":150},[144,101408,2003],{"class":1993},[144,101410,101411],{"class":154},"() -> ",[144,101413,95699],{"class":203},[144,101415,3769],{"class":154},[144,101417,101418,101421,101423,101426,101428],{"class":146,"line":1728},[144,101419,101420],{"class":154},"    model ",[144,101422,200],{"class":150},[144,101424,101425],{"class":154}," mujoco.MjModel.from_xml_string(",[144,101427,101327],{"class":203},[144,101429,161],{"class":154},[144,101431,101432,101435,101437],{"class":146,"line":1757},[144,101433,101434],{"class":154},"    data ",[144,101436,200],{"class":150},[144,101438,101439],{"class":154}," mujoco.MjData(model)\n",[144,101441,101442],{"class":146,"line":1762},[144,101443,2430],{"emptyLinePlaceholder":72},[144,101445,101446,101448,101450,101453],{"class":146,"line":1779},[144,101447,31312],{"class":203},[144,101449,155],{"class":154},[144,101451,101452],{"class":259},"\"nq:\"",[144,101454,101455],{"class":154},", model.nq)\n",[144,101457,101458,101460,101462,101465],{"class":146,"line":1784},[144,101459,31312],{"class":203},[144,101461,155],{"class":154},[144,101463,101464],{"class":259},"\"nv:\"",[144,101466,101467],{"class":154},", model.nv)\n",[144,101469,101470,101472,101474,101477],{"class":146,"line":1789},[144,101471,31312],{"class":203},[144,101473,155],{"class":154},[144,101475,101476],{"class":259},"\"nu:\"",[144,101478,101479],{"class":154},", model.nu)\n",[144,101481,101482,101484,101486,101489],{"class":146,"line":1794},[144,101483,31312],{"class":203},[144,101485,155],{"class":154},[144,101487,101488],{"class":259},"\"initial time:\"",[144,101490,101491],{"class":154},", data.time)\n",[144,101493,101494,101496,101498,101501],{"class":146,"line":1808},[144,101495,31312],{"class":203},[144,101497,155],{"class":154},[144,101499,101500],{"class":259},"\"initial qpos:\"",[144,101502,101503],{"class":154},", data.qpos.copy())\n",[144,101505,101506],{"class":146,"line":1813},[144,101507,2430],{"emptyLinePlaceholder":72},[144,101509,101510,101512,101515,101517,101519,101521,101523],{"class":146,"line":2607},[144,101511,3231],{"class":150},[144,101513,101514],{"class":154}," _ ",[144,101516,26056],{"class":150},[144,101518,32456],{"class":203},[144,101520,155],{"class":154},[144,101522,466],{"class":203},[144,101524,30799],{"class":154},[144,101526,101527],{"class":146,"line":2621},[144,101528,101529],{"class":154},"        mujoco.mj_step(model, data)\n",[144,101531,101532],{"class":146,"line":2629},[144,101533,2430],{"emptyLinePlaceholder":72},[144,101535,101536,101538,101540,101543],{"class":146,"line":2634},[144,101537,31312],{"class":203},[144,101539,155],{"class":154},[144,101541,101542],{"class":259},"\"final time:\"",[144,101544,101491],{"class":154},[144,101546,101547,101549,101551,101554],{"class":146,"line":2640},[144,101548,31312],{"class":203},[144,101550,155],{"class":154},[144,101552,101553],{"class":259},"\"final qpos:\"",[144,101555,101503],{"class":154},[144,101557,101558],{"class":146,"line":2646},[144,101559,2430],{"emptyLinePlaceholder":72},[144,101561,101562],{"class":146,"line":2651},[144,101563,2430],{"emptyLinePlaceholder":72},[144,101565,101566,101568,101570,101573,101576],{"class":146,"line":7979},[144,101567,1561],{"class":150},[144,101569,31233],{"class":203},[144,101571,101572],{"class":150}," ==",[144,101574,101575],{"class":259}," \"__main__\"",[144,101577,3769],{"class":154},[144,101579,101580],{"class":146,"line":8003},[144,101581,101582],{"class":154},"    main()\n",[115,101584,101585],{"id":101585},"代码逐段解释",[14,101587,101588],{},"导入库：",[135,101590,101592],{"className":30391,"code":101591,"language":30393,"meta":30,"style":30},"import mujoco\n",[141,101593,101594],{"__ignoreMap":30},[144,101595,101596,101598],{"class":146,"line":147},[144,101597,30405],{"class":150},[144,101599,101314],{"class":154},[14,101601,101602],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,101604,101605],{},"定义 XML：",[135,101607,101609],{"className":30391,"code":101608,"language":30393,"meta":30,"style":30},"XML = \"\"\"\n...\n\"\"\"\n",[141,101610,101611,101619,101624],{"__ignoreMap":30},[144,101612,101613,101615,101617],{"class":146,"line":147},[144,101614,101327],{"class":203},[144,101616,13595],{"class":150},[144,101618,101332],{"class":259},[144,101620,101621],{"class":146,"line":66},[144,101622,101623],{"class":259},"...\n",[144,101625,101626],{"class":146,"line":1210},[144,101627,95711],{"class":259},[14,101629,101630,101631,101634],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[141,101632,101633],{},"freejoint"," 的方块。",[14,101636,101637],{},"编译模型：",[135,101639,101641],{"className":30391,"code":101640,"language":30393,"meta":30,"style":30},"model = mujoco.MjModel.from_xml_string(XML)\n",[141,101642,101643],{"__ignoreMap":30},[144,101644,101645,101648,101650,101652,101654],{"class":146,"line":147},[144,101646,101647],{"class":154},"model ",[144,101649,200],{"class":150},[144,101651,101425],{"class":154},[144,101653,101327],{"class":203},[144,101655,161],{"class":154},[14,101657,101658],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,101660,101661],{},"创建数据：",[135,101663,101665],{"className":30391,"code":101664,"language":30393,"meta":30,"style":30},"data = mujoco.MjData(model)\n",[141,101666,101667],{"__ignoreMap":30},[144,101668,101669,101672,101674],{"class":146,"line":147},[144,101670,101671],{"class":154},"data ",[144,101673,200],{"class":150},[144,101675,101439],{"class":154},[14,101677,101678,101680,101681,101683],{},[141,101679,33414],{}," 会保存仿真当前状态。刚创建时，时间是 ",[141,101682,346],{},"，方块还在初始位置。",[14,101685,101686],{},"推进仿真：",[135,101688,101690],{"className":30391,"code":101689,"language":30393,"meta":30,"style":30},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[141,101691,101692,101708],{"__ignoreMap":30},[144,101693,101694,101696,101698,101700,101702,101704,101706],{"class":146,"line":147},[144,101695,3055],{"class":150},[144,101697,101514],{"class":154},[144,101699,26056],{"class":150},[144,101701,32456],{"class":203},[144,101703,155],{"class":154},[144,101705,466],{"class":203},[144,101707,30799],{"class":154},[144,101709,101710],{"class":146,"line":66},[144,101711,101712],{"class":154},"    mujoco.mj_step(model, data)\n",[14,101714,101715,101716,101718],{},"每次 ",[141,101717,101228],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[115,101720,101721],{"id":101721},"代码逐行细讲",[14,101723,101724],{},"下面把完整代码按新手视角拆开讲。",[135,101726,101727],{"className":30391,"code":101591,"language":30393,"meta":30,"style":30},[141,101728,101729],{"__ignoreMap":30},[144,101730,101731,101733],{"class":146,"line":147},[144,101732,30405],{"class":150},[144,101734,101314],{"class":154},[14,101736,101737,101739,101740,367,101742,367,101744,28398],{},[141,101738,30405],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[141,101741,100688],{},[141,101743,100693],{},[141,101745,101746],{},"mujoco.mj_step",[135,101748,101749],{"className":30391,"code":101608,"language":30393,"meta":30,"style":30},[141,101750,101751,101759,101763],{"__ignoreMap":30},[144,101752,101753,101755,101757],{"class":146,"line":147},[144,101754,101327],{"class":203},[144,101756,13595],{"class":150},[144,101758,101332],{"class":259},[144,101760,101761],{"class":146,"line":66},[144,101762,101623],{"class":259},[144,101764,101765],{"class":146,"line":1210},[144,101766,95711],{"class":259},[14,101768,101769,101771,101772,101775],{},[141,101770,101327],{}," 是一个变量名。右边的三引号 ",[141,101773,101774],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[135,101777,101778],{"className":53080,"code":101337,"language":53082,"meta":30,"style":30},[141,101779,101780],{"__ignoreMap":30},[144,101781,101782,101784,101786,101789,101791,101794],{"class":146,"line":147},[144,101783,1065],{"class":154},[144,101785,101034],{"class":51313},[144,101787,101788],{"class":1993}," model",[144,101790,200],{"class":154},[144,101792,101793],{"class":259},"\"first_sim\"",[144,101795,51320],{"class":154},[14,101797,101798,101799,101802,101803,28398],{},"这是 XML 的根标签。",[141,101800,101801],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[141,101804,101805],{},"first_sim",[135,101807,101808],{"className":53080,"code":101196,"language":53082,"meta":30,"style":30},[141,101809,101810],{"__ignoreMap":30},[144,101811,101812,101814,101816,101818,101820,101822,101824,101826,101828],{"class":146,"line":147},[144,101813,1065],{"class":154},[144,101815,69179],{"class":51313},[144,101817,101207],{"class":1993},[144,101819,200],{"class":154},[144,101821,101212],{"class":259},[144,101823,101215],{"class":1993},[144,101825,200],{"class":154},[144,101827,101220],{"class":259},[144,101829,101157],{"class":154},[14,101831,101832,101834,101835,101838,101839,101842],{},[141,101833,69179],{}," 用来设置仿真参数。",[141,101836,101837],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[141,101840,101841],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[135,101844,101846],{"className":53080,"code":101845,"language":53082,"meta":30,"style":30},"\u003Cworldbody>\n",[141,101847,101848],{"__ignoreMap":30},[144,101849,101850,101852,101855],{"class":146,"line":147},[144,101851,1065],{"class":154},[144,101853,101854],{"class":51313},"worldbody",[144,101856,51320],{"class":154},[14,101858,101859,101861],{},[141,101860,101854],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[135,101863,101865],{"className":53080,"code":101864,"language":53082,"meta":30,"style":30},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[141,101866,101867],{"__ignoreMap":30},[144,101868,101869,101871,101873,101875,101877,101880,101882,101884,101887,101889,101891,101894,101896,101898,101901],{"class":146,"line":147},[144,101870,1065],{"class":154},[144,101872,101133],{"class":51313},[144,101874,14951],{"class":1993},[144,101876,200],{"class":154},[144,101878,101879],{"class":259},"\"floor\"",[144,101881,53837],{"class":1993},[144,101883,200],{"class":154},[144,101885,101886],{"class":259},"\"plane\"",[144,101888,101149],{"class":1993},[144,101890,200],{"class":154},[144,101892,101893],{"class":259},"\"2 2 0.1\"",[144,101895,78780],{"class":1993},[144,101897,200],{"class":154},[144,101899,101900],{"class":259},"\"0.8 0.8 0.8 1\"",[144,101902,101157],{"class":154},[14,101904,101905,101906,101908,101909,101912,101913,101916,101917,101919],{},"这行创建地面。",[141,101907,101133],{}," 是几何体。",[141,101910,101911],{},"name=\"floor\""," 是名字。",[141,101914,101915],{},"type=\"plane\""," 表示平面。",[141,101918,55123],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[135,101921,101923],{"className":53080,"code":101922,"language":53082,"meta":30,"style":30},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[141,101924,101925],{"__ignoreMap":30},[144,101926,101927,101929,101931,101933,101935,101937,101939,101941,101943],{"class":146,"line":147},[144,101928,1065],{"class":154},[144,101930,51813],{"class":51313},[144,101932,14951],{"class":1993},[144,101934,200],{"class":154},[144,101936,53504],{"class":259},[144,101938,101119],{"class":1993},[144,101940,200],{"class":154},[144,101942,101124],{"class":259},[144,101944,51320],{"class":154},[14,101946,101947,101948,28398,101950,101953,101954,101956],{},"这行创建一个刚体，名字叫 ",[141,101949,53727],{},[141,101951,101952],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[141,101955,101182],{},"，也就是离地面 1 米高。",[135,101958,101960],{"className":53080,"code":101959,"language":53082,"meta":30,"style":30},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[141,101961,101962],{"__ignoreMap":30},[144,101963,101964,101966,101968,101970,101972,101975],{"class":146,"line":147},[144,101965,1065],{"class":154},[144,101967,101633],{"class":51313},[144,101969,14951],{"class":1993},[144,101971,200],{"class":154},[144,101973,101974],{"class":259},"\"box_free\"",[144,101976,101157],{"class":154},[14,101978,101979,101980,101982],{},"这行很重要。",[141,101981,101633],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[135,101984,101986],{"className":53080,"code":101985,"language":53082,"meta":30,"style":30},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[141,101987,101988],{"__ignoreMap":30},[144,101989,101990,101992,101994,101996,101998,102000,102002,102004,102006,102008,102010,102012,102015,102017,102019,102021,102023,102026],{"class":146,"line":147},[144,101991,1065],{"class":154},[144,101993,101133],{"class":51313},[144,101995,14951],{"class":1993},[144,101997,200],{"class":154},[144,101999,101140],{"class":259},[144,102001,53837],{"class":1993},[144,102003,200],{"class":154},[144,102005,53504],{"class":259},[144,102007,101149],{"class":1993},[144,102009,200],{"class":154},[144,102011,101154],{"class":259},[144,102013,102014],{"class":1993}," mass",[144,102016,200],{"class":154},[144,102018,3708],{"class":259},[144,102020,78780],{"class":1993},[144,102022,200],{"class":154},[144,102024,102025],{"class":259},"\"1 0 0 1\"",[144,102027,101157],{"class":154},[14,102029,102030,102031,102034,102035,102038,102039,102042,102043,102046],{},"这行给 box body 添加一个盒子形状。",[141,102032,102033],{},"type=\"box\""," 表示形状是盒子。",[141,102036,102037],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[141,102040,102041],{},"mass=\"1\""," 表示质量是 1。",[141,102044,102045],{},"rgba=\"1 0 0 1\""," 表示红色。",[135,102048,102050],{"className":30391,"code":102049,"language":30393,"meta":30,"style":30},"def main() -> None:\n",[141,102051,102052],{"__ignoreMap":30},[144,102053,102054,102056,102058,102060,102062],{"class":146,"line":147},[144,102055,31960],{"class":150},[144,102057,2003],{"class":1993},[144,102059,101411],{"class":154},[144,102061,95699],{"class":203},[144,102063,3769],{"class":154},[14,102065,102066,102068,102069,102072,102073,102076],{},[141,102067,31960],{}," 用来定义函数。这里定义了一个叫 ",[141,102070,102071],{},"main"," 的函数。",[141,102074,102075],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[135,102078,102079],{"className":30391,"code":101640,"language":30393,"meta":30,"style":30},[141,102080,102081],{"__ignoreMap":30},[144,102082,102083,102085,102087,102089,102091],{"class":146,"line":147},[144,102084,101647],{"class":154},[144,102086,200],{"class":150},[144,102088,101425],{"class":154},[144,102090,101327],{"class":203},[144,102092,161],{"class":154},[14,102094,102095,102096,102099],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[141,102097,102098],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[135,102101,102102],{"className":30391,"code":101664,"language":30393,"meta":30,"style":30},[141,102103,102104],{"__ignoreMap":30},[144,102105,102106,102108,102110],{"class":146,"line":147},[144,102107,101671],{"class":154},[144,102109,200],{"class":150},[144,102111,101439],{"class":154},[14,102113,102114,102115,102117,102118,102120],{},"这行创建仿真数据。",[141,102116,33414],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[141,102119,33414],{}," 都会变化。",[135,102122,102124],{"className":30391,"code":102123,"language":30393,"meta":30,"style":30},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[141,102125,102126,102136,102146],{"__ignoreMap":30},[144,102127,102128,102130,102132,102134],{"class":146,"line":147},[144,102129,30428],{"class":203},[144,102131,155],{"class":154},[144,102133,101452],{"class":259},[144,102135,101455],{"class":154},[144,102137,102138,102140,102142,102144],{"class":146,"line":66},[144,102139,30428],{"class":203},[144,102141,155],{"class":154},[144,102143,101464],{"class":259},[144,102145,101467],{"class":154},[144,102147,102148,102150,102152,102154],{"class":146,"line":1210},[144,102149,30428],{"class":203},[144,102151,155],{"class":154},[144,102153,101476],{"class":259},[144,102155,101479],{"class":154},[14,102157,102158,102160,102161,102164,102165,102168,102169,102172,102173,102176],{},[141,102159,30428],{}," 用来输出信息。",[141,102162,102163],{},"model.nq"," 是位置变量数量，",[141,102166,102167],{},"model.nv"," 是速度变量数量，",[141,102170,102171],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[141,102174,102175],{},"nu"," 是 0。",[135,102178,102180],{"className":30391,"code":102179,"language":30393,"meta":30,"style":30},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[141,102181,102182,102192],{"__ignoreMap":30},[144,102183,102184,102186,102188,102190],{"class":146,"line":147},[144,102185,30428],{"class":203},[144,102187,155],{"class":154},[144,102189,101488],{"class":259},[144,102191,101491],{"class":154},[144,102193,102194,102196,102198,102200],{"class":146,"line":66},[144,102195,30428],{"class":203},[144,102197,155],{"class":154},[144,102199,101500],{"class":259},[144,102201,101503],{"class":154},[14,102203,102204,102205,102207,102208,102210,102211,102214],{},"这里打印初始时间和初始位置。",[141,102206,101080],{}," 一开始是 0。",[141,102209,101083],{}," 是位置数组。",[141,102212,102213],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[135,102216,102217],{"className":30391,"code":101689,"language":30393,"meta":30,"style":30},[141,102218,102219,102235],{"__ignoreMap":30},[144,102220,102221,102223,102225,102227,102229,102231,102233],{"class":146,"line":147},[144,102222,3055],{"class":150},[144,102224,101514],{"class":154},[144,102226,26056],{"class":150},[144,102228,32456],{"class":203},[144,102230,155],{"class":154},[144,102232,466],{"class":203},[144,102234,30799],{"class":154},[144,102236,102237],{"class":146,"line":66},[144,102238,101712],{"class":154},[14,102240,102241,102243,102244,102247,102248,102250,102251,102253],{},[141,102242,3055],{}," 是循环。",[141,102245,102246],{},"range(100)"," 表示循环 100 次。",[141,102249,1147],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[141,102252,101228],{},"，仿真就前进一步。",[135,102255,102257],{"className":30391,"code":102256,"language":30393,"meta":30,"style":30},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[141,102258,102259,102269],{"__ignoreMap":30},[144,102260,102261,102263,102265,102267],{"class":146,"line":147},[144,102262,30428],{"class":203},[144,102264,155],{"class":154},[144,102266,101542],{"class":259},[144,102268,101491],{"class":154},[144,102270,102271,102273,102275,102277],{"class":146,"line":66},[144,102272,30428],{"class":203},[144,102274,155],{"class":154},[144,102276,101553],{"class":259},[144,102278,101503],{"class":154},[14,102280,102281],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[135,102283,102285],{"className":30391,"code":102284,"language":30393,"meta":30,"style":30},"if __name__ == \"__main__\":\n    main()\n",[141,102286,102287,102299],{"__ignoreMap":30},[144,102288,102289,102291,102293,102295,102297],{"class":146,"line":147},[144,102290,1561],{"class":150},[144,102292,31233],{"class":203},[144,102294,101572],{"class":150},[144,102296,101575],{"class":259},[144,102298,3769],{"class":154},[144,102300,102301],{"class":146,"line":66},[144,102302,101582],{"class":154},[14,102304,102305,102306,102309,102310,28398],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[141,102307,102308],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[141,102311,102308],{},[14,102313,102314],{},"运行:",[135,102316,102318],{"className":23854,"code":102317,"language":23856,"meta":30,"style":30},"python ch1_first_sim.py\n",[141,102319,102320],{"__ignoreMap":30},[144,102321,102322,102324],{"class":146,"line":147},[144,102323,30393],{"class":1993},[144,102325,101299],{"class":259},[18,102327,102329],{"id":102328},"_5运行结果说明","5.运行结果说明",[14,102331,102332],{},"你应该看到类似输出:",[135,102334,102337],{"className":102335,"code":102336,"language":5218,"meta":30},[5216],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[141,102338,102336],{"__ignoreMap":30},[14,102340,102341,102343,102344,102347,102348,28398],{},[141,102342,101633],{}," 有 7 个位置变量: ",[141,102345,102346],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[141,102349,102350],{},"vx vy vz wx wy wz",[14,102352,102353,102354,102357],{},"你还会看到 ",[141,102355,102356],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[18,102359,102361],{"id":102360},"_6验证步骤","6.验证步骤",[14,102363,102364],{},"确认版本:",[135,102366,102367],{"className":23854,"code":100952,"language":23856,"meta":30,"style":30},[141,102368,102369],{"__ignoreMap":30},[144,102370,102371,102373,102375],{"class":146,"line":147},[144,102372,30393],{"class":1993},[144,102374,30371],{"class":203},[144,102376,100963],{"class":259},[14,102378,102379],{},"确认导入的是官方 bindings:",[135,102381,102383],{"className":23854,"code":102382,"language":23856,"meta":30,"style":30},"python -c \"import mujoco; print(mujoco)\"\n",[141,102384,102385],{"__ignoreMap":30},[144,102386,102387,102389,102391],{"class":146,"line":147},[144,102388,30393],{"class":1993},[144,102390,30371],{"class":203},[144,102392,102393],{"class":259}," \"import mujoco; print(mujoco)\"\n",[14,102395,102396],{},"运行程序:",[135,102398,102399],{"className":23854,"code":102317,"language":23856,"meta":30,"style":30},[141,102400,102401],{"__ignoreMap":30},[144,102402,102403,102405],{"class":146,"line":147},[144,102404,30393],{"class":1993},[144,102406,101299],{"class":259},[14,102408,102409,102410,102413,102414,28398],{},"检查 ",[141,102411,102412],{},"final time"," 是否约等于 ",[141,102415,102416],{},"1.0",[14,102418,102419],{},"再做几个小实验：",[98,102421,102422,102432,102440,102453],{},[101,102423,102424,102425,102427,102428,102431],{},"把 ",[141,102426,101952],{}," 改成 ",[141,102429,102430],{},"pos=\"0 0 2\"","，观察初始高度变化。",[101,102433,102424,102434,102427,102436,102439],{},[141,102435,101841],{},[141,102437,102438],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[101,102441,102424,102442,102427,102444,102447,102448,102450,102451,28398],{},[141,102443,101837],{},[141,102445,102446],{},"timestep=\"0.005\"","，观察 100 步后的 ",[141,102449,102412],{}," 是否变成约 ",[141,102452,35342],{},[101,102454,102455,102456,102459],{},"删除 ",[141,102457,102458],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,102461,102462],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[18,102464,102466],{"id":102465},"_7常见错误与解决方案","7.常见错误与解决方案",[115,102468,102470],{"id":102469},"modulenotfounderror-no-module-named-mujoco",[141,102471,102472],{},"ModuleNotFoundError: No module named 'mujoco'",[14,102474,102475],{},"解决:",[135,102477,102479],{"className":23854,"code":102478,"language":23856,"meta":30,"style":30},"pip install \"mujoco>=2.3\"\n",[141,102480,102481],{"__ignoreMap":30},[144,102482,102483,102485,102487],{"class":146,"line":147},[144,102484,23863],{"class":1993},[144,102486,23866],{"class":259},[144,102488,102489],{"class":259}," \"mujoco>=2.3\"\n",[115,102491,102493],{"id":102492},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,102495,102496],{},"先安装系统依赖:",[135,102498,102500],{"className":23854,"code":102499,"language":23856,"meta":30,"style":30},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[141,102501,102502],{"__ignoreMap":30},[144,102503,102504,102506,102508,102510,102512,102515,102517,102520,102522,102525,102527],{"class":146,"line":147},[144,102505,24589],{"class":1993},[144,102507,26328],{"class":259},[144,102509,23866],{"class":259},[144,102511,26413],{"class":203},[144,102513,102514],{"class":259}," mesa-libGL",[144,102516,100827],{"class":259},[144,102518,102519],{"class":259}," glfw",[144,102521,100847],{"class":259},[144,102523,102524],{"class":259}," libX11",[144,102526,100860],{"class":259},[144,102528,102529],{"class":259}," libXrandr\n",[115,102531,102533],{"id":102532},"xml-解析失败","XML 解析失败",[14,102535,102536],{},"检查:",[98,102538,102539,102542,102545,102551],{},[101,102540,102541],{},"标签是否闭合",[101,102543,102544],{},"属性是否带引号",[101,102546,102547,102548],{},"根节点是否是 ",[141,102549,102550],{},"\u003Cmujoco>",[101,102552,102553,102555,102556,102559],{},[141,102554,51813],{}," 是否放在 ",[141,102557,102558],{},"\u003Cworldbody>"," 内部",[115,102561,102563,102565,102566],{"id":102562},"final-time-不是严格等于-10",[141,102564,102412],{}," 不是严格等于 ",[141,102567,102416],{},[14,102569,102570],{},"这通常不是错误。浮点数计算可能得到：",[135,102572,102575],{"className":102573,"code":102574,"language":5218,"meta":30},[5216],"1.0000000000000007\n",[141,102576,102574],{"__ignoreMap":30},[14,102578,102579,102580,102582],{},"只要接近 ",[141,102581,102416],{}," 就正常。",[115,102584,102585],{"id":102585},"方块没有掉下来",[14,102587,102588],{},"检查：",[98,102590,102591,102597,102603,102608],{},[101,102592,102593,102594],{},"方块 body 里是否有 ",[141,102595,102596],{},"\u003Cfreejoint\u002F>",[101,102598,102599,102600],{},"重力是否是 ",[141,102601,102602],{},"0 0 -9.81",[101,102604,102605,102606],{},"是否真的调用了 ",[141,102607,100698],{},[101,102609,102610,102611,102613,102614],{},"你看的是否是 ",[141,102612,102356],{},"，不是 ",[141,102615,102616],{},"initial qpos",[18,102618,102620],{"id":102619},"_8本章小结","8.本章小结",[14,102622,102623],{},"本章你已经完成了 MuJoCo 的最小闭环：",[135,102625,102628],{"className":102626,"code":102627,"language":5218,"meta":30},[5216],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[141,102629,102627],{"__ignoreMap":30},[14,102631,102632],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5157,102634,102635],{},"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":30,"searchDepth":66,"depth":66,"links":102637},[102638,102639,102640,102645,102649,102650,102651,102659],{"id":100659,"depth":66,"text":100660},{"id":100782,"depth":66,"text":100783},{"id":101057,"depth":66,"text":101058,"children":102641},[102642,102643,102644],{"id":101095,"depth":1210,"text":101096},{"id":101189,"depth":1210,"text":101190},{"id":101241,"depth":1210,"text":101242},{"id":101265,"depth":66,"text":101266,"children":102646},[102647,102648],{"id":101585,"depth":1210,"text":101585},{"id":101721,"depth":1210,"text":101721},{"id":102328,"depth":66,"text":102329},{"id":102360,"depth":66,"text":102361},{"id":102465,"depth":66,"text":102466,"children":102652},[102653,102654,102655,102656,102658],{"id":102469,"depth":1210,"text":102472},{"id":102492,"depth":1210,"text":102493},{"id":102532,"depth":1210,"text":102533},{"id":102562,"depth":1210,"text":102657},"final time 不是严格等于 1.0",{"id":102585,"depth":1210,"text":102585},{"id":102619,"depth":66,"text":102620},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100651,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102666,"title":102667,"body":102668,"description":30,"extension":70,"meta":104324,"navigation":72,"path":104325,"seo":104326,"stem":104327,"__hash__":104328},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102669,"toc":104300},[102670,102673,102675,102678,102681,102698,102793,102796,102802,102804,102806,102830,102833,102847,102850,102891,102893,102906,102908,102911,102959,102971,102974,102977,102983,102996,103063,103066,103085,103088,103091,103097,103099,103108,103111,103115,103124,103206,103215,103219,103225,103239,103249,103251,103581,103584,103596,103598,103609,103611,103614,103632,103635,103638,103656,103667,103670,103685,103695,103697,103718,103735,103755,103761,103801,103817,103833,103839,103842,103866,103882,103887,103917,103934,103959,103962,103977,103986,104001,104010,104025,104032,104034,104044,104057,104064,104067,104106,104113,104115,104167,104169,104175,104178,104185,104192,104195,104197,104215,104218,104221,104255,104267,104269,104272,104294,104297],[10,102671,102667],{"id":102672},"_2xml-与-mjcf-物理建模基础",[18,102674,100660],{"id":100659},[14,102676,102677],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,102679,102680],{},"本章结束后，你应该能看懂一个简单模型里：",[98,102682,102683,102686,102689,102692,102695],{},[101,102684,102685],{},"地面在哪里。",[101,102687,102688],{},"物体初始位置在哪里。",[101,102690,102691],{},"几何体是什么形状。",[101,102693,102694],{},"哪些 body 可以自由运动。",[101,102696,102697],{},"如何用名字在 Python 里找到 XML 中的对象。",[292,102699,102700,102710],{},[295,102701,102702],{},[298,102703,102704,102707],{},[301,102705,102706],{"align":23768},"标签",[301,102708,102709],{"align":23768},"作用",[339,102711,102712,102721,102731,102740,102750,102760,102773,102783],{},[298,102713,102714,102718],{},[344,102715,102716],{"align":23768},[141,102717,102550],{},[344,102719,102720],{"align":23768},"根节点",[298,102722,102723,102728],{},[344,102724,102725],{"align":23768},[141,102726,102727],{},"\u003Coption>",[344,102729,102730],{"align":23768},"仿真参数",[298,102732,102733,102737],{},[344,102734,102735],{"align":23768},[141,102736,102558],{},[344,102738,102739],{"align":23768},"世界中的物体",[298,102741,102742,102747],{},[344,102743,102744],{"align":23768},[141,102745,102746],{},"\u003Cbody>",[344,102748,102749],{"align":23768},"刚体",[298,102751,102752,102757],{},[344,102753,102754],{"align":23768},[141,102755,102756],{},"\u003Cgeom>",[344,102758,102759],{"align":23768},"几何体、碰撞体、可视体",[298,102761,102762,102770],{},[344,102763,102764,24991,102767],{"align":23768},[141,102765,102766],{},"\u003Cjoint>",[141,102768,102769],{},"\u003Cfreejoint>",[344,102771,102772],{"align":23768},"关节",[298,102774,102775,102780],{},[344,102776,102777],{"align":23768},[141,102778,102779],{},"\u003Csite>",[344,102781,102782],{"align":23768},"标记点",[298,102784,102785,102790],{},[344,102786,102787],{"align":23768},[141,102788,102789],{},"\u003Cactuator>",[344,102791,102792],{"align":23768},"控制器",[14,102794,102795],{},"初学时可以先记住：",[135,102797,102800],{"className":102798,"code":102799,"language":5218,"meta":30},[5216],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[141,102801,102799],{"__ignoreMap":30},[18,102803,100783],{"id":100782},[14,102805,100786],{},[135,102807,102809],{"className":23854,"code":102808,"language":23856,"meta":30,"style":30},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[141,102810,102811],{"__ignoreMap":30},[144,102812,102813,102815,102817,102819,102821,102823,102825,102827],{"class":146,"line":147},[144,102814,24589],{"class":1993},[144,102816,26328],{"class":259},[144,102818,23866],{"class":259},[144,102820,26413],{"class":203},[144,102822,102514],{"class":259},[144,102824,100827],{"class":259},[144,102826,102519],{"class":259},[144,102828,102829],{"class":259}," glfw-devel\n",[14,102831,102832],{},"pip:",[135,102834,102835],{"className":23854,"code":100932,"language":23856,"meta":30,"style":30},[141,102836,102837],{"__ignoreMap":30},[144,102838,102839,102841,102843,102845],{"class":146,"line":147},[144,102840,23863],{"class":1993},[144,102842,23866],{"class":259},[144,102844,100943],{"class":259},[144,102846,100946],{"class":259},[14,102848,102849],{},"conda:",[135,102851,102853],{"className":23854,"code":102852,"language":23856,"meta":30,"style":30},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[141,102854,102855,102872,102881],{"__ignoreMap":30},[144,102856,102857,102859,102861,102863,102866,102868,102870],{"class":146,"line":147},[144,102858,30343],{"class":1993},[144,102860,29189],{"class":259},[144,102862,25128],{"class":203},[144,102864,102865],{"class":259}," mujoco-xml",[144,102867,100988],{"class":259},[144,102869,100991],{"class":203},[144,102871,100994],{"class":203},[144,102873,102874,102876,102878],{"class":146,"line":66},[144,102875,30343],{"class":1993},[144,102877,101001],{"class":259},[144,102879,102880],{"class":259}," mujoco-xml\n",[144,102882,102883,102885,102887,102889],{"class":146,"line":1210},[144,102884,23863],{"class":1993},[144,102886,23866],{"class":259},[144,102888,100943],{"class":259},[144,102890,100946],{"class":259},[14,102892,101017],{},[98,102894,102895,102898,102903],{},[101,102896,102897],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[101,102899,102900,102901,28398],{},"本章使用基础标签，适用于 ",[141,102902,101040],{},[101,102904,102905],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[18,102907,101058],{"id":101057},[14,102909,102910],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[135,102912,102914],{"className":53080,"code":102913,"language":53082,"meta":30,"style":30},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[141,102915,102916,102930,102938,102943,102951],{"__ignoreMap":30},[144,102917,102918,102920,102922,102924,102926,102928],{"class":146,"line":147},[144,102919,1065],{"class":154},[144,102921,101034],{"class":51313},[144,102923,101788],{"class":1993},[144,102925,200],{"class":154},[144,102927,62692],{"class":259},[144,102929,51320],{"class":154},[144,102931,102932,102934,102936],{"class":146,"line":66},[144,102933,52157],{"class":154},[144,102935,101854],{"class":51313},[144,102937,51320],{"class":154},[144,102939,102940],{"class":146,"line":1210},[144,102941,102942],{"class":154},"    ...\n",[144,102944,102945,102947,102949],{"class":146,"line":1225},[144,102946,52430],{"class":154},[144,102948,101854],{"class":51313},[144,102950,51320],{"class":154},[144,102952,102953,102955,102957],{"class":146,"line":1231},[144,102954,51798],{"class":154},[144,102956,101034],{"class":51313},[144,102958,51320],{"class":154},[14,102960,102961,102963,102964,102966,102967,102970],{},[141,102962,51813],{}," 表示刚体。",[141,102965,101133],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[141,102968,102969],{},"joint"," 表示刚体相对父刚体如何运动。",[115,102972,102973],{"id":102973},"层级结构非常重要",[14,102975,102976],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[135,102978,102981],{"className":102979,"code":102980,"language":5218,"meta":30},[5216],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[141,102982,102980],{"__ignoreMap":30},[14,102984,102985,101031,102988,102991,102992,102995],{},[141,102986,102987],{},"red_box_geom",[141,102989,102990],{},"box_center"," 都属于 ",[141,102993,102994],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[135,102997,102999],{"className":53080,"code":102998,"language":53082,"meta":30,"style":30},"\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",[141,103000,103001,103021,103035,103055],{"__ignoreMap":30},[144,103002,103003,103005,103007,103009,103011,103013,103015,103017,103019],{"class":146,"line":147},[144,103004,1065],{"class":154},[144,103006,51813],{"class":51313},[144,103008,14951],{"class":1993},[144,103010,200],{"class":154},[144,103012,53504],{"class":259},[144,103014,101119],{"class":1993},[144,103016,200],{"class":154},[144,103018,101124],{"class":259},[144,103020,51320],{"class":154},[144,103022,103023,103025,103027,103029,103031,103033],{"class":146,"line":66},[144,103024,52157],{"class":154},[144,103026,101633],{"class":51313},[144,103028,14951],{"class":1993},[144,103030,200],{"class":154},[144,103032,101974],{"class":259},[144,103034,101157],{"class":154},[144,103036,103037,103039,103041,103043,103045,103047,103049,103051,103053],{"class":146,"line":1210},[144,103038,52157],{"class":154},[144,103040,101133],{"class":51313},[144,103042,53837],{"class":1993},[144,103044,200],{"class":154},[144,103046,53504],{"class":259},[144,103048,101149],{"class":1993},[144,103050,200],{"class":154},[144,103052,101154],{"class":259},[144,103054,101157],{"class":154},[144,103056,103057,103059,103061],{"class":146,"line":1225},[144,103058,51798],{"class":154},[144,103060,51813],{"class":51313},[144,103062,51320],{"class":154},[14,103064,103065],{},"含义:",[98,103067,103068,103074,103079,103082],{},[101,103069,103070,103071,103073],{},"创建名为 ",[141,103072,53727],{}," 的刚体",[101,103075,103076,103077],{},"初始位置在世界坐标 ",[141,103078,101182],{},[101,103080,103081],{},"它有一个自由关节",[101,103083,103084],{},"它有一个盒子几何体",[115,103086,103087],{"id":103087},"坐标怎么理解",[14,103089,103090],{},"MuJoCo 默认使用三维坐标：",[135,103092,103095],{"className":103093,"code":103094,"language":5218,"meta":30},[5216],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[141,103096,103094],{"__ignoreMap":30},[14,103098,14664],{},[135,103100,103102],{"className":53080,"code":103101,"language":53082,"meta":30,"style":30},"pos=\"0 0 1\"\n",[141,103103,103104],{"__ignoreMap":30},[144,103105,103106],{"class":146,"line":147},[144,103107,103101],{"class":154},[14,103109,103110],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[115,103112,103114],{"id":103113},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103116,103117,103118,82543,103121,103123],{},"不同 ",[141,103119,103120],{},"type",[141,103122,31509],{}," 含义不同：",[292,103125,103126,103141],{},[295,103127,103128],{},[298,103129,103130,103134,103139],{},[301,103131,103132],{"align":23768},[141,103133,103120],{},[301,103135,103136,103138],{"align":23768},[141,103137,31509],{}," 示例",[301,103140,100713],{"align":23768},[339,103142,103143,103157,103172,103191],{},[298,103144,103145,103149,103154],{},[344,103146,103147],{"align":23768},[141,103148,53727],{},[344,103150,103151],{"align":23768},[141,103152,103153],{},"size=\"0.1 0.2 0.3\"",[344,103155,103156],{"align":23768},"x\u002Fy\u002Fz 半边长，不是完整长度",[298,103158,103159,103164,103169],{},[344,103160,103161],{"align":23768},[141,103162,103163],{},"sphere",[344,103165,103166],{"align":23768},[141,103167,103168],{},"size=\"0.1\"",[344,103170,103171],{"align":23768},"球半径",[298,103173,103174,103179,103184],{},[344,103175,103176],{"align":23768},[141,103177,103178],{},"capsule",[344,103180,103181],{"align":23768},[141,103182,103183],{},"size=\"0.03\"",[344,103185,103186,103187,103190],{"align":23768},"胶囊半径，长度常用 ",[141,103188,103189],{},"fromto"," 指定",[298,103192,103193,103198,103203],{},[344,103194,103195],{"align":23768},[141,103196,103197],{},"plane",[344,103199,103200],{"align":23768},[141,103201,103202],{},"size=\"3 3 0.1\"",[344,103204,103205],{"align":23768},"可视平面大小，通常当地面",[14,103207,103208,103209,103211,103212,103214],{},"最容易踩坑的是 box：",[141,103210,102037],{}," 表示边长大约是 ",[141,103213,32050],{},"，因为 MuJoCo 用的是半边长。",[115,103216,103218],{"id":103217},"site-是什么","site 是什么",[14,103220,103221,103224],{},[141,103222,103223],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[98,103226,103227,103230,103233,103236],{},[101,103228,103229],{},"标记机械臂末端。",[101,103231,103232],{},"标记目标位置。",[101,103234,103235],{},"放传感器或相机参考点。",[101,103237,103238],{},"在 Python 中读取某个关键点的世界坐标。",[14,103240,103241,103242,101031,103245,103248],{},"在后面的 Reacher 任务中，",[141,103243,103244],{},"tip",[141,103246,103247],{},"target"," 就会用 site 表示。",[18,103250,101266],{"id":101265},[135,103252,103254],{"className":30391,"code":103253,"language":30393,"meta":30,"style":30},"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",[141,103255,103256,103262,103272,103276,103280,103288,103293,103297,103301,103305,103310,103314,103319,103324,103329,103334,103338,103342,103346,103350,103354,103358,103370,103382,103390,103394,103409,103424,103428,103441,103456,103469,103482,103486,103502,103506,103510,103521,103533,103545,103557,103561,103565,103577],{"__ignoreMap":30},[144,103257,103258,103260],{"class":146,"line":147},[144,103259,30405],{"class":150},[144,103261,101314],{"class":154},[144,103263,103264,103266,103268,103270],{"class":146,"line":66},[144,103265,30405],{"class":150},[144,103267,31393],{"class":154},[144,103269,31396],{"class":150},[144,103271,31399],{"class":154},[144,103273,103274],{"class":146,"line":1210},[144,103275,2430],{"emptyLinePlaceholder":72},[144,103277,103278],{"class":146,"line":1225},[144,103279,2430],{"emptyLinePlaceholder":72},[144,103281,103282,103284,103286],{"class":146,"line":1231},[144,103283,101327],{"class":203},[144,103285,13595],{"class":150},[144,103287,101332],{"class":259},[144,103289,103290],{"class":146,"line":1245},[144,103291,103292],{"class":259},"\u003Cmujoco model=\"xml_basic\">\n",[144,103294,103295],{"class":146,"line":1251},[144,103296,101342],{"class":259},[144,103298,103299],{"class":146,"line":1342},[144,103300,2430],{"emptyLinePlaceholder":72},[144,103302,103303],{"class":146,"line":1348},[144,103304,101351],{"class":259},[144,103306,103307],{"class":146,"line":1360},[144,103308,103309],{"class":259},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[144,103311,103312],{"class":146,"line":1642},[144,103313,2430],{"emptyLinePlaceholder":72},[144,103315,103316],{"class":146,"line":1647},[144,103317,103318],{"class":259},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[144,103320,103321],{"class":146,"line":1653},[144,103322,103323],{"class":259},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[144,103325,103326],{"class":146,"line":1658},[144,103327,103328],{"class":259},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[144,103330,103331],{"class":146,"line":1672},[144,103332,103333],{"class":259},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[144,103335,103336],{"class":146,"line":1677},[144,103337,101380],{"class":259},[144,103339,103340],{"class":146,"line":1683},[144,103341,101385],{"class":259},[144,103343,103344],{"class":146,"line":1704},[144,103345,101390],{"class":259},[144,103347,103348],{"class":146,"line":1709},[144,103349,95711],{"class":259},[144,103351,103352],{"class":146,"line":1723},[144,103353,2430],{"emptyLinePlaceholder":72},[144,103355,103356],{"class":146,"line":1728},[144,103357,2430],{"emptyLinePlaceholder":72},[144,103359,103360,103362,103364,103366,103368],{"class":146,"line":1757},[144,103361,31960],{"class":150},[144,103363,2003],{"class":1993},[144,103365,101411],{"class":154},[144,103367,95699],{"class":203},[144,103369,3769],{"class":154},[144,103371,103372,103374,103376,103378,103380],{"class":146,"line":1762},[144,103373,101420],{"class":154},[144,103375,200],{"class":150},[144,103377,101425],{"class":154},[144,103379,101327],{"class":203},[144,103381,161],{"class":154},[144,103383,103384,103386,103388],{"class":146,"line":1779},[144,103385,101434],{"class":154},[144,103387,200],{"class":150},[144,103389,101439],{"class":154},[144,103391,103392],{"class":146,"line":1784},[144,103393,2430],{"emptyLinePlaceholder":72},[144,103395,103396,103399,103401,103404,103407],{"class":146,"line":1789},[144,103397,103398],{"class":154},"    box_body_id ",[144,103400,200],{"class":150},[144,103402,103403],{"class":154}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[144,103405,103406],{"class":259},"\"red_box\"",[144,103408,161],{"class":154},[144,103410,103411,103414,103416,103419,103422],{"class":146,"line":1794},[144,103412,103413],{"class":154},"    site_id ",[144,103415,200],{"class":150},[144,103417,103418],{"class":154}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[144,103420,103421],{"class":259},"\"box_center\"",[144,103423,161],{"class":154},[144,103425,103426],{"class":146,"line":1808},[144,103427,2430],{"emptyLinePlaceholder":72},[144,103429,103430,103432,103435,103437,103439],{"class":146,"line":1813},[144,103431,3131],{"class":150},[144,103433,103434],{"class":154}," box_body_id ",[144,103436,1065],{"class":150},[144,103438,4123],{"class":203},[144,103440,3769],{"class":154},[144,103442,103443,103446,103449,103451,103454],{"class":146,"line":2607},[144,103444,103445],{"class":150},"        raise",[144,103447,103448],{"class":203}," RuntimeError",[144,103450,155],{"class":154},[144,103452,103453],{"class":259},"\"body red_box not found\"",[144,103455,161],{"class":154},[144,103457,103458,103460,103463,103465,103467],{"class":146,"line":2621},[144,103459,3131],{"class":150},[144,103461,103462],{"class":154}," site_id ",[144,103464,1065],{"class":150},[144,103466,4123],{"class":203},[144,103468,3769],{"class":154},[144,103470,103471,103473,103475,103477,103480],{"class":146,"line":2629},[144,103472,103445],{"class":150},[144,103474,103448],{"class":203},[144,103476,155],{"class":154},[144,103478,103479],{"class":259},"\"site box_center not found\"",[144,103481,161],{"class":154},[144,103483,103484],{"class":146,"line":2634},[144,103485,2430],{"emptyLinePlaceholder":72},[144,103487,103488,103490,103492,103494,103496,103498,103500],{"class":146,"line":2640},[144,103489,3231],{"class":150},[144,103491,101514],{"class":154},[144,103493,26056],{"class":150},[144,103495,32456],{"class":203},[144,103497,155],{"class":154},[144,103499,1752],{"class":203},[144,103501,30799],{"class":154},[144,103503,103504],{"class":146,"line":2646},[144,103505,101529],{"class":154},[144,103507,103508],{"class":146,"line":2651},[144,103509,2430],{"emptyLinePlaceholder":72},[144,103511,103512,103514,103516,103519],{"class":146,"line":7979},[144,103513,31312],{"class":203},[144,103515,155],{"class":154},[144,103517,103518],{"class":259},"\"simulation time:\"",[144,103520,101491],{"class":154},[144,103522,103523,103525,103527,103530],{"class":146,"line":8003},[144,103524,31312],{"class":203},[144,103526,155],{"class":154},[144,103528,103529],{"class":259},"\"box body position:\"",[144,103531,103532],{"class":154},", data.xpos[box_body_id].copy())\n",[144,103534,103535,103537,103539,103542],{"class":146,"line":8008},[144,103536,31312],{"class":203},[144,103538,155],{"class":154},[144,103540,103541],{"class":259},"\"site position:\"",[144,103543,103544],{"class":154},", data.site_xpos[site_id].copy())\n",[144,103546,103547,103549,103551,103554],{"class":146,"line":8014},[144,103548,31312],{"class":203},[144,103550,155],{"class":154},[144,103552,103553],{"class":259},"\"box qpos:\"",[144,103555,103556],{"class":154},", np.array(data.qpos))\n",[144,103558,103559],{"class":146,"line":8041},[144,103560,2430],{"emptyLinePlaceholder":72},[144,103562,103563],{"class":146,"line":8046},[144,103564,2430],{"emptyLinePlaceholder":72},[144,103566,103567,103569,103571,103573,103575],{"class":146,"line":8052},[144,103568,1561],{"class":150},[144,103570,31233],{"class":203},[144,103572,101572],{"class":150},[144,103574,101575],{"class":259},[144,103576,3769],{"class":154},[144,103578,103579],{"class":146,"line":8064},[144,103580,101582],{"class":154},[14,103582,103583],{},"保存为：",[135,103585,103587],{"className":23854,"code":103586,"language":23856,"meta":30,"style":30},"touch ch2_xml_basic.py\n",[141,103588,103589],{"__ignoreMap":30},[144,103590,103591,103593],{"class":146,"line":147},[144,103592,101296],{"class":1993},[144,103594,103595],{"class":259}," ch2_xml_basic.py\n",[14,103597,102314],{},[135,103599,103601],{"className":23854,"code":103600,"language":23856,"meta":30,"style":30},"python ch2_xml_basic.py\n",[141,103602,103603],{"__ignoreMap":30},[144,103604,103605,103607],{"class":146,"line":147},[144,103606,30393],{"class":1993},[144,103608,103595],{"class":259},[115,103610,101585],{"id":101585},[14,103612,103613],{},"用名字查找 body：",[135,103615,103617],{"className":30391,"code":103616,"language":30393,"meta":30,"style":30},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[141,103618,103619],{"__ignoreMap":30},[144,103620,103621,103624,103626,103628,103630],{"class":146,"line":147},[144,103622,103623],{"class":154},"box_body_id ",[144,103625,200],{"class":150},[144,103627,103403],{"class":154},[144,103629,103406],{"class":259},[144,103631,161],{"class":154},[14,103633,103634],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,103636,103637],{},"用名字查找 site：",[135,103639,103641],{"className":30391,"code":103640,"language":30393,"meta":30,"style":30},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[141,103642,103643],{"__ignoreMap":30},[144,103644,103645,103648,103650,103652,103654],{"class":146,"line":147},[144,103646,103647],{"class":154},"site_id ",[144,103649,200],{"class":150},[144,103651,103418],{"class":154},[144,103653,103421],{"class":259},[144,103655,161],{"class":154},[14,103657,103658,103659,103662,103663,103666],{},"注意第二个参数是对象类型。查 body 就用 ",[141,103660,103661],{},"mjOBJ_BODY","，查 site 就用 ",[141,103664,103665],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,103668,103669],{},"读取世界坐标：",[135,103671,103673],{"className":30391,"code":103672,"language":30393,"meta":30,"style":30},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[141,103674,103675,103680],{"__ignoreMap":30},[144,103676,103677],{"class":146,"line":147},[144,103678,103679],{"class":154},"data.xpos[box_body_id]\n",[144,103681,103682],{"class":146,"line":66},[144,103683,103684],{"class":154},"data.site_xpos[site_id]\n",[14,103686,103687,103690,103691,103694],{},[141,103688,103689],{},"xpos"," 是 body 的世界坐标，",[141,103692,103693],{},"site_xpos"," 是 site 的世界坐标。",[115,103696,101721],{"id":101721},[135,103698,103700],{"className":30391,"code":103699,"language":30393,"meta":30,"style":30},"import mujoco\nimport numpy as np\n",[141,103701,103702,103708],{"__ignoreMap":30},[144,103703,103704,103706],{"class":146,"line":147},[144,103705,30405],{"class":150},[144,103707,101314],{"class":154},[144,103709,103710,103712,103714,103716],{"class":146,"line":66},[144,103711,30405],{"class":150},[144,103713,31393],{"class":154},[144,103715,31396],{"class":150},[144,103717,31399],{"class":154},[14,103719,103720,103721,103724,103725,103728,103729,367,103732,28398],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[141,103722,103723],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[141,103726,103727],{},"as np"," 是习惯写法，后面就可以写 ",[141,103730,103731],{},"np.array(...)",[141,103733,103734],{},"np.round(...)",[135,103736,103737],{"className":30391,"code":101608,"language":30393,"meta":30,"style":30},[141,103738,103739,103747,103751],{"__ignoreMap":30},[144,103740,103741,103743,103745],{"class":146,"line":147},[144,103742,101327],{"class":203},[144,103744,13595],{"class":150},[144,103746,101332],{"class":259},[144,103748,103749],{"class":146,"line":66},[144,103750,101623],{"class":259},[144,103752,103753],{"class":146,"line":1210},[144,103754,95711],{"class":259},[14,103756,103757,103758,28398],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[141,103759,103760],{},"mujoco.MjModel.from_xml_string(XML)",[135,103762,103764],{"className":53080,"code":103763,"language":53082,"meta":30,"style":30},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[141,103765,103766],{"__ignoreMap":30},[144,103767,103768,103770,103772,103774,103776,103778,103780,103782,103785,103787,103789,103792,103794,103796,103799],{"class":146,"line":147},[144,103769,1065],{"class":154},[144,103771,103223],{"class":51313},[144,103773,14951],{"class":1993},[144,103775,200],{"class":154},[144,103777,103421],{"class":259},[144,103779,101119],{"class":1993},[144,103781,200],{"class":154},[144,103783,103784],{"class":259},"\"0 0 0\"",[144,103786,101149],{"class":1993},[144,103788,200],{"class":154},[144,103790,103791],{"class":259},"\"0.03\"",[144,103793,78780],{"class":1993},[144,103795,200],{"class":154},[144,103797,103798],{"class":259},"\"0 1 0 1\"",[144,103800,101157],{"class":154},[14,103802,103803,103805,103806,103809,103810,103812,103813,103816],{},[141,103804,103223],{}," 是标记点。",[141,103807,103808],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[141,103811,103183],{}," 表示显示出来的小球大小。",[141,103814,103815],{},"rgba=\"0 1 0 1\""," 表示绿色。",[135,103818,103819],{"className":30391,"code":103616,"language":30393,"meta":30,"style":30},[141,103820,103821],{"__ignoreMap":30},[144,103822,103823,103825,103827,103829,103831],{"class":146,"line":147},[144,103824,103623],{"class":154},[144,103826,200],{"class":150},[144,103828,103403],{"class":154},[144,103830,103406],{"class":259},[144,103832,161],{"class":154},[14,103834,103835,103836,103838],{},"这行的作用是：根据名字 ",[141,103837,103406],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,103840,103841],{},"拆开看：",[98,103843,103844,103850,103855,103861],{},[101,103845,103846,103849],{},[141,103847,103848],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[101,103851,103852,103854],{},[141,103853,102098],{}," 是被查询的模型。",[101,103856,103857,103860],{},[141,103858,103859],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[101,103862,103863,103865],{},[141,103864,103406],{}," 是 XML 里写的名字。",[135,103867,103868],{"className":30391,"code":103640,"language":30393,"meta":30,"style":30},[141,103869,103870],{"__ignoreMap":30},[144,103871,103872,103874,103876,103878,103880],{"class":146,"line":147},[144,103873,103647],{"class":154},[144,103875,200],{"class":150},[144,103877,103418],{"class":154},[144,103879,103421],{"class":259},[144,103881,161],{"class":154},[14,103883,103884,103885,28398],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[141,103886,103421],{},[135,103888,103890],{"className":30391,"code":103889,"language":30393,"meta":30,"style":30},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[141,103891,103892,103904],{"__ignoreMap":30},[144,103893,103894,103896,103898,103900,103902],{"class":146,"line":147},[144,103895,1561],{"class":150},[144,103897,103434],{"class":154},[144,103899,1065],{"class":150},[144,103901,4123],{"class":203},[144,103903,3769],{"class":154},[144,103905,103906,103909,103911,103913,103915],{"class":146,"line":66},[144,103907,103908],{"class":150},"    raise",[144,103910,103448],{"class":203},[144,103912,155],{"class":154},[144,103914,103453],{"class":259},[144,103916,161],{"class":154},[14,103918,103919,103921,103922,103925,103926,103929,103930,103933],{},[141,103920,1561],{}," 是条件判断。",[141,103923,103924],{},"mj_name2id"," 找不到对象时会返回 ",[141,103927,103928],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[141,103931,103932],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[135,103935,103937],{"className":30391,"code":103936,"language":30393,"meta":30,"style":30},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[141,103938,103939,103955],{"__ignoreMap":30},[144,103940,103941,103943,103945,103947,103949,103951,103953],{"class":146,"line":147},[144,103942,3055],{"class":150},[144,103944,101514],{"class":154},[144,103946,26056],{"class":150},[144,103948,32456],{"class":203},[144,103950,155],{"class":154},[144,103952,1752],{"class":203},[144,103954,30799],{"class":154},[144,103956,103957],{"class":146,"line":66},[144,103958,101712],{"class":154},[14,103960,103961],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[135,103963,103965],{"className":30391,"code":103964,"language":30393,"meta":30,"style":30},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[141,103966,103967],{"__ignoreMap":30},[144,103968,103969,103971,103973,103975],{"class":146,"line":147},[144,103970,30428],{"class":203},[144,103972,155],{"class":154},[144,103974,103529],{"class":259},[144,103976,103532],{"class":154},[14,103978,103979,103981,103982,103985],{},[141,103980,101092],{}," 保存所有 body 的世界坐标。",[141,103983,103984],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[135,103987,103989],{"className":30391,"code":103988,"language":30393,"meta":30,"style":30},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[141,103990,103991],{"__ignoreMap":30},[144,103992,103993,103995,103997,103999],{"class":146,"line":147},[144,103994,30428],{"class":203},[144,103996,155],{"class":154},[144,103998,103541],{"class":259},[144,104000,103544],{"class":154},[14,104002,104003,104006,104007,104009],{},[141,104004,104005],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[141,104008,102990],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[135,104011,104013],{"className":30391,"code":104012,"language":30393,"meta":30,"style":30},"print(\"box qpos:\", np.array(data.qpos))\n",[141,104014,104015],{"__ignoreMap":30},[144,104016,104017,104019,104021,104023],{"class":146,"line":147},[144,104018,30428],{"class":203},[144,104020,155],{"class":154},[144,104022,103553],{"class":259},[144,104024,103556],{"class":154},[14,104026,104027,104028,104031],{},"这里打印广义位置数组。",[141,104029,104030],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[18,104033,102329],{"id":102328},[14,104035,104036,104037,104040,104041,28398],{},"程序会输出 ",[141,104038,104039],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[141,104042,104043],{},"qpos",[14,104045,104046,104048,104049,104052,104053,104056],{},[141,104047,103984],{}," 是 body 的世界坐标位置。",[141,104050,104051],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[141,104054,104055],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104058,82235,104059,82543,104061,104063],{},[141,104060,102990],{},[141,104062,103808],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104065,104066],{},"如果你把 site 改成：",[135,104068,104070],{"className":53080,"code":104069,"language":53082,"meta":30,"style":30},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[141,104071,104072],{"__ignoreMap":30},[144,104073,104074,104076,104078,104080,104082,104085,104087,104089,104092,104094,104096,104098,104100,104102,104104],{"class":146,"line":147},[144,104075,1065],{"class":154},[144,104077,103223],{"class":51313},[144,104079,14951],{"class":1993},[144,104081,200],{"class":154},[144,104083,104084],{"class":259},"\"box_top\"",[144,104086,101119],{"class":1993},[144,104088,200],{"class":154},[144,104090,104091],{"class":259},"\"0 0 0.15\"",[144,104093,101149],{"class":1993},[144,104095,200],{"class":154},[144,104097,103791],{"class":259},[144,104099,78780],{"class":1993},[144,104101,200],{"class":154},[144,104103,103798],{"class":259},[144,104105,101157],{"class":154},[14,104107,104108,104109,104112],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[141,104110,104111],{},"site position"," 就会比 body position 的 z 坐标更高。",[18,104114,102361],{"id":102360},[98,104116,104117,104126,104129,104136,104142,104153],{},[101,104118,102424,104119,104121,104122,102427,104124,28398],{},[141,104120,102994],{}," 的初始高度从 ",[141,104123,372],{},[141,104125,232],{},[101,104127,104128],{},"重新运行程序。",[101,104130,104131,104132,104135],{},"观察 ",[141,104133,104134],{},"box qpos"," 和最终位置是否变化。",[101,104137,104138,104139,104141],{},"故意把 ",[141,104140,103223],{}," 名称改错，确认程序能报错。",[101,104143,102424,104144,104146,104147,102427,104149,104152],{},[141,104145,101133],{}," 的颜色 ",[141,104148,102045],{},[141,104150,104151],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[101,104154,102424,104155,82543,104157,102427,104160,104163,104164,104166],{},[141,104156,102990],{},[141,104158,104159],{},"pos",[141,104161,104162],{},"0 0 0.2","，观察 ",[141,104165,104111],{}," 如何变化。",[18,104168,102466],{"id":102465},[115,104170,104172],{"id":104171},"xml-error-schema-violation",[141,104173,104174],{},"XML Error: Schema violation",[14,104176,104177],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[115,104179,104181,81303,104183],{"id":104180},"mj_name2id-返回-1",[141,104182,103924],{},[141,104184,103928],{},[14,104186,104187,104188,104191],{},"说明名字没有找到。检查 XML 中 ",[141,104189,104190],{},"name=\"...\"","，并确认对象类型正确。",[115,104193,104194],{"id":104194},"物体不下落",[14,104196,102536],{},[98,104198,104199,104204,104209],{},[101,104200,104201,104202],{},"body 是否有 ",[141,104203,101633],{},[101,104205,104206,104207],{},"gravity 是否为 ",[141,104208,102602],{},[101,104210,104211,104212,104214],{},"body 是否被固定在 ",[141,104213,101854],{}," 中",[115,104216,104217],{"id":104217},"坐标看起来不符合预期",[14,104219,104220],{},"先区分两种坐标：",[292,104222,104223,104232],{},[295,104224,104225],{},[298,104226,104227,104230],{},[301,104228,104229],{"align":23768},"坐标",[301,104231,100713],{"align":23768},[339,104233,104234,104244],{},[298,104235,104236,104241],{},[344,104237,104238,104239],{"align":23768},"XML 里的 ",[141,104240,104159],{},[344,104242,104243],{"align":23768},"相对父 body 的局部坐标",[298,104245,104246,104252],{},[344,104247,104248,24991,104250],{"align":23768},[141,104249,101092],{},[141,104251,104005],{},[344,104253,104254],{"align":23768},"仿真更新后的世界坐标",[14,104256,104257,104258,104260,104261,82552,104264,104266],{},"如果你修改了 ",[141,104259,101083],{},"，但还没调用 ",[141,104262,104263],{},"mj_forward",[141,104265,101228],{},"，世界坐标可能还没有更新。",[18,104268,102620],{"id":102619},[14,104270,104271],{},"MJCF 建模先掌握四件事：",[98,104273,104274,104279,104284,104289],{},[101,104275,104276,104278],{},[141,104277,51813],{}," 表示刚体层级。",[101,104280,104281,104283],{},[141,104282,101133],{}," 表示形状、碰撞和质量。",[101,104285,104286,104288],{},[141,104287,102969],{}," 决定 body 能不能动、怎么动。",[101,104290,104291,104293],{},[141,104292,103223],{}," 用来标记关键点，方便 Python 读取位置。",[14,104295,104296],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5157,104298,104299],{},"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":30,"searchDepth":66,"depth":66,"links":104301},[104302,104303,104304,104310,104314,104315,104316,104323],{"id":100659,"depth":66,"text":100660},{"id":100782,"depth":66,"text":100783},{"id":101057,"depth":66,"text":101058,"children":104305},[104306,104307,104308,104309],{"id":102973,"depth":1210,"text":102973},{"id":103087,"depth":1210,"text":103087},{"id":103113,"depth":1210,"text":103114},{"id":103217,"depth":1210,"text":103218},{"id":101265,"depth":66,"text":101266,"children":104311},[104312,104313],{"id":101585,"depth":1210,"text":101585},{"id":101721,"depth":1210,"text":101721},{"id":102328,"depth":66,"text":102329},{"id":102360,"depth":66,"text":102361},{"id":102465,"depth":66,"text":102466,"children":104317},[104318,104319,104321,104322],{"id":104171,"depth":1210,"text":104174},{"id":104180,"depth":1210,"text":104320},"mj_name2id 返回 -1",{"id":104194,"depth":1210,"text":104194},{"id":104217,"depth":1210,"text":104217},{"id":102619,"depth":66,"text":102620},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102667,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104330,"title":104331,"body":104332,"description":30,"extension":70,"meta":105827,"navigation":72,"path":105828,"seo":105829,"stem":105830,"__hash__":105831},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104333,"toc":105799},[104334,104337,104339,104342,104345,104383,104386,104392,104395,104397,104399,104426,104428,104442,104444,104485,104487,104511,104513,104516,104525,104534,104537,104546,104554,104563,104566,104576,104579,104631,104638,104644,104652,104700,104703,104722,104725,104733,104737,104746,104779,104781,105129,105131,105143,105145,105156,105158,105161,105182,105188,105191,105216,105226,105229,105237,105240,105243,105264,105275,105277,105297,105300,105321,105330,105349,105355,105380,105383,105397,105404,105428,105431,105439,105448,105464,105476,105484,105493,105495,105498,105522,105527,105530,105552,105554,105593,105595,105602,105604,105612,105615,105618,105630,105671,105678,105689,105696,105699,105748,105751,105754,105760,105762,105767,105793,105796],[10,104335,104331],{"id":104336},"_3python-控制接口读取状态与推进仿真",[18,104338,100660],{"id":100659},[14,104340,104341],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104343,104344],{},"你将学习:",[98,104346,104347,104352,104357,104361,104366,104377],{},[101,104348,104349],{},[141,104350,104351],{},"MjModel.from_xml_string",[101,104353,104354],{},[141,104355,104356],{},"MjData(model)",[101,104358,104359],{},[141,104360,101228],{},[101,104362,104363],{},[141,104364,104365],{},"mj_resetData",[101,104367,104368,104369,367,104371,367,104374],{},"读取 ",[141,104370,104043],{},[141,104372,104373],{},"qvel",[141,104375,104376],{},"ctrl",[101,104378,104379,104380],{},"使用 ",[141,104381,104382],{},"model.opt.timestep",[14,104384,104385],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[135,104387,104390],{"className":104388,"code":104389,"language":5218,"meta":30},[5216],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[141,104391,104389],{"__ignoreMap":30},[14,104393,104394],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[18,104396,100783],{"id":100782},[14,104398,100786],{},[135,104400,104402],{"className":23854,"code":104401,"language":23856,"meta":30,"style":30},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[141,104403,104404],{"__ignoreMap":30},[144,104405,104406,104408,104410,104412,104414,104417,104419,104421,104423],{"class":146,"line":147},[144,104407,24589],{"class":1993},[144,104409,26328],{"class":259},[144,104411,23866],{"class":259},[144,104413,26413],{"class":203},[144,104415,104416],{"class":259}," python3",[144,104418,100811],{"class":259},[144,104420,102514],{"class":259},[144,104422,100827],{"class":259},[144,104424,104425],{"class":259}," glfw\n",[14,104427,102832],{},[135,104429,104430],{"className":23854,"code":100932,"language":23856,"meta":30,"style":30},[141,104431,104432],{"__ignoreMap":30},[144,104433,104434,104436,104438,104440],{"class":146,"line":147},[144,104435,23863],{"class":1993},[144,104437,23866],{"class":259},[144,104439,100943],{"class":259},[144,104441,100946],{"class":259},[14,104443,102849],{},[135,104445,104447],{"className":23854,"code":104446,"language":23856,"meta":30,"style":30},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[141,104448,104449,104466,104475],{"__ignoreMap":30},[144,104450,104451,104453,104455,104457,104460,104462,104464],{"class":146,"line":147},[144,104452,30343],{"class":1993},[144,104454,29189],{"class":259},[144,104456,25128],{"class":203},[144,104458,104459],{"class":259}," mujoco-python-api",[144,104461,100988],{"class":259},[144,104463,100991],{"class":203},[144,104465,100994],{"class":203},[144,104467,104468,104470,104472],{"class":146,"line":66},[144,104469,30343],{"class":1993},[144,104471,101001],{"class":259},[144,104473,104474],{"class":259}," mujoco-python-api\n",[144,104476,104477,104479,104481,104483],{"class":146,"line":1210},[144,104478,23863],{"class":1993},[144,104480,23866],{"class":259},[144,104482,100943],{"class":259},[144,104484,100946],{"class":259},[14,104486,101017],{},[98,104488,104489,104496,104505],{},[101,104490,104491,101031,104493,104495],{},[141,104492,100688],{},[141,104494,100693],{}," 是官方 Python bindings 的类名。",[101,104497,104498,104499,104502,104503,28398],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[141,104500,104501],{},"mjModel"," 在 Python 中是 ",[141,104504,100722],{},[101,104506,104507,104508,28398],{},"不要使用 ",[141,104509,104510],{},"sim = mujoco_py.MjSim(...)",[18,104512,101058],{"id":101057},[14,104514,104515],{},"仿真推进核心代码:",[135,104517,104519],{"className":30391,"code":104518,"language":30393,"meta":30,"style":30},"mujoco.mj_step(model, data)\n",[141,104520,104521],{"__ignoreMap":30},[144,104522,104523],{"class":146,"line":147},[144,104524,104518],{"class":154},[14,104526,104527,104528,367,104530,367,104532,28398],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[141,104529,101083],{},[141,104531,101086],{},[141,104533,101080],{},[14,104535,104536],{},"重置仿真:",[135,104538,104540],{"className":30391,"code":104539,"language":30393,"meta":30,"style":30},"mujoco.mj_resetData(model, data)\n",[141,104541,104542],{"__ignoreMap":30},[144,104543,104544],{"class":146,"line":147},[144,104545,104539],{"class":154},[14,104547,104548,104549,82552,104551,104553],{},"如果手动修改了 ",[141,104550,101083],{},[141,104552,101086],{},"，通常应调用:",[135,104555,104557],{"className":30391,"code":104556,"language":30393,"meta":30,"style":30},"mujoco.mj_forward(model, data)\n",[141,104558,104559],{"__ignoreMap":30},[144,104560,104561],{"class":146,"line":147},[144,104562,104556],{"class":154},[14,104564,104565],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[115,104567,104569,367,104571,367,104573,104575],{"id":104568},"qposqvelctrl-是什么",[141,104570,104043],{},[141,104572,104373],{},[141,104574,104376],{}," 是什么",[14,104577,104578],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[292,104580,104581,104593],{},[295,104582,104583],{},[298,104584,104585,104588,104590],{},[301,104586,104587],{"align":23768},"字段",[301,104589,100713],{"align":23768},[301,104591,104592],{"align":23768},"谁来修改",[339,104594,104595,104607,104619],{},[298,104596,104597,104601,104604],{},[344,104598,104599],{"align":23768},[141,104600,101083],{},[344,104602,104603],{"align":23768},"广义位置，例如小车位置、关节角、自由物体位置姿态",[344,104605,104606],{"align":23768},"MuJoCo 更新，也可以手动设置初始状态",[298,104608,104609,104613,104616],{},[344,104610,104611],{"align":23768},[141,104612,101086],{},[344,104614,104615],{"align":23768},"广义速度，例如小车速度、关节角速度",[344,104617,104618],{"align":23768},"MuJoCo 更新，也可以手动清零",[298,104620,104621,104625,104628],{},[344,104622,104623],{"align":23768},[141,104624,101089],{},[344,104626,104627],{"align":23768},"actuator 的控制输入",[344,104629,104630],{"align":23768},"主要由你的控制代码写入",[14,104632,9056,104633,101031,104635,104637],{},[141,104634,104043],{},[141,104636,104373],{}," 不一定同维。自由刚体就是典型例子：",[135,104639,104642],{"className":104640,"code":104641,"language":5218,"meta":30},[5216],"freejoint: qpos 7 维，qvel 6 维\n",[141,104643,104641],{"__ignoreMap":30},[115,104645,104647,101031,104649,104651],{"id":104646},"mj_step-和-mj_forward-的区别",[141,104648,101228],{},[141,104650,104263],{}," 的区别",[292,104653,104654,104667],{},[295,104655,104656],{},[298,104657,104658,104661,104664],{},[301,104659,104660],{"align":23768},"函数",[301,104662,104663],{"align":23768},"是否推进时间",[301,104665,104666],{"align":23768},"什么时候用",[339,104668,104669,104682],{},[298,104670,104671,104676,104679],{},[344,104672,104673],{"align":23768},[141,104674,104675],{},"mj_step(model, data)",[344,104677,104678],{"align":23768},"是",[344,104680,104681],{"align":23768},"正常仿真循环，每调用一次前进一步",[298,104683,104684,104689,104692],{},[344,104685,104686],{"align":23768},[141,104687,104688],{},"mj_forward(model, data)",[344,104690,104691],{"align":23768},"否",[344,104693,104694,104695,367,104697,104699],{"align":23768},"手动改了 ",[141,104696,104043],{},[141,104698,104373],{}," 后，刷新派生量",[14,104701,104702],{},"例如你写：",[135,104704,104706],{"className":30391,"code":104705,"language":30393,"meta":30,"style":30},"data.qpos[2] = 2.0\n",[141,104707,104708],{"__ignoreMap":30},[144,104709,104710,104713,104715,104717,104719],{"class":146,"line":147},[144,104711,104712],{"class":154},"data.qpos[",[144,104714,232],{"class":203},[144,104716,4473],{"class":154},[144,104718,200],{"class":150},[144,104720,104721],{"class":203}," 2.0\n",[14,104723,104724],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[135,104726,104727],{"className":30391,"code":104556,"language":30393,"meta":30,"style":30},[141,104728,104729],{"__ignoreMap":30},[144,104730,104731],{"class":146,"line":147},[144,104732,104556],{"class":154},[115,104734,104736],{"id":104735},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,104738,104739,104742,104743,104745],{},[141,104740,104741],{},"mujoco.mj_resetData(model, data)"," 会把 ",[141,104744,33414],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[135,104747,104749],{"className":30391,"code":104748,"language":30393,"meta":30,"style":30},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[141,104750,104751,104755,104765,104775],{"__ignoreMap":30},[144,104752,104753],{"class":146,"line":147},[144,104754,104539],{"class":154},[144,104756,104757,104760,104762],{"class":146,"line":66},[144,104758,104759],{"class":154},"data.qpos[:] ",[144,104761,200],{"class":150},[144,104763,104764],{"class":154}," random_qpos\n",[144,104766,104767,104770,104772],{"class":146,"line":1210},[144,104768,104769],{"class":154},"data.qvel[:] ",[144,104771,200],{"class":150},[144,104773,104774],{"class":203}," 0.0\n",[144,104776,104777],{"class":146,"line":1225},[144,104778,104556],{"class":154},[18,104780,101266],{"id":101265},[135,104782,104784],{"className":30391,"code":104783,"language":30393,"meta":30,"style":30},"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",[141,104785,104786,104792,104802,104806,104810,104818,104823,104827,104831,104835,104840,104844,104849,104854,104859,104863,104867,104871,104875,104879,104883,104902,104909,104921,104932,104948,104964,104968,104972,104984,104996,105004,105008,105019,105023,105039,105043,105047,105056,105060,105065,105074,105078,105091,105096,105105,105109,105113,105125],{"__ignoreMap":30},[144,104787,104788,104790],{"class":146,"line":147},[144,104789,30405],{"class":150},[144,104791,101314],{"class":154},[144,104793,104794,104796,104798,104800],{"class":146,"line":66},[144,104795,30405],{"class":150},[144,104797,31393],{"class":154},[144,104799,31396],{"class":150},[144,104801,31399],{"class":154},[144,104803,104804],{"class":146,"line":1210},[144,104805,2430],{"emptyLinePlaceholder":72},[144,104807,104808],{"class":146,"line":1225},[144,104809,2430],{"emptyLinePlaceholder":72},[144,104811,104812,104814,104816],{"class":146,"line":1231},[144,104813,101327],{"class":203},[144,104815,13595],{"class":150},[144,104817,101332],{"class":259},[144,104819,104820],{"class":146,"line":1245},[144,104821,104822],{"class":259},"\u003Cmujoco model=\"state_api\">\n",[144,104824,104825],{"class":146,"line":1251},[144,104826,101342],{"class":259},[144,104828,104829],{"class":146,"line":1342},[144,104830,2430],{"emptyLinePlaceholder":72},[144,104832,104833],{"class":146,"line":1348},[144,104834,101351],{"class":259},[144,104836,104837],{"class":146,"line":1360},[144,104838,104839],{"class":259},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[144,104841,104842],{"class":146,"line":1642},[144,104843,2430],{"emptyLinePlaceholder":72},[144,104845,104846],{"class":146,"line":1647},[144,104847,104848],{"class":259},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[144,104850,104851],{"class":146,"line":1653},[144,104852,104853],{"class":259},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[144,104855,104856],{"class":146,"line":1658},[144,104857,104858],{"class":259},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[144,104860,104861],{"class":146,"line":1672},[144,104862,101380],{"class":259},[144,104864,104865],{"class":146,"line":1677},[144,104866,101385],{"class":259},[144,104868,104869],{"class":146,"line":1683},[144,104870,101390],{"class":259},[144,104872,104873],{"class":146,"line":1704},[144,104874,95711],{"class":259},[144,104876,104877],{"class":146,"line":1709},[144,104878,2430],{"emptyLinePlaceholder":72},[144,104880,104881],{"class":146,"line":1723},[144,104882,2430],{"emptyLinePlaceholder":72},[144,104884,104885,104887,104890,104893,104895,104898,104900],{"class":146,"line":1728},[144,104886,31960],{"class":150},[144,104888,104889],{"class":1993}," print_state",[144,104891,104892],{"class":154},"(prefix: ",[144,104894,1330],{"class":203},[144,104896,104897],{"class":154},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[144,104899,95699],{"class":203},[144,104901,3769],{"class":154},[144,104903,104904,104906],{"class":146,"line":1757},[144,104905,31312],{"class":203},[144,104907,104908],{"class":154},"(prefix)\n",[144,104910,104911,104913,104915,104918],{"class":146,"line":1762},[144,104912,31312],{"class":203},[144,104914,155],{"class":154},[144,104916,104917],{"class":259},"\"  timestep:\"",[144,104919,104920],{"class":154},", model.opt.timestep)\n",[144,104922,104923,104925,104927,104930],{"class":146,"line":1779},[144,104924,31312],{"class":203},[144,104926,155],{"class":154},[144,104928,104929],{"class":259},"\"  time:\"",[144,104931,101491],{"class":154},[144,104933,104934,104936,104938,104941,104944,104946],{"class":146,"line":1784},[144,104935,31312],{"class":203},[144,104937,155],{"class":154},[144,104939,104940],{"class":259},"\"  qpos:\"",[144,104942,104943],{"class":154},", np.round(data.qpos.copy(), ",[144,104945,448],{"class":203},[144,104947,30510],{"class":154},[144,104949,104950,104952,104954,104957,104960,104962],{"class":146,"line":1789},[144,104951,31312],{"class":203},[144,104953,155],{"class":154},[144,104955,104956],{"class":259},"\"  qvel:\"",[144,104958,104959],{"class":154},", np.round(data.qvel.copy(), ",[144,104961,448],{"class":203},[144,104963,30510],{"class":154},[144,104965,104966],{"class":146,"line":1794},[144,104967,2430],{"emptyLinePlaceholder":72},[144,104969,104970],{"class":146,"line":1808},[144,104971,2430],{"emptyLinePlaceholder":72},[144,104973,104974,104976,104978,104980,104982],{"class":146,"line":1813},[144,104975,31960],{"class":150},[144,104977,2003],{"class":1993},[144,104979,101411],{"class":154},[144,104981,95699],{"class":203},[144,104983,3769],{"class":154},[144,104985,104986,104988,104990,104992,104994],{"class":146,"line":2607},[144,104987,101420],{"class":154},[144,104989,200],{"class":150},[144,104991,101425],{"class":154},[144,104993,101327],{"class":203},[144,104995,161],{"class":154},[144,104997,104998,105000,105002],{"class":146,"line":2621},[144,104999,101434],{"class":154},[144,105001,200],{"class":150},[144,105003,101439],{"class":154},[144,105005,105006],{"class":146,"line":2629},[144,105007,2430],{"emptyLinePlaceholder":72},[144,105009,105010,105013,105016],{"class":146,"line":2634},[144,105011,105012],{"class":154},"    print_state(",[144,105014,105015],{"class":259},"\"initial\"",[144,105017,105018],{"class":154},", model, data)\n",[144,105020,105021],{"class":146,"line":2640},[144,105022,2430],{"emptyLinePlaceholder":72},[144,105024,105025,105027,105029,105031,105033,105035,105037],{"class":146,"line":2646},[144,105026,3231],{"class":150},[144,105028,101514],{"class":154},[144,105030,26056],{"class":150},[144,105032,32456],{"class":203},[144,105034,155],{"class":154},[144,105036,811],{"class":203},[144,105038,30799],{"class":154},[144,105040,105041],{"class":146,"line":2651},[144,105042,101529],{"class":154},[144,105044,105045],{"class":146,"line":7979},[144,105046,2430],{"emptyLinePlaceholder":72},[144,105048,105049,105051,105054],{"class":146,"line":8003},[144,105050,105012],{"class":154},[144,105052,105053],{"class":259},"\"after 50 steps\"",[144,105055,105018],{"class":154},[144,105057,105058],{"class":146,"line":8008},[144,105059,2430],{"emptyLinePlaceholder":72},[144,105061,105062],{"class":146,"line":8014},[144,105063,105064],{"class":154},"    mujoco.mj_resetData(model, data)\n",[144,105066,105067,105069,105072],{"class":146,"line":8041},[144,105068,105012],{"class":154},[144,105070,105071],{"class":259},"\"after reset\"",[144,105073,105018],{"class":154},[144,105075,105076],{"class":146,"line":8046},[144,105077,2430],{"emptyLinePlaceholder":72},[144,105079,105080,105083,105085,105087,105089],{"class":146,"line":8052},[144,105081,105082],{"class":154},"    data.qpos[",[144,105084,232],{"class":203},[144,105086,4473],{"class":154},[144,105088,200],{"class":150},[144,105090,104721],{"class":203},[144,105092,105093],{"class":146,"line":8064},[144,105094,105095],{"class":154},"    mujoco.mj_forward(model, data)\n",[144,105097,105098,105100,105103],{"class":146,"line":8076},[144,105099,105012],{"class":154},[144,105101,105102],{"class":259},"\"after manual qpos edit\"",[144,105104,105018],{"class":154},[144,105106,105107],{"class":146,"line":8088},[144,105108,2430],{"emptyLinePlaceholder":72},[144,105110,105111],{"class":146,"line":9747},[144,105112,2430],{"emptyLinePlaceholder":72},[144,105114,105115,105117,105119,105121,105123],{"class":146,"line":9772},[144,105116,1561],{"class":150},[144,105118,31233],{"class":203},[144,105120,101572],{"class":150},[144,105122,101575],{"class":259},[144,105124,3769],{"class":154},[144,105126,105127],{"class":146,"line":9795},[144,105128,101582],{"class":154},[14,105130,103583],{},[135,105132,105134],{"className":23854,"code":105133,"language":23856,"meta":30,"style":30},"touch ch3_python_state.py\n",[141,105135,105136],{"__ignoreMap":30},[144,105137,105138,105140],{"class":146,"line":147},[144,105139,101296],{"class":1993},[144,105141,105142],{"class":259}," ch3_python_state.py\n",[14,105144,102314],{},[135,105146,105148],{"className":23854,"code":105147,"language":23856,"meta":30,"style":30},"python ch3_python_state.py\n",[141,105149,105150],{"__ignoreMap":30},[144,105151,105152,105154],{"class":146,"line":147},[144,105153,30393],{"class":1993},[144,105155,105142],{"class":259},[115,105157,101585],{"id":101585},[14,105159,105160],{},"打印状态的函数：",[135,105162,105164],{"className":30391,"code":105163,"language":30393,"meta":30,"style":30},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[141,105165,105166],{"__ignoreMap":30},[144,105167,105168,105170,105172,105174,105176,105178,105180],{"class":146,"line":147},[144,105169,31960],{"class":150},[144,105171,104889],{"class":1993},[144,105173,104892],{"class":154},[144,105175,1330],{"class":203},[144,105177,104897],{"class":154},[144,105179,95699],{"class":203},[144,105181,3769],{"class":154},[14,105183,105184,105185,105187],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[141,105186,33414],{}," 里发生了什么。",[14,105189,105190],{},"推进 50 步：",[135,105192,105194],{"className":30391,"code":105193,"language":30393,"meta":30,"style":30},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[141,105195,105196,105212],{"__ignoreMap":30},[144,105197,105198,105200,105202,105204,105206,105208,105210],{"class":146,"line":147},[144,105199,3055],{"class":150},[144,105201,101514],{"class":154},[144,105203,26056],{"class":150},[144,105205,32456],{"class":203},[144,105207,155],{"class":154},[144,105209,811],{"class":203},[144,105211,30799],{"class":154},[144,105213,105214],{"class":146,"line":66},[144,105215,101712],{"class":154},[14,105217,105218,105219,105222,105223,105225],{},"由于 ",[141,105220,105221],{},"timestep=0.01","，所以 50 步后时间约为 ",[141,105224,35342],{}," 秒。",[14,105227,105228],{},"重置：",[135,105230,105231],{"className":30391,"code":104539,"language":30393,"meta":30,"style":30},[141,105232,105233],{"__ignoreMap":30},[144,105234,105235],{"class":146,"line":147},[144,105236,104539],{"class":154},[14,105238,105239],{},"这会把时间、位置、速度恢复到初始状态。",[14,105241,105242],{},"手动改高度：",[135,105244,105246],{"className":30391,"code":105245,"language":30393,"meta":30,"style":30},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[141,105247,105248,105260],{"__ignoreMap":30},[144,105249,105250,105252,105254,105256,105258],{"class":146,"line":147},[144,105251,104712],{"class":154},[144,105253,232],{"class":203},[144,105255,4473],{"class":154},[144,105257,200],{"class":150},[144,105259,104721],{"class":203},[144,105261,105262],{"class":146,"line":66},[144,105263,104556],{"class":154},[14,105265,105266,105267,105270,105271,105274],{},"这个例子里 ",[141,105268,105269],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[141,105272,105273],{},"2.0"," 表示把小球放到更高的位置。",[115,105276,101721],{"id":101721},[135,105278,105279],{"className":30391,"code":105163,"language":30393,"meta":30,"style":30},[141,105280,105281],{"__ignoreMap":30},[144,105282,105283,105285,105287,105289,105291,105293,105295],{"class":146,"line":147},[144,105284,31960],{"class":150},[144,105286,104889],{"class":1993},[144,105288,104892],{"class":154},[144,105290,1330],{"class":203},[144,105292,104897],{"class":154},[144,105294,95699],{"class":203},[144,105296,3769],{"class":154},[14,105298,105299],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[98,105301,105302,105311,105316],{},[101,105303,105304,105307,105308,105310],{},[141,105305,105306],{},"prefix","：一段文字，比如 ",[141,105309,105015],{},"，用来说明现在打印的是哪个阶段。",[101,105312,105313,105315],{},[141,105314,102098],{},"：MuJoCo 模型。",[101,105317,105318,105320],{},[141,105319,33414],{},"：MuJoCo 当前状态。",[14,105322,105323,367,105326,105329],{},[141,105324,105325],{},"prefix: str",[141,105327,105328],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[135,105331,105333],{"className":30391,"code":105332,"language":30393,"meta":30,"style":30},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[141,105334,105335],{"__ignoreMap":30},[144,105336,105337,105339,105341,105343,105345,105347],{"class":146,"line":147},[144,105338,30428],{"class":203},[144,105340,155],{"class":154},[144,105342,104940],{"class":259},[144,105344,104943],{"class":154},[144,105346,448],{"class":203},[144,105348,30510],{"class":154},[14,105350,105351,105354],{},[141,105352,105353],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[135,105356,105358],{"className":30391,"code":105357,"language":30393,"meta":30,"style":30},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[141,105359,105360,105372],{"__ignoreMap":30},[144,105361,105362,105364,105366,105368,105370],{"class":146,"line":147},[144,105363,101647],{"class":154},[144,105365,200],{"class":150},[144,105367,101425],{"class":154},[144,105369,101327],{"class":203},[144,105371,161],{"class":154},[144,105373,105374,105376,105378],{"class":146,"line":66},[144,105375,101671],{"class":154},[144,105377,200],{"class":150},[144,105379,101439],{"class":154},[14,105381,105382],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[135,105384,105386],{"className":30391,"code":105385,"language":30393,"meta":30,"style":30},"print_state(\"initial\", model, data)\n",[141,105387,105388],{"__ignoreMap":30},[144,105389,105390,105393,105395],{"class":146,"line":147},[144,105391,105392],{"class":154},"print_state(",[144,105394,105015],{"class":259},[144,105396,105018],{"class":154},[14,105398,105399,105400,105403],{},"调用刚才定义的 ",[141,105401,105402],{},"print_state"," 函数，打印初始状态。",[135,105405,105406],{"className":30391,"code":105193,"language":30393,"meta":30,"style":30},[141,105407,105408,105424],{"__ignoreMap":30},[144,105409,105410,105412,105414,105416,105418,105420,105422],{"class":146,"line":147},[144,105411,3055],{"class":150},[144,105413,101514],{"class":154},[144,105415,26056],{"class":150},[144,105417,32456],{"class":203},[144,105419,155],{"class":154},[144,105421,811],{"class":203},[144,105423,30799],{"class":154},[144,105425,105426],{"class":146,"line":66},[144,105427,101712],{"class":154},[14,105429,105430],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[135,105432,105433],{"className":30391,"code":104539,"language":30393,"meta":30,"style":30},[141,105434,105435],{"__ignoreMap":30},[144,105436,105437],{"class":146,"line":147},[144,105438,104539],{"class":154},[14,105440,105441,105442,105444,105445,105447],{},"重置 ",[141,105443,33414],{},"。注意它不会重新创建 ",[141,105446,102098],{},"，因为模型结构没有变，只是状态回到初始值。",[135,105449,105450],{"className":30391,"code":104705,"language":30393,"meta":30,"style":30},[141,105451,105452],{"__ignoreMap":30},[144,105453,105454,105456,105458,105460,105462],{"class":146,"line":147},[144,105455,104712],{"class":154},[144,105457,232],{"class":203},[144,105459,4473],{"class":154},[144,105461,200],{"class":150},[144,105463,104721],{"class":203},[14,105465,105466,105467,367,105470,367,105473,105475],{},"这行是“手动改状态”。在 freejoint 中，",[141,105468,105469],{},"qpos[0]",[141,105471,105472],{},"qpos[1]",[141,105474,105269],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[135,105477,105478],{"className":30391,"code":104556,"language":30393,"meta":30,"style":30},[141,105479,105480],{"__ignoreMap":30},[144,105481,105482],{"class":146,"line":147},[144,105483,104556],{"class":154},[14,105485,105486,105487,105489,105490,105492],{},"手动改完 ",[141,105488,104043],{}," 后，调用 ",[141,105491,104263],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[18,105494,102329],{"id":102328},[14,105496,105497],{},"你会看到:",[98,105499,105500,105505,105510,105513],{},[101,105501,105502,105503],{},"初始时间为 ",[141,105504,346],{},[101,105506,105507,105508],{},"50 步后时间约为 ",[141,105509,35342],{},[101,105511,105512],{},"reset 后状态恢复",[101,105514,105515,105516,105519,105520],{},"手动修改 ",[141,105517,105518],{},"data.qpos[2]"," 后，小球高度变为 ",[141,105521,105273],{},[14,105523,105524,105526],{},[141,105525,105269],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,105528,105529],{},"输出里可以重点看三件事：",[98,105531,105532,105540,105545],{},[101,105533,105534,105536,105537,105539],{},[141,105535,2417],{}," 是否随着 ",[141,105538,101228],{}," 增加。",[101,105541,105542,105544],{},[141,105543,104043],{}," 的 z 坐标是否因为下落而变化。",[101,105546,105547,105549,105550,28398],{},[141,105548,104365],{}," 后时间是否回到 ",[141,105551,346],{},[18,105553,102361],{"id":102360},[98,105555,105556,105562,105568,105574,105577,105586],{},[101,105557,105558,105559,28398],{},"修改 timestep 为 ",[141,105560,105561],{},"0.005",[101,105563,105564,105565,28398],{},"重新运行，检查 50 步后时间是否约为 ",[141,105566,105567],{},"0.25",[101,105569,105570,105571,28398],{},"修改重力为 ",[141,105572,105573],{},"0 0 -1.0",[101,105575,105576],{},"观察小球下降速度是否变慢。",[101,105578,102424,105579,102427,105582,105585],{},[141,105580,105581],{},"data.qpos[2] = 2.0",[141,105583,105584],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[101,105587,105588,105589,105592],{},"注释掉 ",[141,105590,105591],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[18,105594,102466],{"id":102465},[115,105596,105598,105599,105601],{"id":105597},"修改-dataqpos-后位置没有更新","修改 ",[141,105600,101083],{}," 后位置没有更新",[14,105603,102475],{},[135,105605,105606],{"className":30391,"code":104556,"language":30393,"meta":30,"style":30},[141,105607,105608],{"__ignoreMap":30},[144,105609,105610],{"class":146,"line":147},[144,105611,104556],{"class":154},[115,105613,105614],{"id":105614},"数组维度看不懂",[14,105616,105617],{},"打印模型维度:",[135,105619,105621],{"className":30391,"code":105620,"language":30393,"meta":30,"style":30},"print(model.nq, model.nv, model.nu)\n",[141,105622,105623],{"__ignoreMap":30},[144,105624,105625,105627],{"class":146,"line":147},[144,105626,30428],{"class":203},[144,105628,105629],{"class":154},"(model.nq, model.nv, model.nu)\n",[292,105631,105632,105640],{},[295,105633,105634],{},[298,105635,105636,105638],{},[301,105637,104587],{"align":23768},[301,105639,100713],{"align":23768},[339,105641,105642,105652,105662],{},[298,105643,105644,105649],{},[344,105645,105646],{"align":23768},[141,105647,105648],{},"nq",[344,105650,105651],{"align":23768},"位置变量数量",[298,105653,105654,105659],{},[344,105655,105656],{"align":23768},[141,105657,105658],{},"nv",[344,105660,105661],{"align":23768},"速度变量数量",[298,105663,105664,105668],{},[344,105665,105666],{"align":23768},[141,105667,102175],{},[344,105669,105670],{"align":23768},"控制输入数量",[115,105672,105674,105675,105677],{"id":105673},"误以为-qpos-一定等于关节数","误以为 ",[141,105676,104043],{}," 一定等于关节数",[14,105679,105680,105681,82543,105683,105685,105686,105688],{},"不是。例如 ",[141,105682,101633],{},[141,105684,104043],{}," 是 7 维，但 ",[141,105687,104373],{}," 是 6 维。",[115,105690,105692,105693,105695],{"id":105691},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[141,105694,104043],{}," 的第几位",[14,105697,105698],{},"初学时可以先打印：",[135,105700,105702],{"className":30391,"code":105701,"language":30393,"meta":30,"style":30},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[141,105703,105704,105714,105724,105736],{"__ignoreMap":30},[144,105705,105706,105708,105710,105712],{"class":146,"line":147},[144,105707,30428],{"class":203},[144,105709,155],{"class":154},[144,105711,101452],{"class":259},[144,105713,101455],{"class":154},[144,105715,105716,105718,105720,105722],{"class":146,"line":66},[144,105717,30428],{"class":203},[144,105719,155],{"class":154},[144,105721,101464],{"class":259},[144,105723,101467],{"class":154},[144,105725,105726,105728,105730,105733],{"class":146,"line":1210},[144,105727,30428],{"class":203},[144,105729,155],{"class":154},[144,105731,105732],{"class":259},"\"qpos:\"",[144,105734,105735],{"class":154},", data.qpos)\n",[144,105737,105738,105740,105742,105745],{"class":146,"line":1225},[144,105739,30428],{"class":203},[144,105741,155],{"class":154},[144,105743,105744],{"class":259},"\"qvel:\"",[144,105746,105747],{"class":154},", data.qvel)\n",[14,105749,105750],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[115,105752,105753],{"id":105753},"仿真结果每次都一样",[14,105755,105756,105757,105759],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[141,105758,104043],{},"、目标点或控制输入。",[18,105761,102620],{"id":102619},[14,105763,105764,105765,24631],{},"Python 控制 MuJoCo 的核心就是读写 ",[141,105766,33414],{},[98,105768,105769,105777,105782,105787],{},[101,105770,105771,105772,101031,105774,105776],{},"用 ",[141,105773,101083],{},[141,105775,101086],{}," 读取状态。",[101,105778,105771,105779,105781],{},[141,105780,101089],{}," 写入控制。",[101,105783,105771,105784,105786],{},[141,105785,101228],{}," 推进时间。",[101,105788,105789,105790,105792],{},"手动改状态后用 ",[141,105791,104263],{}," 刷新派生量。",[14,105794,105795],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5157,105797,105798],{},"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":30,"searchDepth":66,"depth":66,"links":105800},[105801,105802,105803,105810,105814,105815,105816,105826],{"id":100659,"depth":66,"text":100660},{"id":100782,"depth":66,"text":100783},{"id":101057,"depth":66,"text":101058,"children":105804},[105805,105807,105809],{"id":104568,"depth":1210,"text":105806},"qpos、qvel、ctrl 是什么",{"id":104646,"depth":1210,"text":105808},"mj_step 和 mj_forward 的区别",{"id":104735,"depth":1210,"text":104736},{"id":101265,"depth":66,"text":101266,"children":105811},[105812,105813],{"id":101585,"depth":1210,"text":101585},{"id":101721,"depth":1210,"text":101721},{"id":102328,"depth":66,"text":102329},{"id":102360,"depth":66,"text":102361},{"id":102465,"depth":66,"text":102466,"children":105817},[105818,105820,105821,105823,105825],{"id":105597,"depth":1210,"text":105819},"修改 data.qpos 后位置没有更新",{"id":105614,"depth":1210,"text":105614},{"id":105673,"depth":1210,"text":105822},"误以为 qpos 一定等于关节数",{"id":105691,"depth":1210,"text":105824},"不知道某个元素在 qpos 的第几位",{"id":105753,"depth":1210,"text":105753},{"id":102619,"depth":66,"text":102620},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104331,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105833,"title":105834,"body":105835,"description":30,"extension":70,"meta":107525,"navigation":72,"path":107526,"seo":107527,"stem":107528,"__hash__":107529},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105836,"toc":107501},[105837,105840,105842,105845,105847,105872,105875,105894,105897,105899,105901,105925,105927,105941,105943,105984,105986,106010,106012,106015,106049,106051,106064,106067,106135,106144,106148,106151,106185,106191,106194,106198,106237,106240,106260,106264,106307,106309,106338,106341,106347,106350,106352,106746,106748,106760,106762,106773,106775,106778,106807,106815,106818,106853,106856,106858,106866,106869,106871,106882,106892,106912,106915,106951,106963,107011,107030,107072,107085,107113,107118,107139,107149,107167,107170,107204,107207,107227,107230,107249,107255,107257,107260,107266,107272,107282,107285,107291,107300,107302,107348,107350,107356,107362,107365,107368,107388,107391,107397,107403,107405,107428,107431,107434,107443,107446,107484,107486,107489,107495,107498],[10,105838,105834],{"id":105839},"_4关节actuator-与力控制",[18,105841,100660],{"id":100659},[14,105843,105844],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,105846,104344],{},[98,105848,105849,105855,105860,105864,105869],{},[101,105850,105851,105854],{},[141,105852,105853],{},"hinge"," 关节",[101,105856,105857],{},[141,105858,105859],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[101,105861,105862],{},[141,105863,101089],{},[101,105865,105866],{},[141,105867,105868],{},"ctrlrange",[101,105870,105871],{},"读取关节角和角速度",[14,105873,105874],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[135,105876,105878],{"className":30391,"code":105877,"language":30393,"meta":30,"style":30},"data.ctrl[0] = ...\n",[141,105879,105880],{"__ignoreMap":30},[144,105881,105882,105885,105887,105889,105891],{"class":146,"line":147},[144,105883,105884],{"class":154},"data.ctrl[",[144,105886,346],{"class":203},[144,105888,4473],{"class":154},[144,105890,200],{"class":150},[144,105892,105893],{"class":203}," ...\n",[14,105895,105896],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[18,105898,100783],{"id":100782},[14,105900,100786],{},[135,105902,105903],{"className":23854,"code":104401,"language":23856,"meta":30,"style":30},[141,105904,105905],{"__ignoreMap":30},[144,105906,105907,105909,105911,105913,105915,105917,105919,105921,105923],{"class":146,"line":147},[144,105908,24589],{"class":1993},[144,105910,26328],{"class":259},[144,105912,23866],{"class":259},[144,105914,26413],{"class":203},[144,105916,104416],{"class":259},[144,105918,100811],{"class":259},[144,105920,102514],{"class":259},[144,105922,100827],{"class":259},[144,105924,104425],{"class":259},[14,105926,102832],{},[135,105928,105929],{"className":23854,"code":100932,"language":23856,"meta":30,"style":30},[141,105930,105931],{"__ignoreMap":30},[144,105932,105933,105935,105937,105939],{"class":146,"line":147},[144,105934,23863],{"class":1993},[144,105936,23866],{"class":259},[144,105938,100943],{"class":259},[144,105940,100946],{"class":259},[14,105942,102849],{},[135,105944,105946],{"className":23854,"code":105945,"language":23856,"meta":30,"style":30},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[141,105947,105948,105965,105974],{"__ignoreMap":30},[144,105949,105950,105952,105954,105956,105959,105961,105963],{"class":146,"line":147},[144,105951,30343],{"class":1993},[144,105953,29189],{"class":259},[144,105955,25128],{"class":203},[144,105957,105958],{"class":259}," mujoco-control",[144,105960,100988],{"class":259},[144,105962,100991],{"class":203},[144,105964,100994],{"class":203},[144,105966,105967,105969,105971],{"class":146,"line":66},[144,105968,30343],{"class":1993},[144,105970,101001],{"class":259},[144,105972,105973],{"class":259}," mujoco-control\n",[144,105975,105976,105978,105980,105982],{"class":146,"line":1210},[144,105977,23863],{"class":1993},[144,105979,23866],{"class":259},[144,105981,100943],{"class":259},[144,105983,100946],{"class":259},[14,105985,101017],{},[98,105987,105988,105994,106001,106007],{},[101,105989,105990,105993],{},[141,105991,105992],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[101,105995,105996,105998,105999,28398],{},[141,105997,101089],{}," 长度等于 ",[141,106000,102171],{},[101,106002,82235,106003,106006],{},[141,106004,106005],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[101,106008,106009],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[18,106011,101058],{"id":101057},[14,106013,106014],{},"关节决定 body 如何运动:",[135,106016,106018],{"className":53080,"code":106017,"language":53082,"meta":30,"style":30},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[141,106019,106020],{"__ignoreMap":30},[144,106021,106022,106024,106026,106028,106030,106033,106035,106037,106039,106042,106044,106047],{"class":146,"line":147},[144,106023,1065],{"class":154},[144,106025,102969],{"class":51313},[144,106027,14951],{"class":1993},[144,106029,200],{"class":154},[144,106031,106032],{"class":259},"\"hinge\"",[144,106034,53837],{"class":1993},[144,106036,200],{"class":154},[144,106038,106032],{"class":259},[144,106040,106041],{"class":1993}," axis",[144,106043,200],{"class":154},[144,106045,106046],{"class":259},"\"0 1 0\"",[144,106048,101157],{"class":154},[14,106050,103065],{},[98,106052,106053,106058,106061],{},[101,106054,106055,106056],{},"名字是 ",[141,106057,105853],{},[101,106059,106060],{},"类型是旋转关节",[101,106062,106063],{},"绕 y 轴旋转",[14,106065,106066],{},"actuator 决定如何施加控制:",[135,106068,106070],{"className":53080,"code":106069,"language":53082,"meta":30,"style":30},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[141,106071,106072,106081,106127],{"__ignoreMap":30},[144,106073,106074,106076,106079],{"class":146,"line":147},[144,106075,1065],{"class":154},[144,106077,106078],{"class":51313},"actuator",[144,106080,51320],{"class":154},[144,106082,106083,106085,106088,106090,106092,106095,106098,106100,106102,106105,106107,106109,106112,106114,106117,106120,106122,106125],{"class":146,"line":66},[144,106084,52157],{"class":154},[144,106086,106087],{"class":51313},"motor",[144,106089,14951],{"class":1993},[144,106091,200],{"class":154},[144,106093,106094],{"class":259},"\"hinge_motor\"",[144,106096,106097],{"class":1993}," joint",[144,106099,200],{"class":154},[144,106101,106032],{"class":259},[144,106103,106104],{"class":1993}," gear",[144,106106,200],{"class":154},[144,106108,3708],{"class":259},[144,106110,106111],{"class":1993}," ctrlrange",[144,106113,200],{"class":154},[144,106115,106116],{"class":259},"\"-2 2\"",[144,106118,106119],{"class":1993}," ctrllimited",[144,106121,200],{"class":154},[144,106123,106124],{"class":259},"\"true\"",[144,106126,101157],{"class":154},[144,106128,106129,106131,106133],{"class":146,"line":1210},[144,106130,51798],{"class":154},[144,106132,106078],{"class":51313},[144,106134,51320],{"class":154},[14,106136,106137,106140,106141,28398],{},[141,106138,106139],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[141,106142,106143],{},"[-2, 2]",[115,106145,106147],{"id":106146},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106149,106150],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[292,106152,106153,106163],{},[295,106154,106155],{},[298,106156,106157,106159,106161],{},[301,106158,25766],{"align":23768},[301,106160,102709],{"align":23768},[301,106162,100747],{"align":23768},[339,106164,106165,106175],{},[298,106166,106167,106169,106172],{},[344,106168,102969],{"align":23768},[344,106170,106171],{"align":23768},"定义能怎么动",[344,106173,106174],{"align":23768},"门轴允许门旋转",[298,106176,106177,106179,106182],{},[344,106178,106078],{"align":23768},[344,106180,106181],{"align":23768},"定义怎么施力或控制",[344,106183,106184],{"align":23768},"人推门、马达带动门",[14,106186,106187,106188,106190],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[141,106189,101089],{}," 主动控制它。",[14,106192,106193],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[115,106195,106197],{"id":106196},"hinge-joint","hinge joint",[135,106199,106201],{"className":53080,"code":106200,"language":53082,"meta":30,"style":30},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[141,106202,106203],{"__ignoreMap":30},[144,106204,106205,106207,106209,106211,106213,106215,106217,106219,106221,106223,106225,106227,106230,106232,106235],{"class":146,"line":147},[144,106206,1065],{"class":154},[144,106208,102969],{"class":51313},[144,106210,14951],{"class":1993},[144,106212,200],{"class":154},[144,106214,106032],{"class":259},[144,106216,53837],{"class":1993},[144,106218,200],{"class":154},[144,106220,106032],{"class":259},[144,106222,106041],{"class":1993},[144,106224,200],{"class":154},[144,106226,106046],{"class":259},[144,106228,106229],{"class":1993}," damping",[144,106231,200],{"class":154},[144,106233,106234],{"class":259},"\"0.1\"",[144,106236,101157],{"class":154},[14,106238,106239],{},"含义：",[98,106241,106242,106248,106254],{},[101,106243,106244,106247],{},[141,106245,106246],{},"type=\"hinge\"","：只能绕一个轴旋转。",[101,106249,106250,106253],{},[141,106251,106252],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[101,106255,106256,106259],{},[141,106257,106258],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[115,106261,106263],{"id":106262},"motor-actuator","motor actuator",[135,106265,106267],{"className":53080,"code":106266,"language":53082,"meta":30,"style":30},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[141,106268,106269],{"__ignoreMap":30},[144,106270,106271,106273,106275,106277,106279,106281,106283,106285,106287,106289,106291,106293,106295,106297,106299,106301,106303,106305],{"class":146,"line":147},[144,106272,1065],{"class":154},[144,106274,106087],{"class":51313},[144,106276,14951],{"class":1993},[144,106278,200],{"class":154},[144,106280,106094],{"class":259},[144,106282,106097],{"class":1993},[144,106284,200],{"class":154},[144,106286,106032],{"class":259},[144,106288,106104],{"class":1993},[144,106290,200],{"class":154},[144,106292,3708],{"class":259},[144,106294,106111],{"class":1993},[144,106296,200],{"class":154},[144,106298,106116],{"class":259},[144,106300,106119],{"class":1993},[144,106302,200],{"class":154},[144,106304,106124],{"class":259},[144,106306,101157],{"class":154},[14,106308,106239],{},[98,106310,106311,106320,106326,106332],{},[101,106312,106313,106316,106317,106319],{},[141,106314,106315],{},"joint=\"hinge\"","：这个电机作用在名为 ",[141,106318,105853],{}," 的关节上。",[101,106321,106322,106325],{},[141,106323,106324],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[101,106327,106328,106331],{},[141,106329,106330],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[101,106333,106334,106337],{},[141,106335,106336],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106339,106340],{},"简单理解：",[135,106342,106345],{"className":106343,"code":106344,"language":5218,"meta":30},[5216],"实际施加效果 ≈ data.ctrl[0] * gear\n",[141,106346,106344],{"__ignoreMap":30},[14,106348,106349],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[18,106351,101266],{"id":101265},[135,106353,106355],{"className":30391,"code":106354,"language":30393,"meta":30,"style":30},"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",[141,106356,106357,106364,106368,106374,106384,106388,106392,106400,106405,106410,106414,106418,106423,106428,106432,106437,106442,106447,106452,106456,106460,106464,106469,106474,106479,106483,106487,106491,106495,106507,106519,106527,106531,106541,106551,106561,106565,106578,106591,106595,106612,106626,106661,106665,106669,106680,106695,106710,106722,106726,106730,106742],{"__ignoreMap":30},[144,106358,106359,106361],{"class":146,"line":147},[144,106360,30405],{"class":150},[144,106362,106363],{"class":154}," math\n",[144,106365,106366],{"class":146,"line":66},[144,106367,2430],{"emptyLinePlaceholder":72},[144,106369,106370,106372],{"class":146,"line":1210},[144,106371,30405],{"class":150},[144,106373,101314],{"class":154},[144,106375,106376,106378,106380,106382],{"class":146,"line":1225},[144,106377,30405],{"class":150},[144,106379,31393],{"class":154},[144,106381,31396],{"class":150},[144,106383,31399],{"class":154},[144,106385,106386],{"class":146,"line":1231},[144,106387,2430],{"emptyLinePlaceholder":72},[144,106389,106390],{"class":146,"line":1245},[144,106391,2430],{"emptyLinePlaceholder":72},[144,106393,106394,106396,106398],{"class":146,"line":1251},[144,106395,101327],{"class":203},[144,106397,13595],{"class":150},[144,106399,101332],{"class":259},[144,106401,106402],{"class":146,"line":1342},[144,106403,106404],{"class":259},"\u003Cmujoco model=\"one_link_motor\">\n",[144,106406,106407],{"class":146,"line":1348},[144,106408,106409],{"class":259},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[144,106411,106412],{"class":146,"line":1360},[144,106413,2430],{"emptyLinePlaceholder":72},[144,106415,106416],{"class":146,"line":1642},[144,106417,101351],{"class":259},[144,106419,106420],{"class":146,"line":1647},[144,106421,106422],{"class":259},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[144,106424,106425],{"class":146,"line":1653},[144,106426,106427],{"class":259},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[144,106429,106430],{"class":146,"line":1658},[144,106431,2430],{"emptyLinePlaceholder":72},[144,106433,106434],{"class":146,"line":1672},[144,106435,106436],{"class":259},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[144,106438,106439],{"class":146,"line":1677},[144,106440,106441],{"class":259},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[144,106443,106444],{"class":146,"line":1683},[144,106445,106446],{"class":259},"        \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",[144,106448,106449],{"class":146,"line":1704},[144,106450,106451],{"class":259},"      \u003C\u002Fbody>\n",[144,106453,106454],{"class":146,"line":1709},[144,106455,101380],{"class":259},[144,106457,106458],{"class":146,"line":1723},[144,106459,101385],{"class":259},[144,106461,106462],{"class":146,"line":1728},[144,106463,2430],{"emptyLinePlaceholder":72},[144,106465,106466],{"class":146,"line":1757},[144,106467,106468],{"class":259},"  \u003Cactuator>\n",[144,106470,106471],{"class":146,"line":1762},[144,106472,106473],{"class":259},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[144,106475,106476],{"class":146,"line":1779},[144,106477,106478],{"class":259},"  \u003C\u002Factuator>\n",[144,106480,106481],{"class":146,"line":1784},[144,106482,101390],{"class":259},[144,106484,106485],{"class":146,"line":1789},[144,106486,95711],{"class":259},[144,106488,106489],{"class":146,"line":1794},[144,106490,2430],{"emptyLinePlaceholder":72},[144,106492,106493],{"class":146,"line":1808},[144,106494,2430],{"emptyLinePlaceholder":72},[144,106496,106497,106499,106501,106503,106505],{"class":146,"line":1813},[144,106498,31960],{"class":150},[144,106500,2003],{"class":1993},[144,106502,101411],{"class":154},[144,106504,95699],{"class":203},[144,106506,3769],{"class":154},[144,106508,106509,106511,106513,106515,106517],{"class":146,"line":2607},[144,106510,101420],{"class":154},[144,106512,200],{"class":150},[144,106514,101425],{"class":154},[144,106516,101327],{"class":203},[144,106518,161],{"class":154},[144,106520,106521,106523,106525],{"class":146,"line":2621},[144,106522,101434],{"class":154},[144,106524,200],{"class":150},[144,106526,101439],{"class":154},[144,106528,106529],{"class":146,"line":2629},[144,106530,2430],{"emptyLinePlaceholder":72},[144,106532,106533,106535,106537,106539],{"class":146,"line":2634},[144,106534,31312],{"class":203},[144,106536,155],{"class":154},[144,106538,101452],{"class":259},[144,106540,101455],{"class":154},[144,106542,106543,106545,106547,106549],{"class":146,"line":2640},[144,106544,31312],{"class":203},[144,106546,155],{"class":154},[144,106548,101464],{"class":259},[144,106550,101467],{"class":154},[144,106552,106553,106555,106557,106559],{"class":146,"line":2646},[144,106554,31312],{"class":203},[144,106556,155],{"class":154},[144,106558,101476],{"class":259},[144,106560,101479],{"class":154},[144,106562,106563],{"class":146,"line":2651},[144,106564,2430],{"emptyLinePlaceholder":72},[144,106566,106567,106569,106572,106574,106576],{"class":146,"line":7979},[144,106568,3131],{"class":150},[144,106570,106571],{"class":154}," model.nu ",[144,106573,20979],{"class":150},[144,106575,25131],{"class":203},[144,106577,3769],{"class":154},[144,106579,106580,106582,106584,106586,106589],{"class":146,"line":8003},[144,106581,103445],{"class":150},[144,106583,103448],{"class":203},[144,106585,155],{"class":154},[144,106587,106588],{"class":259},"\"expected exactly one actuator\"",[144,106590,161],{"class":154},[144,106592,106593],{"class":146,"line":8008},[144,106594,2430],{"emptyLinePlaceholder":72},[144,106596,106597,106599,106601,106603,106605,106607,106610],{"class":146,"line":8014},[144,106598,3231],{"class":150},[144,106600,31629],{"class":154},[144,106602,26056],{"class":150},[144,106604,32456],{"class":203},[144,106606,155],{"class":154},[144,106608,106609],{"class":203},"2000",[144,106611,30799],{"class":154},[144,106613,106614,106617,106619,106621,106623],{"class":146,"line":8041},[144,106615,106616],{"class":154},"        t ",[144,106618,200],{"class":150},[144,106620,31629],{"class":154},[144,106622,610],{"class":150},[144,106624,106625],{"class":154}," model.opt.timestep\n",[144,106627,106628,106631,106633,106635,106637,106640,106642,106645,106647,106649,106652,106654,106656,106658],{"class":146,"line":8046},[144,106629,106630],{"class":154},"        data.ctrl[",[144,106632,346],{"class":203},[144,106634,4473],{"class":154},[144,106636,200],{"class":150},[144,106638,106639],{"class":203}," 1.5",[144,106641,6549],{"class":150},[144,106643,106644],{"class":154}," math.sin(",[144,106646,105273],{"class":203},[144,106648,6549],{"class":150},[144,106650,106651],{"class":154}," math.pi ",[144,106653,610],{"class":150},[144,106655,61880],{"class":203},[144,106657,6549],{"class":150},[144,106659,106660],{"class":154}," t)\n",[144,106662,106663],{"class":146,"line":8052},[144,106664,101529],{"class":154},[144,106666,106667],{"class":146,"line":8064},[144,106668,2430],{"emptyLinePlaceholder":72},[144,106670,106671,106673,106675,106678],{"class":146,"line":8076},[144,106672,31312],{"class":203},[144,106674,155],{"class":154},[144,106676,106677],{"class":259},"\"time:\"",[144,106679,101491],{"class":154},[144,106681,106682,106684,106686,106689,106691,106693],{"class":146,"line":8088},[144,106683,31312],{"class":203},[144,106685,155],{"class":154},[144,106687,106688],{"class":259},"\"joint qpos:\"",[144,106690,104943],{"class":154},[144,106692,448],{"class":203},[144,106694,30510],{"class":154},[144,106696,106697,106699,106701,106704,106706,106708],{"class":146,"line":9747},[144,106698,31312],{"class":203},[144,106700,155],{"class":154},[144,106702,106703],{"class":259},"\"joint qvel:\"",[144,106705,104959],{"class":154},[144,106707,448],{"class":203},[144,106709,30510],{"class":154},[144,106711,106712,106714,106716,106719],{"class":146,"line":9772},[144,106713,31312],{"class":203},[144,106715,155],{"class":154},[144,106717,106718],{"class":259},"\"last ctrl:\"",[144,106720,106721],{"class":154},", data.ctrl.copy())\n",[144,106723,106724],{"class":146,"line":9795},[144,106725,2430],{"emptyLinePlaceholder":72},[144,106727,106728],{"class":146,"line":9819},[144,106729,2430],{"emptyLinePlaceholder":72},[144,106731,106732,106734,106736,106738,106740],{"class":146,"line":9824},[144,106733,1561],{"class":150},[144,106735,31233],{"class":203},[144,106737,101572],{"class":150},[144,106739,101575],{"class":259},[144,106741,3769],{"class":154},[144,106743,106744],{"class":146,"line":9829},[144,106745,101582],{"class":154},[14,106747,103583],{},[135,106749,106751],{"className":23854,"code":106750,"language":23856,"meta":30,"style":30},"touch ch4_joint_motor.py\n",[141,106752,106753],{"__ignoreMap":30},[144,106754,106755,106757],{"class":146,"line":147},[144,106756,101296],{"class":1993},[144,106758,106759],{"class":259}," ch4_joint_motor.py\n",[14,106761,102314],{},[135,106763,106765],{"className":23854,"code":106764,"language":23856,"meta":30,"style":30},"python ch4_joint_motor.py\n",[141,106766,106767],{"__ignoreMap":30},[144,106768,106769,106771],{"class":146,"line":147},[144,106770,30393],{"class":1993},[144,106772,106759],{"class":259},[115,106774,101585],{"id":101585},[14,106776,106777],{},"检查 actuator 数量：",[135,106779,106781],{"className":30391,"code":106780,"language":30393,"meta":30,"style":30},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[141,106782,106783,106795],{"__ignoreMap":30},[144,106784,106785,106787,106789,106791,106793],{"class":146,"line":147},[144,106786,1561],{"class":150},[144,106788,106571],{"class":154},[144,106790,20979],{"class":150},[144,106792,25131],{"class":203},[144,106794,3769],{"class":154},[144,106796,106797,106799,106801,106803,106805],{"class":146,"line":66},[144,106798,103908],{"class":150},[144,106800,103448],{"class":203},[144,106802,155],{"class":154},[144,106804,106588],{"class":259},[144,106806,161],{"class":154},[14,106808,106809,106811,106812,106814],{},[141,106810,102171],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[141,106813,101089],{}," 长度应该是 1。",[14,106816,106817],{},"产生正弦控制信号：",[135,106819,106821],{"className":30391,"code":106820,"language":30393,"meta":30,"style":30},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[141,106822,106823],{"__ignoreMap":30},[144,106824,106825,106827,106829,106831,106833,106835,106837,106839,106841,106843,106845,106847,106849,106851],{"class":146,"line":147},[144,106826,105884],{"class":154},[144,106828,346],{"class":203},[144,106830,4473],{"class":154},[144,106832,200],{"class":150},[144,106834,106639],{"class":203},[144,106836,6549],{"class":150},[144,106838,106644],{"class":154},[144,106840,105273],{"class":203},[144,106842,6549],{"class":150},[144,106844,106651],{"class":154},[144,106846,610],{"class":150},[144,106848,61880],{"class":203},[144,106850,6549],{"class":150},[144,106852,106660],{"class":154},[14,106854,106855],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,106857,101686],{},[135,106859,106860],{"className":30391,"code":104518,"language":30393,"meta":30,"style":30},[141,106861,106862],{"__ignoreMap":30},[144,106863,106864],{"class":146,"line":147},[144,106865,104518],{"class":154},[14,106867,106868],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[115,106870,101721],{"id":101721},[135,106872,106874],{"className":30391,"code":106873,"language":30393,"meta":30,"style":30},"import math\n",[141,106875,106876],{"__ignoreMap":30},[144,106877,106878,106880],{"class":146,"line":147},[144,106879,30405],{"class":150},[144,106881,106363],{"class":154},[14,106883,106884,106885,101031,106888,106891],{},"导入 Python 标准库里的数学模块。后面要用 ",[141,106886,106887],{},"math.sin",[141,106889,106890],{},"math.pi"," 生成周期变化的控制信号。",[135,106893,106894],{"className":30391,"code":103699,"language":30393,"meta":30,"style":30},[141,106895,106896,106902],{"__ignoreMap":30},[144,106897,106898,106900],{"class":146,"line":147},[144,106899,30405],{"class":150},[144,106901,101314],{"class":154},[144,106903,106904,106906,106908,106910],{"class":146,"line":66},[144,106905,30405],{"class":150},[144,106907,31393],{"class":154},[144,106909,31396],{"class":150},[144,106911,31399],{"class":154},[14,106913,106914],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[135,106916,106917],{"className":53080,"code":106200,"language":53082,"meta":30,"style":30},[141,106918,106919],{"__ignoreMap":30},[144,106920,106921,106923,106925,106927,106929,106931,106933,106935,106937,106939,106941,106943,106945,106947,106949],{"class":146,"line":147},[144,106922,1065],{"class":154},[144,106924,102969],{"class":51313},[144,106926,14951],{"class":1993},[144,106928,200],{"class":154},[144,106930,106032],{"class":259},[144,106932,53837],{"class":1993},[144,106934,200],{"class":154},[144,106936,106032],{"class":259},[144,106938,106041],{"class":1993},[144,106940,200],{"class":154},[144,106942,106046],{"class":259},[144,106944,106229],{"class":1993},[144,106946,200],{"class":154},[144,106948,106234],{"class":259},[144,106950,101157],{"class":154},[14,106952,106953,106954,106956,106957,106959,106960,106962],{},"这行定义关节。",[141,106955,105853],{}," 表示旋转关节。",[141,106958,106252],{}," 表示绕 y 轴旋转。",[141,106961,106258],{}," 表示有一点阻尼，运动不会完全无损耗。",[135,106964,106966],{"className":53080,"code":106965,"language":53082,"meta":30,"style":30},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[141,106967,106968],{"__ignoreMap":30},[144,106969,106970,106972,106974,106976,106978,106981,106983,106985,106988,106991,106993,106996,106998,107000,107002,107004,107006,107009],{"class":146,"line":147},[144,106971,1065],{"class":154},[144,106973,101133],{"class":51313},[144,106975,14951],{"class":1993},[144,106977,200],{"class":154},[144,106979,106980],{"class":259},"\"link_geom\"",[144,106982,53837],{"class":1993},[144,106984,200],{"class":154},[144,106986,106987],{"class":259},"\"capsule\"",[144,106989,106990],{"class":1993}," fromto",[144,106992,200],{"class":154},[144,106994,106995],{"class":259},"\"0 0 0 0 0 0.5\"",[144,106997,101149],{"class":1993},[144,106999,200],{"class":154},[144,107001,103791],{"class":259},[144,107003,102014],{"class":1993},[144,107005,200],{"class":154},[144,107007,107008],{"class":259},"\"0.5\"",[144,107010,101157],{"class":154},[14,107012,107013,107014,107016,107017,107019,107020,107023,107024,28398,107027,107029],{},"这行定义摆杆的形状。",[141,107015,103178],{}," 是胶囊体，适合表示杆子。",[141,107018,103189],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[141,107021,107022],{},"(0,0,0)"," 延伸到 ",[141,107025,107026],{},"(0,0,0.5)",[141,107028,103183],{}," 是半径。",[135,107031,107032],{"className":53080,"code":106266,"language":53082,"meta":30,"style":30},[141,107033,107034],{"__ignoreMap":30},[144,107035,107036,107038,107040,107042,107044,107046,107048,107050,107052,107054,107056,107058,107060,107062,107064,107066,107068,107070],{"class":146,"line":147},[144,107037,1065],{"class":154},[144,107039,106087],{"class":51313},[144,107041,14951],{"class":1993},[144,107043,200],{"class":154},[144,107045,106094],{"class":259},[144,107047,106097],{"class":1993},[144,107049,200],{"class":154},[144,107051,106032],{"class":259},[144,107053,106104],{"class":1993},[144,107055,200],{"class":154},[144,107057,3708],{"class":259},[144,107059,106111],{"class":1993},[144,107061,200],{"class":154},[144,107063,106116],{"class":259},[144,107065,106119],{"class":1993},[144,107067,200],{"class":154},[144,107069,106124],{"class":259},[144,107071,101157],{"class":154},[14,107073,107074,107075,107077,107078,107081,107082,107084],{},"这行定义电机。它作用在 ",[141,107076,105853],{}," 关节上。",[141,107079,107080],{},"gear"," 可以理解成放大倍数。",[141,107083,105868],{}," 限制控制输入范围。",[135,107086,107087],{"className":30391,"code":106780,"language":30393,"meta":30,"style":30},[141,107088,107089,107101],{"__ignoreMap":30},[144,107090,107091,107093,107095,107097,107099],{"class":146,"line":147},[144,107092,1561],{"class":150},[144,107094,106571],{"class":154},[144,107096,20979],{"class":150},[144,107098,25131],{"class":203},[144,107100,3769],{"class":154},[144,107102,107103,107105,107107,107109,107111],{"class":146,"line":66},[144,107104,103908],{"class":150},[144,107106,103448],{"class":203},[144,107108,155],{"class":154},[144,107110,106588],{"class":259},[144,107112,161],{"class":154},[14,107114,107115,107117],{},[141,107116,102171],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[135,107119,107121],{"className":30391,"code":107120,"language":30393,"meta":30,"style":30},"for step in range(2000):\n",[141,107122,107123],{"__ignoreMap":30},[144,107124,107125,107127,107129,107131,107133,107135,107137],{"class":146,"line":147},[144,107126,3055],{"class":150},[144,107128,31629],{"class":154},[144,107130,26056],{"class":150},[144,107132,32456],{"class":203},[144,107134,155],{"class":154},[144,107136,106609],{"class":203},[144,107138,30799],{"class":154},[14,107140,107141,107142,107144,107145,107148],{},"循环 2000 步。这里没有用 ",[141,107143,1147],{},"，而是用 ",[141,107146,107147],{},"step","，因为后面要用当前步数计算时间。",[135,107150,107152],{"className":30391,"code":107151,"language":30393,"meta":30,"style":30},"t = step * model.opt.timestep\n",[141,107153,107154],{"__ignoreMap":30},[144,107155,107156,107159,107161,107163,107165],{"class":146,"line":147},[144,107157,107158],{"class":154},"t ",[144,107160,200],{"class":150},[144,107162,31629],{"class":154},[144,107164,610],{"class":150},[144,107166,106625],{"class":154},[14,107168,107169],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[135,107171,107172],{"className":30391,"code":106820,"language":30393,"meta":30,"style":30},[141,107173,107174],{"__ignoreMap":30},[144,107175,107176,107178,107180,107182,107184,107186,107188,107190,107192,107194,107196,107198,107200,107202],{"class":146,"line":147},[144,107177,105884],{"class":154},[144,107179,346],{"class":203},[144,107181,4473],{"class":154},[144,107183,200],{"class":150},[144,107185,106639],{"class":203},[144,107187,6549],{"class":150},[144,107189,106644],{"class":154},[144,107191,105273],{"class":203},[144,107193,6549],{"class":150},[144,107195,106651],{"class":154},[144,107197,610],{"class":150},[144,107199,61880],{"class":203},[144,107201,6549],{"class":150},[144,107203,106660],{"class":154},[14,107205,107206],{},"这行给电机输入一个正弦波。拆开看：",[98,107208,107209,107215,107221],{},[101,107210,107211,107214],{},[141,107212,107213],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[101,107216,107217,107220],{},[141,107218,107219],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[101,107222,107223,107226],{},[141,107224,107225],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107228,107229],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[135,107231,107233],{"className":30391,"code":107232,"language":30393,"meta":30,"style":30},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[141,107234,107235],{"__ignoreMap":30},[144,107236,107237,107239,107241,107243,107245,107247],{"class":146,"line":147},[144,107238,30428],{"class":203},[144,107240,155],{"class":154},[144,107242,106688],{"class":259},[144,107244,104943],{"class":154},[144,107246,448],{"class":203},[144,107248,30510],{"class":154},[14,107250,107251,107252,107254],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[141,107253,101083],{}," 只有一个数。",[18,107256,102329],{"id":102328},[14,107258,107259],{},"输出类似:",[135,107261,107264],{"className":107262,"code":107263,"language":5218,"meta":30},[5216],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[141,107265,107263],{"__ignoreMap":30},[14,107267,107268,107269,107271],{},"这里 ",[141,107270,106139],{}," 是电机输入。",[14,107273,107274,107277,107278,107281],{},[141,107275,107276],{},"joint qpos"," 是关节角度，单位通常是弧度。",[141,107279,107280],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107283,107284],{},"角度单位提示：",[135,107286,107289],{"className":107287,"code":107288,"language":5218,"meta":30},[5216],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[141,107290,107288],{"__ignoreMap":30},[14,107292,107293,107294,107296,107297,107299],{},"如果你看到 ",[141,107295,104043],{}," 是 ",[141,107298,35342],{},"，大约就是 28.6 度。",[18,107301,102361],{"id":102360},[98,107303,107304,107311,107314,107321,107324,107332,107340],{},[101,107305,102424,107306,102427,107308,28398],{},[141,107307,106324],{},[141,107309,107310],{},"gear=\"5\"",[101,107312,107313],{},"重新运行，观察关节运动是否更剧烈。",[101,107315,102424,107316,102427,107318,28398],{},[141,107317,105868],{},[141,107319,107320],{},"-0.2 0.2",[101,107322,107323],{},"重新运行，观察控制能力是否变弱。",[101,107325,107326,107327,107329,107330,28398],{},"去掉 actuator，确认 ",[141,107328,102171],{}," 变成 ",[141,107331,346],{},[101,107333,102424,107334,102427,107336,107339],{},[141,107335,106258],{},[141,107337,107338],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[101,107341,102424,107342,102427,107344,107347],{},[141,107343,106252],{},[141,107345,107346],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[18,107349,102466],{"id":102465},[115,107351,107353],{"id":107352},"indexerror-index-0-is-out-of-bounds",[141,107354,107355],{},"IndexError: index 0 is out of bounds",[14,107357,107358,107359,107361],{},"原因是 ",[141,107360,106005],{},"，没有 actuator。",[115,107363,107364],{"id":107364},"关节几乎不动",[14,107366,107367],{},"可能原因:",[98,107369,107370,107375,107379,107385],{},[101,107371,107372,107374],{},[141,107373,107080],{}," 太小",[101,107376,107377,107374],{},[141,107378,105868],{},[101,107380,107381,107384],{},[141,107382,107383],{},"damping"," 太大",[101,107386,107387],{},"重力方向导致运动不明显",[115,107389,107390],{"id":107390},"模型编译失败",[14,107392,107393,107394,107396],{},"检查 actuator 引用的 ",[141,107395,106315],{}," 是否存在，joint 名称是否拼写一致。",[115,107398,107400,107402],{"id":107399},"datactrl0-写了但没有效果",[141,107401,106139],{}," 写了但没有效果",[14,107404,102588],{},[98,107406,107407,107412,107415,107420,107425],{},[101,107408,107409,107411],{},[141,107410,102171],{}," 是否大于 0。",[101,107413,107414],{},"motor 是否引用了正确 joint。",[101,107416,107417,107419],{},[141,107418,107080],{}," 是否太小。",[101,107421,107422,107424],{},[141,107423,105868],{}," 是否把输入限制得太小。",[101,107426,107427],{},"body 是否真的有可动 joint。",[115,107429,107430],{"id":107430},"控制输入超过范围会怎样",[14,107432,107433],{},"如果设置了：",[135,107435,107437],{"className":53080,"code":107436,"language":53082,"meta":30,"style":30},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[141,107438,107439],{"__ignoreMap":30},[144,107440,107441],{"class":146,"line":147},[144,107442,107436],{"class":154},[14,107444,107445],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[135,107447,107449],{"className":30391,"code":107448,"language":30393,"meta":30,"style":30},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[141,107450,107451,107471],{"__ignoreMap":30},[144,107452,107453,107456,107458,107461,107463,107465,107467,107469],{"class":146,"line":147},[144,107454,107455],{"class":154},"action ",[144,107457,200],{"class":150},[144,107459,107460],{"class":154}," np.clip(action, ",[144,107462,687],{"class":150},[144,107464,105273],{"class":203},[144,107466,12466],{"class":154},[144,107468,105273],{"class":203},[144,107470,161],{"class":154},[144,107472,107473,107475,107477,107479,107481],{"class":146,"line":66},[144,107474,105884],{"class":154},[144,107476,346],{"class":203},[144,107478,4473],{"class":154},[144,107480,200],{"class":150},[144,107482,107483],{"class":154}," action\n",[18,107485,102620],{"id":102619},[14,107487,107488],{},"这一章建立了控制任务的基本形式：",[135,107490,107493],{"className":107491,"code":107492,"language":5218,"meta":30},[5216],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[141,107494,107492],{"__ignoreMap":30},[14,107496,107497],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5157,107499,107500],{},"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":30,"searchDepth":66,"depth":66,"links":107502},[107503,107504,107505,107510,107514,107515,107516,107524],{"id":100659,"depth":66,"text":100660},{"id":100782,"depth":66,"text":100783},{"id":101057,"depth":66,"text":101058,"children":107506},[107507,107508,107509],{"id":106146,"depth":1210,"text":106147},{"id":106196,"depth":1210,"text":106197},{"id":106262,"depth":1210,"text":106263},{"id":101265,"depth":66,"text":101266,"children":107511},[107512,107513],{"id":101585,"depth":1210,"text":101585},{"id":101721,"depth":1210,"text":101721},{"id":102328,"depth":66,"text":102329},{"id":102360,"depth":66,"text":102361},{"id":102465,"depth":66,"text":102466,"children":107517},[107518,107519,107520,107521,107523],{"id":107352,"depth":1210,"text":107355},{"id":107364,"depth":1210,"text":107364},{"id":107390,"depth":1210,"text":107390},{"id":107399,"depth":1210,"text":107522},"data.ctrl[0] 写了但没有效果",{"id":107430,"depth":1210,"text":107430},{"id":102619,"depth":66,"text":102620},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105834,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107531,"title":107532,"body":107533,"description":30,"extension":70,"meta":109442,"navigation":72,"path":109443,"seo":109444,"stem":109445,"__hash__":109446},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107534,"toc":109418},[107535,107538,107540,107543,107551,107554,107571,107574,107599,107602,107648,107650,107652,107707,107709,107728,107730,107773,107776,107793,107796,107812,107822,107829,107831,107834,107837,107871,107874,107922,107926,107929,107943,107952,107956,107959,107984,107987,107991,108004,108007,108013,108016,108031,108033,108036,108296,108298,108310,108313,108625,108627,108639,108641,108644,108659,108664,108667,108689,108692,108695,108729,108732,108736,108747,108750,108767,108770,108784,108791,108811,108818,108832,108835,108847,108862,108882,108885,108907,108910,108914,108929,108940,108955,108958,108988,109004,109033,109041,109065,109068,109086,109096,109108,109115,109124,109130,109139,109142,109144,109153,109156,109171,109173,109176,109187,109190,109201,109204,109222,109224,109241,109244,109272,109274,109278,109281,109311,109317,109320,109324,109332,109335,109337,109358,109361,109364,109380,109383,109399,109401,109404,109415],[10,107536,107532],{"id":107537},"_5viewer-可视化与-renderer-离屏渲染",[18,107539,100660],{"id":100659},[14,107541,107542],{},"本章掌握两类可视化方式:",[98,107544,107545,107548],{},[101,107546,107547],{},"交互式 viewer: 适合人工观察仿真",[101,107549,107550],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,107552,107553],{},"使用官方接口:",[135,107555,107557],{"className":30391,"code":107556,"language":30393,"meta":30,"style":30},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[141,107558,107559,107566],{"__ignoreMap":30},[144,107560,107561,107563],{"class":146,"line":147},[144,107562,30405],{"class":150},[144,107564,107565],{"class":154}," mujoco.viewer\n",[144,107567,107568],{"class":146,"line":66},[144,107569,107570],{"class":154},"mujoco.viewer.launch_passive(model, data)\n",[14,107572,107573],{},"以及:",[135,107575,107577],{"className":30391,"code":107576,"language":30393,"meta":30,"style":30},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[141,107578,107579,107589],{"__ignoreMap":30},[144,107580,107581,107584,107586],{"class":146,"line":147},[144,107582,107583],{"class":154},"renderer ",[144,107585,200],{"class":150},[144,107587,107588],{"class":154}," mujoco.Renderer(model)\n",[144,107590,107591,107594,107596],{"class":146,"line":66},[144,107592,107593],{"class":154},"image ",[144,107595,200],{"class":150},[144,107597,107598],{"class":154}," renderer.render()\n",[14,107600,107601],{},"新手建议先理解二者区别：",[292,107603,107604,107620],{},[295,107605,107606],{},[298,107607,107608,107611,107614,107617],{},[301,107609,107610],{"align":23768},"工具",[301,107612,107613],{"align":23768},"用途",[301,107615,107616],{"align":23768},"是否打开窗口",[301,107618,107619],{"align":23768},"常见场景",[339,107621,107622,107635],{},[298,107623,107624,107627,107630,107632],{},[344,107625,107626],{"align":23768},"Viewer",[344,107628,107629],{"align":23768},"人眼实时观察仿真",[344,107631,104678],{"align":23768},[344,107633,107634],{"align":23768},"调试模型、看控制效果",[298,107636,107637,107640,107643,107645],{},[344,107638,107639],{"align":23768},"Renderer",[344,107641,107642],{"align":23768},"生成图像数组",[344,107644,104691],{"align":23768},[344,107646,107647],{"align":23768},"保存图片、训练视觉策略、服务器批量采集",[18,107649,100783],{"id":100782},[14,107651,100786],{},[135,107653,107655],{"className":23854,"code":107654,"language":23856,"meta":30,"style":30},"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",[141,107656,107657,107669,107679,107687,107695],{"__ignoreMap":30},[144,107658,107659,107661,107663,107665,107667],{"class":146,"line":147},[144,107660,24589],{"class":1993},[144,107662,26328],{"class":259},[144,107664,23866],{"class":259},[144,107666,26413],{"class":203},[144,107668,24691],{"class":203},[144,107670,107671,107673,107675,107677],{"class":146,"line":66},[144,107672,100821],{"class":259},[144,107674,100824],{"class":259},[144,107676,100827],{"class":259},[144,107678,24691],{"class":203},[144,107680,107681,107683,107685],{"class":146,"line":1210},[144,107682,100834],{"class":259},[144,107684,100837],{"class":259},[144,107686,24691],{"class":203},[144,107688,107689,107691,107693],{"class":146,"line":1225},[144,107690,100844],{"class":259},[144,107692,100847],{"class":259},[144,107694,24691],{"class":203},[144,107696,107697,107699,107701,107703,107705],{"class":146,"line":1231},[144,107698,100854],{"class":259},[144,107700,100857],{"class":259},[144,107702,100860],{"class":259},[144,107704,100863],{"class":259},[144,107706,102529],{"class":259},[14,107708,102832],{},[135,107710,107712],{"className":23854,"code":107711,"language":23856,"meta":30,"style":30},"pip install \"mujoco>=2.3\" numpy pillow\n",[141,107713,107714],{"__ignoreMap":30},[144,107715,107716,107718,107720,107722,107725],{"class":146,"line":147},[144,107717,23863],{"class":1993},[144,107719,23866],{"class":259},[144,107721,100943],{"class":259},[144,107723,107724],{"class":259}," numpy",[144,107726,107727],{"class":259}," pillow\n",[14,107729,102849],{},[135,107731,107733],{"className":23854,"code":107732,"language":23856,"meta":30,"style":30},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[141,107734,107735,107752,107761],{"__ignoreMap":30},[144,107736,107737,107739,107741,107743,107746,107748,107750],{"class":146,"line":147},[144,107738,30343],{"class":1993},[144,107740,29189],{"class":259},[144,107742,25128],{"class":203},[144,107744,107745],{"class":259}," mujoco-render",[144,107747,100988],{"class":259},[144,107749,100991],{"class":203},[144,107751,100994],{"class":203},[144,107753,107754,107756,107758],{"class":146,"line":66},[144,107755,30343],{"class":1993},[144,107757,101001],{"class":259},[144,107759,107760],{"class":259}," mujoco-render\n",[144,107762,107763,107765,107767,107769,107771],{"class":146,"line":1210},[144,107764,23863],{"class":1993},[144,107766,23866],{"class":259},[144,107768,100943],{"class":259},[144,107770,107724],{"class":259},[144,107772,107727],{"class":259},[14,107774,107775],{},"离屏渲染后端:",[135,107777,107779],{"className":23854,"code":107778,"language":23856,"meta":30,"style":30},"export MUJOCO_GL=egl\n",[141,107780,107781],{"__ignoreMap":30},[144,107782,107783,107785,107788,107790],{"class":146,"line":147},[144,107784,25055],{"class":150},[144,107786,107787],{"class":154}," MUJOCO_GL",[144,107789,200],{"class":150},[144,107791,107792],{"class":154},"egl\n",[14,107794,107795],{},"或:",[135,107797,107799],{"className":23854,"code":107798,"language":23856,"meta":30,"style":30},"export MUJOCO_GL=osmesa\n",[141,107800,107801],{"__ignoreMap":30},[144,107802,107803,107805,107807,107809],{"class":146,"line":147},[144,107804,25055],{"class":150},[144,107806,107787],{"class":154},[144,107808,200],{"class":150},[144,107810,107811],{"class":154},"osmesa\n",[14,107813,107814,107815,107818,107819,28398],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[141,107816,107817],{},"egl"," 失败，再尝试 ",[141,107820,107821],{},"osmesa",[14,107823,107824,107825,107828],{},"如果你在本机桌面环境运行，通常先不要设置 ",[141,107826,107827],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[18,107830,101058],{"id":101057},[14,107832,107833],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,107835,107836],{},"典型 viewer 流程:",[135,107838,107840],{"className":30391,"code":107839,"language":30393,"meta":30,"style":30},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[141,107841,107842,107855,107862,107866],{"__ignoreMap":30},[144,107843,107844,107847,107850,107852],{"class":146,"line":147},[144,107845,107846],{"class":150},"with",[144,107848,107849],{"class":154}," mujoco.viewer.launch_passive(model, data) ",[144,107851,31396],{"class":150},[144,107853,107854],{"class":154}," viewer:\n",[144,107856,107857,107859],{"class":146,"line":66},[144,107858,2281],{"class":150},[144,107860,107861],{"class":154}," viewer.is_running():\n",[144,107863,107864],{"class":146,"line":1210},[144,107865,101529],{"class":154},[144,107867,107868],{"class":146,"line":1225},[144,107869,107870],{"class":154},"        viewer.sync()\n",[14,107872,107873],{},"典型 renderer 流程:",[135,107875,107877],{"className":30391,"code":107876,"language":30393,"meta":30,"style":30},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[141,107878,107879,107905,107909,107914],{"__ignoreMap":30},[144,107880,107881,107883,107885,107888,107890,107892,107894,107896,107898,107900,107903],{"class":146,"line":147},[144,107882,107583],{"class":154},[144,107884,200],{"class":150},[144,107886,107887],{"class":154}," mujoco.Renderer(model, ",[144,107889,24994],{"class":5247},[144,107891,200],{"class":150},[144,107893,42355],{"class":203},[144,107895,12466],{"class":154},[144,107897,24990],{"class":5247},[144,107899,200],{"class":150},[144,107901,107902],{"class":203},"640",[144,107904,161],{"class":154},[144,107906,107907],{"class":146,"line":66},[144,107908,104518],{"class":154},[144,107910,107911],{"class":146,"line":1210},[144,107912,107913],{"class":154},"renderer.update_scene(data)\n",[144,107915,107916,107918,107920],{"class":146,"line":1225},[144,107917,107593],{"class":154},[144,107919,200],{"class":150},[144,107921,107598],{"class":154},[115,107923,107925],{"id":107924},"viewer-的同步逻辑","viewer 的同步逻辑",[14,107927,107928],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[135,107930,107932],{"className":30391,"code":107931,"language":30393,"meta":30,"style":30},"mujoco.mj_step(model, data)\nviewer.sync()\n",[141,107933,107934,107938],{"__ignoreMap":30},[144,107935,107936],{"class":146,"line":147},[144,107937,104518],{"class":154},[144,107939,107940],{"class":146,"line":66},[144,107941,107942],{"class":154},"viewer.sync()\n",[14,107944,107945,107947,107948,107951],{},[141,107946,101228],{}," 负责算物理，",[141,107949,107950],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[115,107953,107955],{"id":107954},"为什么要-sleep","为什么要 sleep",[14,107957,107958],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[135,107960,107962],{"className":30391,"code":107961,"language":30393,"meta":30,"style":30},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[141,107963,107964],{"__ignoreMap":30},[144,107965,107966,107969,107971,107974,107976,107979,107981],{"class":146,"line":147},[144,107967,107968],{"class":154},"sleep_time ",[144,107970,200],{"class":150},[144,107972,107973],{"class":154}," model.opt.timestep ",[144,107975,687],{"class":150},[144,107977,107978],{"class":154}," (time.time() ",[144,107980,687],{"class":150},[144,107982,107983],{"class":154}," step_start)\n",[14,107985,107986],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[115,107988,107990],{"id":107989},"renderer-输出是什么","renderer 输出是什么",[135,107992,107994],{"className":30391,"code":107993,"language":30393,"meta":30,"style":30},"image = renderer.render()\n",[141,107995,107996],{"__ignoreMap":30},[144,107997,107998,108000,108002],{"class":146,"line":147},[144,107999,107593],{"class":154},[144,108001,200],{"class":150},[144,108003,107598],{"class":154},[14,108005,108006],{},"得到的是 NumPy 数组，形状通常是：",[135,108008,108011],{"className":108009,"code":108010,"language":5218,"meta":30},[5216],"(height, width, 3)\n",[141,108012,108010],{"__ignoreMap":30},[14,108014,108015],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[135,108017,108019],{"className":30391,"code":108018,"language":30393,"meta":30,"style":30},"Image.fromarray(image).save(\"render_output.png\")\n",[141,108020,108021],{"__ignoreMap":30},[144,108022,108023,108026,108029],{"class":146,"line":147},[144,108024,108025],{"class":154},"Image.fromarray(image).save(",[144,108027,108028],{"class":259},"\"render_output.png\"",[144,108030,161],{"class":154},[18,108032,101266],{"id":101265},[14,108034,108035],{},"交互式 Viewer:",[135,108037,108039],{"className":30391,"code":108038,"language":30393,"meta":30,"style":30},"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",[141,108040,108041,108047,108051,108057,108063,108067,108071,108079,108084,108088,108092,108096,108101,108106,108110,108114,108118,108123,108127,108131,108135,108139,108143,108147,108159,108171,108179,108183,108193,108213,108223,108228,108233,108237,108254,108267,108272,108276,108280,108292],{"__ignoreMap":30},[144,108042,108043,108045],{"class":146,"line":147},[144,108044,30405],{"class":150},[144,108046,31842],{"class":154},[144,108048,108049],{"class":146,"line":66},[144,108050,2430],{"emptyLinePlaceholder":72},[144,108052,108053,108055],{"class":146,"line":1210},[144,108054,30405],{"class":150},[144,108056,101314],{"class":154},[144,108058,108059,108061],{"class":146,"line":1225},[144,108060,30405],{"class":150},[144,108062,107565],{"class":154},[144,108064,108065],{"class":146,"line":1231},[144,108066,2430],{"emptyLinePlaceholder":72},[144,108068,108069],{"class":146,"line":1245},[144,108070,2430],{"emptyLinePlaceholder":72},[144,108072,108073,108075,108077],{"class":146,"line":1251},[144,108074,101327],{"class":203},[144,108076,13595],{"class":150},[144,108078,101332],{"class":259},[144,108080,108081],{"class":146,"line":1342},[144,108082,108083],{"class":259},"\u003Cmujoco model=\"viewer_demo\">\n",[144,108085,108086],{"class":146,"line":1348},[144,108087,101342],{"class":259},[144,108089,108090],{"class":146,"line":1360},[144,108091,2430],{"emptyLinePlaceholder":72},[144,108093,108094],{"class":146,"line":1642},[144,108095,101351],{"class":259},[144,108097,108098],{"class":146,"line":1647},[144,108099,108100],{"class":259},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[144,108102,108103],{"class":146,"line":1653},[144,108104,108105],{"class":259},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[144,108107,108108],{"class":146,"line":1658},[144,108109,2430],{"emptyLinePlaceholder":72},[144,108111,108112],{"class":146,"line":1672},[144,108113,101365],{"class":259},[144,108115,108116],{"class":146,"line":1677},[144,108117,101370],{"class":259},[144,108119,108120],{"class":146,"line":1683},[144,108121,108122],{"class":259},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[144,108124,108125],{"class":146,"line":1704},[144,108126,101380],{"class":259},[144,108128,108129],{"class":146,"line":1709},[144,108130,101385],{"class":259},[144,108132,108133],{"class":146,"line":1723},[144,108134,101390],{"class":259},[144,108136,108137],{"class":146,"line":1728},[144,108138,95711],{"class":259},[144,108140,108141],{"class":146,"line":1757},[144,108142,2430],{"emptyLinePlaceholder":72},[144,108144,108145],{"class":146,"line":1762},[144,108146,2430],{"emptyLinePlaceholder":72},[144,108148,108149,108151,108153,108155,108157],{"class":146,"line":1779},[144,108150,31960],{"class":150},[144,108152,2003],{"class":1993},[144,108154,101411],{"class":154},[144,108156,95699],{"class":203},[144,108158,3769],{"class":154},[144,108160,108161,108163,108165,108167,108169],{"class":146,"line":1784},[144,108162,101420],{"class":154},[144,108164,200],{"class":150},[144,108166,101425],{"class":154},[144,108168,101327],{"class":203},[144,108170,161],{"class":154},[144,108172,108173,108175,108177],{"class":146,"line":1789},[144,108174,101434],{"class":154},[144,108176,200],{"class":150},[144,108178,101439],{"class":154},[144,108180,108181],{"class":146,"line":1794},[144,108182,2430],{"emptyLinePlaceholder":72},[144,108184,108185,108187,108189,108191],{"class":146,"line":1808},[144,108186,34191],{"class":150},[144,108188,107849],{"class":154},[144,108190,31396],{"class":150},[144,108192,107854],{"class":154},[144,108194,108195,108198,108201,108203,108206,108208,108211],{"class":146,"line":1813},[144,108196,108197],{"class":150},"        while",[144,108199,108200],{"class":154}," viewer.is_running() ",[144,108202,30475],{"class":150},[144,108204,108205],{"class":154}," data.time ",[144,108207,1065],{"class":150},[144,108209,108210],{"class":203}," 5.0",[144,108212,3769],{"class":154},[144,108214,108215,108218,108220],{"class":146,"line":2607},[144,108216,108217],{"class":154},"            step_start ",[144,108219,200],{"class":150},[144,108221,108222],{"class":154}," time.time()\n",[144,108224,108225],{"class":146,"line":2621},[144,108226,108227],{"class":154},"            mujoco.mj_step(model, data)\n",[144,108229,108230],{"class":146,"line":2629},[144,108231,108232],{"class":154},"            viewer.sync()\n",[144,108234,108235],{"class":146,"line":2634},[144,108236,2430],{"emptyLinePlaceholder":72},[144,108238,108239,108242,108244,108246,108248,108250,108252],{"class":146,"line":2640},[144,108240,108241],{"class":154},"            sleep_time ",[144,108243,200],{"class":150},[144,108245,107973],{"class":154},[144,108247,687],{"class":150},[144,108249,107978],{"class":154},[144,108251,687],{"class":150},[144,108253,107983],{"class":154},[144,108255,108256,108258,108261,108263,108265],{"class":146,"line":2646},[144,108257,4672],{"class":150},[144,108259,108260],{"class":154}," sleep_time ",[144,108262,1115],{"class":150},[144,108264,4123],{"class":203},[144,108266,3769],{"class":154},[144,108268,108269],{"class":146,"line":2651},[144,108270,108271],{"class":154},"                time.sleep(sleep_time)\n",[144,108273,108274],{"class":146,"line":7979},[144,108275,2430],{"emptyLinePlaceholder":72},[144,108277,108278],{"class":146,"line":8003},[144,108279,2430],{"emptyLinePlaceholder":72},[144,108281,108282,108284,108286,108288,108290],{"class":146,"line":8008},[144,108283,1561],{"class":150},[144,108285,31233],{"class":203},[144,108287,101572],{"class":150},[144,108289,101575],{"class":259},[144,108291,3769],{"class":154},[144,108293,108294],{"class":146,"line":8014},[144,108295,101582],{"class":154},[14,108297,103583],{},[135,108299,108301],{"className":23854,"code":108300,"language":23856,"meta":30,"style":30},"touch ch5_viewer.py\n",[141,108302,108303],{"__ignoreMap":30},[144,108304,108305,108307],{"class":146,"line":147},[144,108306,101296],{"class":1993},[144,108308,108309],{"class":259}," ch5_viewer.py\n",[14,108311,108312],{},"离屏 Renderer 保存图片:",[135,108314,108316],{"className":30391,"code":108315,"language":30393,"meta":30,"style":30},"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",[141,108317,108318,108330,108334,108340,108350,108354,108358,108366,108371,108375,108379,108383,108387,108392,108396,108400,108404,108408,108412,108416,108420,108424,108428,108432,108436,108448,108460,108468,108493,108497,108513,108517,108521,108536,108545,108549,108563,108568,108573,108577,108589,108601,108605,108609,108621],{"__ignoreMap":30},[144,108319,108320,108322,108325,108327],{"class":146,"line":147},[144,108321,30750],{"class":150},[144,108323,108324],{"class":154}," pathlib ",[144,108326,30405],{"class":150},[144,108328,108329],{"class":154}," Path\n",[144,108331,108332],{"class":146,"line":66},[144,108333,2430],{"emptyLinePlaceholder":72},[144,108335,108336,108338],{"class":146,"line":1210},[144,108337,30405],{"class":150},[144,108339,101314],{"class":154},[144,108341,108342,108344,108346,108348],{"class":146,"line":1225},[144,108343,30750],{"class":150},[144,108345,47276],{"class":203},[144,108347,47279],{"class":150},[144,108349,47282],{"class":154},[144,108351,108352],{"class":146,"line":1231},[144,108353,2430],{"emptyLinePlaceholder":72},[144,108355,108356],{"class":146,"line":1245},[144,108357,2430],{"emptyLinePlaceholder":72},[144,108359,108360,108362,108364],{"class":146,"line":1251},[144,108361,101327],{"class":203},[144,108363,13595],{"class":150},[144,108365,101332],{"class":259},[144,108367,108368],{"class":146,"line":1342},[144,108369,108370],{"class":259},"\u003Cmujoco model=\"renderer_demo\">\n",[144,108372,108373],{"class":146,"line":1348},[144,108374,101342],{"class":259},[144,108376,108377],{"class":146,"line":1360},[144,108378,2430],{"emptyLinePlaceholder":72},[144,108380,108381],{"class":146,"line":1642},[144,108382,101351],{"class":259},[144,108384,108385],{"class":146,"line":1647},[144,108386,108100],{"class":259},[144,108388,108389],{"class":146,"line":1653},[144,108390,108391],{"class":259},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[144,108393,108394],{"class":146,"line":1658},[144,108395,108105],{"class":259},[144,108397,108398],{"class":146,"line":1672},[144,108399,2430],{"emptyLinePlaceholder":72},[144,108401,108402],{"class":146,"line":1677},[144,108403,101365],{"class":259},[144,108405,108406],{"class":146,"line":1683},[144,108407,101370],{"class":259},[144,108409,108410],{"class":146,"line":1704},[144,108411,108122],{"class":259},[144,108413,108414],{"class":146,"line":1709},[144,108415,101380],{"class":259},[144,108417,108418],{"class":146,"line":1723},[144,108419,101385],{"class":259},[144,108421,108422],{"class":146,"line":1728},[144,108423,101390],{"class":259},[144,108425,108426],{"class":146,"line":1757},[144,108427,95711],{"class":259},[144,108429,108430],{"class":146,"line":1762},[144,108431,2430],{"emptyLinePlaceholder":72},[144,108433,108434],{"class":146,"line":1779},[144,108435,2430],{"emptyLinePlaceholder":72},[144,108437,108438,108440,108442,108444,108446],{"class":146,"line":1784},[144,108439,31960],{"class":150},[144,108441,2003],{"class":1993},[144,108443,101411],{"class":154},[144,108445,95699],{"class":203},[144,108447,3769],{"class":154},[144,108449,108450,108452,108454,108456,108458],{"class":146,"line":1789},[144,108451,101420],{"class":154},[144,108453,200],{"class":150},[144,108455,101425],{"class":154},[144,108457,101327],{"class":203},[144,108459,161],{"class":154},[144,108461,108462,108464,108466],{"class":146,"line":1794},[144,108463,101434],{"class":154},[144,108465,200],{"class":150},[144,108467,101439],{"class":154},[144,108469,108470,108473,108475,108477,108479,108481,108483,108485,108487,108489,108491],{"class":146,"line":1808},[144,108471,108472],{"class":154},"    renderer ",[144,108474,200],{"class":150},[144,108476,107887],{"class":154},[144,108478,24994],{"class":5247},[144,108480,200],{"class":150},[144,108482,42355],{"class":203},[144,108484,12466],{"class":154},[144,108486,24990],{"class":5247},[144,108488,200],{"class":150},[144,108490,107902],{"class":203},[144,108492,161],{"class":154},[144,108494,108495],{"class":146,"line":1813},[144,108496,2430],{"emptyLinePlaceholder":72},[144,108498,108499,108501,108503,108505,108507,108509,108511],{"class":146,"line":2607},[144,108500,3231],{"class":150},[144,108502,101514],{"class":154},[144,108504,26056],{"class":150},[144,108506,32456],{"class":203},[144,108508,155],{"class":154},[144,108510,466],{"class":203},[144,108512,30799],{"class":154},[144,108514,108515],{"class":146,"line":2621},[144,108516,101529],{"class":154},[144,108518,108519],{"class":146,"line":2629},[144,108520,2430],{"emptyLinePlaceholder":72},[144,108522,108523,108526,108529,108531,108534],{"class":146,"line":2634},[144,108524,108525],{"class":154},"    renderer.update_scene(data, ",[144,108527,108528],{"class":5247},"camera",[144,108530,200],{"class":150},[144,108532,108533],{"class":259},"\"fixed_camera\"",[144,108535,161],{"class":154},[144,108537,108538,108541,108543],{"class":146,"line":2640},[144,108539,108540],{"class":154},"    image ",[144,108542,200],{"class":150},[144,108544,107598],{"class":154},[144,108546,108547],{"class":146,"line":2646},[144,108548,2430],{"emptyLinePlaceholder":72},[144,108550,108551,108554,108556,108559,108561],{"class":146,"line":2651},[144,108552,108553],{"class":154},"    output_path ",[144,108555,200],{"class":150},[144,108557,108558],{"class":154}," Path(",[144,108560,108028],{"class":259},[144,108562,161],{"class":154},[144,108564,108565],{"class":146,"line":7979},[144,108566,108567],{"class":154},"    Image.fromarray(image).save(output_path)\n",[144,108569,108570],{"class":146,"line":8003},[144,108571,108572],{"class":154},"    renderer.close()\n",[144,108574,108575],{"class":146,"line":8008},[144,108576,2430],{"emptyLinePlaceholder":72},[144,108578,108579,108581,108583,108586],{"class":146,"line":8014},[144,108580,31312],{"class":203},[144,108582,155],{"class":154},[144,108584,108585],{"class":259},"\"saved:\"",[144,108587,108588],{"class":154},", output_path.resolve())\n",[144,108590,108591,108593,108595,108598],{"class":146,"line":8041},[144,108592,31312],{"class":203},[144,108594,155],{"class":154},[144,108596,108597],{"class":259},"\"image shape:\"",[144,108599,108600],{"class":154},", image.shape)\n",[144,108602,108603],{"class":146,"line":8046},[144,108604,2430],{"emptyLinePlaceholder":72},[144,108606,108607],{"class":146,"line":8052},[144,108608,2430],{"emptyLinePlaceholder":72},[144,108610,108611,108613,108615,108617,108619],{"class":146,"line":8064},[144,108612,1561],{"class":150},[144,108614,31233],{"class":203},[144,108616,101572],{"class":150},[144,108618,101575],{"class":259},[144,108620,3769],{"class":154},[144,108622,108623],{"class":146,"line":8076},[144,108624,101582],{"class":154},[14,108626,103583],{},[135,108628,108630],{"className":23854,"code":108629,"language":23856,"meta":30,"style":30},"touch ch5_renderer.py\n",[141,108631,108632],{"__ignoreMap":30},[144,108633,108634,108636],{"class":146,"line":147},[144,108635,101296],{"class":1993},[144,108637,108638],{"class":259}," ch5_renderer.py\n",[115,108640,101585],{"id":101585},[14,108642,108643],{},"viewer 上下文：",[135,108645,108647],{"className":30391,"code":108646,"language":30393,"meta":30,"style":30},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[141,108648,108649],{"__ignoreMap":30},[144,108650,108651,108653,108655,108657],{"class":146,"line":147},[144,108652,107846],{"class":150},[144,108654,107849],{"class":154},[144,108656,31396],{"class":150},[144,108658,107854],{"class":154},[14,108660,108661,108663],{},[141,108662,107846],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,108665,108666],{},"窗口循环：",[135,108668,108670],{"className":30391,"code":108669,"language":30393,"meta":30,"style":30},"while viewer.is_running() and data.time \u003C 5.0:\n",[141,108671,108672],{"__ignoreMap":30},[144,108673,108674,108677,108679,108681,108683,108685,108687],{"class":146,"line":147},[144,108675,108676],{"class":150},"while",[144,108678,108200],{"class":154},[144,108680,30475],{"class":150},[144,108682,108205],{"class":154},[144,108684,1065],{"class":150},[144,108686,108210],{"class":203},[144,108688,3769],{"class":154},[14,108690,108691],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,108693,108694],{},"固定相机：",[135,108696,108698],{"className":53080,"code":108697,"language":53082,"meta":30,"style":30},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[141,108699,108700],{"__ignoreMap":30},[144,108701,108702,108704,108706,108708,108710,108712,108714,108716,108719,108722,108724,108727],{"class":146,"line":147},[144,108703,1065],{"class":154},[144,108705,108528],{"class":51313},[144,108707,14951],{"class":1993},[144,108709,200],{"class":154},[144,108711,108533],{"class":259},[144,108713,101119],{"class":1993},[144,108715,200],{"class":154},[144,108717,108718],{"class":259},"\"1.5 -2.0 1.2\"",[144,108720,108721],{"class":1993}," xyaxes",[144,108723,200],{"class":154},[144,108725,108726],{"class":259},"\"1 0.75 0 0 0 1\"",[144,108728,101157],{"class":154},[14,108730,108731],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[115,108733,108735],{"id":108734},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[135,108737,108739],{"className":30391,"code":108738,"language":30393,"meta":30,"style":30},"import time\n",[141,108740,108741],{"__ignoreMap":30},[144,108742,108743,108745],{"class":146,"line":147},[144,108744,30405],{"class":150},[144,108746,31842],{"class":154},[14,108748,108749],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[135,108751,108753],{"className":30391,"code":108752,"language":30393,"meta":30,"style":30},"import mujoco\nimport mujoco.viewer\n",[141,108754,108755,108761],{"__ignoreMap":30},[144,108756,108757,108759],{"class":146,"line":147},[144,108758,30405],{"class":150},[144,108760,101314],{"class":154},[144,108762,108763,108765],{"class":146,"line":66},[144,108764,30405],{"class":150},[144,108766,107565],{"class":154},[14,108768,108769],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[135,108771,108772],{"className":30391,"code":108646,"language":30393,"meta":30,"style":30},[141,108773,108774],{"__ignoreMap":30},[144,108775,108776,108778,108780,108782],{"class":146,"line":147},[144,108777,107846],{"class":150},[144,108779,107849],{"class":154},[144,108781,31396],{"class":150},[144,108783,107854],{"class":154},[14,108785,108786,108787,108790],{},"打开一个 viewer 窗口。",[141,108788,108789],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[135,108792,108793],{"className":30391,"code":108669,"language":30393,"meta":30,"style":30},[141,108794,108795],{"__ignoreMap":30},[144,108796,108797,108799,108801,108803,108805,108807,108809],{"class":146,"line":147},[144,108798,108676],{"class":150},[144,108800,108200],{"class":154},[144,108802,30475],{"class":150},[144,108804,108205],{"class":154},[144,108806,1065],{"class":150},[144,108808,108210],{"class":203},[144,108810,3769],{"class":154},[14,108812,108813,108814,108817],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[141,108815,108816],{},"viewer.is_running()"," 会变成 false，循环结束。",[135,108819,108821],{"className":30391,"code":108820,"language":30393,"meta":30,"style":30},"step_start = time.time()\n",[141,108822,108823],{"__ignoreMap":30},[144,108824,108825,108828,108830],{"class":146,"line":147},[144,108826,108827],{"class":154},"step_start ",[144,108829,200],{"class":150},[144,108831,108222],{"class":154},[14,108833,108834],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[135,108836,108837],{"className":30391,"code":107931,"language":30393,"meta":30,"style":30},[141,108838,108839,108843],{"__ignoreMap":30},[144,108840,108841],{"class":146,"line":147},[144,108842,104518],{"class":154},[144,108844,108845],{"class":146,"line":66},[144,108846,107942],{"class":154},[14,108848,108849,108851,108852,108854,108855,108857,108858,108861],{},[141,108850,101228],{}," 推进物理仿真。",[141,108853,107950],{}," 把最新的 ",[141,108856,33414],{}," 同步到窗口里显示。没有 ",[141,108859,108860],{},"sync()","，窗口可能看不到最新状态。",[135,108863,108864],{"className":30391,"code":107961,"language":30393,"meta":30,"style":30},[141,108865,108866],{"__ignoreMap":30},[144,108867,108868,108870,108872,108874,108876,108878,108880],{"class":146,"line":147},[144,108869,107968],{"class":154},[144,108871,200],{"class":150},[144,108873,107973],{"class":154},[144,108875,687],{"class":150},[144,108877,107978],{"class":154},[144,108879,687],{"class":150},[144,108881,107983],{"class":154},[14,108883,108884],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[135,108886,108888],{"className":30391,"code":108887,"language":30393,"meta":30,"style":30},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[141,108889,108890,108902],{"__ignoreMap":30},[144,108891,108892,108894,108896,108898,108900],{"class":146,"line":147},[144,108893,1561],{"class":150},[144,108895,108260],{"class":154},[144,108897,1115],{"class":150},[144,108899,4123],{"class":203},[144,108901,3769],{"class":154},[144,108903,108904],{"class":146,"line":66},[144,108905,108906],{"class":154},"    time.sleep(sleep_time)\n",[14,108908,108909],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[115,108911,108913],{"id":108912},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[135,108915,108917],{"className":30391,"code":108916,"language":30393,"meta":30,"style":30},"from pathlib import Path\n",[141,108918,108919],{"__ignoreMap":30},[144,108920,108921,108923,108925,108927],{"class":146,"line":147},[144,108922,30750],{"class":150},[144,108924,108324],{"class":154},[144,108926,30405],{"class":150},[144,108928,108329],{"class":154},[14,108930,108931,108932,108935,108936,108939],{},"导入 ",[141,108933,108934],{},"Path","，用来处理文件路径。相比直接写字符串，",[141,108937,108938],{},"Path(\"render_output.png\")"," 更清晰。",[135,108941,108943],{"className":30391,"code":108942,"language":30393,"meta":30,"style":30},"from PIL import Image\n",[141,108944,108945],{"__ignoreMap":30},[144,108946,108947,108949,108951,108953],{"class":146,"line":147},[144,108948,30750],{"class":150},[144,108950,47276],{"class":203},[144,108952,47279],{"class":150},[144,108954,47282],{"class":154},[14,108956,108957],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[135,108959,108960],{"className":53080,"code":108697,"language":53082,"meta":30,"style":30},[141,108961,108962],{"__ignoreMap":30},[144,108963,108964,108966,108968,108970,108972,108974,108976,108978,108980,108982,108984,108986],{"class":146,"line":147},[144,108965,1065],{"class":154},[144,108967,108528],{"class":51313},[144,108969,14951],{"class":1993},[144,108971,200],{"class":154},[144,108973,108533],{"class":259},[144,108975,101119],{"class":1993},[144,108977,200],{"class":154},[144,108979,108718],{"class":259},[144,108981,108721],{"class":1993},[144,108983,200],{"class":154},[144,108985,108726],{"class":259},[144,108987,101157],{"class":154},[14,108989,108990,108991,108993,108994,108996,108997,109000,109001,109003],{},"定义一个相机。",[141,108992,79823],{}," 是相机名字。",[141,108995,104159],{}," 是相机在世界里的位置。",[141,108998,108999],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[141,109002,104159],{}," 来调视角。",[135,109005,109007],{"className":30391,"code":109006,"language":30393,"meta":30,"style":30},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[141,109008,109009],{"__ignoreMap":30},[144,109010,109011,109013,109015,109017,109019,109021,109023,109025,109027,109029,109031],{"class":146,"line":147},[144,109012,107583],{"class":154},[144,109014,200],{"class":150},[144,109016,107887],{"class":154},[144,109018,24994],{"class":5247},[144,109020,200],{"class":150},[144,109022,42355],{"class":203},[144,109024,12466],{"class":154},[144,109026,24990],{"class":5247},[144,109028,200],{"class":150},[144,109030,107902],{"class":203},[144,109032,161],{"class":154},[14,109034,109035,109036,101031,109038,109040],{},"创建离屏渲染器。",[141,109037,24994],{},[141,109039,24990],{}," 决定输出图片大小。",[135,109042,109043],{"className":30391,"code":101689,"language":30393,"meta":30,"style":30},[141,109044,109045,109061],{"__ignoreMap":30},[144,109046,109047,109049,109051,109053,109055,109057,109059],{"class":146,"line":147},[144,109048,3055],{"class":150},[144,109050,101514],{"class":154},[144,109052,26056],{"class":150},[144,109054,32456],{"class":203},[144,109056,155],{"class":154},[144,109058,466],{"class":203},[144,109060,30799],{"class":154},[144,109062,109063],{"class":146,"line":66},[144,109064,101712],{"class":154},[14,109066,109067],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[135,109069,109071],{"className":30391,"code":109070,"language":30393,"meta":30,"style":30},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[141,109072,109073],{"__ignoreMap":30},[144,109074,109075,109078,109080,109082,109084],{"class":146,"line":147},[144,109076,109077],{"class":154},"renderer.update_scene(data, ",[144,109079,108528],{"class":5247},[144,109081,200],{"class":150},[144,109083,108533],{"class":259},[144,109085,161],{"class":154},[14,109087,109088,109089,109091,109092,109095],{},"告诉 renderer：用当前 ",[141,109090,33414],{}," 的状态更新画面，并使用名为 ",[141,109093,109094],{},"fixed_camera"," 的相机视角。",[135,109097,109098],{"className":30391,"code":107993,"language":30393,"meta":30,"style":30},[141,109099,109100],{"__ignoreMap":30},[144,109101,109102,109104,109106],{"class":146,"line":147},[144,109103,107593],{"class":154},[144,109105,200],{"class":150},[144,109107,107598],{"class":154},[14,109109,109110,109111,109114],{},"真正渲染出图像。",[141,109112,109113],{},"image"," 是一个 NumPy 数组，不是文件。",[135,109116,109118],{"className":30391,"code":109117,"language":30393,"meta":30,"style":30},"Image.fromarray(image).save(output_path)\n",[141,109119,109120],{"__ignoreMap":30},[144,109121,109122],{"class":146,"line":147},[144,109123,109117],{"class":154},[14,109125,109126,109127,28398],{},"把数组转换成图片，并保存到 ",[141,109128,109129],{},"render_output.png",[135,109131,109133],{"className":30391,"code":109132,"language":30393,"meta":30,"style":30},"renderer.close()\n",[141,109134,109135],{"__ignoreMap":30},[144,109136,109137],{"class":146,"line":147},[144,109138,109132],{"class":154},[14,109140,109141],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[18,109143,102329],{"id":102328},[14,109145,109146,109147,109149,109150,28398],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[141,109148,109129],{},"，并输出图像数组形状，例如 ",[141,109151,109152],{},"(480, 640, 3)",[14,109154,109155],{},"如果图片里看不到方块，先检查：",[98,109157,109158,109161,109164],{},[101,109159,109160],{},"方块是否掉到相机视野外。",[101,109162,109163],{},"camera 位置是否合理。",[101,109165,109166,109167,109170],{},"是否在 ",[141,109168,109169],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[18,109172,102361],{"id":102360},[14,109174,109175],{},"运行 viewer:",[135,109177,109179],{"className":23854,"code":109178,"language":23856,"meta":30,"style":30},"python ch5_viewer.py\n",[141,109180,109181],{"__ignoreMap":30},[144,109182,109183,109185],{"class":146,"line":147},[144,109184,30393],{"class":1993},[144,109186,108309],{"class":259},[14,109188,109189],{},"运行 renderer:",[135,109191,109193],{"className":23854,"code":109192,"language":23856,"meta":30,"style":30},"python ch5_renderer.py\n",[141,109194,109195],{"__ignoreMap":30},[144,109196,109197,109199],{"class":146,"line":147},[144,109198,30393],{"class":1993},[144,109200,108638],{"class":259},[14,109202,109203],{},"如果在服务器上运行:",[135,109205,109207],{"className":23854,"code":109206,"language":23856,"meta":30,"style":30},"MUJOCO_GL=egl python ch5_renderer.py\n",[141,109208,109209],{"__ignoreMap":30},[144,109210,109211,109213,109215,109217,109220],{"class":146,"line":147},[144,109212,107827],{"class":154},[144,109214,200],{"class":150},[144,109216,107817],{"class":259},[144,109218,109219],{"class":1993}," python",[144,109221,108638],{"class":259},[14,109223,107795],{},[135,109225,109227],{"className":23854,"code":109226,"language":23856,"meta":30,"style":30},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[141,109228,109229],{"__ignoreMap":30},[144,109230,109231,109233,109235,109237,109239],{"class":146,"line":147},[144,109232,107827],{"class":154},[144,109234,200],{"class":150},[144,109236,107821],{"class":259},[144,109238,109219],{"class":1993},[144,109240,108638],{"class":259},[14,109242,109243],{},"再做几个练习：",[98,109245,109246,109253,109256,109262],{},[101,109247,109248,109249,109252],{},"把 renderer 分辨率改成 ",[141,109250,109251],{},"height=240, width=320","，观察输出 shape。",[101,109254,109255],{},"把方块颜色改成蓝色，重新保存图片。",[101,109257,109258,109259,109261],{},"把相机 ",[141,109260,104159],{}," 改远一点，观察画面中物体是否变小。",[101,109263,109264,109265,102427,109268,109271],{},"把 viewer 示例中的 ",[141,109266,109267],{},"data.time \u003C 5.0",[141,109269,109270],{},"data.time \u003C 20.0","，观察更长时间。",[18,109273,102466],{"id":102465},[115,109275,109277],{"id":109276},"viewer-窗口打不开","viewer 窗口打不开",[14,109279,109280],{},"安装:",[135,109282,109284],{"className":23854,"code":109283,"language":23856,"meta":30,"style":30},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[141,109285,109286],{"__ignoreMap":30},[144,109287,109288,109290,109292,109294,109296,109298,109300,109302,109304,109306,109308],{"class":146,"line":147},[144,109289,24589],{"class":1993},[144,109291,26328],{"class":259},[144,109293,23866],{"class":259},[144,109295,26413],{"class":203},[144,109297,102519],{"class":259},[144,109299,100847],{"class":259},[144,109301,102524],{"class":259},[144,109303,100860],{"class":259},[144,109305,100866],{"class":259},[144,109307,100857],{"class":259},[144,109309,109310],{"class":259}," libXinerama\n",[115,109312,109314],{"id":109313},"glfwerror",[141,109315,109316],{},"GLFWError",[14,109318,109319],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[115,109321,109323],{"id":109322},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109325,109326,109327,82552,109329,109331],{},"尝试 ",[141,109328,101050],{},[141,109330,101053],{},"。可能存在版本差异。",[115,109333,109334],{"id":109334},"保存图片是黑的",[14,109336,102588],{},[98,109338,109339,109342,109345,109355],{},[101,109340,109341],{},"XML 里是否有 light。",[101,109343,109344],{},"相机是否对着模型。",[101,109346,109347,109348,109351,109352,28398],{},"是否先 ",[141,109349,109350],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[141,109353,109354],{},"renderer.render()",[101,109356,109357],{},"物体是否已经掉出视野。",[115,109359,109360],{"id":109360},"远程服务器没有显示器",[14,109362,109363],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[135,109365,109366],{"className":23854,"code":109206,"language":23856,"meta":30,"style":30},[141,109367,109368],{"__ignoreMap":30},[144,109369,109370,109372,109374,109376,109378],{"class":146,"line":147},[144,109371,107827],{"class":154},[144,109373,200],{"class":150},[144,109375,107817],{"class":259},[144,109377,109219],{"class":1993},[144,109379,108638],{"class":259},[14,109381,109382],{},"如果 EGL 不可用，再尝试：",[135,109384,109385],{"className":23854,"code":109226,"language":23856,"meta":30,"style":30},[141,109386,109387],{"__ignoreMap":30},[144,109388,109389,109391,109393,109395,109397],{"class":146,"line":147},[144,109390,107827],{"class":154},[144,109392,200],{"class":150},[144,109394,107821],{"class":259},[144,109396,109219],{"class":1993},[144,109398,108638],{"class":259},[18,109400,102620],{"id":102619},[14,109402,109403],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[98,109405,109406,109409,109412],{},[101,109407,109408],{},"先用 viewer 看模型和控制是否正常。",[101,109410,109411],{},"再用 renderer 保存图片或构造视觉观测。",[101,109413,109414],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5157,109416,109417],{},"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":30,"searchDepth":66,"depth":66,"links":109419},[109420,109421,109422,109427,109432,109433,109434,109441],{"id":100659,"depth":66,"text":100660},{"id":100782,"depth":66,"text":100783},{"id":101057,"depth":66,"text":101058,"children":109423},[109424,109425,109426],{"id":107924,"depth":1210,"text":107925},{"id":107954,"depth":1210,"text":107955},{"id":107989,"depth":1210,"text":107990},{"id":101265,"depth":66,"text":101266,"children":109428},[109429,109430,109431],{"id":101585,"depth":1210,"text":101585},{"id":108734,"depth":1210,"text":108735},{"id":108912,"depth":1210,"text":108913},{"id":102328,"depth":66,"text":102329},{"id":102360,"depth":66,"text":102361},{"id":102465,"depth":66,"text":102466,"children":109435},[109436,109437,109438,109439,109440],{"id":109276,"depth":1210,"text":109277},{"id":109313,"depth":1210,"text":109316},{"id":109322,"depth":1210,"text":109323},{"id":109334,"depth":1210,"text":109334},{"id":109360,"depth":1210,"text":109360},{"id":102619,"depth":66,"text":102620},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107532,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109448,"title":109449,"body":109450,"description":30,"extension":70,"meta":111361,"navigation":72,"path":111362,"seo":111363,"stem":111364,"__hash__":111365},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109451,"toc":111337},[109452,109455,109457,109460,109462,109481,109484,109490,109493,109495,109497,109521,109523,109537,109539,109580,109582,109593,109595,109598,109604,109607,109641,109644,109676,109679,109711,109715,109718,109758,109761,109767,109770,109776,109780,109783,109789,109792,109796,109799,109839,109841,109854,109857,109859,110441,110443,110455,110458,110469,110471,110474,110493,110505,110508,110529,110532,110535,110578,110581,110584,110604,110611,110613,110631,110646,110649,110655,110658,110664,110681,110688,110719,110730,110764,110775,110792,110801,110809,110814,110828,110831,110852,110858,110872,110877,110907,110917,110942,110950,110973,110976,110992,110995,111003,111009,111031,111044,111065,111074,111113,111124,111126,111129,111135,111138,111141,111147,111150,111170,111173,111175,111214,111216,111219,111227,111230,111233,111260,111263,111273,111279,111282,111288,111290,111296,111300,111303,111305,111308,111332,111335],[10,109453,109449],{"id":109454},"_6控制任务cartpole",[18,109456,100660],{"id":100659},[14,109458,109459],{},"本章搭建一个最小 Cartpole 控制任务。",[14,109461,104344],{},[98,109463,109464,109467,109469,109472,109475,109478],{},[101,109465,109466],{},"slide joint",[101,109468,106197],{},[101,109470,109471],{},"cart force actuator",[101,109473,109474],{},"状态观测",[101,109476,109477],{},"简单控制循环",[101,109479,109480],{},"reward 设计雏形",[14,109482,109483],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[135,109485,109488],{"className":109486,"code":109487,"language":5218,"meta":30},[5216],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[141,109489,109487],{"__ignoreMap":30},[14,109491,109492],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[18,109494,100783],{"id":100782},[14,109496,100786],{},[135,109498,109499],{"className":23854,"code":104401,"language":23856,"meta":30,"style":30},[141,109500,109501],{"__ignoreMap":30},[144,109502,109503,109505,109507,109509,109511,109513,109515,109517,109519],{"class":146,"line":147},[144,109504,24589],{"class":1993},[144,109506,26328],{"class":259},[144,109508,23866],{"class":259},[144,109510,26413],{"class":203},[144,109512,104416],{"class":259},[144,109514,100811],{"class":259},[144,109516,102514],{"class":259},[144,109518,100827],{"class":259},[144,109520,104425],{"class":259},[14,109522,102832],{},[135,109524,109525],{"className":23854,"code":100932,"language":23856,"meta":30,"style":30},[141,109526,109527],{"__ignoreMap":30},[144,109528,109529,109531,109533,109535],{"class":146,"line":147},[144,109530,23863],{"class":1993},[144,109532,23866],{"class":259},[144,109534,100943],{"class":259},[144,109536,100946],{"class":259},[14,109538,102849],{},[135,109540,109542],{"className":23854,"code":109541,"language":23856,"meta":30,"style":30},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[141,109543,109544,109561,109570],{"__ignoreMap":30},[144,109545,109546,109548,109550,109552,109555,109557,109559],{"class":146,"line":147},[144,109547,30343],{"class":1993},[144,109549,29189],{"class":259},[144,109551,25128],{"class":203},[144,109553,109554],{"class":259}," mujoco-cartpole",[144,109556,100988],{"class":259},[144,109558,100991],{"class":203},[144,109560,100994],{"class":203},[144,109562,109563,109565,109567],{"class":146,"line":66},[144,109564,30343],{"class":1993},[144,109566,101001],{"class":259},[144,109568,109569],{"class":259}," mujoco-cartpole\n",[144,109571,109572,109574,109576,109578],{"class":146,"line":1210},[144,109573,23863],{"class":1993},[144,109575,23866],{"class":259},[144,109577,100943],{"class":259},[144,109579,100946],{"class":259},[14,109581,101017],{},[98,109583,109584,109587,109590],{},[101,109585,109586],{},"本章不依赖 Gymnasium。",[101,109588,109589],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[101,109591,109592],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[18,109594,101058],{"id":101057},[14,109596,109597],{},"Cartpole 的模型结构:",[135,109599,109602],{"className":109600,"code":109601,"language":5218,"meta":30},[5216],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[141,109603,109601],{"__ignoreMap":30},[14,109605,109606],{},"小车通过 slide joint 左右移动:",[135,109608,109610],{"className":53080,"code":109609,"language":53082,"meta":30,"style":30},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[141,109611,109612],{"__ignoreMap":30},[144,109613,109614,109616,109618,109620,109622,109625,109627,109629,109632,109634,109636,109639],{"class":146,"line":147},[144,109615,1065],{"class":154},[144,109617,102969],{"class":51313},[144,109619,14951],{"class":1993},[144,109621,200],{"class":154},[144,109623,109624],{"class":259},"\"cart_x\"",[144,109626,53837],{"class":1993},[144,109628,200],{"class":154},[144,109630,109631],{"class":259},"\"slide\"",[144,109633,106041],{"class":1993},[144,109635,200],{"class":154},[144,109637,109638],{"class":259},"\"1 0 0\"",[144,109640,101157],{"class":154},[14,109642,109643],{},"杆子通过 hinge joint 旋转:",[135,109645,109647],{"className":53080,"code":109646,"language":53082,"meta":30,"style":30},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[141,109648,109649],{"__ignoreMap":30},[144,109650,109651,109653,109655,109657,109659,109662,109664,109666,109668,109670,109672,109674],{"class":146,"line":147},[144,109652,1065],{"class":154},[144,109654,102969],{"class":51313},[144,109656,14951],{"class":1993},[144,109658,200],{"class":154},[144,109660,109661],{"class":259},"\"pole_hinge\"",[144,109663,53837],{"class":1993},[144,109665,200],{"class":154},[144,109667,106032],{"class":259},[144,109669,106041],{"class":1993},[144,109671,200],{"class":154},[144,109673,106046],{"class":259},[144,109675,101157],{"class":154},[14,109677,109678],{},"控制力作用在小车 slide joint 上:",[135,109680,109682],{"className":53080,"code":109681,"language":53082,"meta":30,"style":30},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[141,109683,109684],{"__ignoreMap":30},[144,109685,109686,109688,109690,109692,109694,109697,109699,109701,109703,109705,109707,109709],{"class":146,"line":147},[144,109687,1065],{"class":154},[144,109689,106087],{"class":51313},[144,109691,14951],{"class":1993},[144,109693,200],{"class":154},[144,109695,109696],{"class":259},"\"cart_motor\"",[144,109698,106097],{"class":1993},[144,109700,200],{"class":154},[144,109702,109624],{"class":259},[144,109704,106104],{"class":1993},[144,109706,200],{"class":154},[144,109708,54329],{"class":259},[144,109710,101157],{"class":154},[115,109712,109714],{"id":109713},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,109716,109717],{},"这个简化模型有两个关节：",[292,109719,109720,109731],{},[295,109721,109722],{},[298,109723,109724,109726,109728],{},[301,109725,102772],{"align":23768},[301,109727,23769],{"align":23768},[301,109729,109730],{"align":23768},"对应状态",[339,109732,109733,109746],{},[298,109734,109735,109740,109743],{},[344,109736,109737],{"align":23768},[141,109738,109739],{},"cart_x",[344,109741,109742],{"align":23768},"slide",[344,109744,109745],{"align":23768},"小车 x 位置",[298,109747,109748,109753,109755],{},[344,109749,109750],{"align":23768},[141,109751,109752],{},"pole_hinge",[344,109754,105853],{"align":23768},[344,109756,109757],{"align":23768},"杆子角度",[14,109759,109760],{},"所以：",[135,109762,109765],{"className":109763,"code":109764,"language":5218,"meta":30},[5216],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[141,109766,109764],{"__ignoreMap":30},[14,109768,109769],{},"把它们拼起来就是观测：",[135,109771,109774],{"className":109772,"code":109773,"language":5218,"meta":30},[5216],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[141,109775,109773],{"__ignoreMap":30},[115,109777,109779],{"id":109778},"action-是什么","action 是什么",[14,109781,109782],{},"本章只有一个 actuator：",[135,109784,109787],{"className":109785,"code":109786,"language":5218,"meta":30},[5216],"data.ctrl[0] = action\n",[141,109788,109786],{"__ignoreMap":30},[14,109790,109791],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[115,109793,109795],{"id":109794},"reward-是什么","reward 是什么",[14,109797,109798],{},"奖励函数：",[135,109800,109802],{"className":30391,"code":109801,"language":30393,"meta":30,"style":30},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[141,109803,109804],{"__ignoreMap":30},[144,109805,109806,109808,109811,109813,109815,109817,109820,109822,109825,109827,109829,109831,109834,109836],{"class":146,"line":147},[144,109807,17077],{"class":150},[144,109809,109810],{"class":203}," float",[144,109812,155],{"class":154},[144,109814,102416],{"class":203},[144,109816,52284],{"class":150},[144,109818,109819],{"class":203}," 0.1",[144,109821,6549],{"class":150},[144,109823,109824],{"class":154}," cart_x ",[144,109826,610],{"class":150},[144,109828,109824],{"class":154},[144,109830,687],{"class":150},[144,109832,109833],{"class":154}," pole_angle ",[144,109835,610],{"class":150},[144,109837,109838],{"class":154}," pole_angle)\n",[14,109840,106239],{},[98,109842,109843,109848,109851],{},[101,109844,109845,109846,28398],{},"基础奖励是 ",[141,109847,102416],{},[101,109849,109850],{},"小车离中心越远，扣分越多。",[101,109852,109853],{},"杆子角度越大，扣分越多。",[14,109855,109856],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[18,109858,101266],{"id":101265},[135,109860,109862],{"className":30391,"code":109861,"language":30393,"meta":30,"style":30},"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",[141,109863,109864,109870,109880,109884,109888,109896,109901,109905,109909,109913,109918,109922,109927,109932,109937,109941,109946,109951,109956,109960,109964,109968,109972,109976,109981,109985,109989,109993,109997,110001,110011,110018,110022,110026,110040,110054,110067,110097,110101,110105,110117,110129,110137,110141,110154,110158,110162,110171,110175,110191,110201,110214,110227,110231,110254,110272,110276,110288,110292,110296,110306,110316,110320,110336,110377,110381,110401,110417,110421,110425,110437],{"__ignoreMap":30},[144,109865,109866,109868],{"class":146,"line":147},[144,109867,30405],{"class":150},[144,109869,101314],{"class":154},[144,109871,109872,109874,109876,109878],{"class":146,"line":66},[144,109873,30405],{"class":150},[144,109875,31393],{"class":154},[144,109877,31396],{"class":150},[144,109879,31399],{"class":154},[144,109881,109882],{"class":146,"line":1210},[144,109883,2430],{"emptyLinePlaceholder":72},[144,109885,109886],{"class":146,"line":1225},[144,109887,2430],{"emptyLinePlaceholder":72},[144,109889,109890,109892,109894],{"class":146,"line":1231},[144,109891,101327],{"class":203},[144,109893,13595],{"class":150},[144,109895,101332],{"class":259},[144,109897,109898],{"class":146,"line":1245},[144,109899,109900],{"class":259},"\u003Cmujoco model=\"cartpole\">\n",[144,109902,109903],{"class":146,"line":1251},[144,109904,101342],{"class":259},[144,109906,109907],{"class":146,"line":1342},[144,109908,2430],{"emptyLinePlaceholder":72},[144,109910,109911],{"class":146,"line":1348},[144,109912,101351],{"class":259},[144,109914,109915],{"class":146,"line":1360},[144,109916,109917],{"class":259},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[144,109919,109920],{"class":146,"line":1642},[144,109921,2430],{"emptyLinePlaceholder":72},[144,109923,109924],{"class":146,"line":1647},[144,109925,109926],{"class":259},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[144,109928,109929],{"class":146,"line":1653},[144,109930,109931],{"class":259},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[144,109933,109934],{"class":146,"line":1658},[144,109935,109936],{"class":259},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[144,109938,109939],{"class":146,"line":1672},[144,109940,2430],{"emptyLinePlaceholder":72},[144,109942,109943],{"class":146,"line":1677},[144,109944,109945],{"class":259},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[144,109947,109948],{"class":146,"line":1683},[144,109949,109950],{"class":259},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[144,109952,109953],{"class":146,"line":1704},[144,109954,109955],{"class":259},"        \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",[144,109957,109958],{"class":146,"line":1709},[144,109959,106451],{"class":259},[144,109961,109962],{"class":146,"line":1723},[144,109963,101380],{"class":259},[144,109965,109966],{"class":146,"line":1728},[144,109967,101385],{"class":259},[144,109969,109970],{"class":146,"line":1757},[144,109971,2430],{"emptyLinePlaceholder":72},[144,109973,109974],{"class":146,"line":1762},[144,109975,106468],{"class":259},[144,109977,109978],{"class":146,"line":1779},[144,109979,109980],{"class":259},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[144,109982,109983],{"class":146,"line":1784},[144,109984,106478],{"class":259},[144,109986,109987],{"class":146,"line":1789},[144,109988,101390],{"class":259},[144,109990,109991],{"class":146,"line":1794},[144,109992,95711],{"class":259},[144,109994,109995],{"class":146,"line":1808},[144,109996,2430],{"emptyLinePlaceholder":72},[144,109998,109999],{"class":146,"line":1813},[144,110000,2430],{"emptyLinePlaceholder":72},[144,110002,110003,110005,110008],{"class":146,"line":2607},[144,110004,31960],{"class":150},[144,110006,110007],{"class":1993}," get_observation",[144,110009,110010],{"class":154},"(data: mujoco.MjData) -> np.ndarray:\n",[144,110012,110013,110015],{"class":146,"line":2621},[144,110014,4120],{"class":150},[144,110016,110017],{"class":154}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[144,110019,110020],{"class":146,"line":2629},[144,110021,2430],{"emptyLinePlaceholder":72},[144,110023,110024],{"class":146,"line":2634},[144,110025,2430],{"emptyLinePlaceholder":72},[144,110027,110028,110030,110033,110036,110038],{"class":146,"line":2640},[144,110029,31960],{"class":150},[144,110031,110032],{"class":1993}," compute_reward",[144,110034,110035],{"class":154},"(obs: np.ndarray) -> ",[144,110037,194],{"class":203},[144,110039,3769],{"class":154},[144,110041,110042,110045,110047,110050,110052],{"class":146,"line":2646},[144,110043,110044],{"class":154},"    cart_x ",[144,110046,200],{"class":150},[144,110048,110049],{"class":154}," obs[",[144,110051,346],{"class":203},[144,110053,33259],{"class":154},[144,110055,110056,110059,110061,110063,110065],{"class":146,"line":2651},[144,110057,110058],{"class":154},"    pole_angle ",[144,110060,200],{"class":150},[144,110062,110049],{"class":154},[144,110064,372],{"class":203},[144,110066,33259],{"class":154},[144,110068,110069,110071,110073,110075,110077,110079,110081,110083,110085,110087,110089,110091,110093,110095],{"class":146,"line":7979},[144,110070,4120],{"class":150},[144,110072,109810],{"class":203},[144,110074,155],{"class":154},[144,110076,102416],{"class":203},[144,110078,52284],{"class":150},[144,110080,109819],{"class":203},[144,110082,6549],{"class":150},[144,110084,109824],{"class":154},[144,110086,610],{"class":150},[144,110088,109824],{"class":154},[144,110090,687],{"class":150},[144,110092,109833],{"class":154},[144,110094,610],{"class":150},[144,110096,109838],{"class":154},[144,110098,110099],{"class":146,"line":8003},[144,110100,2430],{"emptyLinePlaceholder":72},[144,110102,110103],{"class":146,"line":8008},[144,110104,2430],{"emptyLinePlaceholder":72},[144,110106,110107,110109,110111,110113,110115],{"class":146,"line":8014},[144,110108,31960],{"class":150},[144,110110,2003],{"class":1993},[144,110112,101411],{"class":154},[144,110114,95699],{"class":203},[144,110116,3769],{"class":154},[144,110118,110119,110121,110123,110125,110127],{"class":146,"line":8041},[144,110120,101420],{"class":154},[144,110122,200],{"class":150},[144,110124,101425],{"class":154},[144,110126,101327],{"class":203},[144,110128,161],{"class":154},[144,110130,110131,110133,110135],{"class":146,"line":8046},[144,110132,101434],{"class":154},[144,110134,200],{"class":150},[144,110136,101439],{"class":154},[144,110138,110139],{"class":146,"line":8052},[144,110140,2430],{"emptyLinePlaceholder":72},[144,110142,110143,110145,110147,110149,110151],{"class":146,"line":8064},[144,110144,105082],{"class":154},[144,110146,372],{"class":203},[144,110148,4473],{"class":154},[144,110150,200],{"class":150},[144,110152,110153],{"class":203}," 0.1\n",[144,110155,110156],{"class":146,"line":8076},[144,110157,105095],{"class":154},[144,110159,110160],{"class":146,"line":8088},[144,110161,2430],{"emptyLinePlaceholder":72},[144,110163,110164,110167,110169],{"class":146,"line":9747},[144,110165,110166],{"class":154},"    total_reward ",[144,110168,200],{"class":150},[144,110170,104774],{"class":203},[144,110172,110173],{"class":146,"line":9772},[144,110174,2430],{"emptyLinePlaceholder":72},[144,110176,110177,110179,110181,110183,110185,110187,110189],{"class":146,"line":9795},[144,110178,3231],{"class":150},[144,110180,31629],{"class":154},[144,110182,26056],{"class":150},[144,110184,32456],{"class":203},[144,110186,155],{"class":154},[144,110188,6441],{"class":203},[144,110190,30799],{"class":154},[144,110192,110193,110196,110198],{"class":146,"line":9819},[144,110194,110195],{"class":154},"        obs ",[144,110197,200],{"class":150},[144,110199,110200],{"class":154}," get_observation(data)\n",[144,110202,110203,110206,110208,110210,110212],{"class":146,"line":9824},[144,110204,110205],{"class":154},"        pole_angle ",[144,110207,200],{"class":150},[144,110209,110049],{"class":154},[144,110211,372],{"class":203},[144,110213,33259],{"class":154},[144,110215,110216,110219,110221,110223,110225],{"class":146,"line":9829},[144,110217,110218],{"class":154},"        pole_angular_velocity ",[144,110220,200],{"class":150},[144,110222,110049],{"class":154},[144,110224,226],{"class":203},[144,110226,33259],{"class":154},[144,110228,110229],{"class":146,"line":9834},[144,110230,2430],{"emptyLinePlaceholder":72},[144,110232,110233,110236,110238,110241,110243,110245,110247,110249,110251],{"class":146,"line":9843},[144,110234,110235],{"class":154},"        action ",[144,110237,200],{"class":150},[144,110239,110240],{"class":203}," 2.0",[144,110242,6549],{"class":150},[144,110244,109833],{"class":154},[144,110246,636],{"class":150},[144,110248,61880],{"class":203},[144,110250,6549],{"class":150},[144,110252,110253],{"class":154}," pole_angular_velocity\n",[144,110255,110256,110258,110260,110262,110264,110266,110268,110270],{"class":146,"line":9848},[144,110257,110235],{"class":154},[144,110259,200],{"class":150},[144,110261,107460],{"class":154},[144,110263,687],{"class":150},[144,110265,102416],{"class":203},[144,110267,12466],{"class":154},[144,110269,102416],{"class":203},[144,110271,161],{"class":154},[144,110273,110274],{"class":146,"line":9854},[144,110275,2430],{"emptyLinePlaceholder":72},[144,110277,110278,110280,110282,110284,110286],{"class":146,"line":9875},[144,110279,106630],{"class":154},[144,110281,346],{"class":203},[144,110283,4473],{"class":154},[144,110285,200],{"class":150},[144,110287,107483],{"class":154},[144,110289,110290],{"class":146,"line":9881},[144,110291,101529],{"class":154},[144,110293,110294],{"class":146,"line":9895},[144,110295,2430],{"emptyLinePlaceholder":72},[144,110297,110298,110301,110303],{"class":146,"line":9901},[144,110299,110300],{"class":154},"        reward ",[144,110302,200],{"class":150},[144,110304,110305],{"class":154}," compute_reward(get_observation(data))\n",[144,110307,110308,110311,110313],{"class":146,"line":9928},[144,110309,110310],{"class":154},"        total_reward ",[144,110312,9508],{"class":150},[144,110314,110315],{"class":154}," reward\n",[144,110317,110318],{"class":146,"line":9937},[144,110319,2430],{"emptyLinePlaceholder":72},[144,110321,110322,110324,110326,110328,110330,110332,110334],{"class":146,"line":9943},[144,110323,2527],{"class":150},[144,110325,31629],{"class":154},[144,110327,483],{"class":150},[144,110329,5785],{"class":203},[144,110331,101572],{"class":150},[144,110333,4123],{"class":203},[144,110335,3769],{"class":154},[144,110337,110338,110340,110342,110345,110348,110351,110354,110356,110359,110362,110364,110366,110368,110370,110373,110375],{"class":146,"line":9951},[144,110339,34663],{"class":203},[144,110341,155],{"class":154},[144,110343,110344],{"class":259},"\"step:\"",[144,110346,110347],{"class":154},", step, ",[144,110349,110350],{"class":259},"\"obs:\"",[144,110352,110353],{"class":154},", np.round(obs, ",[144,110355,226],{"class":203},[144,110357,110358],{"class":154},"), ",[144,110360,110361],{"class":259},"\"action:\"",[144,110363,12466],{"class":154},[144,110365,32031],{"class":203},[144,110367,155],{"class":154},[144,110369,194],{"class":203},[144,110371,110372],{"class":154},"(action), ",[144,110374,226],{"class":203},[144,110376,30510],{"class":154},[144,110378,110379],{"class":146,"line":9956},[144,110380,2430],{"emptyLinePlaceholder":72},[144,110382,110383,110385,110387,110390,110392,110394,110397,110399],{"class":146,"line":16635},[144,110384,31312],{"class":203},[144,110386,155],{"class":154},[144,110388,110389],{"class":259},"\"total_reward:\"",[144,110391,12466],{"class":154},[144,110393,32031],{"class":203},[144,110395,110396],{"class":154},"(total_reward, ",[144,110398,226],{"class":203},[144,110400,30510],{"class":154},[144,110402,110403,110405,110407,110410,110413,110415],{"class":146,"line":16641},[144,110404,31312],{"class":203},[144,110406,155],{"class":154},[144,110408,110409],{"class":259},"\"final obs:\"",[144,110411,110412],{"class":154},", np.round(get_observation(data), ",[144,110414,226],{"class":203},[144,110416,30510],{"class":154},[144,110418,110419],{"class":146,"line":16664},[144,110420,2430],{"emptyLinePlaceholder":72},[144,110422,110423],{"class":146,"line":16670},[144,110424,2430],{"emptyLinePlaceholder":72},[144,110426,110427,110429,110431,110433,110435],{"class":146,"line":16693},[144,110428,1561],{"class":150},[144,110430,31233],{"class":203},[144,110432,101572],{"class":150},[144,110434,101575],{"class":259},[144,110436,3769],{"class":154},[144,110438,110439],{"class":146,"line":16707},[144,110440,101582],{"class":154},[14,110442,103583],{},[135,110444,110446],{"className":23854,"code":110445,"language":23856,"meta":30,"style":30},"touch ch6_cartpole.py\n",[141,110447,110448],{"__ignoreMap":30},[144,110449,110450,110452],{"class":146,"line":147},[144,110451,101296],{"class":1993},[144,110453,110454],{"class":259}," ch6_cartpole.py\n",[14,110456,110457],{},"运行：",[135,110459,110461],{"className":23854,"code":110460,"language":23856,"meta":30,"style":30},"python ch6_cartpole.py\n",[141,110462,110463],{"__ignoreMap":30},[144,110464,110465,110467],{"class":146,"line":147},[144,110466,30393],{"class":1993},[144,110468,110454],{"class":259},[115,110470,101585],{"id":101585},[14,110472,110473],{},"构造观测：",[135,110475,110477],{"className":30391,"code":110476,"language":30393,"meta":30,"style":30},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[141,110478,110479,110487],{"__ignoreMap":30},[144,110480,110481,110483,110485],{"class":146,"line":147},[144,110482,31960],{"class":150},[144,110484,110007],{"class":1993},[144,110486,110010],{"class":154},[144,110488,110489,110491],{"class":146,"line":66},[144,110490,4120],{"class":150},[144,110492,110017],{"class":154},[14,110494,110495,110498,110499,110501,110502,110504],{},[141,110496,110497],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[141,110500,104043],{}," 2 维，",[141,110503,104373],{}," 2 维，所以 obs 是 4 维。",[14,110506,110507],{},"设置初始角度：",[135,110509,110511],{"className":30391,"code":110510,"language":30393,"meta":30,"style":30},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[141,110512,110513,110525],{"__ignoreMap":30},[144,110514,110515,110517,110519,110521,110523],{"class":146,"line":147},[144,110516,104712],{"class":154},[144,110518,372],{"class":203},[144,110520,4473],{"class":154},[144,110522,200],{"class":150},[144,110524,110153],{"class":203},[144,110526,110527],{"class":146,"line":66},[144,110528,104556],{"class":154},[14,110530,110531],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,110533,110534],{},"简单反馈控制：",[135,110536,110538],{"className":30391,"code":110537,"language":30393,"meta":30,"style":30},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[141,110539,110540,110560],{"__ignoreMap":30},[144,110541,110542,110544,110546,110548,110550,110552,110554,110556,110558],{"class":146,"line":147},[144,110543,107455],{"class":154},[144,110545,200],{"class":150},[144,110547,110240],{"class":203},[144,110549,6549],{"class":150},[144,110551,109833],{"class":154},[144,110553,636],{"class":150},[144,110555,61880],{"class":203},[144,110557,6549],{"class":150},[144,110559,110253],{"class":154},[144,110561,110562,110564,110566,110568,110570,110572,110574,110576],{"class":146,"line":66},[144,110563,107455],{"class":154},[144,110565,200],{"class":150},[144,110567,107460],{"class":154},[144,110569,687],{"class":150},[144,110571,102416],{"class":203},[144,110573,12466],{"class":154},[144,110575,102416],{"class":203},[144,110577,161],{"class":154},[14,110579,110580],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,110582,110583],{},"限制动作：",[135,110585,110587],{"className":30391,"code":110586,"language":30393,"meta":30,"style":30},"np.clip(action, -1.0, 1.0)\n",[141,110588,110589],{"__ignoreMap":30},[144,110590,110591,110594,110596,110598,110600,110602],{"class":146,"line":147},[144,110592,110593],{"class":154},"np.clip(action, ",[144,110595,687],{"class":150},[144,110597,102416],{"class":203},[144,110599,12466],{"class":154},[144,110601,102416],{"class":203},[144,110603,161],{"class":154},[14,110605,110606,110607,110610],{},"因为 XML 里 ",[141,110608,110609],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[115,110612,101721],{"id":101721},[135,110614,110615],{"className":30391,"code":110476,"language":30393,"meta":30,"style":30},[141,110616,110617,110625],{"__ignoreMap":30},[144,110618,110619,110621,110623],{"class":146,"line":147},[144,110620,31960],{"class":150},[144,110622,110007],{"class":1993},[144,110624,110010],{"class":154},[144,110626,110627,110629],{"class":146,"line":66},[144,110628,4120],{"class":150},[144,110630,110017],{"class":154},[14,110632,110633,110634,110637,110638,110641,110642,110645],{},"这段定义了一个函数，用来获取当前观测。",[141,110635,110636],{},"data.qpos.copy()"," 是位置数组副本，",[141,110639,110640],{},"data.qvel.copy()"," 是速度数组副本。",[141,110643,110644],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,110647,110648],{},"在本章模型里：",[135,110650,110653],{"className":110651,"code":110652,"language":5218,"meta":30},[5216],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[141,110654,110652],{"__ignoreMap":30},[14,110656,110657],{},"所以返回的 obs 是：",[135,110659,110662],{"className":110660,"code":110661,"language":5218,"meta":30},[5216],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[141,110663,110661],{"__ignoreMap":30},[135,110665,110667],{"className":30391,"code":110666,"language":30393,"meta":30,"style":30},"def compute_reward(obs: np.ndarray) -> float:\n",[141,110668,110669],{"__ignoreMap":30},[144,110670,110671,110673,110675,110677,110679],{"class":146,"line":147},[144,110672,31960],{"class":150},[144,110674,110032],{"class":1993},[144,110676,110035],{"class":154},[144,110678,194],{"class":203},[144,110680,3769],{"class":154},[14,110682,110683,110684,110687],{},"这行定义奖励函数。输入是观测 ",[141,110685,110686],{},"obs","，输出是一个浮点数奖励。",[135,110689,110691],{"className":30391,"code":110690,"language":30393,"meta":30,"style":30},"cart_x = obs[0]\npole_angle = obs[1]\n",[141,110692,110693,110706],{"__ignoreMap":30},[144,110694,110695,110698,110700,110702,110704],{"class":146,"line":147},[144,110696,110697],{"class":154},"cart_x ",[144,110699,200],{"class":150},[144,110701,110049],{"class":154},[144,110703,346],{"class":203},[144,110705,33259],{"class":154},[144,110707,110708,110711,110713,110715,110717],{"class":146,"line":66},[144,110709,110710],{"class":154},"pole_angle ",[144,110712,200],{"class":150},[144,110714,110049],{"class":154},[144,110716,372],{"class":203},[144,110718,33259],{"class":154},[14,110720,110721,110722,110725,110726,110729],{},"数组索引从 0 开始。",[141,110723,110724],{},"obs[0]"," 是第一个元素，也就是小车位置。",[141,110727,110728],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[135,110731,110732],{"className":30391,"code":109801,"language":30393,"meta":30,"style":30},[141,110733,110734],{"__ignoreMap":30},[144,110735,110736,110738,110740,110742,110744,110746,110748,110750,110752,110754,110756,110758,110760,110762],{"class":146,"line":147},[144,110737,17077],{"class":150},[144,110739,109810],{"class":203},[144,110741,155],{"class":154},[144,110743,102416],{"class":203},[144,110745,52284],{"class":150},[144,110747,109819],{"class":203},[144,110749,6549],{"class":150},[144,110751,109824],{"class":154},[144,110753,610],{"class":150},[144,110755,109824],{"class":154},[144,110757,687],{"class":150},[144,110759,109833],{"class":154},[144,110761,610],{"class":150},[144,110763,109838],{"class":154},[14,110765,110766,110767,110770,110771,110774],{},"这行计算奖励。",[141,110768,110769],{},"cart_x * cart_x"," 是小车位置的平方，",[141,110772,110773],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[135,110776,110778],{"className":30391,"code":110777,"language":30393,"meta":30,"style":30},"data.qpos[1] = 0.1\n",[141,110779,110780],{"__ignoreMap":30},[144,110781,110782,110784,110786,110788,110790],{"class":146,"line":147},[144,110783,104712],{"class":154},[144,110785,372],{"class":203},[144,110787,4473],{"class":154},[144,110789,200],{"class":150},[144,110791,110153],{"class":203},[14,110793,110794,110795,110797,110798,110800],{},"手动设置杆子的初始角度。因为 ",[141,110796,105469],{}," 是小车位置，",[141,110799,105472],{}," 是杆子角度，所以这里改的是杆子。",[135,110802,110803],{"className":30391,"code":104556,"language":30393,"meta":30,"style":30},[141,110804,110805],{"__ignoreMap":30},[144,110806,110807],{"class":146,"line":147},[144,110808,104556],{"class":154},[14,110810,105515,110811,110813],{},[141,110812,104043],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[135,110815,110817],{"className":30391,"code":110816,"language":30393,"meta":30,"style":30},"total_reward = 0.0\n",[141,110818,110819],{"__ignoreMap":30},[144,110820,110821,110824,110826],{"class":146,"line":147},[144,110822,110823],{"class":154},"total_reward ",[144,110825,200],{"class":150},[144,110827,104774],{"class":203},[14,110829,110830],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[135,110832,110834],{"className":30391,"code":110833,"language":30393,"meta":30,"style":30},"for step in range(1000):\n",[141,110835,110836],{"__ignoreMap":30},[144,110837,110838,110840,110842,110844,110846,110848,110850],{"class":146,"line":147},[144,110839,3055],{"class":150},[144,110841,31629],{"class":154},[144,110843,26056],{"class":150},[144,110845,32456],{"class":203},[144,110847,155],{"class":154},[144,110849,6441],{"class":203},[144,110851,30799],{"class":154},[14,110853,110854,110855,110857],{},"循环 1000 步。",[141,110856,107147],{}," 是当前步数，从 0 到 999。",[135,110859,110861],{"className":30391,"code":110860,"language":30393,"meta":30,"style":30},"obs = get_observation(data)\n",[141,110862,110863],{"__ignoreMap":30},[144,110864,110865,110868,110870],{"class":146,"line":147},[144,110866,110867],{"class":154},"obs ",[144,110869,200],{"class":150},[144,110871,110200],{"class":154},[14,110873,110874,110875,28398],{},"读取当前状态，保存到 ",[141,110876,110686],{},[135,110878,110880],{"className":30391,"code":110879,"language":30393,"meta":30,"style":30},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[141,110881,110882,110894],{"__ignoreMap":30},[144,110883,110884,110886,110888,110890,110892],{"class":146,"line":147},[144,110885,110710],{"class":154},[144,110887,200],{"class":150},[144,110889,110049],{"class":154},[144,110891,372],{"class":203},[144,110893,33259],{"class":154},[144,110895,110896,110899,110901,110903,110905],{"class":146,"line":66},[144,110897,110898],{"class":154},"pole_angular_velocity ",[144,110900,200],{"class":150},[144,110902,110049],{"class":154},[144,110904,226],{"class":203},[144,110906,33259],{"class":154},[14,110908,110909,110910,110913,110914,28398],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[141,110911,110912],{},"obs[3]","？因为 obs 的顺序是 ",[141,110915,110916],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[135,110918,110920],{"className":30391,"code":110919,"language":30393,"meta":30,"style":30},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[141,110921,110922],{"__ignoreMap":30},[144,110923,110924,110926,110928,110930,110932,110934,110936,110938,110940],{"class":146,"line":147},[144,110925,107455],{"class":154},[144,110927,200],{"class":150},[144,110929,110240],{"class":203},[144,110931,6549],{"class":150},[144,110933,109833],{"class":154},[144,110935,636],{"class":150},[144,110937,61880],{"class":203},[144,110939,6549],{"class":150},[144,110941,110253],{"class":154},[14,110943,110944,110945,101031,110947,110949],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[141,110946,105273],{},[141,110948,35342],{}," 是人为设置的系数，不是固定公式。",[135,110951,110953],{"className":30391,"code":110952,"language":30393,"meta":30,"style":30},"action = np.clip(action, -1.0, 1.0)\n",[141,110954,110955],{"__ignoreMap":30},[144,110956,110957,110959,110961,110963,110965,110967,110969,110971],{"class":146,"line":147},[144,110958,107455],{"class":154},[144,110960,200],{"class":150},[144,110962,107460],{"class":154},[144,110964,687],{"class":150},[144,110966,102416],{"class":203},[144,110968,12466],{"class":154},[144,110970,102416],{"class":203},[144,110972,161],{"class":154},[14,110974,110975],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[135,110977,110978],{"className":30391,"code":109786,"language":30393,"meta":30,"style":30},[141,110979,110980],{"__ignoreMap":30},[144,110981,110982,110984,110986,110988,110990],{"class":146,"line":147},[144,110983,105884],{"class":154},[144,110985,346],{"class":203},[144,110987,4473],{"class":154},[144,110989,200],{"class":150},[144,110991,107483],{"class":154},[14,110993,110994],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[135,110996,110997],{"className":30391,"code":104518,"language":30393,"meta":30,"style":30},[141,110998,110999],{"__ignoreMap":30},[144,111000,111001],{"class":146,"line":147},[144,111002,104518],{"class":154},[14,111004,111005,111006,111008],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[141,111007,106139],{}," 计算小车和杆子的下一刻状态。",[135,111010,111012],{"className":30391,"code":111011,"language":30393,"meta":30,"style":30},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[141,111013,111014,111023],{"__ignoreMap":30},[144,111015,111016,111019,111021],{"class":146,"line":147},[144,111017,111018],{"class":154},"reward ",[144,111020,200],{"class":150},[144,111022,110305],{"class":154},[144,111024,111025,111027,111029],{"class":146,"line":66},[144,111026,110823],{"class":154},[144,111028,9508],{"class":150},[144,111030,110315],{"class":154},[14,111032,111033,111034,111036,111037,111040,111041,28398],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[141,111035,9508],{}," 是简写，",[141,111038,111039],{},"total_reward += reward"," 等价于 ",[141,111042,111043],{},"total_reward = total_reward + reward",[135,111045,111047],{"className":30391,"code":111046,"language":30393,"meta":30,"style":30},"if step % 100 == 0:\n",[141,111048,111049],{"__ignoreMap":30},[144,111050,111051,111053,111055,111057,111059,111061,111063],{"class":146,"line":147},[144,111052,1561],{"class":150},[144,111054,31629],{"class":154},[144,111056,483],{"class":150},[144,111058,5785],{"class":203},[144,111060,101572],{"class":150},[144,111062,4123],{"class":203},[144,111064,3769],{"class":154},[14,111066,111067,111069,111070,111073],{},[141,111068,483],{}," 是取余数。",[141,111071,111072],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[135,111075,111077],{"className":30391,"code":111076,"language":30393,"meta":30,"style":30},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[141,111078,111079],{"__ignoreMap":30},[144,111080,111081,111083,111085,111087,111089,111091,111093,111095,111097,111099,111101,111103,111105,111107,111109,111111],{"class":146,"line":147},[144,111082,30428],{"class":203},[144,111084,155],{"class":154},[144,111086,110344],{"class":259},[144,111088,110347],{"class":154},[144,111090,110350],{"class":259},[144,111092,110353],{"class":154},[144,111094,226],{"class":203},[144,111096,110358],{"class":154},[144,111098,110361],{"class":259},[144,111100,12466],{"class":154},[144,111102,32031],{"class":203},[144,111104,155],{"class":154},[144,111106,194],{"class":203},[144,111108,110372],{"class":154},[144,111110,226],{"class":203},[144,111112,30510],{"class":154},[14,111114,111115,111116,111119,111120,111123],{},"打印当前步数、观测和动作。",[141,111117,111118],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[141,111121,111122],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[18,111125,102329],{"id":102328},[14,111127,111128],{},"观测向量:",[135,111130,111133],{"className":111131,"code":111132,"language":5218,"meta":30},[5216],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[141,111134,111132],{"__ignoreMap":30},[14,111136,111137],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111139,111140],{},"每隔 100 步会打印一次：",[135,111142,111145],{"className":111143,"code":111144,"language":5218,"meta":30},[5216],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[141,111146,111144],{"__ignoreMap":30},[14,111148,111149],{},"重点观察：",[98,111151,111152,111158,111163],{},[101,111153,111154,111157],{},[141,111155,111156],{},"pole_angle"," 是否越来越大。",[101,111159,111160,111162],{},[141,111161,109739],{}," 是否跑得太远。",[101,111164,111165,111166,82552,111168,28398],{},"action 是否经常被 clip 到 ",[141,111167,103928],{},[141,111169,372],{},[14,111171,111172],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[18,111174,102361],{"id":102360},[98,111176,111177,111183,111186,111192,111202,111208,111211],{},[101,111178,111179,111180,28398],{},"把初始角度改为 ",[141,111181,111182],{},"data.qpos[1] = 0.3",[101,111184,111185],{},"重新运行，观察控制是否变差。",[101,111187,111188,111189,111191],{},"把 actuator ",[141,111190,107080],{}," 改小。",[101,111193,111194,111195,111198,111199,28398],{},"打印 ",[141,111196,111197],{},"model.nq, model.nv, model.nu","，应为 ",[141,111200,111201],{},"2 2 1",[101,111203,111204,111205,111207],{},"把 reward 里的 ",[141,111206,110773],{}," 系数改大，观察总奖励变化。",[101,111209,111210],{},"把控制器改成反号，观察杆子是否更容易倒。",[101,111212,111213],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[18,111215,102466],{"id":102465},[115,111217,111218],{"id":111218},"杆子方向和预期不一致",[14,111220,102409,111221,111223,111224,111226],{},[141,111222,106252],{}," 和 capsule 的 ",[141,111225,103189],{},"，必要时用 viewer 可视化确认。",[115,111228,111229],{"id":111229},"控制器越控越倒",[14,111231,111232],{},"说明反馈符号可能反了，尝试:",[135,111234,111236],{"className":30391,"code":111235,"language":30393,"meta":30,"style":30},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[141,111237,111238],{"__ignoreMap":30},[144,111239,111240,111242,111244,111246,111248,111250,111252,111254,111256,111258],{"class":146,"line":147},[144,111241,107455],{"class":154},[144,111243,200],{"class":150},[144,111245,52284],{"class":150},[144,111247,105273],{"class":203},[144,111249,6549],{"class":150},[144,111251,109833],{"class":154},[144,111253,687],{"class":150},[144,111255,61880],{"class":203},[144,111257,6549],{"class":150},[144,111259,110253],{"class":154},[115,111261,111262],{"id":111262},"小车飞走",[14,111264,111265,111266,111268,111269,111272],{},"降低 ",[141,111267,107080],{}," 或缩小 ",[141,111270,111271],{},"action"," 的 clip 范围。",[115,111274,111276,111278],{"id":111275},"obs3-为什么是杆子角速度",[141,111277,110912],{}," 为什么是杆子角速度",[14,111280,111281],{},"因为这个模型里：",[135,111283,111286],{"className":111284,"code":111285,"language":5218,"meta":30},[5216],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[141,111287,111285],{"__ignoreMap":30},[14,111289,109760],{},[135,111291,111294],{"className":111292,"code":111293,"language":5218,"meta":30},[5216],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[141,111295,111293],{"__ignoreMap":30},[115,111297,111299],{"id":111298},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111301,111302],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[18,111304,102620],{"id":102619},[14,111306,111307],{},"一个控制任务通常包含：",[98,111309,111310,111313,111321,111326,111329],{},[101,111311,111312],{},"模型：Cartpole 的 body、joint、actuator。",[101,111314,111315,111316,367,111318,111320],{},"观测：从 ",[141,111317,104043],{},[141,111319,104373],{}," 里取状态。",[101,111322,111323,111324,28398],{},"动作：写入 ",[141,111325,101089],{},[101,111327,111328],{},"奖励：根据任务目标打分。",[101,111330,111331],{},"循环：obs -> action -> step -> reward。",[14,111333,111334],{},"这就是后面 Gymnasium 环境的基本骨架。",[5157,111336,104299],{},{"title":30,"searchDepth":66,"depth":66,"links":111338},[111339,111340,111341,111346,111350,111351,111352,111360],{"id":100659,"depth":66,"text":100660},{"id":100782,"depth":66,"text":100783},{"id":101057,"depth":66,"text":101058,"children":111342},[111343,111344,111345],{"id":109713,"depth":1210,"text":109714},{"id":109778,"depth":1210,"text":109779},{"id":109794,"depth":1210,"text":109795},{"id":101265,"depth":66,"text":101266,"children":111347},[111348,111349],{"id":101585,"depth":1210,"text":101585},{"id":101721,"depth":1210,"text":101721},{"id":102328,"depth":66,"text":102329},{"id":102360,"depth":66,"text":102361},{"id":102465,"depth":66,"text":102466,"children":111353},[111354,111355,111356,111357,111359],{"id":111218,"depth":1210,"text":111218},{"id":111229,"depth":1210,"text":111229},{"id":111262,"depth":1210,"text":111262},{"id":111275,"depth":1210,"text":111358},"obs[3] 为什么是杆子角速度",{"id":111298,"depth":1210,"text":111299},{"id":102619,"depth":66,"text":102620},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109449,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111367,"title":111368,"body":111369,"description":30,"extension":70,"meta":113383,"navigation":72,"path":113384,"seo":113385,"stem":113386,"__hash__":113387},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111370,"toc":113359},[111371,111374,111376,111379,111381,111398,111401,111404,111410,111413,111415,111417,111441,111443,111457,111459,111500,111502,111520,111522,111525,111531,111534,111562,111566,111572,111597,111600,111631,111638,111641,111644,111650,111653,111659,111662,111668,111672,111675,111700,111703,111705,112465,112467,112479,112481,112492,112494,112497,112514,112517,112519,112530,112533,112535,112581,112584,112597,112600,112682,112685,112687,112703,112713,112726,112729,112768,112778,112789,112799,112812,112815,112844,112847,112857,112860,112866,112883,112894,112896,112902,112919,112930,112951,112954,112966,112969,112990,112993,113001,113009,113026,113029,113098,113105,113113,113116,113129,113136,113138,113141,113147,113150,113153,113159,113165,113167,113207,113209,113215,113224,113227,113229,113249,113252,113255,113261,113265,113267,113294,113297,113300,113327,113333,113336,113339,113341,113344,113347,113353,113356],[10,111372,111368],{"id":111373},"_7控制任务reacher-机械臂到达目标",[18,111375,100660],{"id":100659},[14,111377,111378],{},"本章搭建一个二维两关节 reacher 任务。",[14,111380,104344],{},[98,111382,111383,111386,111389,111392,111395],{},[101,111384,111385],{},"两个 hinge joint",[101,111387,111388],{},"两个 motor actuator",[101,111390,111391],{},"site 作为末端点和目标点",[101,111393,111394],{},"根据末端和目标距离设计 reward",[101,111396,111397],{},"构造机械臂任务的基本形式",[14,111399,111400],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,111402,111403],{},"Reacher 任务可以理解为：",[135,111405,111408],{"className":111406,"code":111407,"language":5218,"meta":30},[5216],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[141,111409,111407],{"__ignoreMap":30},[14,111411,111412],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[18,111414,100783],{"id":100782},[14,111416,100786],{},[135,111418,111419],{"className":23854,"code":104401,"language":23856,"meta":30,"style":30},[141,111420,111421],{"__ignoreMap":30},[144,111422,111423,111425,111427,111429,111431,111433,111435,111437,111439],{"class":146,"line":147},[144,111424,24589],{"class":1993},[144,111426,26328],{"class":259},[144,111428,23866],{"class":259},[144,111430,26413],{"class":203},[144,111432,104416],{"class":259},[144,111434,100811],{"class":259},[144,111436,102514],{"class":259},[144,111438,100827],{"class":259},[144,111440,104425],{"class":259},[14,111442,102832],{},[135,111444,111445],{"className":23854,"code":100932,"language":23856,"meta":30,"style":30},[141,111446,111447],{"__ignoreMap":30},[144,111448,111449,111451,111453,111455],{"class":146,"line":147},[144,111450,23863],{"class":1993},[144,111452,23866],{"class":259},[144,111454,100943],{"class":259},[144,111456,100946],{"class":259},[14,111458,102849],{},[135,111460,111462],{"className":23854,"code":111461,"language":23856,"meta":30,"style":30},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[141,111463,111464,111481,111490],{"__ignoreMap":30},[144,111465,111466,111468,111470,111472,111475,111477,111479],{"class":146,"line":147},[144,111467,30343],{"class":1993},[144,111469,29189],{"class":259},[144,111471,25128],{"class":203},[144,111473,111474],{"class":259}," mujoco-reacher",[144,111476,100988],{"class":259},[144,111478,100991],{"class":203},[144,111480,100994],{"class":203},[144,111482,111483,111485,111487],{"class":146,"line":66},[144,111484,30343],{"class":1993},[144,111486,101001],{"class":259},[144,111488,111489],{"class":259}," mujoco-reacher\n",[144,111491,111492,111494,111496,111498],{"class":146,"line":1210},[144,111493,23863],{"class":1993},[144,111495,23866],{"class":259},[144,111497,100943],{"class":259},[144,111499,100946],{"class":259},[14,111501,101017],{},[98,111503,111504,111507,111510],{},[101,111505,111506],{},"本章使用低维状态，不使用图像输入。",[101,111508,111509],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[101,111511,111512,111513,367,111515,367,111517,111519],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[141,111514,104043],{},[141,111516,104373],{},[141,111518,103693],{}," 的方法一致。",[18,111521,101058],{"id":101057},[14,111523,111524],{},"Reacher 任务核心:",[135,111526,111529],{"className":111527,"code":111528,"language":5218,"meta":30},[5216],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[141,111530,111528],{"__ignoreMap":30},[14,111532,111533],{},"读取 site 世界坐标:",[135,111535,111537],{"className":30391,"code":111536,"language":30393,"meta":30,"style":30},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[141,111538,111539,111552],{"__ignoreMap":30},[144,111540,111541,111543,111545,111547,111550],{"class":146,"line":147},[144,111542,103647],{"class":154},[144,111544,200],{"class":150},[144,111546,103418],{"class":154},[144,111548,111549],{"class":259},"\"tip\"",[144,111551,161],{"class":154},[144,111553,111554,111557,111559],{"class":146,"line":66},[144,111555,111556],{"class":154},"tip_pos ",[144,111558,200],{"class":150},[144,111560,111561],{"class":154}," data.site_xpos[site_id]\n",[115,111563,111565],{"id":111564},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,111567,111568,111569,111571],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[141,111570,104043],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[135,111573,111575],{"className":30391,"code":111574,"language":30393,"meta":30,"style":30},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[141,111576,111577,111587],{"__ignoreMap":30},[144,111578,111579,111582,111584],{"class":146,"line":147},[144,111580,111581],{"class":154},"tip ",[144,111583,200],{"class":150},[144,111585,111586],{"class":154}," data.site_xpos[tip_site_id]\n",[144,111588,111589,111592,111594],{"class":146,"line":66},[144,111590,111591],{"class":154},"target ",[144,111593,200],{"class":150},[144,111595,111596],{"class":154}," data.site_xpos[target_site_id]\n",[14,111598,111599],{},"这样 reward 就很容易写：",[135,111601,111603],{"className":30391,"code":111602,"language":30393,"meta":30,"style":30},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[141,111604,111605,111620],{"__ignoreMap":30},[144,111606,111607,111610,111612,111615,111617],{"class":146,"line":147},[144,111608,111609],{"class":154},"dist ",[144,111611,200],{"class":150},[144,111613,111614],{"class":154}," np.linalg.norm(tip ",[144,111616,687],{"class":150},[144,111618,111619],{"class":154}," target)\n",[144,111621,111622,111624,111626,111628],{"class":146,"line":66},[144,111623,111018],{"class":154},[144,111625,200],{"class":150},[144,111627,52284],{"class":150},[144,111629,111630],{"class":154},"dist\n",[14,111632,111633,111634,111637],{},"距离越小，",[141,111635,111636],{},"-dist"," 越接近 0，奖励越高。",[115,111639,111640],{"id":111640},"两关节机械臂的状态",[14,111642,111643],{},"这个模型有两个 hinge joint：",[135,111645,111648],{"className":111646,"code":111647,"language":5218,"meta":30},[5216],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[141,111649,111647],{"__ignoreMap":30},[14,111651,111652],{},"再加上末端和目标位置：",[135,111654,111657],{"className":111655,"code":111656,"language":5218,"meta":30},[5216],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[141,111658,111656],{"__ignoreMap":30},[14,111660,111661],{},"总维度：",[135,111663,111666],{"className":111664,"code":111665,"language":5218,"meta":30},[5216],"2 + 2 + 3 + 3 = 10\n",[141,111667,111665],{"__ignoreMap":30},[115,111669,111671],{"id":111670},"为什么-gravity-是-0","为什么 gravity 是 0",[14,111673,111674],{},"本章把重力设为：",[135,111676,111678],{"className":53080,"code":111677,"language":53082,"meta":30,"style":30},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[141,111679,111680],{"__ignoreMap":30},[144,111681,111682,111684,111686,111688,111690,111692,111694,111696,111698],{"class":146,"line":147},[144,111683,1065],{"class":154},[144,111685,69179],{"class":51313},[144,111687,101207],{"class":1993},[144,111689,200],{"class":154},[144,111691,101212],{"class":259},[144,111693,101215],{"class":1993},[144,111695,200],{"class":154},[144,111697,103784],{"class":259},[144,111699,101157],{"class":154},[14,111701,111702],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[18,111704,101266],{"id":101265},[135,111706,111708],{"className":30391,"code":111707,"language":30393,"meta":30,"style":30},"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",[141,111709,111710,111716,111726,111730,111734,111742,111747,111752,111756,111760,111765,111770,111774,111779,111784,111789,111793,111798,111803,111808,111813,111817,111821,111825,111829,111833,111838,111843,111847,111851,111855,111859,111863,111878,111887,111899,111922,111929,111933,111937,111947,111961,111975,111982,111986,111990,112004,112016,112028,112041,112056,112073,112077,112081,112093,112105,112113,112121,112125,112141,112146,112159,112172,112187,112191,112226,112258,112262,112266,112275,112279,112295,112305,112316,112332,112348,112364,112380,112384,112402,112422,112441,112445,112449,112461],{"__ignoreMap":30},[144,111711,111712,111714],{"class":146,"line":147},[144,111713,30405],{"class":150},[144,111715,101314],{"class":154},[144,111717,111718,111720,111722,111724],{"class":146,"line":66},[144,111719,30405],{"class":150},[144,111721,31393],{"class":154},[144,111723,31396],{"class":150},[144,111725,31399],{"class":154},[144,111727,111728],{"class":146,"line":1210},[144,111729,2430],{"emptyLinePlaceholder":72},[144,111731,111732],{"class":146,"line":1225},[144,111733,2430],{"emptyLinePlaceholder":72},[144,111735,111736,111738,111740],{"class":146,"line":1231},[144,111737,101327],{"class":203},[144,111739,13595],{"class":150},[144,111741,101332],{"class":259},[144,111743,111744],{"class":146,"line":1245},[144,111745,111746],{"class":259},"\u003Cmujoco model=\"two_link_reacher\">\n",[144,111748,111749],{"class":146,"line":1251},[144,111750,111751],{"class":259},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[144,111753,111754],{"class":146,"line":1342},[144,111755,2430],{"emptyLinePlaceholder":72},[144,111757,111758],{"class":146,"line":1348},[144,111759,101351],{"class":259},[144,111761,111762],{"class":146,"line":1360},[144,111763,111764],{"class":259},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[144,111766,111767],{"class":146,"line":1642},[144,111768,111769],{"class":259},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[144,111771,111772],{"class":146,"line":1647},[144,111773,2430],{"emptyLinePlaceholder":72},[144,111775,111776],{"class":146,"line":1653},[144,111777,111778],{"class":259},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[144,111780,111781],{"class":146,"line":1658},[144,111782,111783],{"class":259},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[144,111785,111786],{"class":146,"line":1672},[144,111787,111788],{"class":259},"      \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",[144,111790,111791],{"class":146,"line":1677},[144,111792,2430],{"emptyLinePlaceholder":72},[144,111794,111795],{"class":146,"line":1683},[144,111796,111797],{"class":259},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[144,111799,111800],{"class":146,"line":1704},[144,111801,111802],{"class":259},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[144,111804,111805],{"class":146,"line":1709},[144,111806,111807],{"class":259},"        \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",[144,111809,111810],{"class":146,"line":1723},[144,111811,111812],{"class":259},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[144,111814,111815],{"class":146,"line":1728},[144,111816,106451],{"class":259},[144,111818,111819],{"class":146,"line":1757},[144,111820,101380],{"class":259},[144,111822,111823],{"class":146,"line":1762},[144,111824,101385],{"class":259},[144,111826,111827],{"class":146,"line":1779},[144,111828,2430],{"emptyLinePlaceholder":72},[144,111830,111831],{"class":146,"line":1784},[144,111832,106468],{"class":259},[144,111834,111835],{"class":146,"line":1789},[144,111836,111837],{"class":259},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[144,111839,111840],{"class":146,"line":1794},[144,111841,111842],{"class":259},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[144,111844,111845],{"class":146,"line":1808},[144,111846,106478],{"class":259},[144,111848,111849],{"class":146,"line":1813},[144,111850,101390],{"class":259},[144,111852,111853],{"class":146,"line":2607},[144,111854,95711],{"class":259},[144,111856,111857],{"class":146,"line":2621},[144,111858,2430],{"emptyLinePlaceholder":72},[144,111860,111861],{"class":146,"line":2629},[144,111862,2430],{"emptyLinePlaceholder":72},[144,111864,111865,111867,111870,111873,111875],{"class":146,"line":2634},[144,111866,31960],{"class":150},[144,111868,111869],{"class":1993}," site_position",[144,111871,111872],{"class":154},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[144,111874,1330],{"class":203},[144,111876,111877],{"class":154},") -> np.ndarray:\n",[144,111879,111880,111882,111884],{"class":146,"line":2640},[144,111881,103413],{"class":154},[144,111883,200],{"class":150},[144,111885,111886],{"class":154}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[144,111888,111889,111891,111893,111895,111897],{"class":146,"line":2646},[144,111890,3131],{"class":150},[144,111892,103462],{"class":154},[144,111894,1065],{"class":150},[144,111896,4123],{"class":203},[144,111898,3769],{"class":154},[144,111900,111901,111903,111905,111907,111909,111912,111914,111916,111918,111920],{"class":146,"line":2651},[144,111902,103445],{"class":150},[144,111904,103448],{"class":203},[144,111906,155],{"class":154},[144,111908,207],{"class":150},[144,111910,111911],{"class":259},"\"site not found: ",[144,111913,1051],{"class":203},[144,111915,79823],{"class":154},[144,111917,1101],{"class":203},[144,111919,406],{"class":259},[144,111921,161],{"class":154},[144,111923,111924,111926],{"class":146,"line":7979},[144,111925,4120],{"class":150},[144,111927,111928],{"class":154}," data.site_xpos[site_id].copy()\n",[144,111930,111931],{"class":146,"line":8003},[144,111932,2430],{"emptyLinePlaceholder":72},[144,111934,111935],{"class":146,"line":8008},[144,111936,2430],{"emptyLinePlaceholder":72},[144,111938,111939,111941,111944],{"class":146,"line":8014},[144,111940,31960],{"class":150},[144,111942,111943],{"class":1993}," get_obs",[144,111945,111946],{"class":154},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[144,111948,111949,111952,111954,111957,111959],{"class":146,"line":8041},[144,111950,111951],{"class":154},"    tip ",[144,111953,200],{"class":150},[144,111955,111956],{"class":154}," site_position(model, data, ",[144,111958,111549],{"class":259},[144,111960,161],{"class":154},[144,111962,111963,111966,111968,111970,111973],{"class":146,"line":8046},[144,111964,111965],{"class":154},"    target ",[144,111967,200],{"class":150},[144,111969,111956],{"class":154},[144,111971,111972],{"class":259},"\"target\"",[144,111974,161],{"class":154},[144,111976,111977,111979],{"class":146,"line":8052},[144,111978,4120],{"class":150},[144,111980,111981],{"class":154}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[144,111983,111984],{"class":146,"line":8064},[144,111985,2430],{"emptyLinePlaceholder":72},[144,111987,111988],{"class":146,"line":8076},[144,111989,2430],{"emptyLinePlaceholder":72},[144,111991,111992,111994,111997,112000,112002],{"class":146,"line":8088},[144,111993,31960],{"class":150},[144,111995,111996],{"class":1993}," reward",[144,111998,111999],{"class":154},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[144,112001,194],{"class":203},[144,112003,3769],{"class":154},[144,112005,112006,112008,112010,112012,112014],{"class":146,"line":9747},[144,112007,111951],{"class":154},[144,112009,200],{"class":150},[144,112011,111956],{"class":154},[144,112013,111549],{"class":259},[144,112015,161],{"class":154},[144,112017,112018,112020,112022,112024,112026],{"class":146,"line":9772},[144,112019,111965],{"class":154},[144,112021,200],{"class":150},[144,112023,111956],{"class":154},[144,112025,111972],{"class":259},[144,112027,161],{"class":154},[144,112029,112030,112033,112035,112037,112039],{"class":146,"line":9795},[144,112031,112032],{"class":154},"    dist ",[144,112034,200],{"class":150},[144,112036,111614],{"class":154},[144,112038,687],{"class":150},[144,112040,111619],{"class":154},[144,112042,112043,112046,112048,112051,112053],{"class":146,"line":9819},[144,112044,112045],{"class":154},"    control_cost ",[144,112047,200],{"class":150},[144,112049,112050],{"class":203}," 0.01",[144,112052,6549],{"class":150},[144,112054,112055],{"class":154}," np.sum(np.square(data.ctrl))\n",[144,112057,112058,112060,112062,112064,112066,112068,112070],{"class":146,"line":9824},[144,112059,4120],{"class":150},[144,112061,109810],{"class":203},[144,112063,155],{"class":154},[144,112065,687],{"class":150},[144,112067,111609],{"class":154},[144,112069,687],{"class":150},[144,112071,112072],{"class":154}," control_cost)\n",[144,112074,112075],{"class":146,"line":9829},[144,112076,2430],{"emptyLinePlaceholder":72},[144,112078,112079],{"class":146,"line":9834},[144,112080,2430],{"emptyLinePlaceholder":72},[144,112082,112083,112085,112087,112089,112091],{"class":146,"line":9843},[144,112084,31960],{"class":150},[144,112086,2003],{"class":1993},[144,112088,101411],{"class":154},[144,112090,95699],{"class":203},[144,112092,3769],{"class":154},[144,112094,112095,112097,112099,112101,112103],{"class":146,"line":9848},[144,112096,101420],{"class":154},[144,112098,200],{"class":150},[144,112100,101425],{"class":154},[144,112102,101327],{"class":203},[144,112104,161],{"class":154},[144,112106,112107,112109,112111],{"class":146,"line":9854},[144,112108,101434],{"class":154},[144,112110,200],{"class":150},[144,112112,101439],{"class":154},[144,112114,112115,112117,112119],{"class":146,"line":9875},[144,112116,110166],{"class":154},[144,112118,200],{"class":150},[144,112120,104774],{"class":203},[144,112122,112123],{"class":146,"line":9881},[144,112124,2430],{"emptyLinePlaceholder":72},[144,112126,112127,112129,112131,112133,112135,112137,112139],{"class":146,"line":9895},[144,112128,3231],{"class":150},[144,112130,31629],{"class":154},[144,112132,26056],{"class":150},[144,112134,32456],{"class":203},[144,112136,155],{"class":154},[144,112138,65087],{"class":203},[144,112140,30799],{"class":154},[144,112142,112143],{"class":146,"line":9901},[144,112144,112145],{"class":154},"        mujoco.mj_forward(model, data)\n",[144,112147,112148,112151,112153,112155,112157],{"class":146,"line":9928},[144,112149,112150],{"class":154},"        tip ",[144,112152,200],{"class":150},[144,112154,111956],{"class":154},[144,112156,111549],{"class":259},[144,112158,161],{"class":154},[144,112160,112161,112164,112166,112168,112170],{"class":146,"line":9937},[144,112162,112163],{"class":154},"        target ",[144,112165,200],{"class":150},[144,112167,111956],{"class":154},[144,112169,111972],{"class":259},[144,112171,161],{"class":154},[144,112173,112174,112177,112179,112182,112184],{"class":146,"line":9943},[144,112175,112176],{"class":154},"        error ",[144,112178,200],{"class":150},[144,112180,112181],{"class":154}," target ",[144,112183,687],{"class":150},[144,112185,112186],{"class":154}," tip\n",[144,112188,112189],{"class":146,"line":9951},[144,112190,2430],{"emptyLinePlaceholder":72},[144,112192,112193,112195,112197,112199,112201,112204,112206,112208,112211,112213,112216,112218,112220,112222,112224],{"class":146,"line":9956},[144,112194,106630],{"class":154},[144,112196,346],{"class":203},[144,112198,4473],{"class":154},[144,112200,200],{"class":150},[144,112202,112203],{"class":154}," np.clip(",[144,112205,105273],{"class":203},[144,112207,6549],{"class":150},[144,112209,112210],{"class":154}," error[",[144,112212,232],{"class":203},[144,112214,112215],{"class":154},"], ",[144,112217,687],{"class":150},[144,112219,102416],{"class":203},[144,112221,12466],{"class":154},[144,112223,102416],{"class":203},[144,112225,161],{"class":154},[144,112227,112228,112230,112232,112234,112236,112238,112240,112242,112244,112246,112248,112250,112252,112254,112256],{"class":146,"line":16635},[144,112229,106630],{"class":154},[144,112231,372],{"class":203},[144,112233,4473],{"class":154},[144,112235,200],{"class":150},[144,112237,112203],{"class":154},[144,112239,105273],{"class":203},[144,112241,6549],{"class":150},[144,112243,112210],{"class":154},[144,112245,346],{"class":203},[144,112247,112215],{"class":154},[144,112249,687],{"class":150},[144,112251,102416],{"class":203},[144,112253,12466],{"class":154},[144,112255,102416],{"class":203},[144,112257,161],{"class":154},[144,112259,112260],{"class":146,"line":16641},[144,112261,2430],{"emptyLinePlaceholder":72},[144,112263,112264],{"class":146,"line":16664},[144,112265,101529],{"class":154},[144,112267,112268,112270,112272],{"class":146,"line":16670},[144,112269,110310],{"class":154},[144,112271,9508],{"class":150},[144,112273,112274],{"class":154}," reward(model, data)\n",[144,112276,112277],{"class":146,"line":16693},[144,112278,2430],{"emptyLinePlaceholder":72},[144,112280,112281,112283,112285,112287,112289,112291,112293],{"class":146,"line":16707},[144,112282,2527],{"class":150},[144,112284,31629],{"class":154},[144,112286,483],{"class":150},[144,112288,5785],{"class":203},[144,112290,101572],{"class":150},[144,112292,4123],{"class":203},[144,112294,3769],{"class":154},[144,112296,112297,112300,112302],{"class":146,"line":16727},[144,112298,112299],{"class":154},"            obs ",[144,112301,200],{"class":150},[144,112303,112304],{"class":154}," get_obs(model, data)\n",[144,112306,112307,112309,112311,112313],{"class":146,"line":16733},[144,112308,34663],{"class":203},[144,112310,155],{"class":154},[144,112312,110344],{"class":259},[144,112314,112315],{"class":154},", step)\n",[144,112317,112318,112320,112322,112325,112328,112330],{"class":146,"line":16744},[144,112319,34663],{"class":203},[144,112321,155],{"class":154},[144,112323,112324],{"class":259},"\"  tip:\"",[144,112326,112327],{"class":154},", np.round(tip, ",[144,112329,226],{"class":203},[144,112331,30510],{"class":154},[144,112333,112334,112336,112338,112341,112344,112346],{"class":146,"line":16767},[144,112335,34663],{"class":203},[144,112337,155],{"class":154},[144,112339,112340],{"class":259},"\"  target:\"",[144,112342,112343],{"class":154},", np.round(target, ",[144,112345,226],{"class":203},[144,112347,30510],{"class":154},[144,112349,112350,112352,112354,112357,112360,112362],{"class":146,"line":16789},[144,112351,34663],{"class":203},[144,112353,155],{"class":154},[144,112355,112356],{"class":259},"\"  ctrl:\"",[144,112358,112359],{"class":154},", np.round(data.ctrl.copy(), ",[144,112361,226],{"class":203},[144,112363,30510],{"class":154},[144,112365,112366,112368,112370,112373,112376,112378],{"class":146,"line":16794},[144,112367,34663],{"class":203},[144,112369,155],{"class":154},[144,112371,112372],{"class":259},"\"  obs_dim:\"",[144,112374,112375],{"class":154},", obs.shape[",[144,112377,346],{"class":203},[144,112379,4687],{"class":154},[144,112381,112382],{"class":146,"line":16800},[144,112383,2430],{"emptyLinePlaceholder":72},[144,112385,112386,112388,112390,112392,112394,112396,112398,112400],{"class":146,"line":16814},[144,112387,31312],{"class":203},[144,112389,155],{"class":154},[144,112391,110389],{"class":259},[144,112393,12466],{"class":154},[144,112395,32031],{"class":203},[144,112397,110396],{"class":154},[144,112399,226],{"class":203},[144,112401,30510],{"class":154},[144,112403,112404,112406,112408,112411,112414,112416,112418,112420],{"class":146,"line":16827},[144,112405,31312],{"class":203},[144,112407,155],{"class":154},[144,112409,112410],{"class":259},"\"final tip:\"",[144,112412,112413],{"class":154},", np.round(site_position(model, data, ",[144,112415,111549],{"class":259},[144,112417,110358],{"class":154},[144,112419,226],{"class":203},[144,112421,30510],{"class":154},[144,112423,112424,112426,112428,112431,112433,112435,112437,112439],{"class":146,"line":16832},[144,112425,31312],{"class":203},[144,112427,155],{"class":154},[144,112429,112430],{"class":259},"\"target:\"",[144,112432,112413],{"class":154},[144,112434,111972],{"class":259},[144,112436,110358],{"class":154},[144,112438,226],{"class":203},[144,112440,30510],{"class":154},[144,112442,112443],{"class":146,"line":16846},[144,112444,2430],{"emptyLinePlaceholder":72},[144,112446,112447],{"class":146,"line":16851},[144,112448,2430],{"emptyLinePlaceholder":72},[144,112450,112451,112453,112455,112457,112459],{"class":146,"line":16857},[144,112452,1561],{"class":150},[144,112454,31233],{"class":203},[144,112456,101572],{"class":150},[144,112458,101575],{"class":259},[144,112460,3769],{"class":154},[144,112462,112463],{"class":146,"line":16862},[144,112464,101582],{"class":154},[14,112466,103583],{},[135,112468,112470],{"className":23854,"code":112469,"language":23856,"meta":30,"style":30},"touch ch7_reacher.py\n",[141,112471,112472],{"__ignoreMap":30},[144,112473,112474,112476],{"class":146,"line":147},[144,112475,101296],{"class":1993},[144,112477,112478],{"class":259}," ch7_reacher.py\n",[14,112480,110457],{},[135,112482,112484],{"className":23854,"code":112483,"language":23856,"meta":30,"style":30},"python ch7_reacher.py\n",[141,112485,112486],{"__ignoreMap":30},[144,112487,112488,112490],{"class":146,"line":147},[144,112489,30393],{"class":1993},[144,112491,112478],{"class":259},[115,112493,101585],{"id":101585},[14,112495,112496],{},"读取 site 坐标：",[135,112498,112500],{"className":30391,"code":112499,"language":30393,"meta":30,"style":30},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[141,112501,112502],{"__ignoreMap":30},[144,112503,112504,112506,112508,112510,112512],{"class":146,"line":147},[144,112505,31960],{"class":150},[144,112507,111869],{"class":1993},[144,112509,111872],{"class":154},[144,112511,1330],{"class":203},[144,112513,111877],{"class":154},[14,112515,112516],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,112518,110473],{},[135,112520,112522],{"className":30391,"code":112521,"language":30393,"meta":30,"style":30},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[141,112523,112524],{"__ignoreMap":30},[144,112525,112526,112528],{"class":146,"line":147},[144,112527,17077],{"class":150},[144,112529,111981],{"class":154},[14,112531,112532],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,112534,109798],{},[135,112536,112538],{"className":30391,"code":112537,"language":30393,"meta":30,"style":30},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[141,112539,112540,112552,112565],{"__ignoreMap":30},[144,112541,112542,112544,112546,112548,112550],{"class":146,"line":147},[144,112543,111609],{"class":154},[144,112545,200],{"class":150},[144,112547,111614],{"class":154},[144,112549,687],{"class":150},[144,112551,111619],{"class":154},[144,112553,112554,112557,112559,112561,112563],{"class":146,"line":66},[144,112555,112556],{"class":154},"control_cost ",[144,112558,200],{"class":150},[144,112560,112050],{"class":203},[144,112562,6549],{"class":150},[144,112564,112055],{"class":154},[144,112566,112567,112569,112571,112573,112575,112577,112579],{"class":146,"line":1210},[144,112568,17077],{"class":150},[144,112570,109810],{"class":203},[144,112572,155],{"class":154},[144,112574,687],{"class":150},[144,112576,111609],{"class":154},[144,112578,687],{"class":150},[144,112580,112072],{"class":154},[14,112582,112583],{},"奖励由两部分组成：",[98,112585,112586,112591],{},[101,112587,112588,112590],{},[141,112589,111636],{},"：末端离目标越远，奖励越低。",[101,112592,112593,112596],{},[141,112594,112595],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,112598,112599],{},"简单控制器：",[135,112601,112603],{"className":30391,"code":112602,"language":30393,"meta":30,"style":30},"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",[141,112604,112605,112618,112650],{"__ignoreMap":30},[144,112606,112607,112610,112612,112614,112616],{"class":146,"line":147},[144,112608,112609],{"class":154},"error ",[144,112611,200],{"class":150},[144,112613,112181],{"class":154},[144,112615,687],{"class":150},[144,112617,112186],{"class":154},[144,112619,112620,112622,112624,112626,112628,112630,112632,112634,112636,112638,112640,112642,112644,112646,112648],{"class":146,"line":66},[144,112621,105884],{"class":154},[144,112623,346],{"class":203},[144,112625,4473],{"class":154},[144,112627,200],{"class":150},[144,112629,112203],{"class":154},[144,112631,105273],{"class":203},[144,112633,6549],{"class":150},[144,112635,112210],{"class":154},[144,112637,232],{"class":203},[144,112639,112215],{"class":154},[144,112641,687],{"class":150},[144,112643,102416],{"class":203},[144,112645,12466],{"class":154},[144,112647,102416],{"class":203},[144,112649,161],{"class":154},[144,112651,112652,112654,112656,112658,112660,112662,112664,112666,112668,112670,112672,112674,112676,112678,112680],{"class":146,"line":1210},[144,112653,105884],{"class":154},[144,112655,372],{"class":203},[144,112657,4473],{"class":154},[144,112659,200],{"class":150},[144,112661,112203],{"class":154},[144,112663,105273],{"class":203},[144,112665,6549],{"class":150},[144,112667,112210],{"class":154},[144,112669,346],{"class":203},[144,112671,112215],{"class":154},[144,112673,687],{"class":150},[144,112675,102416],{"class":203},[144,112677,12466],{"class":154},[144,112679,102416],{"class":203},[144,112681,161],{"class":154},[14,112683,112684],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[115,112686,101721],{"id":101721},[135,112688,112689],{"className":30391,"code":112499,"language":30393,"meta":30,"style":30},[141,112690,112691],{"__ignoreMap":30},[144,112692,112693,112695,112697,112699,112701],{"class":146,"line":147},[144,112694,31960],{"class":150},[144,112696,111869],{"class":1993},[144,112698,111872],{"class":154},[144,112700,1330],{"class":203},[144,112702,111877],{"class":154},[14,112704,112705,112706,112708,112709,82552,112711,28398],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[141,112707,79823],{}," 是 site 的名字，比如 ",[141,112710,111549],{},[141,112712,111972],{},[135,112714,112716],{"className":30391,"code":112715,"language":30393,"meta":30,"style":30},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[141,112717,112718],{"__ignoreMap":30},[144,112719,112720,112722,112724],{"class":146,"line":147},[144,112721,103647],{"class":154},[144,112723,200],{"class":150},[144,112725,111886],{"class":154},[14,112727,112728],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[135,112730,112732],{"className":30391,"code":112731,"language":30393,"meta":30,"style":30},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[141,112733,112734,112746],{"__ignoreMap":30},[144,112735,112736,112738,112740,112742,112744],{"class":146,"line":147},[144,112737,1561],{"class":150},[144,112739,103462],{"class":154},[144,112741,1065],{"class":150},[144,112743,4123],{"class":203},[144,112745,3769],{"class":154},[144,112747,112748,112750,112752,112754,112756,112758,112760,112762,112764,112766],{"class":146,"line":66},[144,112749,103908],{"class":150},[144,112751,103448],{"class":203},[144,112753,155],{"class":154},[144,112755,207],{"class":150},[144,112757,111911],{"class":259},[144,112759,1051],{"class":203},[144,112761,79823],{"class":154},[144,112763,1101],{"class":203},[144,112765,406],{"class":259},[144,112767,161],{"class":154},[14,112769,112770,112771,112774,112775,112777],{},"如果 site 没找到，就主动报错。",[141,112772,112773],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[141,112776,79823],{}," 的值放进字符串里。",[135,112779,112781],{"className":30391,"code":112780,"language":30393,"meta":30,"style":30},"return data.site_xpos[site_id].copy()\n",[141,112782,112783],{"__ignoreMap":30},[144,112784,112785,112787],{"class":146,"line":147},[144,112786,17077],{"class":150},[144,112788,111928],{"class":154},[14,112790,112791,112792,112794,112795,112798],{},"返回这个 site 的世界坐标。",[141,112793,103693],{}," 里的每一行都是一个 site 的 ",[141,112796,112797],{},"(x, y, z)"," 坐标。",[135,112800,112802],{"className":30391,"code":112801,"language":30393,"meta":30,"style":30},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[141,112803,112804],{"__ignoreMap":30},[144,112805,112806,112808,112810],{"class":146,"line":147},[144,112807,31960],{"class":150},[144,112809,111943],{"class":1993},[144,112811,111946],{"class":154},[14,112813,112814],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[135,112816,112818],{"className":30391,"code":112817,"language":30393,"meta":30,"style":30},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[141,112819,112820,112832],{"__ignoreMap":30},[144,112821,112822,112824,112826,112828,112830],{"class":146,"line":147},[144,112823,111581],{"class":154},[144,112825,200],{"class":150},[144,112827,111956],{"class":154},[144,112829,111549],{"class":259},[144,112831,161],{"class":154},[144,112833,112834,112836,112838,112840,112842],{"class":146,"line":66},[144,112835,111591],{"class":154},[144,112837,200],{"class":150},[144,112839,111956],{"class":154},[144,112841,111972],{"class":259},[144,112843,161],{"class":154},[14,112845,112846],{},"分别读取末端点和目标点的世界坐标。",[135,112848,112849],{"className":30391,"code":112521,"language":30393,"meta":30,"style":30},[141,112850,112851],{"__ignoreMap":30},[144,112852,112853,112855],{"class":146,"line":147},[144,112854,17077],{"class":150},[144,112856,111981],{"class":154},[14,112858,112859],{},"把四部分拼成一个观测数组：",[135,112861,112864],{"className":112862,"code":112863,"language":5218,"meta":30},[5216],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[141,112865,112863],{"__ignoreMap":30},[135,112867,112869],{"className":30391,"code":112868,"language":30393,"meta":30,"style":30},"dist = np.linalg.norm(tip - target)\n",[141,112870,112871],{"__ignoreMap":30},[144,112872,112873,112875,112877,112879,112881],{"class":146,"line":147},[144,112874,111609],{"class":154},[144,112876,200],{"class":150},[144,112878,111614],{"class":154},[144,112880,687],{"class":150},[144,112882,111619],{"class":154},[14,112884,112885,112886,112889,112890,112893],{},"计算 tip 到 target 的距离。",[141,112887,112888],{},"tip - target"," 得到一个三维向量，",[141,112891,112892],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,112895,14664],{},[135,112897,112900],{"className":112898,"code":112899,"language":5218,"meta":30},[5216],"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",[141,112901,112899],{"__ignoreMap":30},[135,112903,112905],{"className":30391,"code":112904,"language":30393,"meta":30,"style":30},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[141,112906,112907],{"__ignoreMap":30},[144,112908,112909,112911,112913,112915,112917],{"class":146,"line":147},[144,112910,112556],{"class":154},[144,112912,200],{"class":150},[144,112914,112050],{"class":203},[144,112916,6549],{"class":150},[144,112918,112055],{"class":154},[14,112920,112921,112922,112925,112926,112929],{},"计算动作惩罚。",[141,112923,112924],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[141,112927,112928],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[135,112931,112933],{"className":30391,"code":112932,"language":30393,"meta":30,"style":30},"return float(-dist - control_cost)\n",[141,112934,112935],{"__ignoreMap":30},[144,112936,112937,112939,112941,112943,112945,112947,112949],{"class":146,"line":147},[144,112938,17077],{"class":150},[144,112940,109810],{"class":203},[144,112942,155],{"class":154},[144,112944,687],{"class":150},[144,112946,111609],{"class":154},[144,112948,687],{"class":150},[144,112950,112072],{"class":154},[14,112952,112953],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[135,112955,112956],{"className":30391,"code":110816,"language":30393,"meta":30,"style":30},[141,112957,112958],{"__ignoreMap":30},[144,112959,112960,112962,112964],{"class":146,"line":147},[144,112961,110823],{"class":154},[144,112963,200],{"class":150},[144,112965,104774],{"class":203},[14,112967,112968],{},"累计奖励变量，记录整个运行过程的总分。",[135,112970,112972],{"className":30391,"code":112971,"language":30393,"meta":30,"style":30},"for step in range(500):\n",[141,112973,112974],{"__ignoreMap":30},[144,112975,112976,112978,112980,112982,112984,112986,112988],{"class":146,"line":147},[144,112977,3055],{"class":150},[144,112979,31629],{"class":154},[144,112981,26056],{"class":150},[144,112983,32456],{"class":203},[144,112985,155],{"class":154},[144,112987,65087],{"class":203},[144,112989,30799],{"class":154},[14,112991,112992],{},"运行 500 个控制步。",[135,112994,112995],{"className":30391,"code":104556,"language":30393,"meta":30,"style":30},[141,112996,112997],{"__ignoreMap":30},[144,112998,112999],{"class":146,"line":147},[144,113000,104556],{"class":154},[14,113002,113003,113004,101031,113006,113008],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[141,113005,103244],{},[141,113007,103247],{}," 是当前状态下的坐标。",[135,113010,113012],{"className":30391,"code":113011,"language":30393,"meta":30,"style":30},"error = target - tip\n",[141,113013,113014],{"__ignoreMap":30},[144,113015,113016,113018,113020,113022,113024],{"class":146,"line":147},[144,113017,112609],{"class":154},[144,113019,200],{"class":150},[144,113021,112181],{"class":154},[144,113023,687],{"class":150},[144,113025,112186],{"class":154},[14,113027,113028],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[135,113030,113032],{"className":30391,"code":113031,"language":30393,"meta":30,"style":30},"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",[141,113033,113034,113066],{"__ignoreMap":30},[144,113035,113036,113038,113040,113042,113044,113046,113048,113050,113052,113054,113056,113058,113060,113062,113064],{"class":146,"line":147},[144,113037,105884],{"class":154},[144,113039,346],{"class":203},[144,113041,4473],{"class":154},[144,113043,200],{"class":150},[144,113045,112203],{"class":154},[144,113047,105273],{"class":203},[144,113049,6549],{"class":150},[144,113051,112210],{"class":154},[144,113053,232],{"class":203},[144,113055,112215],{"class":154},[144,113057,687],{"class":150},[144,113059,102416],{"class":203},[144,113061,12466],{"class":154},[144,113063,102416],{"class":203},[144,113065,161],{"class":154},[144,113067,113068,113070,113072,113074,113076,113078,113080,113082,113084,113086,113088,113090,113092,113094,113096],{"class":146,"line":66},[144,113069,105884],{"class":154},[144,113071,372],{"class":203},[144,113073,4473],{"class":154},[144,113075,200],{"class":150},[144,113077,112203],{"class":154},[144,113079,105273],{"class":203},[144,113081,6549],{"class":150},[144,113083,112210],{"class":154},[144,113085,346],{"class":203},[144,113087,112215],{"class":154},[144,113089,687],{"class":150},[144,113091,102416],{"class":203},[144,113093,12466],{"class":154},[144,113095,102416],{"class":203},[144,113097,161],{"class":154},[14,113099,113100,113101,113104],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[141,113102,113103],{},"error -> ctrl -> step"," 的流程。",[135,113106,113107],{"className":30391,"code":104518,"language":30393,"meta":30,"style":30},[141,113108,113109],{"__ignoreMap":30},[144,113110,113111],{"class":146,"line":147},[144,113112,104518],{"class":154},[14,113114,113115],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[135,113117,113119],{"className":30391,"code":113118,"language":30393,"meta":30,"style":30},"obs = get_obs(model, data)\n",[141,113120,113121],{"__ignoreMap":30},[144,113122,113123,113125,113127],{"class":146,"line":147},[144,113124,110867],{"class":154},[144,113126,200],{"class":150},[144,113128,112304],{"class":154},[14,113130,113131,113132,113135],{},"读取最新观测。后面打印 ",[141,113133,113134],{},"obs.shape[0]","，用来确认观测维度是 10。",[18,113137,102329],{"id":102328},[14,113139,113140],{},"观测维度为:",[135,113142,113145],{"className":113143,"code":113144,"language":5218,"meta":30},[5216],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[141,113146,113144],{"__ignoreMap":30},[14,113148,113149],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113151,113152],{},"程序每 100 步打印：",[135,113154,113157],{"className":113155,"code":113156,"language":5218,"meta":30},[5216],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[141,113158,113156],{"__ignoreMap":30},[14,113160,113161,113162,113164],{},"如果控制有效，你应该看到最终 ",[141,113163,103244],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[18,113166,102361],{"id":102360},[98,113168,113169,113172,113175,113181,113187,113194,113204],{},[101,113170,113171],{},"修改目标点位置。",[101,113173,113174],{},"重新运行，观察最终 tip 是否变化。",[101,113176,113177,113178,113180],{},"把 gravity 改成 ",[141,113179,102602],{},"，观察控制是否变差。",[101,113182,111194,113183,111198,113185,28398],{},[141,113184,102171],{},[141,113186,232],{},[101,113188,102424,113189,102427,113191,113193],{},[141,113190,110609],{},[141,113192,107320],{},"，观察机械臂是否更难移动。",[101,113195,102424,113196,82543,113198,102427,113200,113203],{},[141,113197,103247],{},[141,113199,104159],{},[141,113201,113202],{},"0.2 0 0.6","，观察 reward 和 final tip。",[101,113205,113206],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[18,113208,102466],{"id":102465},[115,113210,113212],{"id":113211},"site-not-found",[141,113213,113214],{},"site not found",[14,113216,113217,113218,101031,113221,28398],{},"检查 XML 中是否有 ",[141,113219,113220],{},"site name=\"tip\"",[141,113222,113223],{},"site name=\"target\"",[115,113225,113226],{"id":113226},"机械臂完全不动",[14,113228,102536],{},[98,113230,113231,113236,113239,113244],{},[101,113232,113233,113235],{},[141,113234,102171],{}," 是否为 2",[101,113237,113238],{},"actuator 是否引用正确 joint",[101,113240,113241,113243],{},[141,113242,101089],{}," 是否被赋值",[101,113245,113246,113247],{},"是否执行了 ",[141,113248,100698],{},[115,113250,113251],{"id":113251},"控制效果不好",[14,113253,113254],{},"正常。本章重点不是控制器最优，而是任务结构:",[135,113256,113259],{"className":113257,"code":113258,"language":5218,"meta":30},[5216],"obs → action → mj_step → reward → next_obs\n",[141,113260,113258],{"__ignoreMap":30},[115,113262,113264],{"id":113263},"tip-坐标不变化","tip 坐标不变化",[14,113266,102588],{},[98,113268,113269,113274,113282,113291],{},[101,113270,113271,113272,28398],{},"是否每步调用了 ",[141,113273,100698],{},[101,113275,113276,113277,101031,113279,28398],{},"是否写入了 ",[141,113278,106139],{},[141,113280,113281],{},"data.ctrl[1]",[101,113283,113284,113285,367,113288,28398],{},"actuator 是否正确引用 ",[141,113286,113287],{},"joint1",[141,113289,113290],{},"joint2",[101,113292,113293],{},"控制输入是否太小。",[115,113295,113296],{"id":113296},"目标点不会动",[14,113298,113299],{},"本章的 target 是固定 site：",[135,113301,113303],{"className":53080,"code":113302,"language":53082,"meta":30,"style":30},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[141,113304,113305],{"__ignoreMap":30},[144,113306,113307,113309,113311,113313,113315,113317,113319,113321,113324],{"class":146,"line":147},[144,113308,1065],{"class":154},[144,113310,103223],{"class":51313},[144,113312,14951],{"class":1993},[144,113314,200],{"class":154},[144,113316,111972],{"class":259},[144,113318,101119],{"class":1993},[144,113320,200],{"class":154},[144,113322,113323],{"class":259},"\"0.5 0 0.4\"",[144,113325,113326],{"class":154}," ...\u002F>\n",[14,113328,113329,113330,113332],{},"它直接挂在 ",[141,113331,101854],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[115,113334,113335],{"id":113335},"机械臂不像真实机械臂",[14,113337,113338],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[18,113340,102620],{"id":102619},[14,113342,113343],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113345,113346],{},"核心公式：",[135,113348,113351],{"className":113349,"code":113350,"language":5218,"meta":30},[5216],"distance = ||tip - target||\nreward = -distance - action_cost\n",[141,113352,113350],{"__ignoreMap":30},[14,113354,113355],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5157,113357,113358],{},"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":30,"searchDepth":66,"depth":66,"links":113360},[113361,113362,113363,113368,113372,113373,113374,113382],{"id":100659,"depth":66,"text":100660},{"id":100782,"depth":66,"text":100783},{"id":101057,"depth":66,"text":101058,"children":113364},[113365,113366,113367],{"id":111564,"depth":1210,"text":111565},{"id":111640,"depth":1210,"text":111640},{"id":111670,"depth":1210,"text":111671},{"id":101265,"depth":66,"text":101266,"children":113369},[113370,113371],{"id":101585,"depth":1210,"text":101585},{"id":101721,"depth":1210,"text":101721},{"id":102328,"depth":66,"text":102329},{"id":102360,"depth":66,"text":102361},{"id":102465,"depth":66,"text":102466,"children":113375},[113376,113377,113378,113379,113380,113381],{"id":113211,"depth":1210,"text":113214},{"id":113226,"depth":1210,"text":113226},{"id":113251,"depth":1210,"text":113251},{"id":113263,"depth":1210,"text":113264},{"id":113296,"depth":1210,"text":113296},{"id":113335,"depth":1210,"text":113335},{"id":102619,"depth":66,"text":102620},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111368,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113389,"title":113390,"body":113391,"description":30,"extension":70,"meta":116853,"navigation":72,"path":116854,"seo":116855,"stem":116856,"__hash__":116857},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113392,"toc":116824},[113393,113396,113398,113401,113404,113429,113432,113438,113441,113447,113449,113451,113475,113477,113495,113497,113540,113542,113569,113571,113574,113626,113629,113635,113644,113647,113685,113688,113727,113730,113738,113745,113748,113754,113756,113810,113817,113862,113865,113869,113885,113895,113897,115158,115160,115172,115174,115185,115187,115190,115211,115214,115217,115250,115256,115259,115292,115295,115298,115339,115344,115358,115361,115374,115379,115402,115404,115419,115429,115444,115451,115471,115486,115504,115507,115524,115532,115548,115554,115586,115599,115631,115641,115676,115690,115736,115750,115792,115803,115816,115822,115855,115858,115885,115895,115935,115945,115962,115969,115987,115990,116031,116044,116059,116062,116085,116088,116100,116103,116122,116127,116148,116151,116166,116169,116203,116215,116230,116233,116258,116261,116280,116283,116315,116318,116342,116348,116378,116385,116398,116401,116403,116405,116411,116414,116417,116429,116432,116434,116488,116490,116494,116500,116509,116512,116519,116521,116544,116547,116551,116553,116571,116577,116579,116612,116615,116621,116625,116628,116648,116653,116657,116664,116684,116689,116693,116696,116716,116719,116805,116809,116812,116818,116821],[10,113394,113390],{"id":113395},"_8gymnasium-风格强化学习接口基础",[18,113397,100660],{"id":100659},[14,113399,113400],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,113402,113403],{},"你将实现:",[135,113405,113407],{"className":30391,"code":113406,"language":30393,"meta":30,"style":30},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[141,113408,113409,113419],{"__ignoreMap":30},[144,113410,113411,113414,113416],{"class":146,"line":147},[144,113412,113413],{"class":154},"obs, info ",[144,113415,200],{"class":150},[144,113417,113418],{"class":154}," env.reset()\n",[144,113420,113421,113424,113426],{"class":146,"line":66},[144,113422,113423],{"class":154},"obs, reward, terminated, truncated, info ",[144,113425,200],{"class":150},[144,113427,113428],{"class":154}," env.step(action)\n",[14,113430,113431],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,113433,113434,113435,113437],{},"前面章节的代码都是“脚本式”的：在 ",[141,113436,102308],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,113439,113440],{},"可以先记住 Gymnasium 环境的核心交互：",[135,113442,113445],{"className":113443,"code":113444,"language":5218,"meta":30},[5216],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[141,113446,113444],{"__ignoreMap":30},[18,113448,100783],{"id":100782},[14,113450,100786],{},[135,113452,113453],{"className":23854,"code":104401,"language":23856,"meta":30,"style":30},[141,113454,113455],{"__ignoreMap":30},[144,113456,113457,113459,113461,113463,113465,113467,113469,113471,113473],{"class":146,"line":147},[144,113458,24589],{"class":1993},[144,113460,26328],{"class":259},[144,113462,23866],{"class":259},[144,113464,26413],{"class":203},[144,113466,104416],{"class":259},[144,113468,100811],{"class":259},[144,113470,102514],{"class":259},[144,113472,100827],{"class":259},[144,113474,104425],{"class":259},[14,113476,102832],{},[135,113478,113480],{"className":23854,"code":113479,"language":23856,"meta":30,"style":30},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[141,113481,113482],{"__ignoreMap":30},[144,113483,113484,113486,113488,113490,113492],{"class":146,"line":147},[144,113485,23863],{"class":1993},[144,113487,23866],{"class":259},[144,113489,100943],{"class":259},[144,113491,107724],{"class":259},[144,113493,113494],{"class":259}," gymnasium\n",[14,113496,102849],{},[135,113498,113500],{"className":23854,"code":113499,"language":23856,"meta":30,"style":30},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[141,113501,113502,113519,113528],{"__ignoreMap":30},[144,113503,113504,113506,113508,113510,113513,113515,113517],{"class":146,"line":147},[144,113505,30343],{"class":1993},[144,113507,29189],{"class":259},[144,113509,25128],{"class":203},[144,113511,113512],{"class":259}," mujoco-gym-api",[144,113514,100988],{"class":259},[144,113516,100991],{"class":203},[144,113518,100994],{"class":203},[144,113520,113521,113523,113525],{"class":146,"line":66},[144,113522,30343],{"class":1993},[144,113524,101001],{"class":259},[144,113526,113527],{"class":259}," mujoco-gym-api\n",[144,113529,113530,113532,113534,113536,113538],{"class":146,"line":1210},[144,113531,23863],{"class":1993},[144,113533,23866],{"class":259},[144,113535,100943],{"class":259},[144,113537,107724],{"class":259},[144,113539,113494],{"class":259},[14,113541,101017],{},[98,113543,113544,113554,113557,113563],{},[101,113545,113546,113547,113550,113551,28398],{},"本章使用 ",[141,113548,113549],{},"gymnasium","，不是旧版 ",[141,113552,113553],{},"gym",[101,113555,113556],{},"Gymnasium API 与旧 Gym API 有差异。",[101,113558,113559,113560,28398],{},"旧 Gym 常见返回值是 4 个: ",[141,113561,113562],{},"obs, reward, done, info",[101,113564,113565,113566,28398],{},"Gymnasium 返回值是 5 个: ",[141,113567,113568],{},"obs, reward, terminated, truncated, info",[18,113570,101058],{"id":101057},[14,113572,113573],{},"强化学习环境接口包含:",[292,113575,113576,113585],{},[295,113577,113578],{},[298,113579,113580,113583],{},[301,113581,113582],{"align":23768},"方法",[301,113584,102709],{"align":23768},[339,113586,113587,113597,113607,113617],{},[298,113588,113589,113594],{},[344,113590,113591],{"align":23768},[141,113592,113593],{},"reset()",[344,113595,113596],{"align":23768},"重置环境",[298,113598,113599,113604],{},[344,113600,113601],{"align":23768},[141,113602,113603],{},"step(action)",[344,113605,113606],{"align":23768},"执行动作",[298,113608,113609,113614],{},[344,113610,113611],{"align":23768},[141,113612,113613],{},"observation_space",[344,113615,113616],{"align":23768},"观测空间",[298,113618,113619,113624],{},[344,113620,113621],{"align":23768},[141,113622,113623],{},"action_space",[344,113625,23686],{"align":23768},[14,113627,113628],{},"一个最小环境需要完成:",[135,113630,113633],{"className":113631,"code":113632,"language":5218,"meta":30},[5216],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[141,113634,113632],{"__ignoreMap":30},[115,113636,113638,101031,113641,104651],{"id":113637},"terminated-和-truncated-的区别",[141,113639,113640],{},"terminated",[141,113642,113643],{},"truncated",[14,113645,113646],{},"Gymnasium 把“结束”拆成两个概念：",[292,113648,113649,113659],{},[295,113650,113651],{},[298,113652,113653,113655,113657],{},[301,113654,104587],{"align":23768},[301,113656,100713],{"align":23768},[301,113658,21218],{"align":23768},[339,113660,113661,113673],{},[298,113662,113663,113667,113670],{},[344,113664,113665],{"align":23768},[141,113666,113640],{},[344,113668,113669],{"align":23768},"任务自然结束",[344,113671,113672],{"align":23768},"机械臂到达目标、机器人摔倒",[298,113674,113675,113679,113682],{},[344,113676,113677],{"align":23768},[141,113678,113643],{},[344,113680,113681],{"align":23768},"因外部限制截断",[344,113683,113684],{"align":23768},"达到最大步数、时间限制",[14,113686,113687],{},"本章中：",[135,113689,113691],{"className":30391,"code":113690,"language":30393,"meta":30,"style":30},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[141,113692,113693,113708],{"__ignoreMap":30},[144,113694,113695,113698,113700,113703,113705],{"class":146,"line":147},[144,113696,113697],{"class":154},"terminated ",[144,113699,200],{"class":150},[144,113701,113702],{"class":154}," dist ",[144,113704,1065],{"class":150},[144,113706,113707],{"class":203}," 0.05\n",[144,113709,113710,113713,113715,113717,113720,113722,113724],{"class":146,"line":66},[144,113711,113712],{"class":154},"truncated ",[144,113714,200],{"class":150},[144,113716,38886],{"class":203},[144,113718,113719],{"class":154},".steps ",[144,113721,1740],{"class":150},[144,113723,38886],{"class":203},[144,113725,113726],{"class":154},".max_steps\n",[14,113728,113729],{},"也就是：",[98,113731,113732,113735],{},[101,113733,113734],{},"末端距离目标小于 0.05，任务成功结束。",[101,113736,113737],{},"步数超过上限，episode 被截断。",[115,113739,113741,101031,113743],{"id":113740},"observation_space-和-action_space",[141,113742,113613],{},[141,113744,113623],{},[14,113746,113747],{},"这两个对象告诉算法：",[135,113749,113752],{"className":113750,"code":113751,"language":5218,"meta":30},[5216],"观测长什么样\n动作允许多大\n",[141,113753,113751],{"__ignoreMap":30},[14,113755,14664],{},[135,113757,113759],{"className":30391,"code":113758,"language":30393,"meta":30,"style":30},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[141,113760,113761],{"__ignoreMap":30},[144,113762,113763,113765,113768,113770,113773,113776,113779,113781,113783,113786,113788,113790,113792,113794,113796,113798,113800,113803,113805,113807],{"class":146,"line":147},[144,113764,30836],{"class":203},[144,113766,113767],{"class":154},".action_space ",[144,113769,200],{"class":150},[144,113771,113772],{"class":154}," spaces.Box(",[144,113774,113775],{"class":5247},"low",[144,113777,113778],{"class":150},"=-",[144,113780,102416],{"class":203},[144,113782,12466],{"class":154},[144,113784,113785],{"class":5247},"high",[144,113787,200],{"class":150},[144,113789,102416],{"class":203},[144,113791,12466],{"class":154},[144,113793,95976],{"class":5247},[144,113795,200],{"class":150},[144,113797,155],{"class":154},[144,113799,232],{"class":203},[144,113801,113802],{"class":154},",), ",[144,113804,93513],{"class":5247},[144,113806,200],{"class":150},[144,113808,113809],{"class":154},"np.float32)\n",[14,113811,113812,113813,113816],{},"表示动作是 2 维数组，每个值都在 ",[141,113814,113815],{},"[-1, 1]"," 范围内。",[135,113818,113820],{"className":30391,"code":113819,"language":30393,"meta":30,"style":30},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[141,113821,113822],{"__ignoreMap":30},[144,113823,113824,113826,113829,113831,113833,113835,113837,113840,113842,113844,113846,113848,113850,113852,113854,113856,113858,113860],{"class":146,"line":147},[144,113825,30836],{"class":203},[144,113827,113828],{"class":154},".observation_space ",[144,113830,200],{"class":150},[144,113832,113772],{"class":154},[144,113834,113775],{"class":5247},[144,113836,113778],{"class":150},[144,113838,113839],{"class":154},"np.inf, ",[144,113841,113785],{"class":5247},[144,113843,200],{"class":150},[144,113845,113839],{"class":154},[144,113847,95976],{"class":5247},[144,113849,200],{"class":150},[144,113851,155],{"class":154},[144,113853,601],{"class":203},[144,113855,113802],{"class":154},[144,113857,93513],{"class":5247},[144,113859,200],{"class":150},[144,113861,113809],{"class":154},[14,113863,113864],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[115,113866,113868],{"id":113867},"frame_skip-是什么","frame_skip 是什么",[135,113870,113872],{"className":30391,"code":113871,"language":30393,"meta":30,"style":30},"self.frame_skip = 5\n",[141,113873,113874],{"__ignoreMap":30},[144,113875,113876,113878,113881,113883],{"class":146,"line":147},[144,113877,30836],{"class":203},[144,113879,113880],{"class":154},".frame_skip ",[144,113882,200],{"class":150},[144,113884,54440],{"class":203},[14,113886,113887,113888,113891,113892,113894],{},"表示外部调用一次 ",[141,113889,113890],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[141,113893,101228],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[18,113896,101266],{"id":101265},[135,113898,113900],{"className":30391,"code":113899,"language":30393,"meta":30,"style":30},"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",[141,113901,113902,113914,113920,113930,113941,113945,113949,113957,113962,113966,113970,113974,113978,113982,113986,113990,113995,113999,114003,114007,114012,114016,114020,114024,114028,114032,114036,114040,114044,114048,114052,114056,114060,114064,114082,114097,114101,114114,114124,114139,114156,114160,114181,114200,114225,114239,114243,114253,114265,114275,114279,114321,114359,114363,114373,114389,114404,114423,114430,114434,114447,114462,114477,114490,114509,114525,114529,114570,114585,114600,114604,114643,114654,114667,114671,114681,114690,114694,114704,114719,114737,114741,114752,114769,114782,114786,114796,114800,114811,114822,114826,114840,114854,114870,114874,114887,114904,114919,114926,114930,114934,114946,114956,114974,114986,114998,115002,115010,115026,115035,115044,115052,115094,115107,115112,115116,115134,115138,115142,115154],{"__ignoreMap":30},[144,113903,113904,113906,113909,113911],{"class":146,"line":147},[144,113905,30405],{"class":150},[144,113907,113908],{"class":154}," gymnasium ",[144,113910,31396],{"class":150},[144,113912,113913],{"class":154}," gym\n",[144,113915,113916,113918],{"class":146,"line":66},[144,113917,30405],{"class":150},[144,113919,101314],{"class":154},[144,113921,113922,113924,113926,113928],{"class":146,"line":1210},[144,113923,30405],{"class":150},[144,113925,31393],{"class":154},[144,113927,31396],{"class":150},[144,113929,31399],{"class":154},[144,113931,113932,113934,113936,113938],{"class":146,"line":1225},[144,113933,30750],{"class":150},[144,113935,113908],{"class":154},[144,113937,30405],{"class":150},[144,113939,113940],{"class":154}," spaces\n",[144,113942,113943],{"class":146,"line":1231},[144,113944,2430],{"emptyLinePlaceholder":72},[144,113946,113947],{"class":146,"line":1245},[144,113948,2430],{"emptyLinePlaceholder":72},[144,113950,113951,113953,113955],{"class":146,"line":1251},[144,113952,101327],{"class":203},[144,113954,13595],{"class":150},[144,113956,101332],{"class":259},[144,113958,113959],{"class":146,"line":1342},[144,113960,113961],{"class":259},"\u003Cmujoco model=\"gym_reacher\">\n",[144,113963,113964],{"class":146,"line":1348},[144,113965,111751],{"class":259},[144,113967,113968],{"class":146,"line":1360},[144,113969,2430],{"emptyLinePlaceholder":72},[144,113971,113972],{"class":146,"line":1642},[144,113973,101351],{"class":259},[144,113975,113976],{"class":146,"line":1647},[144,113977,111769],{"class":259},[144,113979,113980],{"class":146,"line":1653},[144,113981,2430],{"emptyLinePlaceholder":72},[144,113983,113984],{"class":146,"line":1658},[144,113985,111778],{"class":259},[144,113987,113988],{"class":146,"line":1672},[144,113989,111783],{"class":259},[144,113991,113992],{"class":146,"line":1677},[144,113993,113994],{"class":259},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[144,113996,113997],{"class":146,"line":1683},[144,113998,2430],{"emptyLinePlaceholder":72},[144,114000,114001],{"class":146,"line":1704},[144,114002,111797],{"class":259},[144,114004,114005],{"class":146,"line":1709},[144,114006,111802],{"class":259},[144,114008,114009],{"class":146,"line":1723},[144,114010,114011],{"class":259},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[144,114013,114014],{"class":146,"line":1728},[144,114015,111812],{"class":259},[144,114017,114018],{"class":146,"line":1757},[144,114019,106451],{"class":259},[144,114021,114022],{"class":146,"line":1762},[144,114023,101380],{"class":259},[144,114025,114026],{"class":146,"line":1779},[144,114027,101385],{"class":259},[144,114029,114030],{"class":146,"line":1784},[144,114031,2430],{"emptyLinePlaceholder":72},[144,114033,114034],{"class":146,"line":1789},[144,114035,106468],{"class":259},[144,114037,114038],{"class":146,"line":1794},[144,114039,111837],{"class":259},[144,114041,114042],{"class":146,"line":1808},[144,114043,111842],{"class":259},[144,114045,114046],{"class":146,"line":1813},[144,114047,106478],{"class":259},[144,114049,114050],{"class":146,"line":2607},[144,114051,101390],{"class":259},[144,114053,114054],{"class":146,"line":2621},[144,114055,95711],{"class":259},[144,114057,114058],{"class":146,"line":2629},[144,114059,2430],{"emptyLinePlaceholder":72},[144,114061,114062],{"class":146,"line":2634},[144,114063,2430],{"emptyLinePlaceholder":72},[144,114065,114066,114068,114071,114073,114075,114077,114080],{"class":146,"line":2640},[144,114067,14725],{"class":150},[144,114069,114070],{"class":1993}," ReacherEnv",[144,114072,155],{"class":154},[144,114074,113553],{"class":1993},[144,114076,713],{"class":154},[144,114078,114079],{"class":1993},"Env",[144,114081,30799],{"class":154},[144,114083,114084,114087,114089,114091,114094],{"class":146,"line":2646},[144,114085,114086],{"class":154},"    metadata ",[144,114088,200],{"class":150},[144,114090,4478],{"class":154},[144,114092,114093],{"class":259},"\"render_modes\"",[144,114095,114096],{"class":154},": []}\n",[144,114098,114099],{"class":146,"line":2651},[144,114100,2430],{"emptyLinePlaceholder":72},[144,114102,114103,114105,114107,114110,114112],{"class":146,"line":7979},[144,114104,30814],{"class":150},[144,114106,30817],{"class":203},[144,114108,114109],{"class":154},"(self) -> ",[144,114111,95699],{"class":203},[144,114113,3769],{"class":154},[144,114115,114116,114118,114120,114122],{"class":146,"line":8003},[144,114117,30830],{"class":203},[144,114119,17292],{"class":154},[144,114121,30842],{"class":203},[144,114123,2006],{"class":154},[144,114125,114126,114128,114131,114133,114135,114137],{"class":146,"line":8008},[144,114127,30858],{"class":203},[144,114129,114130],{"class":154},".model ",[144,114132,200],{"class":150},[144,114134,101425],{"class":154},[144,114136,101327],{"class":203},[144,114138,161],{"class":154},[144,114140,114141,114143,114146,114148,114151,114153],{"class":146,"line":8014},[144,114142,30858],{"class":203},[144,114144,114145],{"class":154},".data ",[144,114147,200],{"class":150},[144,114149,114150],{"class":154}," mujoco.MjData(",[144,114152,30836],{"class":203},[144,114154,114155],{"class":154},".model)\n",[144,114157,114158],{"class":146,"line":8041},[144,114159,2430],{"emptyLinePlaceholder":72},[144,114161,114162,114164,114167,114169,114172,114174,114177,114179],{"class":146,"line":8046},[144,114163,30858],{"class":203},[144,114165,114166],{"class":154},".tip_site_id ",[144,114168,200],{"class":150},[144,114170,114171],{"class":154}," mujoco.mj_name2id(",[144,114173,30836],{"class":203},[144,114175,114176],{"class":154},".model, mujoco.mjtObj.mjOBJ_SITE, ",[144,114178,111549],{"class":259},[144,114180,161],{"class":154},[144,114182,114183,114185,114188,114190,114192,114194,114196,114198],{"class":146,"line":8052},[144,114184,30858],{"class":203},[144,114186,114187],{"class":154},".target_site_id ",[144,114189,200],{"class":150},[144,114191,114171],{"class":154},[144,114193,30836],{"class":203},[144,114195,114176],{"class":154},[144,114197,111972],{"class":259},[144,114199,161],{"class":154},[144,114201,114202,114204,114206,114208,114210,114212,114215,114217,114219,114221,114223],{"class":146,"line":8064},[144,114203,2527],{"class":150},[144,114205,38886],{"class":203},[144,114207,114166],{"class":154},[144,114209,1065],{"class":150},[144,114211,4123],{"class":203},[144,114213,114214],{"class":150}," or",[144,114216,38886],{"class":203},[144,114218,114187],{"class":154},[144,114220,1065],{"class":150},[144,114222,4123],{"class":203},[144,114224,3769],{"class":154},[144,114226,114227,114230,114232,114234,114237],{"class":146,"line":8076},[144,114228,114229],{"class":150},"            raise",[144,114231,103448],{"class":203},[144,114233,155],{"class":154},[144,114235,114236],{"class":259},"\"required sites not found\"",[144,114238,161],{"class":154},[144,114240,114241],{"class":146,"line":8088},[144,114242,2430],{"emptyLinePlaceholder":72},[144,114244,114245,114247,114249,114251],{"class":146,"line":9747},[144,114246,30858],{"class":203},[144,114248,113880],{"class":154},[144,114250,200],{"class":150},[144,114252,54440],{"class":203},[144,114254,114255,114257,114260,114262],{"class":146,"line":9772},[144,114256,30858],{"class":203},[144,114258,114259],{"class":154},".max_steps ",[144,114261,200],{"class":150},[144,114263,114264],{"class":203}," 200\n",[144,114266,114267,114269,114271,114273],{"class":146,"line":9795},[144,114268,30858],{"class":203},[144,114270,113719],{"class":154},[144,114272,200],{"class":150},[144,114274,47346],{"class":203},[144,114276,114277],{"class":146,"line":9819},[144,114278,2430],{"emptyLinePlaceholder":72},[144,114280,114281,114283,114285,114287,114289,114291,114293,114295,114297,114299,114301,114303,114305,114307,114309,114311,114313,114315,114317,114319],{"class":146,"line":9824},[144,114282,30858],{"class":203},[144,114284,113767],{"class":154},[144,114286,200],{"class":150},[144,114288,113772],{"class":154},[144,114290,113775],{"class":5247},[144,114292,113778],{"class":150},[144,114294,102416],{"class":203},[144,114296,12466],{"class":154},[144,114298,113785],{"class":5247},[144,114300,200],{"class":150},[144,114302,102416],{"class":203},[144,114304,12466],{"class":154},[144,114306,95976],{"class":5247},[144,114308,200],{"class":150},[144,114310,155],{"class":154},[144,114312,232],{"class":203},[144,114314,113802],{"class":154},[144,114316,93513],{"class":5247},[144,114318,200],{"class":150},[144,114320,113809],{"class":154},[144,114322,114323,114325,114327,114329,114331,114333,114335,114337,114339,114341,114343,114345,114347,114349,114351,114353,114355,114357],{"class":146,"line":9829},[144,114324,30858],{"class":203},[144,114326,113828],{"class":154},[144,114328,200],{"class":150},[144,114330,113772],{"class":154},[144,114332,113775],{"class":5247},[144,114334,113778],{"class":150},[144,114336,113839],{"class":154},[144,114338,113785],{"class":5247},[144,114340,200],{"class":150},[144,114342,113839],{"class":154},[144,114344,95976],{"class":5247},[144,114346,200],{"class":150},[144,114348,155],{"class":154},[144,114350,601],{"class":203},[144,114352,113802],{"class":154},[144,114354,93513],{"class":5247},[144,114356,200],{"class":150},[144,114358,113809],{"class":154},[144,114360,114361],{"class":146,"line":9834},[144,114362,2430],{"emptyLinePlaceholder":72},[144,114364,114365,114367,114370],{"class":146,"line":9843},[144,114366,30814],{"class":150},[144,114368,114369],{"class":1993}," _get_obs",[144,114371,114372],{"class":154},"(self) -> np.ndarray:\n",[144,114374,114375,114377,114379,114381,114384,114386],{"class":146,"line":9848},[144,114376,112150],{"class":154},[144,114378,200],{"class":150},[144,114380,38886],{"class":203},[144,114382,114383],{"class":154},".data.site_xpos[",[144,114385,30836],{"class":203},[144,114387,114388],{"class":154},".tip_site_id].copy()\n",[144,114390,114391,114393,114395,114397,114399,114401],{"class":146,"line":9854},[144,114392,112163],{"class":154},[144,114394,200],{"class":150},[144,114396,38886],{"class":203},[144,114398,114383],{"class":154},[144,114400,30836],{"class":203},[144,114402,114403],{"class":154},".target_site_id].copy()\n",[144,114405,114406,114408,114410,114413,114415,114418,114420],{"class":146,"line":9875},[144,114407,110195],{"class":154},[144,114409,200],{"class":150},[144,114411,114412],{"class":154}," np.concatenate([",[144,114414,30836],{"class":203},[144,114416,114417],{"class":154},".data.qpos.copy(), ",[144,114419,30836],{"class":203},[144,114421,114422],{"class":154},".data.qvel.copy(), tip, target])\n",[144,114424,114425,114427],{"class":146,"line":9881},[144,114426,14783],{"class":150},[144,114428,114429],{"class":154}," obs.astype(np.float32)\n",[144,114431,114432],{"class":146,"line":9895},[144,114433,2430],{"emptyLinePlaceholder":72},[144,114435,114436,114438,114441,114443,114445],{"class":146,"line":9901},[144,114437,30814],{"class":150},[144,114439,114440],{"class":1993}," _get_reward",[144,114442,114109],{"class":154},[144,114444,194],{"class":203},[144,114446,3769],{"class":154},[144,114448,114449,114451,114453,114455,114457,114459],{"class":146,"line":9928},[144,114450,112150],{"class":154},[144,114452,200],{"class":150},[144,114454,38886],{"class":203},[144,114456,114383],{"class":154},[144,114458,30836],{"class":203},[144,114460,114461],{"class":154},".tip_site_id]\n",[144,114463,114464,114466,114468,114470,114472,114474],{"class":146,"line":9937},[144,114465,112163],{"class":154},[144,114467,200],{"class":150},[144,114469,38886],{"class":203},[144,114471,114383],{"class":154},[144,114473,30836],{"class":203},[144,114475,114476],{"class":154},".target_site_id]\n",[144,114478,114479,114482,114484,114486,114488],{"class":146,"line":9943},[144,114480,114481],{"class":154},"        dist ",[144,114483,200],{"class":150},[144,114485,111614],{"class":154},[144,114487,687],{"class":150},[144,114489,111619],{"class":154},[144,114491,114492,114495,114497,114499,114501,114504,114506],{"class":146,"line":9951},[144,114493,114494],{"class":154},"        control_cost ",[144,114496,200],{"class":150},[144,114498,112050],{"class":203},[144,114500,6549],{"class":150},[144,114502,114503],{"class":154}," np.sum(np.square(",[144,114505,30836],{"class":203},[144,114507,114508],{"class":154},".data.ctrl))\n",[144,114510,114511,114513,114515,114517,114519,114521,114523],{"class":146,"line":9956},[144,114512,14783],{"class":150},[144,114514,109810],{"class":203},[144,114516,155],{"class":154},[144,114518,687],{"class":150},[144,114520,111609],{"class":154},[144,114522,687],{"class":150},[144,114524,112072],{"class":154},[144,114526,114527],{"class":146,"line":16635},[144,114528,2430],{"emptyLinePlaceholder":72},[144,114530,114531,114533,114536,114539,114541,114544,114546,114548,114550,114552,114554,114557,114560,114562,114564,114566,114568],{"class":146,"line":16641},[144,114532,30814],{"class":150},[144,114534,114535],{"class":1993}," reset",[144,114537,114538],{"class":154},"(self, ",[144,114540,610],{"class":150},[144,114542,114543],{"class":154},", seed: ",[144,114545,158],{"class":203},[144,114547,25122],{"class":150},[144,114549,38946],{"class":203},[144,114551,13595],{"class":150},[144,114553,38946],{"class":203},[144,114555,114556],{"class":154},", options: ",[144,114558,114559],{"class":203},"dict",[144,114561,25122],{"class":150},[144,114563,38946],{"class":203},[144,114565,13595],{"class":150},[144,114567,38946],{"class":203},[144,114569,30799],{"class":154},[144,114571,114572,114574,114577,114580,114582],{"class":146,"line":16664},[144,114573,30830],{"class":203},[144,114575,114576],{"class":154},"().reset(",[144,114578,114579],{"class":5247},"seed",[144,114581,200],{"class":150},[144,114583,114584],{"class":154},"seed)\n",[144,114586,114587,114590,114592,114595,114597],{"class":146,"line":16670},[144,114588,114589],{"class":154},"        mujoco.mj_resetData(",[144,114591,30836],{"class":203},[144,114593,114594],{"class":154},".model, ",[144,114596,30836],{"class":203},[144,114598,114599],{"class":154},".data)\n",[144,114601,114602],{"class":146,"line":16693},[144,114603,2430],{"emptyLinePlaceholder":72},[144,114605,114606,114608,114611,114613,114615,114618,114620,114622,114624,114626,114628,114630,114632,114634,114636,114638,114640],{"class":146,"line":16707},[144,114607,30858],{"class":203},[144,114609,114610],{"class":154},".data.qpos[:] ",[144,114612,200],{"class":150},[144,114614,38886],{"class":203},[144,114616,114617],{"class":154},".np_random.uniform(",[144,114619,113775],{"class":5247},[144,114621,113778],{"class":150},[144,114623,86223],{"class":203},[144,114625,12466],{"class":154},[144,114627,113785],{"class":5247},[144,114629,200],{"class":150},[144,114631,86223],{"class":203},[144,114633,12466],{"class":154},[144,114635,31509],{"class":5247},[144,114637,200],{"class":150},[144,114639,30836],{"class":203},[144,114641,114642],{"class":154},".model.nq)\n",[144,114644,114645,114647,114650,114652],{"class":146,"line":16727},[144,114646,30858],{"class":203},[144,114648,114649],{"class":154},".data.qvel[:] ",[144,114651,200],{"class":150},[144,114653,104774],{"class":203},[144,114655,114656,114659,114661,114663,114665],{"class":146,"line":16733},[144,114657,114658],{"class":154},"        mujoco.mj_forward(",[144,114660,30836],{"class":203},[144,114662,114594],{"class":154},[144,114664,30836],{"class":203},[144,114666,114599],{"class":154},[144,114668,114669],{"class":146,"line":16744},[144,114670,2430],{"emptyLinePlaceholder":72},[144,114672,114673,114675,114677,114679],{"class":146,"line":16767},[144,114674,30858],{"class":203},[144,114676,113719],{"class":154},[144,114678,200],{"class":150},[144,114680,47346],{"class":203},[144,114682,114683,114685,114687],{"class":146,"line":16789},[144,114684,14783],{"class":150},[144,114686,38886],{"class":203},[144,114688,114689],{"class":154},"._get_obs(), {}\n",[144,114691,114692],{"class":146,"line":16794},[144,114693,2430],{"emptyLinePlaceholder":72},[144,114695,114696,114698,114701],{"class":146,"line":16800},[144,114697,30814],{"class":150},[144,114699,114700],{"class":1993}," step",[144,114702,114703],{"class":154},"(self, action):\n",[144,114705,114706,114708,114710,114713,114715,114717],{"class":146,"line":16814},[144,114707,110235],{"class":154},[144,114709,200],{"class":150},[144,114711,114712],{"class":154}," np.asarray(action, ",[144,114714,93513],{"class":5247},[144,114716,200],{"class":150},[144,114718,113809],{"class":154},[144,114720,114721,114723,114725,114727,114729,114732,114734],{"class":146,"line":16827},[144,114722,110235],{"class":154},[144,114724,200],{"class":150},[144,114726,107460],{"class":154},[144,114728,30836],{"class":203},[144,114730,114731],{"class":154},".action_space.low, ",[144,114733,30836],{"class":203},[144,114735,114736],{"class":154},".action_space.high)\n",[144,114738,114739],{"class":146,"line":16832},[144,114740,2430],{"emptyLinePlaceholder":72},[144,114742,114743,114745,114748,114750],{"class":146,"line":16846},[144,114744,30858],{"class":203},[144,114746,114747],{"class":154},".data.ctrl[:] ",[144,114749,200],{"class":150},[144,114751,107483],{"class":154},[144,114753,114754,114756,114758,114760,114762,114764,114766],{"class":146,"line":16851},[144,114755,3433],{"class":150},[144,114757,101514],{"class":154},[144,114759,26056],{"class":150},[144,114761,32456],{"class":203},[144,114763,155],{"class":154},[144,114765,30836],{"class":203},[144,114767,114768],{"class":154},".frame_skip):\n",[144,114770,114771,114774,114776,114778,114780],{"class":146,"line":16857},[144,114772,114773],{"class":154},"            mujoco.mj_step(",[144,114775,30836],{"class":203},[144,114777,114594],{"class":154},[144,114779,30836],{"class":203},[144,114781,114599],{"class":154},[144,114783,114784],{"class":146,"line":16862},[144,114785,2430],{"emptyLinePlaceholder":72},[144,114787,114788,114790,114792,114794],{"class":146,"line":16876},[144,114789,30858],{"class":203},[144,114791,113719],{"class":154},[144,114793,9508],{"class":150},[144,114795,55712],{"class":203},[144,114797,114798],{"class":146,"line":16881},[144,114799,2430],{"emptyLinePlaceholder":72},[144,114801,114802,114804,114806,114808],{"class":146,"line":16886},[144,114803,110195],{"class":154},[144,114805,200],{"class":150},[144,114807,38886],{"class":203},[144,114809,114810],{"class":154},"._get_obs()\n",[144,114812,114813,114815,114817,114819],{"class":146,"line":16900},[144,114814,110300],{"class":154},[144,114816,200],{"class":150},[144,114818,38886],{"class":203},[144,114820,114821],{"class":154},"._get_reward()\n",[144,114823,114824],{"class":146,"line":16912},[144,114825,2430],{"emptyLinePlaceholder":72},[144,114827,114828,114830,114832,114834,114836,114838],{"class":146,"line":16917},[144,114829,112150],{"class":154},[144,114831,200],{"class":150},[144,114833,38886],{"class":203},[144,114835,114383],{"class":154},[144,114837,30836],{"class":203},[144,114839,114461],{"class":154},[144,114841,114842,114844,114846,114848,114850,114852],{"class":146,"line":16930},[144,114843,112163],{"class":154},[144,114845,200],{"class":150},[144,114847,38886],{"class":203},[144,114849,114383],{"class":154},[144,114851,30836],{"class":203},[144,114853,114476],{"class":154},[144,114855,114856,114858,114860,114862,114865,114867],{"class":146,"line":16935},[144,114857,114481],{"class":154},[144,114859,200],{"class":150},[144,114861,109810],{"class":203},[144,114863,114864],{"class":154},"(np.linalg.norm(tip ",[144,114866,687],{"class":150},[144,114868,114869],{"class":154}," target))\n",[144,114871,114872],{"class":146,"line":16940},[144,114873,2430],{"emptyLinePlaceholder":72},[144,114875,114876,114879,114881,114883,114885],{"class":146,"line":16945},[144,114877,114878],{"class":154},"        terminated ",[144,114880,200],{"class":150},[144,114882,113702],{"class":154},[144,114884,1065],{"class":150},[144,114886,113707],{"class":203},[144,114888,114889,114892,114894,114896,114898,114900,114902],{"class":146,"line":16958},[144,114890,114891],{"class":154},"        truncated ",[144,114893,200],{"class":150},[144,114895,38886],{"class":203},[144,114897,113719],{"class":154},[144,114899,1740],{"class":150},[144,114901,38886],{"class":203},[144,114903,113726],{"class":154},[144,114905,114906,114909,114911,114913,114916],{"class":146,"line":16963},[144,114907,114908],{"class":154},"        info ",[144,114910,200],{"class":150},[144,114912,4478],{"class":154},[144,114914,114915],{"class":259},"\"distance\"",[144,114917,114918],{"class":154},": dist}\n",[144,114920,114921,114923],{"class":146,"line":32646},[144,114922,14783],{"class":150},[144,114924,114925],{"class":154}," obs, reward, terminated, truncated, info\n",[144,114927,114928],{"class":146,"line":32652},[144,114929,2430],{"emptyLinePlaceholder":72},[144,114931,114932],{"class":146,"line":32658},[144,114933,2430],{"emptyLinePlaceholder":72},[144,114935,114936,114938,114940,114942,114944],{"class":146,"line":32664},[144,114937,31960],{"class":150},[144,114939,2003],{"class":1993},[144,114941,101411],{"class":154},[144,114943,95699],{"class":203},[144,114945,3769],{"class":154},[144,114947,114948,114951,114953],{"class":146,"line":32670},[144,114949,114950],{"class":154},"    env ",[144,114952,200],{"class":150},[144,114954,114955],{"class":154}," ReacherEnv()\n",[144,114957,114958,114961,114963,114966,114968,114970,114972],{"class":146,"line":32681},[144,114959,114960],{"class":154},"    obs, info ",[144,114962,200],{"class":150},[144,114964,114965],{"class":154}," env.reset(",[144,114967,114579],{"class":5247},[144,114969,200],{"class":150},[144,114971,346],{"class":203},[144,114973,161],{"class":154},[144,114975,114976,114978,114980,114983],{"class":146,"line":32687},[144,114977,31312],{"class":203},[144,114979,155],{"class":154},[144,114981,114982],{"class":259},"\"initial obs shape:\"",[144,114984,114985],{"class":154},", obs.shape)\n",[144,114987,114988,114990,114992,114995],{"class":146,"line":32707},[144,114989,31312],{"class":203},[144,114991,155],{"class":154},[144,114993,114994],{"class":259},"\"initial info:\"",[144,114996,114997],{"class":154},", info)\n",[144,114999,115000],{"class":146,"line":32713},[144,115001,2430],{"emptyLinePlaceholder":72},[144,115003,115004,115006,115008],{"class":146,"line":32724},[144,115005,110166],{"class":154},[144,115007,200],{"class":150},[144,115009,104774],{"class":203},[144,115011,115012,115014,115016,115018,115020,115022,115024],{"class":146,"line":32730},[144,115013,3231],{"class":150},[144,115015,31629],{"class":154},[144,115017,26056],{"class":150},[144,115019,32456],{"class":203},[144,115021,155],{"class":154},[144,115023,855],{"class":203},[144,115025,30799],{"class":154},[144,115027,115028,115030,115032],{"class":146,"line":32736},[144,115029,110235],{"class":154},[144,115031,200],{"class":150},[144,115033,115034],{"class":154}," env.action_space.sample()\n",[144,115036,115037,115040,115042],{"class":146,"line":32742},[144,115038,115039],{"class":154},"        obs, reward, terminated, truncated, info ",[144,115041,200],{"class":150},[144,115043,113428],{"class":154},[144,115045,115046,115048,115050],{"class":146,"line":32748},[144,115047,110310],{"class":154},[144,115049,9508],{"class":150},[144,115051,110315],{"class":154},[144,115053,115054,115056,115058,115060,115062,115065,115067,115069,115072,115074,115076,115079,115081,115083,115086,115088,115090,115092],{"class":146,"line":32754},[144,115055,32464],{"class":203},[144,115057,155],{"class":154},[144,115059,110344],{"class":259},[144,115061,110347],{"class":154},[144,115063,115064],{"class":259},"\"reward:\"",[144,115066,12466],{"class":154},[144,115068,32031],{"class":203},[144,115070,115071],{"class":154},"(reward, ",[144,115073,226],{"class":203},[144,115075,110358],{"class":154},[144,115077,115078],{"class":259},"\"distance:\"",[144,115080,12466],{"class":154},[144,115082,32031],{"class":203},[144,115084,115085],{"class":154},"(info[",[144,115087,114915],{"class":259},[144,115089,112215],{"class":154},[144,115091,226],{"class":203},[144,115093,30510],{"class":154},[144,115095,115096,115098,115101,115104],{"class":146,"line":32760},[144,115097,2527],{"class":150},[144,115099,115100],{"class":154}," terminated ",[144,115102,115103],{"class":150},"or",[144,115105,115106],{"class":154}," truncated:\n",[144,115108,115109],{"class":146,"line":32766},[144,115110,115111],{"class":150},"            break\n",[144,115113,115114],{"class":146,"line":32786},[144,115115,2430],{"emptyLinePlaceholder":72},[144,115117,115118,115120,115122,115124,115126,115128,115130,115132],{"class":146,"line":32792},[144,115119,31312],{"class":203},[144,115121,155],{"class":154},[144,115123,110389],{"class":259},[144,115125,12466],{"class":154},[144,115127,32031],{"class":203},[144,115129,110396],{"class":154},[144,115131,226],{"class":203},[144,115133,30510],{"class":154},[144,115135,115136],{"class":146,"line":32808},[144,115137,2430],{"emptyLinePlaceholder":72},[144,115139,115140],{"class":146,"line":32814},[144,115141,2430],{"emptyLinePlaceholder":72},[144,115143,115144,115146,115148,115150,115152],{"class":146,"line":32828},[144,115145,1561],{"class":150},[144,115147,31233],{"class":203},[144,115149,101572],{"class":150},[144,115151,101575],{"class":259},[144,115153,3769],{"class":154},[144,115155,115156],{"class":146,"line":32834},[144,115157,101582],{"class":154},[14,115159,103583],{},[135,115161,115163],{"className":23854,"code":115162,"language":23856,"meta":30,"style":30},"touch ch8_gym_env.py\n",[141,115164,115165],{"__ignoreMap":30},[144,115166,115167,115169],{"class":146,"line":147},[144,115168,101296],{"class":1993},[144,115170,115171],{"class":259}," ch8_gym_env.py\n",[14,115173,110457],{},[135,115175,115177],{"className":23854,"code":115176,"language":23856,"meta":30,"style":30},"python ch8_gym_env.py\n",[141,115178,115179],{"__ignoreMap":30},[144,115180,115181,115183],{"class":146,"line":147},[144,115182,30393],{"class":1993},[144,115184,115171],{"class":259},[115,115186,101585],{"id":101585},[14,115188,115189],{},"继承 Gymnasium 环境：",[135,115191,115193],{"className":30391,"code":115192,"language":30393,"meta":30,"style":30},"class ReacherEnv(gym.Env):\n",[141,115194,115195],{"__ignoreMap":30},[144,115196,115197,115199,115201,115203,115205,115207,115209],{"class":146,"line":147},[144,115198,14725],{"class":150},[144,115200,114070],{"class":1993},[144,115202,155],{"class":154},[144,115204,113553],{"class":1993},[144,115206,713],{"class":154},[144,115208,114079],{"class":1993},[144,115210,30799],{"class":154},[14,115212,115213],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115215,115216],{},"初始化模型：",[135,115218,115220],{"className":30391,"code":115219,"language":30393,"meta":30,"style":30},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[141,115221,115222,115236],{"__ignoreMap":30},[144,115223,115224,115226,115228,115230,115232,115234],{"class":146,"line":147},[144,115225,30836],{"class":203},[144,115227,114130],{"class":154},[144,115229,200],{"class":150},[144,115231,101425],{"class":154},[144,115233,101327],{"class":203},[144,115235,161],{"class":154},[144,115237,115238,115240,115242,115244,115246,115248],{"class":146,"line":66},[144,115239,30836],{"class":203},[144,115241,114145],{"class":154},[144,115243,200],{"class":150},[144,115245,114150],{"class":154},[144,115247,30836],{"class":203},[144,115249,114155],{"class":154},[14,115251,115252,115253,115255],{},"这和前面章节一样，只是现在放到了类的 ",[141,115254,30842],{}," 里。",[14,115257,115258],{},"缓存 site ID：",[135,115260,115262],{"className":30391,"code":115261,"language":30393,"meta":30,"style":30},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[141,115263,115264,115278],{"__ignoreMap":30},[144,115265,115266,115268,115270,115272,115274,115276],{"class":146,"line":147},[144,115267,30836],{"class":203},[144,115269,114166],{"class":154},[144,115271,200],{"class":150},[144,115273,114171],{"class":154},[144,115275,89567],{"class":203},[144,115277,161],{"class":154},[144,115279,115280,115282,115284,115286,115288,115290],{"class":146,"line":66},[144,115281,30836],{"class":203},[144,115283,114187],{"class":154},[144,115285,200],{"class":150},[144,115287,114171],{"class":154},[144,115289,89567],{"class":203},[144,115291,161],{"class":154},[14,115293,115294],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115296,115297],{},"reset：",[135,115299,115301],{"className":30391,"code":115300,"language":30393,"meta":30,"style":30},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[141,115302,115303],{"__ignoreMap":30},[144,115304,115305,115307,115309,115311,115313,115315,115317,115319,115321,115323,115325,115327,115329,115331,115333,115335,115337],{"class":146,"line":147},[144,115306,31960],{"class":150},[144,115308,114535],{"class":1993},[144,115310,114538],{"class":154},[144,115312,610],{"class":150},[144,115314,114543],{"class":154},[144,115316,158],{"class":203},[144,115318,25122],{"class":150},[144,115320,38946],{"class":203},[144,115322,13595],{"class":150},[144,115324,38946],{"class":203},[144,115326,114556],{"class":154},[144,115328,114559],{"class":203},[144,115330,25122],{"class":150},[144,115332,38946],{"class":203},[144,115334,13595],{"class":150},[144,115336,38946],{"class":203},[144,115338,30799],{"class":154},[14,115340,115341,115343],{},[141,115342,70069],{}," 做四件事：",[98,115345,115346,115349,115352,115355],{},[101,115347,115348],{},"设置随机种子。",[101,115350,115351],{},"重置 MuJoCo data。",[101,115353,115354],{},"随机初始化关节角。",[101,115356,115357],{},"返回初始观测和 info。",[14,115359,115360],{},"step：",[135,115362,115364],{"className":30391,"code":115363,"language":30393,"meta":30,"style":30},"def step(self, action):\n",[141,115365,115366],{"__ignoreMap":30},[144,115367,115368,115370,115372],{"class":146,"line":147},[144,115369,31960],{"class":150},[144,115371,114700],{"class":1993},[144,115373,114703],{"class":154},[14,115375,115376,115378],{},[141,115377,107147],{}," 做六件事：",[98,115380,115381,115384,115390,115393,115396,115399],{},[101,115382,115383],{},"检查并裁剪 action。",[101,115385,115386,115387,28398],{},"写入 ",[141,115388,115389],{},"self.data.ctrl",[101,115391,115392],{},"连续推进若干个 MuJoCo 物理步。",[101,115394,115395],{},"计算新观测。",[101,115397,115398],{},"计算奖励和结束条件。",[101,115400,115401],{},"返回 Gymnasium 标准五元组。",[115,115403,101721],{"id":101721},[135,115405,115407],{"className":30391,"code":115406,"language":30393,"meta":30,"style":30},"import gymnasium as gym\n",[141,115408,115409],{"__ignoreMap":30},[144,115410,115411,115413,115415,115417],{"class":146,"line":147},[144,115412,30405],{"class":150},[144,115414,113908],{"class":154},[144,115416,31396],{"class":150},[144,115418,113913],{"class":154},[14,115420,115421,115422,115424,115425,115428],{},"导入 Gymnasium，并起别名 ",[141,115423,113553],{},"。后面写 ",[141,115426,115427],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[135,115430,115432],{"className":30391,"code":115431,"language":30393,"meta":30,"style":30},"from gymnasium import spaces\n",[141,115433,115434],{"__ignoreMap":30},[144,115435,115436,115438,115440,115442],{"class":146,"line":147},[144,115437,30750],{"class":150},[144,115439,113908],{"class":154},[144,115441,30405],{"class":150},[144,115443,113940],{"class":154},[14,115445,115446,115447,115450],{},"导入空间定义工具。",[141,115448,115449],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[135,115452,115453],{"className":30391,"code":115192,"language":30393,"meta":30,"style":30},[141,115454,115455],{"__ignoreMap":30},[144,115456,115457,115459,115461,115463,115465,115467,115469],{"class":146,"line":147},[144,115458,14725],{"class":150},[144,115460,114070],{"class":1993},[144,115462,155],{"class":154},[144,115464,113553],{"class":1993},[144,115466,713],{"class":154},[144,115468,114079],{"class":1993},[144,115470,30799],{"class":154},[14,115472,115473,115474,115477,115478,115480,115481,101031,115483,115485],{},"定义一个类，名字叫 ",[141,115475,115476],{},"ReacherEnv","。括号里的 ",[141,115479,115427],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[141,115482,70069],{},[141,115484,107147],{}," 这两个核心方法。",[135,115487,115489],{"className":30391,"code":115488,"language":30393,"meta":30,"style":30},"metadata = {\"render_modes\": []}\n",[141,115490,115491],{"__ignoreMap":30},[144,115492,115493,115496,115498,115500,115502],{"class":146,"line":147},[144,115494,115495],{"class":154},"metadata ",[144,115497,200],{"class":150},[144,115499,4478],{"class":154},[144,115501,114093],{"class":259},[144,115503,114096],{"class":154},[14,115505,115506],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[135,115508,115510],{"className":30391,"code":115509,"language":30393,"meta":30,"style":30},"def __init__(self) -> None:\n",[141,115511,115512],{"__ignoreMap":30},[144,115513,115514,115516,115518,115520,115522],{"class":146,"line":147},[144,115515,31960],{"class":150},[144,115517,30817],{"class":203},[144,115519,114109],{"class":154},[144,115521,95699],{"class":203},[144,115523,3769],{"class":154},[14,115525,115526,115528,115529,28398],{},[141,115527,30842],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[141,115530,115531],{},"env = ReacherEnv()",[135,115533,115535],{"className":30391,"code":115534,"language":30393,"meta":30,"style":30},"super().__init__()\n",[141,115536,115537],{"__ignoreMap":30},[144,115538,115539,115542,115544,115546],{"class":146,"line":147},[144,115540,115541],{"class":203},"super",[144,115543,17292],{"class":154},[144,115545,30842],{"class":203},[144,115547,2006],{"class":154},[14,115549,115550,115551,115553],{},"调用父类 ",[141,115552,115427],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[135,115555,115556],{"className":30391,"code":115219,"language":30393,"meta":30,"style":30},[141,115557,115558,115572],{"__ignoreMap":30},[144,115559,115560,115562,115564,115566,115568,115570],{"class":146,"line":147},[144,115561,30836],{"class":203},[144,115563,114130],{"class":154},[144,115565,200],{"class":150},[144,115567,101425],{"class":154},[144,115569,101327],{"class":203},[144,115571,161],{"class":154},[144,115573,115574,115576,115578,115580,115582,115584],{"class":146,"line":66},[144,115575,30836],{"class":203},[144,115577,114145],{"class":154},[144,115579,200],{"class":150},[144,115581,114150],{"class":154},[144,115583,30836],{"class":203},[144,115585,114155],{"class":154},[14,115587,115588,115589,115591,115592,101031,115595,115598],{},"把 MuJoCo 模型和状态保存到 ",[141,115590,30836],{}," 上。",[141,115593,115594],{},"self.model",[141,115596,115597],{},"self.data"," 表示这个环境对象自己的模型和状态。",[135,115600,115601],{"className":30391,"code":115261,"language":30393,"meta":30,"style":30},[141,115602,115603,115617],{"__ignoreMap":30},[144,115604,115605,115607,115609,115611,115613,115615],{"class":146,"line":147},[144,115606,30836],{"class":203},[144,115608,114166],{"class":154},[144,115610,200],{"class":150},[144,115612,114171],{"class":154},[144,115614,89567],{"class":203},[144,115616,161],{"class":154},[144,115618,115619,115621,115623,115625,115627,115629],{"class":146,"line":66},[144,115620,30836],{"class":203},[144,115622,114187],{"class":154},[144,115624,200],{"class":150},[144,115626,114171],{"class":154},[144,115628,89567],{"class":203},[144,115630,161],{"class":154},[14,115632,115633,115634,101031,115637,115640],{},"提前查好 tip 和 target 的 site ID。这样 ",[141,115635,115636],{},"_get_obs",[141,115638,115639],{},"_get_reward"," 里就不用每次按名字查找。",[135,115642,115644],{"className":30391,"code":115643,"language":30393,"meta":30,"style":30},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[141,115645,115646,115656,115666],{"__ignoreMap":30},[144,115647,115648,115650,115652,115654],{"class":146,"line":147},[144,115649,30836],{"class":203},[144,115651,113880],{"class":154},[144,115653,200],{"class":150},[144,115655,54440],{"class":203},[144,115657,115658,115660,115662,115664],{"class":146,"line":66},[144,115659,30836],{"class":203},[144,115661,114259],{"class":154},[144,115663,200],{"class":150},[144,115665,114264],{"class":203},[144,115667,115668,115670,115672,115674],{"class":146,"line":1210},[144,115669,30836],{"class":203},[144,115671,113719],{"class":154},[144,115673,200],{"class":150},[144,115675,47346],{"class":203},[14,115677,115678,115681,115682,115685,115686,115689],{},[141,115679,115680],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[141,115683,115684],{},"max_steps"," 是一个 episode 最多运行多少步。",[141,115687,115688],{},"steps"," 记录当前 episode 已经走了多少步。",[135,115691,115692],{"className":30391,"code":113758,"language":30393,"meta":30,"style":30},[141,115693,115694],{"__ignoreMap":30},[144,115695,115696,115698,115700,115702,115704,115706,115708,115710,115712,115714,115716,115718,115720,115722,115724,115726,115728,115730,115732,115734],{"class":146,"line":147},[144,115697,30836],{"class":203},[144,115699,113767],{"class":154},[144,115701,200],{"class":150},[144,115703,113772],{"class":154},[144,115705,113775],{"class":5247},[144,115707,113778],{"class":150},[144,115709,102416],{"class":203},[144,115711,12466],{"class":154},[144,115713,113785],{"class":5247},[144,115715,200],{"class":150},[144,115717,102416],{"class":203},[144,115719,12466],{"class":154},[144,115721,95976],{"class":5247},[144,115723,200],{"class":150},[144,115725,155],{"class":154},[144,115727,232],{"class":203},[144,115729,113802],{"class":154},[144,115731,93513],{"class":5247},[144,115733,200],{"class":150},[144,115735,113809],{"class":154},[14,115737,115738,115739,115742,115743,101031,115746,115749],{},"定义动作空间。",[141,115740,115741],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[141,115744,115745],{},"low=-1.0",[141,115747,115748],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[135,115751,115752],{"className":30391,"code":113819,"language":30393,"meta":30,"style":30},[141,115753,115754],{"__ignoreMap":30},[144,115755,115756,115758,115760,115762,115764,115766,115768,115770,115772,115774,115776,115778,115780,115782,115784,115786,115788,115790],{"class":146,"line":147},[144,115757,30836],{"class":203},[144,115759,113828],{"class":154},[144,115761,200],{"class":150},[144,115763,113772],{"class":154},[144,115765,113775],{"class":5247},[144,115767,113778],{"class":150},[144,115769,113839],{"class":154},[144,115771,113785],{"class":5247},[144,115773,200],{"class":150},[144,115775,113839],{"class":154},[144,115777,95976],{"class":5247},[144,115779,200],{"class":150},[144,115781,155],{"class":154},[144,115783,601],{"class":203},[144,115785,113802],{"class":154},[144,115787,93513],{"class":5247},[144,115789,200],{"class":150},[144,115791,113809],{"class":154},[14,115793,115794,115795,115798,115799,115802],{},"定义观测空间。",[141,115796,115797],{},"shape=(10,)"," 表示观测是 10 个数。",[141,115800,115801],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[135,115804,115806],{"className":30391,"code":115805,"language":30393,"meta":30,"style":30},"def _get_obs(self) -> np.ndarray:\n",[141,115807,115808],{"__ignoreMap":30},[144,115809,115810,115812,115814],{"class":146,"line":147},[144,115811,31960],{"class":150},[144,115813,114369],{"class":1993},[144,115815,114372],{"class":154},[14,115817,115818,115819,115821],{},"定义内部函数，用来生成观测。函数名前面的 ",[141,115820,1147],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[135,115823,115825],{"className":30391,"code":115824,"language":30393,"meta":30,"style":30},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[141,115826,115827,115841],{"__ignoreMap":30},[144,115828,115829,115831,115833,115835,115837,115839],{"class":146,"line":147},[144,115830,111581],{"class":154},[144,115832,200],{"class":150},[144,115834,38886],{"class":203},[144,115836,114383],{"class":154},[144,115838,30836],{"class":203},[144,115840,114388],{"class":154},[144,115842,115843,115845,115847,115849,115851,115853],{"class":146,"line":66},[144,115844,111591],{"class":154},[144,115846,200],{"class":150},[144,115848,38886],{"class":203},[144,115850,114383],{"class":154},[144,115852,30836],{"class":203},[144,115854,114403],{"class":154},[14,115856,115857],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[135,115859,115861],{"className":30391,"code":115860,"language":30393,"meta":30,"style":30},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[141,115862,115863,115879],{"__ignoreMap":30},[144,115864,115865,115867,115869,115871,115873,115875,115877],{"class":146,"line":147},[144,115866,110867],{"class":154},[144,115868,200],{"class":150},[144,115870,114412],{"class":154},[144,115872,30836],{"class":203},[144,115874,114417],{"class":154},[144,115876,30836],{"class":203},[144,115878,114422],{"class":154},[144,115880,115881,115883],{"class":146,"line":66},[144,115882,17077],{"class":150},[144,115884,114429],{"class":154},[14,115886,115887,115888,115891,115892,115894],{},"拼接观测，并转换成 ",[141,115889,115890],{},"float32","。很多强化学习库默认使用 ",[141,115893,115890],{},"，所以这里主动转换。",[135,115896,115897],{"className":30391,"code":115300,"language":30393,"meta":30,"style":30},[141,115898,115899],{"__ignoreMap":30},[144,115900,115901,115903,115905,115907,115909,115911,115913,115915,115917,115919,115921,115923,115925,115927,115929,115931,115933],{"class":146,"line":147},[144,115902,31960],{"class":150},[144,115904,114535],{"class":1993},[144,115906,114538],{"class":154},[144,115908,610],{"class":150},[144,115910,114543],{"class":154},[144,115912,158],{"class":203},[144,115914,25122],{"class":150},[144,115916,38946],{"class":203},[144,115918,13595],{"class":150},[144,115920,38946],{"class":203},[144,115922,114556],{"class":154},[144,115924,114559],{"class":203},[144,115926,25122],{"class":150},[144,115928,38946],{"class":203},[144,115930,13595],{"class":150},[144,115932,38946],{"class":203},[144,115934,30799],{"class":154},[14,115936,115937,115938,115940,115941,115944],{},"定义 reset。",[141,115939,114579],{}," 用来控制随机数，保证实验可以复现。",[141,115942,115943],{},"options"," 用来接收额外配置，本章暂时不用。",[135,115946,115948],{"className":30391,"code":115947,"language":30393,"meta":30,"style":30},"super().reset(seed=seed)\n",[141,115949,115950],{"__ignoreMap":30},[144,115951,115952,115954,115956,115958,115960],{"class":146,"line":147},[144,115953,115541],{"class":203},[144,115955,114576],{"class":154},[144,115957,114579],{"class":5247},[144,115959,200],{"class":150},[144,115961,114584],{"class":154},[14,115963,115964,115965,115968],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[141,115966,115967],{},"self.np_random"," 生成可复现的随机数。",[135,115970,115972],{"className":30391,"code":115971,"language":30393,"meta":30,"style":30},"mujoco.mj_resetData(self.model, self.data)\n",[141,115973,115974],{"__ignoreMap":30},[144,115975,115976,115979,115981,115983,115985],{"class":146,"line":147},[144,115977,115978],{"class":154},"mujoco.mj_resetData(",[144,115980,30836],{"class":203},[144,115982,114594],{"class":154},[144,115984,30836],{"class":203},[144,115986,114599],{"class":154},[14,115988,115989],{},"把 MuJoCo 状态重置到默认状态。",[135,115991,115993],{"className":30391,"code":115992,"language":30393,"meta":30,"style":30},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[141,115994,115995],{"__ignoreMap":30},[144,115996,115997,115999,116001,116003,116005,116007,116009,116011,116013,116015,116017,116019,116021,116023,116025,116027,116029],{"class":146,"line":147},[144,115998,30836],{"class":203},[144,116000,114610],{"class":154},[144,116002,200],{"class":150},[144,116004,38886],{"class":203},[144,116006,114617],{"class":154},[144,116008,113775],{"class":5247},[144,116010,113778],{"class":150},[144,116012,86223],{"class":203},[144,116014,12466],{"class":154},[144,116016,113785],{"class":5247},[144,116018,200],{"class":150},[144,116020,86223],{"class":203},[144,116022,12466],{"class":154},[144,116024,31509],{"class":5247},[144,116026,200],{"class":150},[144,116028,30836],{"class":203},[144,116030,114642],{"class":154},[14,116032,115354,116033,116036,116037,116040,116041,116043],{},[141,116034,116035],{},"[:]"," 表示修改整个数组。",[141,116038,116039],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[141,116042,102163],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[135,116045,116047],{"className":30391,"code":116046,"language":30393,"meta":30,"style":30},"self.data.qvel[:] = 0.0\n",[141,116048,116049],{"__ignoreMap":30},[144,116050,116051,116053,116055,116057],{"class":146,"line":147},[144,116052,30836],{"class":203},[144,116054,114649],{"class":154},[144,116056,200],{"class":150},[144,116058,104774],{"class":203},[14,116060,116061],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[135,116063,116065],{"className":30391,"code":116064,"language":30393,"meta":30,"style":30},"self.steps = 0\nreturn self._get_obs(), {}\n",[141,116066,116067,116077],{"__ignoreMap":30},[144,116068,116069,116071,116073,116075],{"class":146,"line":147},[144,116070,30836],{"class":203},[144,116072,113719],{"class":154},[144,116074,200],{"class":150},[144,116076,47346],{"class":203},[144,116078,116079,116081,116083],{"class":146,"line":66},[144,116080,17077],{"class":150},[144,116082,38886],{"class":203},[144,116084,114689],{"class":154},[14,116086,116087],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[135,116089,116090],{"className":30391,"code":115363,"language":30393,"meta":30,"style":30},[141,116091,116092],{"__ignoreMap":30},[144,116093,116094,116096,116098],{"class":146,"line":147},[144,116095,31960],{"class":150},[144,116097,114700],{"class":1993},[144,116099,114703],{"class":154},[14,116101,116102],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[135,116104,116106],{"className":30391,"code":116105,"language":30393,"meta":30,"style":30},"action = np.asarray(action, dtype=np.float32)\n",[141,116107,116108],{"__ignoreMap":30},[144,116109,116110,116112,116114,116116,116118,116120],{"class":146,"line":147},[144,116111,107455],{"class":154},[144,116113,200],{"class":150},[144,116115,114712],{"class":154},[144,116117,93513],{"class":5247},[144,116119,200],{"class":150},[144,116121,113809],{"class":154},[14,116123,116124,116125,28398],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[141,116126,115890],{},[135,116128,116130],{"className":30391,"code":116129,"language":30393,"meta":30,"style":30},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[141,116131,116132],{"__ignoreMap":30},[144,116133,116134,116136,116138,116140,116142,116144,116146],{"class":146,"line":147},[144,116135,107455],{"class":154},[144,116137,200],{"class":150},[144,116139,107460],{"class":154},[144,116141,30836],{"class":203},[144,116143,114731],{"class":154},[144,116145,30836],{"class":203},[144,116147,114736],{"class":154},[14,116149,116150],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[135,116152,116154],{"className":30391,"code":116153,"language":30393,"meta":30,"style":30},"self.data.ctrl[:] = action\n",[141,116155,116156],{"__ignoreMap":30},[144,116157,116158,116160,116162,116164],{"class":146,"line":147},[144,116159,30836],{"class":203},[144,116161,114747],{"class":154},[144,116163,200],{"class":150},[144,116165,107483],{"class":154},[14,116167,116168],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[135,116170,116172],{"className":30391,"code":116171,"language":30393,"meta":30,"style":30},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[141,116173,116174,116190],{"__ignoreMap":30},[144,116175,116176,116178,116180,116182,116184,116186,116188],{"class":146,"line":147},[144,116177,3055],{"class":150},[144,116179,101514],{"class":154},[144,116181,26056],{"class":150},[144,116183,32456],{"class":203},[144,116185,155],{"class":154},[144,116187,30836],{"class":203},[144,116189,114768],{"class":154},[144,116191,116192,116195,116197,116199,116201],{"class":146,"line":66},[144,116193,116194],{"class":154},"    mujoco.mj_step(",[144,116196,30836],{"class":203},[144,116198,114594],{"class":154},[144,116200,30836],{"class":203},[144,116202,114599],{"class":154},[14,116204,116205,116206,116209,116210,116212,116213,28398],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[141,116207,116208],{},"frame_skip=5","，所以外部调用一次 ",[141,116211,113890],{},"，内部实际执行 5 次 ",[141,116214,101228],{},[135,116216,116218],{"className":30391,"code":116217,"language":30393,"meta":30,"style":30},"self.steps += 1\n",[141,116219,116220],{"__ignoreMap":30},[144,116221,116222,116224,116226,116228],{"class":146,"line":147},[144,116223,30836],{"class":203},[144,116225,113719],{"class":154},[144,116227,9508],{"class":150},[144,116229,55712],{"class":203},[14,116231,116232],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[135,116234,116236],{"className":30391,"code":116235,"language":30393,"meta":30,"style":30},"obs = self._get_obs()\nreward = self._get_reward()\n",[141,116237,116238,116248],{"__ignoreMap":30},[144,116239,116240,116242,116244,116246],{"class":146,"line":147},[144,116241,110867],{"class":154},[144,116243,200],{"class":150},[144,116245,38886],{"class":203},[144,116247,114810],{"class":154},[144,116249,116250,116252,116254,116256],{"class":146,"line":66},[144,116251,111018],{"class":154},[144,116253,200],{"class":150},[144,116255,38886],{"class":203},[144,116257,114821],{"class":154},[14,116259,116260],{},"计算新的观测和奖励。",[135,116262,116264],{"className":30391,"code":116263,"language":30393,"meta":30,"style":30},"dist = float(np.linalg.norm(tip - target))\n",[141,116265,116266],{"__ignoreMap":30},[144,116267,116268,116270,116272,116274,116276,116278],{"class":146,"line":147},[144,116269,111609],{"class":154},[144,116271,200],{"class":150},[144,116273,109810],{"class":203},[144,116275,114864],{"class":154},[144,116277,687],{"class":150},[144,116279,114869],{"class":154},[14,116281,116282],{},"计算末端到目标的距离，并转换成 Python float。",[135,116284,116285],{"className":30391,"code":113690,"language":30393,"meta":30,"style":30},[141,116286,116287,116299],{"__ignoreMap":30},[144,116288,116289,116291,116293,116295,116297],{"class":146,"line":147},[144,116290,113697],{"class":154},[144,116292,200],{"class":150},[144,116294,113702],{"class":154},[144,116296,1065],{"class":150},[144,116298,113707],{"class":203},[144,116300,116301,116303,116305,116307,116309,116311,116313],{"class":146,"line":66},[144,116302,113712],{"class":154},[144,116304,200],{"class":150},[144,116306,38886],{"class":203},[144,116308,113719],{"class":154},[144,116310,1740],{"class":150},[144,116312,38886],{"class":203},[144,116314,113726],{"class":154},[14,116316,116317],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[135,116319,116321],{"className":30391,"code":116320,"language":30393,"meta":30,"style":30},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[141,116322,116323,116336],{"__ignoreMap":30},[144,116324,116325,116328,116330,116332,116334],{"class":146,"line":147},[144,116326,116327],{"class":154},"info ",[144,116329,200],{"class":150},[144,116331,4478],{"class":154},[144,116333,114915],{"class":259},[144,116335,114918],{"class":154},[144,116337,116338,116340],{"class":146,"line":66},[144,116339,17077],{"class":150},[144,116341,114925],{"class":154},[14,116343,116344,116347],{},[141,116345,116346],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[135,116349,116351],{"className":30391,"code":116350,"language":30393,"meta":30,"style":30},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[141,116352,116353,116362],{"__ignoreMap":30},[144,116354,116355,116358,116360],{"class":146,"line":147},[144,116356,116357],{"class":154},"env ",[144,116359,200],{"class":150},[144,116361,114955],{"class":154},[144,116363,116364,116366,116368,116370,116372,116374,116376],{"class":146,"line":66},[144,116365,113413],{"class":154},[144,116367,200],{"class":150},[144,116369,114965],{"class":154},[144,116371,114579],{"class":5247},[144,116373,200],{"class":150},[144,116375,346],{"class":203},[144,116377,161],{"class":154},[14,116379,116380,116381,116384],{},"创建环境并重置。",[141,116382,116383],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[135,116386,116388],{"className":30391,"code":116387,"language":30393,"meta":30,"style":30},"action = env.action_space.sample()\n",[141,116389,116390],{"__ignoreMap":30},[144,116391,116392,116394,116396],{"class":146,"line":147},[144,116393,107455],{"class":154},[144,116395,200],{"class":150},[144,116397,115034],{"class":154},[14,116399,116400],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[18,116402,102329],{"id":102328},[14,116404,105497],{},[135,116406,116409],{"className":116407,"code":116408,"language":5218,"meta":30},[5216],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[141,116410,116408],{"__ignoreMap":30},[14,116412,116413],{},"这个环境已经具备强化学习环境的基本结构。",[14,116415,116416],{},"主函数里使用随机动作：",[135,116418,116419],{"className":30391,"code":116387,"language":30393,"meta":30,"style":30},[141,116420,116421],{"__ignoreMap":30},[144,116422,116423,116425,116427],{"class":146,"line":147},[144,116424,107455],{"class":154},[144,116426,200],{"class":150},[144,116428,115034],{"class":154},[14,116430,116431],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[18,116433,102361],{"id":102360},[98,116435,116436,116439,116445,116454,116463,116472,116478],{},[101,116437,116438],{},"运行程序。",[101,116440,116441,116442,28398],{},"确认 ",[141,116443,116444],{},"obs.shape == (10,)",[101,116446,111194,116447,116450,116451,28398],{},[141,116448,116449],{},"env.action_space","，应类似 ",[141,116452,116453],{},"Box(-1.0, 1.0, (2,), float32)",[101,116455,105598,116456,116459,116460,28398],{},[141,116457,116458],{},"self.max_steps = 10","，确认环境会更快 ",[141,116461,116462],{},"truncated=True",[101,116464,102424,116465,102427,116468,116471],{},[141,116466,116467],{},"terminated = dist \u003C 0.05",[141,116469,116470],{},"dist \u003C 0.2","，观察是否更容易结束。",[101,116473,102424,116474,116477],{},[141,116475,116476],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[101,116479,116480,116481,116483,116484,116487],{},"在 ",[141,116482,116346],{}," 里加入 ",[141,116485,116486],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[18,116489,102466],{"id":102465},[115,116491,116493],{"id":116492},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,116495,116496,116497,116499],{},"Gymnasium 的 ",[141,116498,107147],{}," 返回 5 个值:",[135,116501,116503],{"className":30391,"code":116502,"language":30393,"meta":30,"style":30},"obs, reward, terminated, truncated, info\n",[141,116504,116505],{"__ignoreMap":30},[144,116506,116507],{"class":146,"line":147},[144,116508,116502],{"class":154},[14,116510,116511],{},"不是旧 Gym 的 4 个值。",[115,116513,116515,116518],{"id":116514},"datactrl-action-维度错误",[141,116516,116517],{},"data.ctrl[:] = action"," 维度错误",[14,116520,102536],{},[135,116522,116524],{"className":30391,"code":116523,"language":30393,"meta":30,"style":30},"print(self.model.nu)\nprint(action.shape)\n",[141,116525,116526,116537],{"__ignoreMap":30},[144,116527,116528,116530,116532,116534],{"class":146,"line":147},[144,116529,30428],{"class":203},[144,116531,155],{"class":154},[144,116533,30836],{"class":203},[144,116535,116536],{"class":154},".model.nu)\n",[144,116538,116539,116541],{"class":146,"line":66},[144,116540,30428],{"class":203},[144,116542,116543],{"class":154},"(action.shape)\n",[14,116545,116546],{},"两者必须匹配。",[115,116548,116550],{"id":116549},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,116552,102475],{},[135,116554,116556],{"className":30391,"code":116555,"language":30393,"meta":30,"style":30},"mujoco.mj_forward(self.model, self.data)\n",[141,116557,116558],{"__ignoreMap":30},[144,116559,116560,116563,116565,116567,116569],{"class":146,"line":147},[144,116561,116562],{"class":154},"mujoco.mj_forward(",[144,116564,30836],{"class":203},[144,116566,114594],{"class":154},[144,116568,30836],{"class":203},[144,116570,114599],{"class":154},[115,116572,116574,116576],{"id":116573},"observation_space-维度和-obs-不一致",[141,116575,113613],{}," 维度和 obs 不一致",[14,116578,102588],{},[135,116580,116582],{"className":30391,"code":116581,"language":30393,"meta":30,"style":30},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[141,116583,116584,116594,116601],{"__ignoreMap":30},[144,116585,116586,116588,116590,116592],{"class":146,"line":147},[144,116587,110867],{"class":154},[144,116589,200],{"class":150},[144,116591,38886],{"class":203},[144,116593,114810],{"class":154},[144,116595,116596,116598],{"class":146,"line":66},[144,116597,30428],{"class":203},[144,116599,116600],{"class":154},"(obs.shape)\n",[144,116602,116603,116605,116607,116609],{"class":146,"line":1210},[144,116604,30428],{"class":203},[144,116606,155],{"class":154},[144,116608,30836],{"class":203},[144,116610,116611],{"class":154},".observation_space.shape)\n",[14,116613,116614],{},"两者必须一致。本章观测是：",[135,116616,116619],{"className":116617,"code":116618,"language":5218,"meta":30},[5216],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[141,116620,116618],{"__ignoreMap":30},[115,116622,116624],{"id":116623},"action-超过范围","action 超过范围",[14,116626,116627],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[135,116629,116630],{"className":30391,"code":116129,"language":30393,"meta":30,"style":30},[141,116631,116632],{"__ignoreMap":30},[144,116633,116634,116636,116638,116640,116642,116644,116646],{"class":146,"line":147},[144,116635,107455],{"class":154},[144,116637,200],{"class":150},[144,116639,107460],{"class":154},[144,116641,30836],{"class":203},[144,116643,114731],{"class":154},[144,116645,30836],{"class":203},[144,116647,114736],{"class":154},[14,116649,116650,116651,28398],{},"这能避免无效动作直接写入 ",[141,116652,101089],{},[115,116654,116656],{"id":116655},"忘记返回-info","忘记返回 info",[14,116658,116496,116659,101031,116661,116663],{},[141,116660,70069],{},[141,116662,107147],{}," 都会返回 info：",[135,116665,116666],{"className":30391,"code":113406,"language":30393,"meta":30,"style":30},[141,116667,116668,116676],{"__ignoreMap":30},[144,116669,116670,116672,116674],{"class":146,"line":147},[144,116671,113413],{"class":154},[144,116673,200],{"class":150},[144,116675,113418],{"class":154},[144,116677,116678,116680,116682],{"class":146,"line":66},[144,116679,113423],{"class":154},[144,116681,200],{"class":150},[144,116683,113428],{"class":154},[14,116685,116686,116687,28398],{},"即使暂时没有额外信息，也返回 ",[141,116688,32472],{},[18,116690,116692],{"id":116691},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,116694,116695],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[98,116697,116698,116701,116704,116707,116710,116713],{},[101,116699,116700],{},"更稳定的 reward。",[101,116702,116703],{},"合理的 episode 长度。",[101,116705,116706],{},"可重复的随机目标采样。",[101,116708,116709],{},"render 接口。",[101,116711,116712],{},"环境注册代码。",[101,116714,116715],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,116717,116718],{},"如果只是自己写训练循环，最小形式是：",[135,116720,116722],{"className":30391,"code":116721,"language":30393,"meta":30,"style":30},"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",[141,116723,116724,116732,116748,116752,116768,116777,116786,116796],{"__ignoreMap":30},[144,116725,116726,116728,116730],{"class":146,"line":147},[144,116727,116357],{"class":154},[144,116729,200],{"class":150},[144,116731,114955],{"class":154},[144,116733,116734,116736,116738,116740,116742,116744,116746],{"class":146,"line":66},[144,116735,113413],{"class":154},[144,116737,200],{"class":150},[144,116739,114965],{"class":154},[144,116741,114579],{"class":5247},[144,116743,200],{"class":150},[144,116745,346],{"class":203},[144,116747,161],{"class":154},[144,116749,116750],{"class":146,"line":1210},[144,116751,2430],{"emptyLinePlaceholder":72},[144,116753,116754,116756,116758,116760,116762,116764,116766],{"class":146,"line":1225},[144,116755,3055],{"class":150},[144,116757,101514],{"class":154},[144,116759,26056],{"class":150},[144,116761,32456],{"class":203},[144,116763,155],{"class":154},[144,116765,6441],{"class":203},[144,116767,30799],{"class":154},[144,116769,116770,116773,116775],{"class":146,"line":1231},[144,116771,116772],{"class":154},"    action ",[144,116774,200],{"class":150},[144,116776,115034],{"class":154},[144,116778,116779,116782,116784],{"class":146,"line":1245},[144,116780,116781],{"class":154},"    obs, reward, terminated, truncated, info ",[144,116783,200],{"class":150},[144,116785,113428],{"class":154},[144,116787,116788,116790,116792,116794],{"class":146,"line":1251},[144,116789,3131],{"class":150},[144,116791,115100],{"class":154},[144,116793,115103],{"class":150},[144,116795,115106],{"class":154},[144,116797,116798,116801,116803],{"class":146,"line":1342},[144,116799,116800],{"class":154},"        obs, info ",[144,116802,200],{"class":150},[144,116804,113418],{"class":154},[18,116806,116808],{"id":116807},"_9本章小结","9.本章小结",[14,116810,116811],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[135,116813,116816],{"className":116814,"code":116815,"language":5218,"meta":30},[5216],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[141,116817,116815],{"__ignoreMap":30},[14,116819,116820],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5157,116822,116823],{},"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":30,"searchDepth":66,"depth":66,"links":116825},[116826,116827,116828,116835,116839,116840,116841,116851,116852],{"id":100659,"depth":66,"text":100660},{"id":100782,"depth":66,"text":100783},{"id":101057,"depth":66,"text":101058,"children":116829},[116830,116832,116834],{"id":113637,"depth":1210,"text":116831},"terminated 和 truncated 的区别",{"id":113740,"depth":1210,"text":116833},"observation_space 和 action_space",{"id":113867,"depth":1210,"text":113868},{"id":101265,"depth":66,"text":101266,"children":116836},[116837,116838],{"id":101585,"depth":1210,"text":101585},{"id":101721,"depth":1210,"text":101721},{"id":102328,"depth":66,"text":102329},{"id":102360,"depth":66,"text":102361},{"id":102465,"depth":66,"text":102466,"children":116842},[116843,116844,116846,116847,116849,116850],{"id":116492,"depth":1210,"text":116493},{"id":116514,"depth":1210,"text":116845},"data.ctrl[:] = action 维度错误",{"id":116549,"depth":1210,"text":116550},{"id":116573,"depth":1210,"text":116848},"observation_space 维度和 obs 不一致",{"id":116623,"depth":1210,"text":116624},{"id":116655,"depth":1210,"text":116656},{"id":116691,"depth":66,"text":116692},{"id":116807,"depth":66,"text":116808},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113390,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116859,"title":116860,"body":116861,"description":117284,"extension":70,"meta":117285,"navigation":72,"path":117286,"seo":117287,"stem":117288,"__hash__":117289},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116862,"toc":117274},[116863,116867,116870,116873,116893,116899,116905,116915,116918,116921,116941,116944,116948,116951,116957,116960,116974,116977,116980,117054,117057,117063,117066,117089,117092,117142,117145,117151,117154,117157,117160,117179,117182,117188,117191,117194,117197,117217,117220,117223,117226,117271],[10,116864,116866],{"id":116865},"mujoco-学习","MuJoCo 学习",[14,116868,116869],{},"初版",[14,116871,116872],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[98,116874,116875,116878,116881,116890],{},[101,116876,116877],{},"MuJoCo 模型文件在描述什么。",[101,116879,116880],{},"Python 代码怎样读取和推进仿真。",[101,116882,116883,367,116885,367,116887,116889],{},[141,116884,104043],{},[141,116886,104373],{},[141,116888,104376],{}," 这些数组为什么重要。",[101,116891,116892],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,116894,116895,116896,116898],{},"默认环境为 Fedora 44、Python >= 3.10、",[141,116897,101040],{}," 官方 Python bindings。",[14,116900,116901,116902,116904],{},"注意：本文禁止使用 ",[141,116903,101025],{},"。所有示例均使用：",[135,116906,116907],{"className":30391,"code":101591,"language":30393,"meta":30,"style":30},[141,116908,116909],{"__ignoreMap":30},[144,116910,116911,116913],{"class":146,"line":147},[144,116912,30405],{"class":150},[144,116914,101314],{"class":154},[18,116916,116917],{"id":116917},"适合谁阅读",[14,116919,116920],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[98,116922,116923,116926,116929,116932],{},[101,116924,116925],{},"没学过 MuJoCo，只会一点 Python。",[101,116927,116928],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[101,116930,116931],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[101,116933,116934,116935,116937,116938,116940],{},"以前接触过 ",[141,116936,101025],{},"，现在想迁移到官方 ",[141,116939,101034],{}," Python bindings。",[14,116942,116943],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[18,116945,116947],{"id":116946},"mujoco-到底是什么","MuJoCo 到底是什么",[14,116949,116950],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[135,116952,116955],{"className":116953,"code":116954,"language":5218,"meta":30},[5216],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[141,116956,116954],{"__ignoreMap":30},[14,116958,116959],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[98,116961,116962,116965,116968,116971],{},[101,116963,116964],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[101,116966,116967],{},"快速测试控制算法，不必一开始就上真实机器人。",[101,116969,116970],{},"生成强化学习环境。",[101,116972,116973],{},"采集状态、动作、图像、奖励等训练数据。",[18,116975,116976],{"id":116976},"学习前的心智模型",[14,116978,116979],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[292,116981,116982,116994],{},[295,116983,116984],{},[298,116985,116986,116989,116992],{},[301,116987,116988],{"align":23768},"部分",[301,116990,116991],{"align":23768},"负责什么",[301,116993,21218],{"align":23768},[339,116995,116996,117007,117019,117031,117043],{},[298,116997,116998,117001,117004],{},[344,116999,117000],{"align":23768},"MJCF XML",[344,117002,117003],{"align":23768},"定义世界和机器人结构",[344,117005,117006],{"align":23768},"地面、盒子、关节、电机、摄像头",[298,117008,117009,117013,117016],{},[344,117010,117011],{"align":23768},[141,117012,100722],{},[344,117014,117015],{"align":23768},"编译后的静态模型",[344,117017,117018],{"align":23768},"有几个关节、有几个电机、时间步长是多少",[298,117020,117021,117025,117028],{},[344,117022,117023],{"align":23768},[141,117024,100732],{},[344,117026,117027],{"align":23768},"运行中的动态状态",[344,117029,117030],{"align":23768},"当前时间、位置、速度、电机输入",[298,117032,117033,117037,117040],{},[344,117034,117035],{"align":23768},[141,117036,101228],{},[344,117038,117039],{"align":23768},"推进一步物理仿真",[344,117041,117042],{"align":23768},"根据重力、力、碰撞更新状态",[298,117044,117045,117048,117051],{},[344,117046,117047],{"align":23768},"Viewer \u002F Renderer",[344,117049,117050],{"align":23768},"把仿真显示出来",[344,117052,117053],{"align":23768},"打开窗口或保存图片",[14,117055,117056],{},"一句话总结：",[135,117058,117061],{"className":117059,"code":117060,"language":5218,"meta":30},[5216],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[141,117062,117060],{"__ignoreMap":30},[14,117064,117065],{},"参考来源：",[1162,117067,117068,117075,117082],{},[101,117069,117070,117071],{},"MuJoCo Python 官方文档：",[393,117072,117073],{"href":117073,"rel":117074},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23897],[101,117076,117077,117078],{},"MuJoCo XML Reference：",[393,117079,117080],{"href":117080,"rel":117081},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23897],[101,117083,117084,117085],{},"MuJoCo Overview：",[393,117086,117087],{"href":117087,"rel":117088},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23897],[18,117090,117091],{"id":117091},"章节目录",[98,117093,117094,117100,117106,117112,117118,117124,117130,117136],{},[101,117095,117096],{},[393,117097,117099],{"href":117098},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[101,117101,117102],{},[393,117103,117105],{"href":117104},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[101,117107,117108],{},[393,117109,117111],{"href":117110},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[101,117113,117114],{},[393,117115,117117],{"href":117116},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[101,117119,117120],{},[393,117121,117123],{"href":117122},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[101,117125,117126],{},[393,117127,117129],{"href":117128},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[101,117131,117132],{},[393,117133,117135],{"href":117134},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[101,117137,117138],{},[393,117139,117141],{"href":117140},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[18,117143,117144],{"id":117144},"推荐学习路线",[135,117146,117149],{"className":117147,"code":117148,"language":5218,"meta":30},[5216],"环境安装\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",[141,117150,117148],{"__ignoreMap":30},[14,117152,117153],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[18,117155,117156],{"id":117156},"建议的目录结构",[14,117158,117159],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[135,117161,117163],{"className":23854,"code":117162,"language":23856,"meta":30,"style":30},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[141,117164,117165,117173],{"__ignoreMap":30},[144,117166,117167,117169,117171],{"class":146,"line":147},[144,117168,101279],{"class":1993},[144,117170,29229],{"class":203},[144,117172,101284],{"class":259},[144,117174,117175,117177],{"class":146,"line":66},[144,117176,101289],{"class":203},[144,117178,101284],{"class":259},[14,117180,117181],{},"每一章的代码都单独保存：",[135,117183,117186],{"className":117184,"code":117185,"language":5218,"meta":30},[5216],"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",[141,117187,117185],{"__ignoreMap":30},[14,117189,117190],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[18,117192,117193],{"id":117193},"学习方法",[14,117195,117196],{},"每章建议按这个顺序操作：",[98,117198,117199,117202,117205,117208,117211,117214],{},[101,117200,117201],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[101,117203,117204],{},"复制最小可运行代码，保存成指定文件。",[101,117206,117207],{},"运行代码，确认没有报错。",[101,117209,117210],{},"对照“运行结果说明”理解输出。",[101,117212,117213],{},"做“验证步骤”，主动改一两个参数。",[101,117215,117216],{},"遇到报错先看“常见错误与解决方案”。",[14,117218,117219],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[18,117221,117222],{"id":117222},"全局排错顺序",[14,117224,117225],{},"遇到问题时，按下面顺序查：",[98,117227,117228,117234,117240,117245,117248,117251,117258,117268],{},[101,117229,117230,117231],{},"Python 环境是否激活：",[141,117232,117233],{},"which python",[101,117235,117236,117237],{},"MuJoCo 是否能导入：",[141,117238,117239],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[101,117241,117242,117243],{},"是否误装了 ",[141,117244,101025],{},[101,117246,117247],{},"XML 标签是否闭合、属性是否拼写正确",[101,117249,117250],{},"actuator 引用的 joint 名字是否存在",[101,117252,117253,117255,117256],{},[141,117254,101089],{}," 的长度是否等于 ",[141,117257,102171],{},[101,117259,105598,117260,82552,117262,117264,117265],{},[141,117261,104043],{},[141,117263,104373],{}," 后是否调用了 ",[141,117266,117267],{},"mujoco.mj_forward",[101,117269,117270],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5157,117272,117273],{},"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":30,"searchDepth":66,"depth":66,"links":117275},[117276,117277,117278,117279,117280,117281,117282,117283],{"id":116917,"depth":66,"text":116917},{"id":116946,"depth":66,"text":116947},{"id":116976,"depth":66,"text":116976},{"id":117091,"depth":66,"text":117091},{"id":117144,"depth":66,"text":117144},{"id":117156,"depth":66,"text":117156},{"id":117193,"depth":66,"text":117193},{"id":117222,"depth":66,"text":117222},"仿真搭建。",{"category":23410},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116860,"description":117284},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117291,"title":117292,"body":117293,"description":23408,"extension":70,"meta":117748,"navigation":72,"path":117749,"seo":117750,"stem":117751,"__hash__":117752},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117294,"toc":117746},[117295,117298,117301,117307,117743],[10,117296,117292],{"id":117297},"_1-最常用的基本操作更新",[14,117299,117300],{},"装linux系统教程：",[14,117302,117303],{},[393,117304,117305],{"href":117305,"rel":117306},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23897],[135,117308,117312],{"className":117309,"code":117310,"language":117311,"meta":30,"style":30},"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",[141,117313,117314,117319,117324,117333,117338,117347,117352,117372,117377,117388,117393,117402,117407,117435,117440,117459,117464,117483,117487,117492,117508,117512,117517,117547,117551,117556,117572,117576,117581,117596,117600,117605,117621,117625,117630,117642,117654,117658,117663,117680,117684,117689,117707,117711,117716,117725,117729,117734],{"__ignoreMap":30},[144,117315,117316],{"class":146,"line":147},[144,117317,117318],{"class":213},"#更新相关的知识\n",[144,117320,117321],{"class":146,"line":66},[144,117322,117323],{"class":213},"# 更新软件包列表（从服务器获取最新软件信息）\n",[144,117325,117326,117328,117331],{"class":146,"line":1210},[144,117327,24589],{"class":1993},[144,117329,117330],{"class":259}," apt",[144,117332,26255],{"class":259},[144,117334,117335],{"class":146,"line":1225},[144,117336,117337],{"class":213},"# 升级所有可更新的软件包（不删除旧包）\n",[144,117339,117340,117342,117344],{"class":146,"line":1231},[144,117341,24589],{"class":1993},[144,117343,117330],{"class":259},[144,117345,117346],{"class":259}," upgrade\n",[144,117348,117349],{"class":146,"line":1245},[144,117350,117351],{"class":213},"#更新和升级软件包\n",[144,117353,117354,117356,117358,117361,117363,117365,117367,117370],{"class":146,"line":1251},[144,117355,24589],{"class":1993},[144,117357,117330],{"class":259},[144,117359,117360],{"class":259}," update",[144,117362,26203],{"class":154},[144,117364,24589],{"class":1993},[144,117366,117330],{"class":259},[144,117368,117369],{"class":259}," upgrade",[144,117371,100994],{"class":203},[144,117373,117374],{"class":146,"line":1342},[144,117375,117376],{"class":213},"#列出可更新的软件包及版本信息\n",[144,117378,117379,117382,117385],{"class":146,"line":1348},[144,117380,117381],{"class":1993},"apt",[144,117383,117384],{"class":259}," list",[144,117386,117387],{"class":203}," --upgradable\n",[144,117389,117390],{"class":146,"line":1360},[144,117391,117392],{"class":213},"#彻底升级（处理依赖关系，可能删除旧包）\n",[144,117394,117395,117397,117399],{"class":146,"line":1642},[144,117396,24589],{"class":1993},[144,117398,117330],{"class":259},[144,117400,117401],{"class":259}," full-upgrade\n",[144,117403,117404],{"class":146,"line":1647},[144,117405,117406],{"class":213},"#设置指定版本\n",[144,117408,117409,117411,117413,117415,117417,117420,117422,117424,117426,117428,117431,117433],{"class":146,"line":1653},[144,117410,24589],{"class":1993},[144,117412,117330],{"class":259},[144,117414,23866],{"class":259},[144,117416,28915],{"class":150},[144,117418,117419],{"class":259},"package_nam",[144,117421,229],{"class":154},[144,117423,1115],{"class":150},[144,117425,200],{"class":259},[144,117427,1065],{"class":150},[144,117429,117430],{"class":259},"version_numbe",[144,117432,825],{"class":154},[144,117434,51320],{"class":150},[144,117436,117437],{"class":146,"line":1658},[144,117438,117439],{"class":213},"#只安装软件包不升级\n",[144,117441,117442,117444,117446,117448,117450,117452,117454,117456],{"class":146,"line":1672},[144,117443,24589],{"class":1993},[144,117445,117330],{"class":259},[144,117447,23866],{"class":259},[144,117449,28915],{"class":150},[144,117451,117419],{"class":259},[144,117453,229],{"class":154},[144,117455,1115],{"class":150},[144,117457,117458],{"class":203}," --no-upgrade\n",[144,117460,117461],{"class":146,"line":1677},[144,117462,117463],{"class":213},"#只升级，不存在就不安装\n",[144,117465,117466,117468,117470,117472,117474,117476,117478,117480],{"class":146,"line":1683},[144,117467,24589],{"class":1993},[144,117469,117330],{"class":259},[144,117471,23866],{"class":259},[144,117473,28915],{"class":150},[144,117475,117419],{"class":259},[144,117477,229],{"class":154},[144,117479,1115],{"class":150},[144,117481,117482],{"class":203}," --only-upgrade\n",[144,117484,117485],{"class":146,"line":1704},[144,117486,2430],{"emptyLinePlaceholder":72},[144,117488,117489],{"class":146,"line":1709},[144,117490,117491],{"class":213},"#安装指定的软件命令\n",[144,117493,117494,117496,117498,117500,117502,117504,117506],{"class":146,"line":1723},[144,117495,24589],{"class":1993},[144,117497,117330],{"class":259},[144,117499,23866],{"class":259},[144,117501,28915],{"class":150},[144,117503,117419],{"class":259},[144,117505,229],{"class":154},[144,117507,51320],{"class":150},[144,117509,117510],{"class":146,"line":1728},[144,117511,2430],{"emptyLinePlaceholder":72},[144,117513,117514],{"class":146,"line":1757},[144,117515,117516],{"class":213},"#安装多个软件包\n",[144,117518,117519,117521,117523,117525,117527,117530,117533,117535,117537,117540,117542,117544],{"class":146,"line":1762},[144,117520,24589],{"class":1993},[144,117522,117330],{"class":259},[144,117524,23866],{"class":259},[144,117526,28915],{"class":150},[144,117528,117529],{"class":259},"package_",[144,117531,117532],{"class":150},"1>",[144,117534,28915],{"class":150},[144,117536,117529],{"class":259},[144,117538,117539],{"class":150},"2>",[144,117541,28915],{"class":150},[144,117543,117529],{"class":259},[144,117545,117546],{"class":150},"3>\n",[144,117548,117549],{"class":146,"line":1779},[144,117550,2430],{"emptyLinePlaceholder":72},[144,117552,117553],{"class":146,"line":1784},[144,117554,117555],{"class":213},"#更新指定的软件命令\n",[144,117557,117558,117560,117562,117564,117566,117568,117570],{"class":146,"line":1789},[144,117559,24589],{"class":1993},[144,117561,117330],{"class":259},[144,117563,117360],{"class":259},[144,117565,28915],{"class":150},[144,117567,117419],{"class":259},[144,117569,229],{"class":154},[144,117571,51320],{"class":150},[144,117573,117574],{"class":146,"line":1794},[144,117575,2430],{"emptyLinePlaceholder":72},[144,117577,117578],{"class":146,"line":1808},[144,117579,117580],{"class":213},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[144,117582,117583,117585,117588,117590,117592,117594],{"class":146,"line":1813},[144,117584,117381],{"class":1993},[144,117586,117587],{"class":259}," show",[144,117589,28915],{"class":150},[144,117591,117419],{"class":259},[144,117593,229],{"class":154},[144,117595,51320],{"class":150},[144,117597,117598],{"class":146,"line":2607},[144,117599,2430],{"emptyLinePlaceholder":72},[144,117601,117602],{"class":146,"line":2621},[144,117603,117604],{"class":213},"#删除软件包命令\n",[144,117606,117607,117609,117611,117613,117615,117617,117619],{"class":146,"line":2629},[144,117608,24589],{"class":1993},[144,117610,117330],{"class":259},[144,117612,26092],{"class":259},[144,117614,28915],{"class":150},[144,117616,117419],{"class":259},[144,117618,229],{"class":154},[144,117620,51320],{"class":150},[144,117622,117623],{"class":146,"line":2634},[144,117624,2430],{"emptyLinePlaceholder":72},[144,117626,117627],{"class":146,"line":2640},[144,117628,117629],{"class":213},"# 清理旧版本和缓存（释放磁盘空间）\n",[144,117631,117632,117634,117636,117639],{"class":146,"line":2646},[144,117633,24589],{"class":1993},[144,117635,117330],{"class":259},[144,117637,117638],{"class":259}," autoremove",[144,117640,117641],{"class":213},"  # 删除不再需要的依赖和库文件\n",[144,117643,117644,117646,117648,117651],{"class":146,"line":2651},[144,117645,24589],{"class":1993},[144,117647,117330],{"class":259},[144,117649,117650],{"class":259}," clean",[144,117652,117653],{"class":213},"       # 清理下载的缓存包\n",[144,117655,117656],{"class":146,"line":7979},[144,117657,2430],{"emptyLinePlaceholder":72},[144,117659,117660],{"class":146,"line":8003},[144,117661,117662],{"class":213},"#移除软件包及配置文件\n",[144,117664,117665,117667,117669,117672,117674,117676,117678],{"class":146,"line":8008},[144,117666,24589],{"class":1993},[144,117668,117330],{"class":259},[144,117670,117671],{"class":259}," purge",[144,117673,28915],{"class":150},[144,117675,117419],{"class":259},[144,117677,229],{"class":154},[144,117679,51320],{"class":150},[144,117681,117682],{"class":146,"line":8014},[144,117683,2430],{"emptyLinePlaceholder":72},[144,117685,117686],{"class":146,"line":8041},[144,117687,117688],{"class":213},"#查找软件包命令\n",[144,117690,117691,117693,117695,117698,117700,117703,117705],{"class":146,"line":8046},[144,117692,24589],{"class":1993},[144,117694,117330],{"class":259},[144,117696,117697],{"class":259}," search",[144,117699,28915],{"class":150},[144,117701,117702],{"class":259},"keywor",[144,117704,469],{"class":154},[144,117706,51320],{"class":150},[144,117708,117709],{"class":146,"line":8052},[144,117710,2430],{"emptyLinePlaceholder":72},[144,117712,117713],{"class":146,"line":8064},[144,117714,117715],{"class":213},"#列出所有已安装的包\n",[144,117717,117718,117720,117722],{"class":146,"line":8076},[144,117719,117381],{"class":1993},[144,117721,117384],{"class":259},[144,117723,117724],{"class":203}," --installed\n",[144,117726,117727],{"class":146,"line":8088},[144,117728,2430],{"emptyLinePlaceholder":72},[144,117730,117731],{"class":146,"line":9747},[144,117732,117733],{"class":213},"#列出所有已安装的包的版本信息\n",[144,117735,117736,117738,117740],{"class":146,"line":9772},[144,117737,117381],{"class":1993},[144,117739,117384],{"class":259},[144,117741,117742],{"class":203}," --all-versions\n",[5157,117744,117745],{},"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":30,"searchDepth":66,"depth":66,"links":117747},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117292,"description":23408},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117754,"title":117755,"body":117756,"description":23408,"extension":70,"meta":118497,"navigation":72,"path":118498,"seo":118499,"stem":118500,"__hash__":118501},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117757,"toc":118484},[117758,117761,117765,117768,117774,117778,117782,117788,117793,117798,117803,117808,117813,117816,117819,117822,117825,117829,117832,117837,117840,117845,117848,117853,117860,117863,117866,117869,117872,117875,117886,117890,117894,117899,117904,117908,117913,117917,117922,117926,117930,117935,117938,117983,117988,117992,117996,118001,118007,118012,118022,118027,118037,118042,118047,118074,118078,118081,118086,118089,118114,118118,118123,118126,118131,118136,118156,118161,118164,118179,118183,118236,118239,118244,118248,118251,118266,118269,118272,118277,118281,118285,118288,118292,118296,118299,118304,118309,118313,118320,118328,118331,118338,118343,118348,118351,118356,118363,118368,118375,118379,118381,118386,118390,118393,118396,118401,118404,118409,118412,118417,118422,118427,118431,118436,118440,118481],[10,117759,117755],{"id":117760},"_2-linux装机教程",[18,117762,117764],{"id":117763},"_21-实体机","2.1 实体机",[14,117766,117767],{},"使用清华源：（Ubuntu24.04）",[14,117769,117770],{},[393,117771,117772],{"href":117772,"rel":117773},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23897],[18,117775,117777],{"id":117776},"_22-普通虚拟机","2.2 普通虚拟机",[115,117779,117781],{"id":117780},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,117783,117784],{},[393,117785,117786],{"href":117786,"rel":117787},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23897],[14,117789,117790],{},[28,117791],{"alt":30,"src":117792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,117794,117795],{},[28,117796],{"alt":30,"src":117797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,117799,117800],{},[28,117801],{"alt":30,"src":117802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,117804,117805],{},[28,117806],{"alt":30,"src":117807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,117809,117810],{},[28,117811],{"alt":30,"src":117812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,117814,117815],{},"内存4G（4096MB）；",[14,117817,117818],{},"CPU给4个核；",[14,117820,117821],{},"硬盘动态分配60G；",[14,117823,117824],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[115,117826,117828],{"id":117827},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,117830,117831],{},"按照1.1的步骤下载Ubuntu",[14,117833,117834],{},[28,117835],{"alt":30,"src":117836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,117838,117839],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,117841,117842],{},[28,117843],{"alt":30,"src":117844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,117846,117847],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,117849,117850],{},[28,117851],{"alt":30,"src":117852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,117854,117855,117856,117859],{},"选择“正常安装”(找不到都用Alt+F7)， ",[304,117857,117858],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,117861,117862],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,117864,117865],{},"将改动写入磁盘吗 继续",[14,117867,117868],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,117870,117871],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,117873,117874],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,117876,117877,117878,117881,117882,117885],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[304,117879,117880],{},"除了"," 选不发送系统信息与不升级之外， ",[304,117883,117884],{},"其它"," 都跳过或前进）",[115,117887,117889],{"id":117888},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22029,117891,117893],{"id":117892},"_2231-全屏","2.2.3.1 全屏",[14,117895,117896],{},[28,117897],{"alt":30,"src":117898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,117900,117901],{},[28,117902],{"alt":30,"src":117903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22029,117905,117907],{"id":117906},"_2232-文件交换","2.2.3.2 文件交换",[14,117909,117910],{},[28,117911],{"alt":30,"src":117912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22029,117914,117916],{"id":117915},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,117918,117919],{},[28,117920],{"alt":30,"src":117921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[18,117923,117925],{"id":117924},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[115,117927,117929],{"id":117928},"_231-简介与优缺点","2.3.1 简介与优缺点",[98,117931,117932],{},[101,117933,117934],{},"什么情况下推荐？",[14,117936,117937],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[98,117939,117940],{"start":66},[101,117941,117942,117943],{},"优缺点：",[98,117944,117945,117975],{},[101,117946,117947,117948],{},"优点：",[98,117949,117950,117953,117960,117963,117966,117969,117972],{},[101,117951,117952],{},"WSL2是最好的Linux发行版;(bushi)",[101,117954,117955,117956,117959],{},"性能损耗极低。且比在Windows上跑深度性能 ",[304,117957,117958],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[101,117961,117962],{},"非常方便调用USB设备，可以USB直通;",[101,117964,117965],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[101,117967,117968],{},"非常方便Win与WSL2互相传文件等协同操作;",[101,117970,117971],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[101,117973,117974],{},"非常方便使用Windows的VScode远程开发;",[101,117976,117977,117978],{},"缺点：",[98,117979,117980],{},[101,117981,117982],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,117984,117985],{},[28,117986],{"alt":30,"src":117987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[115,117989,117991],{"id":117990},"_232-安装教程","2.3.2 安装教程",[22029,117993,117995],{"id":117994},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[98,117997,117998],{},[101,117999,118000],{},"方法一(图形界面)",[14,118002,118003,118004,24631],{},"用Win+R输入",[141,118005,118006],{},"appwiz.cpl",[14,118008,118009],{},[28,118010],{"alt":30,"src":118011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,118013,118014,118015,118018,118019,26486],{},"点击OK进入 ",[304,118016,118017],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[304,118020,118021],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,118023,118024],{},[28,118025],{"alt":30,"src":118026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,118028,118029,118030,101031,118033,118036],{},"选择 ",[304,118031,118032],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[304,118034,118035],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118038,118039],{},[28,118040],{"alt":30,"src":118041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[98,118043,118044],{"start":66},[101,118045,118046],{},"方法二(命令行)",[135,118048,118052],{"className":118049,"code":118050,"language":118051,"meta":30,"style":30},"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",[141,118053,118054,118059,118064,118069],{"__ignoreMap":30},[144,118055,118056],{"class":146,"line":147},[144,118057,118058],{},"# 开启 Linux 子系统\n",[144,118060,118061],{"class":146,"line":66},[144,118062,118063],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[144,118065,118066],{"class":146,"line":1210},[144,118067,118068],{},"# 开启虚拟机平台\n",[144,118070,118071],{"class":146,"line":1225},[144,118072,118073],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22029,118075,118077],{"id":118076},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118079,118080],{},"用管理员权限打开powershell",[14,118082,118083],{},[28,118084],{"alt":30,"src":118085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118087,118088],{},"升级WSL并设置默认版本为WSL2",[135,118090,118092],{"className":118049,"code":118091,"language":118051,"meta":30,"style":30},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[141,118093,118094,118099,118104,118109],{"__ignoreMap":30},[144,118095,118096],{"class":146,"line":147},[144,118097,118098],{},"# 更新 wsl\n",[144,118100,118101],{"class":146,"line":66},[144,118102,118103],{},"wsl --update\n",[144,118105,118106],{"class":146,"line":1210},[144,118107,118108],{},"# 将 wsl 版本设置为 wsl2\n",[144,118110,118111],{"class":146,"line":1225},[144,118112,118113],{},"wsl --set-default-version 2\n",[22029,118115,118117],{"id":118116},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[98,118119,118120],{},[101,118121,118122],{},"方式一(商店下载)",[14,118124,118125],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118127,118128],{},[28,118129],{"alt":30,"src":118130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[98,118132,118133],{"start":66},[101,118134,118135],{},"方式二(命令行安装)",[135,118137,118139],{"className":118049,"code":118138,"language":118051,"meta":30,"style":30},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[141,118140,118141,118146,118151],{"__ignoreMap":30},[144,118142,118143],{"class":146,"line":147},[144,118144,118145],{},"# 列出可安装的 Linux 版本\n",[144,118147,118148],{"class":146,"line":66},[144,118149,118150],{},"#（需要科学手段）\n",[144,118152,118153],{"class":146,"line":1210},[144,118154,118155],{},"wsl --list --online\n",[14,118157,118158],{},[28,118159],{"alt":30,"src":118160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118162,118163],{},"选择对应发行版并安装",[135,118165,118167],{"className":118049,"code":118166,"language":118051,"meta":30,"style":30},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[141,118168,118169,118174],{"__ignoreMap":30},[144,118170,118171],{"class":146,"line":147},[144,118172,118173],{},"# Ubuntu安装完毕后需要重启系统\n",[144,118175,118176],{"class":146,"line":66},[144,118177,118178],{},"wsl --install -d Ubuntu-24.04\n",[22029,118180,118182],{"id":118181},"_2324-查看系统状态","2.3.2.4 查看系统状态",[135,118184,118186],{"className":118049,"code":118185,"language":118051,"meta":30,"style":30},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[141,118187,118188,118193,118198,118203,118208,118212,118216,118221,118226,118231],{"__ignoreMap":30},[144,118189,118190],{"class":146,"line":147},[144,118191,118192],{},"# 查看 wsl\n",[144,118194,118195],{"class":146,"line":66},[144,118196,118197],{},"wsl -l\n",[144,118199,118200],{"class":146,"line":1210},[144,118201,118202],{},"# 查看 wsl 运行版本或模式\n",[144,118204,118205],{"class":146,"line":1225},[144,118206,118207],{},"wsl -l -v\n",[144,118209,118210],{"class":146,"line":1231},[144,118211,2430],{"emptyLinePlaceholder":72},[144,118213,118214],{"class":146,"line":1245},[144,118215,2430],{"emptyLinePlaceholder":72},[144,118217,118218],{"class":146,"line":1251},[144,118219,118220],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[144,118222,118223],{"class":146,"line":1342},[144,118224,118225],{},"wsl --set-version \u003Cdistro> 2\n",[144,118227,118228],{"class":146,"line":1348},[144,118229,118230],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[144,118232,118233],{"class":146,"line":1360},[144,118234,118235],{},"wsl --unregister \u003Cdistro>\n",[14,118237,118238],{},"输出Version为2即正常",[14,118240,118241],{},[28,118242],{"alt":30,"src":118243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22029,118245,118247],{"id":118246},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118249,118250],{},"直接在Powershell里输入wsl命令进入子系统",[135,118252,118254],{"className":118049,"code":118253,"language":118051,"meta":30,"style":30},"# 进入子系统\nwsl\n",[141,118255,118256,118261],{"__ignoreMap":30},[144,118257,118258],{"class":146,"line":147},[144,118259,118260],{},"# 进入子系统\n",[144,118262,118263],{"class":146,"line":66},[144,118264,118265],{},"wsl\n",[14,118267,118268],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118270,118271],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118273,118274],{},[28,118275],{"alt":30,"src":118276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[115,118278,118280],{"id":118279},"_233-配置各种环境","2.3.3 配置各种环境",[22029,118282,118284],{"id":118283},"_2331-换源","2.3.3.1 换源",[14,118286,118287],{},"(同实体机LINUX，往下找教程)",[22029,118289,118291],{"id":118290},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22941,118293,118295],{"id":118294},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118297,118298],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118300,118301],{},[28,118302],{"alt":30,"src":118303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118305,118306],{},[28,118307],{"alt":30,"src":118308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[22941,118310,118312],{"id":118311},"_23322-cuda","2.3.3.2.2 CUDA",[14,118314,118315,118316],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[393,118317,118318],{"href":118318,"rel":118319},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23897],[14,118321,118322,118325],{},[28,118323],{"alt":30,"src":118324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[28,118326],{"alt":30,"src":118327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118329,118330],{},"在下方的网站，选择合适的版本。",[14,118332,118333,118334],{},"WSL2 专属 CUDA 指南：",[393,118335,118336],{"href":118336,"rel":118337},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23897],[14,118339,118340],{},[304,118341,118342],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118344,118345],{},[28,118346],{"alt":30,"src":118347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118349,118350],{},"挨行敲一遍",[14,118352,118353],{},[28,118354],{"alt":30,"src":118355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118357,118358,118359,118362],{},"敲完后，输入",[141,118360,118361],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118364,118365],{},[28,118366],{"alt":30,"src":118367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118369,118370,118371,118374],{},"（请详看下方教程的",[304,118372,118373],{},"安装CUDA的配置环境来看","如何配置环境）",[22941,118376,118378],{"id":118377},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118380,118287],{},[14,118382,118383],{},[28,118384],{"alt":30,"src":118385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22029,118387,118389],{"id":118388},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,118391,118392],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,118394,118395],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,118397,118398],{},[28,118399],{"alt":30,"src":118400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,118402,118403],{},"连接WSL2",[14,118405,118406],{},[28,118407],{"alt":30,"src":118408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,118410,118411],{},"远程开发成功。",[14,118413,118414],{},[28,118415],{"alt":30,"src":118416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,118418,118419],{},[28,118420],{"alt":30,"src":118421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,118423,118424],{},[28,118425],{"alt":30,"src":118426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22029,118428,118430],{"id":118429},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,118432,118433],{},[28,118434],{"alt":30,"src":118435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22029,118437,118439],{"id":118438},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[135,118441,118443],{"className":117309,"code":118442,"language":117311,"meta":30,"style":30},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[141,118444,118445,118453,118461,118472,118476],{"__ignoreMap":30},[144,118446,118447,118449,118451],{"class":146,"line":147},[144,118448,24589],{"class":1993},[144,118450,117330],{"class":259},[144,118452,26255],{"class":259},[144,118454,118455,118457,118459],{"class":146,"line":66},[144,118456,24589],{"class":1993},[144,118458,117330],{"class":259},[144,118460,117346],{"class":259},[144,118462,118463,118465,118467,118469],{"class":146,"line":1210},[144,118464,24589],{"class":1993},[144,118466,117330],{"class":259},[144,118468,23866],{"class":259},[144,118470,118471],{"class":259}," mesa-utils\n",[144,118473,118474],{"class":146,"line":1225},[144,118475,2430],{"emptyLinePlaceholder":72},[144,118477,118478],{"class":146,"line":1231},[144,118479,118480],{"class":213},"#然后重启wsl2即可\n",[5157,118482,118483],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":30,"searchDepth":66,"depth":66,"links":118485},[118486,118487,118492],{"id":117763,"depth":66,"text":117764},{"id":117776,"depth":66,"text":117777,"children":118488},[118489,118490,118491],{"id":117780,"depth":1210,"text":117781},{"id":117827,"depth":1210,"text":117828},{"id":117888,"depth":1210,"text":117889},{"id":117924,"depth":66,"text":117925,"children":118493},[118494,118495,118496],{"id":117928,"depth":1210,"text":117929},{"id":117990,"depth":1210,"text":117991},{"id":118279,"depth":1210,"text":118280},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117755,"description":23408},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118503,"title":118504,"body":118505,"description":23408,"extension":70,"meta":121441,"navigation":72,"path":121442,"seo":121443,"stem":121444,"__hash__":121445},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118506,"toc":121413},[118507,118510,118514,118520,118524,118530,118534,118722,118725,118730,118734,118738,118741,118744,118750,118755,118758,118761,118766,118799,118804,118808,118885,118888,118893,118897,118900,118939,118942,118951,118969,118974,118981,119098,119103,119106,119133,119138,119142,119151,119201,119208,119212,119215,119229,119236,119270,119275,119279,119302,119305,119310,119314,119317,119320,119323,119365,119369,119372,119375,119416,119420,119424,119427,119432,119437,119440,119463,119466,119474,119479,119482,119487,119492,119495,119500,119504,119509,119532,119537,119599,119607,119612,119617,119620,119625,119628,119633,119638,119656,119661,119667,119672,119686,119690,119693,119696,119699,119742,119745,119750,119851,119854,119859,119863,119867,119904,119908,119912,119916,119962,119966,120011,120015,120022,120030,120085,120088,120165,120168,120191,120195,120198,120203,120208,120216,120219,120224,120229,120234,120237,120242,120251,120254,120259,120262,120333,120338,120341,120346,120349,120354,120357,120362,120365,120370,120375,120378,120453,120456,120469,120474,120477,120491,120494,120523,120528,120557,120560,120565,120569,120574,120583,120586,120591,120594,120599,120602,120605,120610,120613,120618,120623,120626,120631,120634,120759,120764,120794,120797,120802,120807,120824,120827,120870,120873,120900,120905,120918,121061,121065,121070,121084,121087,121138,121141,121171,121174,121190,121195,121209,121212,121279,121284,121293,121298,121301,121313,121318,121325,121349,121352,121357,121360,121379,121384,121391,121403,121410],[10,118508,118504],{"id":118509},"_3-安装必备配置",[18,118511,118513],{"id":118512},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[135,118515,118518],{"className":118516,"code":118517,"language":5218},[5216],"  打开下方网站（注意，该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",[141,118519,118517],{"__ignoreMap":30},[115,118521,118523],{"id":118522},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[135,118525,118528],{"className":118526,"code":118527,"language":5218},[5216],"  输入以下命令\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",[141,118529,118527],{"__ignoreMap":30},[115,118531,118533],{"id":118532},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[135,118535,118539],{"className":118536,"code":118537,"language":118538,"meta":30,"style":30},"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",[141,118540,118541,118549,118560,118572,118586,118590,118600,118605,118609,118613,118618,118622,118634,118638,118643,118647,118658,118662,118678,118682,118693,118697,118702,118706,118714],{"__ignoreMap":30},[144,118542,118543,118545,118547],{"class":146,"line":147},[144,118544,24589],{"class":1993},[144,118546,117330],{"class":259},[144,118548,26255],{"class":259},[144,118550,118551,118553,118555,118557],{"class":146,"line":66},[144,118552,24589],{"class":1993},[144,118554,117330],{"class":259},[144,118556,23866],{"class":259},[144,118558,118559],{"class":259}," vim\n",[144,118561,118562,118564,118567,118569],{"class":146,"line":1210},[144,118563,24589],{"class":1993},[144,118565,118566],{"class":259}," rm",[144,118568,25338],{"class":203},[144,118570,118571],{"class":259}," \u002Fetc\u002Fapt\u002Fsources.list\n",[144,118573,118574,118576,118578,118580,118583],{"class":146,"line":1225},[144,118575,24589],{"class":1993},[144,118577,118566],{"class":259},[144,118579,25338],{"class":203},[144,118581,118582],{"class":259}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[144,118584,118585],{"class":203},"**\n",[144,118587,118588],{"class":146,"line":1231},[144,118589,2430],{"emptyLinePlaceholder":72},[144,118591,118592,118594,118597],{"class":146,"line":1245},[144,118593,24589],{"class":1993},[144,118595,118596],{"class":259}," vim",[144,118598,118599],{"class":259}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[144,118601,118602],{"class":146,"line":1251},[144,118603,118604],{"class":259},"```\n",[144,118606,118607],{"class":146,"line":1342},[144,118608,2430],{"emptyLinePlaceholder":72},[144,118610,118611],{"class":146,"line":1348},[144,118612,2430],{"emptyLinePlaceholder":72},[144,118614,118615],{"class":146,"line":1360},[144,118616,118617],{"class":1993},"选择好Ubuntu版本后，复制下方的内容。\n",[144,118619,118620],{"class":146,"line":1642},[144,118621,2430],{"emptyLinePlaceholder":72},[144,118623,118624,118626,118629,118632],{"class":146,"line":1647},[144,118625,381],{"class":150},[144,118627,118628],{"class":259},"[](",[144,118630,118631],{"class":1993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[144,118633,161],{"class":259},[144,118635,118636],{"class":146,"line":1653},[144,118637,2430],{"emptyLinePlaceholder":72},[144,118639,118640],{"class":146,"line":1658},[144,118641,118642],{"class":1993},"粘贴进去\n",[144,118644,118645],{"class":146,"line":1672},[144,118646,2430],{"emptyLinePlaceholder":72},[144,118648,118649,118651,118653,118656],{"class":146,"line":1677},[144,118650,381],{"class":150},[144,118652,118628],{"class":259},[144,118654,118655],{"class":1993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[144,118657,161],{"class":259},[144,118659,118660],{"class":146,"line":1683},[144,118661,2430],{"emptyLinePlaceholder":72},[144,118663,118664,118667,118670,118673,118675],{"class":146,"line":1704},[144,118665,118666],{"class":1993},"按一下ESC，然后英文冒号，输入",[144,118668,118669],{"class":259}," `",[144,118671,118672],{"class":1993},":wq!",[144,118674,1127],{"class":259},[144,118676,118677],{"class":1993},"然后回车\n",[144,118679,118680],{"class":146,"line":1709},[144,118681,2430],{"emptyLinePlaceholder":72},[144,118683,118684,118686,118688,118691],{"class":146,"line":1723},[144,118685,381],{"class":150},[144,118687,118628],{"class":259},[144,118689,118690],{"class":1993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[144,118692,161],{"class":259},[144,118694,118695],{"class":146,"line":1728},[144,118696,2430],{"emptyLinePlaceholder":72},[144,118698,118699],{"class":146,"line":1757},[144,118700,118701],{"class":1993},"输入以下命令\n",[144,118703,118704],{"class":146,"line":1762},[144,118705,2430],{"emptyLinePlaceholder":72},[144,118707,118708,118711],{"class":146,"line":1779},[144,118709,118710],{"class":259},"```",[144,118712,118713],{"class":1993},"Bash\n",[144,118715,118716,118718,118720],{"class":146,"line":1784},[144,118717,24589],{"class":1993},[144,118719,117330],{"class":259},[144,118721,26255],{"class":259},[14,118723,118724],{},"这里被替换成对应学校则成功",[14,118726,118727],{},[28,118728],{"alt":30,"src":118729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[18,118731,118733],{"id":118732},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[115,118735,118737],{"id":118736},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,118739,118740],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,118742,118743],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,118745,118746],{},[393,118747,118748],{"href":118748,"rel":118749},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23897],[14,118751,118752],{},[28,118753],{"alt":30,"src":118754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,118756,118757],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,118759,118760],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,118762,118763],{},[28,118764],{"alt":30,"src":118765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[135,118767,118769],{"className":117309,"code":118768,"language":117311,"meta":30,"style":30},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[141,118770,118771,118776,118783,118788],{"__ignoreMap":30},[144,118772,118773],{"class":146,"line":147},[144,118774,118775],{"class":213},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[144,118777,118778,118780],{"class":146,"line":66},[144,118779,101289],{"class":203},[144,118781,118782],{"class":259}," ~\u002FDownloads\n",[144,118784,118785],{"class":146,"line":1210},[144,118786,118787],{"class":213},"#下方chrome安装包名不一定是这个，根据名字来看\n",[144,118789,118790,118792,118794,118796],{"class":146,"line":1225},[144,118791,24589],{"class":1993},[144,118793,117330],{"class":259},[144,118795,23866],{"class":259},[144,118797,118798],{"class":259}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,118800,118801],{},[28,118802],{"alt":30,"src":118803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[115,118805,118807],{"id":118806},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[135,118809,118811],{"className":117309,"code":118810,"language":117311,"meta":30,"style":30},"# 老版\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",[141,118812,118813,118818,118826,118837,118842,118846,118851,118861,118869,118880],{"__ignoreMap":30},[144,118814,118815],{"class":146,"line":147},[144,118816,118817],{"class":213},"# 老版\n",[144,118819,118820,118822,118824],{"class":146,"line":66},[144,118821,24589],{"class":1993},[144,118823,117330],{"class":259},[144,118825,26255],{"class":259},[144,118827,118828,118830,118832,118834],{"class":146,"line":1210},[144,118829,24589],{"class":1993},[144,118831,117330],{"class":259},[144,118833,23866],{"class":259},[144,118835,118836],{"class":259}," neofetch\n",[144,118838,118839],{"class":146,"line":1225},[144,118840,118841],{"class":1993},"neofetch\n",[144,118843,118844],{"class":146,"line":1231},[144,118845,2430],{"emptyLinePlaceholder":72},[144,118847,118848],{"class":146,"line":1245},[144,118849,118850],{"class":213},"# 新版\n",[144,118852,118853,118855,118858],{"class":146,"line":1251},[144,118854,24589],{"class":1993},[144,118856,118857],{"class":259}," add-apt-repository",[144,118859,118860],{"class":259}," ppa:zhangsongcui3371\u002Ffastfetch\n",[144,118862,118863,118865,118867],{"class":146,"line":1342},[144,118864,24589],{"class":1993},[144,118866,117330],{"class":259},[144,118868,26255],{"class":259},[144,118870,118871,118873,118875,118877],{"class":146,"line":1348},[144,118872,24589],{"class":1993},[144,118874,117330],{"class":259},[144,118876,23866],{"class":259},[144,118878,118879],{"class":259}," fastfetch\n",[144,118881,118882],{"class":146,"line":1360},[144,118883,118884],{"class":1993},"fastfetch\n",[14,118886,118887],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,118889,118890],{},[28,118891],{"alt":30,"src":118892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[115,118894,118896],{"id":118895},"_323-移除snap应用","3.2.3 移除snap应用",[14,118898,118899],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[135,118901,118903],{"className":117309,"code":118902,"language":117311,"meta":30,"style":30},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[141,118904,118905,118917,118928],{"__ignoreMap":30},[144,118906,118907,118909,118911,118914],{"class":146,"line":147},[144,118908,24589],{"class":1993},[144,118910,26526],{"class":259},[144,118912,118913],{"class":259}," disable",[144,118915,118916],{"class":259}," snapd.service\n",[144,118918,118919,118921,118923,118925],{"class":146,"line":66},[144,118920,24589],{"class":1993},[144,118922,26526],{"class":259},[144,118924,118913],{"class":259},[144,118926,118927],{"class":259}," snapd.socket\n",[144,118929,118930,118932,118934,118936],{"class":146,"line":1210},[144,118931,24589],{"class":1993},[144,118933,26526],{"class":259},[144,118935,118913],{"class":259},[144,118937,118938],{"class":259}," snapd.seeded.service\n",[14,118940,118941],{},"然后查看snap应用列表",[14,118943,118944,118945,118950],{},"根据你安装的选择不同（最小安装或普通安装），有",[393,118946,118949],{"href":118947,"rel":118948},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[23897],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[135,118952,118954],{"className":117309,"code":118953,"language":117311,"meta":30,"style":30},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[141,118955,118956,118961],{"__ignoreMap":30},[144,118957,118958],{"class":146,"line":147},[144,118959,118960],{"class":213},"# 查询当前系统上snap安装了哪些app\n",[144,118962,118963,118966],{"class":146,"line":66},[144,118964,118965],{"class":1993},"snap",[144,118967,118968],{"class":259}," list\n",[14,118970,118971],{},[28,118972],{"alt":30,"src":118973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,118975,118976,118977,118980],{},"卸载掉图中所有应用，按照 ",[304,118978,118979],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[135,118982,118984],{"className":117309,"code":118983,"language":117311,"meta":30,"style":30},"#移除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",[141,118985,118986,118991,119003,119008,119019,119024,119035,119040,119051,119056,119060,119065,119076,119087],{"__ignoreMap":30},[144,118987,118988],{"class":146,"line":147},[144,118989,118990],{"class":213},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[144,118992,118993,118995,118998,119000],{"class":146,"line":66},[144,118994,24589],{"class":1993},[144,118996,118997],{"class":259}," snap",[144,118999,26092],{"class":259},[144,119001,119002],{"class":259}," snap-store\n",[144,119004,119005],{"class":146,"line":1210},[144,119006,119007],{"class":213},"#移除firefox浏览器\n",[144,119009,119010,119012,119014,119016],{"class":146,"line":1225},[144,119011,24589],{"class":1993},[144,119013,118997],{"class":259},[144,119015,26092],{"class":259},[144,119017,119018],{"class":259}," firefox\n",[144,119020,119021],{"class":146,"line":1231},[144,119022,119023],{"class":213},"#移除gnome-42-2204\n",[144,119025,119026,119028,119030,119032],{"class":146,"line":1245},[144,119027,24589],{"class":1993},[144,119029,118997],{"class":259},[144,119031,26092],{"class":259},[144,119033,119034],{"class":259}," gnome-42-2204\n",[144,119036,119037],{"class":146,"line":1251},[144,119038,119039],{"class":213},"#移除gtk-common-themes\n",[144,119041,119042,119044,119046,119048],{"class":146,"line":1342},[144,119043,24589],{"class":1993},[144,119045,118997],{"class":259},[144,119047,26092],{"class":259},[144,119049,119050],{"class":259}," gtk-common-themes\n",[144,119052,119053],{"class":146,"line":1348},[144,119054,119055],{"class":213},"#移除其它...\n",[144,119057,119058],{"class":146,"line":1360},[144,119059,2704],{"class":154},[144,119061,119062],{"class":146,"line":1642},[144,119063,119064],{"class":213},"#移除core22,bare以及snapd\n",[144,119066,119067,119069,119071,119073],{"class":146,"line":1647},[144,119068,24589],{"class":1993},[144,119070,118997],{"class":259},[144,119072,26092],{"class":259},[144,119074,119075],{"class":259}," core22\n",[144,119077,119078,119080,119082,119084],{"class":146,"line":1653},[144,119079,24589],{"class":1993},[144,119081,118997],{"class":259},[144,119083,26092],{"class":259},[144,119085,119086],{"class":259}," bare\n",[144,119088,119089,119091,119093,119095],{"class":146,"line":1658},[144,119090,24589],{"class":1993},[144,119092,118997],{"class":259},[144,119094,26092],{"class":259},[144,119096,119097],{"class":259}," snapd\n",[14,119099,119100],{},[28,119101],{"alt":30,"src":119102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119104,119105],{},"输入以下命令查看是否还有snap包",[135,119107,119109],{"className":117309,"code":119108,"language":117311,"meta":30,"style":30},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[141,119110,119111,119117,119121,119125,119129],{"__ignoreMap":30},[144,119112,119113,119115],{"class":146,"line":147},[144,119114,118965],{"class":1993},[144,119116,118968],{"class":259},[144,119118,119119],{"class":146,"line":66},[144,119120,118817],{"class":213},[144,119122,119123],{"class":146,"line":1210},[144,119124,118841],{"class":1993},[144,119126,119127],{"class":146,"line":1225},[144,119128,118850],{"class":213},[144,119130,119131],{"class":146,"line":1231},[144,119132,118884],{"class":1993},[14,119134,119135],{},[28,119136],{"alt":30,"src":119137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[115,119139,119141],{"id":119140},"_324-移除snap","3.2.4 移除snap",[14,119143,119144,119145,119150],{},"在删除掉",[393,119146,119149],{"href":119147,"rel":119148},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[23897],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[135,119152,119154],{"className":117309,"code":119153,"language":117311,"meta":30,"style":30}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[141,119155,119156,119161,119174,119179,119190],{"__ignoreMap":30},[144,119157,119158],{"class":146,"line":147},[144,119159,119160],{"class":213}," #使用apt移除掉snap\n",[144,119162,119163,119165,119167,119169,119172],{"class":146,"line":66},[144,119164,24589],{"class":1993},[144,119166,117330],{"class":259},[144,119168,117638],{"class":259},[144,119170,119171],{"class":203}," --purge",[144,119173,119097],{"class":259},[144,119175,119176],{"class":146,"line":1210},[144,119177,119178],{"class":213},"#移除snapd的一些目录\n",[144,119180,119181,119183,119185,119187],{"class":146,"line":1225},[144,119182,24589],{"class":1993},[144,119184,118566],{"class":259},[144,119186,25338],{"class":203},[144,119188,119189],{"class":259}," \u002Fvar\u002Fcache\u002Fsnapd\n",[144,119191,119192,119194,119196,119198],{"class":146,"line":1231},[144,119193,24589],{"class":1993},[144,119195,118566],{"class":259},[144,119197,25338],{"class":203},[144,119199,119200],{"class":259}," ~\u002Fsnap\n",[14,119202,119203,119204,119207],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[141,119205,119206],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[115,119209,119211],{"id":119210},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119213,119214],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[135,119216,119218],{"className":117309,"code":119217,"language":117311,"meta":30,"style":30},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[141,119219,119220],{"__ignoreMap":30},[144,119221,119222,119224,119226],{"class":146,"line":147},[144,119223,24589],{"class":1993},[144,119225,118596],{"class":259},[144,119227,119228],{"class":259}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119230,119231,119232,119235],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[141,119233,119234],{},":wq"," 回车",[135,119237,119239],{"className":117309,"code":119238,"language":117311,"meta":30,"style":30},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[141,119240,119241,119248,119262],{"__ignoreMap":30},[144,119242,119243,119246],{"class":146,"line":147},[144,119244,119245],{"class":1993},"Package:",[144,119247,119097],{"class":259},[144,119249,119250,119253,119256,119259],{"class":146,"line":66},[144,119251,119252],{"class":1993},"Pin:",[144,119254,119255],{"class":259}," release",[144,119257,119258],{"class":259}," a=",[144,119260,119261],{"class":203},"*\n",[144,119263,119264,119267],{"class":146,"line":1210},[144,119265,119266],{"class":1993},"Pin-Priority:",[144,119268,119269],{"class":203}," -10\n",[14,119271,119272],{},[28,119273],{"alt":30,"src":119274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[115,119276,119278],{"id":119277},"_326-测试是否成功","3.2.6 测试是否成功",[135,119280,119282],{"className":117309,"code":119281,"language":117311,"meta":30,"style":30},"sudo apt update\nsudo apt install firefox\n",[141,119283,119284,119292],{"__ignoreMap":30},[144,119285,119286,119288,119290],{"class":146,"line":147},[144,119287,24589],{"class":1993},[144,119289,117330],{"class":259},[144,119291,26255],{"class":259},[144,119293,119294,119296,119298,119300],{"class":146,"line":66},[144,119295,24589],{"class":1993},[144,119297,117330],{"class":259},[144,119299,23866],{"class":259},[144,119301,119018],{"class":259},[14,119303,119304],{},"这里提示snapd无法被安装，就证明成功了",[14,119306,119307],{},[28,119308],{"alt":30,"src":119309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[115,119311,119313],{"id":119312},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119315,119316],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119318,119319],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119321,119322],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[135,119324,119326],{"className":117309,"code":119325,"language":117311,"meta":30,"style":30},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[141,119327,119328,119333,119342,119347,119355],{"__ignoreMap":30},[144,119329,119330],{"class":146,"line":147},[144,119331,119332],{"class":213},"# 添加Mozilla提供的源\n",[144,119334,119335,119337,119339],{"class":146,"line":66},[144,119336,24589],{"class":1993},[144,119338,118857],{"class":259},[144,119340,119341],{"class":259}," ppa:mozillateam\u002Fppa\n",[144,119343,119344],{"class":146,"line":1210},[144,119345,119346],{"class":213},"# 安装Firefox\n",[144,119348,119349,119351,119353],{"class":146,"line":1225},[144,119350,24589],{"class":1993},[144,119352,117330],{"class":259},[144,119354,26255],{"class":259},[144,119356,119357,119359,119361,119363],{"class":146,"line":1231},[144,119358,24589],{"class":1993},[144,119360,117330],{"class":259},[144,119362,23866],{"class":259},[144,119364,119018],{"class":259},[115,119366,119368],{"id":119367},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119370,119371],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119373,119374],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[135,119376,119378],{"className":117309,"code":119377,"language":117311,"meta":30,"style":30},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[141,119379,119380,119385,119395,119403,119407],{"__ignoreMap":30},[144,119381,119382],{"class":146,"line":147},[144,119383,119384],{"class":213},"#删掉禁止安装snap的配置文件\n",[144,119386,119387,119389,119391,119393],{"class":146,"line":66},[144,119388,24589],{"class":1993},[144,119390,118566],{"class":259},[144,119392,25338],{"class":203},[144,119394,119228],{"class":259},[144,119396,119397,119399,119401],{"class":146,"line":1210},[144,119398,24589],{"class":1993},[144,119400,117330],{"class":259},[144,119402,26255],{"class":259},[144,119404,119405],{"class":146,"line":1225},[144,119406,2430],{"emptyLinePlaceholder":72},[144,119408,119409,119411,119413],{"class":146,"line":1231},[144,119410,24589],{"class":1993},[144,119412,117330],{"class":259},[144,119414,119415],{"class":259}," dist-update\n",[18,119417,119419],{"id":119418},"_33-中文输入法","3.3 中文输入法",[115,119421,119423],{"id":119422},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,119425,119426],{},"官网下载搜狗输入法",[14,119428,119429],{},[28,119430],{"alt":30,"src":119431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,119433,119434],{},[28,119435],{"alt":30,"src":119436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,119438,119439],{},"打开终端输入如下",[135,119441,119443],{"className":117309,"code":119442,"language":117311,"meta":30,"style":30},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[141,119444,119445,119452],{"__ignoreMap":30},[144,119446,119447,119449],{"class":146,"line":147},[144,119448,101289],{"class":203},[144,119450,119451],{"class":259}," ~\u002FDownloads\u002F\n",[144,119453,119454,119456,119458,119460],{"class":146,"line":66},[144,119455,24589],{"class":1993},[144,119457,117330],{"class":259},[144,119459,23866],{"class":259},[144,119461,119462],{"class":259}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,119464,119465],{},"打开Fcitx",[14,119467,119468,119471],{},[28,119469],{"alt":30,"src":119470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[28,119472],{"alt":30,"src":119473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,119475,119476],{},[28,119477],{"alt":30,"src":119478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,119480,119481],{},"添加搜狗输入法",[14,119483,119484],{},[28,119485],{"alt":30,"src":119486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,119488,119489],{},[28,119490],{"alt":30,"src":119491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,119493,119494],{},"将搜狗输入法设置为唯一输入法",[14,119496,119497],{},[28,119498],{"alt":30,"src":119499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[115,119501,119503],{"id":119502},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[98,119505,119506],{},[101,119507,119508],{},"卸载旧输入法",[135,119510,119512],{"className":118536,"code":119511,"language":118538,"meta":30,"style":30},"sudo apt purge fcitx* ibus*\n",[141,119513,119514],{"__ignoreMap":30},[144,119515,119516,119518,119520,119522,119525,119527,119530],{"class":146,"line":147},[144,119517,24589],{"class":1993},[144,119519,117330],{"class":259},[144,119521,117671],{"class":259},[144,119523,119524],{"class":259}," fcitx",[144,119526,610],{"class":203},[144,119528,119529],{"class":259}," ibus",[144,119531,119261],{"class":203},[98,119533,119534],{"start":66},[101,119535,119536],{},"安装Fcitx5",[135,119538,119540],{"className":117309,"code":119539,"language":117311,"meta":30,"style":30},"# 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",[141,119541,119542,119547,119561,119565,119570,119579,119587],{"__ignoreMap":30},[144,119543,119544],{"class":146,"line":147},[144,119545,119546],{"class":213},"# Ubuntu22.04及以上、Debian12及以上\n",[144,119548,119549,119551,119553,119555,119558],{"class":146,"line":66},[144,119550,24589],{"class":1993},[144,119552,117330],{"class":259},[144,119554,23866],{"class":259},[144,119556,119557],{"class":259}," fcitx5",[144,119559,119560],{"class":259}," fcitx5-chinese-addons\n",[144,119562,119563],{"class":146,"line":1210},[144,119564,2430],{"emptyLinePlaceholder":72},[144,119566,119567],{"class":146,"line":1225},[144,119568,119569],{"class":213},"# Ubuntu20.04\n",[144,119571,119572,119574,119576],{"class":146,"line":1231},[144,119573,24589],{"class":1993},[144,119575,118857],{"class":259},[144,119577,119578],{"class":259}," ppa:zhsj\u002Ffcitx5\n",[144,119580,119581,119583,119585],{"class":146,"line":1245},[144,119582,24589],{"class":1993},[144,119584,117330],{"class":259},[144,119586,26255],{"class":259},[144,119588,119589,119591,119593,119595,119597],{"class":146,"line":1251},[144,119590,24589],{"class":1993},[144,119592,117330],{"class":259},[144,119594,23866],{"class":259},[144,119596,119557],{"class":259},[144,119598,119560],{"class":259},[98,119600,119601,119604],{"start":1210},[101,119602,119603],{},"Reboot System",[101,119605,119606],{},"启动Fcitx5",[14,119608,119609],{},[28,119610],{"alt":30,"src":119611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[98,119613,119614],{"start":1231},[101,119615,119616],{},"修改一些设置",[14,119618,119619],{},"将Pinyin和Keyboard - English US加入到左边。",[14,119621,119622],{},[28,119623],{"alt":30,"src":119624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,119626,119627],{},"添加快捷键以便于更好切换中英文",[14,119629,119630],{},[28,119631],{"alt":30,"src":119632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[98,119634,119635],{"start":1245},[101,119636,119637],{},"重启",[135,119639,119641],{"className":118536,"code":119640,"language":118538,"meta":30,"style":30},"sudo shutdown -r now\n",[141,119642,119643],{"__ignoreMap":30},[144,119644,119645,119647,119650,119653],{"class":146,"line":147},[144,119646,24589],{"class":1993},[144,119648,119649],{"class":259}," shutdown",[144,119651,119652],{"class":203}," -r",[144,119654,119655],{"class":259}," now\n",[98,119657,119658],{"start":1251},[101,119659,119660],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,119662,119663],{},[393,119664,119665],{"href":119665,"rel":119666},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23897],[98,119668,119669],{"start":1342},[101,119670,119671],{},"再重启",[135,119673,119674],{"className":118536,"code":119640,"language":118538,"meta":30,"style":30},[141,119675,119676],{"__ignoreMap":30},[144,119677,119678,119680,119682,119684],{"class":146,"line":147},[144,119679,24589],{"class":1993},[144,119681,119649],{"class":259},[144,119683,119652],{"class":203},[144,119685,119655],{"class":259},[18,119687,119689],{"id":119688},"_34-pip3源替换","3.4 pip3源替换",[14,119691,119692],{},"非Debian系发行版需要做。",[14,119694,119695],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,119697,119698],{},"使用dnf的系统也可能不用做。",[135,119700,119702],{"className":117309,"code":119701,"language":117311,"meta":30,"style":30},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[141,119703,119704,119709,119716,119721,119726],{"__ignoreMap":30},[144,119705,119706],{"class":146,"line":147},[144,119707,119708],{"class":213},"# 检查是否已安装 pip\n",[144,119710,119711,119714],{"class":146,"line":66},[144,119712,119713],{"class":1993},"pip3",[144,119715,26306],{"class":203},[144,119717,119718],{"class":146,"line":1210},[144,119719,119720],{"class":213},"# 如果未安装，先安装 pip3（见下方）\n",[144,119722,119723],{"class":146,"line":1225},[144,119724,119725],{"class":213},"# 配置 pip 使用清华源\n",[144,119727,119728,119730,119733,119736,119739],{"class":146,"line":1231},[144,119729,119713],{"class":1993},[144,119731,119732],{"class":259}," config",[144,119734,119735],{"class":259}," set",[144,119737,119738],{"class":259}," global.index-url",[144,119740,119741],{"class":259}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,119743,119744],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,119746,119747],{},[28,119748],{"alt":30,"src":119749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[135,119751,119753],{"className":117309,"code":119752,"language":117311,"meta":30,"style":30},"#安装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",[141,119754,119755,119760,119768,119779,119783,119788,119807,119811,119816,119828,119832,119837],{"__ignoreMap":30},[144,119756,119757],{"class":146,"line":147},[144,119758,119759],{"class":213},"#安装pip3\n",[144,119761,119762,119764,119766],{"class":146,"line":66},[144,119763,24589],{"class":1993},[144,119765,117330],{"class":259},[144,119767,26255],{"class":259},[144,119769,119770,119772,119774,119776],{"class":146,"line":1210},[144,119771,24589],{"class":1993},[144,119773,26089],{"class":259},[144,119775,23866],{"class":259},[144,119777,119778],{"class":259}," python3-pip\n",[144,119780,119781],{"class":146,"line":1225},[144,119782,2430],{"emptyLinePlaceholder":72},[144,119784,119785],{"class":146,"line":1231},[144,119786,119787],{"class":213},"#更新pip3\n",[144,119789,119790,119792,119794,119796,119798,119800,119803,119805],{"class":146,"line":1245},[144,119791,100892],{"class":1993},[144,119793,100895],{"class":203},[144,119795,100918],{"class":259},[144,119797,23866],{"class":259},[144,119799,26443],{"class":203},[144,119801,119802],{"class":259}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[144,119804,100923],{"class":203},[144,119806,100926],{"class":259},[144,119808,119809],{"class":146,"line":1251},[144,119810,2430],{"emptyLinePlaceholder":72},[144,119812,119813],{"class":146,"line":1342},[144,119814,119815],{"class":213},"#设置pip源为清华源\n",[144,119817,119818,119820,119822,119824,119826],{"class":146,"line":1348},[144,119819,119713],{"class":1993},[144,119821,119732],{"class":259},[144,119823,119735],{"class":259},[144,119825,119738],{"class":259},[144,119827,119741],{"class":259},[144,119829,119830],{"class":146,"line":1360},[144,119831,2430],{"emptyLinePlaceholder":72},[144,119833,119834],{"class":146,"line":1642},[144,119835,119836],{"class":213},"#测试\n",[144,119838,119839,119841,119843,119845,119847,119849],{"class":146,"line":1647},[144,119840,100892],{"class":1993},[144,119842,100895],{"class":203},[144,119844,100918],{"class":259},[144,119846,23866],{"class":259},[144,119848,100923],{"class":203},[144,119850,100926],{"class":259},[14,119852,119853],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,119855,119856],{},[28,119857],{"alt":30,"src":119858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[18,119860,119862],{"id":119861},"_35-显卡驱动安装","3.5 显卡驱动安装",[115,119864,119866],{"id":119865},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[135,119868,119870],{"className":118536,"code":119869,"language":118538,"meta":30,"style":30},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[141,119871,119872,119877,119892,119897],{"__ignoreMap":30},[144,119873,119874],{"class":146,"line":147},[144,119875,119876],{"class":213},"# 如果是使用apt安装的驱动\n",[144,119878,119879,119881,119883,119885,119887,119890],{"class":146,"line":66},[144,119880,24589],{"class":1993},[144,119882,26089],{"class":259},[144,119884,26092],{"class":259},[144,119886,119171],{"class":203},[144,119888,119889],{"class":259}," nvidia",[144,119891,119261],{"class":203},[144,119893,119894],{"class":146,"line":1210},[144,119895,119896],{"class":213},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[144,119898,119899,119901],{"class":146,"line":1225},[144,119900,24589],{"class":1993},[144,119902,119903],{"class":259}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[115,119905,119907],{"id":119906},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22029,119909,119911],{"id":119910},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22941,119913,119915],{"id":119914},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[135,119917,119919],{"className":118536,"code":119918,"language":118538,"meta":30,"style":30},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[141,119920,119921,119926,119937,119942,119952,119957],{"__ignoreMap":30},[144,119922,119923],{"class":146,"line":147},[144,119924,119925],{"class":213},"# 安装英伟达驱动\n",[144,119927,119928,119930,119932,119934],{"class":146,"line":66},[144,119929,24589],{"class":1993},[144,119931,117330],{"class":259},[144,119933,23866],{"class":259},[144,119935,119936],{"class":259}," nvidia-driver-版本号\n",[144,119938,119939],{"class":146,"line":1210},[144,119940,119941],{"class":213},"# 重启 \n",[144,119943,119944,119946,119948,119950],{"class":146,"line":1225},[144,119945,24589],{"class":1993},[144,119947,119649],{"class":259},[144,119949,119652],{"class":203},[144,119951,119655],{"class":259},[144,119953,119954],{"class":146,"line":1231},[144,119955,119956],{"class":213},"# 检查驱动是否安装成功\n",[144,119958,119959],{"class":146,"line":1245},[144,119960,119961],{"class":1993},"nvidia-smi\n",[22941,119963,119965],{"id":119964},"_35212-debian","3.5.2.1.2 Debian",[135,119967,119969],{"className":118536,"code":119968,"language":118538,"meta":30,"style":30},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[141,119970,119971,119975,119989,119993,120003,120007],{"__ignoreMap":30},[144,119972,119973],{"class":146,"line":147},[144,119974,119925],{"class":213},[144,119976,119977,119979,119981,119983,119986],{"class":146,"line":66},[144,119978,24589],{"class":1993},[144,119980,117330],{"class":259},[144,119982,23866],{"class":259},[144,119984,119985],{"class":259}," nvidia-driver",[144,119987,119988],{"class":259}," nvidia-settings\n",[144,119990,119991],{"class":146,"line":1210},[144,119992,119941],{"class":213},[144,119994,119995,119997,119999,120001],{"class":146,"line":1225},[144,119996,24589],{"class":1993},[144,119998,119649],{"class":259},[144,120000,119652],{"class":203},[144,120002,119655],{"class":259},[144,120004,120005],{"class":146,"line":1231},[144,120006,119956],{"class":213},[144,120008,120009],{"class":146,"line":1245},[144,120010,119961],{"class":1993},[22029,120012,120014],{"id":120013},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,120016,120017,120018,120021],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[304,120019,120020],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,120023,120024,120025],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23585,120026,120027],{},[304,120028,120029],{},"（也可以不禁用桌面环境，直接进行下一步。）",[135,120031,120033],{"className":118536,"code":120032,"language":118538,"meta":30,"style":30},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[141,120034,120035,120040,120050,120055,120068,120073],{"__ignoreMap":30},[144,120036,120037],{"class":146,"line":147},[144,120038,120039],{"class":213},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[144,120041,120042,120044,120047],{"class":146,"line":66},[144,120043,24589],{"class":1993},[144,120045,120046],{"class":259}," telinit",[144,120048,120049],{"class":203}," 3\n",[144,120051,120052],{"class":146,"line":1210},[144,120053,120054],{"class":213},"# ubuntu 使用下方命令\n",[144,120056,120057,120059,120062,120065],{"class":146,"line":1225},[144,120058,24589],{"class":1993},[144,120060,120061],{"class":259}," service",[144,120063,120064],{"class":259}," lightdm",[144,120066,120067],{"class":259}," stop\n",[144,120069,120070],{"class":146,"line":1231},[144,120071,120072],{"class":213},"# Fedora 使用下方命令\n",[144,120074,120075,120077,120079,120082],{"class":146,"line":1245},[144,120076,24589],{"class":1993},[144,120078,26526],{"class":259},[144,120080,120081],{"class":259}," isolate",[144,120083,120084],{"class":259}," multi-user.target\n",[14,120086,120087],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[135,120089,120091],{"className":118536,"code":120090,"language":118538,"meta":30,"style":30},"# 编译环境+准备工作\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",[141,120092,120093,120098,120109,120114,120121,120126,120138,120143,120150,120155],{"__ignoreMap":30},[144,120094,120095],{"class":146,"line":147},[144,120096,120097],{"class":213},"# 编译环境+准备工作\n",[144,120099,120100,120102,120104,120106],{"class":146,"line":66},[144,120101,24589],{"class":1993},[144,120103,117330],{"class":259},[144,120105,23866],{"class":259},[144,120107,120108],{"class":259}," build-essential\n",[144,120110,120111],{"class":146,"line":1210},[144,120112,120113],{"class":213},"# 进入到.run目录中\n",[144,120115,120116,120118],{"class":146,"line":1225},[144,120117,101289],{"class":203},[144,120119,120120],{"class":259}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[144,120122,120123],{"class":146,"line":1231},[144,120124,120125],{"class":213},"# 给驱动文件增加可执行权限：\n",[144,120127,120128,120130,120132,120135],{"class":146,"line":1245},[144,120129,24589],{"class":1993},[144,120131,24592],{"class":259},[144,120133,120134],{"class":259}," a+x",[144,120136,120137],{"class":259}," NVIDIA-Linux-x86_64-550.107.02.run\n",[144,120139,120140],{"class":146,"line":1251},[144,120141,120142],{"class":213},"# 然后执行安装：\n",[144,120144,120145,120147],{"class":146,"line":1342},[144,120146,24589],{"class":1993},[144,120148,120149],{"class":259}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[144,120151,120152],{"class":146,"line":1348},[144,120153,120154],{"class":213},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[144,120156,120157,120159,120162],{"class":146,"line":1360},[144,120158,24589],{"class":1993},[144,120160,120161],{"class":259}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[144,120163,120164],{"class":203},"  --no-opengl-files\n",[14,120166,120167],{},"安装完毕重启即可",[135,120169,120171],{"className":118536,"code":120170,"language":118538,"meta":30,"style":30},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[141,120172,120173,120177,120183,120187],{"__ignoreMap":30},[144,120174,120175],{"class":146,"line":147},[144,120176,119941],{"class":213},[144,120178,120179,120181],{"class":146,"line":66},[144,120180,24589],{"class":1993},[144,120182,26660],{"class":259},[144,120184,120185],{"class":146,"line":1210},[144,120186,119956],{"class":213},[144,120188,120189],{"class":146,"line":1225},[144,120190,119961],{"class":1993},[115,120192,120194],{"id":120193},"_353-安装cuda","3.5.3 安装CUDA",[14,120196,120197],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120199,120200],{},[28,120201],{"alt":30,"src":120202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[98,120204,120205],{},[101,120206,120207],{},"先查看显卡驱动所支持的最高CUDA版本",[135,120209,120210],{"className":118536,"code":119961,"language":118538,"meta":30,"style":30},[141,120211,120212],{"__ignoreMap":30},[144,120213,120214],{"class":146,"line":147},[144,120215,119961],{"class":1993},[14,120217,120218],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120220,120221],{},[28,120222],{"alt":30,"src":120223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[98,120225,120226],{"start":66},[101,120227,120228],{},"下载CUDA并安装CUDA",[14,120230,118315,120231],{},[393,120232,118318],{"href":118318,"rel":120233},[23897],[14,120235,120236],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120238,120239],{},[28,120240],{"alt":30,"src":120241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120243,120244,120245,120250],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[393,120246,120249],{"href":120247,"rel":120248},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23897],"Vinci机器人队单片机教程","）",[14,120252,120253],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120255,120256],{},[28,120257],{"alt":30,"src":120258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120260,120261],{},"将最下方框框里的命令敲入终端",[135,120263,120265],{"className":118536,"code":120264,"language":118538,"meta":30,"style":30},"# 在当前文件夹下创建一个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",[141,120266,120267,120272,120281,120286,120293,120298,120306,120311,120322,120327],{"__ignoreMap":30},[144,120268,120269],{"class":146,"line":147},[144,120270,120271],{"class":213},"# 在当前文件夹下创建一个ttt的子文件夹\n",[144,120273,120274,120276,120278],{"class":146,"line":66},[144,120275,101279],{"class":1993},[144,120277,29229],{"class":203},[144,120279,120280],{"class":259}," .\u002Fttt\n",[144,120282,120283],{"class":146,"line":1210},[144,120284,120285],{"class":213},"# 进入ttt文件夹\n",[144,120287,120288,120290],{"class":146,"line":1225},[144,120289,101289],{"class":203},[144,120291,120292],{"class":259}," ttt\n",[144,120294,120295],{"class":146,"line":1231},[144,120296,120297],{"class":213},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[144,120299,120300,120303],{"class":146,"line":1245},[144,120301,120302],{"class":1993},"wget",[144,120304,120305],{"class":259}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[144,120307,120308],{"class":146,"line":1251},[144,120309,120310],{"class":213},"# 给予权限\n",[144,120312,120313,120315,120317,120319],{"class":146,"line":1342},[144,120314,24589],{"class":1993},[144,120316,24592],{"class":259},[144,120318,120134],{"class":259},[144,120320,120321],{"class":259}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[144,120323,120324],{"class":146,"line":1348},[144,120325,120326],{"class":213},"# 运行脚本\n",[144,120328,120329,120331],{"class":146,"line":1360},[144,120330,24589],{"class":1993},[144,120332,120321],{"class":259},[14,120334,120335],{},[28,120336],{"alt":30,"src":120337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120339,120340],{},"正在安装中：",[14,120342,120343],{},[28,120344],{"alt":30,"src":120345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120347,120348],{},"输入accept接受即可",[14,120350,120351],{},[28,120352],{"alt":30,"src":120353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120355,120356],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120358,120359],{},[28,120360],{"alt":30,"src":120361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120363,120364],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120366,120367],{},[28,120368],{"alt":30,"src":120369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[98,120371,120372],{"start":1210},[101,120373,120374],{},"配置环境",[14,120376,120377],{},"根据上方确认一下路径，比如我上面红色框起来的为",[135,120379,120381],{"className":118536,"code":120380,"language":118538,"meta":30,"style":30},"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",[141,120382,120383,120399,120414],{"__ignoreMap":30},[144,120384,120385,120388,120391,120394,120397],{"class":146,"line":147},[144,120386,120387],{"class":1993},"Please",[144,120389,120390],{"class":259}," make",[144,120392,120393],{"class":259}," sure",[144,120395,120396],{"class":259}," that",[144,120398,2704],{"class":154},[144,120400,120401,120403,120406,120409,120412],{"class":146,"line":66},[144,120402,52284],{"class":1993},[144,120404,120405],{"class":259},"   PATH",[144,120407,120408],{"class":259}," includes",[144,120410,120411],{"class":259}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[144,120413,2704],{"class":154},[144,120415,120416,120418,120421,120423,120426,120429,120431,120434,120437,120440,120443,120445,120448,120450],{"class":146,"line":1210},[144,120417,52284],{"class":1993},[144,120419,120420],{"class":259},"   LD_LIBRARY_PATH",[144,120422,120408],{"class":259},[144,120424,120425],{"class":259}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[144,120427,120428],{"class":259}," or,",[144,120430,5240],{"class":259},[144,120432,120433],{"class":259}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[144,120435,120436],{"class":259}," to",[144,120438,120439],{"class":259}," \u002Fetc\u002Fld.so.conf",[144,120441,120442],{"class":259}," and",[144,120444,27243],{"class":259},[144,120446,120447],{"class":259}," ldconfig",[144,120449,64617],{"class":259},[144,120451,120452],{"class":259}," root\n",[14,120454,120455],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[135,120457,120459],{"className":118536,"code":120458,"language":118538,"meta":30,"style":30},"which nvcc\n",[141,120460,120461],{"__ignoreMap":30},[144,120462,120463,120466],{"class":146,"line":147},[144,120464,120465],{"class":203},"which",[144,120467,120468],{"class":259}," nvcc\n",[14,120470,120471],{},[28,120472],{"alt":30,"src":120473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,120475,120476],{},"所以我进行以下操作：",[135,120478,120480],{"className":118536,"code":120479,"language":118538,"meta":30,"style":30},"sudo vim ~\u002F.bashrc\n",[141,120481,120482],{"__ignoreMap":30},[144,120483,120484,120486,120488],{"class":146,"line":147},[144,120485,24589],{"class":1993},[144,120487,118596],{"class":259},[144,120489,120490],{"class":259}," ~\u002F.bashrc\n",[14,120492,120493],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[135,120495,120497],{"className":118536,"code":120496,"language":118538,"meta":30,"style":30},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[141,120498,120499,120511],{"__ignoreMap":30},[144,120500,120501,120503,120506,120508],{"class":146,"line":147},[144,120502,25055],{"class":150},[144,120504,120505],{"class":154}," PATH",[144,120507,200],{"class":150},[144,120509,120510],{"class":154},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[144,120512,120513,120515,120518,120520],{"class":146,"line":66},[144,120514,25055],{"class":150},[144,120516,120517],{"class":154}," LD_LIBRARY_PATH",[144,120519,200],{"class":150},[144,120521,120522],{"class":154},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,120524,120525],{},[28,120526],{"alt":30,"src":120527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[135,120529,120531],{"className":118536,"code":120530,"language":118538,"meta":30,"style":30},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[141,120532,120533,120538,120544,120549],{"__ignoreMap":30},[144,120534,120535],{"class":146,"line":147},[144,120536,120537],{"class":213},"# 刷新当前终端的环境变量\n",[144,120539,120540,120542],{"class":146,"line":66},[144,120541,100906],{"class":203},[144,120543,120490],{"class":259},[144,120545,120546],{"class":146,"line":1210},[144,120547,120548],{"class":213},"# 验证CUDA是否安装成功\n",[144,120550,120551,120554],{"class":146,"line":1225},[144,120552,120553],{"class":1993},"nvcc",[144,120555,120556],{"class":203}," -V\n",[14,120558,120559],{},"出现下图这种则安装成功。",[14,120561,120562],{},[28,120563],{"alt":30,"src":120564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[115,120566,120568],{"id":120567},"_354-安装cudnn","3.5.4 安装cuDNN",[98,120570,120571],{},[101,120572,120573],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,120575,120576,120577,120582],{},"前往 NVIDIA cuDNN 下载页面：",[393,120578,120581],{"href":120579,"rel":120580},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[23897],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,120584,120585],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,120587,120588],{},[28,120589],{"alt":30,"src":120590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,120592,120593],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,120595,120596],{},[28,120597],{"alt":30,"src":120598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,120600,120601],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,120603,120604],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,120606,120607],{},[304,120608,120609],{},"我这里选择所有Linux X86_64最通用的办法：",[14,120611,120612],{},"下载好的：",[14,120614,120615],{},[28,120616],{"alt":30,"src":120617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[98,120619,120620],{"start":66},[101,120621,120622],{},"安装cuDNN",[14,120624,120625],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,120627,120628],{},[28,120629],{"alt":30,"src":120630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,120632,120633],{},"解压文件，并复制到对应位置完成安装",[135,120635,120637],{"className":118536,"code":120636,"language":118538,"meta":30,"style":30},"# 解压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",[141,120638,120639,120644,120655,120660,120667,120672,120688,120702,120707,120718,120727,120731,120747],{"__ignoreMap":30},[144,120640,120641],{"class":146,"line":147},[144,120642,120643],{"class":213},"# 解压cuDNN文件\n",[144,120645,120646,120649,120652],{"class":146,"line":66},[144,120647,120648],{"class":1993},"tar",[144,120650,120651],{"class":203}," -xvf",[144,120653,120654],{"class":259}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[144,120656,120657],{"class":146,"line":1210},[144,120658,120659],{"class":213},"# cd进文件夹\n",[144,120661,120662,120664],{"class":146,"line":1225},[144,120663,101289],{"class":203},[144,120665,120666],{"class":259}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[144,120668,120669],{"class":146,"line":1231},[144,120670,120671],{"class":213},"# 复制cuDNN文件到CUDA目录\n",[144,120673,120674,120676,120678,120681,120683,120686],{"class":146,"line":1245},[144,120675,24589],{"class":1993},[144,120677,27874],{"class":259},[144,120679,120680],{"class":259}," include\u002Fcudnn",[144,120682,610],{"class":203},[144,120684,120685],{"class":259},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[144,120687,2704],{"class":154},[144,120689,120690,120692,120694,120697,120699],{"class":146,"line":1251},[144,120691,24589],{"class":1993},[144,120693,27874],{"class":259},[144,120695,120696],{"class":259}," lib\u002Flibcudnn",[144,120698,610],{"class":203},[144,120700,120701],{"class":259},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[144,120703,120704],{"class":146,"line":1342},[144,120705,120706],{"class":213},"# 对比一下有没有缺文件\n",[144,120708,120709,120711,120714,120716],{"class":146,"line":1348},[144,120710,26774],{"class":1993},[144,120712,120713],{"class":259}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[144,120715,610],{"class":203},[144,120717,2704],{"class":154},[144,120719,120720,120722,120725],{"class":146,"line":1360},[144,120721,26774],{"class":1993},[144,120723,120724],{"class":259}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[144,120726,119261],{"class":203},[144,120728,120729],{"class":146,"line":1642},[144,120730,120310],{"class":213},[144,120732,120733,120735,120737,120740,120742,120744],{"class":146,"line":1647},[144,120734,24589],{"class":1993},[144,120736,24592],{"class":259},[144,120738,120739],{"class":259}," a+r",[144,120741,120713],{"class":259},[144,120743,610],{"class":203},[144,120745,120746],{"class":154},"   \n",[144,120748,120749,120751,120753,120755,120757],{"class":146,"line":1653},[144,120750,24589],{"class":1993},[144,120752,24592],{"class":259},[144,120754,120739],{"class":259},[144,120756,120724],{"class":259},[144,120758,119261],{"class":203},[98,120760,120761],{"start":1210},[101,120762,120763],{},"检查是否安装成功",[135,120765,120767],{"className":118536,"code":120766,"language":118538,"meta":30,"style":30},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[141,120768,120769,120774],{"__ignoreMap":30},[144,120770,120771],{"class":146,"line":147},[144,120772,120773],{"class":213},"# 检查cuDNN版本命令\n",[144,120775,120776,120779,120782,120784,120786,120789,120792],{"class":146,"line":66},[144,120777,120778],{"class":1993},"cat",[144,120780,120781],{"class":259}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[144,120783,25122],{"class":150},[144,120785,30249],{"class":1993},[144,120787,120788],{"class":259}," CUDNN_MAJOR",[144,120790,120791],{"class":203}," -A",[144,120793,47736],{"class":203},[14,120795,120796],{},"出现下图这样的就是安装成功了",[14,120798,120799],{},[28,120800],{"alt":30,"src":120801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[98,120803,120804],{"start":1225},[101,120805,120806],{},"软链接(一般不需要)",[135,120808,120810],{"className":118536,"code":120809,"language":118538,"meta":30,"style":30},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[141,120811,120812,120817],{"__ignoreMap":30},[144,120813,120814],{"class":146,"line":147},[144,120815,120816],{"class":213},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[144,120818,120819,120821],{"class":146,"line":66},[144,120820,24589],{"class":1993},[144,120822,120823],{"class":259}," ldconfig\n",[14,120825,120826],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[135,120828,120833],{"className":120829,"code":120830,"language":120831,"meta":120832,"style":30},"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",[141,120834,120835,120840,120845,120850,120855,120860,120865],{"__ignoreMap":30},[144,120836,120837],{"class":146,"line":147},[144,120838,120839],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[144,120841,120842],{"class":146,"line":66},[144,120843,120844],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[144,120846,120847],{"class":146,"line":1210},[144,120848,120849],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[144,120851,120852],{"class":146,"line":1225},[144,120853,120854],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[144,120856,120857],{"class":146,"line":1231},[144,120858,120859],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[144,120861,120862],{"class":146,"line":1245},[144,120863,120864],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[144,120866,120867],{"class":146,"line":1251},[144,120868,120869],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,120871,120872],{},"运行下方的命令",[135,120874,120876],{"className":118536,"code":120875,"language":118538,"meta":30,"style":30},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[141,120877,120878,120883,120890,120895],{"__ignoreMap":30},[144,120879,120880],{"class":146,"line":147},[144,120881,120882],{"class":213},"# cd进入CUDA路径\n",[144,120884,120885,120887],{"class":146,"line":66},[144,120886,101289],{"class":203},[144,120888,120889],{"class":259}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[144,120891,120892],{"class":146,"line":1210},[144,120893,120894],{"class":213}," # 查看本路径下的需要软链接的文件名\n",[144,120896,120897],{"class":146,"line":1225},[144,120898,120899],{"class":1993}," ls\n",[14,120901,120902],{},[28,120903],{"alt":30,"src":120904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,120906,120907,120908,18441,120911,18441,120914,120917],{},"如上图，我需要将",[141,120909,120910],{},"libcudnn_xxx_xxxxx.so.8.9.7",[141,120912,120913],{},"libcudnn_xxx_xxxxx.so.8",[141,120915,120916],{},"libcudnn_xxx_xxxxx.so","软链接",[135,120919,120921],{"className":118536,"code":120920,"language":118538,"meta":30,"style":30},"# 创建符号链接。对于每个 .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",[141,120922,120923,120928,120944,120958,120972,120986,121000,121014,121028,121033,121039,121044],{"__ignoreMap":30},[144,120924,120925],{"class":146,"line":147},[144,120926,120927],{"class":213},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[144,120929,120930,120932,120935,120938,120941],{"class":146,"line":66},[144,120931,24589],{"class":1993},[144,120933,120934],{"class":259}," ln",[144,120936,120937],{"class":203}," -sf",[144,120939,120940],{"class":259}," libcudnn_cnn_train.so.8.9.7",[144,120942,120943],{"class":259}," libcudnn_cnn_train.so.8\n",[144,120945,120946,120948,120950,120952,120955],{"class":146,"line":1210},[144,120947,24589],{"class":1993},[144,120949,120934],{"class":259},[144,120951,120937],{"class":203},[144,120953,120954],{"class":259}," libcudnn_adv_infer.so.8.9.7",[144,120956,120957],{"class":259}," libcudnn_adv_infer.so.8\n",[144,120959,120960,120962,120964,120966,120969],{"class":146,"line":1225},[144,120961,24589],{"class":1993},[144,120963,120934],{"class":259},[144,120965,120937],{"class":203},[144,120967,120968],{"class":259}," libcudnn_adv_train.so.8.9.7",[144,120970,120971],{"class":259}," libcudnn_adv_train.so.8\n",[144,120973,120974,120976,120978,120980,120983],{"class":146,"line":1231},[144,120975,24589],{"class":1993},[144,120977,120934],{"class":259},[144,120979,120937],{"class":203},[144,120981,120982],{"class":259}," libcudnn_cnn_infer.so.8.9.7",[144,120984,120985],{"class":259}," libcudnn_cnn_infer.so.8\n",[144,120987,120988,120990,120992,120994,120997],{"class":146,"line":1245},[144,120989,24589],{"class":1993},[144,120991,120934],{"class":259},[144,120993,120937],{"class":203},[144,120995,120996],{"class":259}," libcudnn.so.8.9.7",[144,120998,120999],{"class":259}," libcudnn.so.8\n",[144,121001,121002,121004,121006,121008,121011],{"class":146,"line":1251},[144,121003,24589],{"class":1993},[144,121005,120934],{"class":259},[144,121007,120937],{"class":203},[144,121009,121010],{"class":259}," libcudnn_ops_infer.so.8.9.7",[144,121012,121013],{"class":259}," libcudnn_ops_infer.so.8\n",[144,121015,121016,121018,121020,121022,121025],{"class":146,"line":1342},[144,121017,24589],{"class":1993},[144,121019,120934],{"class":259},[144,121021,120937],{"class":203},[144,121023,121024],{"class":259}," libcudnn_ops_train.so.8.9.7",[144,121026,121027],{"class":259}," libcudnn_ops_train.so.8\n",[144,121029,121030],{"class":146,"line":1348},[144,121031,121032],{"class":213},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[144,121034,121035,121037],{"class":146,"line":1360},[144,121036,24589],{"class":1993},[144,121038,120823],{"class":259},[144,121040,121041],{"class":146,"line":1642},[144,121042,121043],{"class":213},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[144,121045,121046,121048,121051,121054,121056,121059],{"class":146,"line":1647},[144,121047,26774],{"class":1993},[144,121049,121050],{"class":203}," -l",[144,121052,121053],{"class":259}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[144,121055,610],{"class":203},[144,121057,121058],{"class":259},".so",[144,121060,119261],{"class":203},[115,121062,121064],{"id":121063},"_355-常见问题","3.5.5 常见问题",[98,121066,121067],{},[101,121068,121069],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[135,121071,121073],{"className":118536,"code":121072,"language":118538,"meta":30,"style":30},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[141,121074,121075],{"__ignoreMap":30},[144,121076,121077,121079,121081],{"class":146,"line":147},[144,121078,24589],{"class":1993},[144,121080,118596],{"class":259},[144,121082,121083],{"class":259}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121085,121086],{},"blacklist-nouveau.conf文件内容如下：",[135,121088,121090],{"className":118536,"code":121089,"language":118538,"meta":30,"style":30},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[141,121091,121092,121100,121107,121119,121129],{"__ignoreMap":30},[144,121093,121094,121097],{"class":146,"line":147},[144,121095,121096],{"class":1993},"blacklist",[144,121098,121099],{"class":259}," nouveau\n",[144,121101,121102,121104],{"class":146,"line":66},[144,121103,121096],{"class":1993},[144,121105,121106],{"class":259}," lbm-nouveau\n",[144,121108,121109,121111,121114,121117],{"class":146,"line":1210},[144,121110,115943],{"class":1993},[144,121112,121113],{"class":259}," nouveau",[144,121115,121116],{"class":259}," modeset=",[144,121118,3115],{"class":203},[144,121120,121121,121124,121126],{"class":146,"line":1225},[144,121122,121123],{"class":203},"alias",[144,121125,121113],{"class":259},[144,121127,121128],{"class":259}," off\n",[144,121130,121131,121133,121136],{"class":146,"line":1231},[144,121132,121123],{"class":203},[144,121134,121135],{"class":259}," lbm-nouveau",[144,121137,121128],{"class":259},[14,121139,121140],{},"接着运行下方命令",[135,121142,121144],{"className":118536,"code":121143,"language":118538,"meta":30,"style":30},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[141,121145,121146,121156,121161],{"__ignoreMap":30},[144,121147,121148,121150,121153],{"class":146,"line":147},[144,121149,24589],{"class":1993},[144,121151,121152],{"class":259}," update-initramfs",[144,121154,121155],{"class":203}," -u\n",[144,121157,121158],{"class":146,"line":66},[144,121159,121160],{"class":1993},"或者\n",[144,121162,121163,121165,121168],{"class":146,"line":1210},[144,121164,24589],{"class":1993},[144,121166,121167],{"class":259}," dracut",[144,121169,121170],{"class":203}," --force\n",[14,121172,121173],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[135,121175,121177],{"className":118536,"code":121176,"language":118538,"meta":30,"style":30},"lsmod | grep nouveau\n",[141,121178,121179],{"__ignoreMap":30},[144,121180,121181,121184,121186,121188],{"class":146,"line":147},[144,121182,121183],{"class":1993},"lsmod",[144,121185,25122],{"class":150},[144,121187,30249],{"class":1993},[144,121189,121099],{"class":259},[98,121191,121192],{"start":66},[101,121193,121194],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[135,121196,121198],{"className":118536,"code":121197,"language":118538,"meta":30,"style":30},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[141,121199,121200],{"__ignoreMap":30},[144,121201,121202,121204,121206],{"class":146,"line":147},[144,121203,24589],{"class":1993},[144,121205,118596],{"class":259},[144,121207,121208],{"class":259}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121210,121211],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[135,121213,121215],{"className":118536,"code":121214,"language":118538,"meta":30,"style":30},"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",[141,121216,121217,121225,121233,121241,121248,121256,121266,121274],{"__ignoreMap":30},[144,121218,121219,121222],{"class":146,"line":147},[144,121220,121221],{"class":1993},"Section",[144,121223,121224],{"class":259}," \"OutputClass\"\n",[144,121226,121227,121230],{"class":146,"line":66},[144,121228,121229],{"class":1993},"   Identifier",[144,121231,121232],{"class":259}," \"nvidia\"\n",[144,121234,121235,121238],{"class":146,"line":1210},[144,121236,121237],{"class":1993},"   MatchDriver",[144,121239,121240],{"class":259}," \"nvidia-drm\"\n",[144,121242,121243,121246],{"class":146,"line":1225},[144,121244,121245],{"class":1993},"   Driver",[144,121247,121232],{"class":259},[144,121249,121250,121253],{"class":146,"line":1231},[144,121251,121252],{"class":1993},"   Option",[144,121254,121255],{"class":259}," \"AllowEmptyInitialConfiguration\"\n",[144,121257,121258,121260,121263],{"class":146,"line":1245},[144,121259,121252],{"class":1993},[144,121261,121262],{"class":259}," \"PrimaryGPU\"",[144,121264,121265],{"class":259}," \"yes\"\n",[144,121267,121268,121271],{"class":146,"line":1251},[144,121269,121270],{"class":1993},"   ModulePath",[144,121272,121273],{"class":259}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[144,121275,121276],{"class":146,"line":1342},[144,121277,121278],{"class":1993},"EndSection\n",[98,121280,121281],{"start":1210},[101,121282,121283],{},"安装N卡驱动提示错误",[135,121285,121287],{"className":120829,"code":121286,"language":120831,"meta":120832,"style":30},"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",[141,121288,121289],{"__ignoreMap":30},[144,121290,121291],{"class":146,"line":147},[144,121292,121286],{},[98,121294,121295],{},[101,121296,121297],{},"检查当前运行的内核版本：",[14,121299,121300],{},"运行以下命令以查看你当前正在使用的内核版本：",[135,121302,121304],{"className":117309,"code":121303,"language":117311,"meta":30,"style":30},"uname -r\n",[141,121305,121306],{"__ignoreMap":30},[144,121307,121308,121310],{"class":146,"line":147},[144,121309,70217],{"class":1993},[144,121311,121312],{"class":203}," -r\n",[98,121314,121315],{"start":66},[101,121316,121317],{},"安装内核开发文件：",[14,121319,121320,121321,121324],{},"确保你已经安装了与当前内核版本相匹配的 ",[141,121322,121323],{},"kernel-devel"," 包。运行以下命令来安装：",[135,121326,121328],{"className":117309,"code":121327,"language":117311,"meta":30,"style":30},"sudo dnf install kernel-devel-$(uname -r)\n",[141,121329,121330],{"__ignoreMap":30},[144,121331,121332,121334,121336,121338,121341,121343,121345,121347],{"class":146,"line":147},[144,121333,24589],{"class":1993},[144,121335,26328],{"class":259},[144,121337,23866],{"class":259},[144,121339,121340],{"class":259}," kernel-devel-",[144,121342,25112],{"class":154},[144,121344,70217],{"class":1993},[144,121346,119652],{"class":203},[144,121348,161],{"class":154},[14,121350,121351],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[98,121353,121354],{"start":1210},[101,121355,121356],{},"安装内核源代码（如果需要）：",[14,121358,121359],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[135,121361,121363],{"className":117309,"code":121362,"language":117311,"meta":30,"style":30},"sudo dnf install kernel-headers kernel-source\n",[141,121364,121365],{"__ignoreMap":30},[144,121366,121367,121369,121371,121373,121376],{"class":146,"line":147},[144,121368,24589],{"class":1993},[144,121370,26328],{"class":259},[144,121372,23866],{"class":259},[144,121374,121375],{"class":259}," kernel-headers",[144,121377,121378],{"class":259}," kernel-source\n",[98,121380,121381],{"start":1225},[101,121382,121383],{},"检查安装：",[14,121385,121386,121387,121390],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[141,121388,121389],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[135,121392,121394],{"className":117309,"code":121393,"language":117311,"meta":30,"style":30},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[141,121395,121396],{"__ignoreMap":30},[144,121397,121398,121400],{"class":146,"line":147},[144,121399,26774],{"class":1993},[144,121401,121402],{"class":259}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,121404,121405,121406,121409],{},"如果仍然遇到问题，可以通过 ",[141,121407,121408],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5157,121411,121412],{},"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":30,"searchDepth":66,"depth":66,"links":121414},[121415,121419,121429,121433,121434],{"id":118512,"depth":66,"text":118513,"children":121416},[121417,121418],{"id":118522,"depth":1210,"text":118523},{"id":118532,"depth":1210,"text":118533},{"id":118732,"depth":66,"text":118733,"children":121420},[121421,121422,121423,121424,121425,121426,121427,121428],{"id":118736,"depth":1210,"text":118737},{"id":118806,"depth":1210,"text":118807},{"id":118895,"depth":1210,"text":118896},{"id":119140,"depth":1210,"text":119141},{"id":119210,"depth":1210,"text":119211},{"id":119277,"depth":1210,"text":119278},{"id":119312,"depth":1210,"text":119313},{"id":119367,"depth":1210,"text":119368},{"id":119418,"depth":66,"text":119419,"children":121430},[121431,121432],{"id":119422,"depth":1210,"text":119423},{"id":119502,"depth":1210,"text":119503},{"id":119688,"depth":66,"text":119689},{"id":119861,"depth":66,"text":119862,"children":121435},[121436,121437,121438,121439,121440],{"id":119865,"depth":1210,"text":119866},{"id":119906,"depth":1210,"text":119907},{"id":120193,"depth":1210,"text":120194},{"id":120567,"depth":1210,"text":120568},{"id":121063,"depth":1210,"text":121064},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118504,"description":23408},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121447,"title":121448,"body":121449,"description":23408,"extension":70,"meta":121789,"navigation":72,"path":121790,"seo":121791,"stem":121792,"__hash__":121793},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121450,"toc":121787},[121451,121454,121459,121462,121708,121713,121716,121752,121755,121784],[10,121452,121448],{"id":121453},"_4-命令教程长期积累",[98,121455,121456],{},[101,121457,121458],{},"大多数命令",[14,121460,121461],{},"常用 Linux 命令速查：",[135,121463,121465],{"className":117309,"code":121464,"language":117311,"meta":30,"style":30},"# 文件与目录\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",[141,121466,121467,121472,121479,121486,121494,121501,121508,121516,121524,121531,121538,121546,121550,121555,121562,121570,121577,121581,121586,121593,121601,121609,121617,121625,121629,121634,121642,121649,121656,121664,121672,121676,121681,121690,121699],{"__ignoreMap":30},[144,121468,121469],{"class":146,"line":147},[144,121470,121471],{"class":213},"# 文件与目录\n",[144,121473,121474,121476],{"class":146,"line":66},[144,121475,26774],{"class":1993},[144,121477,121478],{"class":213},"        # 列出目录内容\n",[144,121480,121481,121483],{"class":146,"line":1210},[144,121482,101289],{"class":203},[144,121484,121485],{"class":213},"        # 切换目录\n",[144,121487,121488,121491],{"class":146,"line":1225},[144,121489,121490],{"class":203},"pwd",[144,121492,121493],{"class":213},"       # 显示当前路径\n",[144,121495,121496,121498],{"class":146,"line":1231},[144,121497,101279],{"class":1993},[144,121499,121500],{"class":213},"     # 创建目录\n",[144,121502,121503,121505],{"class":146,"line":1245},[144,121504,25335],{"class":1993},[144,121506,121507],{"class":213},"        # 删除文件或目录\n",[144,121509,121510,121513],{"class":146,"line":1251},[144,121511,121512],{"class":1993},"cp",[144,121514,121515],{"class":213},"        # 复制文件或目录\n",[144,121517,121518,121521],{"class":146,"line":1342},[144,121519,121520],{"class":1993},"mv",[144,121522,121523],{"class":213},"        # 移动\u002F重命名文件或目录\n",[144,121525,121526,121528],{"class":146,"line":1348},[144,121527,101296],{"class":1993},[144,121529,121530],{"class":213},"     # 创建空文件\n",[144,121532,121533,121535],{"class":146,"line":1360},[144,121534,120778],{"class":1993},[144,121536,121537],{"class":213},"       # 查看文件内容\n",[144,121539,121540,121543],{"class":146,"line":1642},[144,121541,121542],{"class":1993},"head\u002Ftail",[144,121544,121545],{"class":213}," # 查看文件头部\u002F尾部\n",[144,121547,121548],{"class":146,"line":1647},[144,121549,2430],{"emptyLinePlaceholder":72},[144,121551,121552],{"class":146,"line":1653},[144,121553,121554],{"class":213},"# 权限管理\n",[144,121556,121557,121559],{"class":146,"line":1658},[144,121558,24624],{"class":1993},[144,121560,121561],{"class":213},"     # 修改文件权限\n",[144,121563,121564,121567],{"class":146,"line":1672},[144,121565,121566],{"class":1993},"chown",[144,121568,121569],{"class":213},"     # 修改文件所有者\n",[144,121571,121572,121574],{"class":146,"line":1677},[144,121573,24589],{"class":1993},[144,121575,121576],{"class":213},"      # 以管理员身份执行\n",[144,121578,121579],{"class":146,"line":1683},[144,121580,2430],{"emptyLinePlaceholder":72},[144,121582,121583],{"class":146,"line":1704},[144,121584,121585],{"class":213},"# 系统信息\n",[144,121587,121588,121590],{"class":146,"line":1709},[144,121589,70217],{"class":1993},[144,121591,121592],{"class":213},"     # 系统信息\n",[144,121594,121595,121598],{"class":146,"line":1723},[144,121596,121597],{"class":1993},"df",[144,121599,121600],{"class":213},"        # 磁盘使用情况\n",[144,121602,121603,121606],{"class":146,"line":1728},[144,121604,121605],{"class":1993},"free",[144,121607,121608],{"class":213},"      # 内存使用情况\n",[144,121610,121611,121614],{"class":146,"line":1757},[144,121612,121613],{"class":1993},"top\u002Fhtop",[144,121615,121616],{"class":213},"  # 进程监控\n",[144,121618,121619,121622],{"class":146,"line":1762},[144,121620,121621],{"class":1993},"ps",[144,121623,121624],{"class":213},"        # 查看进程\n",[144,121626,121627],{"class":146,"line":1779},[144,121628,2430],{"emptyLinePlaceholder":72},[144,121630,121631],{"class":146,"line":1784},[144,121632,121633],{"class":213},"# 网络\n",[144,121635,121636,121639],{"class":146,"line":1789},[144,121637,121638],{"class":1993},"ping",[144,121640,121641],{"class":213},"      # 测试网络连通性\n",[144,121643,121644,121646],{"class":146,"line":1794},[144,121645,26862],{"class":1993},[144,121647,121648],{"class":213},"      # 发送 HTTP 请求\n",[144,121650,121651,121653],{"class":146,"line":1808},[144,121652,120302],{"class":1993},[144,121654,121655],{"class":213},"      # 下载文件\n",[144,121657,121658,121661],{"class":146,"line":1813},[144,121659,121660],{"class":1993},"ssh",[144,121662,121663],{"class":213},"       # 远程登录\n",[144,121665,121666,121669],{"class":146,"line":2607},[144,121667,121668],{"class":1993},"scp",[144,121670,121671],{"class":213},"       # 远程文件传输\n",[144,121673,121674],{"class":146,"line":2621},[144,121675,2430],{"emptyLinePlaceholder":72},[144,121677,121678],{"class":146,"line":2629},[144,121679,121680],{"class":213},"# 包管理（Debian\u002FUbuntu）\n",[144,121682,121683,121685,121687],{"class":146,"line":2634},[144,121684,117381],{"class":1993},[144,121686,117360],{"class":259},[144,121688,121689],{"class":213},"   # 更新软件源\n",[144,121691,121692,121694,121696],{"class":146,"line":2640},[144,121693,117381],{"class":1993},[144,121695,23866],{"class":259},[144,121697,121698],{"class":213},"  # 安装软件包\n",[144,121700,121701,121703,121705],{"class":146,"line":2646},[144,121702,117381],{"class":1993},[144,121704,26092],{"class":259},[144,121706,121707],{"class":213},"   # 卸载软件包\n",[98,121709,121710],{"start":66},[101,121711,121712],{},"KDE Dolphin 以root打开",[14,121714,121715],{},"kde5",[135,121717,121719],{"className":117309,"code":121718,"language":117311,"meta":30,"style":30},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[141,121720,121721],{"__ignoreMap":30},[144,121722,121723,121726,121729,121732,121734,121736,121739,121742,121744,121747,121749],{"class":146,"line":147},[144,121724,121725],{"class":1993},"pkexec",[144,121727,121728],{"class":259}," env",[144,121730,121731],{"class":259}," DISPLAY=",[144,121733,28156],{"class":154},[144,121735,28214],{"class":259},[144,121737,121738],{"class":154},"$XAUTHORITY ",[144,121740,121741],{"class":259},"KDE_SESSION_VERSION=",[144,121743,474],{"class":203},[144,121745,121746],{"class":259}," KDE_FULL_SESSION=",[144,121748,1393],{"class":203},[144,121750,121751],{"class":259}," dolphin\n",[14,121753,121754],{},"kde6",[135,121756,121758],{"className":117309,"code":121757,"language":117311,"meta":30,"style":30},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[141,121759,121760],{"__ignoreMap":30},[144,121761,121762,121764,121766,121768,121770,121772,121774,121776,121778,121780,121782],{"class":146,"line":147},[144,121763,121725],{"class":1993},[144,121765,121728],{"class":259},[144,121767,121731],{"class":259},[144,121769,28156],{"class":154},[144,121771,28214],{"class":259},[144,121773,121738],{"class":154},[144,121775,121741],{"class":259},[144,121777,499],{"class":203},[144,121779,121746],{"class":259},[144,121781,1393],{"class":203},[144,121783,121751],{"class":259},[5157,121785,121786],{},"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":30,"searchDepth":66,"depth":66,"links":121788},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121448,"description":23408},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121795,"title":121796,"body":121797,"description":23408,"extension":70,"meta":121811,"navigation":72,"path":121812,"seo":121813,"stem":121814,"__hash__":121815},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121798,"toc":121809},[121799,121802],[10,121800,121796],{"id":121801},"_5-各种环境配置",[14,121803,121804],{},[393,121805,121808],{"href":121806,"rel":121807},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23897],"电控组环境搭建大全",{"title":30,"searchDepth":66,"depth":66,"links":121810},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121796,"description":23408},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121817,"title":121818,"body":121819,"description":23408,"extension":70,"meta":122167,"navigation":72,"path":122168,"seo":122169,"stem":122170,"__hash__":122171},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121820,"toc":122159},[121821,121824,121828,121832,121836,121841,121848,121852,122145,122149,122156],[10,121822,121818],{"id":121823},"_6-拓展功能",[18,121825,121827],{"id":121826},"_61-wine","6.1 Wine",[18,121829,121831],{"id":121830},"_62-android","6.2 Android",[115,121833,121835],{"id":121834},"_621-i卡a卡","6.2.1 I卡、A卡",[98,121837,121838],{},[101,121839,121840],{},"Wayland-Waydroid(体验超级好)",[14,121842,121843,121844],{},"Waydroid 官网与安装指南：",[393,121845,121846],{"href":121846,"rel":121847},"https:\u002F\u002Fwaydro.id\u002F",[23897],[115,121849,121851],{"id":121850},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[98,121853,121854],{},[101,121855,121856,121857,121859,121860,121864,121866,121869,121874,122071],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53729,121858],{},"BlissOS 官网下载：",[393,121861,121862],{"href":121862,"rel":121863},"https:\u002F\u002Fblissos.org\u002F",[23897],[53729,121865],{},[28,121867],{"alt":30,"src":121868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[98,121870,121871],{"start":1210},[101,121872,121873],{},"比较推荐的配置",[135,121875,121877],{"className":117309,"code":121876,"language":117311,"meta":30,"style":30},"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",[141,121878,121879,121886,121896,121906,121916,121928,121938,121945,121955,121964,121973,121983,121993,122002,122012,122022,122034,122044,122053,122063],{"__ignoreMap":30},[144,121880,121881,121884],{"class":146,"line":147},[144,121882,121883],{"class":1993},"qemu-system-x86_64",[144,121885,24691],{"class":203},[144,121887,121888,121891,121894],{"class":146,"line":66},[144,121889,121890],{"class":203},"        -M",[144,121892,121893],{"class":259}," q35,vmport=off",[144,121895,24691],{"class":203},[144,121897,121898,121901,121904],{"class":146,"line":1210},[144,121899,121900],{"class":203},"        -accel",[144,121902,121903],{"class":259}," kvm",[144,121905,24691],{"class":203},[144,121907,121908,121911,121914],{"class":146,"line":1225},[144,121909,121910],{"class":203},"        -cpu",[144,121912,121913],{"class":259}," qemu64,+sse3,+sse4.2",[144,121915,24691],{"class":203},[144,121917,121918,121921,121924,121926],{"class":146,"line":1231},[144,121919,121920],{"class":203},"        -smp",[144,121922,121923],{"class":259}," 8,cores=",[144,121925,448],{"class":203},[144,121927,24691],{"class":203},[144,121929,121930,121933,121936],{"class":146,"line":1245},[144,121931,121932],{"class":203},"        -m",[144,121934,121935],{"class":259}," 6G",[144,121937,24691],{"class":203},[144,121939,121940,121943],{"class":146,"line":1251},[144,121941,121942],{"class":203},"        -usb",[144,121944,24691],{"class":203},[144,121946,121947,121950,121953],{"class":146,"line":1342},[144,121948,121949],{"class":203},"        -device",[144,121951,121952],{"class":259}," virtio-tablet",[144,121954,24691],{"class":203},[144,121956,121957,121959,121962],{"class":146,"line":1348},[144,121958,121949],{"class":203},[144,121960,121961],{"class":259}," virtio-keyboard",[144,121963,24691],{"class":203},[144,121965,121966,121968,121971],{"class":146,"line":1360},[144,121967,121949],{"class":203},[144,121969,121970],{"class":259}," usb-tablet",[144,121972,24691],{"class":203},[144,121974,121975,121978,121981],{"class":146,"line":1642},[144,121976,121977],{"class":203},"        -bios",[144,121979,121980],{"class":259}," OVMF-pure-efi64.fd",[144,121982,24691],{"class":203},[144,121984,121985,121988,121991],{"class":146,"line":1647},[144,121986,121987],{"class":203},"        -net",[144,121989,121990],{"class":259}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[144,121992,24691],{"class":203},[144,121994,121995,121997,122000],{"class":146,"line":1653},[144,121996,121987],{"class":203},[144,121998,121999],{"class":259}," nic,model=virtio",[144,122001,24691],{"class":203},[144,122003,122004,122007,122010],{"class":146,"line":1658},[144,122005,122006],{"class":203},"        -audio",[144,122008,122009],{"class":259}," sdl,model=hda",[144,122011,24691],{"class":203},[144,122013,122014,122017,122020],{"class":146,"line":1672},[144,122015,122016],{"class":203},"        -display",[144,122018,122019],{"class":259}," sdl,gl=on,show-cursor=on",[144,122021,24691],{"class":203},[144,122023,122024,122026,122029,122032],{"class":146,"line":1677},[144,122025,121949],{"class":203},[144,122027,122028],{"class":259}," virtio-vga-gl,xres=1920,yres=",[144,122030,122031],{"class":203},"1080",[144,122033,24691],{"class":203},[144,122035,122036,122039,122042],{"class":146,"line":1683},[144,122037,122038],{"class":203},"        -drive",[144,122040,122041],{"class":259}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[144,122043,24691],{"class":203},[144,122045,122046,122048,122051],{"class":146,"line":1704},[144,122047,122038],{"class":203},[144,122049,122050],{"class":259}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[144,122052,24691],{"class":203},[144,122054,122055,122058,122061],{"class":146,"line":1709},[144,122056,122057],{"class":203},"        -monitor",[144,122059,122060],{"class":259}," stdio",[144,122062,24691],{"class":203},[144,122064,122065,122068],{"class":146,"line":1723},[144,122066,122067],{"class":203},"        -serial",[144,122069,122070],{"class":259}," none\n",[98,122072,122073],{"start":1231},[101,122074,122075,122076],{},"常用操作：",[98,122077,122078,122081,122137],{},[101,122079,122080],{},"全屏：Ctrl+Alt+F",[101,122082,122083,122084,122089],{},"adb调试",[98,122085,122086],{},[101,122087,122088],{},"使Linux与Android用ADB连接。",[135,122090,122092],{"className":117309,"code":122091,"language":117311,"meta":30,"style":30},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[141,122093,122094,122099,122110,122115,122127,122132],{"__ignoreMap":30},[144,122095,122096],{"class":146,"line":147},[144,122097,122098],{"class":213},"# 连接安卓\n",[144,122100,122101,122104,122107],{"class":146,"line":66},[144,122102,122103],{"class":1993},"adb",[144,122105,122106],{"class":259}," connect",[144,122108,122109],{"class":203}," 127.0.0.1\n",[144,122111,122112],{"class":146,"line":1210},[144,122113,122114],{"class":213},"# 打开shell\n",[144,122116,122117,122119,122121,122124],{"class":146,"line":1225},[144,122118,122103],{"class":1993},[144,122120,26896],{"class":203},[144,122122,122123],{"class":259}," 127.0.0.1:5555",[144,122125,122126],{"class":259}," shell\n",[144,122128,122129],{"class":146,"line":1231},[144,122130,122131],{"class":213},"# 使用root权限\n",[144,122133,122134],{"class":146,"line":1245},[144,122135,122136],{"class":1993},"su\n",[101,122138,122139,122140],{},"中文输入法",[98,122141,122142],{},[101,122143,122144],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[18,122146,122148],{"id":122147},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122150,122151,122152],{},"rEFInd 官网与文档：",[393,122153,122154],{"href":122154,"rel":122155},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23897],[5157,122157,122158],{},"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":30,"searchDepth":66,"depth":66,"links":122160},[122161,122162,122166],{"id":121826,"depth":66,"text":121827},{"id":121830,"depth":66,"text":121831,"children":122163},[122164,122165],{"id":121834,"depth":1210,"text":121835},{"id":121850,"depth":1210,"text":121851},{"id":122147,"depth":66,"text":122148},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121818,"description":23408},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122173,"title":122174,"body":122175,"description":23408,"extension":70,"meta":125474,"navigation":72,"path":125475,"seo":125476,"stem":125477,"__hash__":125478},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122176,"toc":125448},[122177,122180,122184,122187,122194,122444,122447,122519,122522,122526,122530,122535,122538,122541,122544,122549,122552,122555,122558,122563,122566,122571,122574,122577,122582,122585,122590,122593,122597,122601,122604,122609,122612,122626,122629,122632,122641,122644,122653,122656,122659,122668,122671,122680,122683,122686,122695,122698,122701,122716,122719,122722,122731,122736,122739,122742,122751,122754,122763,122766,122775,122778,122787,122792,122795,122803,122808,122811,122820,122823,122831,122836,122839,122848,122851,122854,122858,122861,122866,122869,122874,122888,122893,122898,122909,122914,122920,122925,122940,122945,122948,122953,122958,122963,122971,122976,122983,122988,122999,123004,123007,123011,123014,123017,123022,123025,123044,123049,123052,123061,123066,123069,123091,123094,123124,123127,123132,123135,123149,123154,123173,123176,123179,123184,123196,123201,123206,123209,123214,123217,123232,123235,123240,123245,123249,123254,123294,123297,123301,123307,123313,123318,123321,123328,123333,123340,123343,123346,123353,123367,123370,123430,123433,123447,123459,123462,123465,123468,123532,123535,123538,123541,123561,123564,123569,123576,123580,123583,123587,123592,123597,123601,123604,123607,123649,123654,123657,123679,123694,123696,123701,123713,123773,123775,123777,123831,123833,123835,123841,123846,123849,123854,123858,123861,123923,123928,123931,123933,123937,123949,124031,124033,124035,124089,124095,124097,124101,124106,124108,124113,124117,124137,124172,124176,124179,124182,124185,124192,124195,124207,124210,124225,124228,124247,124295,124298,124315,124318,124332,124337,124340,124349,124364,124376,124414,124419,124428,124433,124438,124464,124473,124477,124481,124486,124489,124493,124497,124502,124505,124510,124513,124518,124521,124526,124529,124533,124538,124541,124546,124549,124553,124558,124561,124566,124569,124574,124577,124581,124586,124589,124594,124597,124602,124605,124609,124614,124617,124622,124625,124630,124633,124638,124641,124646,124649,124654,124657,124661,124666,124669,124674,124681,124685,124690,124693,124698,124701,124705,124710,124713,124716,124719,124722,124725,124729,124732,124742,124747,124752,124774,124779,124784,124791,124795,124800,124803,124806,124811,124814,124817,124820,124823,124826,124829,124832,124835,124838,124841,124844,124847,124852,124857,124862,124867,124872,124877,124882,124885,124889,124892,124896,124901,124906,124911,124916,124920,124926,124934,124939,124942,124947,124962,124965,124970,125004,125019,125022,125077,125103,125115,125118,125127,125130,125145,125150,125153,125159,125164,125167,125172,125175,125180,125185,125192,125195,125210,125213,125248,125253,125261,125299,125302,125305,125310,125313,125318,125329,125363,125368,125371,125380,125385,125391,125394,125399,125408,125413,125416,125419,125424,125432,125435,125440,125445],[10,122178,122174],{"id":122179},"_7-其他操作",[18,122181,122183],{"id":122182},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122185,122186],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122188,122189,122190,122193],{},"进入工控机的硬盘目录，进入",[141,122191,122192],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[135,122195,122199],{"className":122196,"code":122197,"language":122198,"meta":30,"style":30},"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",[141,122200,122201,122209,122220,122227,122234,122246,122253,122265,122276,122287,122294,122301,122308,122320,122332,122339,122351,122363,122370,122382,122394,122406,122417,122424,122435],{"__ignoreMap":30},[144,122202,122203,122206],{"class":146,"line":147},[144,122204,122205],{"class":51313},"network",[144,122207,122208],{"class":154},": \n",[144,122210,122211,122214,122216,122218],{"class":146,"line":66},[144,122212,122213],{"class":51313},"  version",[144,122215,51450],{"class":154},[144,122217,232],{"class":203},[144,122219,2704],{"class":154},[144,122221,122222,122225],{"class":146,"line":1210},[144,122223,122224],{"class":51313},"  wifis",[144,122226,122208],{"class":154},[144,122228,122229,122232],{"class":146,"line":1225},[144,122230,122231],{"class":51313},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[144,122233,122208],{"class":154},[144,122235,122236,122239,122241,122244],{"class":146,"line":1231},[144,122237,122238],{"class":51313},"      renderer",[144,122240,51450],{"class":154},[144,122242,122243],{"class":259},"NetworkManager",[144,122245,2704],{"class":154},[144,122247,122248,122251],{"class":146,"line":1245},[144,122249,122250],{"class":51313},"      match",[144,122252,122208],{"class":154},[144,122254,122255,122258,122260,122263],{"class":146,"line":1251},[144,122256,122257],{"class":51313},"        name",[144,122259,51450],{"class":154},[144,122261,122262],{"class":259},"\"wlan0\"",[144,122264,2704],{"class":154},[144,122266,122267,122270,122272,122274],{"class":146,"line":1342},[144,122268,122269],{"class":51313},"      dhcp4",[144,122271,51450],{"class":154},[144,122273,1393],{"class":203},[144,122275,2704],{"class":154},[144,122277,122278,122281,122283,122285],{"class":146,"line":1348},[144,122279,122280],{"class":51313},"      dhcp6",[144,122282,51450],{"class":154},[144,122284,1393],{"class":203},[144,122286,2704],{"class":154},[144,122288,122289,122292],{"class":146,"line":1360},[144,122290,122291],{"class":51313},"      access-points",[144,122293,122208],{"class":154},[144,122295,122296,122299],{"class":146,"line":1642},[144,122297,122298],{"class":259},"        \"EMIS_Vinci_Robocon_5G\"",[144,122300,122208],{"class":154},[144,122302,122303,122306],{"class":146,"line":1647},[144,122304,122305],{"class":51313},"          auth",[144,122307,122208],{"class":154},[144,122309,122310,122313,122315,122318],{"class":146,"line":1653},[144,122311,122312],{"class":51313},"            key-management",[144,122314,51450],{"class":154},[144,122316,122317],{"class":259},"\"psk\"",[144,122319,2704],{"class":154},[144,122321,122322,122325,122327,122330],{"class":146,"line":1658},[144,122323,122324],{"class":51313},"            password",[144,122326,51450],{"class":154},[144,122328,122329],{"class":259},"\"vinci666\"",[144,122331,2704],{"class":154},[144,122333,122334,122337],{"class":146,"line":1672},[144,122335,122336],{"class":51313},"          networkmanager",[144,122338,122208],{"class":154},[144,122340,122341,122344,122346,122349],{"class":146,"line":1677},[144,122342,122343],{"class":51313},"            uuid",[144,122345,51450],{"class":154},[144,122347,122348],{"class":259},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[144,122350,2704],{"class":154},[144,122352,122353,122356,122358,122361],{"class":146,"line":1683},[144,122354,122355],{"class":51313},"            name",[144,122357,51450],{"class":154},[144,122359,122360],{"class":259},"\"EMIS_Vinci_Robocon_5G\"",[144,122362,2704],{"class":154},[144,122364,122365,122368],{"class":146,"line":1704},[144,122366,122367],{"class":51313},"            passthrough",[144,122369,122208],{"class":154},[144,122371,122372,122375,122377,122380],{"class":146,"line":1709},[144,122373,122374],{"class":51313},"              wifi-security.auth-alg",[144,122376,51450],{"class":154},[144,122378,122379],{"class":259},"\"open\"",[144,122381,2704],{"class":154},[144,122383,122384,122387,122389,122392],{"class":146,"line":1723},[144,122385,122386],{"class":51313},"              ipv6.addr-gen-mode",[144,122388,51450],{"class":154},[144,122390,122391],{"class":259},"\"default\"",[144,122393,2704],{"class":154},[144,122395,122396,122399,122401,122404],{"class":146,"line":1728},[144,122397,122398],{"class":51313},"              ipv6.ip6-privacy",[144,122400,51450],{"class":154},[144,122402,122403],{"class":259},"\"-1\"",[144,122405,2704],{"class":154},[144,122407,122408,122411,122413,122415],{"class":146,"line":1757},[144,122409,122410],{"class":51313},"              proxy._",[144,122412,51450],{"class":154},[144,122414,7683],{"class":259},[144,122416,2704],{"class":154},[144,122418,122419,122422],{"class":146,"line":1762},[144,122420,122421],{"class":51313},"      networkmanager",[144,122423,122208],{"class":154},[144,122425,122426,122429,122431,122433],{"class":146,"line":1779},[144,122427,122428],{"class":51313},"        uuid",[144,122430,51450],{"class":154},[144,122432,122348],{"class":259},[144,122434,2704],{"class":154},[144,122436,122437,122439,122441],{"class":146,"line":1784},[144,122438,122257],{"class":51313},[144,122440,51450],{"class":154},[144,122442,122443],{"class":259},"\"EMIS_Vinci_Robocon_5G\"\n",[14,122445,122446],{},"将其改为新wifi的名和密码：",[135,122448,122450],{"className":122196,"code":122449,"language":122198,"meta":30,"style":30},"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",[141,122451,122452,122458,122467,122473,122480,122489,122497,122503,122509],{"__ignoreMap":30},[144,122453,122454,122456],{"class":146,"line":147},[144,122455,122205],{"class":51313},[144,122457,3769],{"class":154},[144,122459,122460,122462,122464],{"class":146,"line":66},[144,122461,122213],{"class":51313},[144,122463,51450],{"class":154},[144,122465,122466],{"class":203},"2\n",[144,122468,122469,122471],{"class":146,"line":1210},[144,122470,122224],{"class":51313},[144,122472,3769],{"class":154},[144,122474,122475,122478],{"class":146,"line":1225},[144,122476,122477],{"class":51313},"    wlan0",[144,122479,3769],{"class":154},[144,122481,122482,122484,122486],{"class":146,"line":1231},[144,122483,122269],{"class":51313},[144,122485,51450],{"class":154},[144,122487,122488],{"class":203},"true\n",[144,122490,122491,122493,122495],{"class":146,"line":1245},[144,122492,122280],{"class":51313},[144,122494,51450],{"class":154},[144,122496,122488],{"class":203},[144,122498,122499,122501],{"class":146,"line":1251},[144,122500,122291],{"class":51313},[144,122502,3769],{"class":154},[144,122504,122505,122507],{"class":146,"line":1342},[144,122506,122298],{"class":259},[144,122508,3769],{"class":154},[144,122510,122511,122514,122516],{"class":146,"line":1348},[144,122512,122513],{"class":51313},"          password",[144,122515,51450],{"class":154},[144,122517,122518],{"class":259},"\"vinci666\"\n",[14,122520,122521],{},"工控机开机即可连上网。",[18,122523,122525],{"id":122524},"_72-ssh远程开发","7.2 SSH远程开发",[115,122527,122529],{"id":122528},"_721-环境准备","7.2.1 环境准备",[14,122531,122532],{},[304,122533,122534],{},"1.硬件准备",[14,122536,122537],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,122539,122540],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,122542,122543],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,122545,122546],{},[304,122547,122548],{},"2.设置固定IP",[14,122550,122551],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,122553,122554],{},"1.进入设置界面",[14,122556,122557],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,122559,122560],{},[28,122561],{"alt":30,"src":122562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,122564,122565],{},"2.配置所连接的网络",[14,122567,122568],{},[28,122569],{"alt":30,"src":122570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,122572,122573],{},"3.设置固定IP",[14,122575,122576],{},"查看当前IP地址。",[14,122578,122579],{},[28,122580],{"alt":30,"src":122581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,122583,122584],{},"设置固定IP。",[14,122586,122587],{},[28,122588],{"alt":30,"src":122589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,122591,122592],{},"至此，IP配置完毕。",[115,122594,122596],{"id":122595},"_722-环境搭建","7.2.2 环境搭建",[14,122598,122599],{},[304,122600,25766],{},[14,122602,122603],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,122605,122606],{},[304,122607,122608],{},"实现",[14,122610,122611],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[98,122613,122614,122617,122620,122623],{},[101,122615,122616],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[101,122618,122619],{},"远程主机启动SSH服务；",[101,122621,122622],{},"本地主机登陆远程主机；",[101,122624,122625],{},"实现数据传输。",[14,122627,122628],{},"1.安装SSH客户端与服务端",[14,122630,122631],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[135,122633,122635],{"className":120829,"code":122634,"language":120831,"meta":120832,"style":30}," sudo apt install openssh-server\n",[141,122636,122637],{"__ignoreMap":30},[144,122638,122639],{"class":146,"line":147},[144,122640,122634],{},[14,122642,122643],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[135,122645,122647],{"className":120829,"code":122646,"language":120831,"meta":120832,"style":30},"sudo apt install openssh-client\n",[141,122648,122649],{"__ignoreMap":30},[144,122650,122651],{"class":146,"line":147},[144,122652,122646],{},[14,122654,122655],{},"2.远程主机启动SSH服务",[14,122657,122658],{},"远程主机启动 ssh 服务命令如下：",[135,122660,122662],{"className":120829,"code":122661,"language":120831,"meta":120832,"style":30},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[141,122663,122664],{"__ignoreMap":30},[144,122665,122666],{"class":146,"line":147},[144,122667,122661],{},[14,122669,122670],{},"启动后可使用如下命令查看服务是否正常运行：",[135,122672,122674],{"className":120829,"code":122673,"language":120831,"meta":120832,"style":30},"ps -e | grep ssh\n",[141,122675,122676],{"__ignoreMap":30},[144,122677,122678],{"class":146,"line":147},[144,122679,122673],{},[14,122681,122682],{},"如果启动成功，会包含 sshd 程序。",[14,122684,122685],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[135,122687,122689],{"className":120829,"code":122688,"language":120831,"meta":120832,"style":30},"sudo systemctl enable ssh\n",[141,122690,122691],{"__ignoreMap":30},[144,122692,122693],{"class":146,"line":147},[144,122694,122688],{},[14,122696,122697],{},"3.本地远程登录",[14,122699,122700],{},"登录远程主机可以调用如下命令:",[135,122702,122704],{"className":117309,"code":122703,"language":117311,"meta":30,"style":30},"ssh -X 用户名@ip地址\n",[141,122705,122706],{"__ignoreMap":30},[144,122707,122708,122710,122713],{"class":146,"line":147},[144,122709,121660],{"class":1993},[144,122711,122712],{"class":203}," -X",[144,122714,122715],{"class":259}," 用户名@ip地址\n",[14,122717,122718],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,122720,122721],{},"如果退出，可以调用exit命令：",[135,122723,122725],{"className":120829,"code":122724,"language":120831,"meta":120832,"style":30},"exit\n",[141,122726,122727],{"__ignoreMap":30},[144,122728,122729],{"class":146,"line":147},[144,122730,122724],{},[14,122732,122733],{},[304,122734,122735],{},"4.实现数据传输",[14,122737,122738],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,122740,122741],{},"上传文件指令格式如下：",[135,122743,122745],{"className":120829,"code":122744,"language":120831,"meta":120832,"style":30},"scp 本地文件路径 账号@ip:路径\n",[141,122746,122747],{"__ignoreMap":30},[144,122748,122749],{"class":146,"line":147},[144,122750,122744],{},[14,122752,122753],{},"上传文件夹指令格式如下：",[135,122755,122757],{"className":120829,"code":122756,"language":120831,"meta":120832,"style":30},"scp -r 本地文件夹路径 账号@ip:路径\n",[141,122758,122759],{"__ignoreMap":30},[144,122760,122761],{"class":146,"line":147},[144,122762,122756],{},[14,122764,122765],{},"下载文件指令格式如下：",[135,122767,122769],{"className":120829,"code":122768,"language":120831,"meta":120832,"style":30},"scp 账号@ip:路径 本地文件夹路径\n",[141,122770,122771],{"__ignoreMap":30},[144,122772,122773],{"class":146,"line":147},[144,122774,122768],{},[14,122776,122777],{},"下载文件夹指令格式如下：",[135,122779,122781],{"className":120829,"code":122780,"language":120831,"meta":120832,"style":30},"scp -r 账号@ip:路径 本地文件夹路径\n",[141,122782,122783],{"__ignoreMap":30},[144,122784,122785],{"class":146,"line":147},[144,122786,122780],{},[14,122788,122789],{},[304,122790,122791],{},"优化",[14,122793,122794],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[98,122796,122797,122800],{},[101,122798,122799],{},"本地生成密钥对；",[101,122801,122802],{},"将公钥上传至远程主机。",[14,122804,122805],{},[304,122806,122807],{},"1.生成密钥对",[14,122809,122810],{},"本地客户端生成公私钥：（一路回车默认即可）",[135,122812,122814],{"className":120829,"code":122813,"language":120831,"meta":120832,"style":30},"ssh-keygen\n",[141,122815,122816],{"__ignoreMap":30},[144,122817,122818],{"class":146,"line":147},[144,122819,122813],{},[14,122821,122822],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[98,122824,122825,122828],{},[101,122826,122827],{},"id_rsa （私钥）；",[101,122829,122830],{},"id_rsa.pub (公钥)。",[14,122832,122833],{},[304,122834,122835],{},"2.公钥上传",[14,122837,122838],{},"上传指令如下：",[135,122840,122842],{"className":120829,"code":122841,"language":120831,"meta":120832,"style":30},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[141,122843,122844],{"__ignoreMap":30},[144,122845,122846],{"class":146,"line":147},[144,122847,122841],{},[14,122849,122850],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,122852,122853],{},"以后再远程登录就无需录入密码了。",[115,122855,122857],{"id":122856},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,122859,122860],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,122862,122863],{},[304,122864,122865],{},"1.准备工作",[14,122867,122868],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,122870,122871],{},[304,122872,122873],{},"2.为VScode安装远程开发插件",[14,122875,122876,122877,122880,122881,122884,122885,28398],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[141,122878,122879],{},"扩展：商店","的搜索栏输入",[141,122882,122883],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[141,122886,122887],{},"安装",[14,122889,122890],{},[28,122891],{"alt":30,"src":122892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,122894,122895],{},[304,122896,122897],{},"3.配置远程连接",[14,122899,122900,122901,122904,122905,122908],{},"步骤1：使用快捷键",[141,122902,122903],{},"ctrl + shift + p","打开命令输入窗口，并输入",[141,122906,122907],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,122910,122911],{},[28,122912],{"alt":30,"src":122913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,122915,122916,122917,28398],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[141,122918,122919],{},"Add New SSH Host",[14,122921,122922],{},[28,122923],{"alt":30,"src":122924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,122926,122927,122928,122931,122932,122935,122936,122939],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[141,122929,122930],{},"ssh +X ubuntu@192.168.43.164","，其中，",[141,122933,122934],{},"ubuntu","需要替换为你的登录用户名，",[141,122937,122938],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,122941,122942],{},[28,122943],{"alt":30,"src":122944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,122946,122947],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,122949,122950],{},[28,122951],{"alt":30,"src":122952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,122954,122955],{},[28,122956],{"alt":30,"src":122957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,122959,122960],{},[304,122961,122962],{},"4.使用",[14,122964,122965,122966,122904,122968,122970],{},"步骤1：继续使用快捷键",[141,122967,122903],{},[141,122969,122907],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,122972,122973],{},[28,122974],{"alt":30,"src":122975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,122977,122978,122979,122982],{},"或者，也可以点击侧边栏的",[141,122980,122981],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,122984,122985],{},[28,122986],{"alt":30,"src":122987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,122989,122990,122991,122994,122995,122998],{},"步骤2：选择菜单栏的",[141,122992,122993],{},"文件","下的",[141,122996,122997],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,123000,123001],{},[28,123002],{"alt":30,"src":123003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,123005,123006],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[18,123008,123010],{"id":123009},"_73-远程桌面","7.3 远程桌面",[14,123012,123013],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,123015,123016],{},"我们选择使用VNC来看。",[98,123018,123019],{},[101,123020,123021],{},"安装VNC服务器：",[14,123023,123024],{},"这里以TigerVNC为例进行安装：",[135,123026,123028],{"className":117309,"code":123027,"language":117311,"meta":30,"style":30},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[141,123029,123030],{"__ignoreMap":30},[144,123031,123032,123034,123036,123038,123041],{"class":146,"line":147},[144,123033,24589],{"class":1993},[144,123035,117330],{"class":259},[144,123037,23866],{"class":259},[144,123039,123040],{"class":259}," tigervnc-standalone-server",[144,123042,123043],{"class":259}," tigervnc-common\n",[98,123045,123046],{"start":66},[101,123047,123048],{},"设置VNC密码：",[14,123050,123051],{},"为VNC用户设置密码，运行以下命令：",[135,123053,123055],{"className":117309,"code":123054,"language":117311,"meta":30,"style":30},"vncpasswd\n",[141,123056,123057],{"__ignoreMap":30},[144,123058,123059],{"class":146,"line":147},[144,123060,123054],{"class":1993},[98,123062,123063],{"start":1210},[101,123064,123065],{},"配置VNC启动脚本:",[14,123067,123068],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[135,123070,123072],{"className":117309,"code":123071,"language":117311,"meta":30,"style":30},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[141,123073,123074,123083],{"__ignoreMap":30},[144,123075,123076,123078,123080],{"class":146,"line":147},[144,123077,101279],{"class":1993},[144,123079,29229],{"class":203},[144,123081,123082],{"class":259}," ~\u002F.vnc\n",[144,123084,123085,123088],{"class":146,"line":66},[144,123086,123087],{"class":1993},"nano",[144,123089,123090],{"class":259}," ~\u002F.vnc\u002Fxstartup\n",[14,123092,123093],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[135,123095,123097],{"className":117309,"code":123096,"language":117311,"meta":30,"style":30},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[141,123098,123099,123104,123112,123119],{"__ignoreMap":30},[144,123100,123101],{"class":146,"line":147},[144,123102,123103],{"class":213},"#!\u002Fbin\u002Fsh\n",[144,123105,123106,123109],{"class":146,"line":66},[144,123107,123108],{"class":203},"unset",[144,123110,123111],{"class":259}," SESSION_MANAGER\n",[144,123113,123114,123116],{"class":146,"line":1210},[144,123115,123108],{"class":203},[144,123117,123118],{"class":259}," DBUS_SESSION_BUS_ADDRESS\n",[144,123120,123121],{"class":146,"line":1225},[144,123122,123123],{"class":1993},"gnome-session\n",[14,123125,123126],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[98,123128,123129],{"start":1225},[101,123130,123131],{},"给予执行权限：",[14,123133,123134],{},"为xstartup文件设置执行权限：",[135,123136,123138],{"className":117309,"code":123137,"language":117311,"meta":30,"style":30},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[141,123139,123140],{"__ignoreMap":30},[144,123141,123142,123144,123147],{"class":146,"line":147},[144,123143,24624],{"class":1993},[144,123145,123146],{"class":259}," +x",[144,123148,123090],{"class":259},[98,123150,123151],{"start":1231},[101,123152,123153],{},"启动VNC服务器：",[135,123155,123157],{"className":117309,"code":123156,"language":117311,"meta":30,"style":30},"vncserver -geometry 1920x1080 -localhost=0\n",[141,123158,123159],{"__ignoreMap":30},[144,123160,123161,123164,123167,123170],{"class":146,"line":147},[144,123162,123163],{"class":1993},"vncserver",[144,123165,123166],{"class":203}," -geometry",[144,123168,123169],{"class":259}," 1920x1080",[144,123171,123172],{"class":203}," -localhost=0\n",[14,123174,123175],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123177,123178],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[98,123180,123181],{"start":1245},[101,123182,123183],{},"查看已开启的VNC服务器：",[135,123185,123187],{"className":117309,"code":123186,"language":117311,"meta":30,"style":30},"vncserver -list\n",[141,123188,123189],{"__ignoreMap":30},[144,123190,123191,123193],{"class":146,"line":147},[144,123192,123163],{"class":1993},[144,123194,123195],{"class":203}," -list\n",[14,123197,123198],{},[28,123199],{"alt":30,"src":123200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[98,123202,123203],{"start":1251},[101,123204,123205],{},"连接到VNC服务器：",[14,123207,123208],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[98,123210,123211],{"start":1342},[101,123212,123213],{},"停止VNC服务器：",[14,123215,123216],{},"如果需要停止VNC服务器，可以使用以下命令：",[135,123218,123220],{"className":117309,"code":123219,"language":117311,"meta":30,"style":30},"vncserver -kill :1\n",[141,123221,123222],{"__ignoreMap":30},[144,123223,123224,123226,123229],{"class":146,"line":147},[144,123225,123163],{"class":1993},[144,123227,123228],{"class":203}," -kill",[144,123230,123231],{"class":259}," :1\n",[14,123233,123234],{},"将:1替换为你实际使用的显示编号。",[14,123236,123237],{},[28,123238],{"alt":30,"src":123239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123241,123242],{},[28,123243],{"alt":30,"src":123244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[18,123246,123248],{"id":123247},"_74-usb端口设置","7.4 USB端口设置",[14,123250,123251],{},[304,123252,123253],{},"首先先配置好权限",[135,123255,123257],{"className":117309,"code":123256,"language":117311,"meta":30,"style":30},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[141,123258,123259,123264,123277,123284,123289],{"__ignoreMap":30},[144,123260,123261],{"class":146,"line":147},[144,123262,123263],{"class":213},"# 将用户权限提高\n",[144,123265,123266,123268,123270,123272,123275],{"class":146,"line":66},[144,123267,24589],{"class":1993},[144,123269,26587],{"class":259},[144,123271,26590],{"class":203},[144,123273,123274],{"class":259}," dialout",[144,123276,26595],{"class":154},[144,123278,123279,123281],{"class":146,"line":1210},[144,123280,26614],{"class":1993},[144,123282,123283],{"class":259}," dialout\n",[144,123285,123286],{"class":146,"line":1225},[144,123287,123288],{"class":213},"# 查看下面命令是否输出dialout（若输出才正常）\n",[144,123290,123291],{"class":146,"line":1231},[144,123292,123293],{"class":1993},"groups\n",[14,123295,123296],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[115,123298,123300],{"id":123299},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123302,123303,123306],{},[304,123304,123305],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123308,123309,123312],{},[304,123310,123311],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123314,123315],{},[304,123316,123317],{},"流程如下：",[14,123319,123320],{},"（1）.查找设备idVendor和idProduct",[14,123322,123323,123324,123327],{},"接入两个USB设备，在终端调用指令",[141,123325,123326],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123329,123330],{},[28,123331],{"alt":30,"src":123332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123334,123335,123336,123339],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[141,123337,123338],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123341,123342],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123344,123345],{},"（2）.编写映射规则",[14,123347,123348,123349,123352],{},"在",[141,123350,123351],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[135,123354,123356],{"className":117309,"code":123355,"language":117311,"meta":30,"style":30},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[141,123357,123358],{"__ignoreMap":30},[144,123359,123360,123362,123364],{"class":146,"line":147},[144,123361,24589],{"class":1993},[144,123363,118596],{"class":259},[144,123365,123366],{"class":259}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123368,123369],{},"输入如下内容：",[135,123371,123373],{"className":117309,"code":123372,"language":117311,"meta":30,"style":30},"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",[141,123374,123375,123405],{"__ignoreMap":30},[144,123376,123377,123380,123382,123385,123388,123391,123394,123396,123399,123402],{"class":146,"line":147},[144,123378,123379],{"class":154},"KERNEL",[144,123381,200],{"class":150},[144,123383,123384],{"class":259},"=\"ttyUSB*\",",[144,123386,123387],{"class":1993}," ATTRS",[144,123389,123390],{"class":259},"{idVendor}==",[144,123392,123393],{"class":1993},"\"10c4\"",[144,123395,533],{"class":1993},[144,123397,123398],{"class":259}," ATTRS{idProduct}==\"ea60\",",[144,123400,123401],{"class":259}," MODE:=\"0777\",",[144,123403,123404],{"class":259}," SYMLINK+=\"mylidar\"\n",[144,123406,123407,123409,123411,123413,123415,123417,123420,123422,123425,123427],{"class":146,"line":66},[144,123408,123379],{"class":154},[144,123410,200],{"class":150},[144,123412,123384],{"class":259},[144,123414,123387],{"class":1993},[144,123416,123390],{"class":259},[144,123418,123419],{"class":1993},"\"1a86\"",[144,123421,533],{"class":1993},[144,123423,123424],{"class":259}," ATTRS{idProduct}==\"7523\",",[144,123426,123401],{"class":259},[144,123428,123429],{"class":259}," SYMLINK+=\"mycar\"\n",[14,123431,123432],{},"代码解释：",[1162,123434,123435,123438,123441,123444],{},[101,123436,123437],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[101,123439,123440],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[101,123442,123443],{},"SYMLINK是符号连接，即绑定的别名；",[101,123445,123446],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,123448,123449,123450,123453,123456],{},"***小提示：***",[23585,123451,123452],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[141,123454,123455],{},"\u002Fetc\u002Fudev\u002Frule.d",[23585,123457,123458],{},"目录即可。",[14,123460,123461],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,123463,123464],{},"（3）.使规则生效",[14,123466,123467],{},"在终端下输入如下指令：",[135,123469,123471],{"className":117309,"code":123470,"language":117311,"meta":30,"style":30},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[141,123472,123473,123478,123490,123501,123505,123510,123523],{"__ignoreMap":30},[144,123474,123475],{"class":146,"line":147},[144,123476,123477],{"class":213},"# Ubuntu用下方命令\n",[144,123479,123480,123482,123484,123487],{"class":146,"line":66},[144,123481,24589],{"class":1993},[144,123483,120061],{"class":259},[144,123485,123486],{"class":259}," udev",[144,123488,123489],{"class":259}," reload\n",[144,123491,123492,123494,123496,123498],{"class":146,"line":1210},[144,123493,24589],{"class":1993},[144,123495,120061],{"class":259},[144,123497,123486],{"class":259},[144,123499,123500],{"class":259}," restart\n",[144,123502,123503],{"class":146,"line":1225},[144,123504,2430],{"emptyLinePlaceholder":72},[144,123506,123507],{"class":146,"line":1231},[144,123508,123509],{"class":213},"#Fedora用下方命令\n",[144,123511,123512,123514,123517,123520],{"class":146,"line":1245},[144,123513,24589],{"class":1993},[144,123515,123516],{"class":259}," udevadm",[144,123518,123519],{"class":259}," control",[144,123521,123522],{"class":203}," --reload\n",[144,123524,123525,123527,123529],{"class":146,"line":1251},[144,123526,24589],{"class":1993},[144,123528,123516],{"class":259},[144,123530,123531],{"class":259}," trigger\n",[14,123533,123534],{},"再重新插拔设备即可。",[14,123536,123537],{},"（4）.测试",[14,123539,123540],{},"终端下输入如下指令",[135,123542,123544],{"className":117309,"code":123543,"language":117311,"meta":30,"style":30},"ll \u002Fdev | grep ttyUSB\n",[141,123545,123546],{"__ignoreMap":30},[144,123547,123548,123551,123554,123556,123558],{"class":146,"line":147},[144,123549,123550],{"class":1993},"ll",[144,123552,123553],{"class":259}," \u002Fdev",[144,123555,25122],{"class":150},[144,123557,30249],{"class":1993},[144,123559,123560],{"class":259}," ttyUSB\n",[14,123562,123563],{},"运行结果如下：",[14,123565,123566],{},[28,123567],{"alt":30,"src":123568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,123570,123571,123572,123575],{},"也可以多次插拔USB设备，会发现设备端口",[141,123573,123574],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,123577,123578],{},[304,123579,117977],{},[14,123581,123582],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[115,123584,123586],{"id":123585},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,123588,123589,123591],{},[304,123590,123305],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,123593,123594,123596],{},[304,123595,123311],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,123598,123599],{},[304,123600,123317],{},[14,123602,123603],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,123605,123606],{},"调用如下指令查看第一台雷达的USB信息：",[135,123608,123610],{"className":117309,"code":123609,"language":117311,"meta":30,"style":30},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[141,123611,123612,123632],{"__ignoreMap":30},[144,123613,123614,123617,123619,123622,123625,123627,123629],{"class":146,"line":147},[144,123615,123616],{"class":1993},"udevadm",[144,123618,69834],{"class":259},[144,123620,123621],{"class":203}," --attribute-walk",[144,123623,123624],{"class":203}," --name=\u002Fdev\u002FttyUSB0",[144,123626,25122],{"class":150},[144,123628,30249],{"class":1993},[144,123630,123631],{"class":259}," KERNELS\n",[144,123633,123634,123636,123638,123640,123643,123645,123647],{"class":146,"line":66},[144,123635,123616],{"class":1993},[144,123637,69834],{"class":259},[144,123639,123621],{"class":203},[144,123641,123642],{"class":203}," --name=\u002Fdev\u002FttyACM0",[144,123644,25122],{"class":150},[144,123646,30249],{"class":1993},[144,123648,123631],{"class":259},[14,123650,123651],{},[28,123652],{"alt":30,"src":123653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,123655,123656],{},"调用如下指令查看第二台雷达的USB信息：",[135,123658,123660],{"className":117309,"code":123659,"language":117311,"meta":30,"style":30},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[141,123661,123662],{"__ignoreMap":30},[144,123663,123664,123666,123668,123670,123673,123675,123677],{"class":146,"line":147},[144,123665,123616],{"class":1993},[144,123667,69834],{"class":259},[144,123669,123621],{"class":203},[144,123671,123672],{"class":203}," --name=\u002Fdev\u002FttyUSB1",[144,123674,25122],{"class":150},[144,123676,30249],{"class":1993},[144,123678,123631],{"class":259},[14,123680,123681,123682,123685,123686,123689,123690,123693],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[141,123683,123684],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[141,123687,123688],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[304,123691,123692],{},"唯一性标识","”。",[14,123695,123345],{},[14,123697,123348,123698,123700],{},[141,123699,123351],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[135,123702,123703],{"className":117309,"code":123355,"language":117311,"meta":30,"style":30},[141,123704,123705],{"__ignoreMap":30},[144,123706,123707,123709,123711],{"class":146,"line":147},[144,123708,24589],{"class":1993},[144,123710,118596],{"class":259},[144,123712,123366],{"class":259},[135,123714,123716],{"className":117309,"code":123715,"language":117311,"meta":30,"style":30},"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",[141,123717,123718,123747],{"__ignoreMap":30},[144,123719,123720,123722,123724,123726,123729,123731,123734,123737,123739,123742,123744],{"class":146,"line":147},[144,123721,123379],{"class":154},[144,123723,200],{"class":150},[144,123725,123384],{"class":259},[144,123727,123728],{"class":154}," KERNELS",[144,123730,200],{"class":150},[144,123732,123733],{"class":259},"=\"1-1.3:1.0\",",[144,123735,123736],{"class":1993}," MODE:",[144,123738,200],{"class":259},[144,123740,123741],{"class":1993},"\"0777\"",[144,123743,533],{"class":1993},[144,123745,123746],{"class":259}," SYMLINK+=\"rplidar_front\"\n",[144,123748,123749,123751,123753,123755,123757,123759,123762,123764,123766,123768,123770],{"class":146,"line":66},[144,123750,123379],{"class":154},[144,123752,200],{"class":150},[144,123754,123384],{"class":259},[144,123756,123728],{"class":154},[144,123758,200],{"class":150},[144,123760,123761],{"class":259},"=\"1-1.4:1.0\",",[144,123763,123736],{"class":1993},[144,123765,200],{"class":259},[144,123767,123741],{"class":1993},[144,123769,533],{"class":1993},[144,123771,123772],{"class":259}," SYMLINK+=\"rplidar_back\"\n",[14,123774,123464],{},[14,123776,123467],{},[135,123778,123779],{"className":117309,"code":123470,"language":117311,"meta":30,"style":30},[141,123780,123781,123785,123795,123805,123809,123813,123823],{"__ignoreMap":30},[144,123782,123783],{"class":146,"line":147},[144,123784,123477],{"class":213},[144,123786,123787,123789,123791,123793],{"class":146,"line":66},[144,123788,24589],{"class":1993},[144,123790,120061],{"class":259},[144,123792,123486],{"class":259},[144,123794,123489],{"class":259},[144,123796,123797,123799,123801,123803],{"class":146,"line":1210},[144,123798,24589],{"class":1993},[144,123800,120061],{"class":259},[144,123802,123486],{"class":259},[144,123804,123500],{"class":259},[144,123806,123807],{"class":146,"line":1225},[144,123808,2430],{"emptyLinePlaceholder":72},[144,123810,123811],{"class":146,"line":1231},[144,123812,123509],{"class":213},[144,123814,123815,123817,123819,123821],{"class":146,"line":1245},[144,123816,24589],{"class":1993},[144,123818,123516],{"class":259},[144,123820,123519],{"class":259},[144,123822,123522],{"class":203},[144,123824,123825,123827,123829],{"class":146,"line":1251},[144,123826,24589],{"class":1993},[144,123828,123516],{"class":259},[144,123830,123531],{"class":259},[14,123832,123534],{},[14,123834,123537],{},[14,123836,123540,123837,123840],{},[141,123838,123839],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,123842,123843],{},[28,123844],{"alt":30,"src":123845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,123847,123848],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,123850,123851,123853],{},[304,123852,117977],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[115,123855,123857],{"id":123856},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,123859,123860],{},"（1）.查看所连接的主机USB接口的信息",[135,123862,123864],{"className":117309,"code":123863,"language":117311,"meta":30,"style":30},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[141,123865,123866,123896],{"__ignoreMap":30},[144,123867,123868,123870,123872,123875,123877,123879,123881,123883,123886,123889,123891,123894],{"class":146,"line":147},[144,123869,123616],{"class":1993},[144,123871,69834],{"class":259},[144,123873,123874],{"class":203}," -a",[144,123876,29229],{"class":203},[144,123878,28435],{"class":154},[144,123880,123616],{"class":1993},[144,123882,69834],{"class":259},[144,123884,123885],{"class":203}," -q",[144,123887,123888],{"class":259}," path",[144,123890,25128],{"class":203},[144,123892,123893],{"class":259}," \u002Fdev\u002FttyACM0",[144,123895,161],{"class":154},[144,123897,123898,123900,123902,123904,123906,123908,123910,123912,123914,123916,123918,123921],{"class":146,"line":66},[144,123899,123616],{"class":1993},[144,123901,69834],{"class":259},[144,123903,123874],{"class":203},[144,123905,29229],{"class":203},[144,123907,28435],{"class":154},[144,123909,123616],{"class":1993},[144,123911,69834],{"class":259},[144,123913,123885],{"class":203},[144,123915,123888],{"class":259},[144,123917,25128],{"class":203},[144,123919,123920],{"class":259}," \u002Fdev\u002FttyUSB0",[144,123922,161],{"class":154},[14,123924,123925],{},[28,123926],{"alt":30,"src":123927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,123929,123930],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,123932,123345],{},[14,123934,123348,123935,123700],{},[141,123936,123351],{},[135,123938,123939],{"className":117309,"code":123355,"language":117311,"meta":30,"style":30},[141,123940,123941],{"__ignoreMap":30},[144,123942,123943,123945,123947],{"class":146,"line":147},[144,123944,24589],{"class":1993},[144,123946,118596],{"class":259},[144,123948,123366],{"class":259},[135,123950,123952],{"className":117309,"code":123951,"language":117311,"meta":30,"style":30},"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",[141,123953,123954,123982,124008],{"__ignoreMap":30},[144,123955,123956,123958,123960,123963,123965,123967,123969,123971,123974,123977,123979],{"class":146,"line":147},[144,123957,123379],{"class":154},[144,123959,200],{"class":150},[144,123961,123962],{"class":259},"=\"ttyACM*\",",[144,123964,123387],{"class":1993},[144,123966,123390],{"class":259},[144,123968,123419],{"class":1993},[144,123970,533],{"class":1993},[144,123972,123973],{"class":259}," ATTRS{idProduct}==\"55d4\",",[144,123975,123976],{"class":259}," ATTRS{serial}==\"0001\",",[144,123978,123401],{"class":259},[144,123980,123981],{"class":259}," SYMLINK+=\"ttyACM_MCU\"\n",[144,123983,123984,123986,123988,123990,123992,123994,123996,123998,124000,124003,124005],{"class":146,"line":66},[144,123985,123379],{"class":154},[144,123987,200],{"class":150},[144,123989,123962],{"class":259},[144,123991,123387],{"class":1993},[144,123993,123390],{"class":259},[144,123995,123419],{"class":1993},[144,123997,533],{"class":1993},[144,123999,123973],{"class":259},[144,124001,124002],{"class":259}," ATTRS{serial}==\"0002\",",[144,124004,123401],{"class":259},[144,124006,124007],{"class":259}," SYMLINK+=\"ttyACM_Lidar\"\n",[144,124009,124010,124012,124014,124016,124018,124020,124022,124024,124026,124028],{"class":146,"line":1210},[144,124011,123379],{"class":154},[144,124013,200],{"class":150},[144,124015,123384],{"class":259},[144,124017,123387],{"class":1993},[144,124019,123390],{"class":259},[144,124021,123419],{"class":1993},[144,124023,533],{"class":1993},[144,124025,123424],{"class":259},[144,124027,123401],{"class":259},[144,124029,124030],{"class":259}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124032,123464],{},[14,124034,123467],{},[135,124036,124037],{"className":117309,"code":123470,"language":117311,"meta":30,"style":30},[141,124038,124039,124043,124053,124063,124067,124071,124081],{"__ignoreMap":30},[144,124040,124041],{"class":146,"line":147},[144,124042,123477],{"class":213},[144,124044,124045,124047,124049,124051],{"class":146,"line":66},[144,124046,24589],{"class":1993},[144,124048,120061],{"class":259},[144,124050,123486],{"class":259},[144,124052,123489],{"class":259},[144,124054,124055,124057,124059,124061],{"class":146,"line":1210},[144,124056,24589],{"class":1993},[144,124058,120061],{"class":259},[144,124060,123486],{"class":259},[144,124062,123500],{"class":259},[144,124064,124065],{"class":146,"line":1225},[144,124066,2430],{"emptyLinePlaceholder":72},[144,124068,124069],{"class":146,"line":1231},[144,124070,123509],{"class":213},[144,124072,124073,124075,124077,124079],{"class":146,"line":1245},[144,124074,24589],{"class":1993},[144,124076,123516],{"class":259},[144,124078,123519],{"class":259},[144,124080,123522],{"class":203},[144,124082,124083,124085,124087],{"class":146,"line":1251},[144,124084,24589],{"class":1993},[144,124086,123516],{"class":259},[144,124088,123531],{"class":259},[14,124090,124091,124092],{},"再重新插拔设备即可，或者 ",[304,124093,124094],{},"直接重启系统。",[14,124096,123537],{},[14,124098,123540,124099,123840],{},[141,124100,123839],{},[14,124102,124103],{},[28,124104],{"alt":30,"src":124105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124107,123848],{},[14,124109,124110,124112],{},[304,124111,117977],{}," 一些设备可能没有串口号等。",[115,124114,124116],{"id":124115},"_744-其他注意事项","7.4.4 其他注意事项",[14,124118,124119,124120,124122,124123,124126,124127,18441,124130,124133,124134,124136],{},"并非所有的USB设备端口号都是",[141,124121,123574],{},"的格式，比如Arduino的端口号可能是",[141,124124,124125],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[141,124128,124129],{},"videon",[141,124131,124132],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[141,124135,124129],{},"端口，绑定时需要关联的也是该接口。",[14,124138,124139,124140,124143,124144,124147,124148,124150,124151,124154,124155,124158,124159,124162,124163,124162,124166,124162,124169,28398],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[141,124141,124142],{},"KERNEL==\"ttyUSB*\"","修改为",[141,124145,124146],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[141,124149,124142],{},"修改为类似于",[141,124152,124153],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[141,124156,124157],{},"video[0,2,4,6]","表示可以绑定的端口为",[141,124160,124161],{},"video0","或",[141,124164,124165],{},"video2",[141,124167,124168],{},"video4",[141,124170,124171],{},"video6",[18,124173,124175],{"id":124174},"_75-挂载内网网页","7.5 挂载内网网页",[14,124177,124178],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124180,124181],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124183,124184],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124186,124187,124188],{},"Termux 下载地址（F-Droid）：",[393,124189,124190],{"href":124190,"rel":124191},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23897],[14,124193,124194],{},"首先打开app后，先更新软件缓存：",[135,124196,124198],{"className":117309,"code":124197,"language":117311,"meta":30,"style":30},"pkg update\n",[141,124199,124200],{"__ignoreMap":30},[144,124201,124202,124205],{"class":146,"line":147},[144,124203,124204],{"class":1993},"pkg",[144,124206,26255],{"class":259},[14,124208,124209],{},"然后换源",[135,124211,124213],{"className":117309,"code":124212,"language":117311,"meta":30,"style":30},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[141,124214,124215],{"__ignoreMap":30},[144,124216,124217,124219,124222],{"class":146,"line":147},[144,124218,123087],{"class":1993},[144,124220,124221],{"class":154}," $PREFIX",[144,124223,124224],{"class":259},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124226,124227],{},"将该文件内容替换为下面：",[135,124229,124231],{"className":117309,"code":124230,"language":117311,"meta":30,"style":30},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[141,124232,124233],{"__ignoreMap":30},[144,124234,124235,124238,124241,124244],{"class":146,"line":147},[144,124236,124237],{"class":1993},"deb",[144,124239,124240],{"class":259}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[144,124242,124243],{"class":259}," stable",[144,124245,124246],{"class":259}," main\n",[1162,124248,124249,124276],{},[101,124250,124251,124252,124254,124255],{},"如果你使用的是",[141,124253,123087],{},"编辑器：",[1162,124256,124257,124264,124270],{},[101,124258,124259,124260,124263],{},"按 ",[141,124261,124262],{},"Ctrl+O"," 保存文件。",[101,124265,124259,124266,124269],{},[141,124267,124268],{},"Enter"," 确认文件名。",[101,124271,124259,124272,124275],{},[141,124273,124274],{},"Ctrl+X"," 退出编辑器。",[101,124277,124251,124278,124254,124281],{},[141,124279,124280],{},"vim",[1162,124282,124283,124289],{},[101,124284,124259,124285,124288],{},[141,124286,124287],{},"Esc"," 退出编辑模式。",[101,124290,124291,124292,124294],{},"输入 ",[141,124293,119234],{}," 保存并退出。",[14,124296,124297],{},"接下来重新更新软件源：",[135,124299,124301],{"className":117309,"code":124300,"language":117311,"meta":30,"style":30},"pkg update && pkg upgrade\n",[141,124302,124303],{"__ignoreMap":30},[144,124304,124305,124307,124309,124311,124313],{"class":146,"line":147},[144,124306,124204],{"class":1993},[144,124308,117360],{"class":259},[144,124310,26203],{"class":154},[144,124312,124204],{"class":1993},[144,124314,117346],{"class":259},[14,124316,124317],{},"安装python：",[135,124319,124321],{"className":117309,"code":124320,"language":117311,"meta":30,"style":30},"pkg install python\n",[141,124322,124323],{"__ignoreMap":30},[144,124324,124325,124327,124329],{"class":146,"line":147},[144,124326,124204],{"class":1993},[144,124328,23866],{"class":259},[144,124330,124331],{"class":259}," python\n",[14,124333,124334,26486],{},[304,124335,124336],{},"通过Termux访问设备存储",[14,124338,124339],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[135,124341,124343],{"className":117309,"code":124342,"language":117311,"meta":30,"style":30},"termux-setup-storage\n",[141,124344,124345],{"__ignoreMap":30},[144,124346,124347],{"class":146,"line":147},[144,124348,124342],{"class":1993},[98,124350,124351],{},[101,124352,124353,26486,124356],{},[304,124354,124355],{},"进入HTML文件所在的目录",[98,124357,124358],{},[101,124359,124360,124361,124363],{},"使用",[141,124362,101289],{},"命令进入HTML文件所在的目录：",[135,124365,124367],{"className":117309,"code":124366,"language":117311,"meta":30,"style":30},"cd ~\u002Fyour_html_folder\n",[141,124368,124369],{"__ignoreMap":30},[144,124370,124371,124373],{"class":146,"line":147},[144,124372,101289],{"class":203},[144,124374,124375],{"class":259}," ~\u002Fyour_html_folder\n",[98,124377,124378],{"start":66},[101,124379,124380,26486,124383,124388,124405],{},[304,124381,124382],{},"启动Python HTTP服务器",[98,124384,124385],{},[101,124386,124387],{},"运行以下命令启动一个简单的HTTP服务器：",[135,124389,124391],{"className":117309,"code":124390,"language":117311,"meta":30,"style":30},"python -m http.server 8000\n",[141,124392,124393],{"__ignoreMap":30},[144,124394,124395,124397,124399,124402],{"class":146,"line":147},[144,124396,30393],{"class":1993},[144,124398,100895],{"class":203},[144,124400,124401],{"class":259}," http.server",[144,124403,124404],{"class":203}," 8000\n",[98,124406,124407],{"start":1210},[101,124408,124409,124410,124413],{},"这会在端口",[141,124411,124412],{},"8000","上启动一个Web服务器。",[1162,124415,124416],{},[101,124417,124418],{},"启动服务器后，Termux会显示日志信息，例如：",[135,124420,124422],{"className":120829,"code":124421,"language":120831,"meta":120832,"style":30},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[141,124423,124424],{"__ignoreMap":30},[144,124425,124426],{"class":146,"line":147},[144,124427,124421],{},[1162,124429,124430],{},[101,124431,124432],{},"这表示服务器已成功启动。",[14,124434,124435],{},[304,124436,124437],{},"在浏览器中访问HTML文件",[98,124439,124440],{},[101,124441,124442,26486,124445,124450],{},[304,124443,124444],{},"在同一设备上访问",[98,124446,124447],{},[101,124448,124449],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[135,124451,124454],{"className":124452,"code":124453,"language":71677,"meta":30,"style":30},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[141,124455,124456],{"__ignoreMap":30},[144,124457,124458,124461],{"class":146,"line":147},[144,124459,124460],{"class":154},"http:",[144,124462,124463],{"class":213},"\u002F\u002Flocalhost:8000\n",[1162,124465,124466],{},[101,124467,124468,124469,124472],{},"如果HTML文件中有",[141,124470,124471],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[18,124474,124476],{"id":124475},"_76-linux重点知识","7.6 Linux重点知识",[115,124478,124480],{"id":124479},"_761-关于点的说明","7.6.1 关于点的说明",[14,124482,124483],{},[28,124484],{"alt":30,"src":124485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,124487,124488],{},"一点本目录，两点上目录",[115,124490,124492],{"id":124491},"_762-目录","7.6.2 目录",[22029,124494,124496],{"id":124495},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,124498,124499],{},[304,124500,124501],{},"\u002Fboot:",[14,124503,124504],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,124506,124507],{},[304,124508,124509],{},"\u002Fetc:",[14,124511,124512],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,124514,124515],{},[304,124516,124517],{},"\u002Flib：",[14,124519,124520],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,124522,124523],{},[304,124524,124525],{},"\u002Fsys:",[14,124527,124528],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22029,124530,124532],{"id":124531},"_7622-指令集合","7.6.2.2 指令集合",[14,124534,124535],{},[304,124536,124537],{},"\u002Fbin:",[14,124539,124540],{},"为二进制文件的缩写，存放最经常使用的命令",[14,124542,124543],{},[304,124544,124545],{},"\u002Fsbin:",[14,124547,124548],{},"只有系统管理员才能使用的程序和指令",[22029,124550,124552],{"id":124551},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,124554,124555],{},[304,124556,124557],{},"\u002Fdev:",[14,124559,124560],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,124562,124563],{},[304,124564,124565],{},"\u002Fmedia:",[14,124567,124568],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,124570,124571],{},[304,124572,124573],{},"\u002Fmnt:",[14,124575,124576],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22029,124578,124580],{"id":124579},"_7624-临时文件","7.6.2.4 临时文件",[14,124582,124583],{},[304,124584,124585],{},"\u002Frun:",[14,124587,124588],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,124590,124591],{},[304,124592,124593],{},"\u002Flost+found:",[14,124595,124596],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,124598,124599],{},[304,124600,124601],{},"\u002Ftmp:",[14,124603,124604],{},"这个目录是用来存放一些临时文件的",[22029,124606,124608],{"id":124607},"_7625-账户","7.6.2.5 账户",[14,124610,124611],{},[304,124612,124613],{},"\u002Froot：",[14,124615,124616],{},"系统管理员的用户主目录",[14,124618,124619,26486],{},[304,124620,124621],{},"\u002Fhome",[14,124623,124624],{},"用户的主目录，以用户的账号命名的",[14,124626,124627,26486],{},[304,124628,124629],{},"\u002Fusr",[14,124631,124632],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,124634,124635],{},[304,124636,124637],{},"\u002Fusr\u002Fbin：",[14,124639,124640],{},"系统用户使用的应用程序与指令",[14,124642,124643],{},[304,124644,124645],{},"\u002Fusr\u002Fsbin：",[14,124647,124648],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,124650,124651],{},[304,124652,124653],{},"\u002Fusr\u002Fsrc：",[14,124655,124656],{},"内核源代码默认的放置目录",[22029,124658,124660],{"id":124659},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,124662,124663],{},[304,124664,124665],{},"\u002Fvar：",[14,124667,124668],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,124670,124671],{},[304,124672,124673],{},"\u002Fproc:",[14,124675,124676,124677,124680],{},"管理 ",[304,124678,124679],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22029,124682,124684],{"id":124683},"_7627-扩展用的","7.6.2.7 扩展用的",[14,124686,124687],{},[304,124688,124689],{},"\u002Fopt:",[14,124691,124692],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,124694,124695],{},[304,124696,124697],{},"\u002Fsrv:",[14,124699,124700],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[115,124702,124704],{"id":124703},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,124706,124707],{},[28,124708],{"alt":30,"src":124709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,124711,124712],{},"windows-->linux:",[14,124714,124715],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,124717,124718],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,124720,124721],{},"linux传输文件到windows",[14,124723,124724],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[115,124726,124728],{"id":124727},"_764-易忘知识","7.6.4 易忘知识",[14,124730,124731],{},"操作系统内核查看",[135,124733,124734],{"className":117309,"code":121303,"language":117311,"meta":30,"style":30},[141,124735,124736],{"__ignoreMap":30},[144,124737,124738,124740],{"class":146,"line":147},[144,124739,70217],{"class":1993},[144,124741,121312],{"class":203},[14,124743,124744],{},[28,124745],{"alt":30,"src":124746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,124748,124749],{},[28,124750],{"alt":30,"src":124751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[135,124753,124755],{"className":117309,"code":124754,"language":117311,"meta":30,"style":30},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[141,124756,124757,124769],{"__ignoreMap":30},[144,124758,124759,124761,124764,124767],{"class":146,"line":147},[144,124760,121520],{"class":1993},[144,124762,124763],{"class":259}," mvtest",[144,124765,124766],{"class":259}," mvtest2",[144,124768,2704],{"class":154},[144,124770,124771],{"class":146,"line":66},[144,124772,124773],{"class":1993},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,124775,124776],{},[28,124777],{"alt":30,"src":124778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,124780,124781],{},[28,124782],{"alt":30,"src":124783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,124785,124786,124787,124790],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[141,124788,124789],{},"du -a"," 可以快速查看磁盘使用细节。",[115,124792,124794],{"id":124793},"_765-vim","7.6.5 Vim",[14,124796,124797],{},[28,124798],{"alt":30,"src":124799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,124801,124802],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,124804,124805],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,124807,124808],{},[304,124809,124810],{},"1.命令模式：",[14,124812,124813],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,124815,124816],{},"x 删除当前光标所在处的字符",[14,124818,124819],{},"：切换到底线命令模式，以在最底一行输入命令",[14,124821,124822],{},"a 进行插入模式，在光标下一个位置输入文本",[14,124824,124825],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,124827,124828],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,124830,124831],{},"dd 剪切当前行",[14,124833,124834],{},"yy 复制当前行",[14,124836,124837],{},"p 粘贴剪贴板内容到光标下方",[14,124839,124840],{},"P 粘贴剪贴板内容到光标上方",[14,124842,124843],{},"u 撤销上一次操作",[14,124845,124846],{},"ctrl+r 重做上一次操作",[14,124848,124849,124851],{},[950,124850],{}," 保存文件",[14,124853,124854,124856],{},[800,124855],{}," 退出Vim编辑器",[14,124858,124859,124861],{},[800,124860],{},"! 强制退出Vim编辑器，不保存修改",[14,124863,124864],{},[304,124865,124866],{},"2.输入模式：",[14,124868,124869],{},[28,124870],{"alt":30,"src":124871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,124873,124874],{},[304,124875,124876],{},"3.底线命令模式：",[14,124878,124879],{},[28,124880],{"alt":30,"src":124881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,124883,124884],{},"按下esc可以退出底线命令模式",[115,124886,124888],{"id":124887},"_766-apt","7.6.6 apt",[14,124890,124891],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[115,124893,124895],{"id":124894},"_767-home与root的区别","7.6.7 home与root的区别",[14,124897,124898],{},[28,124899],{"alt":30,"src":124900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,124902,124903],{},[28,124904],{"alt":30,"src":124905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,124907,124908],{},[28,124909],{"alt":30,"src":124910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,124912,124913],{},[28,124914],{"alt":30,"src":124915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[115,124917,124919],{"id":124918},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,124921,124922],{},[393,124923,124924],{"href":124924,"rel":124925},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[23897],[98,124927,124928,124931],{},[101,124929,124930],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[101,124932,124933],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,124935,124936],{},[28,124937],{"alt":30,"src":124938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,124940,124941],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,124943,124944],{},[28,124945],{"alt":30,"src":124946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[135,124948,124950],{"className":120829,"code":124949,"language":120831,"meta":120832,"style":30},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[141,124951,124952,124957],{"__ignoreMap":30},[144,124953,124954],{"class":146,"line":147},[144,124955,124956],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[144,124958,124959],{"class":146,"line":66},[144,124960,124961],{},".\u002Fpycharm.sh\n",[14,124963,124964],{},"3️⃣创建.desktop文件",[14,124966,124967],{},[304,124968,124969],{},"原理：",[1162,124971,124972,124982],{},[101,124973,124974,124975,124981],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[304,124976,124977,124980],{},[141,124978,124979],{},".desktop"," 文件"," 来识别应用。",[101,124983,124984,124986,124987],{},[141,124985,124979],{}," 文件相当于一个“应用注册表”，告诉系统：",[1162,124988,124989,124992,124995,124998,125001],{},[101,124990,124991],{},"应用名字（Name）",[101,124993,124994],{},"图标（Icon）",[101,124996,124997],{},"执行命令（Exec）",[101,124999,125000],{},"分类（Categories）",[101,125002,125003],{},"是否需要终端（Terminal）",[135,125005,125007],{"className":120829,"code":125006,"language":120831,"meta":120832,"style":30},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[141,125008,125009,125014],{"__ignoreMap":30},[144,125010,125011],{"class":146,"line":147},[144,125012,125013],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[144,125015,125016],{"class":146,"line":66},[144,125017,125018],{},"nano pycharm.desktop\n",[14,125020,125021],{},"nano是一个命令行下的编辑器，也可以使用vim",[135,125023,125025],{"className":120829,"code":125024,"language":120831,"meta":120832,"style":30},"[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",[141,125026,125027,125032,125037,125042,125047,125052,125057,125062,125067,125072],{"__ignoreMap":30},[144,125028,125029],{"class":146,"line":147},[144,125030,125031],{},"[Desktop Entry]\n",[144,125033,125034],{"class":146,"line":66},[144,125035,125036],{},"Version=1.0\n",[144,125038,125039],{"class":146,"line":1210},[144,125040,125041],{},"Type=Application\n",[144,125043,125044],{"class":146,"line":1225},[144,125045,125046],{},"Name=PyCharm\n",[144,125048,125049],{"class":146,"line":1231},[144,125050,125051],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[144,125053,125054],{"class":146,"line":1245},[144,125055,125056],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[144,125058,125059],{"class":146,"line":1251},[144,125060,125061],{},"Comment=JetBrains PyCharm IDE\n",[144,125063,125064],{"class":146,"line":1342},[144,125065,125066],{},"Categories=Development;IDE;\n",[144,125068,125069],{"class":146,"line":1348},[144,125070,125071],{},"Terminal=false\n",[144,125073,125074],{"class":146,"line":1360},[144,125075,125076],{},"StartupWMClass=jetbrains-pycharm\n",[1162,125078,125079,125085,125091,125097],{},[101,125080,125081,125084],{},[141,125082,125083],{},"Exec"," → 点击图标时执行的命令",[101,125086,125087,125090],{},[141,125088,125089],{},"Icon"," → 显示在菜单和桌面上的图标",[101,125092,125093,125096],{},[141,125094,125095],{},"Terminal=false"," → 不打开终端",[101,125098,125099,125102],{},[141,125100,125101],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125104,125105,125106],"blockquote",{},[14,125107,125108,125109,125111,125112],{},"可以理解成 ",[141,125110,124979],{}," 文件是 Linux 的 ",[304,125113,125114],{},"快捷方式配置文件",[14,125116,125117],{},"4️⃣设置可执行权限",[135,125119,125121],{"className":120829,"code":125120,"language":120831,"meta":120832,"style":30},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[141,125122,125123],{"__ignoreMap":30},[144,125124,125125],{"class":146,"line":147},[144,125126,125120],{},[14,125128,125129],{},"5️⃣桌面图标启动的话如下：",[135,125131,125133],{"className":120829,"code":125132,"language":120831,"meta":120832,"style":30},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[141,125134,125135,125140],{"__ignoreMap":30},[144,125136,125137],{"class":146,"line":147},[144,125138,125139],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[144,125141,125142],{"class":146,"line":66},[144,125143,125144],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[98,125146,125147],{"start":1210},[101,125148,125149],{},"下载Appimage文件实现软件的安装",[14,125151,125152],{},"1️⃣先下载appimage",[14,125154,125155],{},[393,125156,125157],{"href":125157,"rel":125158},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23897],[14,125160,125161],{},[28,125162],{"alt":30,"src":125163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125165,125166],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125168,125169],{},[28,125170],{"alt":30,"src":125171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125173,125174],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125176,125177],{},[28,125178],{"alt":30,"src":125179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125181,125182],{},[28,125183],{"alt":30,"src":125184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125186,125187,125188,125191],{},"3️⃣给他们放在",[141,125189,125190],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125193,125194],{},"4️⃣给软件执行权限",[135,125196,125198],{"className":120829,"code":125197,"language":120831,"meta":120832,"style":30},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[141,125199,125200,125205],{"__ignoreMap":30},[144,125201,125202],{"class":146,"line":147},[144,125203,125204],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[144,125206,125207],{"class":146,"line":66},[144,125208,125209],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125211,125212],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[135,125214,125216],{"className":117309,"code":125215,"language":117311,"meta":30,"style":30},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[141,125217,125218,125225,125232,125238],{"__ignoreMap":30},[144,125219,125220,125222],{"class":146,"line":147},[144,125221,101289],{"class":203},[144,125223,125224],{"class":259}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[144,125226,125227,125229],{"class":146,"line":66},[144,125228,101296],{"class":1993},[144,125230,125231],{"class":259}," .\u002Fqqmusic.desktop\n",[144,125233,125234,125236],{"class":146,"line":1210},[144,125235,124280],{"class":1993},[144,125237,125231],{"class":259},[144,125239,125240,125242,125244,125246],{"class":146,"line":1225},[144,125241,24589],{"class":1993},[144,125243,24592],{"class":259},[144,125245,123146],{"class":259},[144,125247,125231],{"class":259},[14,125249,125250,125252],{},[141,125251,101296],{},"：一个 Linux 命令，主要功能是：",[1162,125254,125255,125258],{},[101,125256,125257],{},"如果文件不存在，就创建一个新的空文件",[101,125259,125260],{},"如果文件已存在，就更新该文件的最后修改时间",[135,125262,125264],{"className":120829,"code":125263,"language":120831,"meta":120832,"style":30},"[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",[141,125265,125266,125270,125275,125280,125285,125289,125294],{"__ignoreMap":30},[144,125267,125268],{"class":146,"line":147},[144,125269,125031],{},[144,125271,125272],{"class":146,"line":66},[144,125273,125274],{},"Name=QQ音乐\n",[144,125276,125277],{"class":146,"line":1210},[144,125278,125279],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[144,125281,125282],{"class":146,"line":1225},[144,125283,125284],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[144,125286,125287],{"class":146,"line":1231},[144,125288,125041],{},[144,125290,125291],{"class":146,"line":1245},[144,125292,125293],{},"Categories=Audio;Music;Player;\n",[144,125295,125296],{"class":146,"line":1251},[144,125297,125298],{},"Comment=QQ Music Client for Linux\n",[14,125300,125301],{},"将文件复制进去",[14,125303,125304],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125306,125307],{},[28,125308],{"alt":30,"src":125309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125311,125312],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125314,125315],{},[28,125316],{"alt":30,"src":125317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125319,125320,125321,125324,125325,125328],{},"如果你用的不是KDE，那么也可以直接修改",[141,125322,125323],{},"qqmuic.desktop","：在exec的末尾加上",[141,125326,125327],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[135,125330,125332],{"className":120829,"code":125331,"language":120831,"meta":120832,"style":30},"[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",[141,125333,125334,125338,125342,125347,125351,125355,125359],{"__ignoreMap":30},[144,125335,125336],{"class":146,"line":147},[144,125337,125031],{},[144,125339,125340],{"class":146,"line":66},[144,125341,125274],{},[144,125343,125344],{"class":146,"line":1210},[144,125345,125346],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[144,125348,125349],{"class":146,"line":1225},[144,125350,125284],{},[144,125352,125353],{"class":146,"line":1231},[144,125354,125041],{},[144,125356,125357],{"class":146,"line":1245},[144,125358,125293],{},[144,125360,125361],{"class":146,"line":1251},[144,125362,125298],{},[14,125364,125365],{},[28,125366],{"alt":30,"src":125367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125369,125370],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[135,125372,125374],{"className":120829,"code":125373,"language":120831,"meta":120832,"style":30},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[141,125375,125376],{"__ignoreMap":30},[144,125377,125378],{"class":146,"line":147},[144,125379,125373],{},[98,125381,125382],{"start":1225},[101,125383,125384],{},"去Flathub上安装软件",[14,125386,125387],{},[393,125388,125389],{"href":125389,"rel":125390},"https:\u002F\u002Fflathub.org\u002F",[23897],[14,125392,125393],{},"1️⃣去上面的官网搜索软件+下载软件",[14,125395,125396],{},[28,125397],{"alt":30,"src":125398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[135,125400,125402],{"className":120829,"code":125401,"language":120831,"meta":120832,"style":30},"flatpak install flathub com.obsproject.Studio\n",[141,125403,125404],{"__ignoreMap":30},[144,125405,125406],{"class":146,"line":147},[144,125407,125401],{},[14,125409,125410],{},[28,125411],{"alt":30,"src":125412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,125414,125415],{},"2️⃣运行软件",[14,125417,125418],{},"a.官方方式：",[14,125420,125421],{},[28,125422],{"alt":30,"src":125423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[135,125425,125426],{"className":120829,"code":125401,"language":120831,"meta":120832,"style":30},[141,125427,125428],{"__ignoreMap":30},[144,125429,125430],{"class":146,"line":147},[144,125431,125401],{},[14,125433,125434],{},"b.当普通软件运行：",[14,125436,125437],{},[28,125438],{"alt":30,"src":125439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,125441,125442],{},[28,125443],{"alt":30,"src":125444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5157,125446,125447],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":30,"searchDepth":66,"depth":66,"links":125449},[125450,125451,125456,125457,125463,125464],{"id":122182,"depth":66,"text":122183},{"id":122524,"depth":66,"text":122525,"children":125452},[125453,125454,125455],{"id":122528,"depth":1210,"text":122529},{"id":122595,"depth":1210,"text":122596},{"id":122856,"depth":1210,"text":122857},{"id":123009,"depth":66,"text":123010},{"id":123247,"depth":66,"text":123248,"children":125458},[125459,125460,125461,125462],{"id":123299,"depth":1210,"text":123300},{"id":123585,"depth":1210,"text":123586},{"id":123856,"depth":1210,"text":123857},{"id":124115,"depth":1210,"text":124116},{"id":124174,"depth":66,"text":124175},{"id":124475,"depth":66,"text":124476,"children":125465},[125466,125467,125468,125469,125470,125471,125472,125473],{"id":124479,"depth":1210,"text":124480},{"id":124491,"depth":1210,"text":124492},{"id":124703,"depth":1210,"text":124704},{"id":124727,"depth":1210,"text":124728},{"id":124793,"depth":1210,"text":124794},{"id":124887,"depth":1210,"text":124888},{"id":124894,"depth":1210,"text":124895},{"id":124918,"depth":1210,"text":124919},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122174,"description":23408},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125480,"title":125481,"body":125482,"description":23408,"extension":70,"meta":125486,"navigation":72,"path":125487,"seo":125488,"stem":125489,"__hash__":125490},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125483,"toc":125484},[],{"title":30,"searchDepth":66,"depth":66,"links":125485},[],{"category":30276},"\u002Fwiki\u002F2025-01-27-linux",{"title":125481,"description":23408},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125492,"title":125493,"body":125494,"description":125498,"extension":70,"meta":125889,"navigation":72,"path":125890,"seo":125891,"stem":125892,"__hash__":125893},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125495,"toc":125887},[125496,125499,125503,125520,125523,125576,125580,125582,125622,125631,125635,125638,125879,125884],[14,125497,125498],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125500,125502],{"id":125501},"_1ubuntu环境配置","1.Ubuntu环境配置",[98,125504,125505,125508,125511,125514,125517],{},[101,125506,125507],{},"ubuntu环境换源",[101,125509,125510],{},"安装cuda",[101,125512,125513],{},"安装miniconda",[101,125515,125516],{},"安装pytorch",[101,125518,125519],{},"安装genesis",[14,125521,125522],{},"参考链接：",[135,125524,125526],{"className":23854,"code":125525,"language":23856,"meta":30,"style":30},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[141,125527,125528],{"__ignoreMap":30},[144,125529,125530,125533,125536,125539,125541,125544,125547,125549,125552,125555,125557,125560,125563,125565,125568,125571,125573],{"class":146,"line":147},[144,125531,125532],{"class":1993},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[144,125534,125535],{"class":259},"=blogdetail",[144,125537,125538],{"class":154},"&sharetype",[144,125540,200],{"class":150},[144,125542,125543],{"class":259},"blogdetail",[144,125545,125546],{"class":154},"&sharerId",[144,125548,200],{"class":150},[144,125550,125551],{"class":259},"144728092",[144,125553,125554],{"class":154},"&sharerefer",[144,125556,200],{"class":150},[144,125558,125559],{"class":259},"PC",[144,125561,125562],{"class":154},"&sharesource",[144,125564,200],{"class":150},[144,125566,125567],{"class":259},"qq_69379513",[144,125569,125570],{"class":154},"&sharefrom",[144,125572,200],{"class":150},[144,125574,125575],{"class":259},"from_link\n",[10,125577,125579],{"id":125578},"_2genesis-报错issue","2.Genesis 报错issue",[14,125581,125522],{},[135,125583,125584],{"className":23854,"code":125525,"language":23856,"meta":30,"style":30},[141,125585,125586],{"__ignoreMap":30},[144,125587,125588,125590,125592,125594,125596,125598,125600,125602,125604,125606,125608,125610,125612,125614,125616,125618,125620],{"class":146,"line":147},[144,125589,125532],{"class":1993},[144,125591,125535],{"class":259},[144,125593,125538],{"class":154},[144,125595,200],{"class":150},[144,125597,125543],{"class":259},[144,125599,125546],{"class":154},[144,125601,200],{"class":150},[144,125603,125551],{"class":259},[144,125605,125554],{"class":154},[144,125607,200],{"class":150},[144,125609,125559],{"class":259},[144,125611,125562],{"class":154},[144,125613,200],{"class":150},[144,125615,125567],{"class":259},[144,125617,125570],{"class":154},[144,125619,200],{"class":150},[144,125621,125575],{"class":259},[135,125623,125625],{"className":23854,"code":125624,"language":23856,"meta":30,"style":30},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[141,125626,125627],{"__ignoreMap":30},[144,125628,125629],{"class":146,"line":147},[144,125630,125624],{"class":1993},[10,125632,125634],{"id":125633},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,125636,125637],{},"hello_robot.py",[135,125639,125641],{"className":30391,"code":125640,"language":30393,"meta":30,"style":30},"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",[141,125642,125643,125649,125664,125668,125680,125692,125696,125709,125713,125732,125742,125752,125766,125770,125774,125779,125783,125793,125800,125814,125821,125831,125836,125840,125858,125863,125867,125874],{"__ignoreMap":30},[144,125644,125645,125647],{"class":146,"line":147},[144,125646,30405],{"class":150},[144,125648,45318],{"class":154},[144,125650,125651,125654,125657,125659,125661],{"class":146,"line":66},[144,125652,125653],{"class":154},"os.environ[",[144,125655,125656],{"class":259},"'PYOPENGL_PLATFORM'",[144,125658,4473],{"class":154},[144,125660,200],{"class":150},[144,125662,125663],{"class":259}," 'glx'\n",[144,125665,125666],{"class":146,"line":1210},[144,125667,2430],{"emptyLinePlaceholder":72},[144,125669,125670,125672,125675,125677],{"class":146,"line":1225},[144,125671,30405],{"class":150},[144,125673,125674],{"class":154}," genesis ",[144,125676,31396],{"class":150},[144,125678,125679],{"class":154}," gs\n",[144,125681,125682,125684,125687,125689],{"class":146,"line":1231},[144,125683,30750],{"class":150},[144,125685,125686],{"class":154}," pynput ",[144,125688,30405],{"class":150},[144,125690,125691],{"class":154}," keyboard\n",[144,125693,125694],{"class":146,"line":1245},[144,125695,2430],{"emptyLinePlaceholder":72},[144,125697,125698,125701,125704,125706],{"class":146,"line":1251},[144,125699,125700],{"class":154},"gs.init(",[144,125702,125703],{"class":5247},"backend",[144,125705,200],{"class":150},[144,125707,125708],{"class":154},"gs.gpu)\n",[144,125710,125711],{"class":146,"line":1342},[144,125712,2430],{"emptyLinePlaceholder":72},[144,125714,125715,125718,125720,125723,125726,125728,125730],{"class":146,"line":1348},[144,125716,125717],{"class":154},"scene ",[144,125719,200],{"class":150},[144,125721,125722],{"class":154}," gs.Scene(",[144,125724,125725],{"class":5247},"show_viewer",[144,125727,200],{"class":150},[144,125729,31489],{"class":203},[144,125731,161],{"class":154},[144,125733,125734,125737,125739],{"class":146,"line":1360},[144,125735,125736],{"class":154},"plane ",[144,125738,200],{"class":150},[144,125740,125741],{"class":154}," scene.add_entity(gs.morphs.Plane())\n",[144,125743,125744,125747,125749],{"class":146,"line":1642},[144,125745,125746],{"class":154},"franka ",[144,125748,200],{"class":150},[144,125750,125751],{"class":154}," scene.add_entity(\n",[144,125753,125754,125757,125759,125761,125764],{"class":146,"line":1647},[144,125755,125756],{"class":154},"    gs.morphs.MJCF(",[144,125758,45367],{"class":5247},[144,125760,200],{"class":150},[144,125762,125763],{"class":259},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[144,125765,38060],{"class":154},[144,125767,125768],{"class":146,"line":1653},[144,125769,161],{"class":154},[144,125771,125772],{"class":146,"line":1658},[144,125773,2430],{"emptyLinePlaceholder":72},[144,125775,125776],{"class":146,"line":1672},[144,125777,125778],{"class":154},"scene.build()\n",[144,125780,125781],{"class":146,"line":1677},[144,125782,2430],{"emptyLinePlaceholder":72},[144,125784,125785,125787,125790],{"class":146,"line":1683},[144,125786,31960],{"class":150},[144,125788,125789],{"class":1993}," on_press",[144,125791,125792],{"class":154},"(key):\n",[144,125794,125795,125798],{"class":146,"line":1704},[144,125796,125797],{"class":150},"    try",[144,125799,3769],{"class":154},[144,125801,125802,125804,125807,125809,125812],{"class":146,"line":1709},[144,125803,2527],{"class":150},[144,125805,125806],{"class":154}," key.char ",[144,125808,2979],{"class":150},[144,125810,125811],{"class":259}," 'q'",[144,125813,3769],{"class":154},[144,125815,125816,125818],{"class":146,"line":1723},[144,125817,15763],{"class":150},[144,125819,125820],{"class":203}," False\n",[144,125822,125823,125826,125829],{"class":146,"line":1728},[144,125824,125825],{"class":150},"    except",[144,125827,125828],{"class":203}," AttributeError",[144,125830,3769],{"class":154},[144,125832,125833],{"class":146,"line":1757},[144,125834,125835],{"class":150},"        pass\n",[144,125837,125838],{"class":146,"line":1762},[144,125839,2430],{"emptyLinePlaceholder":72},[144,125841,125842,125845,125847,125850,125853,125855],{"class":146,"line":1779},[144,125843,125844],{"class":154},"listener ",[144,125846,200],{"class":150},[144,125848,125849],{"class":154}," keyboard.Listener(",[144,125851,125852],{"class":5247},"on_press",[144,125854,200],{"class":150},[144,125856,125857],{"class":154},"on_press)\n",[144,125859,125860],{"class":146,"line":1784},[144,125861,125862],{"class":154},"listener.start()\n",[144,125864,125865],{"class":146,"line":1789},[144,125866,2430],{"emptyLinePlaceholder":72},[144,125868,125869,125871],{"class":146,"line":1794},[144,125870,108676],{"class":150},[144,125872,125873],{"class":154}," listener.running:\n",[144,125875,125876],{"class":146,"line":1808},[144,125877,125878],{"class":154},"    scene.step()\n",[14,125880,125881],{},[28,125882],{"alt":30,"src":125883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5157,125885,125886],{},"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":30,"searchDepth":66,"depth":66,"links":125888},[],{"category":23410},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125493,"description":125498},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125895,"title":125896,"body":125897,"description":23408,"extension":70,"meta":125912,"navigation":72,"path":125913,"seo":125914,"stem":125915,"__hash__":125916},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125898,"toc":125909},[125899,125902,125906],[10,125900,125896],{"id":125901},"_1-基础知识",[18,125903,125905],{"id":125904},"_11-js的组成","1.1 js的组成",[14,125907,125908],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":30,"searchDepth":66,"depth":66,"links":125910},[125911],{"id":125904,"depth":66,"text":125905},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125896,"description":23408},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125918,"title":125919,"body":125920,"description":23408,"extension":70,"meta":126059,"navigation":72,"path":126060,"seo":126061,"stem":126062,"__hash__":126063},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125921,"toc":126047},[125922,125925,125929,125932,125936,125946,125950,125953,125956,125959,125963,125970,125976,125980,125986,125997,126001,126004,126008,126011,126015,126018,126022,126025,126029,126032,126035,126038,126041,126044],[10,125923,125919],{"id":125924},"_2-vscode必备内容",[18,125926,125928],{"id":125927},"_21-标签分类","2.1 标签分类",[14,125930,125931],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[18,125933,125935],{"id":125934},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,125937,125938,125939,125941,125942,125945],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[141,125940,381],{}," 然后按 ",[141,125943,125944],{},"Tab","，快速自动生成基本结构。",[18,125947,125949],{"id":125948},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,125951,125952],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,125954,125955],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,125957,125958],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[18,125960,125962],{"id":125961},"_24-视图缩放","2.4 视图缩放",[14,125964,125965,125966,125969],{},"缩放视图 ",[141,125967,125968],{},"ctrl+"," 可实现代码增大。",[14,125971,125972,125975],{},[141,125973,125974],{},"ctrl-"," 可实现代码减小。",[18,125977,125979],{"id":125978},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,125981,125982,125983,28398],{},"VSCode 新建文件快捷键为 ",[141,125984,125985],{},"ctrl+N",[14,125987,125988,125989,125992,125993,125996],{},"保存快捷键为 ",[141,125990,125991],{},"ctrl+S","，将文本保存为 ",[141,125994,125995],{},".html"," 文件。",[18,125998,126000],{"id":125999},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,126002,126003],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[18,126005,126007],{"id":126006},"_27-vscode-icons","2.7 vscode-icons",[14,126009,126010],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[18,126012,126014],{"id":126013},"_28-easy-less","2.8 Easy LESS",[14,126016,126017],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[18,126019,126021],{"id":126020},"_29-会了吧插件","2.9 会了吧插件",[14,126023,126024],{},"会了吧插件可以展示代码中英语单词的意思。",[18,126026,126028],{"id":126027},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,126030,126031],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126033,126034],{},"②选定多个相同的单词:ctrl+D",[14,126036,126037],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126039,126040],{},"④全局替换某些单词:ctrl+h",[14,126042,126043],{},"⑤快速定位到某一行:ctrl+g",[14,126045,126046],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":30,"searchDepth":66,"depth":66,"links":126048},[126049,126050,126051,126052,126053,126054,126055,126056,126057,126058],{"id":125927,"depth":66,"text":125928},{"id":125934,"depth":66,"text":125935},{"id":125948,"depth":66,"text":125949},{"id":125961,"depth":66,"text":125962},{"id":125978,"depth":66,"text":125979},{"id":125999,"depth":66,"text":126000},{"id":126006,"depth":66,"text":126007},{"id":126013,"depth":66,"text":126014},{"id":126020,"depth":66,"text":126021},{"id":126027,"depth":66,"text":126028},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125919,"description":23408},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126065,"title":126066,"body":126067,"description":23408,"extension":70,"meta":126226,"navigation":72,"path":126227,"seo":126228,"stem":126229,"__hash__":126230},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126068,"toc":126218},[126069,126072,126076,126086,126092,126098,126102,126111,126115,126120,126123,126126,126130,126133,126143,126152,126161,126170,126180,126187,126192,126197,126210],[10,126070,126066],{"id":126071},"_3-html文本与容器标签",[18,126073,126075],{"id":126074},"_31-标题标签","3.1 标题标签",[14,126077,126078,126081,126082,126085],{},[141,126079,126080],{},"\u003Ch1>","我是一级标签",[141,126083,126084],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126087,126088,126081,126090],{},[141,126089,126080],{},[141,126091,126084],{},[14,126093,123348,126094,126097],{},[141,126095,126096],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[18,126099,126101],{"id":126100},"_32-段落标签","3.2 段落标签",[14,126103,126104,126107,126108],{},[141,126105,126106],{},"\u003Cp>","....",[141,126109,126110],{},"\u003C\u002Fp>",[18,126112,126114],{"id":126113},"_33-换行标签","3.3 换行标签",[14,126116,126117],{},[141,126118,126119],{},"\u003Cbr \u002F>",[14,126121,126122],{},"具有强制换行的作用",[14,126124,126125],{},"单标签",[18,126127,126129],{"id":126128},"_34-文本格式化标签","3.4 文本格式化标签",[14,126131,126132],{},"提供粗体、斜体和下划线等效果",[14,126134,126135,126136,82552,126139,126142],{},"加粗：",[141,126137,126138],{},"\u003Cstrong>...\u003C\u002Fstrong>",[141,126140,126141],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126144,126145,126146,82552,126149,126142],{},"斜体：",[141,126147,126148],{},"\u003Cem>...\u003C\u002Fem>",[141,126150,126151],{},"\u003Ci>...\u003C\u002Fi>",[14,126153,126154,126155,82552,126158,126142],{},"删除线：",[141,126156,126157],{},"\u003Cdel>...\u003C\u002Fdel>",[141,126159,126160],{},"\u003Cs>...\u003C\u002Fs>",[14,126162,126163,126164,82552,126167,126142],{},"下划线：",[141,126165,126166],{},"\u003Cins>...\u003C\u002Fins>",[141,126168,126169],{},"\u003Cu>...\u003C\u002Fu>",[18,126171,126173,126174,18441,126177,102706],{"id":126172},"_35-div和span标签","3.5 ",[141,126175,126176],{},"\u003Cdiv>",[141,126178,126179],{},"\u003Cspan>",[14,126181,126182,101031,126184,126186],{},[141,126183,126176],{},[141,126185,126179],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126188,126189],{},[141,126190,126191],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126193,126194],{},[141,126195,126196],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126198,126199,126200,126202,126203,126205,126206,126209],{},"两者特点：①",[141,126201,126176],{}," 标签用来布局，但一行通常只放一个 ",[141,126204,126176],{},"。可以理解为一个大盒子，独占一行，在 ",[141,126207,126208],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126211,77262,126212,126214,126215,126217],{},[141,126213,126179],{}," 标签也可用于布局，一行可以放多个 ",[141,126216,126179],{},"，可理解为小盒子。",{"title":30,"searchDepth":66,"depth":66,"links":126219},[126220,126221,126222,126223,126224],{"id":126074,"depth":66,"text":126075},{"id":126100,"depth":66,"text":126101},{"id":126113,"depth":66,"text":126114},{"id":126128,"depth":66,"text":126129},{"id":126172,"depth":66,"text":126225},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126066,"description":23408},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126232,"title":126233,"body":126234,"description":23408,"extension":70,"meta":126431,"navigation":72,"path":126432,"seo":126433,"stem":126434,"__hash__":126435},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126235,"toc":126423},[126236,126239,126243,126246,126252,126259,126265,126271,126274,126277,126280,126283,126286,126289,126292,126296,126299,126302,126305,126311,126317,126323,126330,126334,126340,126346,126349,126352,126358,126364,126370,126373,126376,126380,126383,126393,126399,126403,126412,126416,126419],[10,126237,126233],{"id":126238},"_4-html图像与链接",[18,126240,126242],{"id":126241},"_41-图像标签","4.1 图像标签",[14,126244,126245],{},"（1）标签",[14,126247,126248,126251],{},[141,126249,126250],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126253,126254,126255,126258],{},"src是",[141,126256,126257],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126260,126261,126262],{},"alt:文本，替换文本。图像不能显示的文字 ",[141,126263,126264],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126266,126267,126268],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[141,126269,126270],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126272,126273],{},"width:像素，设置图像的宽度",[14,126275,126276],{},"height:像素，设置图像的高度",[14,126278,126279],{},"border：像素，设置图像的边框粗细",[14,126281,126282],{},"（2）图像标签属性的注意点：",[14,126284,126285],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126287,126288],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126290,126291],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[18,126293,126295],{"id":126294},"_42-路径注意要点","4.2 路径注意要点：",[14,126297,126298],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126300,126301],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126303,126304],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126306,126307,126308],{},"①同一级路径：图像文件位于HTML文件同一级，如",[141,126309,126310],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126312,126313,126314],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[141,126315,126316],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126318,126319,126320],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[141,126321,126322],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126324,126325,126326,406],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[393,126327,126328],{"href":126328,"rel":126329},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23897],[18,126331,126333],{"id":126332},"_43-超链接标签","4.3 超链接标签",[14,126335,126336,126339],{},[141,126337,126338],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126341,126342,126343],{},"①语法格式：",[141,126344,126345],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126347,126348],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126350,126351],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126353,126354,126355],{},"③链接分类：外部链接：",[141,126356,126357],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126359,126360,126361],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[141,126362,126363],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126365,126366,126367],{},"空链接：如果当时没有确定链接目标时，",[141,126368,126369],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126371,126372],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126374,126375],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[18,126377,126379],{"id":126378},"_44-锚点链接","4.4 锚点链接",[14,126381,126382],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,126384,126385,126386,126389,126390],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[141,126387,126388],{},"\u003Ca href=\"#two\">","第二级",[141,126391,126392],{},"\u003C\u002Fa>",[14,126394,126395,126396],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[141,126397,126398],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[18,126400,126402],{"id":126401},"_45-注释标签","4.5 注释标签",[14,126404,126405,126408,126409],{},[141,126406,126407],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[141,126410,126411],{},"ctrl+\u002F",[18,126413,126415],{"id":126414},"_46-特殊字符","4.6 特殊字符",[14,126417,126418],{},"可以实现添加多个空格",[28,126420],{"style":126421,"src":126422},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":30,"searchDepth":66,"depth":66,"links":126424},[126425,126426,126427,126428,126429,126430],{"id":126241,"depth":66,"text":126242},{"id":126294,"depth":66,"text":126295},{"id":126332,"depth":66,"text":126333},{"id":126378,"depth":66,"text":126379},{"id":126401,"depth":66,"text":126402},{"id":126414,"depth":66,"text":126415},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126233,"description":23408},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126437,"title":126438,"body":126439,"description":23408,"extension":70,"meta":126732,"navigation":72,"path":126733,"seo":126734,"stem":126735,"__hash__":126736},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126440,"toc":126723},[126441,126444,126448,126451,126454,126457,126460,126463,126466,126469,126472,126475,126495,126501,126505,126508,126511,126514,126517,126520,126523,126527,126530,126533,126536,126539,126552,126557,126560,126563,126578,126581,126584,126587,126590,126593,126597,126600,126607,126610,126613,126616,126619,126622,126628,126631,126634,126640,126643,126646,126649,126655,126658,126661,126675,126682,126685,126688,126695,126704,126707,126710,126713,126717,126720],[10,126442,126438],{"id":126443},"_5-html表格列表与表单",[18,126445,126447],{"id":126446},"_51-表格标签","5.1 表格标签",[14,126449,126450],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,126452,126453],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,126455,126456],{},"②表格基本语法：",[28,126458],{"style":126421,"src":126459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,126461,126462],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[28,126464],{"style":126421,"src":126465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,126467,126468],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[28,126470],{"style":126421,"src":126471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,126473,126474],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,126476,126477,126480,126481,126483,126484,126487,126488,126490,126491,126494],{},[141,126478,126479],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[141,126482,126479],{},"内部必须拥有",[141,126485,126486],{},"\u003Ctr>","标签，一般位于第一行，",[141,126489,126479],{},"比",[141,126492,126493],{},"\u003Cth>","范围广",[14,126496,126497,126500],{},[141,126498,126499],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[18,126502,126504],{"id":126503},"_52-合并单元格","5.2 合并单元格",[14,126506,126507],{},"（1）合并单元格方式：",[14,126509,126510],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,126512,126513],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,126515,126516],{},"（2）目标单元格：",[14,126518,126519],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,126521,126522],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[18,126524,126526],{"id":126525},"_53-列表标签","5.3 列表标签",[14,126528,126529],{},"（1）分类：无序列表、有序列表、自定义列表",[14,126531,126532],{},"①无序列表：",[28,126534],{"style":126421,"src":126535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,126537,126538],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,126540,126541,126544,126545,126548,126549,126551],{},[141,126542,126543],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[141,126546,126547],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[141,126550,126543],{},"中输入其他标签或文字是不对的",[14,126553,126554,126556],{},[141,126555,126547],{},"之间相当于一个容器，可以容纳所有元素",[14,126558,126559],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,126561,126562],{},"在css中去除前边的小圆点采用如下代码:",[135,126564,126568],{"className":126565,"code":126566,"language":126567,"meta":30,"style":30},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[141,126569,126570],{"__ignoreMap":30},[144,126571,126572,126575],{"class":146,"line":147},[144,126573,126574],{"class":51313},"list-style",[144,126576,126577],{"class":154},": none;\n",[14,126579,126580],{},"②有序列表：",[28,126582],{"style":126421,"src":126583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,126585,126586],{},"③自定义列表：",[28,126588],{"style":126421,"src":126589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[28,126591],{"style":126421,"src":126592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[18,126594,126596],{"id":126595},"_54-表单标签","5.4 表单标签",[14,126598,126599],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,126601,126602,126603,126606],{},"（1）表单域：包含单元素的区域，",[141,126604,126605],{},"\u003Cform>","标签可以实现信息的收集和传递。",[28,126608],{"style":126421,"src":126609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,126611,126612],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,126614,126615],{},"表单元素提交必须有name属性",[14,126617,126618],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,126620,126621],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,126623,77239,126624,126627],{},[141,126625,126626],{},"\u003Cinput>","输入表单元素",[28,126629],{"style":126421,"src":126630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[28,126632],{"style":126421,"src":126633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,126635,126636,126637],{},"单选按钮：",[141,126638,126639],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[28,126641],{"style":126421,"src":126642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,126644,126645],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[28,126647],{"style":126421,"src":126648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,126650,126651,126654],{},[304,126652,126653],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,126656,126657],{},"②select下拉表单元素：可以节约页面控件",[28,126659],{"style":126421,"src":126660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,126662,126663,13826,126665,126668,126669,126671,126672,126674],{},[304,126664,184],{},[141,126666,126667],{},"\u003Cselect>","中至少包含一对",[141,126670,102727],{},"；在",[141,126673,102727],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,126676,126677,126678,126681],{},"③",[141,126679,126680],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[28,126683],{"style":126421,"src":126684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,126686,126687],{},"3行20列",[18,126689,126691,126692,102706],{"id":126690},"_55-lable标签","5.5 ",[141,126693,126694],{},"\u003Clable>",[14,126696,126697,126698,126700,126701,126703],{},"它不是表单标签，但常常与表单标签搭配使用，",[141,126699,126694],{},"标签用于绑定一个表单标签，当点击",[141,126702,126694],{},"标签内的文本",[14,126705,126706],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[28,126708],{"style":126421,"src":126709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[28,126711],{"style":126421,"src":126712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[18,126714,126716],{"id":126715},"_56-实例","5.6 实例",[28,126718],{"style":126421,"src":126719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5157,126721,126722],{},"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":30,"searchDepth":66,"depth":66,"links":126724},[126725,126726,126727,126728,126729,126731],{"id":126446,"depth":66,"text":126447},{"id":126503,"depth":66,"text":126504},{"id":126525,"depth":66,"text":126526},{"id":126595,"depth":66,"text":126596},{"id":126690,"depth":66,"text":126730},"5.5 \u003Clable>标签",{"id":126715,"depth":66,"text":126716},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126438,"description":23408},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126738,"title":126739,"body":126740,"description":23408,"extension":70,"meta":127289,"navigation":72,"path":127290,"seo":127291,"stem":127292,"__hash__":127293},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126741,"toc":127264},[126742,126745,126749,126752,126755,126759,126762,126765,126768,126771,126774,126777,126780,126784,126787,126791,126794,126797,126800,126804,126807,126810,126813,126819,126822,126825,126828,126831,126834,126837,126840,126873,126877,126880,126883,126886,126890,126893,126896,126899,126902,126905,126909,126912,126915,126918,126922,126925,126929,126932,126936,126939,126944,126948,126951,126955,126958,126961,126964,126967,126994,126997,127001,127004,127007,127012,127015,127018,127022,127025,127030,127033,127036,127039,127043,127046,127049,127052,127056,127059,127062,127065,127069,127073,127076,127116,127119,127123,127130,127133,127137,127140,127186,127190,127193,127196,127199,127227,127231,127234,127261],[10,126743,126739],{"id":126744},"_6-css语法与文本样式",[18,126746,126748],{"id":126747},"_61-css语法规范","6.1 css语法规范",[14,126750,126751],{},"由两部分组成，选择器及一条或多条声明",[28,126753],{"style":126421,"src":126754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,126756,126757],{},[304,126758,184],{},[14,126760,126761],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,126763,126764],{},"②属性与属性值以“键值对”的形式出现",[14,126766,126767],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,126769,126770],{},"④属性和属性值之间用英文“;”分开",[28,126772],{"style":126421,"src":126773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[28,126775],{"style":126421,"src":126776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[28,126778],{"style":126421,"src":126779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[18,126781,126783],{"id":126782},"_62-css选择器","6.2 css选择器",[14,126785,126786],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[115,126788,126790],{"id":126789},"_621-标签选择器","6.2.1 标签选择器",[14,126792,126793],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,126795,126796],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[28,126798],{"style":126421,"src":126799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[115,126801,126803],{"id":126802},"_622-类选择器","6.2.2 类选择器",[14,126805,126806],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,126808,126809],{},"②样例",[28,126811],{"style":126421,"src":126812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,126814,126815,126816,126818],{},"③ ",[304,126817,126653],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,126820,126821],{},"可以理解为给这个标签起了个名字，来表示；",[14,126823,126824],{},"长名称或词组可以使用横线来为选择器命名；",[14,126826,126827],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,126829,126830],{},"命名要有意义；",[28,126832],{"style":126421,"src":126833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,126835,126836],{},"类选择器也可以指定特殊的元素p.center{}",[14,126838,126839],{},"p.center和.center都对",[135,126841,126843],{"className":126565,"code":126842,"language":126567,"meta":30,"style":30},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[141,126844,126845,126850,126859,126869],{"__ignoreMap":30},[144,126846,126847],{"class":146,"line":147},[144,126848,126849],{"class":213},"\u002F* 类选择器指定特殊元素 *\u002F\n",[144,126851,126852,126854,126857],{"class":146,"line":66},[144,126853,14],{"class":51313},[144,126855,126856],{"class":1993},".center",[144,126858,15603],{"class":154},[144,126860,126861,126863,126865,126867],{"class":146,"line":1210},[144,126862,70539],{"class":203},[144,126864,51450],{"class":154},[144,126866,51605],{"class":203},[144,126868,1321],{"class":154},[144,126870,126871],{"class":146,"line":1225},[144,126872,1595],{"class":154},[115,126874,126876],{"id":126875},"_623-多类名使用","6.2.3 多类名使用",[14,126878,126879],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[28,126881],{"style":126421,"src":126882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,126884,126885],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[115,126887,126889],{"id":126888},"_624-id选择器","6.2.4 id选择器",[14,126891,126892],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,126894,126895],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[28,126897],{"style":126421,"src":126898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,126900,126901],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,126903,126904],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[115,126906,126908],{"id":126907},"_625-通配符选择器","6.2.5 通配符选择器",[14,126910,126911],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,126913,126914],{},"* {",[14,126916,126917],{},"color=\"red\"}",[115,126919,126921],{"id":126920},"_626-总结","6.2.6 总结",[28,126923],{"style":126421,"src":126924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[18,126926,126928],{"id":126927},"_63-css字体属性","6.3 css字体属性",[14,126930,126931],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[115,126933,126935],{"id":126934},"_631-字体系列","6.3.1 字体系列",[14,126937,126938],{},"font-family: '宋体';",[14,126940,126941,126943],{},[304,126942,184],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[115,126945,126947],{"id":126946},"_632-字体大小","6.3.2 字体大小",[14,126949,126950],{},"font-size: 20px",[14,126952,126953,26486],{},[304,126954,126653],{},[14,126956,126957],{},"①px（像素）大小是网页的最常用单位",[14,126959,126960],{},"②谷歌浏览器默认为16px",[14,126962,126963],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,126965,126966],{},"④可以给body指定整个页面的大小：会自动引用",[135,126968,126970],{"className":126565,"code":126969,"language":126567,"meta":30,"style":30},"body {\n  font-size: 16px;\n}\n",[141,126971,126972,126978,126990],{"__ignoreMap":30},[144,126973,126974,126976],{"class":146,"line":147},[144,126975,51813],{"class":51313},[144,126977,15603],{"class":154},[144,126979,126980,126982,126984,126986,126988],{"class":146,"line":66},[144,126981,70639],{"class":203},[144,126983,51450],{"class":154},[144,126985,756],{"class":203},[144,126987,51505],{"class":150},[144,126989,1321],{"class":154},[144,126991,126992],{"class":146,"line":1210},[144,126993,1595],{"class":154},[14,126995,126996],{},"⑤标题标签比较特殊，需要单独指定大小",[115,126998,127000],{"id":126999},"_633-字体粗细","6.3.3 字体粗细",[14,127002,127003],{},"font-weight: bold;",[14,127005,127006],{},"font-weight: 100；",[14,127008,127009,127011],{},[304,127010,184],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,127013,127014],{},"font-weight= 400;",[14,127016,127017],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[115,127019,127021],{"id":127020},"_634-文字样式","6.3.4 文字样式",[14,127023,127024],{},"font-style: normal；",[14,127026,127027,26486],{},[304,127028,127029],{},"属性值",[14,127031,127032],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127034,127035],{},"②italic：浏览器会显示斜体的字体样式",[28,127037],{"style":126421,"src":127038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[115,127040,127042],{"id":127041},"_635-字体符合属性","6.3.5 字体符合属性",[28,127044],{"style":126421,"src":127045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[28,127047],{"style":126421,"src":127048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127050,127051],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127053,127054,26486],{},[304,127055,126653],{},[14,127057,127058],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127060,127061],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127063,127064],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[18,127066,127068],{"id":127067},"_64-css-test文本属性","6.4 css test文本属性",[115,127070,127072],{"id":127071},"_641-文本颜色","6.4.1 文本颜色",[14,127074,127075],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[135,127077,127079],{"className":126565,"code":127078,"language":126567,"meta":30,"style":30},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[141,127080,127081,127086,127092,127102,127107,127112],{"__ignoreMap":30},[144,127082,127083],{"class":146,"line":147},[144,127084,127085],{"class":213},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[144,127087,127088,127090],{"class":146,"line":66},[144,127089,14],{"class":51313},[144,127091,15603],{"class":154},[144,127093,127094,127096,127098,127100],{"class":146,"line":1210},[144,127095,70918],{"class":203},[144,127097,51450],{"class":154},[144,127099,57434],{"class":203},[144,127101,1321],{"class":154},[144,127103,127104],{"class":146,"line":1225},[144,127105,127106],{"class":213},"  \u002F* color: #ff0000; *\u002F\n",[144,127108,127109],{"class":146,"line":1231},[144,127110,127111],{"class":213},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[144,127113,127114],{"class":146,"line":1245},[144,127115,1595],{"class":154},[28,127117],{"style":126421,"src":127118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[115,127120,127122],{"id":127121},"_642-对齐文本","6.4.2 对齐文本",[14,127124,127125,127126,127129],{},"text-align属于用于设置元素内文本内容的 ",[304,127127,127128],{},"水平对齐"," 方式",[14,127131,127132],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[115,127134,127136],{"id":127135},"_643-装饰文本","6.4.3 装饰文本",[14,127138,127139],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[135,127141,127143],{"className":126565,"code":127142,"language":126567,"meta":30,"style":30},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[141,127144,127145,127151,127161,127165,127171,127182],{"__ignoreMap":30},[144,127146,127147,127149],{"class":146,"line":147},[144,127148,393],{"class":51313},[144,127150,15603],{"class":154},[144,127152,127153,127155,127157,127159],{"class":146,"line":66},[144,127154,70515],{"class":203},[144,127156,51450],{"class":154},[144,127158,54750],{"class":203},[144,127160,1321],{"class":154},[144,127162,127163],{"class":146,"line":1210},[144,127164,1595],{"class":154},[144,127166,127167,127169],{"class":146,"line":1225},[144,127168,14],{"class":51313},[144,127170,15603],{"class":154},[144,127172,127173,127175,127177,127180],{"class":146,"line":1231},[144,127174,70515],{"class":203},[144,127176,51450],{"class":154},[144,127178,127179],{"class":203},"underline",[144,127181,1321],{"class":154},[144,127183,127184],{"class":146,"line":1245},[144,127185,1595],{"class":154},[115,127187,127189],{"id":127188},"_644-文本缩进","6.4.4 文本缩进",[14,127191,127192],{},"实现文本的第一行首行缩进自己指定的距离",[14,127194,127195],{},"20px往右边走；-20px往左边走",[14,127197,127198],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[135,127200,127202],{"className":126565,"code":127201,"language":126567,"meta":30,"style":30},"p {\n  text-indent: 2em;\n}\n",[141,127203,127204,127210,127223],{"__ignoreMap":30},[144,127205,127206,127208],{"class":146,"line":147},[144,127207,14],{"class":51313},[144,127209,15603],{"class":154},[144,127211,127212,127215,127217,127219,127221],{"class":146,"line":66},[144,127213,127214],{"class":203},"  text-indent",[144,127216,51450],{"class":154},[144,127218,232],{"class":203},[144,127220,23585],{"class":150},[144,127222,1321],{"class":154},[144,127224,127225],{"class":146,"line":1210},[144,127226,1595],{"class":154},[115,127228,127230],{"id":127229},"_645-行间距","6.4.5 行间距",[14,127232,127233],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[135,127235,127237],{"className":126565,"code":127236,"language":126567,"meta":30,"style":30},"p {\n  line-height: 1.6;\n}\n",[141,127238,127239,127245,127257],{"__ignoreMap":30},[144,127240,127241,127243],{"class":146,"line":147},[144,127242,14],{"class":51313},[144,127244,15603],{"class":154},[144,127246,127247,127250,127252,127255],{"class":146,"line":66},[144,127248,127249],{"class":203},"  line-height",[144,127251,51450],{"class":154},[144,127253,127254],{"class":203},"1.6",[144,127256,1321],{"class":154},[144,127258,127259],{"class":146,"line":1210},[144,127260,1595],{"class":154},[5157,127262,127263],{},"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":30,"searchDepth":66,"depth":66,"links":127265},[127266,127267,127275,127282],{"id":126747,"depth":66,"text":126748},{"id":126782,"depth":66,"text":126783,"children":127268},[127269,127270,127271,127272,127273,127274],{"id":126789,"depth":1210,"text":126790},{"id":126802,"depth":1210,"text":126803},{"id":126875,"depth":1210,"text":126876},{"id":126888,"depth":1210,"text":126889},{"id":126907,"depth":1210,"text":126908},{"id":126920,"depth":1210,"text":126921},{"id":126927,"depth":66,"text":126928,"children":127276},[127277,127278,127279,127280,127281],{"id":126934,"depth":1210,"text":126935},{"id":126946,"depth":1210,"text":126947},{"id":126999,"depth":1210,"text":127000},{"id":127020,"depth":1210,"text":127021},{"id":127041,"depth":1210,"text":127042},{"id":127067,"depth":66,"text":127068,"children":127283},[127284,127285,127286,127287,127288],{"id":127071,"depth":1210,"text":127072},{"id":127121,"depth":1210,"text":127122},{"id":127135,"depth":1210,"text":127136},{"id":127188,"depth":1210,"text":127189},{"id":127229,"depth":1210,"text":127230},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126739,"description":23408},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127295,"title":127296,"body":127297,"description":23408,"extension":70,"meta":127946,"navigation":72,"path":127947,"seo":127948,"stem":127949,"__hash__":127950},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127298,"toc":127927},[127299,127302,127306,127310,127370,127374,127384,127387,127390,127394,127419,127423,127426,127429,127432,127435,127438,127442,127445,127448,127490,127493,127519,127525,127528,127532,127536,127542,127545,127548,127551,127554,127557,127560,127605,127609,127612,127615,127619,127623,127652,127655,127660,127663,127666,127669,127672,127676,127680,127683,127685,127688,127692,127695,127699,127702,127705,127708,127712,127716,127722,127732,127735,127738,127741,127744,127747,127870,127878,127886,127924],[10,127300,127296],{"id":127301},"_7-css引入方式与选择器进阶",[18,127303,127305],{"id":127304},"_71-css引入方式","7.1 css引入方式",[115,127307,127309],{"id":127308},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[135,127311,127315],{"className":127312,"code":127313,"language":127314,"meta":30,"style":30},"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",[141,127316,127317,127325,127332,127344,127357,127362],{"__ignoreMap":30},[144,127318,127319,127321,127323],{"class":146,"line":147},[144,127320,1065],{"class":154},[144,127322,5157],{"class":51313},[144,127324,51320],{"class":154},[144,127326,127327,127330],{"class":146,"line":66},[144,127328,127329],{"class":51313},"  h1",[144,127331,15603],{"class":154},[144,127333,127334,127337,127339,127342],{"class":146,"line":1210},[144,127335,127336],{"class":203},"    color",[144,127338,51450],{"class":154},[144,127340,127341],{"class":203},"blue",[144,127343,1321],{"class":154},[144,127345,127346,127349,127351,127353,127355],{"class":146,"line":1225},[144,127347,127348],{"class":203},"    font-size",[144,127350,51450],{"class":154},[144,127352,955],{"class":203},[144,127354,51505],{"class":150},[144,127356,1321],{"class":154},[144,127358,127359],{"class":146,"line":1231},[144,127360,127361],{"class":154},"  }\n",[144,127363,127364,127366,127368],{"class":146,"line":1245},[144,127365,51798],{"class":154},[144,127367,5157],{"class":51313},[144,127369,51320],{"class":154},[14,127371,127372,26486],{},[304,127373,126653],{},[14,127375,77239,127376,127379,127380,127383],{},[141,127377,127378],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[141,127381,127382],{},"\u003Chead>","标签中",[14,127385,127386],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,127388,127389],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[115,127391,127393],{"id":127392},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[135,127395,127397],{"className":127312,"code":127396,"language":127314,"meta":30,"style":30},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[141,127398,127399],{"__ignoreMap":30},[144,127400,127401,127403,127405,127407,127409,127412,127415,127417],{"class":146,"line":147},[144,127402,1065],{"class":154},[144,127404,14],{"class":51313},[144,127406,62639],{"class":1993},[144,127408,200],{"class":154},[144,127410,127411],{"class":259},"\"color: red; font-size: 16px;\"",[144,127413,127414],{"class":154},">这是一个段落\u003C\u002F",[144,127416,14],{"class":51313},[144,127418,51320],{"class":154},[14,127420,127421,26486],{},[304,127422,126653],{},[14,127424,127425],{},"①style其实就是标签的属性",[14,127427,127428],{},"②在双引号中间，写法要符合css规范",[14,127430,127431],{},"③可以控制当前的标签设置样式",[14,127433,127434],{},"④书写繁琐，简单时才用",[14,127436,127437],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[115,127439,127441],{"id":127440},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,127443,127444],{},"使用最多，单独建一个css文件，然后html引用",[14,127446,127447],{},"①css文件部分： style.css",[135,127449,127451],{"className":126565,"code":127450,"language":126567,"meta":30,"style":30},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[141,127452,127453,127458,127464,127474,127486],{"__ignoreMap":30},[144,127454,127455],{"class":146,"line":147},[144,127456,127457],{"class":213},"\u002F* style.css *\u002F\n",[144,127459,127460,127462],{"class":146,"line":66},[144,127461,10],{"class":51313},[144,127463,15603],{"class":154},[144,127465,127466,127468,127470,127472],{"class":146,"line":1210},[144,127467,70918],{"class":203},[144,127469,51450],{"class":154},[144,127471,127341],{"class":203},[144,127473,1321],{"class":154},[144,127475,127476,127478,127480,127482,127484],{"class":146,"line":1225},[144,127477,70639],{"class":203},[144,127479,51450],{"class":154},[144,127481,955],{"class":203},[144,127483,51505],{"class":150},[144,127485,1321],{"class":154},[144,127487,127488],{"class":146,"line":1231},[144,127489,1595],{"class":154},[14,127491,127492],{},"②html部分",[135,127494,127496],{"className":127312,"code":127495,"language":127314,"meta":30,"style":30},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[141,127497,127498],{"__ignoreMap":30},[144,127499,127500,127502,127504,127506,127508,127510,127512,127514,127517],{"class":146,"line":147},[144,127501,1065],{"class":154},[144,127503,69018],{"class":51313},[144,127505,69021],{"class":1993},[144,127507,200],{"class":154},[144,127509,69026],{"class":259},[144,127511,61070],{"class":1993},[144,127513,200],{"class":154},[144,127515,127516],{"class":259},"\"style.css\"",[144,127518,51320],{"class":154},[14,127520,127521,127524],{},[141,127522,127523],{},"\u003Chr>","水平线标签（但是不常用！）",[14,127526,127527],{},"ctrl+0回到页面原来大小",[18,127529,127531],{"id":127530},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[115,127533,127535],{"id":127534},"_721-快速生成html","7.2.1 快速生成html",[14,127537,127538,127539],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[141,127540,127541],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,127543,127544],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,127546,127547],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,127549,127550],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,127552,127553],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,127555,127556],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,127558,127559],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[135,127561,127563],{"className":127312,"code":127562,"language":127314,"meta":30,"style":30},"\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",[141,127564,127565,127570,127575,127580,127585,127590,127595,127600],{"__ignoreMap":30},[144,127566,127567],{"class":146,"line":147},[144,127568,127569],{"class":213},"\u003C!-- Emmet 语法示例 -->\n",[144,127571,127572],{"class":146,"line":66},[144,127573,127574],{"class":213},"\u003C!-- div*3        → 生成3个div -->\n",[144,127576,127577],{"class":146,"line":1210},[144,127578,127579],{"class":213},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[144,127581,127582],{"class":146,"line":1225},[144,127583,127584],{"class":213},"\u003C!-- div+p        → 兄弟div和p -->\n",[144,127586,127587],{"class":146,"line":1231},[144,127588,127589],{"class":213},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[144,127591,127592],{"class":146,"line":1245},[144,127593,127594],{"class":213},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[144,127596,127597],{"class":146,"line":1251},[144,127598,127599],{"class":213},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[144,127601,127602],{"class":146,"line":1342},[144,127603,127604],{"class":213},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[115,127606,127608],{"id":127607},"_722-快速生成css","7.2.2 快速生成css",[14,127610,127611],{},"简写开头",[14,127613,127614],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[18,127616,127618],{"id":127617},"_73-css复合选择器","7.3 css复合选择器",[115,127620,127622],{"id":127621},"_731-后代选择器","7.3.1 后代选择器",[135,127624,127626],{"className":126565,"code":127625,"language":126567,"meta":30,"style":30},".parent .child {\n  color: blue;\n}\n",[141,127627,127628,127638,127648],{"__ignoreMap":30},[144,127629,127630,127633,127636],{"class":146,"line":147},[144,127631,127632],{"class":1993},".parent",[144,127634,127635],{"class":1993}," .child",[144,127637,15603],{"class":154},[144,127639,127640,127642,127644,127646],{"class":146,"line":66},[144,127641,70918],{"class":203},[144,127643,51450],{"class":154},[144,127645,127341],{"class":203},[144,127647,1321],{"class":154},[144,127649,127650],{"class":146,"line":1210},[144,127651,1595],{"class":154},[14,127653,127654],{},"元素1 元素2 {样式声明}",[14,127656,127657],{},[304,127658,127659],{},"注意点:",[14,127661,127662],{},"①元素1和元素2中间用空格隔开",[14,127664,127665],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,127667,127668],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,127670,127671],{},"④元素1和元素2可以是任意基础选择器",[115,127673,127675],{"id":127674},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,127677,127678],{},[304,127679,127659],{},[14,127681,127682],{},"①元素1和元素2中间用大于号隔开",[14,127684,127665],{},[14,127686,127687],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[115,127689,127691],{"id":127690},"_733-并集选择器","7.3.3 并集选择器",[14,127693,127694],{},"元素1，元素2 {样式声明}",[14,127696,127697],{},[304,127698,127659],{},[14,127700,127701],{},"①元素1和元素2中间用逗号隔开",[14,127703,127704],{},"②逗号可以理解为和的意思",[14,127706,127707],{},"③并集选择器通常用于集体声明",[115,127709,127711],{"id":127710},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,127713,127714],{},[304,127715,127659],{},[14,127717,127718,127719,127721],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69018,127720],{},"－:visited－:hover－:active。",[14,127723,127724,127725,127728,127729,25753],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127726,127727],"hover",{}," 、 ",[127730,127731],"first-child",{},[14,127733,127734],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,127736,127737],{},"link对没访问的进行设置",[14,127739,127740],{},"vistied对已访问的进行改变",[14,127742,127743],{},"hover鼠标经过就会变",[14,127745,127746],{},"active常按(点)就会变",[135,127748,127750],{"className":126565,"code":127749,"language":126567,"meta":30,"style":30},"\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",[141,127751,127752,127757,127766,127776,127786,127790,127799,127810,127814,127822,127832,127842,127846,127855,127866],{"__ignoreMap":30},[144,127753,127754],{"class":146,"line":147},[144,127755,127756],{"class":213},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[144,127758,127759,127761,127764],{"class":146,"line":66},[144,127760,393],{"class":51313},[144,127762,127763],{"class":1993},":link",[144,127765,15603],{"class":154},[144,127767,127768,127770,127772,127774],{"class":146,"line":1210},[144,127769,70918],{"class":203},[144,127771,51450],{"class":154},[144,127773,62382],{"class":203},[144,127775,1321],{"class":154},[144,127777,127778,127780,127782,127784],{"class":146,"line":1225},[144,127779,70515],{"class":203},[144,127781,51450],{"class":154},[144,127783,54750],{"class":203},[144,127785,1321],{"class":154},[144,127787,127788],{"class":146,"line":1231},[144,127789,1595],{"class":154},[144,127791,127792,127794,127797],{"class":146,"line":1245},[144,127793,393],{"class":51313},[144,127795,127796],{"class":1993},":visited",[144,127798,15603],{"class":154},[144,127800,127801,127803,127805,127808],{"class":146,"line":1251},[144,127802,70918],{"class":203},[144,127804,51450],{"class":154},[144,127806,127807],{"class":203},"purple",[144,127809,1321],{"class":154},[144,127811,127812],{"class":146,"line":1342},[144,127813,1595],{"class":154},[144,127815,127816,127818,127820],{"class":146,"line":1348},[144,127817,393],{"class":51313},[144,127819,60953],{"class":1993},[144,127821,15603],{"class":154},[144,127823,127824,127826,127828,127830],{"class":146,"line":1360},[144,127825,70918],{"class":203},[144,127827,51450],{"class":154},[144,127829,54902],{"class":203},[144,127831,1321],{"class":154},[144,127833,127834,127836,127838,127840],{"class":146,"line":1642},[144,127835,70515],{"class":203},[144,127837,51450],{"class":154},[144,127839,127179],{"class":203},[144,127841,1321],{"class":154},[144,127843,127844],{"class":146,"line":1647},[144,127845,1595],{"class":154},[144,127847,127848,127850,127853],{"class":146,"line":1653},[144,127849,393],{"class":51313},[144,127851,127852],{"class":1993},":active",[144,127854,15603],{"class":154},[144,127856,127857,127859,127861,127864],{"class":146,"line":1658},[144,127858,70918],{"class":203},[144,127860,51450],{"class":154},[144,127862,127863],{"class":203},"green",[144,127865,1321],{"class":154},[144,127867,127868],{"class":146,"line":1672},[144,127869,1595],{"class":154},[115,127871,127873,127874,127877],{"id":127872},"_735-伪类选择器","7.3.5 ",[127875,127876],"focus",{},"伪类选择器",[14,127879,127880,127882,127883,127885],{},[127875,127881],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[141,127884,126626],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[135,127887,127889],{"className":126565,"code":127888,"language":126567,"meta":30,"style":30},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[141,127890,127891,127899,127910,127920],{"__ignoreMap":30},[144,127892,127893,127895,127897],{"class":146,"line":147},[144,127894,53834],{"class":51313},[144,127896,61913],{"class":1993},[144,127898,15603],{"class":154},[144,127900,127901,127904,127906,127908],{"class":146,"line":66},[144,127902,127903],{"class":203},"  border-color",[144,127905,51450],{"class":154},[144,127907,54902],{"class":203},[144,127909,1321],{"class":154},[144,127911,127912,127914,127916,127918],{"class":146,"line":1210},[144,127913,70811],{"class":203},[144,127915,51450],{"class":154},[144,127917,54750],{"class":203},[144,127919,1321],{"class":154},[144,127921,127922],{"class":146,"line":1225},[144,127923,1595],{"class":154},[5157,127925,127926],{},"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":30,"searchDepth":66,"depth":66,"links":127928},[127929,127934,127938],{"id":127304,"depth":66,"text":127305,"children":127930},[127931,127932,127933],{"id":127308,"depth":1210,"text":127309},{"id":127392,"depth":1210,"text":127393},{"id":127440,"depth":1210,"text":127441},{"id":127530,"depth":66,"text":127531,"children":127935},[127936,127937],{"id":127534,"depth":1210,"text":127535},{"id":127607,"depth":1210,"text":127608},{"id":127617,"depth":66,"text":127618,"children":127939},[127940,127941,127942,127943,127944],{"id":127621,"depth":1210,"text":127622},{"id":127674,"depth":1210,"text":127675},{"id":127690,"depth":1210,"text":127691},{"id":127710,"depth":1210,"text":127711},{"id":127872,"depth":1210,"text":127945},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127296,"description":23408},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127952,"title":127953,"body":127954,"description":23408,"extension":70,"meta":129877,"navigation":72,"path":129878,"seo":129879,"stem":129880,"__hash__":129881},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":127955,"toc":129851},[127956,127959,127963,127972,127976,128002,128007,128010,128013,128016,128019,128023,128026,128036,128044,128048,128083,128088,128091,128094,128097,128100,128104,128107,128116,128120,128133,128138,128141,128144,128147,128151,128154,128158,128161,128216,128219,128250,128253,128307,128311,128314,128480,128603,128606,128609,128612,128615,128619,128622,128626,128629,128632,128636,128639,128670,128697,128725,128728,128732,128758,128801,128805,128899,128902,128929,128932,128935,128938,128941,128944,128947,128950,128953,128956,128960,129017,129044,129048,129096,129100,129141,129143,129146,129149,129152,129155,129159,129251,129254,129257,129260,129264,129387,129588,129592,129596,129599,129602,129605,129609,129612,129615,129640,129643,129646,129649,129652,129655,129659,129667,129729,129732,129790,129793,129796,129799,129802,129805,129808,129811,129848],[10,127957,127953],{"id":127958},"_8-css显示模式与背景特性",[18,127960,127962],{"id":127961},"_81-css元素显示模式","8.1 css元素显示模式",[14,127964,127965,127966,127968,127969,127971],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[141,127967,126176],{},"自己占一行，比如一行可以放多个",[141,127970,126179],{},"，HTML 元素一般分为块元素和行内元素两种类型",[115,127973,127975],{"id":127974},"_811-块元素","8.1.1 块元素",[14,127977,127978,127979,127981,127982,367,127985,367,127987,367,127989,367,127992,367,127995,127998,127999,128001],{},"常见的块元素有",[141,127980,126080],{},"~",[141,127983,127984],{},"\u003Ch6>",[141,127986,126106],{},[141,127988,126176],{},[141,127990,127991],{},"\u003Cul>",[141,127993,127994],{},"\u003Col>",[141,127996,127997],{},"\u003Cli>","等，其中 ",[141,128000,126176],{}," 标签是最典型的块元素",[14,128003,128004],{},[304,128005,128006],{},"块级元素的特点：",[14,128008,128009],{},"① 比较霸道，自己独占一行。",[14,128011,128012],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,128014,128015],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,128017,128018],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,128020,128021],{},[304,128022,184],{},[14,128024,128025],{},"①文字类的元素内不能使用块级元素",[14,128027,77262,128028,128030,128031,128033,128034],{},[141,128029,126106],{}," 标签主要用于存放文字，因此 ",[141,128032,126106],{}," 里面不能放块级元素，特别是不能放",[141,128035,126176],{},[14,128037,128038,128039,127981,128041,128043],{},"⑥同理， ",[141,128040,126080],{},[141,128042,127984],{},"等都是文字类块级标签，里面也不能放其他块级元素",[115,128045,128047],{"id":128046},"_812-行内元素","8.1.2 行内元素",[14,128049,128050,128051,367,128053,367,128056,367,128059,367,128062,367,128065,367,128068,367,128071,367,128074,367,128077,128079,128080,128082],{},"常见的行内元素有 ",[141,128052,126338],{},[141,128054,128055],{},"\u003Cstrong>",[141,128057,128058],{},"\u003Cb>",[141,128060,128061],{},"\u003Cem>",[141,128063,128064],{},"\u003Ci>",[141,128066,128067],{},"\u003Cdel>",[141,128069,128070],{},"\u003Cs>",[141,128072,128073],{},"\u003Cins>",[141,128075,128076],{},"\u003Cu>",[141,128078,126179],{}," 等，其中 ",[141,128081,126179],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128084,128085],{},[304,128086,128087],{},"特点：",[14,128089,128090],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128092,128093],{},"② 高、宽直接设置是无效的。",[14,128095,128096],{},"③ 默认宽度就是它本身内容的宽度。",[14,128098,128099],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128101,128102],{},[304,128103,184],{},[14,128105,128106],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128108,128109,128110,128112,128113,128115],{},"②特殊情况链接 ",[141,128111,126338],{}," 里面可以放块级元素，但是给 ",[141,128114,126338],{}," 转换一下块级模式最安全",[115,128117,128119],{"id":128118},"_813-行内块元素","8.1.3 行内块元素",[14,128121,128122,128123,367,128126,367,128129,128132],{},"在行内元素中有几个特殊的标签 —— ",[141,128124,128125],{},"\u003Cimg \u002F>",[141,128127,128128],{},"\u003Cinput \u002F>",[141,128130,128131],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128134,128135],{},[304,128136,128137],{},"行内块元素的特点：",[14,128139,128140],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128142,128143],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128145,128146],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[115,128148,128150],{"id":128149},"_814-总结","8.1.4 总结",[28,128152],{"style":126421,"src":128153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[115,128155,128157],{"id":128156},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128159,128160],{},"①转换为块元素：display:block;",[135,128162,128164],{"className":126565,"code":128163,"language":126567,"meta":30,"style":30},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[141,128165,128166,128171,128177,128188,128200,128212],{"__ignoreMap":30},[144,128167,128168],{"class":146,"line":147},[144,128169,128170],{"class":213},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[144,128172,128173,128175],{"class":146,"line":66},[144,128174,393],{"class":51313},[144,128176,15603],{"class":154},[144,128178,128179,128182,128184,128186],{"class":146,"line":1210},[144,128180,128181],{"class":203},"  display",[144,128183,51450],{"class":154},[144,128185,60882],{"class":203},[144,128187,1321],{"class":154},[144,128189,128190,128192,128194,128196,128198],{"class":146,"line":1225},[144,128191,70581],{"class":203},[144,128193,51450],{"class":154},[144,128195,466],{"class":203},[144,128197,51505],{"class":150},[144,128199,1321],{"class":154},[144,128201,128202,128204,128206,128208,128210],{"class":146,"line":1231},[144,128203,70801],{"class":203},[144,128205,51450],{"class":154},[144,128207,556],{"class":203},[144,128209,51505],{"class":150},[144,128211,1321],{"class":154},[144,128213,128214],{"class":146,"line":1245},[144,128215,1595],{"class":154},[14,128217,128218],{},"②转换为行内元素：display:inline;",[135,128220,128222],{"className":126565,"code":128221,"language":126567,"meta":30,"style":30},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[141,128223,128224,128229,128235,128246],{"__ignoreMap":30},[144,128225,128226],{"class":146,"line":147},[144,128227,128228],{"class":213},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[144,128230,128231,128233],{"class":146,"line":66},[144,128232,51624],{"class":51313},[144,128234,15603],{"class":154},[144,128236,128237,128239,128241,128244],{"class":146,"line":1210},[144,128238,128181],{"class":203},[144,128240,51450],{"class":154},[144,128242,128243],{"class":203},"inline",[144,128245,1321],{"class":154},[144,128247,128248],{"class":146,"line":1225},[144,128249,1595],{"class":154},[14,128251,128252],{},"③转换为行内块：display:inline-block;",[135,128254,128256],{"className":126565,"code":128255,"language":126567,"meta":30,"style":30},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[141,128257,128258,128263,128269,128279,128291,128303],{"__ignoreMap":30},[144,128259,128260],{"class":146,"line":147},[144,128261,128262],{"class":213},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[144,128264,128265,128267],{"class":146,"line":66},[144,128266,144],{"class":51313},[144,128268,15603],{"class":154},[144,128270,128271,128273,128275,128277],{"class":146,"line":1210},[144,128272,128181],{"class":203},[144,128274,51450],{"class":154},[144,128276,72396],{"class":203},[144,128278,1321],{"class":154},[144,128280,128281,128283,128285,128287,128289],{"class":146,"line":1225},[144,128282,70581],{"class":203},[144,128284,51450],{"class":154},[144,128286,767],{"class":203},[144,128288,51505],{"class":150},[144,128290,1321],{"class":154},[144,128292,128293,128295,128297,128299,128301],{"class":146,"line":1231},[144,128294,70801],{"class":203},[144,128296,51450],{"class":154},[144,128298,1106],{"class":203},[144,128300,51505],{"class":150},[144,128302,1321],{"class":154},[144,128304,128305],{"class":146,"line":1245},[144,128306,1595],{"class":154},[115,128308,128310],{"id":128309},"_816-小米侧边栏","8.1.6 小米侧边栏",[28,128312],{"style":126421,"src":128313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[135,128315,128317],{"className":127312,"code":128316,"language":127314,"meta":30,"style":30},"\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",[141,128318,128319,128324,128339,128358,128377,128396,128415,128434,128453,128472],{"__ignoreMap":30},[144,128320,128321],{"class":146,"line":147},[144,128322,128323],{"class":213},"\u003C!-- 小米侧边栏案例 -->\n",[144,128325,128326,128328,128330,128332,128334,128337],{"class":146,"line":66},[144,128327,1065],{"class":154},[144,128329,51624],{"class":51313},[144,128331,53499],{"class":1993},[144,128333,200],{"class":154},[144,128335,128336],{"class":259},"\"sidebar\"",[144,128338,51320],{"class":154},[144,128340,128341,128343,128345,128347,128349,128351,128354,128356],{"class":146,"line":1210},[144,128342,52157],{"class":154},[144,128344,393],{"class":51313},[144,128346,61070],{"class":1993},[144,128348,200],{"class":154},[144,128350,61075],{"class":259},[144,128352,128353],{"class":154},">手机 电话卡\u003C\u002F",[144,128355,393],{"class":51313},[144,128357,51320],{"class":154},[144,128359,128360,128362,128364,128366,128368,128370,128373,128375],{"class":146,"line":1225},[144,128361,52157],{"class":154},[144,128363,393],{"class":51313},[144,128365,61070],{"class":1993},[144,128367,200],{"class":154},[144,128369,61075],{"class":259},[144,128371,128372],{"class":154},">电视 盒子\u003C\u002F",[144,128374,393],{"class":51313},[144,128376,51320],{"class":154},[144,128378,128379,128381,128383,128385,128387,128389,128392,128394],{"class":146,"line":1231},[144,128380,52157],{"class":154},[144,128382,393],{"class":51313},[144,128384,61070],{"class":1993},[144,128386,200],{"class":154},[144,128388,61075],{"class":259},[144,128390,128391],{"class":154},">笔记本 平板\u003C\u002F",[144,128393,393],{"class":51313},[144,128395,51320],{"class":154},[144,128397,128398,128400,128402,128404,128406,128408,128411,128413],{"class":146,"line":1245},[144,128399,52157],{"class":154},[144,128401,393],{"class":51313},[144,128403,61070],{"class":1993},[144,128405,200],{"class":154},[144,128407,61075],{"class":259},[144,128409,128410],{"class":154},">出行 穿戴\u003C\u002F",[144,128412,393],{"class":51313},[144,128414,51320],{"class":154},[144,128416,128417,128419,128421,128423,128425,128427,128430,128432],{"class":146,"line":1251},[144,128418,52157],{"class":154},[144,128420,393],{"class":51313},[144,128422,61070],{"class":1993},[144,128424,200],{"class":154},[144,128426,61075],{"class":259},[144,128428,128429],{"class":154},">智能 路由器\u003C\u002F",[144,128431,393],{"class":51313},[144,128433,51320],{"class":154},[144,128435,128436,128438,128440,128442,128444,128446,128449,128451],{"class":146,"line":1342},[144,128437,52157],{"class":154},[144,128439,393],{"class":51313},[144,128441,61070],{"class":1993},[144,128443,200],{"class":154},[144,128445,61075],{"class":259},[144,128447,128448],{"class":154},">健康 儿童\u003C\u002F",[144,128450,393],{"class":51313},[144,128452,51320],{"class":154},[144,128454,128455,128457,128459,128461,128463,128465,128468,128470],{"class":146,"line":1348},[144,128456,52157],{"class":154},[144,128458,393],{"class":51313},[144,128460,61070],{"class":1993},[144,128462,200],{"class":154},[144,128464,61075],{"class":259},[144,128466,128467],{"class":154},">耳机 音响\u003C\u002F",[144,128469,393],{"class":51313},[144,128471,51320],{"class":154},[144,128473,128474,128476,128478],{"class":146,"line":1360},[144,128475,51798],{"class":154},[144,128477,51624],{"class":51313},[144,128479,51320],{"class":154},[135,128481,128483],{"className":126565,"code":128482,"language":126567,"meta":30,"style":30},".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",[141,128484,128485,128494,128504,128517,128529,128541,128553,128563,128574,128578,128588,128599],{"__ignoreMap":30},[144,128486,128487,128490,128492],{"class":146,"line":147},[144,128488,128489],{"class":1993},".sidebar",[144,128491,1429],{"class":51313},[144,128493,15603],{"class":154},[144,128495,128496,128498,128500,128502],{"class":146,"line":66},[144,128497,128181],{"class":203},[144,128499,51450],{"class":154},[144,128501,60882],{"class":203},[144,128503,1321],{"class":154},[144,128505,128506,128508,128510,128513,128515],{"class":146,"line":1210},[144,128507,70581],{"class":203},[144,128509,51450],{"class":154},[144,128511,128512],{"class":203},"234",[144,128514,51505],{"class":150},[144,128516,1321],{"class":154},[144,128518,128519,128521,128523,128525,128527],{"class":146,"line":1225},[144,128520,70801],{"class":203},[144,128522,51450],{"class":154},[144,128524,607],{"class":203},[144,128526,51505],{"class":150},[144,128528,1321],{"class":154},[144,128530,128531,128533,128535,128537,128539],{"class":146,"line":1231},[144,128532,127249],{"class":203},[144,128534,51450],{"class":154},[144,128536,607],{"class":203},[144,128538,51505],{"class":150},[144,128540,1321],{"class":154},[144,128542,128543,128545,128547,128549,128551],{"class":146,"line":1245},[144,128544,70836],{"class":203},[144,128546,51450],{"class":154},[144,128548,1106],{"class":203},[144,128550,51505],{"class":150},[144,128552,1321],{"class":154},[144,128554,128555,128557,128559,128561],{"class":146,"line":1251},[144,128556,70918],{"class":203},[144,128558,51450],{"class":154},[144,128560,60855],{"class":203},[144,128562,1321],{"class":154},[144,128564,128565,128567,128569,128572],{"class":146,"line":1342},[144,128566,70891],{"class":203},[144,128568,51450],{"class":154},[144,128570,128571],{"class":203},"#55585a",[144,128573,1321],{"class":154},[144,128575,128576],{"class":146,"line":1348},[144,128577,1595],{"class":154},[144,128579,128580,128582,128584,128586],{"class":146,"line":1360},[144,128581,128489],{"class":1993},[144,128583,1429],{"class":51313},[144,128585,60953],{"class":1993},[144,128587,15603],{"class":154},[144,128589,128590,128592,128594,128597],{"class":146,"line":1642},[144,128591,70891],{"class":203},[144,128593,51450],{"class":154},[144,128595,128596],{"class":203},"#ff6700",[144,128598,1321],{"class":154},[144,128600,128601],{"class":146,"line":1647},[144,128602,1595],{"class":154},[28,128604],{"style":126421,"src":128605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,128607,128608],{},"行高=盒子高度：实现文字的垂直居中",[14,128610,128611],{},"原理讲解：",[28,128613],{"style":126421,"src":128614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[18,128616,128618],{"id":128617},"_82-css背景","8.2 css背景",[14,128620,128621],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[115,128623,128625],{"id":128624},"_821-背景颜色","8.2.1 背景颜色",[14,128627,128628],{},"background-color:颜色值;",[14,128630,128631],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[115,128633,128635],{"id":128634},"_822-背景图片","8.2.2 背景图片",[14,128637,128638],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[135,128640,128642],{"className":126565,"code":128641,"language":126567,"meta":30,"style":30},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[141,128643,128644,128650,128666],{"__ignoreMap":30},[144,128645,128646,128648],{"class":146,"line":147},[144,128647,51624],{"class":51313},[144,128649,15603],{"class":154},[144,128651,128652,128655,128657,128659,128661,128664],{"class":146,"line":66},[144,128653,128654],{"class":203},"  background-image",[144,128656,51450],{"class":154},[144,128658,61739],{"class":203},[144,128660,155],{"class":154},[144,128662,128663],{"class":5247},"images\u002Fbg.png",[144,128665,2749],{"class":154},[144,128667,128668],{"class":146,"line":1210},[144,128669,1595],{"class":154},[292,128671,128672,128681],{},[295,128673,128674],{},[298,128675,128676,128679],{},[301,128677,128678],{"align":23768},"参数值",[301,128680,102709],{"align":23768},[339,128682,128683,128690],{},[298,128684,128685,128687],{},[344,128686,54750],{"align":23768},[344,128688,128689],{"align":23768},"无背景图（默认的）",[298,128691,128692,128694],{},[344,128693,61739],{"align":23768},[344,128695,128696],{"align":23768},"使用绝对或相对地址指定背景图像",[135,128698,128699],{"className":126565,"code":128641,"language":126567,"meta":30,"style":30},[141,128700,128701,128707,128721],{"__ignoreMap":30},[144,128702,128703,128705],{"class":146,"line":147},[144,128704,51624],{"class":51313},[144,128706,15603],{"class":154},[144,128708,128709,128711,128713,128715,128717,128719],{"class":146,"line":66},[144,128710,128654],{"class":203},[144,128712,51450],{"class":154},[144,128714,61739],{"class":203},[144,128716,155],{"class":154},[144,128718,128663],{"class":5247},[144,128720,2749],{"class":154},[144,128722,128723],{"class":146,"line":1210},[144,128724,1595],{"class":154},[14,128726,128727],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[115,128729,128731],{"id":128730},"_823-背景平铺","8.2.3 背景平铺",[135,128733,128735],{"className":126565,"code":128734,"language":126567,"meta":30,"style":30},"div {\n  background-repeat: no-repeat;\n}\n",[141,128736,128737,128743,128754],{"__ignoreMap":30},[144,128738,128739,128741],{"class":146,"line":147},[144,128740,51624],{"class":51313},[144,128742,15603],{"class":154},[144,128744,128745,128748,128750,128752],{"class":146,"line":66},[144,128746,128747],{"class":203},"  background-repeat",[144,128749,51450],{"class":154},[144,128751,61749],{"class":203},[144,128753,1321],{"class":154},[144,128755,128756],{"class":146,"line":1210},[144,128757,1595],{"class":154},[292,128759,128760,128768],{},[295,128761,128762],{},[298,128763,128764,128766],{},[301,128765,128678],{"align":23768},[301,128767,102709],{"align":23768},[339,128769,128770,128778,128785,128793],{},[298,128771,128772,128775],{},[344,128773,128774],{"align":23768},"repeat",[344,128776,128777],{"align":23768},"背景图像在纵向和横向上平铺（默认的）",[298,128779,128780,128782],{},[344,128781,61749],{"align":23768},[344,128783,128784],{"align":23768},"背景图像不平铺",[298,128786,128787,128790],{},[344,128788,128789],{"align":23768},"repeat-x",[344,128791,128792],{"align":23768},"背景图像在横向上平铺",[298,128794,128795,128798],{},[344,128796,128797],{"align":23768},"repeat-y",[344,128799,128800],{"align":23768},"背景图像在纵向平铺",[115,128802,128804],{"id":128803},"_824-背景图片位置","8.2.4 背景图片位置",[135,128806,128808],{"className":126565,"code":128807,"language":126567,"meta":30,"style":30},"\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",[141,128809,128810,128815,128821,128835,128839,128844,128850,128866,128870,128875,128881,128895],{"__ignoreMap":30},[144,128811,128812],{"class":146,"line":147},[144,128813,128814],{"class":213},"\u002F* 方位名词 *\u002F\n",[144,128816,128817,128819],{"class":146,"line":66},[144,128818,51624],{"class":51313},[144,128820,15603],{"class":154},[144,128822,128823,128826,128828,128830,128833],{"class":146,"line":1210},[144,128824,128825],{"class":203},"  background-position",[144,128827,51450],{"class":154},[144,128829,51605],{"class":203},[144,128831,128832],{"class":203}," top",[144,128834,1321],{"class":154},[144,128836,128837],{"class":146,"line":1225},[144,128838,1595],{"class":154},[144,128840,128841],{"class":146,"line":1231},[144,128842,128843],{"class":213},"\u002F* 精确单位 *\u002F\n",[144,128845,128846,128848],{"class":146,"line":1245},[144,128847,51624],{"class":51313},[144,128849,15603],{"class":154},[144,128851,128852,128854,128856,128858,128860,128862,128864],{"class":146,"line":1251},[144,128853,128825],{"class":203},[144,128855,51450],{"class":154},[144,128857,855],{"class":203},[144,128859,51505],{"class":150},[144,128861,57517],{"class":203},[144,128863,51505],{"class":150},[144,128865,1321],{"class":154},[144,128867,128868],{"class":146,"line":1342},[144,128869,1595],{"class":154},[144,128871,128872],{"class":146,"line":1348},[144,128873,128874],{"class":213},"\u002F* 混合单位 *\u002F\n",[144,128876,128877,128879],{"class":146,"line":1360},[144,128878,51624],{"class":51313},[144,128880,15603],{"class":154},[144,128882,128883,128885,128887,128889,128891,128893],{"class":146,"line":1642},[144,128884,128825],{"class":203},[144,128886,51450],{"class":154},[144,128888,855],{"class":203},[144,128890,51505],{"class":150},[144,128892,17175],{"class":203},[144,128894,1321],{"class":154},[144,128896,128897],{"class":146,"line":1647},[144,128898,1595],{"class":154},[14,128900,128901],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[292,128903,128904,128912],{},[295,128905,128906],{},[298,128907,128908,128910],{},[301,128909,128678],{"align":23768},[301,128911,25882],{"align":23768},[339,128913,128914,128921],{},[298,128915,128916,128918],{},[344,128917,51981],{"align":23768},[344,128919,128920],{"align":23768},"百分数|由浮点数和单位标识符组成的长度值",[298,128922,128923,128926],{},[344,128924,128925],{"align":23768},"position",[344,128927,128928],{"align":23768},"top|center|bottom|left|center|right 方位名词",[14,128930,128931],{},"其他说明：",[14,128933,128934],{},"①参数是方位名词",[14,128936,128937],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,128939,128940],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,128942,128943],{},"②参数是精确单位",[14,128945,128946],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,128948,128949],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,128951,128952],{},"③参数是混合单位",[14,128954,128955],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[115,128957,128959],{"id":128958},"_825-背景图片固定","8.2.5 背景图片固定",[135,128961,128963],{"className":126565,"code":128962,"language":126567,"meta":30,"style":30},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[141,128964,128965,128970,128976,128988,128992,128997,129003,129013],{"__ignoreMap":30},[144,128966,128967],{"class":146,"line":147},[144,128968,128969],{"class":213},"\u002F* 背景滚动（默认） *\u002F\n",[144,128971,128972,128974],{"class":146,"line":66},[144,128973,51624],{"class":51313},[144,128975,15603],{"class":154},[144,128977,128978,128981,128983,128986],{"class":146,"line":1210},[144,128979,128980],{"class":203},"  background-attachment",[144,128982,51450],{"class":154},[144,128984,128985],{"class":203},"scroll",[144,128987,1321],{"class":154},[144,128989,128990],{"class":146,"line":1225},[144,128991,1595],{"class":154},[144,128993,128994],{"class":146,"line":1231},[144,128995,128996],{"class":213},"\u002F* 背景固定 *\u002F\n",[144,128998,128999,129001],{"class":146,"line":1245},[144,129000,51624],{"class":51313},[144,129002,15603],{"class":154},[144,129004,129005,129007,129009,129011],{"class":146,"line":1251},[144,129006,128980],{"class":203},[144,129008,51450],{"class":154},[144,129010,86246],{"class":203},[144,129012,1321],{"class":154},[144,129014,129015],{"class":146,"line":1342},[144,129016,1595],{"class":154},[292,129018,129019,129028],{},[295,129020,129021],{},[298,129022,129023,129026],{},[301,129024,129025],{"align":23768},"参数",[301,129027,102709],{"align":23768},[339,129029,129030,129037],{},[298,129031,129032,129034],{},[344,129033,128985],{"align":23768},[344,129035,129036],{"align":23768},"背景图像是随对象内容滚动",[298,129038,129039,129041],{},[344,129040,86246],{"align":23768},[344,129042,129043],{"align":23768},"背景图像固定",[115,129045,129047],{"id":129046},"_826-背景样式合写","8.2.6 背景样式合写",[135,129049,129051],{"className":126565,"code":129050,"language":126567,"meta":30,"style":30},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[141,129052,129053,129058,129064,129092],{"__ignoreMap":30},[144,129054,129055],{"class":146,"line":147},[144,129056,129057],{"class":213},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[144,129059,129060,129062],{"class":146,"line":66},[144,129061,51624],{"class":51313},[144,129063,15603],{"class":154},[144,129065,129066,129068,129070,129072,129075,129077,129079,129081,129083,129086,129088,129090],{"class":146,"line":1210},[144,129067,70624],{"class":203},[144,129069,51450],{"class":154},[144,129071,60855],{"class":203},[144,129073,129074],{"class":203}," url",[144,129076,155],{"class":154},[144,129078,128663],{"class":5247},[144,129080,13745],{"class":154},[144,129082,61749],{"class":203},[144,129084,129085],{"class":203}," fixed",[144,129087,17175],{"class":203},[144,129089,128832],{"class":203},[144,129091,1321],{"class":154},[144,129093,129094],{"class":146,"line":1225},[144,129095,1595],{"class":154},[115,129097,129099],{"id":129098},"_827-背景色半透明","8.2.7 背景色半透明",[135,129101,129103],{"className":126565,"code":129102,"language":126567,"meta":30,"style":30},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[141,129104,129105,129111,129137],{"__ignoreMap":30},[144,129106,129107,129109],{"class":146,"line":147},[144,129108,51624],{"class":51313},[144,129110,15603],{"class":154},[144,129112,129113,129115,129117,129119,129121,129123,129125,129127,129129,129131,129133,129135],{"class":146,"line":66},[144,129114,70624],{"class":203},[144,129116,51450],{"class":154},[144,129118,55123],{"class":203},[144,129120,155],{"class":154},[144,129122,346],{"class":203},[144,129124,12466],{"class":154},[144,129126,346],{"class":203},[144,129128,12466],{"class":154},[144,129130,346],{"class":203},[144,129132,12466],{"class":154},[144,129134,100534],{"class":203},[144,129136,2749],{"class":154},[144,129138,129139],{"class":146,"line":1210},[144,129140,1595],{"class":154},[14,129142,99409],{},[14,129144,129145],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129147,129148],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129150,129151],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129153,129154],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[115,129156,129158],{"id":129157},"_828-总结","8.2.8 总结",[292,129160,129161,129172],{},[295,129162,129163],{},[298,129164,129165,129168,129170],{},[301,129166,129167],{"align":23768},"属性",[301,129169,102709],{"align":23768},[301,129171,307],{"align":23768},[339,129173,129174,129185,129196,129207,129218,129229,129240],{},[298,129175,129176,129179,129182],{},[344,129177,129178],{"align":23768},"background-color",[344,129180,129181],{"align":23768},"背景颜色",[344,129183,129184],{"align":23768},"预定义的颜色值\u002F十六进制\u002FRGB代码",[298,129186,129187,129190,129193],{},[344,129188,129189],{"align":23768},"background-image",[344,129191,129192],{"align":23768},"背景图片",[344,129194,129195],{"align":23768},"url(图片路径)",[298,129197,129198,129201,129204],{},[344,129199,129200],{"align":23768},"background-repeat",[344,129202,129203],{"align":23768},"是否平铺",[344,129205,129206],{"align":23768},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[298,129208,129209,129212,129215],{},[344,129210,129211],{"align":23768},"background-position",[344,129213,129214],{"align":23768},"背景位置",[344,129216,129217],{"align":23768},"length\u002Fposition 分别是x和y坐标",[298,129219,129220,129223,129226],{},[344,129221,129222],{"align":23768},"background-attachment",[344,129224,129225],{"align":23768},"背景附着",[344,129227,129228],{"align":23768},"scroll(背景滚动) \u002Ffixed (背景固定)",[298,129230,129231,129234,129237],{},[344,129232,129233],{"align":23768},"背景简写",[344,129235,129236],{"align":23768},"书写更简单",[344,129238,129239],{"align":23768},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[298,129241,129242,129245,129248],{},[344,129243,129244],{"align":23768},"背景半透明",[344,129246,129247],{"align":23768},"背景颜色半透明",[344,129249,129250],{"align":23768},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129252,129253],{},"颜色渐变：",[28,129255],{"style":126421,"src":129256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[28,129258],{"style":126421,"src":129259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[115,129261,129263],{"id":129262},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[135,129265,129267],{"className":127312,"code":129266,"language":127314,"meta":30,"style":30},"\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",[141,129268,129269,129284,129303,129322,129341,129360,129379],{"__ignoreMap":30},[144,129270,129271,129273,129275,129277,129279,129282],{"class":146,"line":147},[144,129272,1065],{"class":154},[144,129274,51624],{"class":51313},[144,129276,53499],{"class":1993},[144,129278,200],{"class":154},[144,129280,129281],{"class":259},"\"nav\"",[144,129283,51320],{"class":154},[144,129285,129286,129288,129290,129292,129294,129296,129299,129301],{"class":146,"line":66},[144,129287,52157],{"class":154},[144,129289,393],{"class":51313},[144,129291,61070],{"class":1993},[144,129293,200],{"class":154},[144,129295,61075],{"class":259},[144,129297,129298],{"class":154},">五彩导航1\u003C\u002F",[144,129300,393],{"class":51313},[144,129302,51320],{"class":154},[144,129304,129305,129307,129309,129311,129313,129315,129318,129320],{"class":146,"line":1210},[144,129306,52157],{"class":154},[144,129308,393],{"class":51313},[144,129310,61070],{"class":1993},[144,129312,200],{"class":154},[144,129314,61075],{"class":259},[144,129316,129317],{"class":154},">五彩导航2\u003C\u002F",[144,129319,393],{"class":51313},[144,129321,51320],{"class":154},[144,129323,129324,129326,129328,129330,129332,129334,129337,129339],{"class":146,"line":1225},[144,129325,52157],{"class":154},[144,129327,393],{"class":51313},[144,129329,61070],{"class":1993},[144,129331,200],{"class":154},[144,129333,61075],{"class":259},[144,129335,129336],{"class":154},">五彩导航3\u003C\u002F",[144,129338,393],{"class":51313},[144,129340,51320],{"class":154},[144,129342,129343,129345,129347,129349,129351,129353,129356,129358],{"class":146,"line":1231},[144,129344,52157],{"class":154},[144,129346,393],{"class":51313},[144,129348,61070],{"class":1993},[144,129350,200],{"class":154},[144,129352,61075],{"class":259},[144,129354,129355],{"class":154},">五彩导航4\u003C\u002F",[144,129357,393],{"class":51313},[144,129359,51320],{"class":154},[144,129361,129362,129364,129366,129368,129370,129372,129375,129377],{"class":146,"line":1245},[144,129363,52157],{"class":154},[144,129365,393],{"class":51313},[144,129367,61070],{"class":1993},[144,129369,200],{"class":154},[144,129371,61075],{"class":259},[144,129373,129374],{"class":154},">五彩导航5\u003C\u002F",[144,129376,393],{"class":51313},[144,129378,51320],{"class":154},[144,129380,129381,129383,129385],{"class":146,"line":1251},[144,129382,51798],{"class":154},[144,129384,51624],{"class":51313},[144,129386,51320],{"class":154},[135,129388,129390],{"className":126565,"code":129389,"language":126567,"meta":30,"style":30},".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",[141,129391,129392,129401,129411,129423,129435,129445,129457,129467,129471,129496,129519,129542,129565],{"__ignoreMap":30},[144,129393,129394,129397,129399],{"class":146,"line":147},[144,129395,129396],{"class":1993},".nav",[144,129398,1429],{"class":51313},[144,129400,15603],{"class":154},[144,129402,129403,129405,129407,129409],{"class":146,"line":66},[144,129404,128181],{"class":203},[144,129406,51450],{"class":154},[144,129408,72396],{"class":203},[144,129410,1321],{"class":154},[144,129412,129413,129415,129417,129419,129421],{"class":146,"line":1210},[144,129414,70581],{"class":203},[144,129416,51450],{"class":154},[144,129418,972],{"class":203},[144,129420,51505],{"class":150},[144,129422,1321],{"class":154},[144,129424,129425,129427,129429,129431,129433],{"class":146,"line":1225},[144,129426,70801],{"class":203},[144,129428,51450],{"class":154},[144,129430,1011],{"class":203},[144,129432,51505],{"class":150},[144,129434,1321],{"class":154},[144,129436,129437,129439,129441,129443],{"class":146,"line":1231},[144,129438,70539],{"class":203},[144,129440,51450],{"class":154},[144,129442,51605],{"class":203},[144,129444,1321],{"class":154},[144,129446,129447,129449,129451,129453,129455],{"class":146,"line":1245},[144,129448,127249],{"class":203},[144,129450,51450],{"class":154},[144,129452,1011],{"class":203},[144,129454,51505],{"class":150},[144,129456,1321],{"class":154},[144,129458,129459,129461,129463,129465],{"class":146,"line":1251},[144,129460,70918],{"class":203},[144,129462,51450],{"class":154},[144,129464,60855],{"class":203},[144,129466,1321],{"class":154},[144,129468,129469],{"class":146,"line":1342},[144,129470,1595],{"class":154},[144,129472,129473,129475,129477,129480,129482,129484,129487,129489,129491,129493],{"class":146,"line":1348},[144,129474,129396],{"class":1993},[144,129476,1429],{"class":51313},[144,129478,129479],{"class":1993},":nth-child",[144,129481,155],{"class":154},[144,129483,372],{"class":203},[144,129485,129486],{"class":154},") { ",[144,129488,129178],{"class":203},[144,129490,51450],{"class":154},[144,129492,128596],{"class":203},[144,129494,129495],{"class":154},"; }\n",[144,129497,129498,129500,129502,129504,129506,129508,129510,129512,129514,129517],{"class":146,"line":1360},[144,129499,129396],{"class":1993},[144,129501,1429],{"class":51313},[144,129503,129479],{"class":1993},[144,129505,155],{"class":154},[144,129507,232],{"class":203},[144,129509,129486],{"class":154},[144,129511,129178],{"class":203},[144,129513,51450],{"class":154},[144,129515,129516],{"class":203},"#ff0000",[144,129518,129495],{"class":154},[144,129520,129521,129523,129525,129527,129529,129531,129533,129535,129537,129540],{"class":146,"line":1642},[144,129522,129396],{"class":1993},[144,129524,1429],{"class":51313},[144,129526,129479],{"class":1993},[144,129528,155],{"class":154},[144,129530,226],{"class":203},[144,129532,129486],{"class":154},[144,129534,129178],{"class":203},[144,129536,51450],{"class":154},[144,129538,129539],{"class":203},"#00a4ff",[144,129541,129495],{"class":154},[144,129543,129544,129546,129548,129550,129552,129554,129556,129558,129560,129563],{"class":146,"line":1647},[144,129545,129396],{"class":1993},[144,129547,1429],{"class":51313},[144,129549,129479],{"class":1993},[144,129551,155],{"class":154},[144,129553,448],{"class":203},[144,129555,129486],{"class":154},[144,129557,129178],{"class":203},[144,129559,51450],{"class":154},[144,129561,129562],{"class":203},"#ff00ff",[144,129564,129495],{"class":154},[144,129566,129567,129569,129571,129573,129575,129577,129579,129581,129583,129586],{"class":146,"line":1653},[144,129568,129396],{"class":1993},[144,129570,1429],{"class":51313},[144,129572,129479],{"class":1993},[144,129574,155],{"class":154},[144,129576,474],{"class":203},[144,129578,129486],{"class":154},[144,129580,129178],{"class":203},[144,129582,51450],{"class":154},[144,129584,129585],{"class":203},"#00ff00",[144,129587,129495],{"class":154},[18,129589,129591],{"id":129590},"_83-css三大特性","8.3 css三大特性",[115,129593,129595],{"id":129594},"_831-层叠性","8.3.1 层叠性",[14,129597,129598],{},"为了解决样式冲突问题",[14,129600,129601],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,129603,129604],{},"   ②样式不冲突，不会层叠",[115,129606,129608],{"id":129607},"_832-继承性","8.3.2 继承性",[14,129610,129611],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,129613,129614],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[135,129616,129618],{"className":126565,"code":129617,"language":126567,"meta":30,"style":30},"p {\n  color: #333;\n}\n",[141,129619,129620,129626,129636],{"__ignoreMap":30},[144,129621,129622,129624],{"class":146,"line":147},[144,129623,14],{"class":51313},[144,129625,15603],{"class":154},[144,129627,129628,129630,129632,129634],{"class":146,"line":66},[144,129629,70918],{"class":203},[144,129631,51450],{"class":154},[144,129633,62382],{"class":203},[144,129635,1321],{"class":154},[144,129637,129638],{"class":146,"line":1210},[144,129639,1595],{"class":154},[28,129641],{"style":126421,"src":129642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,129644,129645],{},"解释：①行高可以跟单位也可以不跟单位",[14,129647,129648],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,129650,129651],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,129653,129654],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[115,129656,129658],{"id":129657},"_833-优先级","8.3.3 优先级",[98,129660,129661,129664],{},[101,129662,129663],{},"选择器相同，则执行层叠性",[101,129665,129666],{},"选择器不同，则根据选择器权重执行",[292,129668,129669,129679],{},[295,129670,129671],{},[298,129672,129673,129676],{},[301,129674,129675],{"align":23768},"选择器",[301,129677,129678],{"align":23768},"选择器权重",[339,129680,129681,129689,129697,129705,129713,129721],{},[298,129682,129683,129686],{},[344,129684,129685],{"align":23768},"继承 或者*",[344,129687,129688],{"align":23768},"0，0，0，0",[298,129690,129691,129694],{},[344,129692,129693],{"align":23768},"标签选择器",[344,129695,129696],{"align":23768},"0，0，0，1",[298,129698,129699,129702],{},[344,129700,129701],{"align":23768},"类选择器，伪类选择器",[344,129703,129704],{"align":23768},"0，0，1，0",[298,129706,129707,129710],{},[344,129708,129709],{"align":23768},"ID选择器",[344,129711,129712],{"align":23768},"0，1，0，0",[298,129714,129715,129718],{},[344,129716,129717],{"align":23768},"行内样式",[344,129719,129720],{"align":23768},"1，0，0，0",[298,129722,129723,129726],{},[344,129724,129725],{"align":23768},"！important",[344,129727,129728],{"align":23768},"无穷大",[14,129730,129731],{},"! important用法：",[135,129733,129735],{"className":126565,"code":129734,"language":126567,"meta":30,"style":30},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[141,129736,129737,129742,129748,129761,129765,129770,129776,129786],{"__ignoreMap":30},[144,129738,129739],{"class":146,"line":147},[144,129740,129741],{"class":213},"\u002F* !important 拥有最高优先级 *\u002F\n",[144,129743,129744,129746],{"class":146,"line":66},[144,129745,51624],{"class":51313},[144,129747,15603],{"class":154},[144,129749,129750,129752,129754,129756,129759],{"class":146,"line":1210},[144,129751,70918],{"class":203},[144,129753,51450],{"class":154},[144,129755,51658],{"class":203},[144,129757,129758],{"class":150}," !important",[144,129760,1321],{"class":154},[144,129762,129763],{"class":146,"line":1225},[144,129764,1595],{"class":154},[144,129766,129767],{"class":146,"line":1231},[144,129768,129769],{"class":213},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[144,129771,129772,129774],{"class":146,"line":1245},[144,129773,51624],{"class":51313},[144,129775,15603],{"class":154},[144,129777,129778,129780,129782,129784],{"class":146,"line":1251},[144,129779,70918],{"class":203},[144,129781,51450],{"class":154},[144,129783,57434],{"class":203},[144,129785,1321],{"class":154},[144,129787,129788],{"class":146,"line":1342},[144,129789,1595],{"class":154},[14,129791,129792],{},"优先级注意点：",[14,129794,129795],{},"①权重是有4组数字组成,但是不会有进位",[14,129797,129798],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,129800,129801],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,129803,129804],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,129806,129807],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,129809,129810],{},"⑥复合选择器",[292,129812,129813,129823],{},[295,129814,129815],{},[298,129816,129817,129820],{},[301,129818,129819],{"align":23768},"div ul li",[301,129821,129822],{"align":23768},"0,0,0,3",[339,129824,129825,129833,129841],{},[298,129826,129827,129830],{},[344,129828,129829],{"align":23768},".nav ul li",[344,129831,129832],{"align":23768},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[298,129834,129835,129838],{},[344,129836,129837],{"align":23768},"a:hover",[344,129839,129840],{"align":23768},"0,0,1,1",[298,129842,129843,129846],{},[344,129844,129845],{"align":23768},".nav a",[344,129847,129840],{"align":23768},[5157,129849,129850],{},"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":30,"searchDepth":66,"depth":66,"links":129852},[129853,129861,129872],{"id":127961,"depth":66,"text":127962,"children":129854},[129855,129856,129857,129858,129859,129860],{"id":127974,"depth":1210,"text":127975},{"id":128046,"depth":1210,"text":128047},{"id":128118,"depth":1210,"text":128119},{"id":128149,"depth":1210,"text":128150},{"id":128156,"depth":1210,"text":128157},{"id":128309,"depth":1210,"text":128310},{"id":128617,"depth":66,"text":128618,"children":129862},[129863,129864,129865,129866,129867,129868,129869,129870,129871],{"id":128624,"depth":1210,"text":128625},{"id":128634,"depth":1210,"text":128635},{"id":128730,"depth":1210,"text":128731},{"id":128803,"depth":1210,"text":128804},{"id":128958,"depth":1210,"text":128959},{"id":129046,"depth":1210,"text":129047},{"id":129098,"depth":1210,"text":129099},{"id":129157,"depth":1210,"text":129158},{"id":129262,"depth":1210,"text":129263},{"id":129590,"depth":66,"text":129591,"children":129873},[129874,129875,129876],{"id":129594,"depth":1210,"text":129595},{"id":129607,"depth":1210,"text":129608},{"id":129657,"depth":1210,"text":129658},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127953,"description":23408},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129883,"title":129884,"body":129885,"description":23408,"extension":70,"meta":131475,"navigation":72,"path":131476,"seo":131477,"stem":131478,"__hash__":131479},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129886,"toc":131454},[129887,129890,129894,129897,129900,129903,129906,129909,129912,129915,129919,129927,129964,130000,130003,130017,130022,130056,130059,130152,130157,130160,130190,130193,130198,130206,130210,130217,130263,130307,130312,130315,130318,130321,130324,130327,130330,130332,130335,130339,130344,130388,130393,130396,130399,130436,130441,130444,130447,130450,130453,130485,130488,130491,130494,130526,130529,130532,130535,130539,130542,130574,130577,130581,130601,130604,130612,130615,130619,130624,130627,130659,130664,130667,130705,130709,130714,130717,130720,130751,130754,130771,130776,130828,130888,130893,130947,130985,130989,130993,130996,131000,131008,131011,131013,131024,131029,131077,131111,131114,131117,131120,131123,131167,131170,131173,131176,131179,131182,131185,131229,131232,131235,131238,131241,131244,131247,131253,131256,131300,131303,131306,131309,131312,131315,131359,131362,131364,131367,131371,131375,131413,131417,131420,131423,131427,131435,131439,131442,131445,131448,131451],[10,129888,129884],{"id":129889},"_9-css盒模型浮动与切图",[18,129891,129893],{"id":129892},"_91-盒子模型","9.1 盒子模型",[14,129895,129896],{},"利用盒子来设计网页",[14,129898,129899],{},"盒子包含：边框、外边距、内边距、实际内容",[14,129901,129902],{},"网页布局设置：",[14,129904,129905],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,129907,129908],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,129910,129911],{},"③往盒子里装内容",[28,129913],{"style":126421,"src":129914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[115,129916,129918],{"id":129917},"_911-边框border","9.1.1 边框（border）",[98,129920,129921,129924],{},[101,129922,129923],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[101,129925,129926],{},"语法",[135,129928,129930],{"className":126565,"code":129929,"language":126567,"meta":30,"style":30},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[141,129931,129932,129937,129943,129960],{"__ignoreMap":30},[144,129933,129934],{"class":146,"line":147},[144,129935,129936],{"class":213},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[144,129938,129939,129941],{"class":146,"line":66},[144,129940,51624],{"class":51313},[144,129942,15603],{"class":154},[144,129944,129945,129947,129949,129951,129953,129955,129958],{"class":146,"line":1210},[144,129946,70909],{"class":203},[144,129948,51450],{"class":154},[144,129950,372],{"class":203},[144,129952,51505],{"class":150},[144,129954,51534],{"class":203},[144,129956,129957],{"class":203}," #ccc",[144,129959,1321],{"class":154},[144,129961,129962],{"class":146,"line":1225},[144,129963,1595],{"class":154},[292,129965,129966,129974],{},[295,129967,129968],{},[298,129969,129970,129972],{},[301,129971,129167],{"align":23768},[301,129973,102709],{"align":23768},[339,129975,129976,129984,129992],{},[298,129977,129978,129981],{},[344,129979,129980],{"align":23768},"border-width",[344,129982,129983],{"align":23768},"定义边框粗细，单位是px",[298,129985,129986,129989],{},[344,129987,129988],{"align":23768},"border-style",[344,129990,129991],{"align":23768},"边框的样式",[298,129993,129994,129997],{},[344,129995,129996],{"align":23768},"border-color",[344,129998,129999],{"align":23768},"边框的颜色",[14,130001,130002],{},"边框样式 border-style 可以设置如下值：",[1162,130004,130005,130008,130011,130014],{},[101,130006,130007],{},"none：没有边框即忽略所有边框的宽度（默认值）",[101,130009,130010],{},"solid：边框为单实线(最为常用的)",[101,130012,130013],{},"dashed：边框为虚线",[101,130015,130016],{},"dotted：边框为点线",[98,130018,130019],{"start":1210},[101,130020,130021],{},"边框的合写分写",[135,130023,130024],{"className":126565,"code":129929,"language":126567,"meta":30,"style":30},[141,130025,130026,130030,130036,130052],{"__ignoreMap":30},[144,130027,130028],{"class":146,"line":147},[144,130029,129936],{"class":213},[144,130031,130032,130034],{"class":146,"line":66},[144,130033,51624],{"class":51313},[144,130035,15603],{"class":154},[144,130037,130038,130040,130042,130044,130046,130048,130050],{"class":146,"line":1210},[144,130039,70909],{"class":203},[144,130041,51450],{"class":154},[144,130043,372],{"class":203},[144,130045,51505],{"class":150},[144,130047,51534],{"class":203},[144,130049,129957],{"class":203},[144,130051,1321],{"class":154},[144,130053,130054],{"class":146,"line":1225},[144,130055,1595],{"class":154},[14,130057,130058],{},"边框分开写法：",[135,130060,130062],{"className":126565,"code":130061,"language":126567,"meta":30,"style":30},"\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",[141,130063,130064,130069,130075,130093,130111,130130,130148],{"__ignoreMap":30},[144,130065,130066],{"class":146,"line":147},[144,130067,130068],{"class":213},"\u002F* 边框分开写法 *\u002F\n",[144,130070,130071,130073],{"class":146,"line":66},[144,130072,51624],{"class":51313},[144,130074,15603],{"class":154},[144,130076,130077,130080,130082,130084,130086,130088,130091],{"class":146,"line":1210},[144,130078,130079],{"class":203},"  border-top",[144,130081,51450],{"class":154},[144,130083,372],{"class":203},[144,130085,51505],{"class":150},[144,130087,51534],{"class":203},[144,130089,130090],{"class":203}," #000",[144,130092,1321],{"class":154},[144,130094,130095,130098,130100,130102,130104,130106,130109],{"class":146,"line":1225},[144,130096,130097],{"class":203},"  border-right",[144,130099,51450],{"class":154},[144,130101,232],{"class":203},[144,130103,51505],{"class":150},[144,130105,62254],{"class":203},[144,130107,130108],{"class":203}," #333",[144,130110,1321],{"class":154},[144,130112,130113,130116,130118,130120,130122,130125,130128],{"class":146,"line":1231},[144,130114,130115],{"class":203},"  border-bottom",[144,130117,51450],{"class":154},[144,130119,226],{"class":203},[144,130121,51505],{"class":150},[144,130123,130124],{"class":203}," dotted",[144,130126,130127],{"class":203}," #666",[144,130129,1321],{"class":154},[144,130131,130132,130135,130137,130139,130141,130143,130146],{"class":146,"line":1245},[144,130133,130134],{"class":203},"  border-left",[144,130136,51450],{"class":154},[144,130138,372],{"class":203},[144,130140,51505],{"class":150},[144,130142,51534],{"class":203},[144,130144,130145],{"class":203}," #999",[144,130147,1321],{"class":154},[144,130149,130150],{"class":146,"line":1251},[144,130151,1595],{"class":154},[98,130153,130154],{"start":1225},[101,130155,130156],{},"表格的细线边框",[14,130158,130159],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[135,130161,130163],{"className":126565,"code":130162,"language":126567,"meta":30,"style":30},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[141,130164,130165,130170,130176,130186],{"__ignoreMap":30},[144,130166,130167],{"class":146,"line":147},[144,130168,130169],{"class":213},"\u002F* 表格细线边框合并 *\u002F\n",[144,130171,130172,130174],{"class":146,"line":66},[144,130173,292],{"class":51313},[144,130175,15603],{"class":154},[144,130177,130178,130180,130182,130184],{"class":146,"line":1210},[144,130179,70591],{"class":203},[144,130181,51450],{"class":154},[144,130183,65048],{"class":203},[144,130185,1321],{"class":154},[144,130187,130188],{"class":146,"line":1225},[144,130189,1595],{"class":154},[14,130191,130192],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[98,130194,130195],{"start":1231},[101,130196,130197],{},"解决边框额外增加盒子的实际大小的方法：",[1162,130199,130200,130203],{},[101,130201,130202],{},"测量盒子大小的时候,不量边框",[101,130204,130205],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[115,130207,130209],{"id":130208},"_912-内边距","9.1.2 内边距",[98,130211,130212,130215],{},[101,130213,130214],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[101,130216,129926],{},[292,130218,130219,130229],{},[295,130220,130221],{},[298,130222,130223,130226],{},[301,130224,130225],{"align":23768},"值的个数",[301,130227,130228],{"align":23768},"表达意思",[339,130230,130231,130239,130247,130255],{},[298,130232,130233,130236],{},[344,130234,130235],{"align":23768},"padding: 5px;",[344,130237,130238],{"align":23768},"1个值，代表上下左右都有5个元素",[298,130240,130241,130244],{},[344,130242,130243],{"align":23768},"padding: 5px 10px;",[344,130245,130246],{"align":23768},"2个值，代表上下内边距为5像素，左右内边距为10像素",[298,130248,130249,130252],{},[344,130250,130251],{"align":23768},"padding: 5px 10px 20px;",[344,130253,130254],{"align":23768},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[298,130256,130257,130260],{},[344,130258,130259],{"align":23768},"padding: 5px 10px 20px 30px;",[344,130261,130262],{"align":23768},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[292,130264,130265,130273],{},[295,130266,130267],{},[298,130268,130269,130271],{},[301,130270,129167],{"align":23768},[301,130272,102709],{"align":23768},[339,130274,130275,130283,130291,130299],{},[298,130276,130277,130280],{},[344,130278,130279],{"align":23768},"padding-left",[344,130281,130282],{"align":23768},"左内边距",[298,130284,130285,130288],{},[344,130286,130287],{"align":23768},"padding-right",[344,130289,130290],{"align":23768},"右内边距",[298,130292,130293,130296],{},[344,130294,130295],{"align":23768},"padding-top",[344,130297,130298],{"align":23768},"上内边距",[298,130300,130301,130304],{},[344,130302,130303],{"align":23768},"padding-bottom",[344,130305,130306],{"align":23768},"下内边距",[98,130308,130309],{"start":1210},[101,130310,130311],{},"内边距会影响盒子的实际大小",[14,130313,130314],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130316,130317],{},"①内容和边框有了距离，添加了内边距",[14,130319,130320],{},"②padding影响了盒子实际大小",[14,130322,130323],{},"内边距对盒子大小的影响：",[14,130325,130326],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130328,130329],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130331,95233],{},[14,130333,130334],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[115,130336,130338],{"id":130337},"_913-外边距","9.1.3 外边距",[98,130340,130341],{},[101,130342,130343],{},"控制盒子与盒子之间的距离",[292,130345,130346,130354],{},[295,130347,130348],{},[298,130349,130350,130352],{},[301,130351,129167],{"align":23768},[301,130353,102709],{"align":23768},[339,130355,130356,130364,130372,130380],{},[298,130357,130358,130361],{},[344,130359,130360],{"align":23768},"margin-left",[344,130362,130363],{"align":23768},"左外边距",[298,130365,130366,130369],{},[344,130367,130368],{"align":23768},"margin-right",[344,130370,130371],{"align":23768},"右外边距",[298,130373,130374,130377],{},[344,130375,130376],{"align":23768},"margin-top",[344,130378,130379],{"align":23768},"上外边距",[298,130381,130382,130385],{},[344,130383,130384],{"align":23768},"margin-bottom",[344,130386,130387],{"align":23768},"下外边距",[98,130389,130390],{"start":66},[101,130391,130392],{},"外边距可以让块级盒子水平居中的两个条件：",[14,130394,130395],{},"①盒子必须指定了宽度（width）",[14,130397,130398],{},"②盒子左右的外边距都设置为 auto",[135,130400,130402],{"className":126565,"code":130401,"language":126567,"meta":30,"style":30},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[141,130403,130404,130409,130416,130432],{"__ignoreMap":30},[144,130405,130406],{"class":146,"line":147},[144,130407,130408],{"class":213},"\u002F* margin 复合写法（同上） *\u002F\n",[144,130410,130411,130414],{"class":146,"line":66},[144,130412,130413],{"class":1993},".box",[144,130415,15603],{"class":154},[144,130417,130418,130420,130422,130424,130426,130429],{"class":146,"line":1210},[144,130419,70483],{"class":203},[144,130421,51450],{"class":154},[144,130423,346],{"class":203},[144,130425,51569],{"class":203},[144,130427,130428],{"class":154},";  ",[144,130430,130431],{"class":213},"\u002F* 块级盒子水平居中 *\u002F\n",[144,130433,130434],{"class":146,"line":1225},[144,130435,1595],{"class":154},[98,130437,130438],{"start":1210},[101,130439,130440],{},"外边距塌陷问题",[14,130442,130443],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[28,130445],{"style":126421,"src":130446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,130448,130449],{},"解决方案：",[14,130451,130452],{},"①可以为父亲元素定义上边距",[135,130454,130455],{"className":126565,"code":130401,"language":126567,"meta":30,"style":30},[141,130456,130457,130461,130467,130481],{"__ignoreMap":30},[144,130458,130459],{"class":146,"line":147},[144,130460,130408],{"class":213},[144,130462,130463,130465],{"class":146,"line":66},[144,130464,130413],{"class":1993},[144,130466,15603],{"class":154},[144,130468,130469,130471,130473,130475,130477,130479],{"class":146,"line":1210},[144,130470,70483],{"class":203},[144,130472,51450],{"class":154},[144,130474,346],{"class":203},[144,130476,51569],{"class":203},[144,130478,130428],{"class":154},[144,130480,130431],{"class":213},[144,130482,130483],{"class":146,"line":1225},[144,130484,1595],{"class":154},[14,130486,130487],{},"②可以为父亲元素定义上内边距",[14,130489,130490],{},"③可以为父亲元素添加overflow:hidden",[28,130492],{"style":126421,"src":130493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[135,130495,130496],{"className":126565,"code":130401,"language":126567,"meta":30,"style":30},[141,130497,130498,130502,130508,130522],{"__ignoreMap":30},[144,130499,130500],{"class":146,"line":147},[144,130501,130408],{"class":213},[144,130503,130504,130506],{"class":146,"line":66},[144,130505,130413],{"class":1993},[144,130507,15603],{"class":154},[144,130509,130510,130512,130514,130516,130518,130520],{"class":146,"line":1210},[144,130511,70483],{"class":203},[144,130513,51450],{"class":154},[144,130515,346],{"class":203},[144,130517,51569],{"class":203},[144,130519,130428],{"class":154},[144,130521,130431],{"class":213},[144,130523,130524],{"class":146,"line":1225},[144,130525,1595],{"class":154},[28,130527],{"style":126421,"src":130528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,130530,130531],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,130533,130534],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[115,130536,130538],{"id":130537},"_914-清除内外边距","9.1.4 清除内外边距",[14,130540,130541],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[135,130543,130544],{"className":126565,"code":130401,"language":126567,"meta":30,"style":30},[141,130545,130546,130550,130556,130570],{"__ignoreMap":30},[144,130547,130548],{"class":146,"line":147},[144,130549,130408],{"class":213},[144,130551,130552,130554],{"class":146,"line":66},[144,130553,130413],{"class":1993},[144,130555,15603],{"class":154},[144,130557,130558,130560,130562,130564,130566,130568],{"class":146,"line":1210},[144,130559,70483],{"class":203},[144,130561,51450],{"class":154},[144,130563,346],{"class":203},[144,130565,51569],{"class":203},[144,130567,130428],{"class":154},[144,130569,130431],{"class":213},[144,130571,130572],{"class":146,"line":1225},[144,130573,1595],{"class":154},[14,130575,130576],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[115,130578,130580],{"id":130579},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1162,130582,130583,130586,130589,130592,130595,130598],{},[101,130584,130585],{},"文件→打开 ：可以打开我们要测量的图片",[101,130587,130588],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[101,130590,130591],{},"右击标尺，把里面的单位改为像素",[101,130593,130594],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[101,130596,130597],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[101,130599,130600],{},"用选区拖动 可以测量大小",[28,130602],{"style":126421,"src":130603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1162,130605,130606,130609],{},[101,130607,130608],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[101,130610,130611],{},"吸管取色工具",[28,130613],{"style":126421,"src":130614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[115,130616,130618],{"id":130617},"_916-案例","9.1.6 案例",[98,130620,130621],{},[101,130622,130623],{},"小米商品",[28,130625],{"style":126421,"src":130626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[135,130628,130629],{"className":126565,"code":130401,"language":126567,"meta":30,"style":30},[141,130630,130631,130635,130641,130655],{"__ignoreMap":30},[144,130632,130633],{"class":146,"line":147},[144,130634,130408],{"class":213},[144,130636,130637,130639],{"class":146,"line":66},[144,130638,130413],{"class":1993},[144,130640,15603],{"class":154},[144,130642,130643,130645,130647,130649,130651,130653],{"class":146,"line":1210},[144,130644,70483],{"class":203},[144,130646,51450],{"class":154},[144,130648,346],{"class":203},[144,130650,51569],{"class":203},[144,130652,130428],{"class":154},[144,130654,130431],{"class":213},[144,130656,130657],{"class":146,"line":1225},[144,130658,1595],{"class":154},[98,130660,130661],{"start":66},[101,130662,130663],{},"快报模块",[28,130665],{"style":126421,"src":130666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[135,130668,130670],{"className":127312,"code":130669,"language":127314,"meta":30,"style":30},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[141,130671,130672,130677,130692,130697],{"__ignoreMap":30},[144,130673,130674],{"class":146,"line":147},[144,130675,130676],{"class":213},"\u003C!-- HTML 代码示例 -->\n",[144,130678,130679,130681,130683,130685,130687,130690],{"class":146,"line":66},[144,130680,1065],{"class":154},[144,130682,51624],{"class":51313},[144,130684,53499],{"class":1993},[144,130686,200],{"class":154},[144,130688,130689],{"class":259},"\"example\"",[144,130691,51320],{"class":154},[144,130693,130694],{"class":146,"line":1210},[144,130695,130696],{"class":154},"  示例内容\n",[144,130698,130699,130701,130703],{"class":146,"line":1225},[144,130700,51798],{"class":154},[144,130702,51624],{"class":51313},[144,130704,51320],{"class":154},[115,130706,130708],{"id":130707},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[98,130710,130711],{},[101,130712,130713],{},"圆角边框",[14,130715,130716],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[28,130718],{"style":126421,"src":130719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[135,130721,130723],{"className":126565,"code":130722,"language":126567,"meta":30,"style":30},"div {\n  border: 1px solid #ccc;\n}\n",[141,130724,130725,130731,130747],{"__ignoreMap":30},[144,130726,130727,130729],{"class":146,"line":147},[144,130728,51624],{"class":51313},[144,130730,15603],{"class":154},[144,130732,130733,130735,130737,130739,130741,130743,130745],{"class":146,"line":66},[144,130734,70909],{"class":203},[144,130736,51450],{"class":154},[144,130738,372],{"class":203},[144,130740,51505],{"class":150},[144,130742,51534],{"class":203},[144,130744,129957],{"class":203},[144,130746,1321],{"class":154},[144,130748,130749],{"class":146,"line":1210},[144,130750,1595],{"class":154},[14,130752,130753],{},"解释:",[1162,130755,130756,130759,130762,130765,130768],{},[101,130757,130758],{},"参数值可以为数值或百分比的形式",[101,130760,130761],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[101,130763,130764],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[101,130766,130767],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[101,130769,130770],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[98,130772,130773],{"start":66},[101,130774,130775],{},"盒子阴影",[135,130777,130779],{"className":126565,"code":130778,"language":126567,"meta":30,"style":30},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[141,130780,130781,130787,130824],{"__ignoreMap":30},[144,130782,130783,130785],{"class":146,"line":147},[144,130784,51624],{"class":51313},[144,130786,15603],{"class":154},[144,130788,130789,130792,130794,130796,130798,130800,130802,130804,130806,130808,130810,130812,130814,130816,130818,130820,130822],{"class":146,"line":66},[144,130790,130791],{"class":203},"  box-shadow",[144,130793,51450],{"class":154},[144,130795,346],{"class":203},[144,130797,14786],{"class":203},[144,130799,51505],{"class":150},[144,130801,2068],{"class":203},[144,130803,51505],{"class":150},[144,130805,78780],{"class":203},[144,130807,155],{"class":154},[144,130809,346],{"class":203},[144,130811,12466],{"class":154},[144,130813,346],{"class":203},[144,130815,12466],{"class":154},[144,130817,346],{"class":203},[144,130819,12466],{"class":154},[144,130821,86223],{"class":203},[144,130823,2749],{"class":154},[144,130825,130826],{"class":146,"line":1210},[144,130827,1595],{"class":154},[292,130829,130830,130838],{},[295,130831,130832],{},[298,130833,130834,130836],{},[301,130835,307],{"align":23768},[301,130837,27502],{"align":23768},[339,130839,130840,130848,130856,130864,130872,130880],{},[298,130841,130842,130845],{},[344,130843,130844],{"align":23768},"h-shadow",[344,130846,130847],{"align":23768},"必需,水平阴影的位置,允许负值",[298,130849,130850,130853],{},[344,130851,130852],{"align":23768},"v-shadow",[344,130854,130855],{"align":23768},"必需,垂直阴影的位置,允许负值",[298,130857,130858,130861],{},[344,130859,130860],{"align":23768},"blur",[344,130862,130863],{"align":23768},"可选,模糊距离,就是影子的虚实",[298,130865,130866,130869],{},[344,130867,130868],{"align":23768},"spread",[344,130870,130871],{"align":23768},"可选,阴影尺寸",[298,130873,130874,130877],{},[344,130875,130876],{"align":23768},"color",[344,130878,130879],{"align":23768},"可选,阴影的颜色",[298,130881,130882,130885],{},[344,130883,130884],{"align":23768},"inset",[344,130886,130887],{"align":23768},"可选,将外部阴影(outset)改为内部阴影",[98,130889,130890],{"start":1210},[101,130891,130892],{},"文字阴影",[135,130894,130896],{"className":126565,"code":130895,"language":126567,"meta":30,"style":30},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[141,130897,130898,130904,130943],{"__ignoreMap":30},[144,130899,130900,130902],{"class":146,"line":147},[144,130901,14],{"class":51313},[144,130903,15603],{"class":154},[144,130905,130906,130909,130911,130913,130915,130917,130919,130921,130923,130925,130927,130929,130931,130933,130935,130937,130939,130941],{"class":146,"line":66},[144,130907,130908],{"class":203},"  text-shadow",[144,130910,51450],{"class":154},[144,130912,372],{"class":203},[144,130914,51505],{"class":150},[144,130916,25131],{"class":203},[144,130918,51505],{"class":150},[144,130920,14786],{"class":203},[144,130922,51505],{"class":150},[144,130924,78780],{"class":203},[144,130926,155],{"class":154},[144,130928,346],{"class":203},[144,130930,12466],{"class":154},[144,130932,346],{"class":203},[144,130934,12466],{"class":154},[144,130936,346],{"class":203},[144,130938,12466],{"class":154},[144,130940,100534],{"class":203},[144,130942,2749],{"class":154},[144,130944,130945],{"class":146,"line":1210},[144,130946,1595],{"class":154},[292,130948,130949,130957],{},[295,130950,130951],{},[298,130952,130953,130955],{},[301,130954,307],{"align":23768},[301,130956,27502],{"align":23768},[339,130958,130959,130965,130972,130979],{},[298,130960,130961,130963],{},[344,130962,130844],{"align":23768},[344,130964,130847],{"align":23768},[298,130966,130967,130969],{},[344,130968,130852],{"align":23768},[344,130970,130971],{"align":23768},"必需,垂直阴影位置,允许负值",[298,130973,130974,130976],{},[344,130975,130860],{"align":23768},[344,130977,130978],{"align":23768},"可选,模糊的距离",[298,130980,130981,130983],{},[344,130982,130876],{"align":23768},[344,130984,130879],{"align":23768},[18,130986,130988],{"id":130987},"_92-浮动","9.2 浮动",[115,130990,130992],{"id":130991},"_921-浮动介绍","9.2.1 浮动介绍",[14,130994,130995],{},"在16.2中详细介绍",[115,130997,130999],{"id":130998},"_922-清除浮动","9.2.2 清除浮动",[98,131001,131002,131005],{},[101,131003,131004],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[101,131006,131007],{},"清除浮动的本质",[14,131009,131010],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,131012,9056],{},[1162,131014,131015,131018,131021],{},[101,131016,131017],{},"如果父盒子本身有高度，则不需要清除浮动",[101,131019,131020],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[101,131022,131023],{},"父级有了高度，就不会影响下面的标准流了",[98,131025,131026],{"start":1210},[101,131027,131028],{},"清除浮动样式",[135,131030,131032],{"className":126565,"code":131031,"language":126567,"meta":30,"style":30},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[141,131033,131034,131041,131052,131056,131063,131073],{"__ignoreMap":30},[144,131035,131036,131039],{"class":146,"line":147},[144,131037,131038],{"class":1993},".left",[144,131040,15603],{"class":154},[144,131042,131043,131046,131048,131050],{"class":146,"line":66},[144,131044,131045],{"class":203},"  float",[144,131047,51450],{"class":154},[144,131049,23768],{"class":203},[144,131051,1321],{"class":154},[144,131053,131054],{"class":146,"line":1210},[144,131055,1595],{"class":154},[144,131057,131058,131061],{"class":146,"line":1225},[144,131059,131060],{"class":1993},".right",[144,131062,15603],{"class":154},[144,131064,131065,131067,131069,131071],{"class":146,"line":1231},[144,131066,131045],{"class":203},[144,131068,51450],{"class":154},[144,131070,72535],{"class":203},[144,131072,1321],{"class":154},[144,131074,131075],{"class":146,"line":1245},[144,131076,1595],{"class":154},[292,131078,131079,131087],{},[295,131080,131081],{},[298,131082,131083,131085],{},[301,131084,127029],{"align":23768},[301,131086,27502],{"align":23768},[339,131088,131089,131096,131103],{},[298,131090,131091,131093],{},[344,131092,23768],{"align":23768},[344,131094,131095],{"align":23768},"不允许左侧有浮动元素（清除左侧浮动的影响）",[298,131097,131098,131100],{},[344,131099,72535],{"align":23768},[344,131101,131102],{"align":23768},"不允许右侧有浮动元素（清除右侧浮动的影响）",[298,131104,131105,131108],{},[344,131106,131107],{"align":23768},"both",[344,131109,131110],{"align":23768},"同时清除左右侧浮动的影响",[14,131112,131113],{},"法一",[14,131115,131116],{},"额外标签法也称为隔墙法",[14,131118,131119],{},"使用方式：",[14,131121,131122],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[135,131124,131125],{"className":126565,"code":131031,"language":126567,"meta":30,"style":30},[141,131126,131127,131133,131143,131147,131153,131163],{"__ignoreMap":30},[144,131128,131129,131131],{"class":146,"line":147},[144,131130,131038],{"class":1993},[144,131132,15603],{"class":154},[144,131134,131135,131137,131139,131141],{"class":146,"line":66},[144,131136,131045],{"class":203},[144,131138,51450],{"class":154},[144,131140,23768],{"class":203},[144,131142,1321],{"class":154},[144,131144,131145],{"class":146,"line":1210},[144,131146,1595],{"class":154},[144,131148,131149,131151],{"class":146,"line":1225},[144,131150,131060],{"class":1993},[144,131152,15603],{"class":154},[144,131154,131155,131157,131159,131161],{"class":146,"line":1231},[144,131156,131045],{"class":203},[144,131158,51450],{"class":154},[144,131160,72535],{"class":203},[144,131162,1321],{"class":154},[144,131164,131165],{"class":146,"line":1245},[144,131166,1595],{"class":154},[14,131168,131169],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131171,131172],{},"优点： 通俗易懂，书写方便",[14,131174,131175],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131177,131178],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131180,131181],{},"法二",[14,131183,131184],{},"父级添加overflow属性",[135,131186,131187],{"className":126565,"code":131031,"language":126567,"meta":30,"style":30},[141,131188,131189,131195,131205,131209,131215,131225],{"__ignoreMap":30},[144,131190,131191,131193],{"class":146,"line":147},[144,131192,131038],{"class":1993},[144,131194,15603],{"class":154},[144,131196,131197,131199,131201,131203],{"class":146,"line":66},[144,131198,131045],{"class":203},[144,131200,51450],{"class":154},[144,131202,23768],{"class":203},[144,131204,1321],{"class":154},[144,131206,131207],{"class":146,"line":1210},[144,131208,1595],{"class":154},[144,131210,131211,131213],{"class":146,"line":1225},[144,131212,131060],{"class":1993},[144,131214,15603],{"class":154},[144,131216,131217,131219,131221,131223],{"class":146,"line":1231},[144,131218,131045],{"class":203},[144,131220,51450],{"class":154},[144,131222,72535],{"class":203},[144,131224,1321],{"class":154},[144,131226,131227],{"class":146,"line":1245},[144,131228,1595],{"class":154},[14,131230,131231],{},"overflow: hidden;",[14,131233,131234],{},"优点：代码简洁",[14,131236,131237],{},"缺点：无法显示溢出的部分",[14,131239,131240],{},"注意：是给父元素添加代码",[14,131242,131243],{},"法三",[14,131245,131246],{},"父级添加after伪元素",[14,131248,131249,131252],{},[131250,131251],"after",{}," 方式是额外标签法的升级版",[14,131254,131255],{},"使用的时候复制就可以",[135,131257,131258],{"className":126565,"code":131031,"language":126567,"meta":30,"style":30},[141,131259,131260,131266,131276,131280,131286,131296],{"__ignoreMap":30},[144,131261,131262,131264],{"class":146,"line":147},[144,131263,131038],{"class":1993},[144,131265,15603],{"class":154},[144,131267,131268,131270,131272,131274],{"class":146,"line":66},[144,131269,131045],{"class":203},[144,131271,51450],{"class":154},[144,131273,23768],{"class":203},[144,131275,1321],{"class":154},[144,131277,131278],{"class":146,"line":1210},[144,131279,1595],{"class":154},[144,131281,131282,131284],{"class":146,"line":1225},[144,131283,131060],{"class":1993},[144,131285,15603],{"class":154},[144,131287,131288,131290,131292,131294],{"class":146,"line":1231},[144,131289,131045],{"class":203},[144,131291,51450],{"class":154},[144,131293,72535],{"class":203},[144,131295,1321],{"class":154},[144,131297,131298],{"class":146,"line":1245},[144,131299,1595],{"class":154},[14,131301,131302],{},"优点：没有增加标签，结构更简单",[14,131304,131305],{},"缺点：照顾低版本浏览器",[14,131307,131308],{},"代表网站： 百度、淘宝网、网易等",[14,131310,131311],{},"法四",[14,131313,131314],{},"父级添加双伪元素",[135,131316,131317],{"className":126565,"code":131031,"language":126567,"meta":30,"style":30},[141,131318,131319,131325,131335,131339,131345,131355],{"__ignoreMap":30},[144,131320,131321,131323],{"class":146,"line":147},[144,131322,131038],{"class":1993},[144,131324,15603],{"class":154},[144,131326,131327,131329,131331,131333],{"class":146,"line":66},[144,131328,131045],{"class":203},[144,131330,51450],{"class":154},[144,131332,23768],{"class":203},[144,131334,1321],{"class":154},[144,131336,131337],{"class":146,"line":1210},[144,131338,1595],{"class":154},[144,131340,131341,131343],{"class":146,"line":1225},[144,131342,131060],{"class":1993},[144,131344,15603],{"class":154},[144,131346,131347,131349,131351,131353],{"class":146,"line":1231},[144,131348,131045],{"class":203},[144,131350,51450],{"class":154},[144,131352,72535],{"class":203},[144,131354,1321],{"class":154},[144,131356,131357],{"class":146,"line":1245},[144,131358,1595],{"class":154},[14,131360,131361],{},"优点：代码更简洁",[14,131363,131305],{},[14,131365,131366],{},"代表网站：小米、腾讯等",[18,131368,131370],{"id":131369},"_93-ps切图","9.3 PS切图",[115,131372,131374],{"id":131373},"_931-常见图片格式","9.3.1 常见图片格式",[292,131376,131377,131387],{},[295,131378,131379],{},[298,131380,131381,131384],{},[301,131382,131383],{"align":23768},"jpg图像格式",[301,131385,131386],{"align":23768},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[339,131388,131389,131397,131405],{},[298,131390,131391,131394],{},[344,131392,131393],{"align":23768},"gif图像格式",[344,131395,131396],{"align":23768},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[298,131398,131399,131402],{},[344,131400,131401],{"align":23768},"png图像格式",[344,131403,131404],{"align":23768},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[298,131406,131407,131410],{},[344,131408,131409],{"align":23768},"PSD图像格式",[344,131411,131412],{"align":23768},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[115,131414,131416],{"id":131415},"_932-图层切图","9.3.2 图层切图",[14,131418,131419],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,131421,131422],{},"按住shift选中两个图层->图层菜单->合并图层",[115,131424,131426],{"id":131425},"_933-切片切图","9.3.3 切片切图",[1162,131428,131429,131432],{},[101,131430,131431],{},"利用切片工具手动划出",[101,131433,131434],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[115,131436,131438],{"id":131437},"_934-切图步骤","9.3.4 切图步骤",[14,131440,131441],{},"用切片工具选中：",[28,131443],{"style":126421,"src":131444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,131446,131447],{},"文件 -> 导出",[28,131449],{"style":126421,"src":131450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5157,131452,131453],{},"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":30,"searchDepth":66,"depth":66,"links":131455},[131456,131465,131469],{"id":129892,"depth":66,"text":129893,"children":131457},[131458,131459,131460,131461,131462,131463,131464],{"id":129917,"depth":1210,"text":129918},{"id":130208,"depth":1210,"text":130209},{"id":130337,"depth":1210,"text":130338},{"id":130537,"depth":1210,"text":130538},{"id":130579,"depth":1210,"text":130580},{"id":130617,"depth":1210,"text":130618},{"id":130707,"depth":1210,"text":130708},{"id":130987,"depth":66,"text":130988,"children":131466},[131467,131468],{"id":130991,"depth":1210,"text":130992},{"id":130998,"depth":1210,"text":130999},{"id":131369,"depth":66,"text":131370,"children":131470},[131471,131472,131473,131474],{"id":131373,"depth":1210,"text":131374},{"id":131415,"depth":1210,"text":131416},{"id":131425,"depth":1210,"text":131426},{"id":131437,"depth":1210,"text":131438},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129884,"description":23408},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131481,"title":131482,"body":131483,"description":23408,"extension":70,"meta":132124,"navigation":72,"path":132125,"seo":132126,"stem":132127,"__hash__":132128},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131484,"toc":132112},[131485,131488,131492,131518,131552,131556,131560,131563,131605,131612,131622,131630,131632,131635,131638,131641,131648,131662,131666,131669,131698,131702,131705,131719,131723,131726,131754,131758,131761,131787,131791,131796,131829,131834,131862,131866,131883,131929,131934,131978,131995,132102,132110],[10,131486,131482],{"id":131487},"_10-css规范与学成在线案例",[18,131489,131491],{"id":131490},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[98,131493,131494,131500,131506,131512],{},[101,131495,131496,131499],{},[304,131497,131498],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[101,131501,131502,131505],{},[304,131503,131504],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[101,131507,131508,131511],{},[304,131509,131510],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[101,131513,131514,131517],{},[304,131515,131516],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[135,131519,131520],{"className":126565,"code":129929,"language":126567,"meta":30,"style":30},[141,131521,131522,131526,131532,131548],{"__ignoreMap":30},[144,131523,131524],{"class":146,"line":147},[144,131525,129936],{"class":213},[144,131527,131528,131530],{"class":146,"line":66},[144,131529,51624],{"class":51313},[144,131531,15603],{"class":154},[144,131533,131534,131536,131538,131540,131542,131544,131546],{"class":146,"line":1210},[144,131535,70909],{"class":203},[144,131537,51450],{"class":154},[144,131539,372],{"class":203},[144,131541,51505],{"class":150},[144,131543,51534],{"class":203},[144,131545,129957],{"class":203},[144,131547,1321],{"class":154},[144,131549,131550],{"class":146,"line":1225},[144,131551,1595],{"class":154},[18,131553,131555],{"id":131554},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[115,131557,131559],{"id":131558},"_1021-header头部制作","10.2.1 header头部制作",[28,131561],{"style":126421,"src":131562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1162,131564,131565,131572,131579,131585,131592,131599],{},[101,131566,131567,131568,131571],{},"1号是版心盒子 ",[304,131569,131570],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[101,131573,131574,131575,131578],{},"版心盒子 里面包含 2号盒子 ",[304,131576,131577],{},"logo"," 图标",[101,131580,131581,131582,131584],{},"版心盒子 里面包含 3号盒子 ",[304,131583,53726],{}," 导航栏",[101,131586,131587,131588,131591],{},"版心盒子 里面包含 4号盒子 ",[304,131589,131590],{},"search"," 搜索框",[101,131593,131594,131595,131598],{},"版心盒子 里面包含 5号盒子 ",[304,131596,131597],{},"user"," 个人信息",[101,131600,131601,131602],{},"注意，要求里面的 ",[304,131603,131604],{},"4个子盒子 必须都浮动",[98,131606,131607],{},[101,131608,131609],{},[304,131610,131611],{},"导航栏注意点:",[14,131613,131614,131615,131618,131619],{},"实际开发中， ",[304,131616,131617],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[304,131620,131621],{},"用 li 包含链接(li+a)的做法",[1162,131623,131624,131627],{},[101,131625,131626],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[101,131628,131629],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,131631,9056],{},[14,131633,131634],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,131636,131637],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,131639,131640],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[98,131642,131643],{"start":66},[101,131644,131645],{},[304,131646,131647],{},"4号盒子search的细节：",[1162,131649,131650,131653,131656],{},[101,131651,131652],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[101,131654,131655],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[101,131657,131658,131661],{},[141,131659,131660],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[115,131663,131665],{"id":131664},"_1022-banner制作","10.2.2 banner制作",[28,131667],{"style":126421,"src":131668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1162,131670,131671,131678,131684,131691],{},[101,131672,131673,131674,131677],{},"1号盒子是通栏的大盒子 ",[304,131675,131676],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[101,131679,131680,131681,131683],{},"2号盒子是版心 ",[304,131682,950],{}," ， 要水平居中对齐",[101,131685,131686,131687,131690],{},"3号盒子版心内，左对齐 ",[304,131688,131689],{},"subnav"," 侧导航栏",[101,131692,131693,131694,131697],{},"4号盒子版心内，右对齐 ",[304,131695,131696],{},"course"," 课程",[115,131699,131701],{"id":131700},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[28,131703],{"style":126421,"src":131704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1162,131706,131707,131710,131713,131716],{},[101,131708,131709],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[101,131711,131712],{},"1号盒子是标题 H3 左侧浮动",[101,131714,131715],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[101,131717,131718],{},"3号盒子 右浮动 mod 修改",[115,131720,131722],{"id":131721},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[28,131724],{"style":126421,"src":131725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1162,131727,131728,131734,131741,131748,131751],{},[101,131729,131730,131731,131733],{},"1号盒子为最大的盒子 ",[304,131732,53727],{}," 版心水平居中对齐",[101,131735,131736,131737,131740],{},"2号盒子为上面部分 ",[304,131738,131739],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[101,131742,131743,131744,131747],{},"3号盒子为底下部分 ",[304,131745,131746],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[101,131749,131750],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[101,131752,131753],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[115,131755,131757],{"id":131756},"_1025-底部模块制作","10.2.5 底部模块制作",[28,131759],{"style":126421,"src":131760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1162,131762,131763,131770,131773,131780],{},[101,131764,131765,131766,131769],{},"1号盒子通栏大盒子 底部 ",[304,131767,131768],{},"footer"," 给高度 底色是白色",[101,131771,131772],{},"2号盒子版心水平居中",[101,131774,131775,131776,131779],{},"3号盒子版权 ",[304,131777,131778],{},"copyright"," 左对齐",[101,131781,131782,131783,131786],{},"4号盒子 链接组 ",[304,131784,131785],{},"links"," 右对齐",[115,131788,131790],{"id":131789},"_1026-代码模块","10.2.6 代码模块",[98,131792,131793],{},[101,131794,131795],{},"html部分",[135,131797,131799],{"className":127312,"code":131798,"language":127314,"meta":30,"style":30},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[141,131800,131801],{"__ignoreMap":30},[144,131802,131803,131805,131807,131809,131811,131814,131817,131819,131822,131825,131827],{"class":146,"line":147},[144,131804,1065],{"class":154},[144,131806,393],{"class":51313},[144,131808,61070],{"class":1993},[144,131810,200],{"class":154},[144,131812,131813],{"class":259},"\"https:\u002F\u002Fexample.com\"",[144,131815,131816],{"class":1993}," target",[144,131818,200],{"class":154},[144,131820,131821],{"class":259},"\"_blank\"",[144,131823,131824],{"class":154},">链接文字\u003C\u002F",[144,131826,393],{"class":51313},[144,131828,51320],{"class":154},[98,131830,131831],{"start":66},[101,131832,131833],{},"css部分",[135,131835,131836],{"className":127312,"code":131798,"language":127314,"meta":30,"style":30},[141,131837,131838],{"__ignoreMap":30},[144,131839,131840,131842,131844,131846,131848,131850,131852,131854,131856,131858,131860],{"class":146,"line":147},[144,131841,1065],{"class":154},[144,131843,393],{"class":51313},[144,131845,61070],{"class":1993},[144,131847,200],{"class":154},[144,131849,131813],{"class":259},[144,131851,131816],{"class":1993},[144,131853,200],{"class":154},[144,131855,131821],{"class":259},[144,131857,131824],{"class":154},[144,131859,393],{"class":51313},[144,131861,51320],{"class":154},[115,131863,131865],{"id":131864},"_1027-收获","10.2.7 收获",[98,131867,131868,131871,131874,131877,131880],{},[101,131869,131870],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[101,131872,131873],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[101,131875,131876],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[101,131878,131879],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[101,131881,131882],{},"遗忘代码",[135,131884,131886],{"className":126565,"code":131885,"language":126567,"meta":30,"style":30},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[141,131887,131888,131910,131915,131925],{"__ignoreMap":30},[144,131889,131890,131892,131894,131896,131898,131900,131902,131904,131906,131908],{"class":146,"line":147},[144,131891,51624],{"class":51313},[144,131893,12466],{"class":154},[144,131895,14],{"class":51313},[144,131897,12466],{"class":154},[144,131899,10],{"class":51313},[144,131901,12466],{"class":154},[144,131903,1162],{"class":51313},[144,131905,12466],{"class":154},[144,131907,101],{"class":51313},[144,131909,15603],{"class":154},[144,131911,131912],{"class":146,"line":66},[144,131913,131914],{"class":213},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[144,131916,131917,131919,131921,131923],{"class":146,"line":1210},[144,131918,128181],{"class":203},[144,131920,51450],{"class":154},[144,131922,60882],{"class":203},[144,131924,1321],{"class":154},[144,131926,131927],{"class":146,"line":1225},[144,131928,1595],{"class":154},[98,131930,131931],{"start":1245},[101,131932,131933],{},"html引css的程序",[135,131935,131936],{"className":126565,"code":131885,"language":126567,"meta":30,"style":30},[141,131937,131938,131960,131964,131974],{"__ignoreMap":30},[144,131939,131940,131942,131944,131946,131948,131950,131952,131954,131956,131958],{"class":146,"line":147},[144,131941,51624],{"class":51313},[144,131943,12466],{"class":154},[144,131945,14],{"class":51313},[144,131947,12466],{"class":154},[144,131949,10],{"class":51313},[144,131951,12466],{"class":154},[144,131953,1162],{"class":51313},[144,131955,12466],{"class":154},[144,131957,101],{"class":51313},[144,131959,15603],{"class":154},[144,131961,131962],{"class":146,"line":66},[144,131963,131914],{"class":213},[144,131965,131966,131968,131970,131972],{"class":146,"line":1210},[144,131967,128181],{"class":203},[144,131969,51450],{"class":154},[144,131971,60882],{"class":203},[144,131973,1321],{"class":154},[144,131975,131976],{"class":146,"line":1225},[144,131977,1595],{"class":154},[98,131979,131980,131983,131986,131989,131992],{"start":1251},[101,131981,131982],{},"浮动的盒子不会有外边距合并问题",[101,131984,131985],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[101,131987,131988],{},"ctrl+g快速定位行；shift+alt多个光标",[101,131990,131991],{},"学习上方各个模块的选择器起名方法，以后就这样用",[101,131993,131994],{},"在写选择器时尽量写全一些，例如",[135,131996,131998],{"className":126565,"code":131997,"language":126567,"meta":30,"style":30},"\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",[141,131999,132000,132005,132021,132026,132041,132046,132061,132066,132081,132086],{"__ignoreMap":30},[144,132001,132002],{"class":146,"line":147},[144,132003,132004],{"class":213},"\u002F* 静态定位（默认） *\u002F\n",[144,132006,132007,132010,132012,132014,132016,132019],{"class":146,"line":66},[144,132008,132009],{"class":1993},".static",[144,132011,79820],{"class":154},[144,132013,128925],{"class":203},[144,132015,51450],{"class":154},[144,132017,132018],{"class":203},"static",[144,132020,129495],{"class":154},[144,132022,132023],{"class":146,"line":1210},[144,132024,132025],{"class":213},"\u002F* 相对定位 *\u002F\n",[144,132027,132028,132031,132033,132035,132037,132039],{"class":146,"line":1225},[144,132029,132030],{"class":1993},".relative",[144,132032,79820],{"class":154},[144,132034,128925],{"class":203},[144,132036,51450],{"class":154},[144,132038,54777],{"class":203},[144,132040,129495],{"class":154},[144,132042,132043],{"class":146,"line":1231},[144,132044,132045],{"class":213},"\u002F* 绝对定位 *\u002F\n",[144,132047,132048,132051,132053,132055,132057,132059],{"class":146,"line":1245},[144,132049,132050],{"class":1993},".absolute",[144,132052,79820],{"class":154},[144,132054,128925],{"class":203},[144,132056,51450],{"class":154},[144,132058,54844],{"class":203},[144,132060,129495],{"class":154},[144,132062,132063],{"class":146,"line":1251},[144,132064,132065],{"class":213},"\u002F* 固定定位 *\u002F\n",[144,132067,132068,132071,132073,132075,132077,132079],{"class":146,"line":1342},[144,132069,132070],{"class":1993},".fixed",[144,132072,79820],{"class":154},[144,132074,128925],{"class":203},[144,132076,51450],{"class":154},[144,132078,86246],{"class":203},[144,132080,129495],{"class":154},[144,132082,132083],{"class":146,"line":1348},[144,132084,132085],{"class":213},"\u002F* 粘性定位 *\u002F\n",[144,132087,132088,132091,132093,132095,132097,132100],{"class":146,"line":1360},[144,132089,132090],{"class":1993},".sticky",[144,132092,79820],{"class":154},[144,132094,128925],{"class":203},[144,132096,51450],{"class":154},[144,132098,132099],{"class":203},"sticky",[144,132101,129495],{"class":154},[98,132103,132104,132107],{"start":1647},[101,132105,132106],{},"一定要用好注释",[101,132108,132109],{},"浮动的盒子不会有外边距合并的问题",[5157,132111,131453],{},{"title":30,"searchDepth":66,"depth":66,"links":132113},[132114,132115],{"id":131490,"depth":66,"text":131491},{"id":131554,"depth":66,"text":131555,"children":132116},[132117,132118,132119,132120,132121,132122,132123],{"id":131558,"depth":1210,"text":131559},{"id":131664,"depth":1210,"text":131665},{"id":131700,"depth":1210,"text":131701},{"id":131721,"depth":1210,"text":131722},{"id":131756,"depth":1210,"text":131757},{"id":131789,"depth":1210,"text":131790},{"id":131864,"depth":1210,"text":131865},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131482,"description":23408},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132130,"title":132131,"body":132132,"description":23408,"extension":70,"meta":133618,"navigation":72,"path":133619,"seo":133620,"stem":133621,"__hash__":133622},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132133,"toc":133610},[132134,132137,132141,132145,132156,132160,132177,132221,132254,132257,132274,132277,132280,132324,132328,132332,132335,132338,132342,132345,132356,132419,132460,132463,132478,132532,132540,132543,132554,132608,132634,132637,132650,132704,132736,132790,132813,132867,132870,132873,132880,132934,132955,133009,133012,133015,133100,133108,133165,133188,133192,133195,133213,133217,133236,133290,133328,133332,133335,133338,133360,133364,133372,133375,133380,133391,133394,133398,133412,133456,133459,133463,133466,133471,133497,133502,133579,133582,133586,133589,133592,133595,133598,133601,133604,133607],[10,132135,132131],{"id":132136},"_11-传统布局与定位体系",[18,132138,132140],{"id":132139},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[115,132142,132144],{"id":132143},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1162,132146,132147,132150,132153],{},[101,132148,132149],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[101,132151,132152],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[101,132154,132155],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[115,132157,132159],{"id":132158},"_1112-浮动","11.1.2 浮动",[1162,132161,132162,132165,132168,132171,132174],{},[101,132163,132164],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[101,132166,132167],{},"浮动可以改变元素标签默认的排列方式",[101,132169,132170],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[101,132172,132173],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[101,132175,132176],{},"在使用行内块转换时盒子之间是有空隙的",[135,132178,132179],{"className":126565,"code":131031,"language":126567,"meta":30,"style":30},[141,132180,132181,132187,132197,132201,132207,132217],{"__ignoreMap":30},[144,132182,132183,132185],{"class":146,"line":147},[144,132184,131038],{"class":1993},[144,132186,15603],{"class":154},[144,132188,132189,132191,132193,132195],{"class":146,"line":66},[144,132190,131045],{"class":203},[144,132192,51450],{"class":154},[144,132194,23768],{"class":203},[144,132196,1321],{"class":154},[144,132198,132199],{"class":146,"line":1210},[144,132200,1595],{"class":154},[144,132202,132203,132205],{"class":146,"line":1225},[144,132204,131060],{"class":1993},[144,132206,15603],{"class":154},[144,132208,132209,132211,132213,132215],{"class":146,"line":1231},[144,132210,131045],{"class":203},[144,132212,51450],{"class":154},[144,132214,72535],{"class":203},[144,132216,1321],{"class":154},[144,132218,132219],{"class":146,"line":1245},[144,132220,1595],{"class":154},[292,132222,132223,132231],{},[295,132224,132225],{},[298,132226,132227,132229],{},[301,132228,127029],{"align":23768},[301,132230,27502],{"align":23768},[339,132232,132233,132240,132247],{},[298,132234,132235,132237],{},[344,132236,54750],{"align":23768},[344,132238,132239],{"align":23768},"元素不浮动（默认值）",[298,132241,132242,132244],{},[344,132243,23768],{"align":23768},[344,132245,132246],{"align":23768},"元素向左浮动",[298,132248,132249,132251],{},[344,132250,72535],{"align":23768},[344,132252,132253],{"align":23768},"元素向右浮动",[14,132255,132256],{},"浮动重点：",[1162,132258,132259,132262,132265,132268,132271],{},[101,132260,132261],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[101,132263,132264],{},"浮动的元素会一行内显示并且元素顶部对齐",[101,132266,132267],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[101,132269,132270],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[101,132272,132273],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132275,132276],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132278,132279],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[135,132281,132282],{"className":126565,"code":131031,"language":126567,"meta":30,"style":30},[141,132283,132284,132290,132300,132304,132310,132320],{"__ignoreMap":30},[144,132285,132286,132288],{"class":146,"line":147},[144,132287,131038],{"class":1993},[144,132289,15603],{"class":154},[144,132291,132292,132294,132296,132298],{"class":146,"line":66},[144,132293,131045],{"class":203},[144,132295,51450],{"class":154},[144,132297,23768],{"class":203},[144,132299,1321],{"class":154},[144,132301,132302],{"class":146,"line":1210},[144,132303,1595],{"class":154},[144,132305,132306,132308],{"class":146,"line":1225},[144,132307,131060],{"class":1993},[144,132309,15603],{"class":154},[144,132311,132312,132314,132316,132318],{"class":146,"line":1231},[144,132313,131045],{"class":203},[144,132315,51450],{"class":154},[144,132317,72535],{"class":203},[144,132319,1321],{"class":154},[144,132321,132322],{"class":146,"line":1245},[144,132323,1595],{"class":154},[115,132325,132327],{"id":132326},"_1113-定位","11.1.3 定位",[22029,132329,132331],{"id":132330},"_11131-使用场景","11.1.3.1 使用场景",[14,132333,132334],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132336,132337],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22029,132339,132341],{"id":132340},"_11132-定位组成","11.1.3.2 定位组成",[14,132343,132344],{},"定位 = 定位模式 + 边偏移",[98,132346,132347],{},[101,132348,132349,132352,132353],{},[304,132350,132351],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[304,132354,132355],{},"定位模式",[135,132357,132359],{"className":126565,"code":132358,"language":126567,"meta":30,"style":30},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[141,132360,132361,132367,132381,132398,132415],{"__ignoreMap":30},[144,132362,132363,132365],{"class":146,"line":147},[144,132364,130413],{"class":1993},[144,132366,15603],{"class":154},[144,132368,132369,132372,132374,132376,132378],{"class":146,"line":66},[144,132370,132371],{"class":203},"  position",[144,132373,51450],{"class":154},[144,132375,54777],{"class":203},[144,132377,130428],{"class":154},[144,132379,132380],{"class":213},"\u002F* 定位模式 *\u002F\n",[144,132382,132383,132386,132388,132390,132392,132395],{"class":146,"line":1210},[144,132384,132385],{"class":203},"  top",[144,132387,51450],{"class":154},[144,132389,601],{"class":203},[144,132391,51505],{"class":150},[144,132393,132394],{"class":154},";           ",[144,132396,132397],{"class":213},"\u002F* 边偏移：上 *\u002F\n",[144,132399,132400,132403,132405,132407,132409,132412],{"class":146,"line":1225},[144,132401,132402],{"class":203},"  left",[144,132404,51450],{"class":154},[144,132406,855],{"class":203},[144,132408,51505],{"class":150},[144,132410,132411],{"class":154},";          ",[144,132413,132414],{"class":213},"\u002F* 边偏移：左 *\u002F\n",[144,132416,132417],{"class":146,"line":1231},[144,132418,1595],{"class":154},[292,132420,132421,132430],{},[295,132422,132423],{},[298,132424,132425,132427],{},[301,132426,307],{"align":23768},[301,132428,132429],{"align":23768},"语义",[339,132431,132432,132439,132446,132453],{},[298,132433,132434,132436],{},[344,132435,132018],{"align":23768},[344,132437,132438],{"align":23768},"静态定位",[298,132440,132441,132443],{},[344,132442,54777],{"align":23768},[344,132444,132445],{"align":23768},"相对定位",[298,132447,132448,132450],{},[344,132449,54844],{"align":23768},[344,132451,132452],{"align":23768},"绝对定位",[298,132454,132455,132457],{},[344,132456,86246],{"align":23768},[344,132458,132459],{"align":23768},"固定定位",[14,132461,132462],{},"（1）静态定位：",[1162,132464,132465,132476],{},[101,132466,132467,132468,132471,132472,132475],{},"静态定位是元素的 ",[304,132469,132470],{},"默认定位方式"," ， ",[304,132473,132474],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[101,132477,5212],{},[135,132479,132480],{"className":126565,"code":132358,"language":126567,"meta":30,"style":30},[141,132481,132482,132488,132500,132514,132528],{"__ignoreMap":30},[144,132483,132484,132486],{"class":146,"line":147},[144,132485,130413],{"class":1993},[144,132487,15603],{"class":154},[144,132489,132490,132492,132494,132496,132498],{"class":146,"line":66},[144,132491,132371],{"class":203},[144,132493,51450],{"class":154},[144,132495,54777],{"class":203},[144,132497,130428],{"class":154},[144,132499,132380],{"class":213},[144,132501,132502,132504,132506,132508,132510,132512],{"class":146,"line":1210},[144,132503,132385],{"class":203},[144,132505,51450],{"class":154},[144,132507,601],{"class":203},[144,132509,51505],{"class":150},[144,132511,132394],{"class":154},[144,132513,132397],{"class":213},[144,132515,132516,132518,132520,132522,132524,132526],{"class":146,"line":1225},[144,132517,132402],{"class":203},[144,132519,51450],{"class":154},[144,132521,855],{"class":203},[144,132523,51505],{"class":150},[144,132525,132411],{"class":154},[144,132527,132414],{"class":213},[144,132529,132530],{"class":146,"line":1231},[144,132531,1595],{"class":154},[1162,132533,132534,132537],{},[101,132535,132536],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[101,132538,132539],{},"静态定位在布局时我们几乎不用的",[14,132541,132542],{},"（2）相对定位",[1162,132544,132545,132552],{},[101,132546,132547,132548,132551],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[304,132549,132550],{},"原来的位置"," 来说的（自恋型）",[101,132553,5212],{},[135,132555,132556],{"className":126565,"code":132358,"language":126567,"meta":30,"style":30},[141,132557,132558,132564,132576,132590,132604],{"__ignoreMap":30},[144,132559,132560,132562],{"class":146,"line":147},[144,132561,130413],{"class":1993},[144,132563,15603],{"class":154},[144,132565,132566,132568,132570,132572,132574],{"class":146,"line":66},[144,132567,132371],{"class":203},[144,132569,51450],{"class":154},[144,132571,54777],{"class":203},[144,132573,130428],{"class":154},[144,132575,132380],{"class":213},[144,132577,132578,132580,132582,132584,132586,132588],{"class":146,"line":1210},[144,132579,132385],{"class":203},[144,132581,51450],{"class":154},[144,132583,601],{"class":203},[144,132585,51505],{"class":150},[144,132587,132394],{"class":154},[144,132589,132397],{"class":213},[144,132591,132592,132594,132596,132598,132600,132602],{"class":146,"line":1225},[144,132593,132402],{"class":203},[144,132595,51450],{"class":154},[144,132597,855],{"class":203},[144,132599,51505],{"class":150},[144,132601,132411],{"class":154},[144,132603,132414],{"class":213},[144,132605,132606],{"class":146,"line":1231},[144,132607,1595],{"class":154},[1162,132609,132610],{},[101,132611,132612,132613,132615,132616,132618,132619,132622,132623,132626,132627,132629,132630,132633],{},"相对定位的特点：",[53729,132614],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53729,132617],{},"  ② ",[304,132620,132621],{},"原来"," 在标准流的 ",[304,132624,132625],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53729,132628],{},"  ③因此， ",[304,132631,132632],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,132635,132636],{},"（3）绝对定位",[1162,132638,132639,132648],{},[101,132640,132641,132643,132644,132647],{},[304,132642,132452],{}," 是元素在移动位置的时候，是相对于它 ",[304,132645,132646],{},"祖先元素"," 来说的（拼爹型）",[101,132649,5212],{},[135,132651,132652],{"className":126565,"code":132358,"language":126567,"meta":30,"style":30},[141,132653,132654,132660,132672,132686,132700],{"__ignoreMap":30},[144,132655,132656,132658],{"class":146,"line":147},[144,132657,130413],{"class":1993},[144,132659,15603],{"class":154},[144,132661,132662,132664,132666,132668,132670],{"class":146,"line":66},[144,132663,132371],{"class":203},[144,132665,51450],{"class":154},[144,132667,54777],{"class":203},[144,132669,130428],{"class":154},[144,132671,132380],{"class":213},[144,132673,132674,132676,132678,132680,132682,132684],{"class":146,"line":1210},[144,132675,132385],{"class":203},[144,132677,51450],{"class":154},[144,132679,601],{"class":203},[144,132681,51505],{"class":150},[144,132683,132394],{"class":154},[144,132685,132397],{"class":213},[144,132687,132688,132690,132692,132694,132696,132698],{"class":146,"line":1225},[144,132689,132402],{"class":203},[144,132691,51450],{"class":154},[144,132693,855],{"class":203},[144,132695,51505],{"class":150},[144,132697,132411],{"class":154},[144,132699,132414],{"class":213},[144,132701,132702],{"class":146,"line":1231},[144,132703,1595],{"class":154},[1162,132705,132706,132721,132730,132733],{},[101,132707,132708,132709,132711,132712,132714,132715,132717,132718,132720],{},"绝对定位的特点：",[53729,132710],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53729,132713],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53729,132716],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53729,132719],{},"  (4)固定定位",[101,132722,132723,132725,132726,132729],{},[304,132724,132459],{}," 是元素 ",[304,132727,132728],{},"固定于浏览器可视区的位置"," 。（认死理型）",[101,132731,132732],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[101,132734,132735],{},"语法:",[135,132737,132738],{"className":126565,"code":132358,"language":126567,"meta":30,"style":30},[141,132739,132740,132746,132758,132772,132786],{"__ignoreMap":30},[144,132741,132742,132744],{"class":146,"line":147},[144,132743,130413],{"class":1993},[144,132745,15603],{"class":154},[144,132747,132748,132750,132752,132754,132756],{"class":146,"line":66},[144,132749,132371],{"class":203},[144,132751,51450],{"class":154},[144,132753,54777],{"class":203},[144,132755,130428],{"class":154},[144,132757,132380],{"class":213},[144,132759,132760,132762,132764,132766,132768,132770],{"class":146,"line":1210},[144,132761,132385],{"class":203},[144,132763,51450],{"class":154},[144,132765,601],{"class":203},[144,132767,51505],{"class":150},[144,132769,132394],{"class":154},[144,132771,132397],{"class":213},[144,132773,132774,132776,132778,132780,132782,132784],{"class":146,"line":1225},[144,132775,132402],{"class":203},[144,132777,51450],{"class":154},[144,132779,855],{"class":203},[144,132781,51505],{"class":150},[144,132783,132411],{"class":154},[144,132785,132414],{"class":213},[144,132787,132788],{"class":146,"line":1231},[144,132789,1595],{"class":154},[1162,132791,132792,132801],{},[101,132793,132794,132795,132797,132798,132800],{},"特点:",[53729,132796],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53729,132799],{},"  ②固定定位不再占有原先的位置,完全脱标",[101,132802,132803,132804,132806,132807,132809,132810,132812],{},"固定在版心位置的方法:",[53729,132805],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53729,132808],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53729,132811],{},"  实例：",[135,132814,132815],{"className":126565,"code":132358,"language":126567,"meta":30,"style":30},[141,132816,132817,132823,132835,132849,132863],{"__ignoreMap":30},[144,132818,132819,132821],{"class":146,"line":147},[144,132820,130413],{"class":1993},[144,132822,15603],{"class":154},[144,132824,132825,132827,132829,132831,132833],{"class":146,"line":66},[144,132826,132371],{"class":203},[144,132828,51450],{"class":154},[144,132830,54777],{"class":203},[144,132832,130428],{"class":154},[144,132834,132380],{"class":213},[144,132836,132837,132839,132841,132843,132845,132847],{"class":146,"line":1210},[144,132838,132385],{"class":203},[144,132840,51450],{"class":154},[144,132842,601],{"class":203},[144,132844,51505],{"class":150},[144,132846,132394],{"class":154},[144,132848,132397],{"class":213},[144,132850,132851,132853,132855,132857,132859,132861],{"class":146,"line":1225},[144,132852,132402],{"class":203},[144,132854,51450],{"class":154},[144,132856,855],{"class":203},[144,132858,51505],{"class":150},[144,132860,132411],{"class":154},[144,132862,132414],{"class":213},[144,132864,132865],{"class":146,"line":1231},[144,132866,1595],{"class":154},[28,132868],{"style":126421,"src":132869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,132871,132872],{},"(5)粘性定位",[1162,132874,132875,132878],{},[101,132876,132877],{},"粘性定位可以被认为是相对定位和固定定位的混合",[101,132879,5212],{},[135,132881,132882],{"className":126565,"code":132358,"language":126567,"meta":30,"style":30},[141,132883,132884,132890,132902,132916,132930],{"__ignoreMap":30},[144,132885,132886,132888],{"class":146,"line":147},[144,132887,130413],{"class":1993},[144,132889,15603],{"class":154},[144,132891,132892,132894,132896,132898,132900],{"class":146,"line":66},[144,132893,132371],{"class":203},[144,132895,51450],{"class":154},[144,132897,54777],{"class":203},[144,132899,130428],{"class":154},[144,132901,132380],{"class":213},[144,132903,132904,132906,132908,132910,132912,132914],{"class":146,"line":1210},[144,132905,132385],{"class":203},[144,132907,51450],{"class":154},[144,132909,601],{"class":203},[144,132911,51505],{"class":150},[144,132913,132394],{"class":154},[144,132915,132397],{"class":213},[144,132917,132918,132920,132922,132924,132926,132928],{"class":146,"line":1225},[144,132919,132402],{"class":203},[144,132921,51450],{"class":154},[144,132923,855],{"class":203},[144,132925,51505],{"class":150},[144,132927,132411],{"class":154},[144,132929,132414],{"class":213},[144,132931,132932],{"class":146,"line":1231},[144,132933,1595],{"class":154},[1162,132935,132936],{},[101,132937,132938,132939,132941,132942,132944,132945,132947,132948,132951,132952,132954],{},"粘性定位的特点：",[53729,132940],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53729,132943],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53729,132946],{},"  ③必须添加 top 、left、right、bottom ",[304,132949,132950],{},"其中一个"," 才有效",[53729,132953],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[135,132956,132957],{"className":126565,"code":132358,"language":126567,"meta":30,"style":30},[141,132958,132959,132965,132977,132991,133005],{"__ignoreMap":30},[144,132960,132961,132963],{"class":146,"line":147},[144,132962,130413],{"class":1993},[144,132964,15603],{"class":154},[144,132966,132967,132969,132971,132973,132975],{"class":146,"line":66},[144,132968,132371],{"class":203},[144,132970,51450],{"class":154},[144,132972,54777],{"class":203},[144,132974,130428],{"class":154},[144,132976,132380],{"class":213},[144,132978,132979,132981,132983,132985,132987,132989],{"class":146,"line":1210},[144,132980,132385],{"class":203},[144,132982,51450],{"class":154},[144,132984,601],{"class":203},[144,132986,51505],{"class":150},[144,132988,132394],{"class":154},[144,132990,132397],{"class":213},[144,132992,132993,132995,132997,132999,133001,133003],{"class":146,"line":1225},[144,132994,132402],{"class":203},[144,132996,51450],{"class":154},[144,132998,855],{"class":203},[144,133000,51505],{"class":150},[144,133002,132411],{"class":154},[144,133004,132414],{"class":213},[144,133006,133007],{"class":146,"line":1231},[144,133008,1595],{"class":154},[28,133010],{"style":126421,"src":133011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,133013,133014],{},"(6)总结",[292,133016,133017,133032],{},[295,133018,133019],{},[298,133020,133021,133023,133026,133029],{},[301,133022,132355],{"align":23768},[301,133024,133025],{"align":23768},"是否脱标",[301,133027,133028],{"align":23768},"移动位置",[301,133030,133031],{"align":23768},"是否常用",[339,133033,133034,133047,133061,133075,133088],{},[298,133035,133036,133039,133041,133044],{},[344,133037,133038],{"align":23768},"Static 静态定位",[344,133040,104691],{"align":23768},[344,133042,133043],{"align":23768},"不能使用边偏移",[344,133045,133046],{"align":23768},"很少",[298,133048,133049,133052,133055,133058],{},[344,133050,133051],{"align":23768},"Relative 相对定位",[344,133053,133054],{"align":23768},"否(占有位置)",[344,133056,133057],{"align":23768},"相对于自身位置移动",[344,133059,133060],{"align":23768},"基本单独使用",[298,133062,133063,133066,133069,133072],{},[344,133064,133065],{"align":23768},"Absolute 绝对定位",[344,133067,133068],{"align":23768},"是(不占有位置)",[344,133070,133071],{"align":23768},"带有定位的父级",[344,133073,133074],{"align":23768},"要和定位父级元素搭配使用",[298,133076,133077,133080,133082,133085],{},[344,133078,133079],{"align":23768},"Fixed 固定定位",[344,133081,133068],{"align":23768},[344,133083,133084],{"align":23768},"浏览器可视区",[344,133086,133087],{"align":23768},"单独使用,不需要父级",[298,133089,133090,133093,133095,133097],{},[344,133091,133092],{"align":23768},"Sticky 粘性定位",[344,133094,133054],{"align":23768},[344,133096,133084],{"align":23768},[344,133098,133099],{"align":23768},"当前阶段少",[98,133101,133102],{"start":66},[101,133103,133104,133107],{},[304,133105,133106],{},"边偏移"," 则决定了该元素的最终位置",[292,133109,133110,133121],{},[295,133111,133112],{},[298,133113,133114,133117,133119],{},[301,133115,133116],{"align":23768},"边偏移属性",[301,133118,27505],{"align":23768},[301,133120,27502],{"align":23768},[339,133122,133123,133134,133145,133155],{},[298,133124,133125,133128,133131],{},[344,133126,133127],{"align":23768},"top",[344,133129,133130],{"align":23768},"top: 80px;",[344,133132,133133],{"align":23768},"顶端偏移量，定义元素相对于父元素上边线的距离",[298,133135,133136,133139,133142],{},[344,133137,133138],{"align":23768},"bottom",[344,133140,133141],{"align":23768},"bottom: 80px ;",[344,133143,133144],{"align":23768},"底部偏移量，定义元素相对于其父元素下边线的距离",[298,133146,133147,133149,133152],{},[344,133148,23768],{"align":23768},[344,133150,133151],{"align":23768},"left: 80px ;",[344,133153,133154],{"align":23768},"左侧偏移量，定义元素相对于其父元素左边线的距离",[298,133156,133157,133159,133162],{},[344,133158,72535],{"align":23768},[344,133160,133161],{"align":23768},"right: 80px ;",[344,133163,133164],{"align":23768},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1162,133166,133167],{},[101,133168,9056,133169,133171,133172,133174,133175,133177,133178,133181,133182,133184,133185,133187],{},[53729,133170],{},"  ① ",[304,133173,133106],{}," 需要和 ",[304,133176,132355],{}," 联合使用， ",[304,133179,133180],{},"单独使用无效"," ；",[53729,133183],{},"  ②top和bottom不要同时使用",[53729,133186],{},"  ③left和right不要同时使用",[22029,133189,133191],{"id":133190},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133193,133194],{},"子级是绝对定位的话，父级要用相对定位",[1162,133196,133197,133200,133203,133206],{},[101,133198,133199],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[101,133201,133202],{},"父盒子需要加定位限制子盒子在父盒子内显示",[101,133204,133205],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[101,133207,133208,133209,133212],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[304,133210,133211],{},"子绝父绝"," 也会遇到",[22029,133214,133216],{"id":133215},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1162,133218,133219,133234],{},[101,133220,133221,133222,133225,133226,133229,133230,133233],{},"在使用 ",[304,133223,133224],{},"定位"," 布局时，可能会 ",[304,133227,133228],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[304,133231,133232],{},"z-index"," 来控制盒子的前后次序 (z轴)",[101,133235,5212],{},[135,133237,133238],{"className":126565,"code":132358,"language":126567,"meta":30,"style":30},[141,133239,133240,133246,133258,133272,133286],{"__ignoreMap":30},[144,133241,133242,133244],{"class":146,"line":147},[144,133243,130413],{"class":1993},[144,133245,15603],{"class":154},[144,133247,133248,133250,133252,133254,133256],{"class":146,"line":66},[144,133249,132371],{"class":203},[144,133251,51450],{"class":154},[144,133253,54777],{"class":203},[144,133255,130428],{"class":154},[144,133257,132380],{"class":213},[144,133259,133260,133262,133264,133266,133268,133270],{"class":146,"line":1210},[144,133261,132385],{"class":203},[144,133263,51450],{"class":154},[144,133265,601],{"class":203},[144,133267,51505],{"class":150},[144,133269,132394],{"class":154},[144,133271,132397],{"class":213},[144,133273,133274,133276,133278,133280,133282,133284],{"class":146,"line":1225},[144,133275,132402],{"class":203},[144,133277,51450],{"class":154},[144,133279,855],{"class":203},[144,133281,51505],{"class":150},[144,133283,132411],{"class":154},[144,133285,132414],{"class":213},[144,133287,133288],{"class":146,"line":1231},[144,133289,1595],{"class":154},[1162,133291,133292],{},[101,133293,133294,133295,133171,133297,133299,133300,127728,133303,82552,133306,133308,133309,133311,133312,133315,133316,133181,133319,133321,133322,133325,133327],{},"z-index的特性",[53729,133296],{},[304,133298,127029],{}," ： ",[304,133301,133302],{},"正整数",[304,133304,133305],{},"负整数",[304,133307,346],{}," ，默认值是 0，数值越大，盒子越靠上；",[53729,133310],{},"  ②如果 ",[304,133313,133314],{},"属性值相同"," ，则按照书写顺序， ",[304,133317,133318],{},"后来居上",[53729,133320],{},"  ③数字后面 ",[304,133323,133324],{},"不能加单位",[53729,133326],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22029,133329,133331],{"id":133330},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133333,133334],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133336,133337],{},"方法:",[1162,133339,133340,133350],{},[101,133341,133342,133343,133346,133347],{},"left: 50%; 让 ",[304,133344,133345],{},"盒子的左侧"," 移动到 ",[304,133348,133349],{},"父级元素的水平中心位置",[101,133351,133352,133353,133356,133357],{},"margin-left: -100px; 让盒子 ",[304,133354,133355],{},"向左"," 移动 ",[304,133358,133359],{},"自身宽度的一半",[22029,133361,133363],{"id":133362},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[98,133365,133366,133369],{},[101,133367,133368],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[101,133370,133371],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133373,133374],{},"也就是说绝对定位和固定定位和浮动类似",[98,133376,133377],{"start":1210},[101,133378,133379],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1162,133381,133382,133385,133388],{},[101,133383,133384],{},"可以用inline-block 转换为行内块",[101,133386,133387],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[101,133389,133390],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,133392,133393],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22029,133395,133397],{"id":133396},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[98,133399,133400,133403,133406,133409],{},[101,133401,133402],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[101,133404,133405],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[101,133407,133408],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[101,133410,133411],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[135,133413,133414],{"className":126565,"code":131031,"language":126567,"meta":30,"style":30},[141,133415,133416,133422,133432,133436,133442,133452],{"__ignoreMap":30},[144,133417,133418,133420],{"class":146,"line":147},[144,133419,131038],{"class":1993},[144,133421,15603],{"class":154},[144,133423,133424,133426,133428,133430],{"class":146,"line":66},[144,133425,131045],{"class":203},[144,133427,51450],{"class":154},[144,133429,23768],{"class":203},[144,133431,1321],{"class":154},[144,133433,133434],{"class":146,"line":1210},[144,133435,1595],{"class":154},[144,133437,133438,133440],{"class":146,"line":1225},[144,133439,131060],{"class":1993},[144,133441,15603],{"class":154},[144,133443,133444,133446,133448,133450],{"class":146,"line":1231},[144,133445,131045],{"class":203},[144,133447,51450],{"class":154},[144,133449,72535],{"class":203},[144,133451,1321],{"class":154},[144,133453,133454],{"class":146,"line":1245},[144,133455,1595],{"class":154},[28,133457],{"style":126421,"src":133458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22029,133460,133462],{"id":133461},"_11138-轮播图","11.1.3.8 轮播图",[28,133464],{"style":126421,"src":133465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[98,133467,133468],{},[101,133469,133470],{},"制作顺序:",[1162,133472,133473,133476,133479,133488],{},[101,133474,133475],{},"大盒子我们类名为： tb-promo 淘宝广告",[101,133477,133478],{},"里面先放一张图片",[101,133480,133481,133482,133484,133485,133487],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53729,133483],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53729,133486],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[101,133489,133490,133491,133493,133494,133496],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53729,133492],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53729,133495],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[98,133498,133499],{"start":66},[101,133500,133501],{},"代码模块",[135,133503,133505],{"className":126565,"code":133504,"language":126567,"meta":30,"style":30},"\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",[141,133506,133507,133512,133519,133529,133539,133549,133553,133558,133565,133575],{"__ignoreMap":30},[144,133508,133509],{"class":146,"line":147},[144,133510,133511],{"class":213},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[144,133513,133514,133517],{"class":146,"line":66},[144,133515,133516],{"class":1993},".son",[144,133518,15603],{"class":154},[144,133520,133521,133523,133525,133527],{"class":146,"line":1210},[144,133522,132371],{"class":203},[144,133524,51450],{"class":154},[144,133526,54844],{"class":203},[144,133528,1321],{"class":154},[144,133530,133531,133533,133535,133537],{"class":146,"line":1225},[144,133532,132385],{"class":203},[144,133534,51450],{"class":154},[144,133536,346],{"class":203},[144,133538,1321],{"class":154},[144,133540,133541,133543,133545,133547],{"class":146,"line":1231},[144,133542,132402],{"class":203},[144,133544,51450],{"class":154},[144,133546,346],{"class":203},[144,133548,1321],{"class":154},[144,133550,133551],{"class":146,"line":1245},[144,133552,1595],{"class":154},[144,133554,133555],{"class":146,"line":1251},[144,133556,133557],{"class":213},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[144,133559,133560,133563],{"class":146,"line":1342},[144,133561,133562],{"class":1993},".father",[144,133564,15603],{"class":154},[144,133566,133567,133569,133571,133573],{"class":146,"line":1348},[144,133568,132371],{"class":203},[144,133570,51450],{"class":154},[144,133572,54777],{"class":203},[144,133574,1321],{"class":154},[144,133576,133577],{"class":146,"line":1360},[144,133578,1595],{"class":154},[14,133580,133581],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[115,133583,133585],{"id":133584},"_1114-定位数值的移动","11.1.4 定位数值的移动",[28,133587],{"style":126421,"src":133588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,133590,133591],{},"✨ 黄金口诀：",[14,133593,133594],{},"\"TOP正下负上，LEFT正右负左\"",[14,133596,133597],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,133599,133600],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,133602,133603],{},"✨ 简单记：",[14,133605,133606],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5157,133608,133609],{},"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":30,"searchDepth":66,"depth":66,"links":133611},[133612],{"id":132139,"depth":66,"text":132140,"children":133613},[133614,133615,133616,133617],{"id":132143,"depth":1210,"text":132144},{"id":132158,"depth":1210,"text":132159},{"id":132326,"depth":1210,"text":132327},{"id":133584,"depth":1210,"text":133585},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132131,"description":23408},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133624,"title":133625,"body":133626,"description":23408,"extension":70,"meta":135049,"navigation":72,"path":135050,"seo":135051,"stem":135052,"__hash__":135053},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133627,"toc":135028},[133628,133631,133635,133643,133647,133652,133660,133672,133676,133681,133689,133700,133704,133709,133750,133758,133762,133765,133768,133771,133865,133868,133962,133965,134059,134062,134065,134100,134103,134106,134136,134139,134142,134145,134148,134151,134154,134157,134227,134230,134234,134238,134279,134283,134289,134292,134295,134299,134302,134305,134308,134389,134392,134395,134399,134403,134406,134409,134412,134415,134418,134424,134433,134437,134456,134460,134470,134473,134476,134479,134482,134485,134488,134491,134494,134503,134507,134516,134519,134524,134577,134582,134748,134751,134754,134759,134762,134765,134768,134771,134776,134924,134927,134930,134935,134938,134943,134977,134980,134983,134987,134990,134997,135000,135003,135006,135009,135012,135015,135018,135022,135025],[10,133629,133625],{"id":133630},"_12-显示隐藏与图形资源",[18,133632,133634],{"id":133633},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1162,133636,133637,133640],{},[101,133638,133639],{},"目的:让一个元素在页面中消失或者显示出来",[101,133641,133642],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[115,133644,133646],{"id":133645},"_1211-display-显示","12.1.1 display 显示",[98,133648,133649],{},[101,133650,133651],{},"display 设置或检索对象是否及如何显示",[1162,133653,133654,133657],{},[101,133655,133656],{},"display: none;隐藏对象",[101,133658,133659],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[98,133661,133662,133669],{"start":66},[101,133663,133664,133665,133668],{},"特点： display 隐藏元素后， ",[304,133666,133667],{},"不再占"," 有原来的位置",[101,133670,133671],{},"在js中使用非常的广泛",[115,133673,133675],{"id":133674},"_1212-visibility可见性","12.1.2 visibility可见性",[98,133677,133678],{},[101,133679,133680],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1162,133682,133683,133686],{},[101,133684,133685],{},"visibility： visible；元素可见",[101,133687,133688],{},"visibility：hidden；元素隐藏",[98,133690,133691,133694,133697],{"start":66},[101,133692,133693],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[101,133695,133696],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[101,133698,133699],{},"隐藏后继续占有原有位置",[115,133701,133703],{"id":133702},"_1213-overflow溢出","12.1.3 overflow溢出",[1162,133705,133706],{},[101,133707,133708],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[292,133710,133711,133719],{},[295,133712,133713],{},[298,133714,133715,133717],{},[301,133716,127029],{"align":23768},[301,133718,27502],{"align":23768},[339,133720,133721,133729,133736,133743],{},[298,133722,133723,133726],{},[344,133724,133725],{"align":23768},"visible",[344,133727,133728],{"align":23768},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[298,133730,133731,133733],{},[344,133732,61727],{"align":23768},[344,133734,133735],{"align":23768},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[298,133737,133738,133740],{},[344,133739,128985],{"align":23768},[344,133741,133742],{"align":23768},"不管超出内容否，总是显示滚动条",[298,133744,133745,133747],{},[344,133746,72676],{"align":23768},[344,133748,133749],{"align":23768},"超出自动显示滚动条，不超出不显示滚动条",[1162,133751,133752,133755],{},[101,133753,133754],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[101,133756,133757],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[115,133759,133761],{"id":133760},"_1214-案例收获","12.1.4 案例收获",[28,133763],{"style":126421,"src":133764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,133766,133767],{},"问题：没做出来动态效果，使用hover没实现",[14,133769,133770],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[135,133772,133773],{"className":126565,"code":131997,"language":126567,"meta":30,"style":30},[141,133774,133775,133779,133793,133797,133811,133815,133829,133833,133847,133851],{"__ignoreMap":30},[144,133776,133777],{"class":146,"line":147},[144,133778,132004],{"class":213},[144,133780,133781,133783,133785,133787,133789,133791],{"class":146,"line":66},[144,133782,132009],{"class":1993},[144,133784,79820],{"class":154},[144,133786,128925],{"class":203},[144,133788,51450],{"class":154},[144,133790,132018],{"class":203},[144,133792,129495],{"class":154},[144,133794,133795],{"class":146,"line":1210},[144,133796,132025],{"class":213},[144,133798,133799,133801,133803,133805,133807,133809],{"class":146,"line":1225},[144,133800,132030],{"class":1993},[144,133802,79820],{"class":154},[144,133804,128925],{"class":203},[144,133806,51450],{"class":154},[144,133808,54777],{"class":203},[144,133810,129495],{"class":154},[144,133812,133813],{"class":146,"line":1231},[144,133814,132045],{"class":213},[144,133816,133817,133819,133821,133823,133825,133827],{"class":146,"line":1245},[144,133818,132050],{"class":1993},[144,133820,79820],{"class":154},[144,133822,128925],{"class":203},[144,133824,51450],{"class":154},[144,133826,54844],{"class":203},[144,133828,129495],{"class":154},[144,133830,133831],{"class":146,"line":1251},[144,133832,132065],{"class":213},[144,133834,133835,133837,133839,133841,133843,133845],{"class":146,"line":1342},[144,133836,132070],{"class":1993},[144,133838,79820],{"class":154},[144,133840,128925],{"class":203},[144,133842,51450],{"class":154},[144,133844,86246],{"class":203},[144,133846,129495],{"class":154},[144,133848,133849],{"class":146,"line":1348},[144,133850,132085],{"class":213},[144,133852,133853,133855,133857,133859,133861,133863],{"class":146,"line":1360},[144,133854,132090],{"class":1993},[144,133856,79820],{"class":154},[144,133858,128925],{"class":203},[144,133860,51450],{"class":154},[144,133862,132099],{"class":203},[144,133864,129495],{"class":154},[14,133866,133867],{},"完整代码：",[135,133869,133870],{"className":126565,"code":131997,"language":126567,"meta":30,"style":30},[141,133871,133872,133876,133890,133894,133908,133912,133926,133930,133944,133948],{"__ignoreMap":30},[144,133873,133874],{"class":146,"line":147},[144,133875,132004],{"class":213},[144,133877,133878,133880,133882,133884,133886,133888],{"class":146,"line":66},[144,133879,132009],{"class":1993},[144,133881,79820],{"class":154},[144,133883,128925],{"class":203},[144,133885,51450],{"class":154},[144,133887,132018],{"class":203},[144,133889,129495],{"class":154},[144,133891,133892],{"class":146,"line":1210},[144,133893,132025],{"class":213},[144,133895,133896,133898,133900,133902,133904,133906],{"class":146,"line":1225},[144,133897,132030],{"class":1993},[144,133899,79820],{"class":154},[144,133901,128925],{"class":203},[144,133903,51450],{"class":154},[144,133905,54777],{"class":203},[144,133907,129495],{"class":154},[144,133909,133910],{"class":146,"line":1231},[144,133911,132045],{"class":213},[144,133913,133914,133916,133918,133920,133922,133924],{"class":146,"line":1245},[144,133915,132050],{"class":1993},[144,133917,79820],{"class":154},[144,133919,128925],{"class":203},[144,133921,51450],{"class":154},[144,133923,54844],{"class":203},[144,133925,129495],{"class":154},[144,133927,133928],{"class":146,"line":1251},[144,133929,132065],{"class":213},[144,133931,133932,133934,133936,133938,133940,133942],{"class":146,"line":1342},[144,133933,132070],{"class":1993},[144,133935,79820],{"class":154},[144,133937,128925],{"class":203},[144,133939,51450],{"class":154},[144,133941,86246],{"class":203},[144,133943,129495],{"class":154},[144,133945,133946],{"class":146,"line":1348},[144,133947,132085],{"class":213},[144,133949,133950,133952,133954,133956,133958,133960],{"class":146,"line":1360},[144,133951,132090],{"class":1993},[144,133953,79820],{"class":154},[144,133955,128925],{"class":203},[144,133957,51450],{"class":154},[144,133959,132099],{"class":203},[144,133961,129495],{"class":154},[14,133963,133964],{},"分布思路重点详解：",[135,133966,133967],{"className":126565,"code":131997,"language":126567,"meta":30,"style":30},[141,133968,133969,133973,133987,133991,134005,134009,134023,134027,134041,134045],{"__ignoreMap":30},[144,133970,133971],{"class":146,"line":147},[144,133972,132004],{"class":213},[144,133974,133975,133977,133979,133981,133983,133985],{"class":146,"line":66},[144,133976,132009],{"class":1993},[144,133978,79820],{"class":154},[144,133980,128925],{"class":203},[144,133982,51450],{"class":154},[144,133984,132018],{"class":203},[144,133986,129495],{"class":154},[144,133988,133989],{"class":146,"line":1210},[144,133990,132025],{"class":213},[144,133992,133993,133995,133997,133999,134001,134003],{"class":146,"line":1225},[144,133994,132030],{"class":1993},[144,133996,79820],{"class":154},[144,133998,128925],{"class":203},[144,134000,51450],{"class":154},[144,134002,54777],{"class":203},[144,134004,129495],{"class":154},[144,134006,134007],{"class":146,"line":1231},[144,134008,132045],{"class":213},[144,134010,134011,134013,134015,134017,134019,134021],{"class":146,"line":1245},[144,134012,132050],{"class":1993},[144,134014,79820],{"class":154},[144,134016,128925],{"class":203},[144,134018,51450],{"class":154},[144,134020,54844],{"class":203},[144,134022,129495],{"class":154},[144,134024,134025],{"class":146,"line":1251},[144,134026,132065],{"class":213},[144,134028,134029,134031,134033,134035,134037,134039],{"class":146,"line":1342},[144,134030,132070],{"class":1993},[144,134032,79820],{"class":154},[144,134034,128925],{"class":203},[144,134036,51450],{"class":154},[144,134038,86246],{"class":203},[144,134040,129495],{"class":154},[144,134042,134043],{"class":146,"line":1348},[144,134044,132085],{"class":213},[144,134046,134047,134049,134051,134053,134055,134057],{"class":146,"line":1360},[144,134048,132090],{"class":1993},[144,134050,79820],{"class":154},[144,134052,128925],{"class":203},[144,134054,51450],{"class":154},[144,134056,132099],{"class":203},[144,134058,129495],{"class":154},[28,134060],{"style":126421,"src":134061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134063,134064],{},"图片太大，盒子太小，此时需要修改图片的大小",[135,134066,134068],{"className":127312,"code":134067,"language":127314,"meta":30,"style":30},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[141,134069,134070],{"__ignoreMap":30},[144,134071,134072,134074,134076,134078,134080,134083,134085,134087,134090,134093,134095,134098],{"class":146,"line":147},[144,134073,1065],{"class":154},[144,134075,28],{"class":51313},[144,134077,55252],{"class":1993},[144,134079,200],{"class":154},[144,134081,134082],{"class":259},"\"images\u002Fpic.jpg\"",[144,134084,55260],{"class":1993},[144,134086,200],{"class":154},[144,134088,134089],{"class":259},"\"描述文字\"",[144,134091,134092],{"class":1993}," title",[144,134094,200],{"class":154},[144,134096,134097],{"class":259},"\"悬停提示\"",[144,134099,51320],{"class":154},[28,134101],{"style":126421,"src":134102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134104,134105],{},"制造遮罩层",[135,134107,134108],{"className":127312,"code":134067,"language":127314,"meta":30,"style":30},[141,134109,134110],{"__ignoreMap":30},[144,134111,134112,134114,134116,134118,134120,134122,134124,134126,134128,134130,134132,134134],{"class":146,"line":147},[144,134113,1065],{"class":154},[144,134115,28],{"class":51313},[144,134117,55252],{"class":1993},[144,134119,200],{"class":154},[144,134121,134082],{"class":259},[144,134123,55260],{"class":1993},[144,134125,200],{"class":154},[144,134127,134089],{"class":259},[144,134129,134092],{"class":1993},[144,134131,200],{"class":154},[144,134133,134097],{"class":259},[144,134135,51320],{"class":154},[14,134137,134138],{},"此时是这样的为标准流",[28,134140],{"style":126421,"src":134141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134143,134144],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134146,134147],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134149,134150],{},"让他在中间，用center(background-position)",[14,134152,134153],{},"将需要变的尽可能放到一个盒子中",[14,134155,134156],{},"放大盒子上内部盒子发生变化",[135,134158,134160],{"className":126565,"code":134159,"language":126567,"meta":30,"style":30},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[141,134161,134162,134168,134178,134182,134189,134199,134211,134223],{"__ignoreMap":30},[144,134163,134164,134166],{"class":146,"line":147},[144,134165,127632],{"class":1993},[144,134167,15603],{"class":154},[144,134169,134170,134172,134174,134176],{"class":146,"line":66},[144,134171,132371],{"class":203},[144,134173,51450],{"class":154},[144,134175,54777],{"class":203},[144,134177,1321],{"class":154},[144,134179,134180],{"class":146,"line":1210},[144,134181,1595],{"class":154},[144,134183,134184,134187],{"class":146,"line":1225},[144,134185,134186],{"class":1993},".child",[144,134188,15603],{"class":154},[144,134190,134191,134193,134195,134197],{"class":146,"line":1231},[144,134192,132371],{"class":203},[144,134194,51450],{"class":154},[144,134196,54844],{"class":203},[144,134198,1321],{"class":154},[144,134200,134201,134203,134205,134207,134209],{"class":146,"line":1245},[144,134202,132385],{"class":203},[144,134204,51450],{"class":154},[144,134206,811],{"class":203},[144,134208,483],{"class":150},[144,134210,1321],{"class":154},[144,134212,134213,134215,134217,134219,134221],{"class":146,"line":1251},[144,134214,132402],{"class":203},[144,134216,51450],{"class":154},[144,134218,811],{"class":203},[144,134220,483],{"class":150},[144,134222,1321],{"class":154},[144,134224,134225],{"class":146,"line":1342},[144,134226,1595],{"class":154},[14,134228,134229],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[18,134231,134233],{"id":134232},"_122-精灵图","12.2 精灵图",[115,134235,134237],{"id":134236},"_1221-理解","12.2.1 理解",[98,134239,134240,134258],{},[101,134241,134242,134243,132471,134246,134249,134250,134253,134254,134257],{},"目的： ",[304,134244,134245],{},"为了有效地减少服务器接收和发送请求的次数",[304,134247,134248],{},"提高"," 页面的 ",[304,134251,134252],{},"加载速度"," ，出现了 ",[304,134255,134256],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[101,134259,134260,134261,134263,134264,134266,134267,134269,134270,134272,134273,134275,134276,134278],{},"使用精灵图核心：",[53729,134262],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53729,134265],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53729,134268],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53729,134271],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53729,134274],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53729,134277],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[115,134280,134282],{"id":134281},"_1222-扒图","12.2.2 扒图",[135,134284,134287],{"className":134285,"code":134286,"language":5218},[5216],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[141,134288,134286],{"__ignoreMap":30},[28,134290],{"style":126421,"src":134291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[28,134293],{"style":126421,"src":134294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[115,134296,134298],{"id":134297},"_1223-精灵图的实现","12.2.3 精灵图的实现",[28,134300],{"style":126421,"src":134301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134303,134304],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[28,134306],{"style":126421,"src":134307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[135,134309,134311],{"className":126565,"code":134310,"language":126567,"meta":30,"style":30},"\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",[141,134312,134313,134318,134325,134337,134349,134368,134385],{"__ignoreMap":30},[144,134314,134315],{"class":146,"line":147},[144,134316,134317],{"class":213},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[144,134319,134320,134323],{"class":146,"line":66},[144,134321,134322],{"class":1993},".icon",[144,134324,15603],{"class":154},[144,134326,134327,134329,134331,134333,134335],{"class":146,"line":1210},[144,134328,70581],{"class":203},[144,134330,51450],{"class":154},[144,134332,855],{"class":203},[144,134334,51505],{"class":150},[144,134336,1321],{"class":154},[144,134338,134339,134341,134343,134345,134347],{"class":146,"line":1225},[144,134340,70801],{"class":203},[144,134342,51450],{"class":154},[144,134344,855],{"class":203},[144,134346,51505],{"class":150},[144,134348,1321],{"class":154},[144,134350,134351,134353,134355,134357,134359,134362,134364,134366],{"class":146,"line":1231},[144,134352,70624],{"class":203},[144,134354,51450],{"class":154},[144,134356,61739],{"class":203},[144,134358,155],{"class":154},[144,134360,134361],{"class":5247},"sprites.png",[144,134363,13745],{"class":154},[144,134365,61749],{"class":203},[144,134367,1321],{"class":154},[144,134369,134370,134372,134374,134376,134378,134381,134383],{"class":146,"line":1245},[144,134371,128825],{"class":203},[144,134373,51450],{"class":154},[144,134375,51776],{"class":203},[144,134377,51505],{"class":150},[144,134379,134380],{"class":203}," -20",[144,134382,51505],{"class":150},[144,134384,1321],{"class":154},[144,134386,134387],{"class":146,"line":1251},[144,134388,1595],{"class":154},[28,134390],{"style":126421,"src":134391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,134393,134394],{},"在前端中坐标轴的正方向是右和下",[18,134396,134398],{"id":134397},"_123-字体图标","12.3 字体图标",[115,134400,134402],{"id":134401},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,134404,134405],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,134407,134408],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,134410,134411],{},"1.图片文件还是比较大的。",[14,134413,134414],{},"2.图片本身放大和缩小会失真。",[14,134416,134417],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,134419,134420,134421,25753],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[304,134422,134423],{},"字体图标 iconfont",[14,134425,134426,134429,134430,28398],{},[304,134427,134428],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[304,134431,134432],{},"展示的是图标，本质属于字体",[115,134434,134436],{"id":134435},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1162,134438,134439,134444,134447,134450,134453],{},[101,134440,134441,134443],{},[304,134442,25889],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[101,134445,134446],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[101,134448,134449],{},"兼容性：几乎支持所有的浏览器，请放心使用",[101,134451,134452],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[101,134454,134455],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[115,134457,134459],{"id":134458},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1162,134461,134462],{},[101,134463,134464,134465],{},"icomoon字体库：",[393,134466,134469],{"href":134467,"rel":134468},"http:\u002F\u002Ficomoon.io\u002F",[23897],"http:\u002F\u002Ficomoon.io",[14,134471,134472],{},"进去之后点icomoon app",[28,134474],{"style":126421,"src":134475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,134477,134478],{},"可以对其编辑：",[28,134480],{"style":126421,"src":134481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,134483,134484],{},"生成字体：",[28,134486],{"style":126421,"src":134487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,134489,134490],{},"下载：",[28,134492],{"style":126421,"src":134493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1162,134495,134496],{},[101,134497,134498,134499],{},"阿里iconfont字体库： ",[393,134500,134501],{"href":134501,"rel":134502},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23897],[115,134504,134506],{"id":134505},"_1234-字体图标的引入","12.3.4 字体图标的引入",[98,134508,134509],{},[101,134510,134511,134512,134515],{},"把下载包里面的 ",[304,134513,134514],{},"fonts"," 文件夹放入页面根目录下",[28,134517],{"style":126421,"src":134518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[98,134520,134521],{"start":66},[101,134522,134523],{},"字体文件格式",[292,134525,134526,134535],{},[295,134527,134528],{},[298,134529,134530,134533],{},[301,134531,134532],{"align":23768},"格式",[301,134534,23772],{"align":23768},[339,134536,134537,134547,134557,134567],{},[298,134538,134539,134544],{},[344,134540,134541],{"align":23768},[304,134542,134543],{},".ttf",[344,134545,134546],{"align":23768},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[298,134548,134549,134554],{},[344,134550,134551],{"align":23768},[304,134552,134553],{},".woff",[344,134555,134556],{"align":23768},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[298,134558,134559,134564],{},[344,134560,134561],{"align":23768},[304,134562,134563],{},".eot",[344,134565,134566],{"align":23768},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[298,134568,134569,134574],{},[344,134570,134571],{"align":23768},[304,134572,134573],{},"svg",[344,134575,134576],{"align":23768},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[98,134578,134579],{"start":1210},[101,134580,134581],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[135,134583,134585],{"className":126565,"code":134584,"language":126567,"meta":30,"style":30},"\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",[141,134586,134587,134592,134599,134611,134627,134652,134673,134693,134713,134717,134723,134733,134744],{"__ignoreMap":30},[144,134588,134589],{"class":146,"line":147},[144,134590,134591],{"class":213},"\u002F* 引入字体图标 *\u002F\n",[144,134593,134594,134597],{"class":146,"line":66},[144,134595,134596],{"class":150},"@font-face",[144,134598,15603],{"class":154},[144,134600,134601,134604,134606,134609],{"class":146,"line":1210},[144,134602,134603],{"class":203},"  font-family",[144,134605,51450],{"class":154},[144,134607,134608],{"class":259},"'icomoon'",[144,134610,1321],{"class":154},[144,134612,134613,134616,134618,134620,134622,134625],{"class":146,"line":1225},[144,134614,134615],{"class":203},"  src",[144,134617,51450],{"class":154},[144,134619,61739],{"class":203},[144,134621,155],{"class":154},[144,134623,134624],{"class":259},"'fonts\u002Ficomoon.eot'",[144,134626,2749],{"class":154},[144,134628,134629,134631,134633,134635,134637,134640,134642,134645,134647,134650],{"class":146,"line":1231},[144,134630,134615],{"class":203},[144,134632,51450],{"class":154},[144,134634,61739],{"class":203},[144,134636,155],{"class":154},[144,134638,134639],{"class":259},"'fonts\u002Ficomoon.eot?#iefix'",[144,134641,13745],{"class":154},[144,134643,134644],{"class":203},"format",[144,134646,155],{"class":154},[144,134648,134649],{"class":259},"'embedded-opentype'",[144,134651,38060],{"class":154},[144,134653,134654,134657,134659,134662,134664,134666,134668,134671],{"class":146,"line":1245},[144,134655,134656],{"class":203},"       url",[144,134658,155],{"class":154},[144,134660,134661],{"class":259},"'fonts\u002Ficomoon.woff'",[144,134663,13745],{"class":154},[144,134665,134644],{"class":203},[144,134667,155],{"class":154},[144,134669,134670],{"class":259},"'woff'",[144,134672,38060],{"class":154},[144,134674,134675,134677,134679,134682,134684,134686,134688,134691],{"class":146,"line":1251},[144,134676,134656],{"class":203},[144,134678,155],{"class":154},[144,134680,134681],{"class":259},"'fonts\u002Ficomoon.ttf'",[144,134683,13745],{"class":154},[144,134685,134644],{"class":203},[144,134687,155],{"class":154},[144,134689,134690],{"class":259},"'truetype'",[144,134692,38060],{"class":154},[144,134694,134695,134697,134699,134702,134704,134706,134708,134711],{"class":146,"line":1342},[144,134696,134656],{"class":203},[144,134698,155],{"class":154},[144,134700,134701],{"class":259},"'fonts\u002Ficomoon.svg#icomoon'",[144,134703,13745],{"class":154},[144,134705,134644],{"class":203},[144,134707,155],{"class":154},[144,134709,134710],{"class":259},"'svg'",[144,134712,2749],{"class":154},[144,134714,134715],{"class":146,"line":1348},[144,134716,1595],{"class":154},[144,134718,134719,134721],{"class":146,"line":1360},[144,134720,134322],{"class":1993},[144,134722,15603],{"class":154},[144,134724,134725,134727,134729,134731],{"class":146,"line":1642},[144,134726,134603],{"class":203},[144,134728,51450],{"class":154},[144,134730,134608],{"class":259},[144,134732,1321],{"class":154},[144,134734,134735,134738,134740,134742],{"class":146,"line":1647},[144,134736,134737],{"class":203},"  font-style",[144,134739,51450],{"class":154},[144,134741,63854],{"class":203},[144,134743,1321],{"class":154},[144,134745,134746],{"class":146,"line":1653},[144,134747,1595],{"class":154},[14,134749,134750],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[28,134752],{"style":126421,"src":134753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[98,134755,134756],{"start":1225},[101,134757,134758],{},"添加字体",[28,134760],{"style":126421,"src":134761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,134763,134764],{},"复制：",[28,134766],{"style":126421,"src":134767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,134769,134770],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[98,134772,134773],{"start":1231},[101,134774,134775],{},"代码展示：",[135,134777,134778],{"className":126565,"code":134584,"language":126567,"meta":30,"style":30},[141,134779,134780,134784,134790,134800,134814,134836,134854,134872,134890,134894,134900,134910,134920],{"__ignoreMap":30},[144,134781,134782],{"class":146,"line":147},[144,134783,134591],{"class":213},[144,134785,134786,134788],{"class":146,"line":66},[144,134787,134596],{"class":150},[144,134789,15603],{"class":154},[144,134791,134792,134794,134796,134798],{"class":146,"line":1210},[144,134793,134603],{"class":203},[144,134795,51450],{"class":154},[144,134797,134608],{"class":259},[144,134799,1321],{"class":154},[144,134801,134802,134804,134806,134808,134810,134812],{"class":146,"line":1225},[144,134803,134615],{"class":203},[144,134805,51450],{"class":154},[144,134807,61739],{"class":203},[144,134809,155],{"class":154},[144,134811,134624],{"class":259},[144,134813,2749],{"class":154},[144,134815,134816,134818,134820,134822,134824,134826,134828,134830,134832,134834],{"class":146,"line":1231},[144,134817,134615],{"class":203},[144,134819,51450],{"class":154},[144,134821,61739],{"class":203},[144,134823,155],{"class":154},[144,134825,134639],{"class":259},[144,134827,13745],{"class":154},[144,134829,134644],{"class":203},[144,134831,155],{"class":154},[144,134833,134649],{"class":259},[144,134835,38060],{"class":154},[144,134837,134838,134840,134842,134844,134846,134848,134850,134852],{"class":146,"line":1245},[144,134839,134656],{"class":203},[144,134841,155],{"class":154},[144,134843,134661],{"class":259},[144,134845,13745],{"class":154},[144,134847,134644],{"class":203},[144,134849,155],{"class":154},[144,134851,134670],{"class":259},[144,134853,38060],{"class":154},[144,134855,134856,134858,134860,134862,134864,134866,134868,134870],{"class":146,"line":1251},[144,134857,134656],{"class":203},[144,134859,155],{"class":154},[144,134861,134681],{"class":259},[144,134863,13745],{"class":154},[144,134865,134644],{"class":203},[144,134867,155],{"class":154},[144,134869,134690],{"class":259},[144,134871,38060],{"class":154},[144,134873,134874,134876,134878,134880,134882,134884,134886,134888],{"class":146,"line":1342},[144,134875,134656],{"class":203},[144,134877,155],{"class":154},[144,134879,134701],{"class":259},[144,134881,13745],{"class":154},[144,134883,134644],{"class":203},[144,134885,155],{"class":154},[144,134887,134710],{"class":259},[144,134889,2749],{"class":154},[144,134891,134892],{"class":146,"line":1348},[144,134893,1595],{"class":154},[144,134895,134896,134898],{"class":146,"line":1360},[144,134897,134322],{"class":1993},[144,134899,15603],{"class":154},[144,134901,134902,134904,134906,134908],{"class":146,"line":1642},[144,134903,134603],{"class":203},[144,134905,51450],{"class":154},[144,134907,134608],{"class":259},[144,134909,1321],{"class":154},[144,134911,134912,134914,134916,134918],{"class":146,"line":1647},[144,134913,134737],{"class":203},[144,134915,51450],{"class":154},[144,134917,63854],{"class":203},[144,134919,1321],{"class":154},[144,134921,134922],{"class":146,"line":1653},[144,134923,1595],{"class":154},[28,134925],{"style":126421,"src":134926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,134928,134929],{},"更加细节展示：",[98,134931,134932],{},[101,134933,134934],{},"html 标签内添加小图标",[28,134936],{"style":126421,"src":134937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[98,134939,134940],{"start":66},[101,134941,134942],{},"给标签定义字体",[135,134944,134945],{"className":127312,"code":130669,"language":127314,"meta":30,"style":30},[141,134946,134947,134951,134965,134969],{"__ignoreMap":30},[144,134948,134949],{"class":146,"line":147},[144,134950,130676],{"class":213},[144,134952,134953,134955,134957,134959,134961,134963],{"class":146,"line":66},[144,134954,1065],{"class":154},[144,134956,51624],{"class":51313},[144,134958,53499],{"class":1993},[144,134960,200],{"class":154},[144,134962,130689],{"class":259},[144,134964,51320],{"class":154},[144,134966,134967],{"class":146,"line":1210},[144,134968,130696],{"class":154},[144,134970,134971,134973,134975],{"class":146,"line":1225},[144,134972,51798],{"class":154},[144,134974,51624],{"class":51313},[144,134976,51320],{"class":154},[14,134978,134979],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[28,134981],{"style":126421,"src":134982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[115,134984,134986],{"id":134985},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,134988,134989],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,134991,134992,134993,134996],{},"把压缩包里面的 ",[304,134994,134995],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,134998,134999],{},"打开网站，点下方：",[28,135001],{"style":126421,"src":135002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[28,135004],{"style":126421,"src":135005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[28,135007],{"style":126421,"src":135008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,135010,135011],{},"点yes重新加载",[14,135013,135014],{},"然后重复之前的操作就可以实现了",[14,135016,135017],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[115,135019,135021],{"id":135020},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[28,135023],{"style":126421,"src":135024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5157,135026,135027],{},"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":30,"searchDepth":66,"depth":66,"links":135029},[135030,135036,135041],{"id":133633,"depth":66,"text":133634,"children":135031},[135032,135033,135034,135035],{"id":133645,"depth":1210,"text":133646},{"id":133674,"depth":1210,"text":133675},{"id":133702,"depth":1210,"text":133703},{"id":133760,"depth":1210,"text":133761},{"id":134232,"depth":66,"text":134233,"children":135037},[135038,135039,135040],{"id":134236,"depth":1210,"text":134237},{"id":134281,"depth":1210,"text":134282},{"id":134297,"depth":1210,"text":134298},{"id":134397,"depth":66,"text":134398,"children":135042},[135043,135044,135045,135046,135047,135048],{"id":134401,"depth":1210,"text":134402},{"id":134435,"depth":1210,"text":134436},{"id":134458,"depth":1210,"text":134459},{"id":134505,"depth":1210,"text":134506},{"id":134985,"depth":1210,"text":134986},{"id":135020,"depth":1210,"text":135021},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133625,"description":23408},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135055,"title":135056,"body":135057,"description":23408,"extension":70,"meta":136284,"navigation":72,"path":136285,"seo":136286,"stem":136287,"__hash__":136288},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135058,"toc":136265},[135059,135062,135066,135069,135083,135151,135181,135184,135188,135192,135294,135341,135345,135348,135351,135385,135388,135391,135394,135397,135400,135403,135406,135408,135411,135414,135417,135420,135423,135426,135429,135457,135460,135464,135467,135474,135477,135480,135506,135509,135513,135516,135519,135526,135530,135533,135535,135567,135570,135573,135585,135591,135594,135597,135600,135602,135606,135609,135612,135615,135660,135664,135666,135669,135676,135718,135721,135725,135730,135744,135748,135751,135754,135757,135760,135763,135797,135800,135803,135857,135860,135863,135866,135869,135921,135924,135927,135976,135980,135982,135985,135988,135991,135994,135997,136055,136058,136064,136067,136070,136102,136105,136109,136113,136116,136148,136152,136155,136199,136203,136206,136209,136212,136215,136218,136221,136224,136226,136229,136231,136234,136237,136240,136243,136248,136251,136253,136256,136259,136262],[10,135060,135056],{"id":135061},"_13-界面样式与布局技巧",[18,135063,135065],{"id":135064},"_131-css三角","13.1 css三角",[14,135067,135068],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1162,135070,135071,135074,135077,135080],{},[101,135072,135073],{},"用css 边框可以模拟三角效果",[101,135075,135076],{},"宽度高度为0",[101,135078,135079],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[101,135081,135082],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[135,135084,135086],{"className":126565,"code":135085,"language":126567,"meta":30,"style":30},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[141,135087,135088,135093,135100,135110,135120,135136,135147],{"__ignoreMap":30},[144,135089,135090],{"class":146,"line":147},[144,135091,135092],{"class":213},"\u002F* CSS 实现三角形 *\u002F\n",[144,135094,135095,135098],{"class":146,"line":66},[144,135096,135097],{"class":1993},".triangle",[144,135099,15603],{"class":154},[144,135101,135102,135104,135106,135108],{"class":146,"line":1210},[144,135103,70581],{"class":203},[144,135105,51450],{"class":154},[144,135107,346],{"class":203},[144,135109,1321],{"class":154},[144,135111,135112,135114,135116,135118],{"class":146,"line":1225},[144,135113,70801],{"class":203},[144,135115,51450],{"class":154},[144,135117,346],{"class":203},[144,135119,1321],{"class":154},[144,135121,135122,135124,135126,135128,135130,135132,135134],{"class":146,"line":1231},[144,135123,70909],{"class":203},[144,135125,51450],{"class":154},[144,135127,601],{"class":203},[144,135129,51505],{"class":150},[144,135131,51534],{"class":203},[144,135133,64004],{"class":203},[144,135135,1321],{"class":154},[144,135137,135138,135141,135143,135145],{"class":146,"line":1245},[144,135139,135140],{"class":203},"  border-bottom-color",[144,135142,51450],{"class":154},[144,135144,62382],{"class":203},[144,135146,1321],{"class":154},[144,135148,135149],{"class":146,"line":1251},[144,135150,1595],{"class":154},[135,135152,135153],{"className":126565,"code":130722,"language":126567,"meta":30,"style":30},[141,135154,135155,135161,135177],{"__ignoreMap":30},[144,135156,135157,135159],{"class":146,"line":147},[144,135158,51624],{"class":51313},[144,135160,15603],{"class":154},[144,135162,135163,135165,135167,135169,135171,135173,135175],{"class":146,"line":66},[144,135164,70909],{"class":203},[144,135166,51450],{"class":154},[144,135168,372],{"class":203},[144,135170,51505],{"class":150},[144,135172,51534],{"class":203},[144,135174,129957],{"class":203},[144,135176,1321],{"class":154},[144,135178,135179],{"class":146,"line":1210},[144,135180,1595],{"class":154},[28,135182],{"style":126421,"src":135183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[18,135185,135187],{"id":135186},"_132-css用户界面样式","13.2 css用户界面样式",[115,135189,135191],{"id":135190},"_1321-鼠标样式","13.2.1 鼠标样式",[135,135193,135195],{"className":126565,"code":135194,"language":126567,"meta":30,"style":30},"\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",[141,135196,135197,135202,135221,135239,135258,135275],{"__ignoreMap":30},[144,135198,135199],{"class":146,"line":147},[144,135200,135201],{"class":213},"\u002F* 鼠标样式 *\u002F\n",[144,135203,135204,135206,135208,135211,135213,135215,135218],{"class":146,"line":66},[144,135205,51624],{"class":51313},[144,135207,79820],{"class":154},[144,135209,135210],{"class":203},"cursor",[144,135212,51450],{"class":154},[144,135214,62043],{"class":203},[144,135216,135217],{"class":154},"; }   ",[144,135219,135220],{"class":213},"\u002F* 手型 *\u002F\n",[144,135222,135223,135225,135227,135229,135231,135234,135236],{"class":146,"line":1210},[144,135224,51624],{"class":51313},[144,135226,79820],{"class":154},[144,135228,135210],{"class":203},[144,135230,51450],{"class":154},[144,135232,135233],{"class":203},"default",[144,135235,135217],{"class":154},[144,135237,135238],{"class":213},"\u002F* 默认 *\u002F\n",[144,135240,135241,135243,135245,135247,135249,135252,135255],{"class":146,"line":1225},[144,135242,51624],{"class":51313},[144,135244,79820],{"class":154},[144,135246,135210],{"class":203},[144,135248,51450],{"class":154},[144,135250,135251],{"class":203},"move",[144,135253,135254],{"class":154},"; }      ",[144,135256,135257],{"class":213},"\u002F* 移动 *\u002F\n",[144,135259,135260,135262,135264,135266,135268,135270,135272],{"class":146,"line":1231},[144,135261,51624],{"class":51313},[144,135263,79820],{"class":154},[144,135265,135210],{"class":203},[144,135267,51450],{"class":154},[144,135269,5218],{"class":203},[144,135271,135254],{"class":154},[144,135273,135274],{"class":213},"\u002F* 文本 *\u002F\n",[144,135276,135277,135279,135281,135283,135285,135288,135291],{"class":146,"line":1245},[144,135278,51624],{"class":51313},[144,135280,79820],{"class":154},[144,135282,135210],{"class":203},[144,135284,51450],{"class":154},[144,135286,135287],{"class":203},"not-allowed",[144,135289,135290],{"class":154},"; } ",[144,135292,135293],{"class":213},"\u002F* 禁止 *\u002F\n",[292,135295,135296,135304],{},[295,135297,135298],{},[298,135299,135300,135302],{},[301,135301,127029],{"align":23768},[301,135303,27502],{"align":23768},[339,135305,135306,135313,135320,135327,135334],{},[298,135307,135308,135310],{},[344,135309,135233],{"align":23768},[344,135311,135312],{"align":23768},"小白 默认",[298,135314,135315,135317],{},[344,135316,62043],{"align":23768},[344,135318,135319],{"align":23768},"小手",[298,135321,135322,135324],{},[344,135323,135251],{"align":23768},[344,135325,135326],{"align":23768},"移动",[298,135328,135329,135331],{},[344,135330,5218],{"align":23768},[344,135332,135333],{"align":23768},"文本",[298,135335,135336,135338],{},[344,135337,135287],{"align":23768},[344,135339,135340],{"align":23768},"禁止",[115,135342,135344],{"id":135343},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135346,135347],{},"去除表单轮廓线",[14,135349,135350],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[135,135352,135353],{"className":126565,"code":129929,"language":126567,"meta":30,"style":30},[141,135354,135355,135359,135365,135381],{"__ignoreMap":30},[144,135356,135357],{"class":146,"line":147},[144,135358,129936],{"class":213},[144,135360,135361,135363],{"class":146,"line":66},[144,135362,51624],{"class":51313},[144,135364,15603],{"class":154},[144,135366,135367,135369,135371,135373,135375,135377,135379],{"class":146,"line":1210},[144,135368,70909],{"class":203},[144,135370,51450],{"class":154},[144,135372,372],{"class":203},[144,135374,51505],{"class":150},[144,135376,51534],{"class":203},[144,135378,129957],{"class":203},[144,135380,1321],{"class":154},[144,135382,135383],{"class":146,"line":1225},[144,135384,1595],{"class":154},[14,135386,135387],{},"文本域：",[28,135389],{"style":126421,"src":135390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,135392,135393],{},"此时会有一个空白区域",[28,135395],{"style":126421,"src":135396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,135398,135399],{},"写在同一行就不会出现这个问题",[28,135401],{"style":126421,"src":135402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,135404,135405],{},"文本域是行内块元素，一定记住！！！",[14,135407,98246],{},[28,135409],{"style":126421,"src":135410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,135412,135413],{},"文本域尽量放在一行",[14,135415,135416],{},"知识回顾：cols是列，rols是行",[28,135418],{"style":126421,"src":135419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,135421,135422],{},"它可以进行拖动，显然这是我们不愿意看到的",[28,135424],{"style":126421,"src":135425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,135427,135428],{},"使用resize进行解决",[135,135430,135432],{"className":126565,"code":135431,"language":126567,"meta":30,"style":30},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[141,135433,135434,135440,135453],{"__ignoreMap":30},[144,135435,135436,135438],{"class":146,"line":147},[144,135437,53834],{"class":51313},[144,135439,15603],{"class":154},[144,135441,135442,135444,135446,135448,135450],{"class":146,"line":66},[144,135443,70811],{"class":203},[144,135445,51450],{"class":154},[144,135447,54750],{"class":203},[144,135449,130428],{"class":154},[144,135451,135452],{"class":213},"\u002F* 取消表单轮廓线 *\u002F\n",[144,135454,135455],{"class":146,"line":1210},[144,135456,1595],{"class":154},[14,135458,135459],{},"此时就无法通过右下方实现拖动了",[115,135461,135463],{"id":135462},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,135465,135466],{},"实现一个盒子中的文字和图片对齐",[14,135468,135469,135470,135473],{},"用于设置一个元素的 ",[304,135471,135472],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,135475,135476],{},"图片和文字默认是基线对齐",[28,135478],{"style":126421,"src":135479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[135,135481,135482],{"className":126565,"code":135431,"language":126567,"meta":30,"style":30},[141,135483,135484,135490,135502],{"__ignoreMap":30},[144,135485,135486,135488],{"class":146,"line":147},[144,135487,53834],{"class":51313},[144,135489,15603],{"class":154},[144,135491,135492,135494,135496,135498,135500],{"class":146,"line":66},[144,135493,70811],{"class":203},[144,135495,51450],{"class":154},[144,135497,54750],{"class":203},[144,135499,130428],{"class":154},[144,135501,135452],{"class":213},[144,135503,135504],{"class":146,"line":1210},[144,135505,1595],{"class":154},[28,135507],{"style":126421,"src":135508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22029,135510,135512],{"id":135511},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,135514,135515],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[28,135517],{"style":126421,"src":135518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,135520,135521,135522,135525],{},"此时可以给图片、表单这些行内块元素的 ",[304,135523,135524],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22029,135527,135529],{"id":135528},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,135531,135532],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,135534,14664],{},[135,135536,135538],{"className":126565,"code":135537,"language":126567,"meta":30,"style":30},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[141,135539,135540,135545,135551,135563],{"__ignoreMap":30},[144,135541,135542],{"class":146,"line":147},[144,135543,135544],{"class":213},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[144,135546,135547,135549],{"class":146,"line":66},[144,135548,28],{"class":51313},[144,135550,15603],{"class":154},[144,135552,135553,135556,135558,135561],{"class":146,"line":1210},[144,135554,135555],{"class":203},"  vertical-align",[144,135557,51450],{"class":154},[144,135559,135560],{"class":203},"middle",[144,135562,1321],{"class":154},[144,135564,135565],{"class":146,"line":1225},[144,135566,1595],{"class":154},[28,135568],{"style":126421,"src":135569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,135571,135572],{},"主要解决方法有两种：",[98,135574,135575],{},[101,135576,135577,135580,135581,135584],{},[304,135578,135579],{},"给图片"," 添加 ",[304,135582,135583],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,135586,135587,135588],{},"2.把图片转换为块级元素 ",[304,135589,135590],{},"display: block",[14,135592,135593],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,135595,135596],{},"img {",[14,135598,135599],{},"vertical-align:middle;",[14,135601,1101],{},[115,135603,135605],{"id":135604},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,135607,135608],{},"效果：",[28,135610],{"style":126421,"src":135611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,135613,135614],{},"单行文本溢出显示省略号--必须满足三个条件：",[135,135616,135618],{"className":126565,"code":135617,"language":126567,"meta":30,"style":30},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[141,135619,135620,135625,135631,135641,135646,135656],{"__ignoreMap":30},[144,135621,135622],{"class":146,"line":147},[144,135623,135624],{"class":213},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[144,135626,135627,135629],{"class":146,"line":66},[144,135628,28],{"class":51313},[144,135630,15603],{"class":154},[144,135632,135633,135635,135637,135639],{"class":146,"line":1210},[144,135634,135555],{"class":203},[144,135636,51450],{"class":154},[144,135638,135560],{"class":203},[144,135640,1321],{"class":154},[144,135642,135643],{"class":146,"line":1225},[144,135644,135645],{"class":213},"  \u002F* 或 *\u002F\n",[144,135647,135648,135650,135652,135654],{"class":146,"line":1231},[144,135649,128181],{"class":203},[144,135651,51450],{"class":154},[144,135653,60882],{"class":203},[144,135655,1321],{"class":154},[144,135657,135658],{"class":146,"line":1245},[144,135659,1595],{"class":154},[115,135661,135663],{"id":135662},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,135665,135608],{},[28,135667],{"style":126421,"src":135668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,135670,135671,135672,135675],{},"多行文本溢出显示省略号， ",[304,135673,135674],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[135,135677,135678],{"className":126565,"code":135617,"language":126567,"meta":30,"style":30},[141,135679,135680,135684,135690,135700,135704,135714],{"__ignoreMap":30},[144,135681,135682],{"class":146,"line":147},[144,135683,135624],{"class":213},[144,135685,135686,135688],{"class":146,"line":66},[144,135687,28],{"class":51313},[144,135689,15603],{"class":154},[144,135691,135692,135694,135696,135698],{"class":146,"line":1210},[144,135693,135555],{"class":203},[144,135695,51450],{"class":154},[144,135697,135560],{"class":203},[144,135699,1321],{"class":154},[144,135701,135702],{"class":146,"line":1225},[144,135703,135645],{"class":213},[144,135705,135706,135708,135710,135712],{"class":146,"line":1231},[144,135707,128181],{"class":203},[144,135709,51450],{"class":154},[144,135711,60882],{"class":203},[144,135713,1321],{"class":154},[144,135715,135716],{"class":146,"line":1245},[144,135717,1595],{"class":154},[14,135719,135720],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[18,135722,135724],{"id":135723},"_133-常见布局技巧","13.3 常见布局技巧",[14,135726,135727],{},[304,135728,135729],{},"巧妙利用一个技术更快更好的布局：",[98,135731,135732,135735,135738,135741],{},[101,135733,135734],{},"margin负值的运用",[101,135736,135737],{},"文字围绕浮动元素",[101,135739,135740],{},"行内块的巧妙运用",[101,135742,135743],{},"CSS三角强化",[115,135745,135747],{"id":135746},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,135749,135750],{},"应用场景：",[28,135752],{"style":126421,"src":135753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[28,135755],{"style":126421,"src":135756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,135758,135759],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,135761,135762],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[135,135764,135765],{"className":126565,"code":129929,"language":126567,"meta":30,"style":30},[141,135766,135767,135771,135777,135793],{"__ignoreMap":30},[144,135768,135769],{"class":146,"line":147},[144,135770,129936],{"class":213},[144,135772,135773,135775],{"class":146,"line":66},[144,135774,51624],{"class":51313},[144,135776,15603],{"class":154},[144,135778,135779,135781,135783,135785,135787,135789,135791],{"class":146,"line":1210},[144,135780,70909],{"class":203},[144,135782,51450],{"class":154},[144,135784,372],{"class":203},[144,135786,51505],{"class":150},[144,135788,51534],{"class":203},[144,135790,129957],{"class":203},[144,135792,1321],{"class":154},[144,135794,135795],{"class":146,"line":1225},[144,135796,1595],{"class":154},[28,135798],{"style":126421,"src":135799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,135801,135802],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[135,135804,135806],{"className":126565,"code":135805,"language":126567,"meta":30,"style":30},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[141,135807,135808,135813,135819,135829,135841,135853],{"__ignoreMap":30},[144,135809,135810],{"class":146,"line":147},[144,135811,135812],{"class":213},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[144,135814,135815,135817],{"class":146,"line":66},[144,135816,130413],{"class":1993},[144,135818,15603],{"class":154},[144,135820,135821,135823,135825,135827],{"class":146,"line":1210},[144,135822,132371],{"class":203},[144,135824,51450],{"class":154},[144,135826,54777],{"class":203},[144,135828,1321],{"class":154},[144,135830,135831,135833,135835,135837,135839],{"class":146,"line":1225},[144,135832,132385],{"class":203},[144,135834,51450],{"class":154},[144,135836,601],{"class":203},[144,135838,51505],{"class":150},[144,135840,1321],{"class":154},[144,135842,135843,135845,135847,135849,135851],{"class":146,"line":1231},[144,135844,132402],{"class":203},[144,135846,51450],{"class":154},[144,135848,855],{"class":203},[144,135850,51505],{"class":150},[144,135852,1321],{"class":154},[144,135854,135855],{"class":146,"line":1245},[144,135856,1595],{"class":154},[14,135858,135859],{},"加上上述代码会发现：",[28,135861],{"style":126421,"src":135862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,135864,135865],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,135867,135868],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[135,135870,135871],{"className":126565,"code":135805,"language":126567,"meta":30,"style":30},[141,135872,135873,135877,135883,135893,135905,135917],{"__ignoreMap":30},[144,135874,135875],{"class":146,"line":147},[144,135876,135812],{"class":213},[144,135878,135879,135881],{"class":146,"line":66},[144,135880,130413],{"class":1993},[144,135882,15603],{"class":154},[144,135884,135885,135887,135889,135891],{"class":146,"line":1210},[144,135886,132371],{"class":203},[144,135888,51450],{"class":154},[144,135890,54777],{"class":203},[144,135892,1321],{"class":154},[144,135894,135895,135897,135899,135901,135903],{"class":146,"line":1225},[144,135896,132385],{"class":203},[144,135898,51450],{"class":154},[144,135900,601],{"class":203},[144,135902,51505],{"class":150},[144,135904,1321],{"class":154},[144,135906,135907,135909,135911,135913,135915],{"class":146,"line":1231},[144,135908,132402],{"class":203},[144,135910,51450],{"class":154},[144,135912,855],{"class":203},[144,135914,51505],{"class":150},[144,135916,1321],{"class":154},[144,135918,135919],{"class":146,"line":1245},[144,135920,1595],{"class":154},[14,135922,135923],{},"解决方式2：",[14,135925,135926],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[135,135928,135930],{"className":126565,"code":135929,"language":126567,"meta":30,"style":30},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[141,135931,135932,135938,135948,135960,135972],{"__ignoreMap":30},[144,135933,135934,135936],{"class":146,"line":147},[144,135935,51624],{"class":51313},[144,135937,15603],{"class":154},[144,135939,135940,135942,135944,135946],{"class":146,"line":66},[144,135941,132371],{"class":203},[144,135943,51450],{"class":154},[144,135945,54777],{"class":203},[144,135947,1321],{"class":154},[144,135949,135950,135952,135954,135956,135958],{"class":146,"line":1210},[144,135951,132385],{"class":203},[144,135953,51450],{"class":154},[144,135955,601],{"class":203},[144,135957,51505],{"class":150},[144,135959,1321],{"class":154},[144,135961,135962,135964,135966,135968,135970],{"class":146,"line":1225},[144,135963,132402],{"class":203},[144,135965,51450],{"class":154},[144,135967,855],{"class":203},[144,135969,51505],{"class":150},[144,135971,1321],{"class":154},[144,135973,135974],{"class":146,"line":1231},[144,135975,1595],{"class":154},[115,135977,135979],{"id":135978},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,135981,135750],{},[28,135983],{"style":126421,"src":135984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,135986,135987],{},"实现结构图：",[28,135989],{"style":126421,"src":135990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,135992,135993],{},"巧妙运用浮动元素不会压住文字的特性",[14,135995,135996],{},"代码显示：",[135,135998,136000],{"className":126565,"code":135999,"language":126567,"meta":30,"style":30},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[141,136001,136002,136008,136018,136022,136027,136031,136037,136051],{"__ignoreMap":30},[144,136003,136004,136006],{"class":146,"line":147},[144,136005,130413],{"class":1993},[144,136007,15603],{"class":154},[144,136009,136010,136012,136014,136016],{"class":146,"line":66},[144,136011,131045],{"class":203},[144,136013,51450],{"class":154},[144,136015,23768],{"class":203},[144,136017,1321],{"class":154},[144,136019,136020],{"class":146,"line":1210},[144,136021,1595],{"class":154},[144,136023,136024],{"class":146,"line":1225},[144,136025,136026],{"class":154},"```Css\n",[144,136028,136029],{"class":146,"line":1231},[144,136030,130408],{"class":213},[144,136032,136033,136035],{"class":146,"line":1245},[144,136034,130413],{"class":1993},[144,136036,15603],{"class":154},[144,136038,136039,136041,136043,136045,136047,136049],{"class":146,"line":1251},[144,136040,70483],{"class":203},[144,136042,51450],{"class":154},[144,136044,346],{"class":203},[144,136046,51569],{"class":203},[144,136048,130428],{"class":154},[144,136050,130431],{"class":213},[144,136052,136053],{"class":146,"line":1342},[144,136054,1595],{"class":154},[14,136056,136057],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[135,136059,136062],{"className":136060,"code":136061,"language":5218},[5216],"\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",[141,136063,136061],{"__ignoreMap":30},[28,136065],{"style":126421,"src":136066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136068,136069],{},"最终展示结果：",[135,136071,136072],{"className":126565,"code":130401,"language":126567,"meta":30,"style":30},[141,136073,136074,136078,136084,136098],{"__ignoreMap":30},[144,136075,136076],{"class":146,"line":147},[144,136077,130408],{"class":213},[144,136079,136080,136082],{"class":146,"line":66},[144,136081,130413],{"class":1993},[144,136083,15603],{"class":154},[144,136085,136086,136088,136090,136092,136094,136096],{"class":146,"line":1210},[144,136087,70483],{"class":203},[144,136089,51450],{"class":154},[144,136091,346],{"class":203},[144,136093,51569],{"class":203},[144,136095,130428],{"class":154},[144,136097,130431],{"class":213},[144,136099,136100],{"class":146,"line":1225},[144,136101,1595],{"class":154},[28,136103],{"style":126421,"src":136104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[18,136106,136108],{"id":136107},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[115,136110,136112],{"id":136111},"_1341-原理","13.4.1 原理",[28,136114],{"style":126421,"src":136115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[135,136117,136118],{"className":126565,"code":130401,"language":126567,"meta":30,"style":30},[141,136119,136120,136124,136130,136144],{"__ignoreMap":30},[144,136121,136122],{"class":146,"line":147},[144,136123,130408],{"class":213},[144,136125,136126,136128],{"class":146,"line":66},[144,136127,130413],{"class":1993},[144,136129,15603],{"class":154},[144,136131,136132,136134,136136,136138,136140,136142],{"class":146,"line":1210},[144,136133,70483],{"class":203},[144,136135,51450],{"class":154},[144,136137,346],{"class":203},[144,136139,51569],{"class":203},[144,136141,130428],{"class":154},[144,136143,130431],{"class":213},[144,136145,136146],{"class":146,"line":1225},[144,136147,1595],{"class":154},[115,136149,136151],{"id":136150},"_1342-实例","13.4.2 实例",[28,136153],{"style":126421,"src":136154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[135,136156,136157],{"className":126565,"code":131031,"language":126567,"meta":30,"style":30},[141,136158,136159,136165,136175,136179,136185,136195],{"__ignoreMap":30},[144,136160,136161,136163],{"class":146,"line":147},[144,136162,131038],{"class":1993},[144,136164,15603],{"class":154},[144,136166,136167,136169,136171,136173],{"class":146,"line":66},[144,136168,131045],{"class":203},[144,136170,51450],{"class":154},[144,136172,23768],{"class":203},[144,136174,1321],{"class":154},[144,136176,136177],{"class":146,"line":1210},[144,136178,1595],{"class":154},[144,136180,136181,136183],{"class":146,"line":1225},[144,136182,131060],{"class":1993},[144,136184,15603],{"class":154},[144,136186,136187,136189,136191,136193],{"class":146,"line":1231},[144,136188,131045],{"class":203},[144,136190,51450],{"class":154},[144,136192,72535],{"class":203},[144,136194,1321],{"class":154},[144,136196,136197],{"class":146,"line":1245},[144,136198,1595],{"class":154},[18,136200,136202],{"id":136201},"_135-css的初始化","13.5 css的初始化",[14,136204,136205],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136207,136208],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136210,136211],{},"每个网页都必须首先进行 CSS初始化。",[14,136213,136214],{},"这里我们以 京东CSS初始化代码为例。",[14,136216,136217],{},"在网页右键查看网页源代码",[14,136219,136220],{},"找到css的link引入语句",[14,136222,136223],{},"然后ctrl+f 输入body",[14,136225,77239],{},[28,136227],{"style":126421,"src":136228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136230,77262],{},[28,136232],{"style":126421,"src":136233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136235,136236],{},"③打开了网页上传压缩的代码",[28,136238],{"style":126421,"src":136239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136241,136242],{},"④从body前可以查看这个网页的初始化代码",[14,136244,136245],{},[304,136246,136247],{},"Unicode编码字体：",[14,136249,136250],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136252,83220],{},[14,136254,136255],{},"黑体 \\9ED1\\4F53",[14,136257,136258],{},"宋体 \\5B8B\\4F53",[14,136260,136261],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5157,136263,136264],{},"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":30,"searchDepth":66,"depth":66,"links":136266},[136267,136268,136275,136279,136283],{"id":135064,"depth":66,"text":135065},{"id":135186,"depth":66,"text":135187,"children":136269},[136270,136271,136272,136273,136274],{"id":135190,"depth":1210,"text":135191},{"id":135343,"depth":1210,"text":135344},{"id":135462,"depth":1210,"text":135463},{"id":135604,"depth":1210,"text":135605},{"id":135662,"depth":1210,"text":135663},{"id":135723,"depth":66,"text":135724,"children":136276},[136277,136278],{"id":135746,"depth":1210,"text":135747},{"id":135978,"depth":1210,"text":135979},{"id":136107,"depth":66,"text":136108,"children":136280},[136281,136282],{"id":136111,"depth":1210,"text":136112},{"id":136150,"depth":1210,"text":136151},{"id":136201,"depth":66,"text":136202},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135056,"description":23408},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136290,"title":136291,"body":136292,"description":23408,"extension":70,"meta":137978,"navigation":72,"path":137979,"seo":137980,"stem":137981,"__hash__":137982},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136293,"toc":137967},[136294,136297,136301,136305,136308,136315,136318,136321,136359,136362,136364,136378,136382,136391,136395,136400,136403,136406,136409,136444,136449,136452,136482,136485,136490,136493,136496,136526,136529,136583,136586,136590,136595,136607,136610,136614,136644,136647,136652,136655,136685,136688,136692,136709,136713,136717,136720,136753,136756,136760,136763,136766,136769,136772,136775,136886,136889,136892,136895,136997,137000,137004,137008,137012,137015,137055,137058,137060,137076,137080,137083,137088,137169,137172,137175,137301,137306,137309,137317,137320,137325,137410,137413,137417,137420,137423,137427,137447,137452,137536,137539,137544,137547,137550,137628,137631,137634,137637,137640,137643,137648,137651,137654,137726,137729,137734,137737,137834,137837,137843,137846,137849,137852,137855,137858,137861,137864,137867,137871,137876,137879,137912,137917,137920,137961,137964],[10,136295,136291],{"id":136296},"_14-html5与css3新特性",[18,136298,136300],{"id":136299},"_141-html5的新特性","14.1 HTML5的新特性",[115,136302,136304],{"id":136303},"_1411-基本标签","14.1.1 基本标签",[14,136306,136307],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136309,136310,136311,136314],{},"这些新特性都有兼容性问题，基本是 ",[304,136312,136313],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136316,136317],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136319,136320],{},"现在使用的是新特性：",[1162,136322,136323,136329,136335,136341,136347,136353],{},[101,136324,136325,136328],{},[141,136326,136327],{},"\u003Cheader>"," 头部标签",[101,136330,136331,136334],{},[141,136332,136333],{},"\u003Cnav>"," 导航标签",[101,136336,136337,136340],{},[141,136338,136339],{},"\u003Carticle>"," 内容标签",[101,136342,136343,136346],{},[141,136344,136345],{},"\u003Csection>"," 定义文档某个区域",[101,136348,136349,136352],{},[141,136350,136351],{},"\u003Caside>"," 侧边栏标签",[101,136354,136355,136358],{},[141,136356,136357],{},"\u003Cfooter>"," 尾部标签",[28,136360],{"style":126421,"src":136361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136363,184],{},[1162,136365,136366,136369,136372,136375],{},[101,136367,136368],{},"这种语义化标准主要是针对搜索引擎的",[101,136370,136371],{},"这些标签页面中可以经常使用",[101,136373,136374],{},"在IE9中，需要把这些元素转换为块级元素",[101,136376,136377],{},"移动端更喜欢使用这些标签",[115,136379,136381],{"id":136380},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136383,136384,136385,136387,136388,136390],{},"音频 ",[304,136386,28187],{}," 和视频 ",[304,136389,28196],{}," 两个标签",[22029,136392,136394],{"id":136393},"_14121-视频标签-video","14.1.2.1 视频标签- video",[98,136396,136397],{},[101,136398,136399],{},"支持格式：",[28,136401],{"style":126421,"src":136402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,136404,136405],{},"尽量使用MP4，兼容性好",[14,136407,136408],{},"用MP4就可以",[135,136410,136412],{"className":127312,"code":136411,"language":127314,"meta":30,"style":30},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[141,136413,136414],{"__ignoreMap":30},[144,136415,136416,136418,136420,136422,136424,136427,136429,136432,136435,136438,136440,136442],{"class":146,"line":147},[144,136417,1065],{"class":154},[144,136419,28196],{"class":51313},[144,136421,55252],{"class":1993},[144,136423,200],{"class":154},[144,136425,136426],{"class":259},"\"movie.mp4\"",[144,136428,92436],{"class":1993},[144,136430,136431],{"class":1993}," autoplay",[144,136433,136434],{"class":1993}," muted",[144,136436,136437],{"class":1993}," loop",[144,136439,55327],{"class":154},[144,136441,28196],{"class":51313},[144,136443,51320],{"class":154},[98,136445,136446],{"start":66},[101,136447,136448],{},"兼容写法",[14,136450,136451],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[135,136453,136454],{"className":127312,"code":136411,"language":127314,"meta":30,"style":30},[141,136455,136456],{"__ignoreMap":30},[144,136457,136458,136460,136462,136464,136466,136468,136470,136472,136474,136476,136478,136480],{"class":146,"line":147},[144,136459,1065],{"class":154},[144,136461,28196],{"class":51313},[144,136463,55252],{"class":1993},[144,136465,200],{"class":154},[144,136467,136426],{"class":259},[144,136469,92436],{"class":1993},[144,136471,136431],{"class":1993},[144,136473,136434],{"class":1993},[144,136475,136437],{"class":1993},[144,136477,55327],{"class":154},[144,136479,28196],{"class":51313},[144,136481,51320],{"class":154},[14,136483,136484],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[98,136486,136487],{"start":1210},[101,136488,136489],{},"video常用属性",[28,136491],{"style":126421,"src":136492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,136494,136495],{},"poster属性后面是跟的等待加载图片的地址",[135,136497,136498],{"className":127312,"code":134067,"language":127314,"meta":30,"style":30},[141,136499,136500],{"__ignoreMap":30},[144,136501,136502,136504,136506,136508,136510,136512,136514,136516,136518,136520,136522,136524],{"class":146,"line":147},[144,136503,1065],{"class":154},[144,136505,28],{"class":51313},[144,136507,55252],{"class":1993},[144,136509,200],{"class":154},[144,136511,134082],{"class":259},[144,136513,55260],{"class":1993},[144,136515,200],{"class":154},[144,136517,134089],{"class":259},[144,136519,134092],{"class":1993},[144,136521,200],{"class":154},[144,136523,134097],{"class":259},[144,136525,51320],{"class":154},[14,136527,136528],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[135,136530,136532],{"className":126565,"code":136531,"language":126567,"meta":30,"style":30},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[141,136533,136534,136539,136545,136569,136574,136579],{"__ignoreMap":30},[144,136535,136536],{"class":146,"line":147},[144,136537,136538],{"class":213},"\u002F* 2D 位移 *\u002F\n",[144,136540,136541,136543],{"class":146,"line":66},[144,136542,51624],{"class":51313},[144,136544,15603],{"class":154},[144,136546,136547,136550,136552,136555,136557,136559,136561,136563,136565,136567],{"class":146,"line":1210},[144,136548,136549],{"class":203},"  transform",[144,136551,51450],{"class":154},[144,136553,136554],{"class":203},"translate",[144,136556,155],{"class":154},[144,136558,466],{"class":203},[144,136560,51505],{"class":150},[144,136562,12466],{"class":154},[144,136564,811],{"class":203},[144,136566,51505],{"class":150},[144,136568,2749],{"class":154},[144,136570,136571],{"class":146,"line":1225},[144,136572,136573],{"class":213},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[144,136575,136576],{"class":146,"line":1231},[144,136577,136578],{"class":213},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[144,136580,136581],{"class":146,"line":1245},[144,136582,1595],{"class":154},[14,136584,136585],{},"muted:自动静音属性",[22029,136587,136589],{"id":136588},"_14122-音频标签audio","14.1.2.2 音频标签audio",[98,136591,136592],{},[101,136593,136594],{},"基本使用",[14,136596,136597,136598,136603,136604],{},"当前 ",[304,136599,136600],{},[141,136601,136602],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[304,136605,136606],{},"mp3格式",[28,136608],{"style":126421,"src":136609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[98,136611,136612],{"start":66},[101,136613,136448],{},[135,136615,136616],{"className":127312,"code":136411,"language":127314,"meta":30,"style":30},[141,136617,136618],{"__ignoreMap":30},[144,136619,136620,136622,136624,136626,136628,136630,136632,136634,136636,136638,136640,136642],{"class":146,"line":147},[144,136621,1065],{"class":154},[144,136623,28196],{"class":51313},[144,136625,55252],{"class":1993},[144,136627,200],{"class":154},[144,136629,136426],{"class":259},[144,136631,92436],{"class":1993},[144,136633,136431],{"class":1993},[144,136635,136434],{"class":1993},[144,136637,136437],{"class":1993},[144,136639,55327],{"class":154},[144,136641,28196],{"class":51313},[144,136643,51320],{"class":154},[14,136645,136646],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[98,136648,136649],{"start":1210},[101,136650,136651],{},"常用属性",[28,136653],{"style":126421,"src":136654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[135,136656,136657],{"className":127312,"code":136411,"language":127314,"meta":30,"style":30},[141,136658,136659],{"__ignoreMap":30},[144,136660,136661,136663,136665,136667,136669,136671,136673,136675,136677,136679,136681,136683],{"class":146,"line":147},[144,136662,1065],{"class":154},[144,136664,28196],{"class":51313},[144,136666,55252],{"class":1993},[144,136668,200],{"class":154},[144,136670,136426],{"class":259},[144,136672,92436],{"class":1993},[144,136674,136431],{"class":1993},[144,136676,136434],{"class":1993},[144,136678,136437],{"class":1993},[144,136680,55327],{"class":154},[144,136682,28196],{"class":51313},[144,136684,51320],{"class":154},[14,136686,136687],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22029,136689,136691],{"id":136690},"_14123-总结","14.1.2.3 总结",[1162,136693,136694,136697,136700,136703,136706],{},[101,136695,136696],{},"音频标签和视频标签使用方式基本一致",[101,136698,136699],{},"浏览器支持情况不同",[101,136701,136702],{},"谷歌浏览器把音频和视频自动播放禁止了",[101,136704,136705],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[101,136707,136708],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[115,136710,136712],{"id":136711},"_1413-表单元素","14.1.3 表单元素",[22029,136714,136716],{"id":136715},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[28,136718],{"style":126421,"src":136719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[135,136721,136723],{"className":127312,"code":136722,"language":127314,"meta":30,"style":30},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[141,136724,136725],{"__ignoreMap":30},[144,136726,136727,136729,136731,136733,136735,136737,136739,136741,136744,136746,136748,136751],{"class":146,"line":147},[144,136728,1065],{"class":154},[144,136730,53834],{"class":51313},[144,136732,53837],{"class":1993},[144,136734,200],{"class":154},[144,136736,62712],{"class":259},[144,136738,14951],{"class":1993},[144,136740,200],{"class":154},[144,136742,136743],{"class":259},"\"username\"",[144,136745,61033],{"class":1993},[144,136747,200],{"class":154},[144,136749,136750],{"class":259},"\"请输入用户名\"",[144,136752,51320],{"class":154},[28,136754],{"style":126421,"src":136755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22029,136757,136759],{"id":136758},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[28,136761],{"style":126421,"src":136762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,136764,136765],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,136767,136768],{},"快捷操作：",[28,136770],{"style":126421,"src":136771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,136773,136774],{},"例子1：",[135,136776,136778],{"className":127312,"code":136777,"language":127314,"meta":30,"style":30},"\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",[141,136779,136780,136803,136830,136859,136878],{"__ignoreMap":30},[144,136781,136782,136784,136786,136788,136790,136793,136796,136798,136801],{"class":146,"line":147},[144,136783,1065],{"class":154},[144,136785,66638],{"class":51313},[144,136787,66641],{"class":1993},[144,136789,200],{"class":154},[144,136791,136792],{"class":259},"\"\u002Fsubmit\"",[144,136794,136795],{"class":1993}," method",[144,136797,200],{"class":154},[144,136799,136800],{"class":259},"\"post\"",[144,136802,51320],{"class":154},[144,136804,136805,136807,136809,136811,136813,136815,136817,136819,136821,136823,136825,136828],{"class":146,"line":66},[144,136806,52157],{"class":154},[144,136808,53834],{"class":51313},[144,136810,53837],{"class":1993},[144,136812,200],{"class":154},[144,136814,62712],{"class":259},[144,136816,14951],{"class":1993},[144,136818,200],{"class":154},[144,136820,136743],{"class":259},[144,136822,61033],{"class":1993},[144,136824,200],{"class":154},[144,136826,136827],{"class":259},"\"用户名\"",[144,136829,51320],{"class":154},[144,136831,136832,136834,136836,136838,136840,136843,136845,136847,136850,136852,136854,136857],{"class":146,"line":1210},[144,136833,52157],{"class":154},[144,136835,53834],{"class":51313},[144,136837,53837],{"class":1993},[144,136839,200],{"class":154},[144,136841,136842],{"class":259},"\"password\"",[144,136844,14951],{"class":1993},[144,136846,200],{"class":154},[144,136848,136849],{"class":259},"\"pwd\"",[144,136851,61033],{"class":1993},[144,136853,200],{"class":154},[144,136855,136856],{"class":259},"\"密码\"",[144,136858,51320],{"class":154},[144,136860,136861,136863,136865,136867,136869,136871,136874,136876],{"class":146,"line":1225},[144,136862,52157],{"class":154},[144,136864,53900],{"class":51313},[144,136866,53837],{"class":1993},[144,136868,200],{"class":154},[144,136870,66661],{"class":259},[144,136872,136873],{"class":154},">提交\u003C\u002F",[144,136875,53900],{"class":51313},[144,136877,51320],{"class":154},[144,136879,136880,136882,136884],{"class":146,"line":1231},[144,136881,51798],{"class":154},[144,136883,66638],{"class":51313},[144,136885,51320],{"class":154},[28,136887],{"style":126421,"src":136888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,136890,136891],{},"value是表单域的内容",[14,136893,136894],{},"例子2：",[135,136896,136897],{"className":127312,"code":136777,"language":127314,"meta":30,"style":30},[141,136898,136899,136919,136945,136971,136989],{"__ignoreMap":30},[144,136900,136901,136903,136905,136907,136909,136911,136913,136915,136917],{"class":146,"line":147},[144,136902,1065],{"class":154},[144,136904,66638],{"class":51313},[144,136906,66641],{"class":1993},[144,136908,200],{"class":154},[144,136910,136792],{"class":259},[144,136912,136795],{"class":1993},[144,136914,200],{"class":154},[144,136916,136800],{"class":259},[144,136918,51320],{"class":154},[144,136920,136921,136923,136925,136927,136929,136931,136933,136935,136937,136939,136941,136943],{"class":146,"line":66},[144,136922,52157],{"class":154},[144,136924,53834],{"class":51313},[144,136926,53837],{"class":1993},[144,136928,200],{"class":154},[144,136930,62712],{"class":259},[144,136932,14951],{"class":1993},[144,136934,200],{"class":154},[144,136936,136743],{"class":259},[144,136938,61033],{"class":1993},[144,136940,200],{"class":154},[144,136942,136827],{"class":259},[144,136944,51320],{"class":154},[144,136946,136947,136949,136951,136953,136955,136957,136959,136961,136963,136965,136967,136969],{"class":146,"line":1210},[144,136948,52157],{"class":154},[144,136950,53834],{"class":51313},[144,136952,53837],{"class":1993},[144,136954,200],{"class":154},[144,136956,136842],{"class":259},[144,136958,14951],{"class":1993},[144,136960,200],{"class":154},[144,136962,136849],{"class":259},[144,136964,61033],{"class":1993},[144,136966,200],{"class":154},[144,136968,136856],{"class":259},[144,136970,51320],{"class":154},[144,136972,136973,136975,136977,136979,136981,136983,136985,136987],{"class":146,"line":1225},[144,136974,52157],{"class":154},[144,136976,53900],{"class":51313},[144,136978,53837],{"class":1993},[144,136980,200],{"class":154},[144,136982,66661],{"class":259},[144,136984,136873],{"class":154},[144,136986,53900],{"class":51313},[144,136988,51320],{"class":154},[144,136990,136991,136993,136995],{"class":146,"line":1231},[144,136992,51798],{"class":154},[144,136994,66638],{"class":51313},[144,136996,51320],{"class":154},[28,136998],{"style":126421,"src":136999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[18,137001,137003],{"id":137002},"_142-css新特性","14.2 CSS新特性",[115,137005,137007],{"id":137006},"_1421-新增选择器","14.2.1 新增选择器",[22029,137009,137011],{"id":137010},"_14211-属性选择器","14.2.1.1 属性选择器",[28,137013],{"style":126421,"src":137014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[135,137016,137018],{"className":126565,"code":137017,"language":126567,"meta":30,"style":30},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[141,137019,137020,137035,137051],{"__ignoreMap":30},[144,137021,137022,137024,137026,137028,137030,137032],{"class":146,"line":147},[144,137023,53834],{"class":51313},[144,137025,1045],{"class":154},[144,137027,103120],{"class":1993},[144,137029,200],{"class":150},[144,137031,62712],{"class":259},[144,137033,137034],{"class":154},"] {\n",[144,137036,137037,137039,137041,137043,137045,137047,137049],{"class":146,"line":66},[144,137038,70909],{"class":203},[144,137040,51450],{"class":154},[144,137042,372],{"class":203},[144,137044,51505],{"class":150},[144,137046,51534],{"class":203},[144,137048,130145],{"class":203},[144,137050,1321],{"class":154},[144,137052,137053],{"class":146,"line":1210},[144,137054,1595],{"class":154},[28,137056],{"style":126421,"src":137057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137059,184],{},[1162,137061,137062,137065,137068,137071],{},[101,137063,137064],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[101,137066,137067],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[101,137069,137070],{},"属性选择器也可以选择出来自定义的属性",[101,137072,137073,137075],{},[304,137074,9056],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22029,137077,137079],{"id":137078},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[28,137081],{"style":126421,"src":137082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[98,137084,137085],{},[101,137086,137087],{},"fist-child",[135,137089,137091],{"className":126565,"code":137090,"language":126567,"meta":30,"style":30},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[141,137092,137093,137098,137113,137133,137151],{"__ignoreMap":30},[144,137094,137095],{"class":146,"line":147},[144,137096,137097],{"class":213},"\u002F* 属性选择器 *\u002F\n",[144,137099,137100,137102,137104,137106,137108,137110],{"class":146,"line":66},[144,137101,53834],{"class":51313},[144,137103,1045],{"class":154},[144,137105,103120],{"class":1993},[144,137107,200],{"class":150},[144,137109,62712],{"class":259},[144,137111,137112],{"class":154},"] { }\n",[144,137114,137115,137117,137119,137121,137124,137127,137130],{"class":146,"line":1210},[144,137116,53834],{"class":51313},[144,137118,1045],{"class":154},[144,137120,14725],{"class":1993},[144,137122,137123],{"class":150},"^=",[144,137125,137126],{"class":259},"\"icon\"",[144,137128,137129],{"class":154},"] { }  ",[144,137131,137132],{"class":213},"\u002F* 以 icon 开头 *\u002F\n",[144,137134,137135,137137,137139,137141,137144,137146,137148],{"class":146,"line":1225},[144,137136,53834],{"class":51313},[144,137138,1045],{"class":154},[144,137140,14725],{"class":1993},[144,137142,137143],{"class":150},"$=",[144,137145,137126],{"class":259},[144,137147,137129],{"class":154},[144,137149,137150],{"class":213},"\u002F* 以 icon 结尾 *\u002F\n",[144,137152,137153,137155,137157,137159,137162,137164,137166],{"class":146,"line":1231},[144,137154,53834],{"class":51313},[144,137156,1045],{"class":154},[144,137158,14725],{"class":1993},[144,137160,137161],{"class":150},"*=",[144,137163,137126],{"class":259},[144,137165,137129],{"class":154},[144,137167,137168],{"class":213},"\u002F* 包含 icon *\u002F\n",[14,137170,137171],{},"ul的第一个儿子文本为红色",[14,137173,137174],{},"一定要在冒号前加空格，不然就是选中所有的了",[135,137176,137178],{"className":126565,"code":137177,"language":126567,"meta":30,"style":30},".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",[141,137179,137180,137186,137196,137200,137204,137209,137222,137235,137251,137268,137285],{"__ignoreMap":30},[144,137181,137182,137184],{"class":146,"line":147},[144,137183,126856],{"class":1993},[144,137185,15603],{"class":154},[144,137187,137188,137190,137192,137194],{"class":146,"line":66},[144,137189,70918],{"class":203},[144,137191,51450],{"class":154},[144,137193,57434],{"class":203},[144,137195,1321],{"class":154},[144,137197,137198],{"class":146,"line":1210},[144,137199,1595],{"class":154},[144,137201,137202],{"class":146,"line":1225},[144,137203,136026],{"class":154},[144,137205,137206],{"class":146,"line":1231},[144,137207,137208],{"class":213},"\u002F* 结构伪类选择器 *\u002F\n",[144,137210,137211,137213,137216,137219],{"class":146,"line":1245},[144,137212,101],{"class":51313},[144,137214,137215],{"class":1993},":first-child",[144,137217,137218],{"class":154}," { }           ",[144,137220,137221],{"class":213},"\u002F* 第一个 *\u002F\n",[144,137223,137224,137226,137229,137232],{"class":146,"line":1251},[144,137225,101],{"class":51313},[144,137227,137228],{"class":1993},":last-child",[144,137230,137231],{"class":154}," { }            ",[144,137233,137234],{"class":213},"\u002F* 最后一个 *\u002F\n",[144,137236,137237,137239,137241,137243,137245,137248],{"class":146,"line":1342},[144,137238,101],{"class":51313},[144,137240,129479],{"class":1993},[144,137242,155],{"class":154},[144,137244,232],{"class":203},[144,137246,137247],{"class":154},") { }          ",[144,137249,137250],{"class":213},"\u002F* 第2个 *\u002F\n",[144,137252,137253,137255,137257,137259,137262,137265],{"class":146,"line":1348},[144,137254,101],{"class":51313},[144,137256,129479],{"class":1993},[144,137258,155],{"class":154},[144,137260,137261],{"class":203},"2n",[144,137263,137264],{"class":154},") { }         ",[144,137266,137267],{"class":213},"\u002F* 偶数 *\u002F\n",[144,137269,137270,137272,137274,137276,137279,137282],{"class":146,"line":1360},[144,137271,101],{"class":51313},[144,137273,129479],{"class":1993},[144,137275,155],{"class":154},[144,137277,137278],{"class":203},"2n+1",[144,137280,137281],{"class":154},") { }       ",[144,137283,137284],{"class":213},"\u002F* 奇数 *\u002F\n",[144,137286,137287,137289,137291,137293,137296,137298],{"class":146,"line":1642},[144,137288,101],{"class":51313},[144,137290,129479],{"class":1993},[144,137292,155],{"class":154},[144,137294,137295],{"class":203},"-n+3",[144,137297,137281],{"class":154},[144,137299,137300],{"class":213},"\u002F* 前3个 *\u002F\n",[51624,137302,137305],{"className":137303},[137304],"example","\n  示例内容\n",[14,137307,137308],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1162,137310,137311],{},[101,137312,137313,137316],{},[141,137314,137315],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137318,137319],{},"也就是说它选择的是熊大",[98,137321,137322],{"start":1245},[101,137323,137324],{},"权重",[135,137326,137328],{"className":126565,"code":137327,"language":126567,"meta":30,"style":30},"\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",[141,137329,137330,137334,137344,137354,137368,137382,137396],{"__ignoreMap":30},[144,137331,137332],{"class":146,"line":147},[144,137333,137208],{"class":213},[144,137335,137336,137338,137340,137342],{"class":146,"line":66},[144,137337,101],{"class":51313},[144,137339,137215],{"class":1993},[144,137341,137218],{"class":154},[144,137343,137221],{"class":213},[144,137345,137346,137348,137350,137352],{"class":146,"line":1210},[144,137347,101],{"class":51313},[144,137349,137228],{"class":1993},[144,137351,137231],{"class":154},[144,137353,137234],{"class":213},[144,137355,137356,137358,137360,137362,137364,137366],{"class":146,"line":1225},[144,137357,101],{"class":51313},[144,137359,129479],{"class":1993},[144,137361,155],{"class":154},[144,137363,232],{"class":203},[144,137365,137247],{"class":154},[144,137367,137250],{"class":213},[144,137369,137370,137372,137374,137376,137378,137380],{"class":146,"line":1231},[144,137371,101],{"class":51313},[144,137373,129479],{"class":1993},[144,137375,155],{"class":154},[144,137377,137261],{"class":203},[144,137379,137264],{"class":154},[144,137381,137267],{"class":213},[144,137383,137384,137386,137388,137390,137392,137394],{"class":146,"line":1245},[144,137385,101],{"class":51313},[144,137387,129479],{"class":1993},[144,137389,155],{"class":154},[144,137391,137278],{"class":203},[144,137393,137281],{"class":154},[144,137395,137284],{"class":213},[144,137397,137398,137400,137402,137404,137406,137408],{"class":146,"line":1251},[144,137399,101],{"class":51313},[144,137401,129479],{"class":1993},[144,137403,155],{"class":154},[144,137405,137295],{"class":203},[144,137407,137281],{"class":154},[144,137409,137300],{"class":213},[14,137411,137412],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22029,137414,137416],{"id":137415},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,137418,137419],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[28,137421],{"style":126421,"src":137422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[98,137424,137425],{},[101,137426,184],{},[1162,137428,137429,137432,137435,137438,137441,137444],{},[101,137430,137431],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[101,137433,137434],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[101,137436,137437],{},"语法： element::before {}",[101,137439,137440],{},"before 和 after 必须有 content 属性",[101,137442,137443],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[101,137445,137446],{},"伪元素选择器和标签选择器一样，权重为 1",[98,137448,137449],{"start":66},[101,137450,137451],{},"实例",[135,137453,137454],{"className":126565,"code":137327,"language":126567,"meta":30,"style":30},[141,137455,137456,137460,137470,137480,137494,137508,137522],{"__ignoreMap":30},[144,137457,137458],{"class":146,"line":147},[144,137459,137208],{"class":213},[144,137461,137462,137464,137466,137468],{"class":146,"line":66},[144,137463,101],{"class":51313},[144,137465,137215],{"class":1993},[144,137467,137218],{"class":154},[144,137469,137221],{"class":213},[144,137471,137472,137474,137476,137478],{"class":146,"line":1210},[144,137473,101],{"class":51313},[144,137475,137228],{"class":1993},[144,137477,137231],{"class":154},[144,137479,137234],{"class":213},[144,137481,137482,137484,137486,137488,137490,137492],{"class":146,"line":1225},[144,137483,101],{"class":51313},[144,137485,129479],{"class":1993},[144,137487,155],{"class":154},[144,137489,232],{"class":203},[144,137491,137247],{"class":154},[144,137493,137250],{"class":213},[144,137495,137496,137498,137500,137502,137504,137506],{"class":146,"line":1231},[144,137497,101],{"class":51313},[144,137499,129479],{"class":1993},[144,137501,155],{"class":154},[144,137503,137261],{"class":203},[144,137505,137264],{"class":154},[144,137507,137267],{"class":213},[144,137509,137510,137512,137514,137516,137518,137520],{"class":146,"line":1245},[144,137511,101],{"class":51313},[144,137513,129479],{"class":1993},[144,137515,155],{"class":154},[144,137517,137278],{"class":203},[144,137519,137281],{"class":154},[144,137521,137284],{"class":213},[144,137523,137524,137526,137528,137530,137532,137534],{"class":146,"line":1251},[144,137525,101],{"class":51313},[144,137527,129479],{"class":1993},[144,137529,155],{"class":154},[144,137531,137295],{"class":203},[144,137533,137281],{"class":154},[144,137535,137300],{"class":213},[28,137537],{"style":126421,"src":137538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[98,137540,137541],{"start":1210},[101,137542,137543],{},"使用场景1",[28,137545],{"style":126421,"src":137546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,137548,137549],{},"不需要再加盒子来整红色那部分了",[135,137551,137553],{"className":126565,"code":137552,"language":126567,"meta":30,"style":30},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[141,137554,137555,137560,137569,137580,137590,137594,137603,137614,137624],{"__ignoreMap":30},[144,137556,137557],{"class":146,"line":147},[144,137558,137559],{"class":213},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[144,137561,137562,137564,137567],{"class":146,"line":66},[144,137563,51624],{"class":51313},[144,137565,137566],{"class":1993},"::before",[144,137568,15603],{"class":154},[144,137570,137571,137574,137576,137578],{"class":146,"line":1210},[144,137572,137573],{"class":203},"  content",[144,137575,51450],{"class":154},[144,137577,7683],{"class":259},[144,137579,1321],{"class":154},[144,137581,137582,137584,137586,137588],{"class":146,"line":1225},[144,137583,128181],{"class":203},[144,137585,51450],{"class":154},[144,137587,60882],{"class":203},[144,137589,1321],{"class":154},[144,137591,137592],{"class":146,"line":1231},[144,137593,1595],{"class":154},[144,137595,137596,137598,137601],{"class":146,"line":1245},[144,137597,51624],{"class":51313},[144,137599,137600],{"class":1993},"::after",[144,137602,15603],{"class":154},[144,137604,137605,137607,137609,137612],{"class":146,"line":1251},[144,137606,137573],{"class":203},[144,137608,51450],{"class":154},[144,137610,137611],{"class":259},"\"→\"",[144,137613,1321],{"class":154},[144,137615,137616,137618,137620,137622],{"class":146,"line":1342},[144,137617,70918],{"class":203},[144,137619,51450],{"class":154},[144,137621,62083],{"class":203},[144,137623,1321],{"class":154},[144,137625,137626],{"class":146,"line":1348},[144,137627,1595],{"class":154},[28,137629],{"style":126421,"src":137630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,137632,137633],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[28,137635],{"style":126421,"src":137636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,137638,137639],{},"但是在引用时需要先转义一下",[14,137641,137642],{},"content='\\e930'",[98,137644,137645],{"start":1225},[101,137646,137647],{},"使用场景2",[14,137649,137650],{},"仿土豆效果",[14,137652,137653],{},"通过使用伪元素选择器可以减少body中盒子的数量",[135,137655,137656],{"className":126565,"code":137552,"language":126567,"meta":30,"style":30},[141,137657,137658,137662,137670,137680,137690,137694,137702,137712,137722],{"__ignoreMap":30},[144,137659,137660],{"class":146,"line":147},[144,137661,137559],{"class":213},[144,137663,137664,137666,137668],{"class":146,"line":66},[144,137665,51624],{"class":51313},[144,137667,137566],{"class":1993},[144,137669,15603],{"class":154},[144,137671,137672,137674,137676,137678],{"class":146,"line":1210},[144,137673,137573],{"class":203},[144,137675,51450],{"class":154},[144,137677,7683],{"class":259},[144,137679,1321],{"class":154},[144,137681,137682,137684,137686,137688],{"class":146,"line":1225},[144,137683,128181],{"class":203},[144,137685,51450],{"class":154},[144,137687,60882],{"class":203},[144,137689,1321],{"class":154},[144,137691,137692],{"class":146,"line":1231},[144,137693,1595],{"class":154},[144,137695,137696,137698,137700],{"class":146,"line":1245},[144,137697,51624],{"class":51313},[144,137699,137600],{"class":1993},[144,137701,15603],{"class":154},[144,137703,137704,137706,137708,137710],{"class":146,"line":1251},[144,137705,137573],{"class":203},[144,137707,51450],{"class":154},[144,137709,137611],{"class":259},[144,137711,1321],{"class":154},[144,137713,137714,137716,137718,137720],{"class":146,"line":1342},[144,137715,70918],{"class":203},[144,137717,51450],{"class":154},[144,137719,62083],{"class":203},[144,137721,1321],{"class":154},[144,137723,137724],{"class":146,"line":1348},[144,137725,1595],{"class":154},[28,137727],{"style":126421,"src":137728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[98,137730,137731],{"start":1231},[101,137732,137733],{},"使用场景3",[14,137735,137736],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[135,137738,137740],{"className":126565,"code":137739,"language":126567,"meta":30,"style":30},".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",[141,137741,137742,137748,137758,137762,137766,137770,137778,137788,137798,137802,137810,137820,137830],{"__ignoreMap":30},[144,137743,137744,137746],{"class":146,"line":147},[144,137745,130413],{"class":1993},[144,137747,15603],{"class":154},[144,137749,137750,137752,137754,137756],{"class":146,"line":66},[144,137751,131045],{"class":203},[144,137753,51450],{"class":154},[144,137755,23768],{"class":203},[144,137757,1321],{"class":154},[144,137759,137760],{"class":146,"line":1210},[144,137761,1595],{"class":154},[144,137763,137764],{"class":146,"line":1225},[144,137765,136026],{"class":154},[144,137767,137768],{"class":146,"line":1231},[144,137769,137559],{"class":213},[144,137771,137772,137774,137776],{"class":146,"line":1245},[144,137773,51624],{"class":51313},[144,137775,137566],{"class":1993},[144,137777,15603],{"class":154},[144,137779,137780,137782,137784,137786],{"class":146,"line":1251},[144,137781,137573],{"class":203},[144,137783,51450],{"class":154},[144,137785,7683],{"class":259},[144,137787,1321],{"class":154},[144,137789,137790,137792,137794,137796],{"class":146,"line":1342},[144,137791,128181],{"class":203},[144,137793,51450],{"class":154},[144,137795,60882],{"class":203},[144,137797,1321],{"class":154},[144,137799,137800],{"class":146,"line":1348},[144,137801,1595],{"class":154},[144,137803,137804,137806,137808],{"class":146,"line":1360},[144,137805,51624],{"class":51313},[144,137807,137600],{"class":1993},[144,137809,15603],{"class":154},[144,137811,137812,137814,137816,137818],{"class":146,"line":1642},[144,137813,137573],{"class":203},[144,137815,51450],{"class":154},[144,137817,137611],{"class":259},[144,137819,1321],{"class":154},[144,137821,137822,137824,137826,137828],{"class":146,"line":1647},[144,137823,70918],{"class":203},[144,137825,51450],{"class":154},[144,137827,62083],{"class":203},[144,137829,1321],{"class":154},[144,137831,137832],{"class":146,"line":1653},[144,137833,1595],{"class":154},[14,137835,137836],{},"div {\nmargin: 0 auto;\n}",[135,137838,137841],{"className":137839,"code":137840,"language":5218},[5216],"\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",[141,137842,137840],{"__ignoreMap":30},[14,137844,137845],{},"如果想让多个元素都发生变化",[14,137847,137848],{},"不能如下操作：",[14,137850,137851],{},"transition: width 2s ease 0.5s;",[14,137853,137854],{},"transition: height 2s ease 0.5s;不对！！！",[14,137856,137857],{},"上方会样式冲突，导致不显示任何过渡效果",[14,137859,137860],{},"使用如下：加逗号隔开",[14,137862,137863],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,137865,137866],{},"transition all 2s ease;",[115,137868,137870],{"id":137869},"_1426-过渡练习","14.2.6 过渡练习",[98,137872,137873],{},[101,137874,137875],{},"进度条",[28,137877],{"style":126421,"src":137878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[135,137880,137882],{"className":126565,"code":137881,"language":126567,"meta":30,"style":30},"div {\n  transition: all 0.3s ease;\n}\n",[141,137883,137884,137890,137908],{"__ignoreMap":30},[144,137885,137886,137888],{"class":146,"line":147},[144,137887,51624],{"class":51313},[144,137889,15603],{"class":154},[144,137891,137892,137895,137897,137899,137902,137904,137906],{"class":146,"line":66},[144,137893,137894],{"class":203},"  transition",[144,137896,51450],{"class":154},[144,137898,28134],{"class":203},[144,137900,137901],{"class":203}," 0.3",[144,137903,850],{"class":150},[144,137905,78693],{"class":203},[144,137907,1321],{"class":154},[144,137909,137910],{"class":146,"line":1210},[144,137911,1595],{"class":154},[98,137913,137914],{"start":66},[101,137915,137916],{},"小米logo",[14,137918,137919],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[135,137921,137923],{"className":126565,"code":137922,"language":126567,"meta":30,"style":30},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[141,137924,137925,137930,137936,137952,137957],{"__ignoreMap":30},[144,137926,137927],{"class":146,"line":147},[144,137928,137929],{"class":213},"\u002F* CSS3 过渡 *\u002F\n",[144,137931,137932,137934],{"class":146,"line":66},[144,137933,51624],{"class":51313},[144,137935,15603],{"class":154},[144,137937,137938,137940,137942,137944,137946,137948,137950],{"class":146,"line":1210},[144,137939,137894],{"class":203},[144,137941,51450],{"class":154},[144,137943,28134],{"class":203},[144,137945,137901],{"class":203},[144,137947,850],{"class":150},[144,137949,78693],{"class":203},[144,137951,1321],{"class":154},[144,137953,137954],{"class":146,"line":1225},[144,137955,137956],{"class":213},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[144,137958,137959],{"class":146,"line":1231},[144,137960,1595],{"class":154},[14,137962,137963],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5157,137965,137966],{},"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":30,"searchDepth":66,"depth":66,"links":137968},[137969,137974],{"id":136299,"depth":66,"text":136300,"children":137970},[137971,137972,137973],{"id":136303,"depth":1210,"text":136304},{"id":136380,"depth":1210,"text":136381},{"id":136711,"depth":1210,"text":136712},{"id":137002,"depth":66,"text":137003,"children":137975},[137976,137977],{"id":137006,"depth":1210,"text":137007},{"id":137869,"depth":1210,"text":137870},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136291,"description":23408},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":137984,"title":137985,"body":137986,"description":23408,"extension":70,"meta":139730,"navigation":72,"path":139731,"seo":139732,"stem":139733,"__hash__":139734},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":137987,"toc":139711},[137988,137991,137995,137998,138004,138010,138014,138016,138019,138022,138025,138028,138031,138034,138037,138041,138045,138048,138051,138054,138058,138061,138064,138069,138072,138075,138078,138082,138085,138094,138097,138100,138104,138107,138110,138115,138122,138136,138144,138151,138156,138159,138162,138165,138172,138176,138182,138188,138191,138194,138199,138205,138207,138215,138220,138223,138229,138231,138236,138241,138244,138246,138251,138254,138259,138264,138298,138302,138306,138309,138313,138316,138402,138405,138442,138445,138481,138485,138490,138503,138557,138559,138587,138589,138617,138623,138637,138639,138683,138685,138729,138732,138739,138750,138752,138779,138781,138807,138814,138830,138832,138926,138928,139022,139029,139032,139037,139043,139117,139120,139122,139158,139160,139196,139199,139206,139225,139228,139231,139233,139258,139260,139284,139287,139290,139320,139324,139327,139390,139392,139458,139460,139524,139527,139559,139561,139587,139589,139615,139618,139649,139651,139677,139679,139705,139708],[10,137989,137985],{"id":137990},"_15-品优购项目上篇-搭建与公共模块",[18,137992,137994],{"id":137993},"_151-项目规划","15.1 项目规划",[28,137996],{"style":126421,"src":137997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,137999,138000,138003],{},[304,138001,138002],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,138005,138006,138009],{},[304,138007,138008],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[18,138011,138013],{"id":138012},"_152-项目介绍","15.2 项目介绍",[14,138015,138002],{},[28,138017],{"style":126421,"src":138018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,138020,138021],{},"主页：",[28,138023],{"style":126421,"src":138024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,138026,138027],{},"列表页：",[28,138029],{"style":126421,"src":138030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138032,138033],{},"注册页：",[28,138035],{"style":126421,"src":138036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[18,138038,138040],{"id":138039},"_153-项目搭建工作","15.3 项目搭建工作",[115,138042,138044],{"id":138043},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[28,138046],{"style":126421,"src":138047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138049,138050],{},"经常更换的图片要放到upload文件夹中",[14,138052,138053],{},"不经常换的放到images文件夹中",[115,138055,138057],{"id":138056},"_1532-创建文件如下","15.3.2 创建文件如下",[28,138059],{"style":126421,"src":138060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[28,138062],{"style":126421,"src":138063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138065,138066],{},[304,138067,138068],{},"初始化样式：",[14,138070,138071],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138073,138074],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138076,138077],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[115,138079,138081],{"id":138080},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138083,138084],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138086,138087,138088,138093],{},"这里最典型的应用就是 ",[304,138089,138090],{},[141,138091,138092],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[28,138095],{"style":126421,"src":138096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138098,138099],{},"通过link方法来引入",[115,138101,138103],{"id":138102},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[28,138105],{"style":126421,"src":138106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138108,138109],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[98,138111,138112],{},[101,138113,138114],{},"制作favicon图标",[14,138116,138117,138118,138121],{},"①把品优购图标切成 ",[141,138119,138120],{},"png"," 图片",[14,138123,138124,138125,138127,138128,138131,138132],{},"②把 ",[141,138126,138120],{}," 图片转换为 ",[141,138129,138130],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[393,138133,138134],{"href":138134,"rel":138135},"http:\u002F\u002Fwww.bitbug.net\u002F",[23897],[98,138137,138138,138141],{"start":66},[101,138139,138140],{},"favicon图标放到网站根目录下",[101,138142,138143],{},"HTML页面引入favicon",[14,138145,138146,138147,138150],{},"在html 页面里面的 ",[141,138148,138149],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138152,138153],{},[141,138154,138155],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138157,138158],{},"复制这行代码或者在生成这个的网站进行复制",[28,138160],{"style":126421,"src":138161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138163,138164],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138166,138167,138168],{},"例如:",[393,138169,138170],{"href":138170,"rel":138171},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23897],[115,138173,138175],{"id":138174},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138177,138178,138181],{},[304,138179,138180],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138183,138184,138187],{},[304,138185,138186],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138189,138190],{},"页面必须有三个标签用来符合 SEO 优化",[28,138192],{"style":126421,"src":138193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[98,138195,138196],{},[101,138197,138198],{},"title网站标题",[14,138200,138201,138204],{},[304,138202,138203],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138206,68803],{},[1162,138208,138209,138212],{},[101,138210,138211],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[101,138213,138214],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[98,138216,138217],{"start":66},[101,138218,138219],{},"description网站描述",[14,138221,138222],{},"简要说明我们网站主要是做什么的",[14,138224,138225,138228],{},[304,138226,138227],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138230,68803],{},[14,138232,138233],{},[141,138234,138235],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[98,138237,138238],{"start":1210},[101,138239,138240],{},"keywords关键词",[14,138242,138243],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138245,68803],{},[14,138247,138248],{},[141,138249,138250],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138252,138253],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138255,138256],{},[304,138257,138258],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[98,138260,138261],{"start":1225},[101,138262,138263],{},"代码总结",[135,138265,138266],{"className":127312,"code":130669,"language":127314,"meta":30,"style":30},[141,138267,138268,138272,138286,138290],{"__ignoreMap":30},[144,138269,138270],{"class":146,"line":147},[144,138271,130676],{"class":213},[144,138273,138274,138276,138278,138280,138282,138284],{"class":146,"line":66},[144,138275,1065],{"class":154},[144,138277,51624],{"class":51313},[144,138279,53499],{"class":1993},[144,138281,200],{"class":154},[144,138283,130689],{"class":259},[144,138285,51320],{"class":154},[144,138287,138288],{"class":146,"line":1210},[144,138289,130696],{"class":154},[144,138291,138292,138294,138296],{"class":146,"line":1225},[144,138293,51798],{"class":154},[144,138295,51624],{"class":51313},[144,138297,51320],{"class":154},[18,138299,138301],{"id":138300},"_154-项目公共部分制作","15.4 项目公共部分制作",[115,138303,138305],{"id":138304},"_1541-常用模块类命名","15.4.1 常用模块类命名",[28,138307],{"style":126421,"src":138308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[115,138310,138312],{"id":138311},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138314,138315],{},"布局思路：",[1162,138317,138318,138321,138324,138346,138379],{},[101,138319,138320],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[101,138322,138323],{},"里面包含版心的盒子",[101,138325,138326,138327],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1162,138328,138329,138337,138343],{},[101,138330,138331,138332,21531,138334,138336],{},"1 号盒子 里面包含一个",[141,138333,1162],{},[141,138335,1162],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[101,138338,138339,138340,138342],{},"里面的内容是水平排列，所以需要给",[141,138341,101],{},"设置浮动",[101,138344,138345],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[101,138347,138348,138349],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1162,138350,138351,138365,138370],{},[101,138352,138353,138354,21531,138356,138358,138359,138361,138362,138364],{},"2 号盒子 里面包含一个",[141,138355,1162],{},[141,138357,1162],{},"包裹",[141,138360,101],{},"，中间的",[141,138363,1076],{},"可以用样式去设置，也可以用字符 |",[101,138366,138367,138368,138342],{},"里面内容水平排列，给",[141,138369,101],{},[101,138371,138372,138373,138375,138376,138378],{},"找到里面所有偶数的 ",[141,138374,101],{}," 设置样式（偶数的 ",[141,138377,101],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[101,138380,138381,138382],{},"需要用到字体图标",[1162,138383,138384,138390,138393,138396,138399],{},[101,138385,138386,138387],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[141,138388,138389],{},"arrow-icon",[101,138391,138392],{},"先要引入字体图片的资源",[101,138394,138395],{},"在样式里面利用 font-face 来进行声明",[101,138397,138398],{},"在伪元素的 content属性设置 图标的编码",[101,138400,138401],{},"给伪元素设置font-family属性",[14,138403,138404],{},"结构实例代码：",[135,138406,138408],{"className":126565,"code":138407,"language":126567,"meta":30,"style":30},"div::before {\n  content: \"\";\n  display: block;\n}\n",[141,138409,138410,138418,138428,138438],{"__ignoreMap":30},[144,138411,138412,138414,138416],{"class":146,"line":147},[144,138413,51624],{"class":51313},[144,138415,137566],{"class":1993},[144,138417,15603],{"class":154},[144,138419,138420,138422,138424,138426],{"class":146,"line":66},[144,138421,137573],{"class":203},[144,138423,51450],{"class":154},[144,138425,7683],{"class":259},[144,138427,1321],{"class":154},[144,138429,138430,138432,138434,138436],{"class":146,"line":1210},[144,138431,128181],{"class":203},[144,138433,51450],{"class":154},[144,138435,60882],{"class":203},[144,138437,1321],{"class":154},[144,138439,138440],{"class":146,"line":1225},[144,138441,1595],{"class":154},[14,138443,138444],{},"样式实例代码：",[135,138446,138447],{"className":126565,"code":138407,"language":126567,"meta":30,"style":30},[141,138448,138449,138457,138467,138477],{"__ignoreMap":30},[144,138450,138451,138453,138455],{"class":146,"line":147},[144,138452,51624],{"class":51313},[144,138454,137566],{"class":1993},[144,138456,15603],{"class":154},[144,138458,138459,138461,138463,138465],{"class":146,"line":66},[144,138460,137573],{"class":203},[144,138462,51450],{"class":154},[144,138464,7683],{"class":259},[144,138466,1321],{"class":154},[144,138468,138469,138471,138473,138475],{"class":146,"line":1210},[144,138470,128181],{"class":203},[144,138472,51450],{"class":154},[144,138474,60882],{"class":203},[144,138476,1321],{"class":154},[144,138478,138479],{"class":146,"line":1225},[144,138480,1595],{"class":154},[115,138482,138484],{"id":138483},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1162,138486,138487],{},[101,138488,138489],{},"header 盒子必须要有高度",[14,138491,138492,138493,138495,138496],{},"1 号盒子是 ",[141,138494,131577],{}," 标志定位，在正常开发过程中， ",[304,138497,138498,138499,138502],{},"logo的布局其实是有讲究的，需要进行 ",[141,138500,138501],{},"logoSEO","的优化 （★★★）",[1162,138504,138505,138513,138521,138548],{},[101,138506,138507,138509,138510,138512],{},[141,138508,131577],{}," 里面首先放一个 ",[141,138511,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[101,138514,138515,138517,138518,138520],{},[141,138516,10],{}," 里面再放一个链接，可以返回首页的，把 ",[141,138519,131577],{}," 的背景图片给链接即可",[101,138522,138523,138524],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1162,138525,138526,138541],{},[101,138527,138528,138529,138532,138533,138536,138537,138540],{},"方法1：",[141,138530,138531],{},"text-indent"," 移到盒子外面（",[141,138534,138535],{},"text-indent: -9999px",") ，然后 ",[141,138538,138539],{},"overflow:hidden"," ，淘宝的做法",[101,138542,138543,138544,138547],{},"方法2：直接给 ",[141,138545,138546],{},"font-size: 0;"," 就看不到文字了，京东的做法",[101,138549,138550,138551,138553,138554,138556],{},"最后给链接一个 ",[141,138552,51420],{}," 属性，这样鼠标放到 ",[141,138555,131577],{}," 上就可以看到提示文字了",[14,138558,138404],{},[135,138560,138561],{"className":127312,"code":131798,"language":127314,"meta":30,"style":30},[141,138562,138563],{"__ignoreMap":30},[144,138564,138565,138567,138569,138571,138573,138575,138577,138579,138581,138583,138585],{"class":146,"line":147},[144,138566,1065],{"class":154},[144,138568,393],{"class":51313},[144,138570,61070],{"class":1993},[144,138572,200],{"class":154},[144,138574,131813],{"class":259},[144,138576,131816],{"class":1993},[144,138578,200],{"class":154},[144,138580,131821],{"class":259},[144,138582,131824],{"class":154},[144,138584,393],{"class":51313},[144,138586,51320],{"class":154},[14,138588,138444],{},[135,138590,138591],{"className":127312,"code":131798,"language":127314,"meta":30,"style":30},[141,138592,138593],{"__ignoreMap":30},[144,138594,138595,138597,138599,138601,138603,138605,138607,138609,138611,138613,138615],{"class":146,"line":147},[144,138596,1065],{"class":154},[144,138598,393],{"class":51313},[144,138600,61070],{"class":1993},[144,138602,200],{"class":154},[144,138604,131813],{"class":259},[144,138606,131816],{"class":1993},[144,138608,200],{"class":154},[144,138610,131821],{"class":259},[144,138612,131824],{"class":154},[144,138614,393],{"class":51313},[144,138616,51320],{"class":154},[14,138618,138619,138620,138622],{},"2 号盒子是 ",[141,138621,131590],{}," 搜索模块定位",[1162,138624,138625,138628,138631,138634],{},[101,138626,138627],{},"search盒子利用定位的方式放在对应的位置",[101,138629,138630],{},"search盒子设置绝对定位，header盒子设置相对定位",[101,138632,138633],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[101,138635,138636],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,138638,138404],{},[135,138640,138641],{"className":126565,"code":131885,"language":126567,"meta":30,"style":30},[141,138642,138643,138665,138669,138679],{"__ignoreMap":30},[144,138644,138645,138647,138649,138651,138653,138655,138657,138659,138661,138663],{"class":146,"line":147},[144,138646,51624],{"class":51313},[144,138648,12466],{"class":154},[144,138650,14],{"class":51313},[144,138652,12466],{"class":154},[144,138654,10],{"class":51313},[144,138656,12466],{"class":154},[144,138658,1162],{"class":51313},[144,138660,12466],{"class":154},[144,138662,101],{"class":51313},[144,138664,15603],{"class":154},[144,138666,138667],{"class":146,"line":66},[144,138668,131914],{"class":213},[144,138670,138671,138673,138675,138677],{"class":146,"line":1210},[144,138672,128181],{"class":203},[144,138674,51450],{"class":154},[144,138676,60882],{"class":203},[144,138678,1321],{"class":154},[144,138680,138681],{"class":146,"line":1225},[144,138682,1595],{"class":154},[14,138684,138444],{},[135,138686,138687],{"className":126565,"code":131885,"language":126567,"meta":30,"style":30},[141,138688,138689,138711,138715,138725],{"__ignoreMap":30},[144,138690,138691,138693,138695,138697,138699,138701,138703,138705,138707,138709],{"class":146,"line":147},[144,138692,51624],{"class":51313},[144,138694,12466],{"class":154},[144,138696,14],{"class":51313},[144,138698,12466],{"class":154},[144,138700,10],{"class":51313},[144,138702,12466],{"class":154},[144,138704,1162],{"class":51313},[144,138706,12466],{"class":154},[144,138708,101],{"class":51313},[144,138710,15603],{"class":154},[144,138712,138713],{"class":146,"line":66},[144,138714,131914],{"class":213},[144,138716,138717,138719,138721,138723],{"class":146,"line":1210},[144,138718,128181],{"class":203},[144,138720,51450],{"class":154},[144,138722,60882],{"class":203},[144,138724,1321],{"class":154},[144,138726,138727],{"class":146,"line":1225},[144,138728,1595],{"class":154},[14,138730,138731],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,138733,138734,138735,138738],{},"3 号盒子是 ",[141,138736,138737],{},"hotwords"," 热词模块定位",[1162,138740,138741,138744,138747],{},[101,138742,138743],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[101,138745,138746],{},"给里面所有的a标签设置 左右10px的外边距",[101,138748,138749],{},"给第一个a标签设置文字变红色（#c81623）",[14,138751,138404],{},[135,138753,138755],{"className":126565,"code":138754,"language":126567,"meta":30,"style":30},"div {\n  margin: 0 auto;\n}\n",[141,138756,138757,138763,138775],{"__ignoreMap":30},[144,138758,138759,138761],{"class":146,"line":147},[144,138760,51624],{"class":51313},[144,138762,15603],{"class":154},[144,138764,138765,138767,138769,138771,138773],{"class":146,"line":66},[144,138766,70483],{"class":203},[144,138768,51450],{"class":154},[144,138770,346],{"class":203},[144,138772,51569],{"class":203},[144,138774,1321],{"class":154},[144,138776,138777],{"class":146,"line":1210},[144,138778,1595],{"class":154},[14,138780,138444],{},[135,138782,138783],{"className":126565,"code":138754,"language":126567,"meta":30,"style":30},[141,138784,138785,138791,138803],{"__ignoreMap":30},[144,138786,138787,138789],{"class":146,"line":147},[144,138788,51624],{"class":51313},[144,138790,15603],{"class":154},[144,138792,138793,138795,138797,138799,138801],{"class":146,"line":66},[144,138794,70483],{"class":203},[144,138796,51450],{"class":154},[144,138798,346],{"class":203},[144,138800,51569],{"class":203},[144,138802,1321],{"class":154},[144,138804,138805],{"class":146,"line":1210},[144,138806,1595],{"class":154},[14,138808,138809,138810,138813],{},"4 号盒子是 ",[141,138811,138812],{},"shopcar"," 购物车模块",[1162,138815,138816,138821,138824,138827],{},[101,138817,123348,138818,138820],{},[141,138819,138812],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[101,138822,138823],{},"count 统计部分用绝对定位做",[101,138825,138826],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[101,138828,138829],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,138831,138404],{},[135,138833,138834],{"className":126565,"code":131997,"language":126567,"meta":30,"style":30},[141,138835,138836,138840,138854,138858,138872,138876,138890,138894,138908,138912],{"__ignoreMap":30},[144,138837,138838],{"class":146,"line":147},[144,138839,132004],{"class":213},[144,138841,138842,138844,138846,138848,138850,138852],{"class":146,"line":66},[144,138843,132009],{"class":1993},[144,138845,79820],{"class":154},[144,138847,128925],{"class":203},[144,138849,51450],{"class":154},[144,138851,132018],{"class":203},[144,138853,129495],{"class":154},[144,138855,138856],{"class":146,"line":1210},[144,138857,132025],{"class":213},[144,138859,138860,138862,138864,138866,138868,138870],{"class":146,"line":1225},[144,138861,132030],{"class":1993},[144,138863,79820],{"class":154},[144,138865,128925],{"class":203},[144,138867,51450],{"class":154},[144,138869,54777],{"class":203},[144,138871,129495],{"class":154},[144,138873,138874],{"class":146,"line":1231},[144,138875,132045],{"class":213},[144,138877,138878,138880,138882,138884,138886,138888],{"class":146,"line":1245},[144,138879,132050],{"class":1993},[144,138881,79820],{"class":154},[144,138883,128925],{"class":203},[144,138885,51450],{"class":154},[144,138887,54844],{"class":203},[144,138889,129495],{"class":154},[144,138891,138892],{"class":146,"line":1251},[144,138893,132065],{"class":213},[144,138895,138896,138898,138900,138902,138904,138906],{"class":146,"line":1342},[144,138897,132070],{"class":1993},[144,138899,79820],{"class":154},[144,138901,128925],{"class":203},[144,138903,51450],{"class":154},[144,138905,86246],{"class":203},[144,138907,129495],{"class":154},[144,138909,138910],{"class":146,"line":1348},[144,138911,132085],{"class":213},[144,138913,138914,138916,138918,138920,138922,138924],{"class":146,"line":1360},[144,138915,132090],{"class":1993},[144,138917,79820],{"class":154},[144,138919,128925],{"class":203},[144,138921,51450],{"class":154},[144,138923,132099],{"class":203},[144,138925,129495],{"class":154},[14,138927,138444],{},[135,138929,138930],{"className":126565,"code":131997,"language":126567,"meta":30,"style":30},[141,138931,138932,138936,138950,138954,138968,138972,138986,138990,139004,139008],{"__ignoreMap":30},[144,138933,138934],{"class":146,"line":147},[144,138935,132004],{"class":213},[144,138937,138938,138940,138942,138944,138946,138948],{"class":146,"line":66},[144,138939,132009],{"class":1993},[144,138941,79820],{"class":154},[144,138943,128925],{"class":203},[144,138945,51450],{"class":154},[144,138947,132018],{"class":203},[144,138949,129495],{"class":154},[144,138951,138952],{"class":146,"line":1210},[144,138953,132025],{"class":213},[144,138955,138956,138958,138960,138962,138964,138966],{"class":146,"line":1225},[144,138957,132030],{"class":1993},[144,138959,79820],{"class":154},[144,138961,128925],{"class":203},[144,138963,51450],{"class":154},[144,138965,54777],{"class":203},[144,138967,129495],{"class":154},[144,138969,138970],{"class":146,"line":1231},[144,138971,132045],{"class":213},[144,138973,138974,138976,138978,138980,138982,138984],{"class":146,"line":1245},[144,138975,132050],{"class":1993},[144,138977,79820],{"class":154},[144,138979,128925],{"class":203},[144,138981,51450],{"class":154},[144,138983,54844],{"class":203},[144,138985,129495],{"class":154},[144,138987,138988],{"class":146,"line":1251},[144,138989,132065],{"class":213},[144,138991,138992,138994,138996,138998,139000,139002],{"class":146,"line":1342},[144,138993,132070],{"class":1993},[144,138995,79820],{"class":154},[144,138997,128925],{"class":203},[144,138999,51450],{"class":154},[144,139001,86246],{"class":203},[144,139003,129495],{"class":154},[144,139005,139006],{"class":146,"line":1348},[144,139007,132085],{"class":213},[144,139009,139010,139012,139014,139016,139018,139020],{"class":146,"line":1360},[144,139011,132090],{"class":1993},[144,139013,79820],{"class":154},[144,139015,128925],{"class":203},[144,139017,51450],{"class":154},[144,139019,132099],{"class":203},[144,139021,129495],{"class":154},[115,139023,139025,139026,139028],{"id":139024},"_1544-nav导航模块制作","15.4.4 ",[141,139027,53726],{},"导航模块制作",[28,139030],{"style":126421,"src":139031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139033,139034,139036],{},[141,139035,53726],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139038,139039,139040],{},"1 号盒子左侧浮动，",[141,139041,139042],{},"dropdown",[1162,139044,139045,139055,139063,139069,139077,139087,139095,139106],{},[101,139046,139047,139048,101031,139051,139054],{},"1号盒子有讲究，根据相关性 里面包含 ",[141,139049,139050],{},".dt",[141,139052,139053],{},".dd"," 两个盒子",[101,139056,139057,139059,139060,139062],{},[141,139058,139050],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[141,139061,139053],{}," 挤到下面去了",[101,139064,139065,139066,139068],{},"给 ",[141,139067,139053],{}," 盒子设置宽度 和 高度，以及背景颜色",[101,139070,139065,139071,139073,139074,120250],{},[141,139072,139053],{}," 盒子里面定义 无序列表 （",[141,139075,139076],{},"ul > li > a",[101,139078,139079,139080,139082,139083,139086],{},"每个 ",[141,139081,101],{}," 都有一个高度（",[141,139084,139085],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[101,139088,139065,139089,139091,139092,120250],{},[141,139090,101],{}," 里面的a设置文字大小（",[141,139093,139094],{},"14px",[101,139096,139065,139097,139099,139100,139102,139103,139105],{},[141,139098,101],{}," 设置 ",[141,139101,127726],{},"，当鼠标移入的时候，让",[141,139104,101],{},"的背景变成白色，让里面的文字变成红色",[101,139107,139108,139110,139111,139113,139114,139116],{},[141,139109,101],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[141,139112,101],{},"的右侧，那么给",[141,139115,101],{},"设置相对定位",[14,139118,139119],{},"一定要注意相关性",[14,139121,138404],{},[135,139123,139124],{"className":126565,"code":138407,"language":126567,"meta":30,"style":30},[141,139125,139126,139134,139144,139154],{"__ignoreMap":30},[144,139127,139128,139130,139132],{"class":146,"line":147},[144,139129,51624],{"class":51313},[144,139131,137566],{"class":1993},[144,139133,15603],{"class":154},[144,139135,139136,139138,139140,139142],{"class":146,"line":66},[144,139137,137573],{"class":203},[144,139139,51450],{"class":154},[144,139141,7683],{"class":259},[144,139143,1321],{"class":154},[144,139145,139146,139148,139150,139152],{"class":146,"line":1210},[144,139147,128181],{"class":203},[144,139149,51450],{"class":154},[144,139151,60882],{"class":203},[144,139153,1321],{"class":154},[144,139155,139156],{"class":146,"line":1225},[144,139157,1595],{"class":154},[14,139159,138444],{},[135,139161,139162],{"className":126565,"code":138407,"language":126567,"meta":30,"style":30},[141,139163,139164,139172,139182,139192],{"__ignoreMap":30},[144,139165,139166,139168,139170],{"class":146,"line":147},[144,139167,51624],{"class":51313},[144,139169,137566],{"class":1993},[144,139171,15603],{"class":154},[144,139173,139174,139176,139178,139180],{"class":146,"line":66},[144,139175,137573],{"class":203},[144,139177,51450],{"class":154},[144,139179,7683],{"class":259},[144,139181,1321],{"class":154},[144,139183,139184,139186,139188,139190],{"class":146,"line":1210},[144,139185,128181],{"class":203},[144,139187,51450],{"class":154},[144,139189,60882],{"class":203},[144,139191,1321],{"class":154},[144,139193,139194],{"class":146,"line":1225},[144,139195,1595],{"class":154},[14,139197,139198],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139200,139201,139202,139205],{},"2 号盒子左侧浮动，",[141,139203,139204],{},"navitems"," 导航栏组",[1162,139207,139208,139213,139222],{},[101,139209,139210,139211],{},"里面结构是 ",[141,139212,139076],{},[101,139214,139215,139216,139218,139219,139221],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[141,139217,393],{},"左右的",[141,139220,30896],{},"把两侧撑开",[101,139223,139224],{},"让文字垂直居中（行高等于高度）",[28,139226],{"style":126421,"src":139227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139229,139230],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139232,138404],{},[135,139234,139236],{"className":126565,"code":139235,"language":126567,"meta":30,"style":30},".box {\n  float: left;\n}\n",[141,139237,139238,139244,139254],{"__ignoreMap":30},[144,139239,139240,139242],{"class":146,"line":147},[144,139241,130413],{"class":1993},[144,139243,15603],{"class":154},[144,139245,139246,139248,139250,139252],{"class":146,"line":66},[144,139247,131045],{"class":203},[144,139249,51450],{"class":154},[144,139251,23768],{"class":203},[144,139253,1321],{"class":154},[144,139255,139256],{"class":146,"line":1210},[144,139257,1595],{"class":154},[14,139259,138444],{},[135,139261,139262],{"className":126565,"code":139235,"language":126567,"meta":30,"style":30},[141,139263,139264,139270,139280],{"__ignoreMap":30},[144,139265,139266,139268],{"class":146,"line":147},[144,139267,130413],{"class":1993},[144,139269,15603],{"class":154},[144,139271,139272,139274,139276,139278],{"class":146,"line":66},[144,139273,131045],{"class":203},[144,139275,51450],{"class":154},[144,139277,23768],{"class":203},[144,139279,1321],{"class":154},[144,139281,139282],{"class":146,"line":1210},[144,139283,1595],{"class":154},[14,139285,139286],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[28,139288],{"style":126421,"src":139289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[135,139291,139292],{"className":126565,"code":130722,"language":126567,"meta":30,"style":30},[141,139293,139294,139300,139316],{"__ignoreMap":30},[144,139295,139296,139298],{"class":146,"line":147},[144,139297,51624],{"class":51313},[144,139299,15603],{"class":154},[144,139301,139302,139304,139306,139308,139310,139312,139314],{"class":146,"line":66},[144,139303,70909],{"class":203},[144,139305,51450],{"class":154},[144,139307,372],{"class":203},[144,139309,51505],{"class":150},[144,139311,51534],{"class":203},[144,139313,129957],{"class":203},[144,139315,1321],{"class":154},[144,139317,139318],{"class":146,"line":1210},[144,139319,1595],{"class":154},[115,139321,139323],{"id":139322},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[28,139325],{"style":126421,"src":139326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1162,139328,139329,139334,139339],{},[101,139330,139331,139333],{},[141,139332,131768],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[101,139335,139336,139338],{},[141,139337,131768],{}," 里面有一个大的版心",[101,139340,139341,139342,139345,139346],{},"版心里面包含 1 号盒子，",[141,139343,139344],{},"mod_service"," 是服务模块，mod 是模块的意思",[1162,139347,139348,139353,139366,139382,139387],{},[101,139349,139065,139350,139352],{},[141,139351,139344],{}," 设置高度（80px）和下边框",[101,139354,139355,139356,139359,139360,139362,139363,139365],{},"在里面定义 ",[141,139357,139358],{},"ul > li"," ,每个",[141,139361,101],{}," 宽度是300px 高度是 50px，给每个",[141,139364,101],{},"设置35px的左内边距",[101,139367,139368,139369,139371,139372,139374,139375,139377,139378,18441,139380,120250],{},"在每个",[141,139370,101],{},"里面，放一个 ",[141,139373,22941],{},"（里面放图标），一个",[141,139376,51624],{},"（里面放",[141,139379,51624],{},[141,139381,14],{},[101,139383,139065,139384,139386],{},[141,139385,22941],{},"设置浮动，让h5与这个div左右排列",[101,139388,139389],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,139391,138404],{},[135,139393,139395],{"className":126565,"code":139394,"language":126567,"meta":30,"style":30},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[141,139396,139397,139403,139415,139427,139454],{"__ignoreMap":30},[144,139398,139399,139401],{"class":146,"line":147},[144,139400,134322],{"class":1993},[144,139402,15603],{"class":154},[144,139404,139405,139407,139409,139411,139413],{"class":146,"line":66},[144,139406,70581],{"class":203},[144,139408,51450],{"class":154},[144,139410,855],{"class":203},[144,139412,51505],{"class":150},[144,139414,1321],{"class":154},[144,139416,139417,139419,139421,139423,139425],{"class":146,"line":1210},[144,139418,70801],{"class":203},[144,139420,51450],{"class":154},[144,139422,855],{"class":203},[144,139424,51505],{"class":150},[144,139426,1321],{"class":154},[144,139428,139429,139431,139433,139435,139437,139439,139441,139443,139446,139448,139450,139452],{"class":146,"line":1225},[144,139430,70624],{"class":203},[144,139432,51450],{"class":154},[144,139434,61739],{"class":203},[144,139436,155],{"class":154},[144,139438,134361],{"class":5247},[144,139440,13745],{"class":154},[144,139442,61749],{"class":203},[144,139444,139445],{"class":203}," -10",[144,139447,51505],{"class":150},[144,139449,134380],{"class":203},[144,139451,51505],{"class":150},[144,139453,1321],{"class":154},[144,139455,139456],{"class":146,"line":1231},[144,139457,1595],{"class":154},[14,139459,138444],{},[135,139461,139462],{"className":126565,"code":139394,"language":126567,"meta":30,"style":30},[141,139463,139464,139470,139482,139494,139520],{"__ignoreMap":30},[144,139465,139466,139468],{"class":146,"line":147},[144,139467,134322],{"class":1993},[144,139469,15603],{"class":154},[144,139471,139472,139474,139476,139478,139480],{"class":146,"line":66},[144,139473,70581],{"class":203},[144,139475,51450],{"class":154},[144,139477,855],{"class":203},[144,139479,51505],{"class":150},[144,139481,1321],{"class":154},[144,139483,139484,139486,139488,139490,139492],{"class":146,"line":1210},[144,139485,70801],{"class":203},[144,139487,51450],{"class":154},[144,139489,855],{"class":203},[144,139491,51505],{"class":150},[144,139493,1321],{"class":154},[144,139495,139496,139498,139500,139502,139504,139506,139508,139510,139512,139514,139516,139518],{"class":146,"line":1225},[144,139497,70624],{"class":203},[144,139499,51450],{"class":154},[144,139501,61739],{"class":203},[144,139503,155],{"class":154},[144,139505,134361],{"class":5247},[144,139507,13745],{"class":154},[144,139509,61749],{"class":203},[144,139511,139445],{"class":203},[144,139513,51505],{"class":150},[144,139515,134380],{"class":203},[144,139517,51505],{"class":150},[144,139519,1321],{"class":154},[144,139521,139522],{"class":146,"line":1231},[144,139523,1595],{"class":154},[14,139525,139526],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1162,139528,139529,139532,139538,139544,139556],{},[101,139530,139531],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[101,139533,139534,139535,120250],{},"里面的布局利用 自定义列表来实现（",[141,139536,139537],{},"dl > dt + dd",[101,139539,139065,139540,139543],{},[141,139541,139542],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[101,139545,139065,139546,139549,139550,18441,139552,139555],{},[141,139547,139548],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[141,139551,139548],{},[141,139553,139554],{},"dd","之间有些距离",[101,139557,139558],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,139560,138404],{},[135,139562,139563],{"className":126565,"code":138754,"language":126567,"meta":30,"style":30},[141,139564,139565,139571,139583],{"__ignoreMap":30},[144,139566,139567,139569],{"class":146,"line":147},[144,139568,51624],{"class":51313},[144,139570,15603],{"class":154},[144,139572,139573,139575,139577,139579,139581],{"class":146,"line":66},[144,139574,70483],{"class":203},[144,139576,51450],{"class":154},[144,139578,346],{"class":203},[144,139580,51569],{"class":203},[144,139582,1321],{"class":154},[144,139584,139585],{"class":146,"line":1210},[144,139586,1595],{"class":154},[14,139588,138444],{},[135,139590,139591],{"className":126565,"code":138754,"language":126567,"meta":30,"style":30},[141,139592,139593,139599,139611],{"__ignoreMap":30},[144,139594,139595,139597],{"class":146,"line":147},[144,139596,51624],{"class":51313},[144,139598,15603],{"class":154},[144,139600,139601,139603,139605,139607,139609],{"class":146,"line":66},[144,139602,70483],{"class":203},[144,139604,51450],{"class":154},[144,139606,346],{"class":203},[144,139608,51569],{"class":203},[144,139610,1321],{"class":154},[144,139612,139613],{"class":146,"line":1210},[144,139614,1595],{"class":154},[14,139616,139617],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1162,139619,139620,139629,139632,139643],{},[101,139621,139622,139623,139625,139626,139628],{},"分为上下两块，上面是 ",[141,139624,131785],{}," 友情链接，下面是 ",[141,139627,131778],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[101,139630,139631],{},"把内容分别复制到相应模块中",[101,139633,139065,139634,139636,139637,139639,139640,139642],{},[141,139635,131785],{}," 设置 15px 的下外边距，给",[141,139638,131785],{}," 里面 的 ",[141,139641,393],{}," 标签设置 左右 3px 的外边距",[101,139644,139645,139646,139648],{},"给",[141,139647,131778],{}," 设置 20px 的行高",[14,139650,138404],{},[135,139652,139653],{"className":126565,"code":138754,"language":126567,"meta":30,"style":30},[141,139654,139655,139661,139673],{"__ignoreMap":30},[144,139656,139657,139659],{"class":146,"line":147},[144,139658,51624],{"class":51313},[144,139660,15603],{"class":154},[144,139662,139663,139665,139667,139669,139671],{"class":146,"line":66},[144,139664,70483],{"class":203},[144,139666,51450],{"class":154},[144,139668,346],{"class":203},[144,139670,51569],{"class":203},[144,139672,1321],{"class":154},[144,139674,139675],{"class":146,"line":1210},[144,139676,1595],{"class":154},[14,139678,138444],{},[135,139680,139681],{"className":126565,"code":138754,"language":126567,"meta":30,"style":30},[141,139682,139683,139689,139701],{"__ignoreMap":30},[144,139684,139685,139687],{"class":146,"line":147},[144,139686,51624],{"class":51313},[144,139688,15603],{"class":154},[144,139690,139691,139693,139695,139697,139699],{"class":146,"line":66},[144,139692,70483],{"class":203},[144,139694,51450],{"class":154},[144,139696,346],{"class":203},[144,139698,51569],{"class":203},[144,139700,1321],{"class":154},[144,139702,139703],{"class":146,"line":1210},[144,139704,1595],{"class":154},[14,139706,139707],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5157,139709,139710],{},"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":30,"searchDepth":66,"depth":66,"links":139712},[139713,139714,139715,139722],{"id":137993,"depth":66,"text":137994},{"id":138012,"depth":66,"text":138013},{"id":138039,"depth":66,"text":138040,"children":139716},[139717,139718,139719,139720,139721],{"id":138043,"depth":1210,"text":138044},{"id":138056,"depth":1210,"text":138057},{"id":138080,"depth":1210,"text":138081},{"id":138102,"depth":1210,"text":138103},{"id":138174,"depth":1210,"text":138175},{"id":138300,"depth":66,"text":138301,"children":139723},[139724,139725,139726,139727,139729],{"id":138304,"depth":1210,"text":138305},{"id":138311,"depth":1210,"text":138312},{"id":138483,"depth":1210,"text":138484},{"id":139024,"depth":1210,"text":139728},"15.4.4 nav导航模块制作",{"id":139322,"depth":1210,"text":139323},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":137985,"description":23408},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139736,"title":139737,"body":139738,"description":23408,"extension":70,"meta":142140,"navigation":72,"path":142141,"seo":142142,"stem":142143,"__hash__":142144},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139739,"toc":142117},[139740,139743,139747,139751,139763,139766,139769,139772,139783,139785,139809,139811,139835,139840,139843,139845,139881,139883,139919,139922,139927,139930,139933,139936,139966,139973,139976,139986,139988,140022,140025,140059,140065,140082,140084,140120,140122,140158,140163,140188,140190,140216,140218,140242,140249,140252,140316,140318,140360,140362,140402,140409,140414,140416,140446,140448,140478,140482,140485,140492,140504,140506,140532,140534,140558,140561,140563,140587,140593,140603,140605,140635,140637,140667,140674,140715,140717,140753,140755,140791,140795,140798,140801,140804,140810,140815,140818,140841,140844,140868,140871,140895,140900,140903,140906,140909,140912,140915,140989,140991,141021,141023,141053,141056,141059,141091,141095,141099,141113,141122,141125,141130,141132,141226,141228,141322,141345,141347,141371,141373,141397,141404,141407,141417,141419,141443,141448,141456,141458,141488,141493,141533,141535,141561,141563,141589,141593,141596,141601,141604,141608,141616,141623,141631,141633,141663,141665,141695,141703,141706,141709,141711,141741,141743,141773,141776,141781,141783,141807,141809,141833,141836,141921,141923,141947,141949,141973,141977,141979,142003,142005,142039,142043,142057,142060,142065,142068,142073,142076,142106,142114],[10,139741,139737],{"id":139742},"_16-品优购项目下篇-主体与页面开发",[18,139744,139746],{"id":139745},"_161-项目主体模块制作","16.1 项目主体模块制作",[115,139748,139750],{"id":139749},"_1611-首页制作","16.1.1 首页制作",[14,139752,139753,139755,139756,139758,139759,139762],{},[304,139754,102071],{}," 主体模块是 ",[304,139757,74071],{}," 里面专有的，注意需要新的样式文件 ",[304,139760,139761],{},"index.css，"," 就不要写在common.css中了",[28,139764],{"style":126421,"src":139765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[28,139767],{"style":126421,"src":139768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,139770,139771],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1162,139773,139774,139777,139780],{},[101,139775,139776],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[101,139778,139779],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[101,139781,139782],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,139784,138404],{},[135,139786,139787],{"className":126565,"code":139235,"language":126567,"meta":30,"style":30},[141,139788,139789,139795,139805],{"__ignoreMap":30},[144,139790,139791,139793],{"class":146,"line":147},[144,139792,130413],{"class":1993},[144,139794,15603],{"class":154},[144,139796,139797,139799,139801,139803],{"class":146,"line":66},[144,139798,131045],{"class":203},[144,139800,51450],{"class":154},[144,139802,23768],{"class":203},[144,139804,1321],{"class":154},[144,139806,139807],{"class":146,"line":1210},[144,139808,1595],{"class":154},[14,139810,138444],{},[135,139812,139813],{"className":126565,"code":139235,"language":126567,"meta":30,"style":30},[141,139814,139815,139821,139831],{"__ignoreMap":30},[144,139816,139817,139819],{"class":146,"line":147},[144,139818,130413],{"class":1993},[144,139820,15603],{"class":154},[144,139822,139823,139825,139827,139829],{"class":146,"line":66},[144,139824,131045],{"class":203},[144,139826,51450],{"class":154},[144,139828,23768],{"class":203},[144,139830,1321],{"class":154},[144,139832,139833],{"class":146,"line":1210},[144,139834,1595],{"class":154},[98,139836,139837],{},[101,139838,139839],{},"左侧focus模块制作",[28,139841],{"style":126421,"src":139842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,139844,138404],{},[135,139846,139847],{"className":126565,"code":127888,"language":126567,"meta":30,"style":30},[141,139848,139849,139857,139867,139877],{"__ignoreMap":30},[144,139850,139851,139853,139855],{"class":146,"line":147},[144,139852,53834],{"class":51313},[144,139854,61913],{"class":1993},[144,139856,15603],{"class":154},[144,139858,139859,139861,139863,139865],{"class":146,"line":66},[144,139860,127903],{"class":203},[144,139862,51450],{"class":154},[144,139864,54902],{"class":203},[144,139866,1321],{"class":154},[144,139868,139869,139871,139873,139875],{"class":146,"line":1210},[144,139870,70811],{"class":203},[144,139872,51450],{"class":154},[144,139874,54750],{"class":203},[144,139876,1321],{"class":154},[144,139878,139879],{"class":146,"line":1225},[144,139880,1595],{"class":154},[14,139882,138444],{},[135,139884,139885],{"className":126565,"code":127888,"language":126567,"meta":30,"style":30},[141,139886,139887,139895,139905,139915],{"__ignoreMap":30},[144,139888,139889,139891,139893],{"class":146,"line":147},[144,139890,53834],{"class":51313},[144,139892,61913],{"class":1993},[144,139894,15603],{"class":154},[144,139896,139897,139899,139901,139903],{"class":146,"line":66},[144,139898,127903],{"class":203},[144,139900,51450],{"class":154},[144,139902,54902],{"class":203},[144,139904,1321],{"class":154},[144,139906,139907,139909,139911,139913],{"class":146,"line":1210},[144,139908,70811],{"class":203},[144,139910,51450],{"class":154},[144,139912,54750],{"class":203},[144,139914,1321],{"class":154},[144,139916,139917],{"class":146,"line":1225},[144,139918,1595],{"class":154},[14,139920,139921],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[98,139923,139924],{"start":66},[101,139925,139926],{},"右侧newsflash模块制作",[28,139928],{"style":126421,"src":139929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,139931,139932],{},"右侧的模块 分为上中下三个盒子",[14,139934,139935],{},"结构代码：",[135,139937,139938],{"className":127312,"code":134067,"language":127314,"meta":30,"style":30},[141,139939,139940],{"__ignoreMap":30},[144,139941,139942,139944,139946,139948,139950,139952,139954,139956,139958,139960,139962,139964],{"class":146,"line":147},[144,139943,1065],{"class":154},[144,139945,28],{"class":51313},[144,139947,55252],{"class":1993},[144,139949,200],{"class":154},[144,139951,134082],{"class":259},[144,139953,55260],{"class":1993},[144,139955,200],{"class":154},[144,139957,134089],{"class":259},[144,139959,134092],{"class":1993},[144,139961,200],{"class":154},[144,139963,134097],{"class":259},[144,139965,51320],{"class":154},[14,139967,139968,139969,139972],{},"1 号盒子为 ",[141,139970,139971],{},"news"," 新闻模块 高度为 165px",[28,139974],{"style":126421,"src":139975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,139977,139978,139979,139982,139983],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[141,139980,139981],{},"news-hd","，下面是 ",[141,139984,139985],{},"news-bd",[14,139987,139935],{},[135,139989,139990],{"className":127312,"code":130669,"language":127314,"meta":30,"style":30},[141,139991,139992,139996,140010,140014],{"__ignoreMap":30},[144,139993,139994],{"class":146,"line":147},[144,139995,130676],{"class":213},[144,139997,139998,140000,140002,140004,140006,140008],{"class":146,"line":66},[144,139999,1065],{"class":154},[144,140001,51624],{"class":51313},[144,140003,53499],{"class":1993},[144,140005,200],{"class":154},[144,140007,130689],{"class":259},[144,140009,51320],{"class":154},[144,140011,140012],{"class":146,"line":1210},[144,140013,130696],{"class":154},[144,140015,140016,140018,140020],{"class":146,"line":1225},[144,140017,51798],{"class":154},[144,140019,51624],{"class":51313},[144,140021,51320],{"class":154},[14,140023,140024],{},"样式代码：",[135,140026,140027],{"className":127312,"code":130669,"language":127314,"meta":30,"style":30},[141,140028,140029,140033,140047,140051],{"__ignoreMap":30},[144,140030,140031],{"class":146,"line":147},[144,140032,130676],{"class":213},[144,140034,140035,140037,140039,140041,140043,140045],{"class":146,"line":66},[144,140036,1065],{"class":154},[144,140038,51624],{"class":51313},[144,140040,53499],{"class":1993},[144,140042,200],{"class":154},[144,140044,130689],{"class":259},[144,140046,51320],{"class":154},[144,140048,140049],{"class":146,"line":1210},[144,140050,130696],{"class":154},[144,140052,140053,140055,140057],{"class":146,"line":1225},[144,140054,51798],{"class":154},[144,140056,51624],{"class":51313},[144,140058,51320],{"class":154},[14,140060,140061,140062,140064],{},"上面是",[141,140063,139981],{},"，设置高度是 33px，设置下边框",[1162,140066,140067,140073],{},[101,140068,140069,140070,140072],{},"里面放一个",[141,140071,22941],{}," 标题",[101,140074,140075,140076,140078,140079,140081],{},"放一个a",[141,140077,102706],{},"，内容是 更多，然后让 ",[141,140080,393],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140083,139935],{},[135,140085,140086],{"className":126565,"code":138407,"language":126567,"meta":30,"style":30},[141,140087,140088,140096,140106,140116],{"__ignoreMap":30},[144,140089,140090,140092,140094],{"class":146,"line":147},[144,140091,51624],{"class":51313},[144,140093,137566],{"class":1993},[144,140095,15603],{"class":154},[144,140097,140098,140100,140102,140104],{"class":146,"line":66},[144,140099,137573],{"class":203},[144,140101,51450],{"class":154},[144,140103,7683],{"class":259},[144,140105,1321],{"class":154},[144,140107,140108,140110,140112,140114],{"class":146,"line":1210},[144,140109,128181],{"class":203},[144,140111,51450],{"class":154},[144,140113,60882],{"class":203},[144,140115,1321],{"class":154},[144,140117,140118],{"class":146,"line":1225},[144,140119,1595],{"class":154},[14,140121,140024],{},[135,140123,140124],{"className":126565,"code":138407,"language":126567,"meta":30,"style":30},[141,140125,140126,140134,140144,140154],{"__ignoreMap":30},[144,140127,140128,140130,140132],{"class":146,"line":147},[144,140129,51624],{"class":51313},[144,140131,137566],{"class":1993},[144,140133,15603],{"class":154},[144,140135,140136,140138,140140,140142],{"class":146,"line":66},[144,140137,137573],{"class":203},[144,140139,51450],{"class":154},[144,140141,7683],{"class":259},[144,140143,1321],{"class":154},[144,140145,140146,140148,140150,140152],{"class":146,"line":1210},[144,140147,128181],{"class":203},[144,140149,51450],{"class":154},[144,140151,60882],{"class":203},[144,140153,1321],{"class":154},[144,140155,140156],{"class":146,"line":1225},[144,140157,1595],{"class":154},[14,140159,140160,140161],{},"下面是",[141,140162,139985],{},[1162,140164,140165,140173],{},[101,140166,140167,140168,101031,140170,140172],{},"里面包含 ",[141,140169,1162],{},[141,140171,101],{}," 还有链接",[101,140174,139645,140175,140177,140178,140180,140181,140184,140185],{},[141,140176,101],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[141,140179,131231],{}," 2.设置 ",[141,140182,140183],{},"white-space: nowrap;"," 3. 设置 ",[141,140186,140187],{},"text-overflow: ellipsis;",[14,140189,139935],{},[135,140191,140193],{"className":126565,"code":140192,"language":126567,"meta":30,"style":30},"div {\n  overflow: hidden;\n}\n",[141,140194,140195,140201,140212],{"__ignoreMap":30},[144,140196,140197,140199],{"class":146,"line":147},[144,140198,51624],{"class":51313},[144,140200,15603],{"class":154},[144,140202,140203,140206,140208,140210],{"class":146,"line":66},[144,140204,140205],{"class":203},"  overflow",[144,140207,51450],{"class":154},[144,140209,61727],{"class":203},[144,140211,1321],{"class":154},[144,140213,140214],{"class":146,"line":1210},[144,140215,1595],{"class":154},[14,140217,140024],{},[135,140219,140220],{"className":126565,"code":140192,"language":126567,"meta":30,"style":30},[141,140221,140222,140228,140238],{"__ignoreMap":30},[144,140223,140224,140226],{"class":146,"line":147},[144,140225,51624],{"class":51313},[144,140227,15603],{"class":154},[144,140229,140230,140232,140234,140236],{"class":146,"line":66},[144,140231,140205],{"class":203},[144,140233,51450],{"class":154},[144,140235,61727],{"class":203},[144,140237,1321],{"class":154},[144,140239,140240],{"class":146,"line":1210},[144,140241,1595],{"class":154},[14,140243,140244,140245,140248],{},"2 号盒子为 ",[141,140246,140247],{},"lifeservice"," 生活服务模块 高度为 209px",[28,140250],{"style":126421,"src":140251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1162,140253,140254,140257,140267,140291,140302],{},[101,140255,140256],{},"设置边框（左右下边框）",[101,140258,140259,140260,140263,140264,140266],{},"里面的内容 是 ",[141,140261,140262],{},"ul > 12*li","，给",[141,140265,101],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[101,140268,140269,140270],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1162,140271,140272,140277,140286],{},[101,140273,140274,140276],{},[141,140275,140247],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[101,140278,140279,140280,140282,140283,140285],{},"可以让 ",[141,140281,140247],{}," 里面的 ",[141,140284,1162],{}," 宽度为 252，就可以装的下 4 个 小 li",[101,140287,140288,140290],{},[141,140289,140247],{}," 盒子 overflow 隐藏多余的部分就可以了",[101,140292,116480,140293,140295,140296,140298,140299,140301],{},[141,140294,101],{}," 里面放一个 ",[141,140297,596],{},"（里面放图标），下面的文本用 ",[141,140300,14],{}," 标签包裹",[101,140303,139065,140304,140306,140307,140309,140310,139099,140312,140315],{},[141,140305,596],{}," 设置 24px宽和28px的高（注意 ",[141,140308,596],{}," 是行内元素， 转成行内块），给 ",[141,140311,101],{},[141,140313,140314],{},"text-align:center"," 让里面内容居中显示",[14,140317,139935],{},[135,140319,140321],{"className":126565,"code":140320,"language":126567,"meta":30,"style":30},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[141,140322,140323,140341,140346,140356],{"__ignoreMap":30},[144,140324,140325,140327,140329,140331,140333,140335,140337,140339],{"class":146,"line":147},[144,140326,144],{"class":51313},[144,140328,12466],{"class":154},[144,140330,393],{"class":51313},[144,140332,12466],{"class":154},[144,140334,23585],{"class":51313},[144,140336,12466],{"class":154},[144,140338,304],{"class":51313},[144,140340,15603],{"class":154},[144,140342,140343],{"class":146,"line":66},[144,140344,140345],{"class":213},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[144,140347,140348,140350,140352,140354],{"class":146,"line":1210},[144,140349,128181],{"class":203},[144,140351,51450],{"class":154},[144,140353,128243],{"class":203},[144,140355,1321],{"class":154},[144,140357,140358],{"class":146,"line":1225},[144,140359,1595],{"class":154},[14,140361,140024],{},[135,140363,140364],{"className":126565,"code":140320,"language":126567,"meta":30,"style":30},[141,140365,140366,140384,140388,140398],{"__ignoreMap":30},[144,140367,140368,140370,140372,140374,140376,140378,140380,140382],{"class":146,"line":147},[144,140369,144],{"class":51313},[144,140371,12466],{"class":154},[144,140373,393],{"class":51313},[144,140375,12466],{"class":154},[144,140377,23585],{"class":51313},[144,140379,12466],{"class":154},[144,140381,304],{"class":51313},[144,140383,15603],{"class":154},[144,140385,140386],{"class":146,"line":66},[144,140387,140345],{"class":213},[144,140389,140390,140392,140394,140396],{"class":146,"line":1210},[144,140391,128181],{"class":203},[144,140393,51450],{"class":154},[144,140395,128243],{"class":203},[144,140397,1321],{"class":154},[144,140399,140400],{"class":146,"line":1225},[144,140401,1595],{"class":154},[14,140403,140404,140405,140408],{},"3 号盒子为 ",[141,140406,140407],{},"bargain"," 特价商品",[1162,140410,140411],{},[101,140412,140413],{},"这个比较简单，直接插入一张图片即可",[14,140415,139935],{},[135,140417,140418],{"className":127312,"code":134067,"language":127314,"meta":30,"style":30},[141,140419,140420],{"__ignoreMap":30},[144,140421,140422,140424,140426,140428,140430,140432,140434,140436,140438,140440,140442,140444],{"class":146,"line":147},[144,140423,1065],{"class":154},[144,140425,28],{"class":51313},[144,140427,55252],{"class":1993},[144,140429,200],{"class":154},[144,140431,134082],{"class":259},[144,140433,55260],{"class":1993},[144,140435,200],{"class":154},[144,140437,134089],{"class":259},[144,140439,134092],{"class":1993},[144,140441,200],{"class":154},[144,140443,134097],{"class":259},[144,140445,51320],{"class":154},[14,140447,140024],{},[135,140449,140450],{"className":127312,"code":134067,"language":127314,"meta":30,"style":30},[141,140451,140452],{"__ignoreMap":30},[144,140453,140454,140456,140458,140460,140462,140464,140466,140468,140470,140472,140474,140476],{"class":146,"line":147},[144,140455,1065],{"class":154},[144,140457,28],{"class":51313},[144,140459,55252],{"class":1993},[144,140461,200],{"class":154},[144,140463,134082],{"class":259},[144,140465,55260],{"class":1993},[144,140467,200],{"class":154},[144,140469,134089],{"class":259},[144,140471,134092],{"class":1993},[144,140473,200],{"class":154},[144,140475,134097],{"class":259},[144,140477,51320],{"class":154},[115,140479,140481],{"id":140480},"_1612-推荐模块制作","16.1.2 推荐模块制作",[28,140483],{"style":126421,"src":140484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,140486,140487,140488,140491],{},"大盒子 ",[141,140489,140490],{},"recom"," 推荐模块 recommend",[1162,140493,140494],{},[101,140495,140496,140497,140499,140500,140503],{},"给这个 ",[141,140498,140490],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[141,140501,140502],{},"#ebebeb","），设置距离上边 12px",[14,140505,139935],{},[135,140507,140509],{"className":126565,"code":140508,"language":126567,"meta":30,"style":30},"div {\n  background-color: #f0f0f0;\n}\n",[141,140510,140511,140517,140528],{"__ignoreMap":30},[144,140512,140513,140515],{"class":146,"line":147},[144,140514,51624],{"class":51313},[144,140516,15603],{"class":154},[144,140518,140519,140521,140523,140526],{"class":146,"line":66},[144,140520,70891],{"class":203},[144,140522,51450],{"class":154},[144,140524,140525],{"class":203},"#f0f0f0",[144,140527,1321],{"class":154},[144,140529,140530],{"class":146,"line":1210},[144,140531,1595],{"class":154},[14,140533,140024],{},[135,140535,140536],{"className":126565,"code":140508,"language":126567,"meta":30,"style":30},[141,140537,140538,140544,140554],{"__ignoreMap":30},[144,140539,140540,140542],{"class":146,"line":147},[144,140541,51624],{"class":51313},[144,140543,15603],{"class":154},[144,140545,140546,140548,140550,140552],{"class":146,"line":66},[144,140547,70891],{"class":203},[144,140549,51450],{"class":154},[144,140551,140525],{"class":203},[144,140553,1321],{"class":154},[144,140555,140556],{"class":146,"line":1210},[144,140557,1595],{"class":154},[14,140559,140560],{},"里面包含 2 个盒子， 浮动即可",[14,140562,139935],{},[135,140564,140565],{"className":126565,"code":139235,"language":126567,"meta":30,"style":30},[141,140566,140567,140573,140583],{"__ignoreMap":30},[144,140568,140569,140571],{"class":146,"line":147},[144,140570,130413],{"class":1993},[144,140572,15603],{"class":154},[144,140574,140575,140577,140579,140581],{"class":146,"line":66},[144,140576,131045],{"class":203},[144,140578,51450],{"class":154},[144,140580,23768],{"class":203},[144,140582,1321],{"class":154},[144,140584,140585],{"class":146,"line":1210},[144,140586,1595],{"class":154},[14,140588,140589,140590],{},"1 号盒子 ",[141,140591,140592],{},"recom_hd",[1162,140594,140595,140598],{},[101,140596,140597],{},"设置宽度205px，高度163px",[101,140599,140069,140600,140602],{},[141,140601,28],{},"标签，插入图片即可",[14,140604,139935],{},[135,140606,140607],{"className":127312,"code":134067,"language":127314,"meta":30,"style":30},[141,140608,140609],{"__ignoreMap":30},[144,140610,140611,140613,140615,140617,140619,140621,140623,140625,140627,140629,140631,140633],{"class":146,"line":147},[144,140612,1065],{"class":154},[144,140614,28],{"class":51313},[144,140616,55252],{"class":1993},[144,140618,200],{"class":154},[144,140620,134082],{"class":259},[144,140622,55260],{"class":1993},[144,140624,200],{"class":154},[144,140626,134089],{"class":259},[144,140628,134092],{"class":1993},[144,140630,200],{"class":154},[144,140632,134097],{"class":259},[144,140634,51320],{"class":154},[14,140636,140024],{},[135,140638,140639],{"className":127312,"code":134067,"language":127314,"meta":30,"style":30},[141,140640,140641],{"__ignoreMap":30},[144,140642,140643,140645,140647,140649,140651,140653,140655,140657,140659,140661,140663,140665],{"class":146,"line":147},[144,140644,1065],{"class":154},[144,140646,28],{"class":51313},[144,140648,55252],{"class":1993},[144,140650,200],{"class":154},[144,140652,134082],{"class":259},[144,140654,55260],{"class":1993},[144,140656,200],{"class":154},[144,140658,134089],{"class":259},[144,140660,134092],{"class":1993},[144,140662,200],{"class":154},[144,140664,134097],{"class":259},[144,140666,51320],{"class":154},[14,140668,140669,140670,140673],{},"2 号盒子 ",[141,140671,140672],{},"recom_bd"," ，注意里面的小竖线",[1162,140675,140676,140687,140690,140695,140700],{},[101,140677,140678,140679,140681,140682,140684,140685],{},"右侧结构里面放 ",[141,140680,1162],{}," 包含 4个 ",[141,140683,101],{},"，每个li里面包含一个",[141,140686,28],{},[101,140688,140689],{},"直接利用切片工具把里面的内容当成一张图片",[101,140691,139065,140692,140694],{},[141,140693,101],{}," 设置浮动",[101,140696,139065,140697,140699],{},[141,140698,28],{}," 设置宽高，宽度 248px，高度 163px",[101,140701,140702,140703,140263,140706,140708,140709,140711,140712],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[141,140704,140705],{},"top 10px",[141,140707,101],{},"设置相对定位（注意，最后一个",[141,140710,101],{},"不用设置伪元素），可以利用 ",[141,140713,140714],{},"nth-child(-n+3){...}",[14,140716,139935],{},[135,140718,140719],{"className":126565,"code":138407,"language":126567,"meta":30,"style":30},[141,140720,140721,140729,140739,140749],{"__ignoreMap":30},[144,140722,140723,140725,140727],{"class":146,"line":147},[144,140724,51624],{"class":51313},[144,140726,137566],{"class":1993},[144,140728,15603],{"class":154},[144,140730,140731,140733,140735,140737],{"class":146,"line":66},[144,140732,137573],{"class":203},[144,140734,51450],{"class":154},[144,140736,7683],{"class":259},[144,140738,1321],{"class":154},[144,140740,140741,140743,140745,140747],{"class":146,"line":1210},[144,140742,128181],{"class":203},[144,140744,51450],{"class":154},[144,140746,60882],{"class":203},[144,140748,1321],{"class":154},[144,140750,140751],{"class":146,"line":1225},[144,140752,1595],{"class":154},[14,140754,140024],{},[135,140756,140757],{"className":126565,"code":138407,"language":126567,"meta":30,"style":30},[141,140758,140759,140767,140777,140787],{"__ignoreMap":30},[144,140760,140761,140763,140765],{"class":146,"line":147},[144,140762,51624],{"class":51313},[144,140764,137566],{"class":1993},[144,140766,15603],{"class":154},[144,140768,140769,140771,140773,140775],{"class":146,"line":66},[144,140770,137573],{"class":203},[144,140772,51450],{"class":154},[144,140774,7683],{"class":259},[144,140776,1321],{"class":154},[144,140778,140779,140781,140783,140785],{"class":146,"line":1210},[144,140780,128181],{"class":203},[144,140782,51450],{"class":154},[144,140784,60882],{"class":203},[144,140786,1321],{"class":154},[144,140788,140789],{"class":146,"line":1225},[144,140790,1595],{"class":154},[115,140792,140794],{"id":140793},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[28,140796],{"style":126421,"src":140797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,140799,140800],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,140802,140803],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,140805,140806,140809],{},[141,140807,140808],{},"box_hd"," 制作",[14,140811,140589,140812,140814],{},[141,140813,140808],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[28,140816],{"style":126421,"src":140817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1162,140819,140820,140825,140830,140833],{},[101,140821,140822,140824],{},[141,140823,140808],{}," 给 30px 的高度，2个像素的下边框",[101,140826,140827,140828],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[141,140829,139076],{},[101,140831,140832],{},"左侧盒左浮动，右侧盒子右浮动",[101,140834,140835,140837,140838,140840],{},[141,140836,393],{},"标签之间的距离用左右的",[141,140839,30896],{},"撑开即可",[14,140842,140843],{},"结构代码",[135,140845,140846],{"className":126565,"code":139235,"language":126567,"meta":30,"style":30},[141,140847,140848,140854,140864],{"__ignoreMap":30},[144,140849,140850,140852],{"class":146,"line":147},[144,140851,130413],{"class":1993},[144,140853,15603],{"class":154},[144,140855,140856,140858,140860,140862],{"class":146,"line":66},[144,140857,131045],{"class":203},[144,140859,51450],{"class":154},[144,140861,23768],{"class":203},[144,140863,1321],{"class":154},[144,140865,140866],{"class":146,"line":1210},[144,140867,1595],{"class":154},[14,140869,140870],{},"样式代码",[135,140872,140873],{"className":126565,"code":139235,"language":126567,"meta":30,"style":30},[141,140874,140875,140881,140891],{"__ignoreMap":30},[144,140876,140877,140879],{"class":146,"line":147},[144,140878,130413],{"class":1993},[144,140880,15603],{"class":154},[144,140882,140883,140885,140887,140889],{"class":146,"line":66},[144,140884,131045],{"class":203},[144,140886,51450],{"class":154},[144,140888,23768],{"class":203},[144,140890,1321],{"class":154},[144,140892,140893],{"class":146,"line":1210},[144,140894,1595],{"class":154},[14,140896,140897,140809],{},[141,140898,140899],{},"box_bd",[14,140901,140902],{},"2 号盒子 box_bd，不要给高度",[28,140904],{"style":126421,"src":140905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,140907,140908],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,140910,140911],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,140913,140914],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1162,140916,140917,140929,140945],{},[101,140918,140919,140921,140922,140925,140926,140928],{},[141,140920,140899],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[141,140923,140924],{},"tab_content","，在",[141,140927,140924],{}," 里面包裹tab选项卡对应的内容",[101,140930,140931,140932,140935,140936,140938,140939,140941,140942,140944],{},"内容被一个大盒子包裹（",[141,140933,140934],{},"tab_list_item","），里面是 ",[141,140937,1162],{}," 包裹 5个 ",[141,140940,101],{},"，每个",[141,140943,101],{},"设置对应的宽度，然后设置浮动",[101,140946,140947,140948,140950,140951,140953,140954],{},"而这5个",[141,140949,101],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[141,140952,101],{},"设置",[1162,140955,140956,140974,140977],{},[101,140957,140958,140959,140961,140962,140964,140965,140967,140968,140970,140971,140973],{},"第一个小 ",[141,140960,101],{}," 分为上下结构，上面是 ",[141,140963,1162],{}," 包裹 ",[141,140966,101],{}," ，",[141,140969,101],{},"里面包裹 ",[141,140972,393],{},"，下面插入一张图片",[101,140975,140976],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[101,140978,140979,140980,140982,140983,140985,140986,140988],{},"后面的小 ",[141,140981,101],{}," 里面先放一个",[141,140984,393],{},"标签，然后在",[141,140987,393],{},"标签里面插入图片即可",[14,140990,140843],{},[135,140992,140993],{"className":127312,"code":134067,"language":127314,"meta":30,"style":30},[141,140994,140995],{"__ignoreMap":30},[144,140996,140997,140999,141001,141003,141005,141007,141009,141011,141013,141015,141017,141019],{"class":146,"line":147},[144,140998,1065],{"class":154},[144,141000,28],{"class":51313},[144,141002,55252],{"class":1993},[144,141004,200],{"class":154},[144,141006,134082],{"class":259},[144,141008,55260],{"class":1993},[144,141010,200],{"class":154},[144,141012,134089],{"class":259},[144,141014,134092],{"class":1993},[144,141016,200],{"class":154},[144,141018,134097],{"class":259},[144,141020,51320],{"class":154},[14,141022,140870],{},[135,141024,141025],{"className":127312,"code":134067,"language":127314,"meta":30,"style":30},[141,141026,141027],{"__ignoreMap":30},[144,141028,141029,141031,141033,141035,141037,141039,141041,141043,141045,141047,141049,141051],{"class":146,"line":147},[144,141030,1065],{"class":154},[144,141032,28],{"class":51313},[144,141034,55252],{"class":1993},[144,141036,200],{"class":154},[144,141038,134082],{"class":259},[144,141040,55260],{"class":1993},[144,141042,200],{"class":154},[144,141044,134089],{"class":259},[144,141046,134092],{"class":1993},[144,141048,200],{"class":154},[144,141050,134097],{"class":259},[144,141052,51320],{"class":154},[14,141054,141055],{},"tab栏切换需求！！！！！！介绍：",[28,141057],{"style":126421,"src":141058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1162,141060,141061,141069,141075,141078],{},[101,141062,141063,141066,141067],{},[141,141064,141065],{},"tab","栏的布局是 ",[141,141068,139076],{},[101,141070,141071,141072,141074],{},"有多少个",[141,141073,141065],{},"选项卡，那么对应就有多少个内容",[101,141076,141077],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[101,141079,141080,141081,141084,141085,141087,141088,141090],{},"等后面我们学习了",[141,141082,141083],{},"js","之后，我们就会配合",[141,141086,141083],{},"来实现，",[141,141089,141065],{},"栏的切换",[18,141092,141094],{"id":141093},"_162-列表制作","16.2 列表制作",[115,141096,141098],{"id":141097},"_1621-准备工作","16.2.1 准备工作",[1162,141100,141101,141104,141107,141110],{},[101,141102,141103],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[101,141105,141106],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[101,141108,141109],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[101,141111,141112],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[115,141114,141116,141117,101031,141119,141121],{"id":141115},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[141,141118,131570],{},[141,141120,53726],{}," 修改",[28,141123],{"style":126421,"src":141124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1162,141126,141127],{},[101,141128,141129],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141131,139935],{},[135,141133,141134],{"className":126565,"code":131997,"language":126567,"meta":30,"style":30},[141,141135,141136,141140,141154,141158,141172,141176,141190,141194,141208,141212],{"__ignoreMap":30},[144,141137,141138],{"class":146,"line":147},[144,141139,132004],{"class":213},[144,141141,141142,141144,141146,141148,141150,141152],{"class":146,"line":66},[144,141143,132009],{"class":1993},[144,141145,79820],{"class":154},[144,141147,128925],{"class":203},[144,141149,51450],{"class":154},[144,141151,132018],{"class":203},[144,141153,129495],{"class":154},[144,141155,141156],{"class":146,"line":1210},[144,141157,132025],{"class":213},[144,141159,141160,141162,141164,141166,141168,141170],{"class":146,"line":1225},[144,141161,132030],{"class":1993},[144,141163,79820],{"class":154},[144,141165,128925],{"class":203},[144,141167,51450],{"class":154},[144,141169,54777],{"class":203},[144,141171,129495],{"class":154},[144,141173,141174],{"class":146,"line":1231},[144,141175,132045],{"class":213},[144,141177,141178,141180,141182,141184,141186,141188],{"class":146,"line":1245},[144,141179,132050],{"class":1993},[144,141181,79820],{"class":154},[144,141183,128925],{"class":203},[144,141185,51450],{"class":154},[144,141187,54844],{"class":203},[144,141189,129495],{"class":154},[144,141191,141192],{"class":146,"line":1251},[144,141193,132065],{"class":213},[144,141195,141196,141198,141200,141202,141204,141206],{"class":146,"line":1342},[144,141197,132070],{"class":1993},[144,141199,79820],{"class":154},[144,141201,128925],{"class":203},[144,141203,51450],{"class":154},[144,141205,86246],{"class":203},[144,141207,129495],{"class":154},[144,141209,141210],{"class":146,"line":1348},[144,141211,132085],{"class":213},[144,141213,141214,141216,141218,141220,141222,141224],{"class":146,"line":1360},[144,141215,132090],{"class":1993},[144,141217,79820],{"class":154},[144,141219,128925],{"class":203},[144,141221,51450],{"class":154},[144,141223,132099],{"class":203},[144,141225,129495],{"class":154},[14,141227,140024],{},[135,141229,141230],{"className":126565,"code":131997,"language":126567,"meta":30,"style":30},[141,141231,141232,141236,141250,141254,141268,141272,141286,141290,141304,141308],{"__ignoreMap":30},[144,141233,141234],{"class":146,"line":147},[144,141235,132004],{"class":213},[144,141237,141238,141240,141242,141244,141246,141248],{"class":146,"line":66},[144,141239,132009],{"class":1993},[144,141241,79820],{"class":154},[144,141243,128925],{"class":203},[144,141245,51450],{"class":154},[144,141247,132018],{"class":203},[144,141249,129495],{"class":154},[144,141251,141252],{"class":146,"line":1210},[144,141253,132025],{"class":213},[144,141255,141256,141258,141260,141262,141264,141266],{"class":146,"line":1225},[144,141257,132030],{"class":1993},[144,141259,79820],{"class":154},[144,141261,128925],{"class":203},[144,141263,51450],{"class":154},[144,141265,54777],{"class":203},[144,141267,129495],{"class":154},[144,141269,141270],{"class":146,"line":1231},[144,141271,132045],{"class":213},[144,141273,141274,141276,141278,141280,141282,141284],{"class":146,"line":1245},[144,141275,132050],{"class":1993},[144,141277,79820],{"class":154},[144,141279,128925],{"class":203},[144,141281,51450],{"class":154},[144,141283,54844],{"class":203},[144,141285,129495],{"class":154},[144,141287,141288],{"class":146,"line":1251},[144,141289,132065],{"class":213},[144,141291,141292,141294,141296,141298,141300,141302],{"class":146,"line":1342},[144,141293,132070],{"class":1993},[144,141295,79820],{"class":154},[144,141297,128925],{"class":203},[144,141299,51450],{"class":154},[144,141301,86246],{"class":203},[144,141303,129495],{"class":154},[144,141305,141306],{"class":146,"line":1348},[144,141307,132085],{"class":213},[144,141309,141310,141312,141314,141316,141318,141320],{"class":146,"line":1360},[144,141311,132090],{"class":1993},[144,141313,79820],{"class":154},[144,141315,128925],{"class":203},[144,141317,51450],{"class":154},[144,141319,132099],{"class":203},[144,141321,129495],{"class":154},[1162,141323,141324,141335],{},[101,141325,141326,141327,141330,141331,101031,141333],{},"1 号盒子左侧浮动 ",[141,141328,141329],{},"sk_list"," 里面包含 ",[141,141332,1162],{},[141,141334,101],{},[101,141336,141337,141338,141330,141341,101031,141343],{},"2 号盒子左侧浮动 ",[141,141339,141340],{},"sk_con",[141,141342,1162],{},[141,141344,101],{},[14,141346,139935],{},[135,141348,141349],{"className":126565,"code":139235,"language":126567,"meta":30,"style":30},[141,141350,141351,141357,141367],{"__ignoreMap":30},[144,141352,141353,141355],{"class":146,"line":147},[144,141354,130413],{"class":1993},[144,141356,15603],{"class":154},[144,141358,141359,141361,141363,141365],{"class":146,"line":66},[144,141360,131045],{"class":203},[144,141362,51450],{"class":154},[144,141364,23768],{"class":203},[144,141366,1321],{"class":154},[144,141368,141369],{"class":146,"line":1210},[144,141370,1595],{"class":154},[14,141372,140024],{},[135,141374,141375],{"className":126565,"code":139235,"language":126567,"meta":30,"style":30},[141,141376,141377,141383,141393],{"__ignoreMap":30},[144,141378,141379,141381],{"class":146,"line":147},[144,141380,130413],{"class":1993},[144,141382,15603],{"class":154},[144,141384,141385,141387,141389,141391],{"class":146,"line":66},[144,141386,131045],{"class":203},[144,141388,51450],{"class":154},[144,141390,23768],{"class":203},[144,141392,1321],{"class":154},[144,141394,141395],{"class":146,"line":1210},[144,141396,1595],{"class":154},[115,141398,141400,141401],{"id":141399},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[141,141402,141403],{},"sk_container",[28,141405],{"style":126421,"src":141406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1162,141408,141409,141414],{},[101,141410,140589,141411,141413],{},[141,141412,141403],{}," 给宽度 1200，不要给高度",[101,141415,141416],{},"一定不要忘记清除浮动",[14,141418,139935],{},[135,141420,141421],{"className":126565,"code":139235,"language":126567,"meta":30,"style":30},[141,141422,141423,141429,141439],{"__ignoreMap":30},[144,141424,141425,141427],{"class":146,"line":147},[144,141426,130413],{"class":1993},[144,141428,15603],{"class":154},[144,141430,141431,141433,141435,141437],{"class":146,"line":66},[144,141432,131045],{"class":203},[144,141434,51450],{"class":154},[144,141436,23768],{"class":203},[144,141438,1321],{"class":154},[144,141440,141441],{"class":146,"line":1210},[144,141442,1595],{"class":154},[98,141444,141445],{},[101,141446,141447],{},"sk_hd制作",[1162,141449,141450],{},[101,141451,140669,141452,141455],{},[141,141453,141454],{},"sk_hd"," ，插入图片即可",[14,141457,139935],{},[135,141459,141460],{"className":127312,"code":134067,"language":127314,"meta":30,"style":30},[141,141461,141462],{"__ignoreMap":30},[144,141463,141464,141466,141468,141470,141472,141474,141476,141478,141480,141482,141484,141486],{"class":146,"line":147},[144,141465,1065],{"class":154},[144,141467,28],{"class":51313},[144,141469,55252],{"class":1993},[144,141471,200],{"class":154},[144,141473,134082],{"class":259},[144,141475,55260],{"class":1993},[144,141477,200],{"class":154},[144,141479,134089],{"class":259},[144,141481,134092],{"class":1993},[144,141483,200],{"class":154},[144,141485,134097],{"class":259},[144,141487,51320],{"class":154},[98,141489,141490],{"start":66},[101,141491,141492],{},"sk_bd制作",[1162,141494,141495],{},[101,141496,141497,141498,141501,141502,101031,141504,141506],{},"3 号盒子 ",[141,141499,141500],{},"sk_bd"," ，里面包含很多的 ",[141,141503,1162],{},[141,141505,101],{},[1162,141507,141508,141517],{},[101,141509,141510,141511,141513,141514,141516],{},"当鼠标移入到 ",[141,141512,101],{}," 上面的时候显示红色的边框，在这里先给 ",[141,141515,101],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[101,141518,141519,141520,141522,141523,141525,141526,141529,141530,141532],{},"由于给每个 ",[141,141521,101],{}," 都设置了外边距，导致一行的最后一个 ",[141,141524,101],{}," 掉了下来，在这里我们利用 ",[141,141527,141528],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[141,141531,101],{},"，去掉外边距就好了",[14,141534,139935],{},[135,141536,141537],{"className":126565,"code":138754,"language":126567,"meta":30,"style":30},[141,141538,141539,141545,141557],{"__ignoreMap":30},[144,141540,141541,141543],{"class":146,"line":147},[144,141542,51624],{"class":51313},[144,141544,15603],{"class":154},[144,141546,141547,141549,141551,141553,141555],{"class":146,"line":66},[144,141548,70483],{"class":203},[144,141550,51450],{"class":154},[144,141552,346],{"class":203},[144,141554,51569],{"class":203},[144,141556,1321],{"class":154},[144,141558,141559],{"class":146,"line":1210},[144,141560,1595],{"class":154},[14,141562,140024],{},[135,141564,141565],{"className":126565,"code":138754,"language":126567,"meta":30,"style":30},[141,141566,141567,141573,141585],{"__ignoreMap":30},[144,141568,141569,141571],{"class":146,"line":147},[144,141570,51624],{"class":51313},[144,141572,15603],{"class":154},[144,141574,141575,141577,141579,141581,141583],{"class":146,"line":66},[144,141576,70483],{"class":203},[144,141578,51450],{"class":154},[144,141580,346],{"class":203},[144,141582,51569],{"class":203},[144,141584,1321],{"class":154},[144,141586,141587],{"class":146,"line":1210},[144,141588,1595],{"class":154},[18,141590,141592],{"id":141591},"_163-注册页面制作","16.3 注册页面制作",[28,141594],{"style":126421,"src":141595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,141597,141598,141600],{},[304,141599,9056],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[28,141602],{"style":126421,"src":141603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[115,141605,141607],{"id":141606},"_1631-准备工作","16.3.1 准备工作",[1162,141609,141610,141613],{},[101,141611,141612],{},"创建register.html，引入 base.css，引入favicon图标",[101,141614,141615],{},"创建register.css ，在html页面进行引入",[115,141617,141619,141620,141622],{"id":141618},"_1632-header-头部实现","16.3.2 ",[141,141621,131570],{}," 头部实现",[1162,141624,141625,141628],{},[101,141626,141627],{},"整个内容用 版心 进行包裹",[101,141629,141630],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,141632,139935],{},[135,141634,141635],{"className":127312,"code":134067,"language":127314,"meta":30,"style":30},[141,141636,141637],{"__ignoreMap":30},[144,141638,141639,141641,141643,141645,141647,141649,141651,141653,141655,141657,141659,141661],{"class":146,"line":147},[144,141640,1065],{"class":154},[144,141642,28],{"class":51313},[144,141644,55252],{"class":1993},[144,141646,200],{"class":154},[144,141648,134082],{"class":259},[144,141650,55260],{"class":1993},[144,141652,200],{"class":154},[144,141654,134089],{"class":259},[144,141656,134092],{"class":1993},[144,141658,200],{"class":154},[144,141660,134097],{"class":259},[144,141662,51320],{"class":154},[14,141664,140024],{},[135,141666,141667],{"className":127312,"code":134067,"language":127314,"meta":30,"style":30},[141,141668,141669],{"__ignoreMap":30},[144,141670,141671,141673,141675,141677,141679,141681,141683,141685,141687,141689,141691,141693],{"class":146,"line":147},[144,141672,1065],{"class":154},[144,141674,28],{"class":51313},[144,141676,55252],{"class":1993},[144,141678,200],{"class":154},[144,141680,134082],{"class":259},[144,141682,55260],{"class":1993},[144,141684,200],{"class":154},[144,141686,134089],{"class":259},[144,141688,134092],{"class":1993},[144,141690,200],{"class":154},[144,141692,134097],{"class":259},[144,141694,51320],{"class":154},[115,141696,141698,141699,141702],{"id":141697},"_1633-registerarea-主体模块实现","16.3.3 ",[141,141700,141701],{},"registerarea"," 主体模块实现",[28,141704],{"style":126421,"src":141705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,141707,141708],{},"整个大盒子 高度为 522px，设置4个边框",[14,141710,139935],{},[135,141712,141713],{"className":126565,"code":130722,"language":126567,"meta":30,"style":30},[141,141714,141715,141721,141737],{"__ignoreMap":30},[144,141716,141717,141719],{"class":146,"line":147},[144,141718,51624],{"class":51313},[144,141720,15603],{"class":154},[144,141722,141723,141725,141727,141729,141731,141733,141735],{"class":146,"line":66},[144,141724,70909],{"class":203},[144,141726,51450],{"class":154},[144,141728,372],{"class":203},[144,141730,51505],{"class":150},[144,141732,51534],{"class":203},[144,141734,129957],{"class":203},[144,141736,1321],{"class":154},[144,141738,141739],{"class":146,"line":1210},[144,141740,1595],{"class":154},[14,141742,140024],{},[135,141744,141745],{"className":126565,"code":130722,"language":126567,"meta":30,"style":30},[141,141746,141747,141753,141769],{"__ignoreMap":30},[144,141748,141749,141751],{"class":146,"line":147},[144,141750,51624],{"class":51313},[144,141752,15603],{"class":154},[144,141754,141755,141757,141759,141761,141763,141765,141767],{"class":146,"line":66},[144,141756,70909],{"class":203},[144,141758,51450],{"class":154},[144,141760,372],{"class":203},[144,141762,51505],{"class":150},[144,141764,51534],{"class":203},[144,141766,129957],{"class":203},[144,141768,1321],{"class":154},[144,141770,141771],{"class":146,"line":1210},[144,141772,1595],{"class":154},[14,141774,141775],{},"1号盒子 是一个 h3 标签，放标题",[1162,141777,141778],{},[101,141779,141780],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,141782,139935],{},[135,141784,141785],{"className":126565,"code":139235,"language":126567,"meta":30,"style":30},[141,141786,141787,141793,141803],{"__ignoreMap":30},[144,141788,141789,141791],{"class":146,"line":147},[144,141790,130413],{"class":1993},[144,141792,15603],{"class":154},[144,141794,141795,141797,141799,141801],{"class":146,"line":66},[144,141796,131045],{"class":203},[144,141798,51450],{"class":154},[144,141800,23768],{"class":203},[144,141802,1321],{"class":154},[144,141804,141805],{"class":146,"line":1210},[144,141806,1595],{"class":154},[14,141808,140024],{},[135,141810,141811],{"className":126565,"code":139235,"language":126567,"meta":30,"style":30},[141,141812,141813,141819,141829],{"__ignoreMap":30},[144,141814,141815,141817],{"class":146,"line":147},[144,141816,130413],{"class":1993},[144,141818,15603],{"class":154},[144,141820,141821,141823,141825,141827],{"class":146,"line":66},[144,141822,131045],{"class":203},[144,141824,51450],{"class":154},[144,141826,23768],{"class":203},[144,141828,1321],{"class":154},[144,141830,141831],{"class":146,"line":1210},[144,141832,1595],{"class":154},[14,141834,141835],{},"2号盒子 里面放注册的内容",[1162,141837,141838,141841,141850,141864,141877,141880,141883,141901,141915],{},[101,141839,141840],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[101,141842,141843,141844,141846,141847,141849],{},"里面的内容利用 ",[141,141845,1162],{}," 包含 ",[141,141848,101],{}," 来实现的（不需要用表格）",[101,141851,139079,141852,141854,141855,141857,141858,141860,141861,141863],{},[141,141853,101],{}," 里面，左侧放 ",[141,141856,33621],{}," 标签， 中间放",[141,141859,53834],{}," 标签， 右侧放 ",[141,141862,144],{}," 提示信息",[101,141865,141866,141867,141869,141870,141872,141873,141876],{},"左侧 ",[141,141868,33621],{},"里面的文字都是右对齐，我们可以给",[141,141871,33621],{},"设置一个宽度（88px），然后利用",[141,141874,141875],{},"text-align"," 来设置右对齐",[101,141878,141879],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[101,141881,141882],{},"右侧 span修饰一下文字颜色",[101,141884,141885,141886],{},"提示信息的样式优化",[1162,141887,141888,141891,141894],{},[101,141889,141890],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[101,141892,141893],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[101,141895,141896,141897,141900],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[141,141898,141899],{},"vertical-algin"," 来设置 图片与文字对齐方式",[101,141902,141903,141904],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1162,141905,141906,141912],{},[101,141907,141908,141909,141911],{},"设置 ",[141,141910,23585],{}," 的 左右 12px 的内边距，设置一下文字颜色",[101,141913,141914],{},"分别设置 背景颜色",[101,141916,141917,141918,141920],{},"同意协议 和 完成注册 都是用 ",[141,141919,101],{}," 进行包裹",[14,141922,139935],{},[135,141924,141925],{"className":126565,"code":140508,"language":126567,"meta":30,"style":30},[141,141926,141927,141933,141943],{"__ignoreMap":30},[144,141928,141929,141931],{"class":146,"line":147},[144,141930,51624],{"class":51313},[144,141932,15603],{"class":154},[144,141934,141935,141937,141939,141941],{"class":146,"line":66},[144,141936,70891],{"class":203},[144,141938,51450],{"class":154},[144,141940,140525],{"class":203},[144,141942,1321],{"class":154},[144,141944,141945],{"class":146,"line":1210},[144,141946,1595],{"class":154},[14,141948,140024],{},[135,141950,141951],{"className":126565,"code":140508,"language":126567,"meta":30,"style":30},[141,141952,141953,141959,141969],{"__ignoreMap":30},[144,141954,141955,141957],{"class":146,"line":147},[144,141956,51624],{"class":51313},[144,141958,15603],{"class":154},[144,141960,141961,141963,141965,141967],{"class":146,"line":66},[144,141962,70891],{"class":203},[144,141964,51450],{"class":154},[144,141966,140525],{"class":203},[144,141968,1321],{"class":154},[144,141970,141971],{"class":146,"line":1210},[144,141972,1595],{"class":154},[115,141974,141976],{"id":141975},"_1634-底部实现","16.3.4 底部实现",[14,141978,139935],{},[135,141980,141981],{"className":126565,"code":140508,"language":126567,"meta":30,"style":30},[141,141982,141983,141989,141999],{"__ignoreMap":30},[144,141984,141985,141987],{"class":146,"line":147},[144,141986,51624],{"class":51313},[144,141988,15603],{"class":154},[144,141990,141991,141993,141995,141997],{"class":146,"line":66},[144,141992,70891],{"class":203},[144,141994,51450],{"class":154},[144,141996,140525],{"class":203},[144,141998,1321],{"class":154},[144,142000,142001],{"class":146,"line":1210},[144,142002,1595],{"class":154},[14,142004,140024],{},[135,142006,142007],{"className":127312,"code":130669,"language":127314,"meta":30,"style":30},[141,142008,142009,142013,142027,142031],{"__ignoreMap":30},[144,142010,142011],{"class":146,"line":147},[144,142012,130676],{"class":213},[144,142014,142015,142017,142019,142021,142023,142025],{"class":146,"line":66},[144,142016,1065],{"class":154},[144,142018,51624],{"class":51313},[144,142020,53499],{"class":1993},[144,142022,200],{"class":154},[144,142024,130689],{"class":259},[144,142026,51320],{"class":154},[144,142028,142029],{"class":146,"line":1210},[144,142030,130696],{"class":154},[144,142032,142033,142035,142037],{"class":146,"line":1225},[144,142034,51798],{"class":154},[144,142036,51624],{"class":51313},[144,142038,51320],{"class":154},[18,142040,142042],{"id":142041},"_164-项目总结","16.4 项目总结",[98,142044,142045,142048,142051,142054],{},[101,142046,142047],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[101,142049,142050],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[101,142052,142053],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[101,142055,142056],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[28,142058],{"style":126421,"src":142059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[98,142061,142062],{"start":1231},[101,142063,142064],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[28,142066],{"style":126421,"src":142067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[98,142069,142070],{"start":1245},[101,142071,142072],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[28,142074],{"style":126421,"src":142075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[135,142077,142078],{"className":127312,"code":136722,"language":127314,"meta":30,"style":30},[141,142079,142080],{"__ignoreMap":30},[144,142081,142082,142084,142086,142088,142090,142092,142094,142096,142098,142100,142102,142104],{"class":146,"line":147},[144,142083,1065],{"class":154},[144,142085,53834],{"class":51313},[144,142087,53837],{"class":1993},[144,142089,200],{"class":154},[144,142091,62712],{"class":259},[144,142093,14951],{"class":1993},[144,142095,200],{"class":154},[144,142097,136743],{"class":259},[144,142099,61033],{"class":1993},[144,142101,200],{"class":154},[144,142103,136750],{"class":259},[144,142105,51320],{"class":154},[98,142107,142108,142111],{"start":1251},[101,142109,142110],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[101,142112,142113],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5157,142115,142116],{},"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":30,"searchDepth":66,"depth":66,"links":142118},[142119,142124,142131,142139],{"id":139745,"depth":66,"text":139746,"children":142120},[142121,142122,142123],{"id":139749,"depth":1210,"text":139750},{"id":140480,"depth":1210,"text":140481},{"id":140793,"depth":1210,"text":140794},{"id":141093,"depth":66,"text":141094,"children":142125},[142126,142127,142129],{"id":141097,"depth":1210,"text":141098},{"id":141115,"depth":1210,"text":142128},"16.2.2 列表页 header 和 nav 修改",{"id":141399,"depth":1210,"text":142130},"16.2.3 列表页主体 sk_container",{"id":141591,"depth":66,"text":141592,"children":142132},[142133,142134,142136,142138],{"id":141606,"depth":1210,"text":141607},{"id":141618,"depth":1210,"text":142135},"16.3.2 header 头部实现",{"id":141697,"depth":1210,"text":142137},"16.3.3 registerarea 主体模块实现",{"id":141975,"depth":1210,"text":141976},{"id":142041,"depth":66,"text":142042},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139737,"description":23408},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142146,"title":142147,"body":142148,"description":23408,"extension":70,"meta":142256,"navigation":72,"path":142257,"seo":142258,"stem":142259,"__hash__":142260},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142149,"toc":142251},[142150,142153,142157,142160,142163,142172,142181,142185,142190,142197,142215,142218,142221,142224,142227,142230,142233,142236,142239,142242,142245,142248],[10,142151,142147],{"id":142152},"_17-web服务器与网站发布",[18,142154,142156],{"id":142155},"_171-web服务器","17.1 Web服务器",[14,142158,142159],{},"把自己网站上传到服务器上，可以让其他人访问",[28,142161],{"style":126421,"src":142162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142164,142165,142168,142169],{},[304,142166,142167],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[304,142170,142171],{},"Web 服务器等",[14,142173,142174,142175,101031,142178,25753],{},"根据服务器在网络中所在的位置不同，又可分为 ",[304,142176,142177],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[304,142179,142180],{},"远程服务器",[115,142182,142184],{"id":142183},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142186,142187],{},[304,142188,142189],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142191,142192,142193],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[393,142194,142195],{"href":142195,"rel":142196},"http:\u002F\u002Ffree.3v.do\u002F",[23897],[1162,142198,142199,142202,142205,142212],{},[101,142200,142201],{},"去免费空间网站注册账号。",[101,142203,142204],{},"记录下主机名、用户名、密码、域名。",[101,142206,142207,142208,142211],{},"利用 ",[141,142209,142210],{},"utftp"," 软件 上传网站到远程服务器",[101,142213,142214],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142216,142217],{},"使用软件上传，对上传软件文件进行解压",[28,142219],{"style":126421,"src":142220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[28,142222],{"style":126421,"src":142223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142225,142226],{},"输入刚刚申请的服务器账号信息：",[28,142228],{"style":126421,"src":142229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[28,142231],{"style":126421,"src":142232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[28,142234],{"style":126421,"src":142235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[28,142237],{"style":126421,"src":142238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142240,142241],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[28,142243],{"style":126421,"src":142244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142246,142247],{},"浏览器输入域名即可访问",[14,142249,142250],{},"首页一定必须是index",{"title":30,"searchDepth":66,"depth":66,"links":142252},[142253],{"id":142155,"depth":66,"text":142156,"children":142254},[142255],{"id":142183,"depth":1210,"text":142184},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142147,"description":23408},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142262,"title":142263,"body":142264,"description":23408,"extension":70,"meta":143191,"navigation":72,"path":143192,"seo":143193,"stem":143194,"__hash__":143195},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142265,"toc":143174},[142266,142269,142273,142276,142279,142290,142293,142297,142301,142306,142309,142312,142315,142318,142322,142348,142352,142356,142359,142362,142366,142399,142403,142406,142409,142473,142477,142481,142484,142487,142490,142494,142539,142543,142546,142576,142580,142584,142587,142590,142594,142597,142666,142669,142777,142779,142785,142789,142792,142795,142891,142894,142898,142922,142926,142929,142933,142936,142940,142943,142946,142949,142952,142956,142959,142962,142966,142970,142973,142976,142979,142982,142986,142989,142993,142996,142999,143044,143048,143052,143055,143058,143061,143093,143097,143100,143134,143138,143141,143171],[10,142267,142263],{"id":142268},"_18-2d动画与3d转换",[18,142270,142272],{"id":142271},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142274,142275],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142277,142278],{},"转换（transform）你可以简单理解为变形",[1162,142280,142281,142284,142287],{},[101,142282,142283],{},"移动：translate",[101,142285,142286],{},"旋转：rotate",[101,142288,142289],{},"缩放：scale",[28,142291],{"style":126421,"src":142292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[115,142294,142296],{"id":142295},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22029,142298,142300],{"id":142299},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142302,142303,142304],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[304,142305,133224],{},[28,142307],{"style":126421,"src":142308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142310,142311],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142313,142314],{},"对于行内元素无效",[14,142316,142317],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22029,142319,142321],{"id":142320},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[135,142323,142324],{"className":126565,"code":138754,"language":126567,"meta":30,"style":30},[141,142325,142326,142332,142344],{"__ignoreMap":30},[144,142327,142328,142330],{"class":146,"line":147},[144,142329,51624],{"class":51313},[144,142331,15603],{"class":154},[144,142333,142334,142336,142338,142340,142342],{"class":146,"line":66},[144,142335,70483],{"class":203},[144,142337,51450],{"class":154},[144,142339,346],{"class":203},[144,142341,51569],{"class":203},[144,142343,1321],{"class":154},[144,142345,142346],{"class":146,"line":1210},[144,142347,1595],{"class":154},[115,142349,142351],{"id":142350},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22029,142353,142355],{"id":142354},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142357,142358],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[28,142360],{"style":126421,"src":142361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22029,142363,142365],{"id":142364},"_18122-旋转效果","18.1.2.2 旋转效果",[135,142367,142369],{"className":126565,"code":142368,"language":126567,"meta":30,"style":30},"div {\n  transform: rotate(45deg);\n}\n",[141,142370,142371,142377,142395],{"__ignoreMap":30},[144,142372,142373,142375],{"class":146,"line":147},[144,142374,51624],{"class":51313},[144,142376,15603],{"class":154},[144,142378,142379,142381,142383,142386,142388,142390,142393],{"class":146,"line":66},[144,142380,136549],{"class":203},[144,142382,51450],{"class":154},[144,142384,142385],{"class":203},"rotate",[144,142387,155],{"class":154},[144,142389,684],{"class":203},[144,142391,142392],{"class":150},"deg",[144,142394,2749],{"class":154},[144,142396,142397],{"class":146,"line":1210},[144,142398,1595],{"class":154},[22029,142400,142402],{"id":142401},"_18123-三角做法","18.1.2.3 三角做法",[14,142404,142405],{},"该下标当经过最外层大盒子时会实现向上反转",[28,142407],{"style":126421,"src":142408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[135,142410,142411],{"className":126565,"code":135085,"language":126567,"meta":30,"style":30},[141,142412,142413,142417,142423,142433,142443,142459,142469],{"__ignoreMap":30},[144,142414,142415],{"class":146,"line":147},[144,142416,135092],{"class":213},[144,142418,142419,142421],{"class":146,"line":66},[144,142420,135097],{"class":1993},[144,142422,15603],{"class":154},[144,142424,142425,142427,142429,142431],{"class":146,"line":1210},[144,142426,70581],{"class":203},[144,142428,51450],{"class":154},[144,142430,346],{"class":203},[144,142432,1321],{"class":154},[144,142434,142435,142437,142439,142441],{"class":146,"line":1225},[144,142436,70801],{"class":203},[144,142438,51450],{"class":154},[144,142440,346],{"class":203},[144,142442,1321],{"class":154},[144,142444,142445,142447,142449,142451,142453,142455,142457],{"class":146,"line":1231},[144,142446,70909],{"class":203},[144,142448,51450],{"class":154},[144,142450,601],{"class":203},[144,142452,51505],{"class":150},[144,142454,51534],{"class":203},[144,142456,64004],{"class":203},[144,142458,1321],{"class":154},[144,142460,142461,142463,142465,142467],{"class":146,"line":1245},[144,142462,135140],{"class":203},[144,142464,51450],{"class":154},[144,142466,62382],{"class":203},[144,142468,1321],{"class":154},[144,142470,142471],{"class":146,"line":1251},[144,142472,1595],{"class":154},[115,142474,142476],{"id":142475},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22029,142478,142480],{"id":142479},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,142482,142483],{},"设置中心点",[28,142485],{"style":126421,"src":142486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,142488,142489],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22029,142491,142493],{"id":142492},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[135,142495,142497],{"className":126565,"code":142496,"language":126567,"meta":30,"style":30},"\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",[141,142498,142499,142504,142510,142525,142530,142535],{"__ignoreMap":30},[144,142500,142501],{"class":146,"line":147},[144,142502,142503],{"class":213},"\u002F* 转换中心点 *\u002F\n",[144,142505,142506,142508],{"class":146,"line":66},[144,142507,51624],{"class":51313},[144,142509,15603],{"class":154},[144,142511,142512,142515,142517,142519,142521,142523],{"class":146,"line":1210},[144,142513,142514],{"class":203},"  transform-origin",[144,142516,51450],{"class":154},[144,142518,51605],{"class":203},[144,142520,17175],{"class":203},[144,142522,130428],{"class":154},[144,142524,135238],{"class":213},[144,142526,142527],{"class":146,"line":1225},[144,142528,142529],{"class":213},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[144,142531,142532],{"class":146,"line":1231},[144,142533,142534],{"class":213},"  \u002F* transform-origin: left top; *\u002F\n",[144,142536,142537],{"class":146,"line":1245},[144,142538,1595],{"class":154},[22029,142540,142542],{"id":142541},"_18133-旋转案例","18.1.3.3 旋转案例",[28,142544],{"style":126421,"src":142545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[135,142547,142548],{"className":126565,"code":142368,"language":126567,"meta":30,"style":30},[141,142549,142550,142556,142572],{"__ignoreMap":30},[144,142551,142552,142554],{"class":146,"line":147},[144,142553,51624],{"class":51313},[144,142555,15603],{"class":154},[144,142557,142558,142560,142562,142564,142566,142568,142570],{"class":146,"line":66},[144,142559,136549],{"class":203},[144,142561,51450],{"class":154},[144,142563,142385],{"class":203},[144,142565,155],{"class":154},[144,142567,684],{"class":203},[144,142569,142392],{"class":150},[144,142571,2749],{"class":154},[144,142573,142574],{"class":146,"line":1210},[144,142575,1595],{"class":154},[115,142577,142579],{"id":142578},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22029,142581,142583],{"id":142582},"_18141-scale介绍","18.1.4.1 scale介绍",[14,142585,142586],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[28,142588],{"style":126421,"src":142589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22029,142591,142593],{"id":142592},"_18142-分页按钮","18.1.4.2 分页按钮",[28,142595],{"style":126421,"src":142596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[135,142598,142600],{"className":126565,"code":142599,"language":126567,"meta":30,"style":30},"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",[141,142601,142602,142608,142624,142628,142632,142637,142643,142657,142662],{"__ignoreMap":30},[144,142603,142604,142606],{"class":146,"line":147},[144,142605,51624],{"class":51313},[144,142607,15603],{"class":154},[144,142609,142610,142612,142614,142617,142619,142622],{"class":146,"line":66},[144,142611,136549],{"class":203},[144,142613,51450],{"class":154},[144,142615,142616],{"class":203},"scale",[144,142618,155],{"class":154},[144,142620,142621],{"class":203},"1.2",[144,142623,2749],{"class":154},[144,142625,142626],{"class":146,"line":1210},[144,142627,1595],{"class":154},[144,142629,142630],{"class":146,"line":1225},[144,142631,136026],{"class":154},[144,142633,142634],{"class":146,"line":1231},[144,142635,142636],{"class":213},"\u002F* 2D 缩放 *\u002F\n",[144,142638,142639,142641],{"class":146,"line":1245},[144,142640,51624],{"class":51313},[144,142642,15603],{"class":154},[144,142644,142645,142647,142649,142651,142653,142655],{"class":146,"line":1251},[144,142646,136549],{"class":203},[144,142648,51450],{"class":154},[144,142650,142616],{"class":203},[144,142652,155],{"class":154},[144,142654,142621],{"class":203},[144,142656,2749],{"class":154},[144,142658,142659],{"class":146,"line":1342},[144,142660,142661],{"class":213},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[144,142663,142664],{"class":146,"line":1348},[144,142665,1595],{"class":154},[14,142667,142668],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[135,142670,142672],{"className":126565,"code":142671,"language":126567,"meta":30,"style":30},"\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",[141,142673,142674,142679,142689,142710,142731,142735,142740,142746,142773],{"__ignoreMap":30},[144,142675,142676],{"class":146,"line":147},[144,142677,142678],{"class":213},"\u002F* 定义动画 *\u002F\n",[144,142680,142681,142684,142687],{"class":146,"line":66},[144,142682,142683],{"class":150},"@keyframes",[144,142685,142686],{"class":5247}," move",[144,142688,15603],{"class":154},[144,142690,142691,142694,142696,142698,142700,142703,142705,142707],{"class":146,"line":1210},[144,142692,142693],{"class":1993},"  0%",[144,142695,79820],{"class":154},[144,142697,48147],{"class":203},[144,142699,51450],{"class":154},[144,142701,142702],{"class":203},"translateX",[144,142704,155],{"class":154},[144,142706,346],{"class":203},[144,142708,142709],{"class":154},"); }\n",[144,142711,142712,142715,142717,142719,142721,142723,142725,142727,142729],{"class":146,"line":1225},[144,142713,142714],{"class":1993},"  100%",[144,142716,79820],{"class":154},[144,142718,48147],{"class":203},[144,142720,51450],{"class":154},[144,142722,142702],{"class":203},[144,142724,155],{"class":154},[144,142726,466],{"class":203},[144,142728,51505],{"class":150},[144,142730,142709],{"class":154},[144,142732,142733],{"class":146,"line":1231},[144,142734,1595],{"class":154},[144,142736,142737],{"class":146,"line":1245},[144,142738,142739],{"class":213},"\u002F* 调用动画 *\u002F\n",[144,142741,142742,142744],{"class":146,"line":1251},[144,142743,51624],{"class":51313},[144,142745,15603],{"class":154},[144,142747,142748,142751,142753,142755,142757,142759,142761,142763,142765,142768,142771],{"class":146,"line":1342},[144,142749,142750],{"class":203},"  animation",[144,142752,51450],{"class":154},[144,142754,135251],{"class":203},[144,142756,25131],{"class":203},[144,142758,850],{"class":150},[144,142760,78693],{"class":203},[144,142762,4123],{"class":203},[144,142764,850],{"class":150},[144,142766,142767],{"class":203}," infinite",[144,142769,142770],{"class":203}," alternate",[144,142772,1321],{"class":154},[144,142774,142775],{"class":146,"line":1348},[144,142776,1595],{"class":154},[14,142778,142668],{},[135,142780,142783],{"className":142781,"code":142782,"language":5218},[5216],"\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",[141,142784,142782],{"__ignoreMap":30},[22029,142786,142788],{"id":142787},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,142790,142791],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[28,142793],{"style":126421,"src":142794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[135,142796,142797],{"className":126565,"code":142671,"language":126567,"meta":30,"style":30},[141,142798,142799,142803,142811,142829,142849,142853,142857,142863,142887],{"__ignoreMap":30},[144,142800,142801],{"class":146,"line":147},[144,142802,142678],{"class":213},[144,142804,142805,142807,142809],{"class":146,"line":66},[144,142806,142683],{"class":150},[144,142808,142686],{"class":5247},[144,142810,15603],{"class":154},[144,142812,142813,142815,142817,142819,142821,142823,142825,142827],{"class":146,"line":1210},[144,142814,142693],{"class":1993},[144,142816,79820],{"class":154},[144,142818,48147],{"class":203},[144,142820,51450],{"class":154},[144,142822,142702],{"class":203},[144,142824,155],{"class":154},[144,142826,346],{"class":203},[144,142828,142709],{"class":154},[144,142830,142831,142833,142835,142837,142839,142841,142843,142845,142847],{"class":146,"line":1225},[144,142832,142714],{"class":1993},[144,142834,79820],{"class":154},[144,142836,48147],{"class":203},[144,142838,51450],{"class":154},[144,142840,142702],{"class":203},[144,142842,155],{"class":154},[144,142844,466],{"class":203},[144,142846,51505],{"class":150},[144,142848,142709],{"class":154},[144,142850,142851],{"class":146,"line":1231},[144,142852,1595],{"class":154},[144,142854,142855],{"class":146,"line":1245},[144,142856,142739],{"class":213},[144,142858,142859,142861],{"class":146,"line":1251},[144,142860,51624],{"class":51313},[144,142862,15603],{"class":154},[144,142864,142865,142867,142869,142871,142873,142875,142877,142879,142881,142883,142885],{"class":146,"line":1342},[144,142866,142750],{"class":203},[144,142868,51450],{"class":154},[144,142870,135251],{"class":203},[144,142872,25131],{"class":203},[144,142874,850],{"class":150},[144,142876,78693],{"class":203},[144,142878,4123],{"class":203},[144,142880,850],{"class":150},[144,142882,142767],{"class":203},[144,142884,142770],{"class":203},[144,142886,1321],{"class":154},[144,142888,142889],{"class":146,"line":1348},[144,142890,1595],{"class":154},[14,142892,142893],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[115,142895,142897],{"id":142896},"_1823-知识点回顾","18.2.3 知识点回顾",[135,142899,142900],{"className":126565,"code":128734,"language":126567,"meta":30,"style":30},[141,142901,142902,142908,142918],{"__ignoreMap":30},[144,142903,142904,142906],{"class":146,"line":147},[144,142905,51624],{"class":51313},[144,142907,15603],{"class":154},[144,142909,142910,142912,142914,142916],{"class":146,"line":66},[144,142911,128747],{"class":203},[144,142913,51450],{"class":154},[144,142915,61749],{"class":203},[144,142917,1321],{"class":154},[144,142919,142920],{"class":146,"line":1210},[144,142921,1595],{"class":154},[18,142923,142925],{"id":142924},"_183-3d-转换","18.3 3D 转换",[14,142927,142928],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[115,142930,142932],{"id":142931},"_1831-坐标轴认识","18.3.1 坐标轴认识",[28,142934],{"style":126421,"src":142935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[115,142937,142939],{"id":142938},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[28,142941],{"style":126421,"src":142942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,142944,142945],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,142947,142948],{},"translate3d的效果需要搭配透视perspective来使用",[28,142950],{"style":126421,"src":142951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[115,142953,142955],{"id":142954},"_1833-透视-perspective","18.3.3 透视 perspective",[28,142957],{"style":126421,"src":142958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,142960,142961],{},"透视写在父盒子上，单位为像素",[115,142963,142965],{"id":142964},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22029,142967,142969],{"id":142968},"_18341-分开解释","18.3.4.1 分开解释",[28,142971],{"style":126421,"src":142972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[28,142974],{"style":126421,"src":142975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[28,142977],{"style":126421,"src":142978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,142980,142981],{},"总结来说就是左手原则",[22029,142983,142985],{"id":142984},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[28,142987],{"style":126421,"src":142988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[115,142990,142992],{"id":142991},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[28,142994],{"style":126421,"src":142995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[28,142997],{"style":126421,"src":142998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[135,143000,143002],{"className":126565,"code":143001,"language":126567,"meta":30,"style":30},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[141,143003,143004,143010,143023,143040],{"__ignoreMap":30},[144,143005,143006,143008],{"class":146,"line":147},[144,143007,51624],{"class":51313},[144,143009,15603],{"class":154},[144,143011,143012,143015,143017,143019,143021],{"class":146,"line":66},[144,143013,143014],{"class":203},"  perspective",[144,143016,51450],{"class":154},[144,143018,65087],{"class":203},[144,143020,51505],{"class":150},[144,143022,1321],{"class":154},[144,143024,143025,143027,143029,143032,143034,143036,143038],{"class":146,"line":1210},[144,143026,136549],{"class":203},[144,143028,51450],{"class":154},[144,143030,143031],{"class":203},"rotateX",[144,143033,155],{"class":154},[144,143035,684],{"class":203},[144,143037,142392],{"class":150},[144,143039,2749],{"class":154},[144,143041,143042],{"class":146,"line":1225},[144,143043,1595],{"class":154},[115,143045,143047],{"id":143046},"_1836-案例","18.3.6 案例",[22029,143049,143051],{"id":143050},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[28,143053],{"style":126421,"src":143054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[28,143056],{"style":126421,"src":143057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[28,143059],{"style":126421,"src":143060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[135,143062,143064],{"className":126565,"code":143063,"language":126567,"meta":30,"style":30},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[141,143065,143066,143071,143077,143089],{"__ignoreMap":30},[144,143067,143068],{"class":146,"line":147},[144,143069,143070],{"class":213},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[144,143072,143073,143075],{"class":146,"line":66},[144,143074,133562],{"class":1993},[144,143076,15603],{"class":154},[144,143078,143079,143081,143083,143085,143087],{"class":146,"line":1210},[144,143080,143014],{"class":203},[144,143082,51450],{"class":154},[144,143084,65087],{"class":203},[144,143086,51505],{"class":150},[144,143088,1321],{"class":154},[144,143090,143091],{"class":146,"line":1225},[144,143092,1595],{"class":154},[22029,143094,143096],{"id":143095},"_18362-3d导航栏","18.3.6.2 3D导航栏",[28,143098],{"style":126421,"src":143099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[135,143101,143102],{"className":127312,"code":130669,"language":127314,"meta":30,"style":30},[141,143103,143104,143108,143122,143126],{"__ignoreMap":30},[144,143105,143106],{"class":146,"line":147},[144,143107,130676],{"class":213},[144,143109,143110,143112,143114,143116,143118,143120],{"class":146,"line":66},[144,143111,1065],{"class":154},[144,143113,51624],{"class":51313},[144,143115,53499],{"class":1993},[144,143117,200],{"class":154},[144,143119,130689],{"class":259},[144,143121,51320],{"class":154},[144,143123,143124],{"class":146,"line":1210},[144,143125,130696],{"class":154},[144,143127,143128,143130,143132],{"class":146,"line":1225},[144,143129,51798],{"class":154},[144,143131,51624],{"class":51313},[144,143133,51320],{"class":154},[22029,143135,143137],{"id":143136},"_18363-旋转木马","18.3.6.3 旋转木马",[28,143139],{"style":126421,"src":143140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[135,143142,143143],{"className":126565,"code":142368,"language":126567,"meta":30,"style":30},[141,143144,143145,143151,143167],{"__ignoreMap":30},[144,143146,143147,143149],{"class":146,"line":147},[144,143148,51624],{"class":51313},[144,143150,15603],{"class":154},[144,143152,143153,143155,143157,143159,143161,143163,143165],{"class":146,"line":66},[144,143154,136549],{"class":203},[144,143156,51450],{"class":154},[144,143158,142385],{"class":203},[144,143160,155],{"class":154},[144,143162,684],{"class":203},[144,143164,142392],{"class":150},[144,143166,2749],{"class":154},[144,143168,143169],{"class":146,"line":1210},[144,143170,1595],{"class":154},[5157,143172,143173],{},"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":30,"searchDepth":66,"depth":66,"links":143175},[143176,143183],{"id":142271,"depth":66,"text":142272,"children":143177},[143178,143179,143180,143181,143182],{"id":142295,"depth":1210,"text":142296},{"id":142350,"depth":1210,"text":142351},{"id":142475,"depth":1210,"text":142476},{"id":142578,"depth":1210,"text":142579},{"id":142896,"depth":1210,"text":142897},{"id":142924,"depth":66,"text":142925,"children":143184},[143185,143186,143187,143188,143189,143190],{"id":142931,"depth":1210,"text":142932},{"id":142938,"depth":1210,"text":142939},{"id":142954,"depth":1210,"text":142955},{"id":142964,"depth":1210,"text":142965},{"id":142991,"depth":1210,"text":142992},{"id":143046,"depth":1210,"text":143047},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142263,"description":23408},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143197,"title":143198,"body":143199,"description":23408,"extension":70,"meta":143402,"navigation":72,"path":143403,"seo":143404,"stem":143405,"__hash__":143406},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143200,"toc":143391},[143201,143204,143208,143211,143214,143218,143221,143224,143227,143231,143234,143238,143241,143245,143248,143252,143266,143270,143295,143298,143301,143318,143322,143326,143329,143332,143336,143339,143342,143360,143364,143367,143381,143385,143388],[10,143202,143198],{"id":143203},"_19-移动端基础-前缀现状与视口",[18,143205,143207],{"id":143206},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[28,143209],{"style":126421,"src":143210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143212,143213],{},"意思就是加个前缀，增加兼容性",[18,143215,143217],{"id":143216},"_192-移动端现状认识","19.2 移动端现状认识",[28,143219],{"style":126421,"src":143220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143222,143223],{},"调试方法：",[28,143225],{"style":126421,"src":143226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[18,143228,143230],{"id":143229},"_193-视口","19.3 视口",[14,143232,143233],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[115,143235,143237],{"id":143236},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[28,143239],{"style":126421,"src":143240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[115,143242,143244],{"id":143243},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[28,143246],{"style":126421,"src":143247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[115,143249,143251],{"id":143250},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1162,143253,143254,143257,143260,143263],{},[101,143255,143256],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[101,143258,143259],{},"理想视口，对设备来讲，是最理想的视口尺寸",[101,143261,143262],{},"需要手动添写meta视口标签通知浏览器操作",[101,143264,143265],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[115,143267,143269],{"id":143268},"_1934-meta视口标签","19.3.4 meta视口标签",[135,143271,143273],{"className":127312,"code":143272,"language":127314,"meta":30,"style":30},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[141,143274,143275],{"__ignoreMap":30},[144,143276,143277,143279,143281,143283,143285,143287,143289,143291,143293],{"class":146,"line":147},[144,143278,1065],{"class":154},[144,143280,51357],{"class":51313},[144,143282,14951],{"class":1993},[144,143284,200],{"class":154},[144,143286,51404],{"class":259},[144,143288,51384],{"class":1993},[144,143290,200],{"class":154},[144,143292,51411],{"class":259},[144,143294,51320],{"class":154},[28,143296],{"style":126421,"src":143297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143299,143300],{},"标准视口设置：",[98,143302,143303,143306,143309,143312,143315],{},[101,143304,143305],{},"视口宽度和设备保持一致",[101,143307,143308],{},"视口的默认缩放比例1.0",[101,143310,143311],{},"不允许用户自行缩放",[101,143313,143314],{},"最大允许的缩放比例1.0",[101,143316,143317],{},"最小允许的缩放比例1.0",[115,143319,143321],{"id":143320},"_1935-二倍图","19.3.5 二倍图",[22029,143323,143325],{"id":143324},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[28,143327],{"style":126421,"src":143328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[28,143330],{"style":126421,"src":143331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22029,143333,143335],{"id":143334},"_19352-多倍图","19.3.5.2 多倍图",[28,143337],{"style":126421,"src":143338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143340,143341],{},"二倍图法，代码如下：",[135,143343,143345],{"className":126565,"code":143344,"language":126567,"meta":30,"style":30},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[141,143346,143347,143352],{"__ignoreMap":30},[144,143348,143349],{"class":146,"line":147},[144,143350,143351],{"class":213},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[144,143353,143354,143357],{"class":146,"line":66},[144,143355,143356],{"class":51313},"background-size",[144,143358,143359],{"class":154},": 50% 50%;\n",[22029,143361,143363],{"id":143362},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[28,143365],{"style":126421,"src":143366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[98,143368,143369,143372,143375,143378],{},[101,143370,143371],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[101,143373,143374],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[101,143376,143377],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[101,143379,143380],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22029,143382,143384],{"id":143383},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[28,143386],{"style":126421,"src":143387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5157,143389,143390],{},"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":30,"searchDepth":66,"depth":66,"links":143392},[143393,143394,143395],{"id":143206,"depth":66,"text":143207},{"id":143216,"depth":66,"text":143217},{"id":143229,"depth":66,"text":143230,"children":143396},[143397,143398,143399,143400,143401],{"id":143236,"depth":1210,"text":143237},{"id":143243,"depth":1210,"text":143244},{"id":143250,"depth":1210,"text":143251},{"id":143268,"depth":1210,"text":143269},{"id":143320,"depth":1210,"text":143321},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143198,"description":23408},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143408,"title":143409,"body":143410,"description":23408,"extension":70,"meta":144287,"navigation":72,"path":144288,"seo":144289,"stem":144290,"__hash__":144291},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143411,"toc":144271},[143412,143415,143419,143426,143429,143436,143439,143444,143447,143451,143455,143462,143465,143468,143472,143475,143478,143481,143484,143487,143491,143494,143498,143500,143503,143506,143509,143512,143514,143517,143519,143549,143551,143581,143585,143588,143592,143595,143612,143615,143618,143694,143696,143699,143702,143705,143708,143710,143713,143716,143720,143742,143745,143748,143752,143755,143761,143764,143768,143771,143774,143778,143781,143784,143787,143791,143794,143797,143800,143803,143807,143810,143814,143821,143824,143827,143830,143833,143843,143846,143849,143856,143859,143863,143866,143869,143873,143876,143879,143882,143927,143930,143933,143936,143938,144067,144069,144107,144110,144113,144115,144233,144235,144269],[10,143413,143409],{"id":143414},"_20-移动端布局实战上篇",[18,143416,143418],{"id":143417},"_201-移动端主流方案","20.1 移动端主流方案",[98,143420,143421],{},[101,143422,143423],{},[304,143424,143425],{},"单独移动端页面（主流）",[28,143427],{"style":126421,"src":143428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[98,143430,143431],{"start":66},[101,143432,143433],{},[304,143434,143435],{},"响应式兼容PC移动端",[28,143437],{"style":126421,"src":143438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[98,143440,143441],{"start":1210},[101,143442,143443],{},"两种页面选型布局方式",[28,143445],{"style":126421,"src":143446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[18,143448,143450],{"id":143449},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[115,143452,143454],{"id":143453},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,143456,143457,143458],{},"官网地址： ",[393,143459,143460],{"href":143460,"rel":143461},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23897],[28,143463],{"style":126421,"src":143464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[28,143466],{"style":126421,"src":143467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[115,143469,143471],{"id":143470},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[28,143473],{"style":126421,"src":143474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[28,143476],{"style":126421,"src":143477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,143479,143480],{},"去除高亮：",[14,143482,143483],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,143485,143486],{},"-webkit- tap-highlight-color: transparent;",[18,143488,143490],{"id":143489},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[28,143492],{"style":126421,"src":143493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[18,143495,143497],{"id":143496},"_204-流式布局案例","20.4 流式布局案例",[14,143499,184],{},[14,143501,143502],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,143504,143505],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,143507,143508],{},"图片格式：",[28,143510],{"style":126421,"src":143511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,143513,135608],{},[28,143515],{"style":126421,"src":143516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,143518,139935],{},[135,143520,143521],{"className":127312,"code":134067,"language":127314,"meta":30,"style":30},[141,143522,143523],{"__ignoreMap":30},[144,143524,143525,143527,143529,143531,143533,143535,143537,143539,143541,143543,143545,143547],{"class":146,"line":147},[144,143526,1065],{"class":154},[144,143528,28],{"class":51313},[144,143530,55252],{"class":1993},[144,143532,200],{"class":154},[144,143534,134082],{"class":259},[144,143536,55260],{"class":1993},[144,143538,200],{"class":154},[144,143540,134089],{"class":259},[144,143542,134092],{"class":1993},[144,143544,200],{"class":154},[144,143546,134097],{"class":259},[144,143548,51320],{"class":154},[14,143550,140024],{},[135,143552,143553],{"className":127312,"code":134067,"language":127314,"meta":30,"style":30},[141,143554,143555],{"__ignoreMap":30},[144,143556,143557,143559,143561,143563,143565,143567,143569,143571,143573,143575,143577,143579],{"class":146,"line":147},[144,143558,1065],{"class":154},[144,143560,28],{"class":51313},[144,143562,55252],{"class":1993},[144,143564,200],{"class":154},[144,143566,134082],{"class":259},[144,143568,55260],{"class":1993},[144,143570,200],{"class":154},[144,143572,134089],{"class":259},[144,143574,134092],{"class":1993},[144,143576,200],{"class":154},[144,143578,134097],{"class":259},[144,143580,51320],{"class":154},[18,143582,143584],{"id":143583},"_205-flex布局","20.5 flex布局",[28,143586],{"style":126421,"src":143587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[115,143589,143591],{"id":143590},"_2051-布局原理","20.5.1 布局原理",[14,143593,143594],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1162,143596,143597,143600,143603,143606,143609],{},[101,143598,143599],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[101,143601,143602],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[101,143604,143605],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[101,143607,143608],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[101,143610,143611],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,143613,143614],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,143616,143617],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[135,143619,143621],{"className":126565,"code":143620,"language":126567,"meta":30,"style":30},"\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",[141,143622,143623,143628,143635,143645,143657,143668,143679,143690],{"__ignoreMap":30},[144,143624,143625],{"class":146,"line":147},[144,143626,143627],{"class":213},"\u002F* Flex 弹性布局 *\u002F\n",[144,143629,143630,143633],{"class":146,"line":66},[144,143631,143632],{"class":1993},".container",[144,143634,15603],{"class":154},[144,143636,143637,143639,143641,143643],{"class":146,"line":1210},[144,143638,128181],{"class":203},[144,143640,51450],{"class":154},[144,143642,51490],{"class":203},[144,143644,1321],{"class":154},[144,143646,143647,143650,143652,143655],{"class":146,"line":1225},[144,143648,143649],{"class":203},"  flex-direction",[144,143651,51450],{"class":154},[144,143653,143654],{"class":203},"row",[144,143656,1321],{"class":154},[144,143658,143659,143662,143664,143666],{"class":146,"line":1231},[144,143660,143661],{"class":203},"  justify-content",[144,143663,51450],{"class":154},[144,143665,51681],{"class":203},[144,143667,1321],{"class":154},[144,143669,143670,143673,143675,143677],{"class":146,"line":1245},[144,143671,143672],{"class":203},"  align-items",[144,143674,51450],{"class":154},[144,143676,51605],{"class":203},[144,143678,1321],{"class":154},[144,143680,143681,143684,143686,143688],{"class":146,"line":1251},[144,143682,143683],{"class":203},"  flex-wrap",[144,143685,51450],{"class":154},[144,143687,78623],{"class":203},[144,143689,1321],{"class":154},[144,143691,143692],{"class":146,"line":1342},[144,143693,1595],{"class":154},[14,143695,70466],{},[14,143697,143698],{},".form-item .male-label {",[14,143700,143701],{},"   margin-right: 20px;",[14,143703,143704],{},"   display: inline-flex;",[14,143706,143707],{},"   align-items: center;",[14,143709,1101],{},[28,143711],{"style":126421,"src":143712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[28,143714],{"style":126421,"src":143715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[115,143717,143719],{"id":143718},"_2052-常见父项属性","20.5.2 常见父项属性",[98,143721,143722,143725,143728,143731,143734,143737,143740],{},[101,143723,143724],{},"flex-direction：设置主轴的方向",[101,143726,143727],{},"justify-content：设置主轴上的子元素排列方式",[101,143729,143730],{},"flex-wrap：设置子元素是否换行",[101,143732,143733],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[101,143735,143736],{},"align-items：设置侧轴上的子元素排列方式（单行）",[101,143738,143739],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[101,143741,143724],{},[28,143743],{"style":126421,"src":143744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[28,143746],{"style":126421,"src":143747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[98,143749,143750],{"start":66},[101,143751,143727],{},[28,143753],{"style":126421,"src":143754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,143756,143757,143760],{},[141,143758,143759],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,143762,143763],{},"跟着主轴走",[98,143765,143766],{"start":1210},[101,143767,143730],{},[28,143769],{"style":126421,"src":143770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,143772,143773],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[98,143775,143776],{"start":1225},[101,143777,143733],{},[28,143779],{"style":126421,"src":143780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,143782,143783],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,143785,143786],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[98,143788,143789],{"start":1231},[101,143790,143736],{},[28,143792],{"style":126421,"src":143793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,143795,143796],{},"align-items与align-content之间的区别：",[14,143798,143799],{},"单找items，多找content",[28,143801],{"style":126421,"src":143802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[98,143804,143805],{"start":1245},[101,143806,143739],{},[28,143808],{"style":126421,"src":143809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[115,143811,143813],{"id":143812},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[98,143815,143816],{},[101,143817,143818],{},[304,143819,143820],{},"flex 属性",[14,143822,143823],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[28,143825],{"style":126421,"src":143826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,143828,143829],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,143831,143832],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[98,143834,143835],{"start":66},[101,143836,143837,13826,143840],{},[304,143838,143839],{},"align-self",[304,143841,143842],{},"控制子项自己在侧轴上的排列方式",[28,143844],{"style":126421,"src":143845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,143847,143848],{},"单个子盒子在父盒子侧轴上的排列方式",[98,143850,143851],{"start":1210},[101,143852,143853,143855],{},[304,143854,95310],{}," 属性定义项目的排列顺序",[28,143857],{"style":126421,"src":143858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[115,143860,143862],{"id":143861},"_2054-背景线性渐变","20.5.4 背景线性渐变",[28,143864],{"style":126421,"src":143865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,143867,143868],{},"必须要添加浏览器的私有前缀",[115,143870,143872],{"id":143871},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,143874,143875],{},"学到最重要的知识：",[14,143877,143878],{},"flex处理这样的布局思路",[28,143880],{"style":126421,"src":143881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[135,143883,143885],{"className":126565,"code":143884,"language":126567,"meta":30,"style":30},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[141,143886,143887,143893,143903,143913,143923],{"__ignoreMap":30},[144,143888,143889,143891],{"class":146,"line":147},[144,143890,143632],{"class":1993},[144,143892,15603],{"class":154},[144,143894,143895,143897,143899,143901],{"class":146,"line":66},[144,143896,128181],{"class":203},[144,143898,51450],{"class":154},[144,143900,51490],{"class":203},[144,143902,1321],{"class":154},[144,143904,143905,143907,143909,143911],{"class":146,"line":1210},[144,143906,143661],{"class":203},[144,143908,51450],{"class":154},[144,143910,51605],{"class":203},[144,143912,1321],{"class":154},[144,143914,143915,143917,143919,143921],{"class":146,"line":1225},[144,143916,143672],{"class":203},[144,143918,51450],{"class":154},[144,143920,51605],{"class":203},[144,143922,1321],{"class":154},[144,143924,143925],{"class":146,"line":1231},[144,143926,1595],{"class":154},[14,143928,143929],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,143931,143932],{},"使用属性选择器",[28,143934],{"style":126421,"src":143935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,143937,68902],{},[135,143939,143941],{"className":127312,"code":143940,"language":127314,"meta":30,"style":30},"\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",[141,143942,143943,143948,143962,143967,143987,143992,144011,144016,144035,144040,144059],{"__ignoreMap":30},[144,143944,143945],{"class":146,"line":147},[144,143946,143947],{"class":213},"\u003C!-- 携程网移动端案例结构 -->\n",[144,143949,143950,143952,143954,143956,143958,143960],{"class":146,"line":66},[144,143951,1065],{"class":154},[144,143953,51624],{"class":51313},[144,143955,53499],{"class":1993},[144,143957,200],{"class":154},[144,143959,92336],{"class":259},[144,143961,51320],{"class":154},[144,143963,143964],{"class":146,"line":1210},[144,143965,143966],{"class":213},"  \u003C!-- 搜索栏 -->\n",[144,143968,143969,143971,143973,143975,143977,143980,143983,143985],{"class":146,"line":1225},[144,143970,52157],{"class":154},[144,143972,51624],{"class":51313},[144,143974,53499],{"class":1993},[144,143976,200],{"class":154},[144,143978,143979],{"class":259},"\"search-index\"",[144,143981,143982],{"class":154},">...\u003C\u002F",[144,143984,51624],{"class":51313},[144,143986,51320],{"class":154},[144,143988,143989],{"class":146,"line":1231},[144,143990,143991],{"class":213},"  \u003C!-- 焦点图 -->\n",[144,143993,143994,143996,143998,144000,144002,144005,144007,144009],{"class":146,"line":1245},[144,143995,52157],{"class":154},[144,143997,51624],{"class":51313},[144,143999,53499],{"class":1993},[144,144001,200],{"class":154},[144,144003,144004],{"class":259},"\"focus\"",[144,144006,143982],{"class":154},[144,144008,51624],{"class":51313},[144,144010,51320],{"class":154},[144,144012,144013],{"class":146,"line":1251},[144,144014,144015],{"class":213},"  \u003C!-- 主导航 -->\n",[144,144017,144018,144020,144022,144024,144026,144029,144031,144033],{"class":146,"line":1342},[144,144019,52157],{"class":154},[144,144021,51624],{"class":51313},[144,144023,53499],{"class":1993},[144,144025,200],{"class":154},[144,144027,144028],{"class":259},"\"local-nav\"",[144,144030,143982],{"class":154},[144,144032,51624],{"class":51313},[144,144034,51320],{"class":154},[144,144036,144037],{"class":146,"line":1348},[144,144038,144039],{"class":213},"  \u003C!-- 子导航 -->\n",[144,144041,144042,144044,144046,144048,144050,144053,144055,144057],{"class":146,"line":1360},[144,144043,52157],{"class":154},[144,144045,51624],{"class":51313},[144,144047,53499],{"class":1993},[144,144049,200],{"class":154},[144,144051,144052],{"class":259},"\"nav-common\"",[144,144054,143982],{"class":154},[144,144056,51624],{"class":51313},[144,144058,51320],{"class":154},[144,144060,144061,144063,144065],{"class":146,"line":1642},[144,144062,51798],{"class":154},[144,144064,51624],{"class":51313},[144,144066,51320],{"class":154},[14,144068,70466],{},[135,144070,144071],{"className":126565,"code":137017,"language":126567,"meta":30,"style":30},[141,144072,144073,144087,144103],{"__ignoreMap":30},[144,144074,144075,144077,144079,144081,144083,144085],{"class":146,"line":147},[144,144076,53834],{"class":51313},[144,144078,1045],{"class":154},[144,144080,103120],{"class":1993},[144,144082,200],{"class":150},[144,144084,62712],{"class":259},[144,144086,137034],{"class":154},[144,144088,144089,144091,144093,144095,144097,144099,144101],{"class":146,"line":66},[144,144090,70909],{"class":203},[144,144092,51450],{"class":154},[144,144094,372],{"class":203},[144,144096,51505],{"class":150},[144,144098,51534],{"class":203},[144,144100,130145],{"class":203},[144,144102,1321],{"class":154},[144,144104,144105],{"class":146,"line":1210},[144,144106,1595],{"class":154},[14,144108,144109],{},"总代码和效果展示：",[28,144111],{"style":126421,"src":144112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144114,68902],{},[135,144116,144117],{"className":127312,"code":143940,"language":127314,"meta":30,"style":30},[141,144118,144119,144123,144137,144141,144159,144163,144181,144185,144203,144207,144225],{"__ignoreMap":30},[144,144120,144121],{"class":146,"line":147},[144,144122,143947],{"class":213},[144,144124,144125,144127,144129,144131,144133,144135],{"class":146,"line":66},[144,144126,1065],{"class":154},[144,144128,51624],{"class":51313},[144,144130,53499],{"class":1993},[144,144132,200],{"class":154},[144,144134,92336],{"class":259},[144,144136,51320],{"class":154},[144,144138,144139],{"class":146,"line":1210},[144,144140,143966],{"class":213},[144,144142,144143,144145,144147,144149,144151,144153,144155,144157],{"class":146,"line":1225},[144,144144,52157],{"class":154},[144,144146,51624],{"class":51313},[144,144148,53499],{"class":1993},[144,144150,200],{"class":154},[144,144152,143979],{"class":259},[144,144154,143982],{"class":154},[144,144156,51624],{"class":51313},[144,144158,51320],{"class":154},[144,144160,144161],{"class":146,"line":1231},[144,144162,143991],{"class":213},[144,144164,144165,144167,144169,144171,144173,144175,144177,144179],{"class":146,"line":1245},[144,144166,52157],{"class":154},[144,144168,51624],{"class":51313},[144,144170,53499],{"class":1993},[144,144172,200],{"class":154},[144,144174,144004],{"class":259},[144,144176,143982],{"class":154},[144,144178,51624],{"class":51313},[144,144180,51320],{"class":154},[144,144182,144183],{"class":146,"line":1251},[144,144184,144015],{"class":213},[144,144186,144187,144189,144191,144193,144195,144197,144199,144201],{"class":146,"line":1342},[144,144188,52157],{"class":154},[144,144190,51624],{"class":51313},[144,144192,53499],{"class":1993},[144,144194,200],{"class":154},[144,144196,144028],{"class":259},[144,144198,143982],{"class":154},[144,144200,51624],{"class":51313},[144,144202,51320],{"class":154},[144,144204,144205],{"class":146,"line":1348},[144,144206,144039],{"class":213},[144,144208,144209,144211,144213,144215,144217,144219,144221,144223],{"class":146,"line":1360},[144,144210,52157],{"class":154},[144,144212,51624],{"class":51313},[144,144214,53499],{"class":1993},[144,144216,200],{"class":154},[144,144218,144052],{"class":259},[144,144220,143982],{"class":154},[144,144222,51624],{"class":51313},[144,144224,51320],{"class":154},[144,144226,144227,144229,144231],{"class":146,"line":1642},[144,144228,51798],{"class":154},[144,144230,51624],{"class":51313},[144,144232,51320],{"class":154},[14,144234,70466],{},[135,144236,144237],{"className":127312,"code":130669,"language":127314,"meta":30,"style":30},[141,144238,144239,144243,144257,144261],{"__ignoreMap":30},[144,144240,144241],{"class":146,"line":147},[144,144242,130676],{"class":213},[144,144244,144245,144247,144249,144251,144253,144255],{"class":146,"line":66},[144,144246,1065],{"class":154},[144,144248,51624],{"class":51313},[144,144250,53499],{"class":1993},[144,144252,200],{"class":154},[144,144254,130689],{"class":259},[144,144256,51320],{"class":154},[144,144258,144259],{"class":146,"line":1210},[144,144260,130696],{"class":154},[144,144262,144263,144265,144267],{"class":146,"line":1225},[144,144264,51798],{"class":154},[144,144266,51624],{"class":51313},[144,144268,51320],{"class":154},[5157,144270,137966],{},{"title":30,"searchDepth":66,"depth":66,"links":144272},[144273,144274,144278,144279,144280],{"id":143417,"depth":66,"text":143418},{"id":143449,"depth":66,"text":143450,"children":144275},[144276,144277],{"id":143453,"depth":1210,"text":143454},{"id":143470,"depth":1210,"text":143471},{"id":143489,"depth":66,"text":143490},{"id":143496,"depth":66,"text":143497},{"id":143583,"depth":66,"text":143584,"children":144281},[144282,144283,144284,144285,144286],{"id":143590,"depth":1210,"text":143591},{"id":143718,"depth":1210,"text":143719},{"id":143812,"depth":1210,"text":143813},{"id":143861,"depth":1210,"text":143862},{"id":143871,"depth":1210,"text":143872},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143409,"description":23408},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144293,"title":144294,"body":144295,"description":23408,"extension":70,"meta":145522,"navigation":72,"path":145523,"seo":145524,"stem":145525,"__hash__":145526},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144296,"toc":145500},[144297,144300,144304,144308,144311,144314,144318,144323,144326,144329,144332,144335,144338,144395,144398,144403,144406,144409,144413,144424,144428,144431,144434,144441,144446,144450,144453,144459,144462,144466,144469,144476,144479,144482,144489,144492,144499,144502,144505,144512,144515,144518,144520,144537,144541,144544,144547,144550,144554,144557,144560,144563,144566,144569,144572,144574,144577,144580,144642,144645,144755,144762,144768,144771,144774,144778,144781,144785,144790,144793,144800,144803,144809,144814,144817,144820,144823,144826,144829,144832,144835,144838,144894,144896,144922,144926,144929,144932,144935,144943,144946,144949,144953,145009,145012,145016,145022,145033,145036,145041,145044,145047,145053,145056,145059,145062,145065,145068,145071,145074,145077,145102,145108,145111,145114,145117,145120,145123,145126,145131,145134,145137,145140,145148,145151,145158,145161,145164,145166,145190,145192,145195,145198,145201,145204,145207,145210,145213,145247,145250,145253,145287,145294,145297,145300,145303,145306,145309,145312,145319,145322,145325,145328,145331,145338,145341,145344,145351,145354,145357,145361,145364,145367,145370,145373,145376,145379,145382,145385,145387,145411,145413,145437,145441,145452,145455,145458,145461,145464,145467,145470,145473,145476,145479,145482,145485,145488,145491,145494,145497],[10,144298,144294],{"id":144299},"_21-移动端布局实战下篇",[18,144301,144303],{"id":144302},"_211-rem适配布局","21.1 rem适配布局",[115,144305,144307],{"id":144306},"_2111-rem单位","21.1.1 rem单位",[28,144309],{"style":126421,"src":144310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144312,144313],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[115,144315,144317],{"id":144316},"_2112-媒体查询","21.1.2 媒体查询",[98,144319,144320],{},[101,144321,144322],{},"参数介绍",[28,144324],{"style":126421,"src":144325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[28,144327],{"style":126421,"src":144328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[28,144330],{"style":126421,"src":144331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[28,144333],{"style":126421,"src":144334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[28,144336],{"style":126421,"src":144337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[135,144339,144341],{"className":126565,"code":144340,"language":126567,"meta":30,"style":30},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[141,144342,144343,144348,144367,144374,144387,144391],{"__ignoreMap":30},[144,144344,144345],{"class":146,"line":147},[144,144346,144347],{"class":213},"\u002F* 媒体查询 *\u002F\n",[144,144349,144350,144353,144355,144358,144360,144363,144365],{"class":146,"line":66},[144,144351,144352],{"class":150},"@media",[144,144354,1688],{"class":154},[144,144356,144357],{"class":203},"max-width",[144,144359,51450],{"class":154},[144,144361,144362],{"class":203},"768",[144,144364,51505],{"class":150},[144,144366,12473],{"class":154},[144,144368,144369,144372],{"class":146,"line":1210},[144,144370,144371],{"class":1993},"  .container",[144,144373,15603],{"class":154},[144,144375,144376,144379,144381,144383,144385],{"class":146,"line":1225},[144,144377,144378],{"class":203},"    width",[144,144380,51450],{"class":154},[144,144382,466],{"class":203},[144,144384,483],{"class":150},[144,144386,1321],{"class":154},[144,144388,144389],{"class":146,"line":1231},[144,144390,127361],{"class":154},[144,144392,144393],{"class":146,"line":1245},[144,144394,1595],{"class":154},[14,144396,144397],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[98,144399,144400],{"start":66},[101,144401,144402],{},"引入资源",[28,144404],{"style":126421,"src":144405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,144407,144408],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[115,144410,144412],{"id":144411},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1162,144414,144415,144418,144421],{},[101,144416,144417],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[101,144419,144420],{},"媒体查询可以根据不同设备宽度来修改样式",[101,144422,144423],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[18,144425,144427],{"id":144426},"_212-less基础","21.2 Less基础",[14,144429,144430],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,144432,144433],{},"Less可以解决该问题，它是css的扩展语言",[14,144435,144436,144437],{},"Less中文网址： ",[393,144438,144439],{"href":144439,"rel":144440},"http:\u002F\u002Flesscss.cn\u002F",[23897],[14,144442,144443],{},[304,144444,144445],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[115,144447,144449],{"id":144448},"_2121-less安装","21.2.1 less安装",[14,144451,144452],{},"如果使用vscode，则无需进行下方安装步骤",[14,144454,144455],{},[393,144456,144457],{"href":144457,"rel":144458},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23897],[28,144460],{"style":126421,"src":144461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[115,144463,144465],{"id":144464},"_2122-less使用","21.2.2 less使用",[14,144467,144468],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[98,144470,144471],{},[101,144472,144473],{},[304,144474,144475],{},"Less 变量",[28,144477],{"style":126421,"src":144478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[28,144480],{"style":126421,"src":144481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[98,144483,144484],{"start":66},[101,144485,144486],{},[304,144487,144488],{},"Less 编译",[28,144490],{"style":126421,"src":144491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[98,144493,144494],{"start":1210},[101,144495,144496],{},[304,144497,144498],{},"Less 嵌套",[28,144500],{"style":126421,"src":144501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[28,144503],{"style":126421,"src":144504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[98,144506,144507],{"start":1225},[101,144508,144509],{},[304,144510,144511],{},"Less 运算",[28,144513],{"style":126421,"src":144514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,144516,144517],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,144519,184],{},[1162,144521,144522,144525,144528,144531,144534],{},[101,144523,144524],{},"乘号（*）和除号（\u002F）的写法",[101,144526,144527],{},"运算符中间左右有个空格隔开 1px + 5",[101,144529,144530],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[101,144532,144533],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[101,144535,144536],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[18,144538,144540],{"id":144539},"_213-rem-适配方案","21.3 rem 适配方案",[14,144542,144543],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,144545,144546],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[28,144548],{"style":126421,"src":144549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[115,144551,144553],{"id":144552},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,144555,144556],{},"rem + 媒体查询 + less 技术",[28,144558],{"style":126421,"src":144559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,144561,144562],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,144564,144565],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[28,144567],{"style":126421,"src":144568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,144570,144571],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,144573,14664],{},[28,144575],{"style":126421,"src":144576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,144578,144579],{},"index.html:",[135,144581,144583],{"className":126565,"code":144582,"language":126567,"meta":30,"style":30},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[141,144584,144585,144590,144596,144612,144616,144622,144638],{"__ignoreMap":30},[144,144586,144587],{"class":146,"line":147},[144,144588,144589],{"class":213},"\u002F* rem 适配方案 *\u002F\n",[144,144591,144592,144594],{"class":146,"line":66},[144,144593,50648],{"class":51313},[144,144595,15603],{"class":154},[144,144597,144598,144600,144602,144605,144607,144609],{"class":146,"line":1210},[144,144599,70639],{"class":203},[144,144601,51450],{"class":154},[144,144603,144604],{"class":203},"62.5",[144,144606,483],{"class":150},[144,144608,130428],{"class":154},[144,144610,144611],{"class":213},"\u002F* 1rem = 10px *\u002F\n",[144,144613,144614],{"class":146,"line":1225},[144,144615,1595],{"class":154},[144,144617,144618,144620],{"class":146,"line":1231},[144,144619,130413],{"class":1993},[144,144621,15603],{"class":154},[144,144623,144624,144626,144628,144630,144633,144635],{"class":146,"line":1245},[144,144625,70581],{"class":203},[144,144627,51450],{"class":154},[144,144629,601],{"class":203},[144,144631,144632],{"class":150},"rem",[144,144634,130428],{"class":154},[144,144636,144637],{"class":213},"\u002F* 100px *\u002F\n",[144,144639,144640],{"class":146,"line":1251},[144,144641,1595],{"class":154},[14,144643,144644],{},"common.less",[135,144646,144648],{"className":126565,"code":144647,"language":126567,"meta":30,"style":30},"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",[141,144649,144650,144656,144671,144675,144681,144695,144699,144703,144707,144713,144727,144731,144737,144751],{"__ignoreMap":30},[144,144651,144652,144654],{"class":146,"line":147},[144,144653,50648],{"class":51313},[144,144655,15603],{"class":154},[144,144657,144658,144660,144662,144664,144666,144668],{"class":146,"line":66},[144,144659,70639],{"class":203},[144,144661,51450],{"class":154},[144,144663,144604],{"class":203},[144,144665,483],{"class":150},[144,144667,26080],{"class":154},[144,144669,144670],{"class":213},"\u002F* 10px *\u002F\n",[144,144672,144673],{"class":146,"line":1210},[144,144674,1595],{"class":154},[144,144676,144677,144679],{"class":146,"line":1225},[144,144678,51624],{"class":51313},[144,144680,15603],{"class":154},[144,144682,144683,144685,144687,144689,144691,144693],{"class":146,"line":1231},[144,144684,70581],{"class":203},[144,144686,51450],{"class":154},[144,144688,601],{"class":203},[144,144690,144632],{"class":150},[144,144692,26080],{"class":154},[144,144694,144637],{"class":213},[144,144696,144697],{"class":146,"line":1245},[144,144698,1595],{"class":154},[144,144700,144701],{"class":146,"line":1251},[144,144702,136026],{"class":154},[144,144704,144705],{"class":146,"line":1342},[144,144706,144589],{"class":213},[144,144708,144709,144711],{"class":146,"line":1348},[144,144710,50648],{"class":51313},[144,144712,15603],{"class":154},[144,144714,144715,144717,144719,144721,144723,144725],{"class":146,"line":1360},[144,144716,70639],{"class":203},[144,144718,51450],{"class":154},[144,144720,144604],{"class":203},[144,144722,483],{"class":150},[144,144724,130428],{"class":154},[144,144726,144611],{"class":213},[144,144728,144729],{"class":146,"line":1642},[144,144730,1595],{"class":154},[144,144732,144733,144735],{"class":146,"line":1647},[144,144734,130413],{"class":1993},[144,144736,15603],{"class":154},[144,144738,144739,144741,144743,144745,144747,144749],{"class":146,"line":1653},[144,144740,70581],{"class":203},[144,144742,51450],{"class":154},[144,144744,601],{"class":203},[144,144746,144632],{"class":150},[144,144748,130428],{"class":154},[144,144750,144637],{"class":213},[144,144752,144753],{"class":146,"line":1658},[144,144754,1595],{"class":154},[14,144756,144757,144758,144761],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23585,144759,144760],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[135,144763,144766],{"className":144764,"code":144765,"language":5218},[5216],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[141,144767,144765],{"__ignoreMap":30},[14,144769,144770],{},"less保存时会自动变成.css文件",[14,144772,144773],{},"好好搞懂上述代码写法",[115,144775,144777],{"id":144776},"_2132-样式导入样式","21.3.2 样式导入样式",[28,144779],{"style":126421,"src":144780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[115,144782,144784],{"id":144783},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[98,144786,144787],{},[101,144788,144789],{},"准备工作",[28,144791],{"style":126421,"src":144792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,144794,144795,144796],{},"github地址：",[393,144797,144798],{"href":144798,"rel":144799},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23897],[14,144801,144802],{},"下载之后，将index.js文件拖到项目中就可以了",[14,144804,144805,144806],{},"js文件引入到index.html中使用的是",[141,144807,144808],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[98,144810,144811],{"start":66},[101,144812,144813],{},"vscode插件",[28,144815],{"style":126421,"src":144816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,144818,144819],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,144821,144822],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[28,144824],{"style":126421,"src":144825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,144827,144828],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[28,144830],{"style":126421,"src":144831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,144833,144834],{},"修改成75就可以，alt+z为快捷键",[14,144836,144837],{},"index.css：",[135,144839,144840],{"className":126565,"code":144582,"language":126567,"meta":30,"style":30},[141,144841,144842,144846,144852,144866,144870,144876,144890],{"__ignoreMap":30},[144,144843,144844],{"class":146,"line":147},[144,144845,144589],{"class":213},[144,144847,144848,144850],{"class":146,"line":66},[144,144849,50648],{"class":51313},[144,144851,15603],{"class":154},[144,144853,144854,144856,144858,144860,144862,144864],{"class":146,"line":1210},[144,144855,70639],{"class":203},[144,144857,51450],{"class":154},[144,144859,144604],{"class":203},[144,144861,483],{"class":150},[144,144863,130428],{"class":154},[144,144865,144611],{"class":213},[144,144867,144868],{"class":146,"line":1225},[144,144869,1595],{"class":154},[144,144871,144872,144874],{"class":146,"line":1231},[144,144873,130413],{"class":1993},[144,144875,15603],{"class":154},[144,144877,144878,144880,144882,144884,144886,144888],{"class":146,"line":1245},[144,144879,70581],{"class":203},[144,144881,51450],{"class":154},[144,144883,601],{"class":203},[144,144885,144632],{"class":150},[144,144887,130428],{"class":154},[144,144889,144637],{"class":213},[144,144891,144892],{"class":146,"line":1251},[144,144893,1595],{"class":154},[14,144895,144579],{},[135,144897,144898],{"className":126565,"code":126969,"language":126567,"meta":30,"style":30},[141,144899,144900,144906,144918],{"__ignoreMap":30},[144,144901,144902,144904],{"class":146,"line":147},[144,144903,51813],{"class":51313},[144,144905,15603],{"class":154},[144,144907,144908,144910,144912,144914,144916],{"class":146,"line":66},[144,144909,70639],{"class":203},[144,144911,51450],{"class":154},[144,144913,756],{"class":203},[144,144915,51505],{"class":150},[144,144917,1321],{"class":154},[144,144919,144920],{"class":146,"line":1210},[144,144921,1595],{"class":154},[18,144923,144925],{"id":144924},"_214-响应式开发","21.4 响应式开发",[14,144927,144928],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[28,144930],{"style":126421,"src":144931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,144933,144934],{},"做法：",[1162,144936,144937,144940],{},[101,144938,144939],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[101,144941,144942],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[28,144944],{"style":126421,"src":144945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,144947,144948],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[115,144950,144952],{"id":144951},"_2141-简单代码示范","21.4.1 简单代码示范",[135,144954,144955],{"className":126565,"code":144582,"language":126567,"meta":30,"style":30},[141,144956,144957,144961,144967,144981,144985,144991,145005],{"__ignoreMap":30},[144,144958,144959],{"class":146,"line":147},[144,144960,144589],{"class":213},[144,144962,144963,144965],{"class":146,"line":66},[144,144964,50648],{"class":51313},[144,144966,15603],{"class":154},[144,144968,144969,144971,144973,144975,144977,144979],{"class":146,"line":1210},[144,144970,70639],{"class":203},[144,144972,51450],{"class":154},[144,144974,144604],{"class":203},[144,144976,483],{"class":150},[144,144978,130428],{"class":154},[144,144980,144611],{"class":213},[144,144982,144983],{"class":146,"line":1225},[144,144984,1595],{"class":154},[144,144986,144987,144989],{"class":146,"line":1231},[144,144988,130413],{"class":1993},[144,144990,15603],{"class":154},[144,144992,144993,144995,144997,144999,145001,145003],{"class":146,"line":1245},[144,144994,70581],{"class":203},[144,144996,51450],{"class":154},[144,144998,601],{"class":203},[144,145000,144632],{"class":150},[144,145002,130428],{"class":154},[144,145004,144637],{"class":213},[144,145006,145007],{"class":146,"line":1251},[144,145008,1595],{"class":154},[14,145010,145011],{},"父盒子一般命名为container",[115,145013,145015],{"id":145014},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,145017,145018,145019],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[304,145020,145021],{},"使得 Web 开发更加快捷",[1162,145023,145024],{},[101,145025,145026,145027],{},"官网：",[304,145028,145029],{},[393,145030,145031],{"href":145031,"rel":145032},"http:\u002F\u002Fgetbootstrap.com\u002F",[23897],[14,145034,145035],{},"可以直接去官网拿现成的东西",[98,145037,145038],{},[101,145039,145040],{},"Bootstrap的使用",[14,145042,145043],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145045,145046],{},"Bootstrap 使用四步曲：",[14,145048,145049,145052],{},[304,145050,145051],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[28,145054],{"style":126421,"src":145055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145057,145058],{},"打开Bootstrap官网，然后下载",[28,145060],{"style":126421,"src":145061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[28,145063],{"style":126421,"src":145064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145066,145067],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145069,145070],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145072,145073],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[28,145075],{"style":126421,"src":145076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[135,145078,145080],{"className":126565,"code":145079,"language":126567,"meta":30,"style":30},".center {\n  color: red;\n}\n",[141,145081,145082,145088,145098],{"__ignoreMap":30},[144,145083,145084,145086],{"class":146,"line":147},[144,145085,126856],{"class":1993},[144,145087,15603],{"class":154},[144,145089,145090,145092,145094,145096],{"class":146,"line":66},[144,145091,70918],{"class":203},[144,145093,51450],{"class":154},[144,145095,57434],{"class":203},[144,145097,1321],{"class":154},[144,145099,145100],{"class":146,"line":1210},[144,145101,1595],{"class":154},[14,145103,145104,145107],{},[141,145105,145106],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[28,145109],{"style":126421,"src":145110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[28,145112],{"style":126421,"src":145113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[28,145115],{"style":126421,"src":145116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145118,145119],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[28,145121],{"style":126421,"src":145122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145124,145125],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[98,145127,145128],{"start":66},[101,145129,145130],{},"布局容器",[28,145132],{"style":126421,"src":145133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145135,145136],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145138,145139],{},"container-fluid用于移动式布局比较方便",[98,145141,145142],{"start":1210},[101,145143,145144,145145],{},"bootstrap ",[304,145146,145147],{},"栅格系统原理",[28,145149],{"style":126421,"src":145150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[98,145152,145153],{"start":1225},[101,145154,145155],{},[304,145156,145157],{},"栅格选项参数",[28,145159],{"style":126421,"src":145160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145162,145163],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145165,14664],{},[135,145167,145168],{"className":126565,"code":145079,"language":126567,"meta":30,"style":30},[141,145169,145170,145176,145186],{"__ignoreMap":30},[144,145171,145172,145174],{"class":146,"line":147},[144,145173,126856],{"class":1993},[144,145175,15603],{"class":154},[144,145177,145178,145180,145182,145184],{"class":146,"line":66},[144,145179,70918],{"class":203},[144,145181,51450],{"class":154},[144,145183,57434],{"class":203},[144,145185,1321],{"class":154},[144,145187,145188],{"class":146,"line":1210},[144,145189,1595],{"class":154},[14,145191,135608],{},[28,145193],{"style":126421,"src":145194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145196,145197],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145199,145200],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145202,145203],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145205,145206],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145208,145209],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145211,145212],{},"汇总展示说明：",[135,145214,145215],{"className":127312,"code":130669,"language":127314,"meta":30,"style":30},[141,145216,145217,145221,145235,145239],{"__ignoreMap":30},[144,145218,145219],{"class":146,"line":147},[144,145220,130676],{"class":213},[144,145222,145223,145225,145227,145229,145231,145233],{"class":146,"line":66},[144,145224,1065],{"class":154},[144,145226,51624],{"class":51313},[144,145228,53499],{"class":1993},[144,145230,200],{"class":154},[144,145232,130689],{"class":259},[144,145234,51320],{"class":154},[144,145236,145237],{"class":146,"line":1210},[144,145238,130696],{"class":154},[144,145240,145241,145243,145245],{"class":146,"line":1225},[144,145242,51798],{"class":154},[144,145244,51624],{"class":51313},[144,145246,51320],{"class":154},[28,145248],{"style":126421,"src":145249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145251,145252],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[135,145254,145255],{"className":127312,"code":130669,"language":127314,"meta":30,"style":30},[141,145256,145257,145261,145275,145279],{"__ignoreMap":30},[144,145258,145259],{"class":146,"line":147},[144,145260,130676],{"class":213},[144,145262,145263,145265,145267,145269,145271,145273],{"class":146,"line":66},[144,145264,1065],{"class":154},[144,145266,51624],{"class":51313},[144,145268,53499],{"class":1993},[144,145270,200],{"class":154},[144,145272,130689],{"class":259},[144,145274,51320],{"class":154},[144,145276,145277],{"class":146,"line":1210},[144,145278,130696],{"class":154},[144,145280,145281,145283,145285],{"class":146,"line":1225},[144,145282,51798],{"class":154},[144,145284,51624],{"class":51313},[144,145286,51320],{"class":154},[98,145288,145289],{"start":1231},[101,145290,145291],{},[304,145292,145293],{},"列嵌套",[28,145295],{"style":126421,"src":145296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145298,145299],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145301,145302],{},"没加row内部这样：",[28,145304],{"style":126421,"src":145305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145307,145308],{},"加上row之后内部为：",[28,145310],{"style":126421,"src":145311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[98,145313,145314],{"start":1245},[101,145315,145316],{},[304,145317,145318],{},"列偏移",[28,145320],{"style":126421,"src":145321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145323,145324],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145326,145327],{},"要加偏移量，即偏移份数",[14,145329,145330],{},"偏移的份数=12-两个盒子的份数",[98,145332,145333],{"start":1251},[101,145334,145335],{},[304,145336,145337],{},"列排序",[28,145339],{"style":126421,"src":145340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145342,145343],{},"pull拉左；push推右",[98,145345,145346],{"start":1342},[101,145347,145348],{},[304,145349,145350],{},"响应式工具",[28,145352],{"style":126421,"src":145353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145355,145356],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[115,145358,145360],{"id":145359},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145362,145363],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145365,145366],{},"ul {",[14,145368,145369],{},"list-style: none;",[14,145371,145372],{},"margin:0;",[14,145374,145375],{},"padding:0; }",[28,145377],{"style":126421,"src":145378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[28,145380],{"style":126421,"src":145381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145383,145384],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,145386,68902],{},[135,145388,145389],{"className":126565,"code":139235,"language":126567,"meta":30,"style":30},[141,145390,145391,145397,145407],{"__ignoreMap":30},[144,145392,145393,145395],{"class":146,"line":147},[144,145394,130413],{"class":1993},[144,145396,15603],{"class":154},[144,145398,145399,145401,145403,145405],{"class":146,"line":66},[144,145400,131045],{"class":203},[144,145402,51450],{"class":154},[144,145404,23768],{"class":203},[144,145406,1321],{"class":154},[144,145408,145409],{"class":146,"line":1210},[144,145410,1595],{"class":154},[14,145412,70466],{},[135,145414,145415],{"className":126565,"code":139235,"language":126567,"meta":30,"style":30},[141,145416,145417,145423,145433],{"__ignoreMap":30},[144,145418,145419,145421],{"class":146,"line":147},[144,145420,130413],{"class":1993},[144,145422,15603],{"class":154},[144,145424,145425,145427,145429,145431],{"class":146,"line":66},[144,145426,131045],{"class":203},[144,145428,51450],{"class":154},[144,145430,23768],{"class":203},[144,145432,1321],{"class":154},[144,145434,145435],{"class":146,"line":1210},[144,145436,1595],{"class":154},[18,145438,145440],{"id":145439},"_215-swiper-插件使用","21.5 swiper 插件使用",[1162,145442,145443,145446,145449],{},[101,145444,145445],{},"下载需要的css和js文件html页面中 引入相关文件",[101,145447,145448],{},"官网找到类似案例，复制html结构，css样式 js 语法",[101,145450,145451],{},"根据需求定制修改模块",[28,145453],{"style":126421,"src":145454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,145456,145457],{},"解压后将这两部分放到项目中",[28,145459],{"style":126421,"src":145460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,145462,145463],{},"这个插件可以帮助我们实现轮播图效果",[14,145465,145466],{},"用法：",[28,145468],{"style":126421,"src":145469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,145471,145472],{},"找到自己喜欢的",[28,145474],{"style":126421,"src":145475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,145477,145478],{},"右键，查看网页源代码",[28,145480],{"style":126421,"src":145481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,145483,145484],{},"复制人家的结构内容",[14,145486,145487],{},"然后去看API文档：",[28,145489],{"style":126421,"src":145490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,145492,145493],{},"可以看看如何修改样式",[14,145495,145496],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5157,145498,145499],{},"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":30,"searchDepth":66,"depth":66,"links":145501},[145502,145507,145511,145516,145521],{"id":144302,"depth":66,"text":144303,"children":145503},[145504,145505,145506],{"id":144306,"depth":1210,"text":144307},{"id":144316,"depth":1210,"text":144317},{"id":144411,"depth":1210,"text":144412},{"id":144426,"depth":66,"text":144427,"children":145508},[145509,145510],{"id":144448,"depth":1210,"text":144449},{"id":144464,"depth":1210,"text":144465},{"id":144539,"depth":66,"text":144540,"children":145512},[145513,145514,145515],{"id":144552,"depth":1210,"text":144553},{"id":144776,"depth":1210,"text":144777},{"id":144783,"depth":1210,"text":144784},{"id":144924,"depth":66,"text":144925,"children":145517},[145518,145519,145520],{"id":144951,"depth":1210,"text":144952},{"id":145014,"depth":1210,"text":145015},{"id":145359,"depth":1210,"text":145360},{"id":145439,"depth":66,"text":145440},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144294,"description":23408},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145528,"title":145529,"body":145530,"description":23408,"extension":70,"meta":145750,"navigation":72,"path":145751,"seo":145752,"stem":145753,"__hash__":145754},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145531,"toc":145746},[145532,145535,145539,145542,145557,145562,145565,145570,145605,145610,145622,145627,145640,145645,145662,145667,145687,145692,145710,145713,145716,145719,145722,145726,145729,145732,145735,145738,145741,145744],[10,145533,145529],{"id":145534},"_22-代码提交与新型相对单位",[18,145536,145538],{"id":145537},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,145540,145541],{},"法1：",[98,145543,145544,145551,145554],{},[101,145545,145546,145547],{},"登录网站注册：",[393,145548,145549],{"href":145549,"rel":145550},"https:\u002F\u002Fgitee.com\u002F",[23897],[101,145552,145553],{},"码云创建新的仓库",[101,145555,145556],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1162,145558,145559],{},[101,145560,145561],{},"在网站根目录右键-- Git Bash Here",[28,145563],{"style":126421,"src":145564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1162,145566,145567],{},[101,145568,145569],{},"如果是第一次利用git提交，请配置好全局选项",[135,145571,145573],{"className":117309,"code":145572,"language":117311,"meta":30,"style":30},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[141,145574,145575,145591],{"__ignoreMap":30},[144,145576,145577,145580,145582,145585,145588],{"class":146,"line":147},[144,145578,145579],{"class":1993},"git",[144,145581,119732],{"class":259},[144,145583,145584],{"class":203}," --global",[144,145586,145587],{"class":259}," user.name",[144,145589,145590],{"class":259}," \"你的名字\"\n",[144,145592,145593,145595,145597,145599,145602],{"class":146,"line":66},[144,145594,145579],{"class":1993},[144,145596,119732],{"class":259},[144,145598,145584],{"class":203},[144,145600,145601],{"class":259}," user.email",[144,145603,145604],{"class":259}," \"你的邮箱\"\n",[1162,145606,145607],{},[101,145608,145609],{},"初始化仓库",[135,145611,145613],{"className":117309,"code":145612,"language":117311,"meta":30,"style":30},"git init\n",[141,145614,145615],{"__ignoreMap":30},[144,145616,145617,145619],{"class":146,"line":147},[144,145618,145579],{"class":1993},[144,145620,145621],{"class":259}," init\n",[1162,145623,145624],{},[101,145625,145626],{},"把本地文件放到暂存区",[135,145628,145630],{"className":117309,"code":145629,"language":117311,"meta":30,"style":30},"git add .\n",[141,145631,145632],{"__ignoreMap":30},[144,145633,145634,145636,145638],{"class":146,"line":147},[144,145635,145579],{"class":1993},[144,145637,5240],{"class":259},[144,145639,28754],{"class":259},[1162,145641,145642],{},[101,145643,145644],{},"把本地文件放到本地仓库里面",[135,145646,145648],{"className":117309,"code":145647,"language":117311,"meta":30,"style":30},"git commit -m \"first commit\"\n",[141,145649,145650],{"__ignoreMap":30},[144,145651,145652,145654,145657,145659],{"class":146,"line":147},[144,145653,145579],{"class":1993},[144,145655,145656],{"class":259}," commit",[144,145658,100895],{"class":203},[144,145660,145661],{"class":259}," \"first commit\"\n",[1162,145663,145664],{},[101,145665,145666],{},"链接远程仓库",[135,145668,145670],{"className":117309,"code":145669,"language":117311,"meta":30,"style":30},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[141,145671,145672],{"__ignoreMap":30},[144,145673,145674,145676,145679,145681,145684],{"class":146,"line":147},[144,145675,145579],{"class":1993},[144,145677,145678],{"class":259}," remote",[144,145680,5240],{"class":259},[144,145682,145683],{"class":259}," origin",[144,145685,145686],{"class":259}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1162,145688,145689],{},[101,145690,145691],{},"把本地仓库的文件推送到远程仓库 push",[135,145693,145695],{"className":117309,"code":145694,"language":117311,"meta":30,"style":30},"git push -u origin master\n",[141,145696,145697],{"__ignoreMap":30},[144,145698,145699,145701,145703,145705,145707],{"class":146,"line":147},[144,145700,145579],{"class":1993},[144,145702,29029],{"class":259},[144,145704,28303],{"class":203},[144,145706,145683],{"class":259},[144,145708,145709],{"class":259}," master\n",[28,145711],{"style":126421,"src":145712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,145714,145715],{},"上方方法暂未实现，后边学完git后在整",[14,145717,145718],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[28,145720],{"style":126421,"src":145721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[18,145723,145725],{"id":145724},"_222-新型相对单位","22.2 新型相对单位",[28,145727],{"style":126421,"src":145728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[28,145730],{"style":126421,"src":145731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,145733,145734],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,145736,145737],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[28,145739],{"style":126421,"src":145740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,145742,145743],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5157,145745,23990],{},{"title":30,"searchDepth":66,"depth":66,"links":145747},[145748,145749],{"id":145537,"depth":66,"text":145538},{"id":145724,"depth":66,"text":145725},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145529,"description":23408},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145756,"title":145757,"body":145758,"description":145762,"extension":70,"meta":145763,"navigation":72,"path":145764,"seo":145765,"stem":145766,"__hash__":145767},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145759,"toc":145760},[],{"title":30,"searchDepth":66,"depth":66,"links":145761},[],"自己正经开始学编程的第一门语言！",{"category":92852},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145757,"description":145762},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145769,"title":145770,"body":145771,"description":23408,"extension":70,"meta":146918,"navigation":72,"path":146919,"seo":146920,"stem":146921,"__hash__":146922},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145772,"toc":146894},[145773,145776,145780,145783,145786,145811,145814,145820,145824,145827,145854,145857,145897,145900,145912,145915,145921,145925,145929,145956,145973,145980,145984,145987,146013,146016,146020,146023,146063,146066,146083,146089,146093,146098,146142,146145,146163,146166,146234,146238,146245,146248,146263,146266,146275,146278,146289,146292,146301,146304,146321,146324,146339,146343,146347,146350,146352,146372,146376,146379,146382,146393,146396,146402,146406,146412,146439,146442,146454,146457,146468,146471,146477,146481,146487,146537,146540,146582,146585,146618,146621,146655,146659,146662,146682,146685,146721,146724,146737,146741,146745,146751,146754,146767,146771,146774,146780,146783,146787,146790,146793,146842,146846,146862,146868,146875,146881,146891],[10,145774,145770],{"id":145775},"_1-python环境与第一个程序",[18,145777,145779],{"id":145778},"_11-什么是python","1.1 什么是Python",[14,145781,145782],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,145784,145785],{},"理解 Python 时抓住三个关键词：",[98,145787,145788,145791,145794],{},[101,145789,145790],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[101,145792,145793],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[101,145795,145796,145797,367,145800,367,145803,367,145806,367,145808,28398],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[141,145798,145799],{},"os",[141,145801,145802],{},"sys",[141,145804,145805],{},"json",[141,145807,57873],{},[141,145809,145810],{},"datetime",[14,145812,145813],{},"Python 程序的运行链路：",[135,145815,145818],{"className":145816,"code":145817,"language":5218,"meta":30},[5216],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[141,145819,145817],{"__ignoreMap":30},[18,145821,145823],{"id":145822},"_12-python解释器","1.2 Python解释器",[14,145825,145826],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[135,145828,145830],{"className":23854,"code":145829,"language":23856,"meta":30,"style":30},"python --version\npython3 --version\npython\npython3\n",[141,145831,145832,145838,145844,145849],{"__ignoreMap":30},[144,145833,145834,145836],{"class":146,"line":147},[144,145835,30393],{"class":1993},[144,145837,26306],{"class":203},[144,145839,145840,145842],{"class":146,"line":66},[144,145841,100892],{"class":1993},[144,145843,26306],{"class":203},[144,145845,145846],{"class":146,"line":1210},[144,145847,145848],{"class":1993},"python\n",[144,145850,145851],{"class":146,"line":1225},[144,145852,145853],{"class":1993},"python3\n",[14,145855,145856],{},"进入交互模式后，可以直接输入表达式：",[135,145858,145860],{"className":30391,"code":145859,"language":30393,"meta":30,"style":30},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[141,145861,145862,145873,145878,145892],{"__ignoreMap":30},[144,145863,145864,145867,145869,145871],{"class":146,"line":147},[144,145865,145866],{"class":150},">>>",[144,145868,25131],{"class":203},[144,145870,45579],{"class":150},[144,145872,47736],{"class":203},[144,145874,145875],{"class":146,"line":66},[144,145876,145877],{"class":203},"3\n",[144,145879,145880,145882,145885,145887,145890],{"class":146,"line":1210},[144,145881,145866],{"class":150},[144,145883,145884],{"class":203}," print",[144,145886,155],{"class":154},[144,145888,145889],{"class":259},"\"hello python\"",[144,145891,161],{"class":154},[144,145893,145894],{"class":146,"line":1225},[144,145895,145896],{"class":154},"hello python\n",[14,145898,145899],{},"退出交互模式：",[135,145901,145903],{"className":30391,"code":145902,"language":30393,"meta":30,"style":30},"exit()\n",[141,145904,145905],{"__ignoreMap":30},[144,145906,145907,145910],{"class":146,"line":147},[144,145908,145909],{"class":203},"exit",[144,145911,2006],{"class":154},[14,145913,145914],{},"或使用快捷键：",[135,145916,145919],{"className":145917,"code":145918,"language":5218,"meta":30},[5216],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[141,145920,145918],{"__ignoreMap":30},[18,145922,145924],{"id":145923},"_13-安装python","1.3 安装Python",[115,145926,145928],{"id":145927},"_131-windows安装","1.3.1 Windows安装",[98,145930,145931,145938,145941,145947,145953],{},[101,145932,145933,145934],{},"打开 Python 官网：",[393,145935,145936],{"href":145936,"rel":145937},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[23897],[101,145939,145940],{},"下载 Windows Installer。",[101,145942,145943,145944,28398],{},"安装时勾选 ",[141,145945,145946],{},"Add Python to PATH",[101,145948,145949,145950,28398],{},"点击 ",[141,145951,145952],{},"Install Now",[101,145954,145955],{},"安装完成后打开命令提示符验证：",[135,145957,145959],{"className":23854,"code":145958,"language":23856,"meta":30,"style":30},"python --version\npip --version\n",[141,145960,145961,145967],{"__ignoreMap":30},[144,145962,145963,145965],{"class":146,"line":147},[144,145964,30393],{"class":1993},[144,145966,26306],{"class":203},[144,145968,145969,145971],{"class":146,"line":66},[144,145970,23863],{"class":1993},[144,145972,26306],{"class":203},[14,145974,145975,145976,145979],{},"如果提示 ",[141,145977,145978],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[115,145981,145983],{"id":145982},"_132-macos安装","1.3.2 macOS安装",[14,145985,145986],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[135,145988,145990],{"className":23854,"code":145989,"language":23856,"meta":30,"style":30},"brew install python\npython3 --version\npip3 --version\n",[141,145991,145992,146001,146007],{"__ignoreMap":30},[144,145993,145994,145997,145999],{"class":146,"line":147},[144,145995,145996],{"class":1993},"brew",[144,145998,23866],{"class":259},[144,146000,124331],{"class":259},[144,146002,146003,146005],{"class":146,"line":66},[144,146004,100892],{"class":1993},[144,146006,26306],{"class":203},[144,146008,146009,146011],{"class":146,"line":1210},[144,146010,119713],{"class":1993},[144,146012,26306],{"class":203},[14,146014,146015],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[115,146017,146019],{"id":146018},"_133-linux安装","1.3.3 Linux安装",[14,146021,146022],{},"Ubuntu\u002FDebian：",[135,146024,146026],{"className":23854,"code":146025,"language":23856,"meta":30,"style":30},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[141,146027,146028,146036,146051,146057],{"__ignoreMap":30},[144,146029,146030,146032,146034],{"class":146,"line":147},[144,146031,24589],{"class":1993},[144,146033,117330],{"class":259},[144,146035,26255],{"class":259},[144,146037,146038,146040,146042,146044,146046,146048],{"class":146,"line":66},[144,146039,24589],{"class":1993},[144,146041,117330],{"class":259},[144,146043,23866],{"class":259},[144,146045,104416],{"class":259},[144,146047,100811],{"class":259},[144,146049,146050],{"class":259}," python3-venv\n",[144,146052,146053,146055],{"class":146,"line":1210},[144,146054,100892],{"class":1993},[144,146056,26306],{"class":203},[144,146058,146059,146061],{"class":146,"line":1225},[144,146060,119713],{"class":1993},[144,146062,26306],{"class":203},[14,146064,146065],{},"Fedora：",[135,146067,146069],{"className":23854,"code":146068,"language":23856,"meta":30,"style":30},"sudo dnf install python3 python3-pip\n",[141,146070,146071],{"__ignoreMap":30},[144,146072,146073,146075,146077,146079,146081],{"class":146,"line":147},[144,146074,24589],{"class":1993},[144,146076,26328],{"class":259},[144,146078,23866],{"class":259},[144,146080,104416],{"class":259},[144,146082,119778],{"class":259},[14,146084,146085,146086,146088],{},"Linux 上通常使用 ",[141,146087,100892],{}," 命令，避免和系统旧版本 Python 冲突。",[18,146090,146092],{"id":146091},"_14-pip包管理器","1.4 pip包管理器",[14,146094,146095,146097],{},[141,146096,23863],{}," 用来安装第三方库。",[135,146099,146101],{"className":23854,"code":146100,"language":23856,"meta":30,"style":30},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[141,146102,146103,146112,146121,146129,146135],{"__ignoreMap":30},[144,146104,146105,146107,146109],{"class":146,"line":147},[144,146106,23863],{"class":1993},[144,146108,23866],{"class":259},[144,146110,146111],{"class":259}," requests\n",[144,146113,146114,146116,146119],{"class":146,"line":66},[144,146115,23863],{"class":1993},[144,146117,146118],{"class":259}," uninstall",[144,146120,146111],{"class":259},[144,146122,146123,146125,146127],{"class":146,"line":1210},[144,146124,23863],{"class":1993},[144,146126,117587],{"class":259},[144,146128,146111],{"class":259},[144,146130,146131,146133],{"class":146,"line":1225},[144,146132,23863],{"class":1993},[144,146134,118968],{"class":259},[144,146136,146137,146139],{"class":146,"line":1231},[144,146138,23863],{"class":1993},[144,146140,146141],{"class":259}," freeze\n",[14,146143,146144],{},"国内网络较慢时可以临时使用镜像：",[135,146146,146148],{"className":23854,"code":146147,"language":23856,"meta":30,"style":30},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[141,146149,146150],{"__ignoreMap":30},[144,146151,146152,146154,146156,146159,146161],{"class":146,"line":147},[144,146153,23863],{"class":1993},[144,146155,23866],{"class":259},[144,146157,146158],{"class":259}," requests",[144,146160,26443],{"class":203},[144,146162,119741],{"class":259},[14,146164,146165],{},"常见第三方库：",[292,146167,146168,146177],{},[295,146169,146170],{},[298,146171,146172,146175],{},[301,146173,146174],{},"库",[301,146176,102709],{},[339,146178,146179,146187,146194,146202,146210,146218,146226],{},[298,146180,146181,146184],{},[344,146182,146183],{},"requests",[344,146185,146186],{},"网络请求",[298,146188,146189,146191],{},[344,146190,100639],{},[344,146192,146193],{},"数值计算",[298,146195,146196,146199],{},[344,146197,146198],{},"pandas",[344,146200,146201],{},"表格数据处理",[298,146203,146204,146207],{},[344,146205,146206],{},"matplotlib",[344,146208,146209],{},"绘图",[298,146211,146212,146215],{},[344,146213,146214],{},"pyecharts",[344,146216,146217],{},"ECharts 图表",[298,146219,146220,146223],{},[344,146221,146222],{},"flask",[344,146224,146225],{},"Web 后端",[298,146227,146228,146231],{},[344,146229,146230],{},"pytest",[344,146232,146233],{},"自动化测试",[18,146235,146237],{"id":146236},"_15-虚拟环境","1.5 虚拟环境",[14,146239,146240,146241,146244],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[141,146242,146243],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146246,146247],{},"创建虚拟环境：",[135,146249,146251],{"className":23854,"code":146250,"language":23856,"meta":30,"style":30},"python -m venv .venv\n",[141,146252,146253],{"__ignoreMap":30},[144,146254,146255,146257,146259,146261],{"class":146,"line":147},[144,146256,30393],{"class":1993},[144,146258,100895],{"class":203},[144,146260,100898],{"class":259},[144,146262,100901],{"class":259},[14,146264,146265],{},"Windows 激活：",[135,146267,146269],{"className":23854,"code":146268,"language":23856,"meta":30,"style":30},".venv\\Scripts\\activate\n",[141,146270,146271],{"__ignoreMap":30},[144,146272,146273],{"class":146,"line":147},[144,146274,146268],{"class":1993},[14,146276,146277],{},"macOS\u002FLinux 激活：",[135,146279,146281],{"className":23854,"code":146280,"language":23856,"meta":30,"style":30},"source .venv\u002Fbin\u002Factivate\n",[141,146282,146283],{"__ignoreMap":30},[144,146284,146285,146287],{"class":146,"line":147},[144,146286,100906],{"class":203},[144,146288,100909],{"class":259},[14,146290,146291],{},"退出虚拟环境：",[135,146293,146295],{"className":23854,"code":146294,"language":23856,"meta":30,"style":30},"deactivate\n",[141,146296,146297],{"__ignoreMap":30},[144,146298,146299],{"class":146,"line":147},[144,146300,146294],{"class":1993},[14,146302,146303],{},"保存依赖：",[135,146305,146307],{"className":23854,"code":146306,"language":23856,"meta":30,"style":30},"pip freeze > requirements.txt\n",[141,146308,146309],{"__ignoreMap":30},[144,146310,146311,146313,146316,146318],{"class":146,"line":147},[144,146312,23863],{"class":1993},[144,146314,146315],{"class":259}," freeze",[144,146317,26235],{"class":150},[144,146319,146320],{"class":259}," requirements.txt\n",[14,146322,146323],{},"安装依赖：",[135,146325,146327],{"className":23854,"code":146326,"language":23856,"meta":30,"style":30},"pip install -r requirements.txt\n",[141,146328,146329],{"__ignoreMap":30},[144,146330,146331,146333,146335,146337],{"class":146,"line":147},[144,146332,23863],{"class":1993},[144,146334,23866],{"class":259},[144,146336,119652],{"class":203},[144,146338,146320],{"class":259},[18,146340,146342],{"id":146341},"_16-开发工具","1.6 开发工具",[115,146344,146346],{"id":146345},"_161-pycharm","1.6.1 PyCharm",[14,146348,146349],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146351,122075],{},[98,146353,146354,146357,146360,146366,146369],{},[101,146355,146356],{},"New Project：创建项目。",[101,146358,146359],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[101,146361,146362,146363,125996],{},"New Python File：创建 ",[141,146364,146365],{},".py",[101,146367,146368],{},"Run：运行当前文件。",[101,146370,146371],{},"Debug：断点调试。",[115,146373,146375],{"id":146374},"_162-vs-code","1.6.2 VS Code",[14,146377,146378],{},"VS Code 轻量，适合后续多语言开发。",[14,146380,146381],{},"建议安装插件：",[98,146383,146384,146387,146390],{},[101,146385,146386],{},"Python。",[101,146388,146389],{},"Pylance。",[101,146391,146392],{},"Jupyter。",[14,146394,146395],{},"选择解释器：",[135,146397,146400],{"className":146398,"code":146399,"language":5218,"meta":30},[5216],"Ctrl + Shift + P -> Python: Select Interpreter\n",[141,146401,146399],{"__ignoreMap":30},[18,146403,146405],{"id":146404},"_17-第一个python程序","1.7 第一个Python程序",[14,146407,146408,146409,24631],{},"创建文件 ",[141,146410,146411],{},"hello.py",[135,146413,146415],{"className":30391,"code":146414,"language":30393,"meta":30,"style":30},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[141,146416,146417,146428],{"__ignoreMap":30},[144,146418,146419,146421,146423,146426],{"class":146,"line":147},[144,146420,30428],{"class":203},[144,146422,155],{"class":154},[144,146424,146425],{"class":259},"\"Hello World\"",[144,146427,161],{"class":154},[144,146429,146430,146432,146434,146437],{"class":146,"line":66},[144,146431,30428],{"class":203},[144,146433,155],{"class":154},[144,146435,146436],{"class":259},"\"你好，Python\"",[144,146438,161],{"class":154},[14,146440,146441],{},"在终端运行：",[135,146443,146445],{"className":23854,"code":146444,"language":23856,"meta":30,"style":30},"python hello.py\n",[141,146446,146447],{"__ignoreMap":30},[144,146448,146449,146451],{"class":146,"line":147},[144,146450,30393],{"class":1993},[144,146452,146453],{"class":259}," hello.py\n",[14,146455,146456],{},"或：",[135,146458,146460],{"className":23854,"code":146459,"language":23856,"meta":30,"style":30},"python3 hello.py\n",[141,146461,146462],{"__ignoreMap":30},[144,146463,146464,146466],{"class":146,"line":147},[144,146465,100892],{"class":1993},[144,146467,146453],{"class":259},[14,146469,146470],{},"输出：",[135,146472,146475],{"className":146473,"code":146474,"language":5218,"meta":30},[5216],"Hello World\n你好，Python\n",[141,146476,146474],{"__ignoreMap":30},[18,146478,146480],{"id":146479},"_18-print函数","1.8 print函数",[14,146482,146483,146486],{},[141,146484,146485],{},"print()"," 用来输出内容。",[135,146488,146490],{"className":30391,"code":146489,"language":30393,"meta":30,"style":30},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[141,146491,146492,146502,146512,146522],{"__ignoreMap":30},[144,146493,146494,146496,146498,146500],{"class":146,"line":147},[144,146495,30428],{"class":203},[144,146497,155],{"class":154},[144,146499,5875],{"class":259},[144,146501,161],{"class":154},[144,146503,146504,146506,146508,146510],{"class":146,"line":66},[144,146505,30428],{"class":203},[144,146507,155],{"class":154},[144,146509,466],{"class":203},[144,146511,161],{"class":154},[144,146513,146514,146516,146518,146520],{"class":146,"line":1210},[144,146515,30428],{"class":203},[144,146517,155],{"class":154},[144,146519,204],{"class":203},[144,146521,161],{"class":154},[144,146523,146524,146526,146528,146531,146533,146535],{"class":146,"line":1225},[144,146525,30428],{"class":203},[144,146527,155],{"class":154},[144,146529,146530],{"class":259},"\"年龄:\"",[144,146532,12466],{"class":154},[144,146534,805],{"class":203},[144,146536,161],{"class":154},[14,146538,146539],{},"多个内容用逗号隔开，默认中间加空格：",[135,146541,146543],{"className":30391,"code":146542,"language":30393,"meta":30,"style":30},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[141,146544,146545,146555,146565],{"__ignoreMap":30},[144,146546,146547,146550,146552],{"class":146,"line":147},[144,146548,146549],{"class":154},"name ",[144,146551,200],{"class":150},[144,146553,146554],{"class":259}," \"张三\"\n",[144,146556,146557,146560,146562],{"class":146,"line":66},[144,146558,146559],{"class":154},"age ",[144,146561,200],{"class":150},[144,146563,146564],{"class":203}," 18\n",[144,146566,146567,146569,146571,146574,146577,146579],{"class":146,"line":1210},[144,146568,30428],{"class":203},[144,146570,155],{"class":154},[144,146572,146573],{"class":259},"\"姓名:\"",[144,146575,146576],{"class":154},", name, ",[144,146578,146530],{"class":259},[144,146580,146581],{"class":154},", age)\n",[14,146583,146584],{},"修改分隔符：",[135,146586,146588],{"className":30391,"code":146587,"language":30393,"meta":30,"style":30},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[141,146589,146590],{"__ignoreMap":30},[144,146591,146592,146594,146596,146599,146601,146603,146605,146607,146609,146612,146614,146616],{"class":146,"line":147},[144,146593,30428],{"class":203},[144,146595,155],{"class":154},[144,146597,146598],{"class":259},"\"2024\"",[144,146600,12466],{"class":154},[144,146602,54329],{"class":259},[144,146604,12466],{"class":154},[144,146606,54329],{"class":259},[144,146608,12466],{"class":154},[144,146610,146611],{"class":5247},"sep",[144,146613,200],{"class":150},[144,146615,32496],{"class":259},[144,146617,161],{"class":154},[14,146619,146620],{},"修改结尾符：",[135,146622,146624],{"className":30391,"code":146623,"language":30393,"meta":30,"style":30},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[141,146625,146626,146644],{"__ignoreMap":30},[144,146627,146628,146630,146632,146634,146636,146638,146640,146642],{"class":146,"line":147},[144,146629,30428],{"class":203},[144,146631,155],{"class":154},[144,146633,5875],{"class":259},[144,146635,12466],{"class":154},[144,146637,45814],{"class":5247},[144,146639,200],{"class":150},[144,146641,4389],{"class":259},[144,146643,161],{"class":154},[144,146645,146646,146648,146650,146653],{"class":146,"line":66},[144,146647,30428],{"class":203},[144,146649,155],{"class":154},[144,146651,146652],{"class":259},"\"python\"",[144,146654,161],{"class":154},[18,146656,146658],{"id":146657},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,146660,146661],{},"交互运行适合临时验证：",[135,146663,146665],{"className":30391,"code":146664,"language":30393,"meta":30,"style":30},">>> 10 * 3\n30\n",[141,146666,146667,146677],{"__ignoreMap":30},[144,146668,146669,146671,146673,146675],{"class":146,"line":147},[144,146670,145866],{"class":150},[144,146672,2068],{"class":203},[144,146674,6549],{"class":150},[144,146676,120049],{"class":203},[144,146678,146679],{"class":146,"line":66},[144,146680,146681],{"class":203},"30\n",[14,146683,146684],{},"脚本运行适合保存程序：",[135,146686,146688],{"className":30391,"code":146687,"language":30393,"meta":30,"style":30},"price = 8\ncount = 5\nprint(price * count)\n",[141,146689,146690,146700,146709],{"__ignoreMap":30},[144,146691,146692,146695,146697],{"class":146,"line":147},[144,146693,146694],{"class":154},"price ",[144,146696,200],{"class":150},[144,146698,146699],{"class":203}," 8\n",[144,146701,146702,146705,146707],{"class":146,"line":66},[144,146703,146704],{"class":154},"count ",[144,146706,200],{"class":150},[144,146708,54440],{"class":203},[144,146710,146711,146713,146716,146718],{"class":146,"line":1210},[144,146712,30428],{"class":203},[144,146714,146715],{"class":154},"(price ",[144,146717,610],{"class":150},[144,146719,146720],{"class":154}," count)\n",[14,146722,146723],{},"实际学习中推荐：",[98,146725,146726,146729,146734],{},[101,146727,146728],{},"临时试一个语法，用交互模式。",[101,146730,146731,146732,125996],{},"写完整练习，用 ",[141,146733,146365],{},[101,146735,146736],{},"写项目，用独立目录和虚拟环境。",[18,146738,146740],{"id":146739},"_110-常见错误","1.10 常见错误",[115,146742,146744],{"id":146743},"_1101-命令找不到","1.10.1 命令找不到",[135,146746,146749],{"className":146747,"code":146748,"language":5218,"meta":30},[5216],"python: command not found\n",[141,146750,146748],{"__ignoreMap":30},[14,146752,146753],{},"原因：",[98,146755,146756,146759,146762],{},[101,146757,146758],{},"没安装 Python。",[101,146760,146761],{},"PATH 没配置。",[101,146763,146764,146765,28398],{},"Linux\u002FmacOS 应该使用 ",[141,146766,100892],{},[115,146768,146770],{"id":146769},"_1102-文件名冲突","1.10.2 文件名冲突",[14,146772,146773],{},"不要把文件命名为：",[135,146775,146778],{"className":146776,"code":146777,"language":5218,"meta":30},[5216],"random.py\njson.py\ntime.py\nrequests.py\n",[141,146779,146777],{"__ignoreMap":30},[14,146781,146782],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[115,146784,146786],{"id":146785},"_1103-中文乱码","1.10.3 中文乱码",[14,146788,146789],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,146791,146792],{},"如果读写文件出现乱码，要明确指定编码：",[135,146794,146796],{"className":30391,"code":146795,"language":30393,"meta":30,"style":30},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[141,146797,146798,146832],{"__ignoreMap":30},[144,146799,146800,146802,146805,146807,146810,146812,146815,146817,146820,146822,146825,146827,146829],{"class":146,"line":147},[144,146801,107846],{"class":150},[144,146803,146804],{"class":203}," open",[144,146806,155],{"class":154},[144,146808,146809],{"class":259},"\"data.txt\"",[144,146811,12466],{"class":154},[144,146813,146814],{"class":259},"\"r\"",[144,146816,12466],{"class":154},[144,146818,146819],{"class":5247},"encoding",[144,146821,200],{"class":150},[144,146823,146824],{"class":259},"\"utf-8\"",[144,146826,13745],{"class":154},[144,146828,31396],{"class":150},[144,146830,146831],{"class":154}," f:\n",[144,146833,146834,146837,146839],{"class":146,"line":66},[144,146835,146836],{"class":154},"    content ",[144,146838,200],{"class":150},[144,146840,146841],{"class":154}," f.read()\n",[18,146843,146845],{"id":146844},"_111-本章练习","1.11 本章练习",[98,146847,146848,146851,146857],{},[101,146849,146850],{},"安装 Python，并在终端输出版本号。",[101,146852,146853,146854,146856],{},"新建 ",[141,146855,146411],{},"，输出自己的姓名、年龄、学习目标。",[101,146858,104379,146859,146861],{},[141,146860,146485],{}," 输出下面格式：",[135,146863,146866],{"className":146864,"code":146865,"language":5218,"meta":30},[5216],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[141,146867,146865],{"__ignoreMap":30},[98,146869,146870],{"start":1225},[101,146871,104379,146872,146874],{},[141,146873,146611],{}," 输出日期：",[135,146876,146879],{"className":146877,"code":146878,"language":5218,"meta":30},[5216],"2024-10-10\n",[141,146880,146878],{"__ignoreMap":30},[98,146882,146883],{"start":1231},[101,146884,104379,146885,146887,146888,146890],{},[141,146886,45814],{}," 让两次 ",[141,146889,146485],{}," 输出在同一行。",[5157,146892,146893],{},"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":30,"searchDepth":66,"depth":66,"links":146895},[146896,146897,146898,146903,146904,146905,146909,146910,146911,146912,146917],{"id":145778,"depth":66,"text":145779},{"id":145822,"depth":66,"text":145823},{"id":145923,"depth":66,"text":145924,"children":146899},[146900,146901,146902],{"id":145927,"depth":1210,"text":145928},{"id":145982,"depth":1210,"text":145983},{"id":146018,"depth":1210,"text":146019},{"id":146091,"depth":66,"text":146092},{"id":146236,"depth":66,"text":146237},{"id":146341,"depth":66,"text":146342,"children":146906},[146907,146908],{"id":146345,"depth":1210,"text":146346},{"id":146374,"depth":1210,"text":146375},{"id":146404,"depth":66,"text":146405},{"id":146479,"depth":66,"text":146480},{"id":146657,"depth":66,"text":146658},{"id":146739,"depth":66,"text":146740,"children":146913},[146914,146915,146916],{"id":146743,"depth":1210,"text":146744},{"id":146769,"depth":1210,"text":146770},{"id":146785,"depth":1210,"text":146786},{"id":146844,"depth":66,"text":146845},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145770,"description":23408},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146924,"title":146925,"body":146926,"description":23408,"extension":70,"meta":149330,"navigation":72,"path":149331,"seo":149332,"stem":149333,"__hash__":149334},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146927,"toc":149315},[146928,146931,146935,146938,146941,146958,146961,147003,147006,147010,147013,147016,147053,147056,147090,147093,147185,147189,147203,147206,147233,147236,147240,147343,147350,147353,147370,147374,147381,147570,147573,147646,147650,147653,147737,147740,147772,147776,147980,147983,147987,147993,148095,148098,148354,148358,148361,148364,148378,148380,148566,148570,148932,148938,148942,148945,149069,149072,149251,149254,149258,149291,149295,149312],[10,146929,146925],{"id":146930},"_10-json与pyecharts折线图",[18,146932,146934],{"id":146933},"_101-数据可视化","10.1 数据可视化",[14,146936,146937],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,146939,146940],{},"常见图表：",[98,146942,146943,146946,146949,146952,146955],{},[101,146944,146945],{},"折线图：看趋势。",[101,146947,146948],{},"柱状图：看分类对比。",[101,146950,146951],{},"饼图：看占比。",[101,146953,146954],{},"地图：看地域分布。",[101,146956,146957],{},"散点图：看两个变量之间的关系。",[14,146959,146960],{},"Python 可视化常用库：",[292,146962,146963,146971],{},[295,146964,146965],{},[298,146966,146967,146969],{},[301,146968,146174],{},[301,146970,23772],{},[339,146972,146973,146980,146988,146995],{},[298,146974,146975,146977],{},[344,146976,146206],{},[344,146978,146979],{},"基础、经典、可定制",[298,146981,146982,146985],{},[344,146983,146984],{},"seaborn",[344,146986,146987],{},"统计图表更美观",[298,146989,146990,146992],{},[344,146991,146214],{},[344,146993,146994],{},"生成交互式网页图表",[298,146996,146997,147000],{},[344,146998,146999],{},"plotly",[344,147001,147002],{},"交互图表能力强",[14,147004,147005],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[18,147007,147009],{"id":147008},"_102-json回顾","10.2 JSON回顾",[14,147011,147012],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,147014,147015],{},"Python 字典：",[135,147017,147019],{"className":30391,"code":147018,"language":30393,"meta":30,"style":30},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[141,147020,147021,147029,147040,147049],{"__ignoreMap":30},[144,147022,147023,147025,147027],{"class":146,"line":147},[144,147024,101671],{"class":154},[144,147026,200],{"class":150},[144,147028,15603],{"class":154},[144,147030,147031,147034,147036,147038],{"class":146,"line":66},[144,147032,147033],{"class":259},"    \"name\"",[144,147035,51450],{"class":154},[144,147037,69282],{"class":259},[144,147039,31479],{"class":154},[144,147041,147042,147045,147047],{"class":146,"line":1210},[144,147043,147044],{"class":259},"    \"value\"",[144,147046,51450],{"class":154},[144,147048,97471],{"class":203},[144,147050,147051],{"class":146,"line":1225},[144,147052,1595],{"class":154},[14,147054,147055],{},"JSON 字符串：",[135,147057,147060],{"className":147058,"code":147059,"language":145805,"meta":30,"style":30},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[141,147061,147062,147066,147077,147086],{"__ignoreMap":30},[144,147063,147064],{"class":146,"line":147},[144,147065,1576],{"class":154},[144,147067,147068,147071,147073,147075],{"class":146,"line":66},[144,147069,147070],{"class":203},"  \"name\"",[144,147072,51450],{"class":154},[144,147074,69282],{"class":259},[144,147076,31479],{"class":154},[144,147078,147079,147082,147084],{"class":146,"line":1210},[144,147080,147081],{"class":203},"  \"value\"",[144,147083,51450],{"class":154},[144,147085,97471],{"class":203},[144,147087,147088],{"class":146,"line":1225},[144,147089,1595],{"class":154},[14,147091,147092],{},"Python 与 JSON 的转换：",[135,147094,147096],{"className":30391,"code":147095,"language":30393,"meta":30,"style":30},"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",[141,147097,147098,147105,147109,147134,147138,147157,147164,147168,147178],{"__ignoreMap":30},[144,147099,147100,147102],{"class":146,"line":147},[144,147101,30405],{"class":150},[144,147103,147104],{"class":154}," json\n",[144,147106,147107],{"class":146,"line":66},[144,147108,2430],{"emptyLinePlaceholder":72},[144,147110,147111,147113,147115,147117,147119,147121,147123,147125,147128,147130,147132],{"class":146,"line":1210},[144,147112,101671],{"class":154},[144,147114,200],{"class":150},[144,147116,4478],{"class":154},[144,147118,62692],{"class":259},[144,147120,51450],{"class":154},[144,147122,69282],{"class":259},[144,147124,12466],{"class":154},[144,147126,147127],{"class":259},"\"value\"",[144,147129,51450],{"class":154},[144,147131,466],{"class":203},[144,147133,1595],{"class":154},[144,147135,147136],{"class":146,"line":1225},[144,147137,2430],{"emptyLinePlaceholder":72},[144,147139,147140,147143,147145,147148,147151,147153,147155],{"class":146,"line":1231},[144,147141,147142],{"class":154},"json_text ",[144,147144,200],{"class":150},[144,147146,147147],{"class":154}," json.dumps(data, ",[144,147149,147150],{"class":5247},"ensure_ascii",[144,147152,200],{"class":150},[144,147154,34000],{"class":203},[144,147156,161],{"class":154},[144,147158,147159,147161],{"class":146,"line":1245},[144,147160,30428],{"class":203},[144,147162,147163],{"class":154},"(json_text)\n",[144,147165,147166],{"class":146,"line":1251},[144,147167,2430],{"emptyLinePlaceholder":72},[144,147169,147170,147173,147175],{"class":146,"line":1342},[144,147171,147172],{"class":154},"new_data ",[144,147174,200],{"class":150},[144,147176,147177],{"class":154}," json.loads(json_text)\n",[144,147179,147180,147182],{"class":146,"line":1348},[144,147181,30428],{"class":203},[144,147183,147184],{"class":154},"(new_data)\n",[18,147186,147188],{"id":147187},"_103-安装pyecharts","10.3 安装pyecharts",[135,147190,147192],{"className":23854,"code":147191,"language":23856,"meta":30,"style":30},"pip install pyecharts\n",[141,147193,147194],{"__ignoreMap":30},[144,147195,147196,147198,147200],{"class":146,"line":147},[144,147197,23863],{"class":1993},[144,147199,23866],{"class":259},[144,147201,147202],{"class":259}," pyecharts\n",[14,147204,147205],{},"验证：",[135,147207,147209],{"className":30391,"code":147208,"language":30393,"meta":30,"style":30},"import pyecharts\n\nprint(pyecharts.__version__)\n",[141,147210,147211,147217,147221],{"__ignoreMap":30},[144,147212,147213,147215],{"class":146,"line":147},[144,147214,30405],{"class":150},[144,147216,147202],{"class":154},[144,147218,147219],{"class":146,"line":66},[144,147220,2430],{"emptyLinePlaceholder":72},[144,147222,147223,147225,147228,147231],{"class":146,"line":1210},[144,147224,30428],{"class":203},[144,147226,147227],{"class":154},"(pyecharts.",[144,147229,147230],{"class":203},"__version__",[144,147232,161],{"class":154},[14,147234,147235],{},"如果使用虚拟环境，要先激活环境再安装。",[18,147237,147239],{"id":147238},"_104-第一个折线图","10.4 第一个折线图",[135,147241,147243],{"className":30391,"code":147242,"language":30393,"meta":30,"style":30},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[141,147244,147245,147257,147261,147271,147301,147333],{"__ignoreMap":30},[144,147246,147247,147249,147252,147254],{"class":146,"line":147},[144,147248,30750],{"class":150},[144,147250,147251],{"class":154}," pyecharts.charts ",[144,147253,30405],{"class":150},[144,147255,147256],{"class":154}," Line\n",[144,147258,147259],{"class":146,"line":66},[144,147260,2430],{"emptyLinePlaceholder":72},[144,147262,147263,147266,147268],{"class":146,"line":1210},[144,147264,147265],{"class":154},"line ",[144,147267,200],{"class":150},[144,147269,147270],{"class":154}," Line()\n",[144,147272,147273,147276,147279,147281,147284,147286,147289,147291,147294,147296,147299],{"class":146,"line":1225},[144,147274,147275],{"class":154},"line.add_xaxis([",[144,147277,147278],{"class":259},"\"周一\"",[144,147280,12466],{"class":154},[144,147282,147283],{"class":259},"\"周二\"",[144,147285,12466],{"class":154},[144,147287,147288],{"class":259},"\"周三\"",[144,147290,12466],{"class":154},[144,147292,147293],{"class":259},"\"周四\"",[144,147295,12466],{"class":154},[144,147297,147298],{"class":259},"\"周五\"",[144,147300,4687],{"class":154},[144,147302,147303,147306,147309,147311,147313,147315,147317,147319,147321,147323,147326,147328,147331],{"class":146,"line":1231},[144,147304,147305],{"class":154},"line.add_yaxis(",[144,147307,147308],{"class":259},"\"销售额\"",[144,147310,77531],{"class":154},[144,147312,466],{"class":203},[144,147314,12466],{"class":154},[144,147316,972],{"class":203},[144,147318,12466],{"class":154},[144,147320,1017],{"class":203},[144,147322,12466],{"class":154},[144,147324,147325],{"class":203},"150",[144,147327,12466],{"class":154},[144,147329,147330],{"class":203},"180",[144,147332,4687],{"class":154},[144,147334,147335,147338,147341],{"class":146,"line":1245},[144,147336,147337],{"class":154},"line.render(",[144,147339,147340],{"class":259},"\"line.html\"",[144,147342,161],{"class":154},[14,147344,147345,147346,147349],{},"运行后会生成 ",[141,147347,147348],{},"line.html","，用浏览器打开即可看到图表。",[14,147351,147352],{},"核心步骤：",[98,147354,147355,147358,147361,147364,147367],{},[101,147356,147357],{},"导入图表类。",[101,147359,147360],{},"创建图表对象。",[101,147362,147363],{},"添加 x 轴数据。",[101,147365,147366],{},"添加 y 轴数据。",[101,147368,147369],{},"渲染为 HTML。",[18,147371,147373],{"id":147372},"_105-全局配置","10.5 全局配置",[14,147375,147376,147377,147380],{},"常用配置在 ",[141,147378,147379],{},"pyecharts.options"," 中。",[135,147382,147384],{"className":30391,"code":147383,"language":30393,"meta":30,"style":30},"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",[141,147385,147386,147403,147413,147417,147425,147449,147477,147482,147501,147520,147538,147558,147562],{"__ignoreMap":30},[144,147387,147388,147390,147393,147395,147398,147400],{"class":146,"line":147},[144,147389,30750],{"class":150},[144,147391,147392],{"class":154}," pyecharts ",[144,147394,30405],{"class":150},[144,147396,147397],{"class":154}," options ",[144,147399,31396],{"class":150},[144,147401,147402],{"class":154}," opts\n",[144,147404,147405,147407,147409,147411],{"class":146,"line":66},[144,147406,30750],{"class":150},[144,147408,147251],{"class":154},[144,147410,30405],{"class":150},[144,147412,147256],{"class":154},[144,147414,147415],{"class":146,"line":1210},[144,147416,2430],{"emptyLinePlaceholder":72},[144,147418,147419,147421,147423],{"class":146,"line":1225},[144,147420,147265],{"class":154},[144,147422,200],{"class":150},[144,147424,147270],{"class":154},[144,147426,147427,147429,147431,147433,147435,147437,147439,147441,147443,147445,147447],{"class":146,"line":1231},[144,147428,147275],{"class":154},[144,147430,147278],{"class":259},[144,147432,12466],{"class":154},[144,147434,147283],{"class":259},[144,147436,12466],{"class":154},[144,147438,147288],{"class":259},[144,147440,12466],{"class":154},[144,147442,147293],{"class":259},[144,147444,12466],{"class":154},[144,147446,147298],{"class":259},[144,147448,4687],{"class":154},[144,147450,147451,147453,147455,147457,147459,147461,147463,147465,147467,147469,147471,147473,147475],{"class":146,"line":1245},[144,147452,147305],{"class":154},[144,147454,147308],{"class":259},[144,147456,77531],{"class":154},[144,147458,466],{"class":203},[144,147460,12466],{"class":154},[144,147462,972],{"class":203},[144,147464,12466],{"class":154},[144,147466,1017],{"class":203},[144,147468,12466],{"class":154},[144,147470,147325],{"class":203},[144,147472,12466],{"class":154},[144,147474,147330],{"class":203},[144,147476,4687],{"class":154},[144,147478,147479],{"class":146,"line":1251},[144,147480,147481],{"class":154},"line.set_global_opts(\n",[144,147483,147484,147487,147489,147492,147494,147496,147499],{"class":146,"line":1342},[144,147485,147486],{"class":5247},"    title_opts",[144,147488,200],{"class":150},[144,147490,147491],{"class":154},"opts.TitleOpts(",[144,147493,51420],{"class":5247},[144,147495,200],{"class":150},[144,147497,147498],{"class":259},"\"一周销售额\"",[144,147500,38060],{"class":154},[144,147502,147503,147506,147508,147511,147513,147515,147518],{"class":146,"line":1348},[144,147504,147505],{"class":5247},"    xaxis_opts",[144,147507,200],{"class":150},[144,147509,147510],{"class":154},"opts.AxisOpts(",[144,147512,79823],{"class":5247},[144,147514,200],{"class":150},[144,147516,147517],{"class":259},"\"日期\"",[144,147519,38060],{"class":154},[144,147521,147522,147525,147527,147529,147531,147533,147536],{"class":146,"line":1360},[144,147523,147524],{"class":5247},"    yaxis_opts",[144,147526,200],{"class":150},[144,147528,147510],{"class":154},[144,147530,79823],{"class":5247},[144,147532,200],{"class":150},[144,147534,147535],{"class":259},"\"金额\"",[144,147537,38060],{"class":154},[144,147539,147540,147543,147545,147548,147551,147553,147556],{"class":146,"line":1642},[144,147541,147542],{"class":5247},"    tooltip_opts",[144,147544,200],{"class":150},[144,147546,147547],{"class":154},"opts.TooltipOpts(",[144,147549,147550],{"class":5247},"trigger",[144,147552,200],{"class":150},[144,147554,147555],{"class":259},"\"axis\"",[144,147557,38060],{"class":154},[144,147559,147560],{"class":146,"line":1647},[144,147561,161],{"class":154},[144,147563,147564,147566,147568],{"class":146,"line":1653},[144,147565,147337],{"class":154},[144,147567,147340],{"class":259},[144,147569,161],{"class":154},[14,147571,147572],{},"常见全局配置：",[292,147574,147575,147584],{},[295,147576,147577],{},[298,147578,147579,147582],{},[301,147580,147581],{},"配置",[301,147583,102709],{},[339,147585,147586,147596,147606,147616,147626,147636],{},[298,147587,147588,147593],{},[344,147589,147590],{},[141,147591,147592],{},"TitleOpts",[344,147594,147595],{},"标题",[298,147597,147598,147603],{},[344,147599,147600],{},[141,147601,147602],{},"LegendOpts",[344,147604,147605],{},"图例",[298,147607,147608,147613],{},[344,147609,147610],{},[141,147611,147612],{},"TooltipOpts",[344,147614,147615],{},"提示框",[298,147617,147618,147623],{},[344,147619,147620],{},[141,147621,147622],{},"AxisOpts",[344,147624,147625],{},"坐标轴",[298,147627,147628,147633],{},[344,147629,147630],{},[141,147631,147632],{},"VisualMapOpts",[344,147634,147635],{},"视觉映射",[298,147637,147638,147643],{},[344,147639,147640],{},[141,147641,147642],{},"DataZoomOpts",[344,147644,147645],{},"区域缩放",[18,147647,147649],{"id":147648},"_106-系列配置","10.6 系列配置",[14,147651,147652],{},"系列配置作用于某一组数据。",[135,147654,147656],{"className":30391,"code":147655,"language":30393,"meta":30,"style":30},"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",[141,147657,147658,147663,147674,147703,147714,147733],{"__ignoreMap":30},[144,147659,147660],{"class":146,"line":147},[144,147661,147662],{"class":154},"line.add_yaxis(\n",[144,147664,147665,147668,147670,147672],{"class":146,"line":66},[144,147666,147667],{"class":5247},"    series_name",[144,147669,200],{"class":150},[144,147671,147308],{"class":259},[144,147673,31479],{"class":154},[144,147675,147676,147679,147681,147683,147685,147687,147689,147691,147693,147695,147697,147699,147701],{"class":146,"line":1210},[144,147677,147678],{"class":5247},"    y_axis",[144,147680,200],{"class":150},[144,147682,1045],{"class":154},[144,147684,466],{"class":203},[144,147686,12466],{"class":154},[144,147688,972],{"class":203},[144,147690,12466],{"class":154},[144,147692,1017],{"class":203},[144,147694,12466],{"class":154},[144,147696,147325],{"class":203},[144,147698,12466],{"class":154},[144,147700,147330],{"class":203},[144,147702,87849],{"class":154},[144,147704,147705,147708,147710,147712],{"class":146,"line":1225},[144,147706,147707],{"class":5247},"    is_smooth",[144,147709,200],{"class":150},[144,147711,31489],{"class":203},[144,147713,31479],{"class":154},[144,147715,147716,147719,147721,147724,147727,147729,147731],{"class":146,"line":1231},[144,147717,147718],{"class":5247},"    label_opts",[144,147720,200],{"class":150},[144,147722,147723],{"class":154},"opts.LabelOpts(",[144,147725,147726],{"class":5247},"is_show",[144,147728,200],{"class":150},[144,147730,31489],{"class":203},[144,147732,38060],{"class":154},[144,147734,147735],{"class":146,"line":1245},[144,147736,161],{"class":154},[14,147738,147739],{},"常用参数：",[98,147741,147742,147748,147754,147760,147766],{},[101,147743,147744,147747],{},[141,147745,147746],{},"series_name","：系列名称。",[101,147749,147750,147753],{},[141,147751,147752],{},"y_axis","：y 轴数据。",[101,147755,147756,147759],{},[141,147757,147758],{},"is_smooth","：是否平滑曲线。",[101,147761,147762,147765],{},[141,147763,147764],{},"label_opts","：标签配置。",[101,147767,147768,147771],{},[141,147769,147770],{},"symbol_size","：标记点大小。",[18,147773,147775],{"id":147774},"_107-多条折线","10.7 多条折线",[135,147777,147779],{"className":30391,"code":147778,"language":30393,"meta":30,"style":30},"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",[141,147780,147781,147795,147805,147809,147838,147842,147850,147855,147893,147930,147934,147951,147967,147971],{"__ignoreMap":30},[144,147782,147783,147785,147787,147789,147791,147793],{"class":146,"line":147},[144,147784,30750],{"class":150},[144,147786,147392],{"class":154},[144,147788,30405],{"class":150},[144,147790,147397],{"class":154},[144,147792,31396],{"class":150},[144,147794,147402],{"class":154},[144,147796,147797,147799,147801,147803],{"class":146,"line":66},[144,147798,30750],{"class":150},[144,147800,147251],{"class":154},[144,147802,30405],{"class":150},[144,147804,147256],{"class":154},[144,147806,147807],{"class":146,"line":1210},[144,147808,2430],{"emptyLinePlaceholder":72},[144,147810,147811,147814,147816,147818,147820,147822,147824,147826,147828,147830,147832,147834,147836],{"class":146,"line":1225},[144,147812,147813],{"class":154},"dates ",[144,147815,200],{"class":150},[144,147817,52239],{"class":154},[144,147819,147278],{"class":259},[144,147821,12466],{"class":154},[144,147823,147283],{"class":259},[144,147825,12466],{"class":154},[144,147827,147288],{"class":259},[144,147829,12466],{"class":154},[144,147831,147293],{"class":259},[144,147833,12466],{"class":154},[144,147835,147298],{"class":259},[144,147837,33259],{"class":154},[144,147839,147840],{"class":146,"line":1231},[144,147841,2430],{"emptyLinePlaceholder":72},[144,147843,147844,147846,147848],{"class":146,"line":1245},[144,147845,147265],{"class":154},[144,147847,200],{"class":150},[144,147849,147270],{"class":154},[144,147851,147852],{"class":146,"line":1251},[144,147853,147854],{"class":154},"line.add_xaxis(dates)\n",[144,147856,147857,147859,147862,147864,147866,147868,147871,147873,147875,147877,147879,147881,147883,147885,147887,147889,147891],{"class":146,"line":1342},[144,147858,147305],{"class":154},[144,147860,147861],{"class":259},"\"线上销售\"",[144,147863,77531],{"class":154},[144,147865,466],{"class":203},[144,147867,12466],{"class":154},[144,147869,147870],{"class":203},"130",[144,147872,12466],{"class":154},[144,147874,972],{"class":203},[144,147876,12466],{"class":154},[144,147878,21079],{"class":203},[144,147880,12466],{"class":154},[144,147882,1752],{"class":203},[144,147884,112215],{"class":154},[144,147886,147758],{"class":5247},[144,147888,200],{"class":150},[144,147890,31489],{"class":203},[144,147892,161],{"class":154},[144,147894,147895,147897,147900,147902,147904,147906,147908,147910,147912,147914,147916,147918,147920,147922,147924,147926,147928],{"class":146,"line":1348},[144,147896,147305],{"class":154},[144,147898,147899],{"class":259},"\"线下销售\"",[144,147901,77531],{"class":154},[144,147903,767],{"class":203},[144,147905,12466],{"class":154},[144,147907,1017],{"class":203},[144,147909,12466],{"class":154},[144,147911,466],{"class":203},[144,147913,12466],{"class":154},[144,147915,972],{"class":203},[144,147917,12466],{"class":154},[144,147919,147325],{"class":203},[144,147921,112215],{"class":154},[144,147923,147758],{"class":5247},[144,147925,200],{"class":150},[144,147927,31489],{"class":203},[144,147929,161],{"class":154},[144,147931,147932],{"class":146,"line":1360},[144,147933,147481],{"class":154},[144,147935,147936,147938,147940,147942,147944,147946,147949],{"class":146,"line":1642},[144,147937,147486],{"class":5247},[144,147939,200],{"class":150},[144,147941,147491],{"class":154},[144,147943,51420],{"class":5247},[144,147945,200],{"class":150},[144,147947,147948],{"class":259},"\"线上线下销售趋势\"",[144,147950,38060],{"class":154},[144,147952,147953,147955,147957,147959,147961,147963,147965],{"class":146,"line":1647},[144,147954,147542],{"class":5247},[144,147956,200],{"class":150},[144,147958,147547],{"class":154},[144,147960,147550],{"class":5247},[144,147962,200],{"class":150},[144,147964,147555],{"class":259},[144,147966,38060],{"class":154},[144,147968,147969],{"class":146,"line":1653},[144,147970,161],{"class":154},[144,147972,147973,147975,147978],{"class":146,"line":1658},[144,147974,147337],{"class":154},[144,147976,147977],{"class":259},"\"sales.html\"",[144,147979,161],{"class":154},[14,147981,147982],{},"多条折线适合比较不同指标或不同地区。",[18,147984,147986],{"id":147985},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,147988,147989,147990,24631],{},"假设 ",[141,147991,147992],{},"sales.json",[135,147994,147996],{"className":147058,"code":147995,"language":145805,"meta":30,"style":30},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[141,147997,147998,148003,148035,148063,148091],{"__ignoreMap":30},[144,147999,148000],{"class":146,"line":147},[144,148001,148002],{"class":154},"[\n",[144,148004,148005,148008,148011,148013,148015,148017,148020,148022,148024,148026,148029,148031,148033],{"class":146,"line":66},[144,148006,148007],{"class":154},"  {",[144,148009,148010],{"class":203},"\"date\"",[144,148012,51450],{"class":154},[144,148014,147278],{"class":259},[144,148016,12466],{"class":154},[144,148018,148019],{"class":203},"\"online\"",[144,148021,51450],{"class":154},[144,148023,466],{"class":203},[144,148025,12466],{"class":154},[144,148027,148028],{"class":203},"\"offline\"",[144,148030,51450],{"class":154},[144,148032,767],{"class":203},[144,148034,4960],{"class":154},[144,148036,148037,148039,148041,148043,148045,148047,148049,148051,148053,148055,148057,148059,148061],{"class":146,"line":1210},[144,148038,148007],{"class":154},[144,148040,148010],{"class":203},[144,148042,51450],{"class":154},[144,148044,147283],{"class":259},[144,148046,12466],{"class":154},[144,148048,148019],{"class":203},[144,148050,51450],{"class":154},[144,148052,147870],{"class":203},[144,148054,12466],{"class":154},[144,148056,148028],{"class":203},[144,148058,51450],{"class":154},[144,148060,1017],{"class":203},[144,148062,4960],{"class":154},[144,148064,148065,148067,148069,148071,148073,148075,148077,148079,148081,148083,148085,148087,148089],{"class":146,"line":1225},[144,148066,148007],{"class":154},[144,148068,148010],{"class":203},[144,148070,51450],{"class":154},[144,148072,147288],{"class":259},[144,148074,12466],{"class":154},[144,148076,148019],{"class":203},[144,148078,51450],{"class":154},[144,148080,972],{"class":203},[144,148082,12466],{"class":154},[144,148084,148028],{"class":203},[144,148086,51450],{"class":154},[144,148088,466],{"class":203},[144,148090,1595],{"class":154},[144,148092,148093],{"class":146,"line":1231},[144,148094,33259],{"class":154},[14,148096,148097],{},"读取并绘图：",[135,148099,148101],{"className":30391,"code":148100,"language":30393,"meta":30,"style":30},"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",[141,148102,148103,148109,148123,148133,148137,148169,148182,148186,148194,148203,148212,148216,148228,148237,148246,148255,148259,148267,148271,148288,148305,148309,148326,148342,148346],{"__ignoreMap":30},[144,148104,148105,148107],{"class":146,"line":147},[144,148106,30405],{"class":150},[144,148108,147104],{"class":154},[144,148110,148111,148113,148115,148117,148119,148121],{"class":146,"line":66},[144,148112,30750],{"class":150},[144,148114,147392],{"class":154},[144,148116,30405],{"class":150},[144,148118,147397],{"class":154},[144,148120,31396],{"class":150},[144,148122,147402],{"class":154},[144,148124,148125,148127,148129,148131],{"class":146,"line":1210},[144,148126,30750],{"class":150},[144,148128,147251],{"class":154},[144,148130,30405],{"class":150},[144,148132,147256],{"class":154},[144,148134,148135],{"class":146,"line":1225},[144,148136,2430],{"emptyLinePlaceholder":72},[144,148138,148139,148141,148143,148145,148148,148150,148152,148154,148156,148158,148160,148162,148164,148167],{"class":146,"line":1231},[144,148140,107846],{"class":150},[144,148142,146804],{"class":203},[144,148144,155],{"class":154},[144,148146,148147],{"class":259},"\"sales.json\"",[144,148149,12466],{"class":154},[144,148151,146814],{"class":259},[144,148153,12466],{"class":154},[144,148155,146819],{"class":5247},[144,148157,200],{"class":150},[144,148159,146824],{"class":259},[144,148161,13745],{"class":154},[144,148163,31396],{"class":150},[144,148165,148166],{"class":5247}," file",[144,148168,3769],{"class":154},[144,148170,148171,148173,148175,148178,148180],{"class":146,"line":1245},[144,148172,101434],{"class":154},[144,148174,200],{"class":150},[144,148176,148177],{"class":154}," json.load(",[144,148179,45367],{"class":5247},[144,148181,161],{"class":154},[144,148183,148184],{"class":146,"line":1251},[144,148185,2430],{"emptyLinePlaceholder":72},[144,148187,148188,148190,148192],{"class":146,"line":1342},[144,148189,147813],{"class":154},[144,148191,200],{"class":150},[144,148193,51851],{"class":154},[144,148195,148196,148199,148201],{"class":146,"line":1348},[144,148197,148198],{"class":154},"online_sales ",[144,148200,200],{"class":150},[144,148202,51851],{"class":154},[144,148204,148205,148208,148210],{"class":146,"line":1360},[144,148206,148207],{"class":154},"offline_sales ",[144,148209,200],{"class":150},[144,148211,51851],{"class":154},[144,148213,148214],{"class":146,"line":1642},[144,148215,2430],{"emptyLinePlaceholder":72},[144,148217,148218,148220,148223,148225],{"class":146,"line":1647},[144,148219,3055],{"class":150},[144,148221,148222],{"class":154}," item ",[144,148224,26056],{"class":150},[144,148226,148227],{"class":154}," data:\n",[144,148229,148230,148233,148235],{"class":146,"line":1653},[144,148231,148232],{"class":154},"    dates.append(item[",[144,148234,148010],{"class":259},[144,148236,4687],{"class":154},[144,148238,148239,148242,148244],{"class":146,"line":1658},[144,148240,148241],{"class":154},"    online_sales.append(item[",[144,148243,148019],{"class":259},[144,148245,4687],{"class":154},[144,148247,148248,148251,148253],{"class":146,"line":1672},[144,148249,148250],{"class":154},"    offline_sales.append(item[",[144,148252,148028],{"class":259},[144,148254,4687],{"class":154},[144,148256,148257],{"class":146,"line":1677},[144,148258,2430],{"emptyLinePlaceholder":72},[144,148260,148261,148263,148265],{"class":146,"line":1683},[144,148262,147265],{"class":154},[144,148264,200],{"class":150},[144,148266,147270],{"class":154},[144,148268,148269],{"class":146,"line":1704},[144,148270,147854],{"class":154},[144,148272,148273,148275,148277,148280,148282,148284,148286],{"class":146,"line":1709},[144,148274,147305],{"class":154},[144,148276,147861],{"class":259},[144,148278,148279],{"class":154},", online_sales, ",[144,148281,147758],{"class":5247},[144,148283,200],{"class":150},[144,148285,31489],{"class":203},[144,148287,161],{"class":154},[144,148289,148290,148292,148294,148297,148299,148301,148303],{"class":146,"line":1723},[144,148291,147305],{"class":154},[144,148293,147899],{"class":259},[144,148295,148296],{"class":154},", offline_sales, ",[144,148298,147758],{"class":5247},[144,148300,200],{"class":150},[144,148302,31489],{"class":203},[144,148304,161],{"class":154},[144,148306,148307],{"class":146,"line":1728},[144,148308,147481],{"class":154},[144,148310,148311,148313,148315,148317,148319,148321,148324],{"class":146,"line":1757},[144,148312,147486],{"class":5247},[144,148314,200],{"class":150},[144,148316,147491],{"class":154},[144,148318,51420],{"class":5247},[144,148320,200],{"class":150},[144,148322,148323],{"class":259},"\"销售趋势\"",[144,148325,38060],{"class":154},[144,148327,148328,148330,148332,148334,148336,148338,148340],{"class":146,"line":1762},[144,148329,147542],{"class":5247},[144,148331,200],{"class":150},[144,148333,147547],{"class":154},[144,148335,147550],{"class":5247},[144,148337,200],{"class":150},[144,148339,147555],{"class":259},[144,148341,38060],{"class":154},[144,148343,148344],{"class":146,"line":1779},[144,148345,161],{"class":154},[144,148347,148348,148350,148352],{"class":146,"line":1784},[144,148349,147337],{"class":154},[144,148351,147977],{"class":259},[144,148353,161],{"class":154},[18,148355,148357],{"id":148356},"_109-数据清洗","10.9 数据清洗",[14,148359,148360],{},"真实数据经常不整齐，需要清洗。",[14,148362,148363],{},"常见问题：",[98,148365,148366,148369,148372,148375],{},[101,148367,148368],{},"数字是字符串。",[101,148370,148371],{},"字段缺失。",[101,148373,148374],{},"空值。",[101,148376,148377],{},"日期格式不统一。",[14,148379,15166],{},[135,148381,148383],{"className":30391,"code":148382,"language":30393,"meta":30,"style":30},"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",[141,148384,148385,148394,148417,148437,148458,148462,148466,148474,148483,148487,148498,148512,148521,148526,148530,148538,148548,148552,148559],{"__ignoreMap":30},[144,148386,148387,148390,148392],{"class":146,"line":147},[144,148388,148389],{"class":154},"raw_data ",[144,148391,200],{"class":150},[144,148393,55460],{"class":154},[144,148395,148396,148399,148401,148403,148405,148407,148410,148412,148415],{"class":146,"line":66},[144,148397,148398],{"class":154},"    {",[144,148400,148010],{"class":259},[144,148402,51450],{"class":154},[144,148404,147278],{"class":259},[144,148406,12466],{"class":154},[144,148408,148409],{"class":259},"\"sales\"",[144,148411,51450],{"class":154},[144,148413,148414],{"class":259},"\"100\"",[144,148416,4960],{"class":154},[144,148418,148419,148421,148423,148425,148427,148429,148431,148433,148435],{"class":146,"line":1210},[144,148420,148398],{"class":154},[144,148422,148010],{"class":259},[144,148424,51450],{"class":154},[144,148426,147283],{"class":259},[144,148428,12466],{"class":154},[144,148430,148409],{"class":259},[144,148432,51450],{"class":154},[144,148434,7683],{"class":259},[144,148436,4960],{"class":154},[144,148438,148439,148441,148443,148445,148447,148449,148451,148453,148456],{"class":146,"line":1225},[144,148440,148398],{"class":154},[144,148442,148010],{"class":259},[144,148444,51450],{"class":154},[144,148446,147288],{"class":259},[144,148448,12466],{"class":154},[144,148450,148409],{"class":259},[144,148452,51450],{"class":154},[144,148454,148455],{"class":259},"\"120\"",[144,148457,4960],{"class":154},[144,148459,148460],{"class":146,"line":1231},[144,148461,33259],{"class":154},[144,148463,148464],{"class":146,"line":1245},[144,148465,2430],{"emptyLinePlaceholder":72},[144,148467,148468,148470,148472],{"class":146,"line":1251},[144,148469,147813],{"class":154},[144,148471,200],{"class":150},[144,148473,51851],{"class":154},[144,148475,148476,148479,148481],{"class":146,"line":1342},[144,148477,148478],{"class":154},"sales ",[144,148480,200],{"class":150},[144,148482,51851],{"class":154},[144,148484,148485],{"class":146,"line":1348},[144,148486,2430],{"emptyLinePlaceholder":72},[144,148488,148489,148491,148493,148495],{"class":146,"line":1360},[144,148490,3055],{"class":150},[144,148492,148222],{"class":154},[144,148494,26056],{"class":150},[144,148496,148497],{"class":154}," raw_data:\n",[144,148499,148500,148503,148505,148508,148510],{"class":146,"line":1642},[144,148501,148502],{"class":154},"    value ",[144,148504,200],{"class":150},[144,148506,148507],{"class":154}," item.get(",[144,148509,148409],{"class":259},[144,148511,161],{"class":154},[144,148513,148514,148516,148518],{"class":146,"line":1647},[144,148515,3131],{"class":150},[144,148517,38943],{"class":150},[144,148519,148520],{"class":154}," value:\n",[144,148522,148523],{"class":146,"line":1653},[144,148524,148525],{"class":150},"        continue\n",[144,148527,148528],{"class":146,"line":1658},[144,148529,2430],{"emptyLinePlaceholder":72},[144,148531,148532,148534,148536],{"class":146,"line":1672},[144,148533,148232],{"class":154},[144,148535,148010],{"class":259},[144,148537,4687],{"class":154},[144,148539,148540,148543,148545],{"class":146,"line":1677},[144,148541,148542],{"class":154},"    sales.append(",[144,148544,158],{"class":203},[144,148546,148547],{"class":154},"(value))\n",[144,148549,148550],{"class":146,"line":1683},[144,148551,2430],{"emptyLinePlaceholder":72},[144,148553,148554,148556],{"class":146,"line":1704},[144,148555,30428],{"class":203},[144,148557,148558],{"class":154},"(dates)\n",[144,148560,148561,148563],{"class":146,"line":1709},[144,148562,30428],{"class":203},[144,148564,148565],{"class":154},"(sales)\n",[18,148567,148569],{"id":148568},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[135,148571,148573],{"className":30391,"code":148572,"language":30393,"meta":30,"style":30},"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",[141,148574,148575,148589,148599,148603,148611,148632,148654,148676,148698,148720,148724,148728,148750,148771,148775,148783,148787,148791,148801,148810,148820,148836,148840,148844,148861,148877,148893,148909,148919,148923],{"__ignoreMap":30},[144,148576,148577,148579,148581,148583,148585,148587],{"class":146,"line":147},[144,148578,30750],{"class":150},[144,148580,147392],{"class":154},[144,148582,30405],{"class":150},[144,148584,147397],{"class":154},[144,148586,31396],{"class":150},[144,148588,147402],{"class":154},[144,148590,148591,148593,148595,148597],{"class":146,"line":66},[144,148592,30750],{"class":150},[144,148594,147251],{"class":154},[144,148596,30405],{"class":150},[144,148598,147256],{"class":154},[144,148600,148601],{"class":146,"line":1210},[144,148602,2430],{"emptyLinePlaceholder":72},[144,148604,148605,148607,148609],{"class":146,"line":1225},[144,148606,148478],{"class":154},[144,148608,200],{"class":150},[144,148610,55460],{"class":154},[144,148612,148613,148615,148617,148619,148622,148624,148626,148628,148630],{"class":146,"line":1231},[144,148614,148398],{"class":154},[144,148616,148010],{"class":259},[144,148618,51450],{"class":154},[144,148620,148621],{"class":259},"\"2024-10-01\"",[144,148623,12466],{"class":154},[144,148625,84097],{"class":259},[144,148627,51450],{"class":154},[144,148629,92036],{"class":203},[144,148631,4960],{"class":154},[144,148633,148634,148636,148638,148640,148643,148645,148647,148649,148652],{"class":146,"line":1245},[144,148635,148398],{"class":154},[144,148637,148010],{"class":259},[144,148639,51450],{"class":154},[144,148641,148642],{"class":259},"\"2024-10-02\"",[144,148644,12466],{"class":154},[144,148646,84097],{"class":259},[144,148648,51450],{"class":154},[144,148650,148651],{"class":203},"1800",[144,148653,4960],{"class":154},[144,148655,148656,148658,148660,148662,148665,148667,148669,148671,148674],{"class":146,"line":1251},[144,148657,148398],{"class":154},[144,148659,148010],{"class":259},[144,148661,51450],{"class":154},[144,148663,148664],{"class":259},"\"2024-10-03\"",[144,148666,12466],{"class":154},[144,148668,84097],{"class":259},[144,148670,51450],{"class":154},[144,148672,148673],{"class":203},"1500",[144,148675,4960],{"class":154},[144,148677,148678,148680,148682,148684,148687,148689,148691,148693,148696],{"class":146,"line":1342},[144,148679,148398],{"class":154},[144,148681,148010],{"class":259},[144,148683,51450],{"class":154},[144,148685,148686],{"class":259},"\"2024-10-04\"",[144,148688,12466],{"class":154},[144,148690,84097],{"class":259},[144,148692,51450],{"class":154},[144,148694,148695],{"class":203},"2100",[144,148697,4960],{"class":154},[144,148699,148700,148702,148704,148706,148709,148711,148713,148715,148718],{"class":146,"line":1348},[144,148701,148398],{"class":154},[144,148703,148010],{"class":259},[144,148705,51450],{"class":154},[144,148707,148708],{"class":259},"\"2024-10-05\"",[144,148710,12466],{"class":154},[144,148712,84097],{"class":259},[144,148714,51450],{"class":154},[144,148716,148717],{"class":203},"2600",[144,148719,4960],{"class":154},[144,148721,148722],{"class":146,"line":1360},[144,148723,33259],{"class":154},[144,148725,148726],{"class":146,"line":1642},[144,148727,2430],{"emptyLinePlaceholder":72},[144,148729,148730,148732,148734,148737,148739,148741,148743,148745,148747],{"class":146,"line":1647},[144,148731,147813],{"class":154},[144,148733,200],{"class":150},[144,148735,148736],{"class":154}," [item[",[144,148738,148010],{"class":259},[144,148740,4473],{"class":154},[144,148742,3055],{"class":150},[144,148744,148222],{"class":154},[144,148746,26056],{"class":150},[144,148748,148749],{"class":154}," sales]\n",[144,148751,148752,148755,148757,148759,148761,148763,148765,148767,148769],{"class":146,"line":1653},[144,148753,148754],{"class":154},"amounts ",[144,148756,200],{"class":150},[144,148758,148736],{"class":154},[144,148760,84097],{"class":259},[144,148762,4473],{"class":154},[144,148764,3055],{"class":150},[144,148766,148222],{"class":154},[144,148768,26056],{"class":150},[144,148770,148749],{"class":154},[144,148772,148773],{"class":146,"line":1658},[144,148774,2430],{"emptyLinePlaceholder":72},[144,148776,148777,148779,148781],{"class":146,"line":1672},[144,148778,147265],{"class":154},[144,148780,200],{"class":150},[144,148782,147270],{"class":154},[144,148784,148785],{"class":146,"line":1677},[144,148786,147854],{"class":154},[144,148788,148789],{"class":146,"line":1683},[144,148790,147662],{"class":154},[144,148792,148793,148795,148797,148799],{"class":146,"line":1704},[144,148794,147667],{"class":5247},[144,148796,200],{"class":150},[144,148798,147308],{"class":259},[144,148800,31479],{"class":154},[144,148802,148803,148805,148807],{"class":146,"line":1709},[144,148804,147678],{"class":5247},[144,148806,200],{"class":150},[144,148808,148809],{"class":154},"amounts,\n",[144,148811,148812,148814,148816,148818],{"class":146,"line":1723},[144,148813,147707],{"class":5247},[144,148815,200],{"class":150},[144,148817,31489],{"class":203},[144,148819,31479],{"class":154},[144,148821,148822,148824,148826,148828,148830,148832,148834],{"class":146,"line":1728},[144,148823,147718],{"class":5247},[144,148825,200],{"class":150},[144,148827,147723],{"class":154},[144,148829,147726],{"class":5247},[144,148831,200],{"class":150},[144,148833,31489],{"class":203},[144,148835,38060],{"class":154},[144,148837,148838],{"class":146,"line":1757},[144,148839,161],{"class":154},[144,148841,148842],{"class":146,"line":1762},[144,148843,147481],{"class":154},[144,148845,148846,148848,148850,148852,148854,148856,148859],{"class":146,"line":1779},[144,148847,147486],{"class":5247},[144,148849,200],{"class":150},[144,148851,147491],{"class":154},[144,148853,51420],{"class":5247},[144,148855,200],{"class":150},[144,148857,148858],{"class":259},"\"每日销售额\"",[144,148860,38060],{"class":154},[144,148862,148863,148865,148867,148869,148871,148873,148875],{"class":146,"line":1784},[144,148864,147505],{"class":5247},[144,148866,200],{"class":150},[144,148868,147510],{"class":154},[144,148870,79823],{"class":5247},[144,148872,200],{"class":150},[144,148874,147517],{"class":259},[144,148876,38060],{"class":154},[144,148878,148879,148881,148883,148885,148887,148889,148891],{"class":146,"line":1789},[144,148880,147524],{"class":5247},[144,148882,200],{"class":150},[144,148884,147510],{"class":154},[144,148886,79823],{"class":5247},[144,148888,200],{"class":150},[144,148890,147535],{"class":259},[144,148892,38060],{"class":154},[144,148894,148895,148897,148899,148901,148903,148905,148907],{"class":146,"line":1794},[144,148896,147542],{"class":5247},[144,148898,200],{"class":150},[144,148900,147547],{"class":154},[144,148902,147550],{"class":5247},[144,148904,200],{"class":150},[144,148906,147555],{"class":259},[144,148908,38060],{"class":154},[144,148910,148911,148914,148916],{"class":146,"line":1808},[144,148912,148913],{"class":5247},"    datazoom_opts",[144,148915,200],{"class":150},[144,148917,148918],{"class":154},"[opts.DataZoomOpts()],\n",[144,148920,148921],{"class":146,"line":1813},[144,148922,161],{"class":154},[144,148924,148925,148927,148930],{"class":146,"line":2607},[144,148926,147337],{"class":154},[144,148928,148929],{"class":259},"\"daily_sales.html\"",[144,148931,161],{"class":154},[14,148933,148934,148937],{},[141,148935,148936],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[18,148939,148941],{"id":148940},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,148943,148944],{},"如果数据结构如下：",[135,148946,148948],{"className":30391,"code":148947,"language":30393,"meta":30,"style":30},"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",[141,148949,148950,148958,148966,148988,149009,149014,149021,149041,149061,149065],{"__ignoreMap":30},[144,148951,148952,148954,148956],{"class":146,"line":147},[144,148953,101671],{"class":154},[144,148955,200],{"class":150},[144,148957,15603],{"class":154},[144,148959,148960,148963],{"class":146,"line":66},[144,148961,148962],{"class":259},"    \"北京\"",[144,148964,148965],{"class":154},": [\n",[144,148967,148968,148970,148972,148974,148977,148979,148982,148984,148986],{"class":146,"line":1210},[144,148969,4947],{"class":154},[144,148971,148010],{"class":259},[144,148973,51450],{"class":154},[144,148975,148976],{"class":259},"\"2024-01-01\"",[144,148978,12466],{"class":154},[144,148980,148981],{"class":259},"\"confirm\"",[144,148983,51450],{"class":154},[144,148985,601],{"class":203},[144,148987,4960],{"class":154},[144,148989,148990,148992,148994,148996,148999,149001,149003,149005,149007],{"class":146,"line":1225},[144,148991,4947],{"class":154},[144,148993,148010],{"class":259},[144,148995,51450],{"class":154},[144,148997,148998],{"class":259},"\"2024-01-02\"",[144,149000,12466],{"class":154},[144,149002,148981],{"class":259},[144,149004,51450],{"class":154},[144,149006,653],{"class":203},[144,149008,4960],{"class":154},[144,149010,149011],{"class":146,"line":1231},[144,149012,149013],{"class":154},"    ],\n",[144,149015,149016,149019],{"class":146,"line":1245},[144,149017,149018],{"class":259},"    \"上海\"",[144,149020,148965],{"class":154},[144,149022,149023,149025,149027,149029,149031,149033,149035,149037,149039],{"class":146,"line":1251},[144,149024,4947],{"class":154},[144,149026,148010],{"class":259},[144,149028,51450],{"class":154},[144,149030,148976],{"class":259},[144,149032,12466],{"class":154},[144,149034,148981],{"class":259},[144,149036,51450],{"class":154},[144,149038,550],{"class":203},[144,149040,4960],{"class":154},[144,149042,149043,149045,149047,149049,149051,149053,149055,149057,149059],{"class":146,"line":1342},[144,149044,4947],{"class":154},[144,149046,148010],{"class":259},[144,149048,51450],{"class":154},[144,149050,148998],{"class":259},[144,149052,12466],{"class":154},[144,149054,148981],{"class":259},[144,149056,51450],{"class":154},[144,149058,678],{"class":203},[144,149060,4960],{"class":154},[144,149062,149063],{"class":146,"line":1348},[144,149064,149013],{"class":154},[144,149066,149067],{"class":146,"line":1360},[144,149068,1595],{"class":154},[14,149070,149071],{},"绘制多地区趋势：",[135,149073,149075],{"className":30391,"code":149074,"language":30393,"meta":30,"style":30},"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",[141,149076,149077,149091,149101,149105,149130,149134,149142,149146,149150,149162,149184,149197,149201,149205,149222,149238,149242],{"__ignoreMap":30},[144,149078,149079,149081,149083,149085,149087,149089],{"class":146,"line":147},[144,149080,30750],{"class":150},[144,149082,147392],{"class":154},[144,149084,30405],{"class":150},[144,149086,147397],{"class":154},[144,149088,31396],{"class":150},[144,149090,147402],{"class":154},[144,149092,149093,149095,149097,149099],{"class":146,"line":66},[144,149094,30750],{"class":150},[144,149096,147251],{"class":154},[144,149098,30405],{"class":150},[144,149100,147256],{"class":154},[144,149102,149103],{"class":146,"line":1210},[144,149104,2430],{"emptyLinePlaceholder":72},[144,149106,149107,149109,149111,149113,149115,149117,149119,149121,149123,149126,149128],{"class":146,"line":1225},[144,149108,147813],{"class":154},[144,149110,200],{"class":150},[144,149112,148736],{"class":154},[144,149114,148010],{"class":259},[144,149116,4473],{"class":154},[144,149118,3055],{"class":150},[144,149120,148222],{"class":154},[144,149122,26056],{"class":150},[144,149124,149125],{"class":154}," data[",[144,149127,69282],{"class":259},[144,149129,77540],{"class":154},[144,149131,149132],{"class":146,"line":1231},[144,149133,2430],{"emptyLinePlaceholder":72},[144,149135,149136,149138,149140],{"class":146,"line":1245},[144,149137,147265],{"class":154},[144,149139,200],{"class":150},[144,149141,147270],{"class":154},[144,149143,149144],{"class":146,"line":1251},[144,149145,147854],{"class":154},[144,149147,149148],{"class":146,"line":1342},[144,149149,2430],{"emptyLinePlaceholder":72},[144,149151,149152,149154,149157,149159],{"class":146,"line":1348},[144,149153,3055],{"class":150},[144,149155,149156],{"class":154}," city, records ",[144,149158,26056],{"class":150},[144,149160,149161],{"class":154}," data.items():\n",[144,149163,149164,149167,149169,149171,149173,149175,149177,149179,149181],{"class":146,"line":1360},[144,149165,149166],{"class":154},"    values ",[144,149168,200],{"class":150},[144,149170,148736],{"class":154},[144,149172,148981],{"class":259},[144,149174,4473],{"class":154},[144,149176,3055],{"class":150},[144,149178,148222],{"class":154},[144,149180,26056],{"class":150},[144,149182,149183],{"class":154}," records]\n",[144,149185,149186,149189,149191,149193,149195],{"class":146,"line":1642},[144,149187,149188],{"class":154},"    line.add_yaxis(city, values, ",[144,149190,147758],{"class":5247},[144,149192,200],{"class":150},[144,149194,31489],{"class":203},[144,149196,161],{"class":154},[144,149198,149199],{"class":146,"line":1647},[144,149200,2430],{"emptyLinePlaceholder":72},[144,149202,149203],{"class":146,"line":1653},[144,149204,147481],{"class":154},[144,149206,149207,149209,149211,149213,149215,149217,149220],{"class":146,"line":1658},[144,149208,147486],{"class":5247},[144,149210,200],{"class":150},[144,149212,147491],{"class":154},[144,149214,51420],{"class":5247},[144,149216,200],{"class":150},[144,149218,149219],{"class":259},"\"多地区趋势图\"",[144,149221,38060],{"class":154},[144,149223,149224,149226,149228,149230,149232,149234,149236],{"class":146,"line":1672},[144,149225,147542],{"class":5247},[144,149227,200],{"class":150},[144,149229,147547],{"class":154},[144,149231,147550],{"class":5247},[144,149233,200],{"class":150},[144,149235,147555],{"class":259},[144,149237,38060],{"class":154},[144,149239,149240],{"class":146,"line":1677},[144,149241,161],{"class":154},[144,149243,149244,149246,149249],{"class":146,"line":1683},[144,149245,147337],{"class":154},[144,149247,149248],{"class":259},"\"trend.html\"",[144,149250,161],{"class":154},[14,149252,149253],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[18,149255,149257],{"id":149256},"_1012-易错点","10.12 易错点",[98,149259,149260,149266,149272,149282,149288],{},[101,149261,149262,149265],{},[141,149263,149264],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[101,149267,149268,149271],{},[141,149269,149270],{},"render()"," 生成的是 HTML，不是图片。",[101,149273,149274,149275,149278,149279,28398],{},"JSON 字符串用 ",[141,149276,149277],{},"json.loads()","，JSON 文件用 ",[141,149280,149281],{},"json.load()",[101,149283,149284,149285,28398],{},"中文 JSON 保存时加 ",[141,149286,149287],{},"ensure_ascii=False",[101,149289,149290],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[18,149292,149294],{"id":149293},"_1013-本章练习","10.13 本章练习",[98,149296,149297,149300,149303,149306,149309],{},[101,149298,149299],{},"安装 pyecharts 并生成第一个折线图。",[101,149301,149302],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[101,149304,149305],{},"绘制两条折线，对比线上和线下销售额。",[101,149307,149308],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[101,149310,149311],{},"对含有空值的销售数据进行清洗后再绘图。",[5157,149313,149314],{},"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":30,"searchDepth":66,"depth":66,"links":149316},[149317,149318,149319,149320,149321,149322,149323,149324,149325,149326,149327,149328,149329],{"id":146933,"depth":66,"text":146934},{"id":147008,"depth":66,"text":147009},{"id":147187,"depth":66,"text":147188},{"id":147238,"depth":66,"text":147239},{"id":147372,"depth":66,"text":147373},{"id":147648,"depth":66,"text":147649},{"id":147774,"depth":66,"text":147775},{"id":147985,"depth":66,"text":147986},{"id":148356,"depth":66,"text":148357},{"id":148568,"depth":66,"text":148569},{"id":148940,"depth":66,"text":148941},{"id":149256,"depth":66,"text":149257},{"id":149293,"depth":66,"text":149294},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146925,"description":23408},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149336,"title":149337,"body":149338,"description":23408,"extension":70,"meta":151698,"navigation":72,"path":151699,"seo":151700,"stem":151701,"__hash__":151702},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149339,"toc":151675},[149340,149343,149347,149350,149353,149429,149432,149523,149526,149530,149533,149577,149590,149594,149597,149664,149667,149671,149674,149758,149766,149770,149775,149916,149919,149930,149936,149942,150056,150060,150063,150066,150319,150322,150326,150329,150433,150436,150440,150591,150595,150602,150715,150719,150722,150828,150831,150835,150838,150869,150872,150977,150980,150984,150988,150998,151066,151070,151077,151141,151144,151148,151154,151250,151259,151263,151587,151596,151600,151628,151632,151672],[10,149341,149337],{"id":149342},"_11-面向对象基础",[18,149344,149346],{"id":149345},"_111-什么是面向对象","11.1 什么是面向对象",[14,149348,149349],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149351,149352],{},"面向过程：",[135,149354,149356],{"className":30391,"code":149355,"language":30393,"meta":30,"style":30},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[141,149357,149358,149367,149375,149379,149389,149420,149424],{"__ignoreMap":30},[144,149359,149360,149362,149364],{"class":146,"line":147},[144,149361,146549],{"class":154},[144,149363,200],{"class":150},[144,149365,149366],{"class":259}," \"小明\"\n",[144,149368,149369,149371,149373],{"class":146,"line":66},[144,149370,146559],{"class":154},[144,149372,200],{"class":150},[144,149374,146564],{"class":203},[144,149376,149377],{"class":146,"line":1210},[144,149378,2430],{"emptyLinePlaceholder":72},[144,149380,149381,149383,149386],{"class":146,"line":1225},[144,149382,31960],{"class":150},[144,149384,149385],{"class":1993}," introduce",[144,149387,149388],{"class":154},"(name, age):\n",[144,149390,149391,149393,149395,149397,149400,149402,149404,149406,149409,149411,149413,149415,149418],{"class":146,"line":1231},[144,149392,31312],{"class":203},[144,149394,155],{"class":154},[144,149396,207],{"class":150},[144,149398,149399],{"class":259},"\"我叫",[144,149401,1051],{"class":203},[144,149403,79823],{"class":154},[144,149405,1101],{"class":203},[144,149407,149408],{"class":259},"，今年",[144,149410,1051],{"class":203},[144,149412,70234],{"class":154},[144,149414,1101],{"class":203},[144,149416,149417],{"class":259},"岁\"",[144,149419,161],{"class":154},[144,149421,149422],{"class":146,"line":1245},[144,149423,2430],{"emptyLinePlaceholder":72},[144,149425,149426],{"class":146,"line":1251},[144,149427,149428],{"class":154},"introduce(name, age)\n",[14,149430,149431],{},"面向对象：",[135,149433,149435],{"className":30391,"code":149434,"language":30393,"meta":30,"style":30},"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",[141,149436,149437,149445,149453,149482,149486,149490,149500,149509,149518],{"__ignoreMap":30},[144,149438,149439,149441,149443],{"class":146,"line":147},[144,149440,14725],{"class":150},[144,149442,7929],{"class":1993},[144,149444,3769],{"class":154},[144,149446,149447,149449,149451],{"class":146,"line":66},[144,149448,30814],{"class":150},[144,149450,149385],{"class":1993},[144,149452,30820],{"class":154},[144,149454,149455,149457,149459,149461,149463,149466,149468,149470,149472,149474,149476,149478,149480],{"class":146,"line":1210},[144,149456,32464],{"class":203},[144,149458,155],{"class":154},[144,149460,207],{"class":150},[144,149462,149399],{"class":259},[144,149464,149465],{"class":203},"{self",[144,149467,80314],{"class":154},[144,149469,1101],{"class":203},[144,149471,149408],{"class":259},[144,149473,149465],{"class":203},[144,149475,80326],{"class":154},[144,149477,1101],{"class":203},[144,149479,149417],{"class":259},[144,149481,161],{"class":154},[144,149483,149484],{"class":146,"line":1225},[144,149485,2430],{"emptyLinePlaceholder":72},[144,149487,149488],{"class":146,"line":1231},[144,149489,2430],{"emptyLinePlaceholder":72},[144,149491,149492,149495,149497],{"class":146,"line":1245},[144,149493,149494],{"class":154},"student ",[144,149496,200],{"class":150},[144,149498,149499],{"class":154}," Student()\n",[144,149501,149502,149505,149507],{"class":146,"line":1251},[144,149503,149504],{"class":154},"student.name ",[144,149506,200],{"class":150},[144,149508,149366],{"class":259},[144,149510,149511,149514,149516],{"class":146,"line":1342},[144,149512,149513],{"class":154},"student.age ",[144,149515,200],{"class":150},[144,149517,146564],{"class":203},[144,149519,149520],{"class":146,"line":1348},[144,149521,149522],{"class":154},"student.introduce()\n",[14,149524,149525],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[18,149527,149529],{"id":149528},"_112-类和对象","11.2 类和对象",[14,149531,149532],{},"类是模板，对象是根据模板创建出来的具体实例。",[135,149534,149536],{"className":30391,"code":149535,"language":30393,"meta":30,"style":30},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[141,149537,149538,149546,149551,149555,149559,149568],{"__ignoreMap":30},[144,149539,149540,149542,149544],{"class":146,"line":147},[144,149541,14725],{"class":150},[144,149543,7929],{"class":1993},[144,149545,3769],{"class":154},[144,149547,149548],{"class":146,"line":66},[144,149549,149550],{"class":150},"    pass\n",[144,149552,149553],{"class":146,"line":1210},[144,149554,2430],{"emptyLinePlaceholder":72},[144,149556,149557],{"class":146,"line":1225},[144,149558,2430],{"emptyLinePlaceholder":72},[144,149560,149561,149564,149566],{"class":146,"line":1231},[144,149562,149563],{"class":154},"student1 ",[144,149565,200],{"class":150},[144,149567,149499],{"class":154},[144,149569,149570,149573,149575],{"class":146,"line":1245},[144,149571,149572],{"class":154},"student2 ",[144,149574,200],{"class":150},[144,149576,149499],{"class":154},[14,149578,149579,149582,149583,101031,149586,149589],{},[141,149580,149581],{},"Student"," 是类，",[141,149584,149585],{},"student1",[141,149587,149588],{},"student2"," 是对象。",[18,149591,149593],{"id":149592},"_113-属性","11.3 属性",[14,149595,149596],{},"属性是对象保存的数据。",[135,149598,149600],{"className":30391,"code":149599,"language":30393,"meta":30,"style":30},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[141,149601,149602,149610,149614,149618,149622,149630,149638,149646,149650,149657],{"__ignoreMap":30},[144,149603,149604,149606,149608],{"class":146,"line":147},[144,149605,14725],{"class":150},[144,149607,7929],{"class":1993},[144,149609,3769],{"class":154},[144,149611,149612],{"class":146,"line":66},[144,149613,149550],{"class":150},[144,149615,149616],{"class":146,"line":1210},[144,149617,2430],{"emptyLinePlaceholder":72},[144,149619,149620],{"class":146,"line":1225},[144,149621,2430],{"emptyLinePlaceholder":72},[144,149623,149624,149626,149628],{"class":146,"line":1231},[144,149625,149494],{"class":154},[144,149627,200],{"class":150},[144,149629,149499],{"class":154},[144,149631,149632,149634,149636],{"class":146,"line":1245},[144,149633,149504],{"class":154},[144,149635,200],{"class":150},[144,149637,149366],{"class":259},[144,149639,149640,149642,149644],{"class":146,"line":1251},[144,149641,149513],{"class":154},[144,149643,200],{"class":150},[144,149645,146564],{"class":203},[144,149647,149648],{"class":146,"line":1342},[144,149649,2430],{"emptyLinePlaceholder":72},[144,149651,149652,149654],{"class":146,"line":1348},[144,149653,30428],{"class":203},[144,149655,149656],{"class":154},"(student.name)\n",[144,149658,149659,149661],{"class":146,"line":1360},[144,149660,30428],{"class":203},[144,149662,149663],{"class":154},"(student.age)\n",[14,149665,149666],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[18,149668,149670],{"id":149669},"_114-方法","11.4 方法",[14,149672,149673],{},"类中的函数叫方法。",[135,149675,149676],{"className":30391,"code":149434,"language":30393,"meta":30,"style":30},[141,149677,149678,149686,149694,149722,149726,149730,149738,149746,149754],{"__ignoreMap":30},[144,149679,149680,149682,149684],{"class":146,"line":147},[144,149681,14725],{"class":150},[144,149683,7929],{"class":1993},[144,149685,3769],{"class":154},[144,149687,149688,149690,149692],{"class":146,"line":66},[144,149689,30814],{"class":150},[144,149691,149385],{"class":1993},[144,149693,30820],{"class":154},[144,149695,149696,149698,149700,149702,149704,149706,149708,149710,149712,149714,149716,149718,149720],{"class":146,"line":1210},[144,149697,32464],{"class":203},[144,149699,155],{"class":154},[144,149701,207],{"class":150},[144,149703,149399],{"class":259},[144,149705,149465],{"class":203},[144,149707,80314],{"class":154},[144,149709,1101],{"class":203},[144,149711,149408],{"class":259},[144,149713,149465],{"class":203},[144,149715,80326],{"class":154},[144,149717,1101],{"class":203},[144,149719,149417],{"class":259},[144,149721,161],{"class":154},[144,149723,149724],{"class":146,"line":1225},[144,149725,2430],{"emptyLinePlaceholder":72},[144,149727,149728],{"class":146,"line":1231},[144,149729,2430],{"emptyLinePlaceholder":72},[144,149731,149732,149734,149736],{"class":146,"line":1245},[144,149733,149494],{"class":154},[144,149735,200],{"class":150},[144,149737,149499],{"class":154},[144,149739,149740,149742,149744],{"class":146,"line":1251},[144,149741,149504],{"class":154},[144,149743,200],{"class":150},[144,149745,149366],{"class":259},[144,149747,149748,149750,149752],{"class":146,"line":1342},[144,149749,149513],{"class":154},[144,149751,200],{"class":150},[144,149753,146564],{"class":203},[144,149755,149756],{"class":146,"line":1348},[144,149757,149522],{"class":154},[14,149759,149760,149762,149763,149765],{},[141,149761,30836],{}," 表示当前对象。调用方法时不需要手动传入 ",[141,149764,30836],{},"，Python 会自动传。",[18,149767,149769],{"id":149768},"_115-构造方法__init__","11.5 构造方法__init__",[14,149771,149772,149774],{},[141,149773,30842],{}," 在对象创建时自动执行，用于初始化属性。",[135,149776,149778],{"className":30391,"code":149777,"language":30393,"meta":30,"style":30},"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",[141,149779,149780,149788,149797,149809,149821,149832,149836,149844,149882,149886,149890,149912],{"__ignoreMap":30},[144,149781,149782,149784,149786],{"class":146,"line":147},[144,149783,14725],{"class":150},[144,149785,7929],{"class":1993},[144,149787,3769],{"class":154},[144,149789,149790,149792,149794],{"class":146,"line":66},[144,149791,30814],{"class":150},[144,149793,30817],{"class":203},[144,149795,149796],{"class":154},"(self, name, age, score):\n",[144,149798,149799,149801,149804,149806],{"class":146,"line":1210},[144,149800,30858],{"class":203},[144,149802,149803],{"class":154},".name ",[144,149805,200],{"class":150},[144,149807,149808],{"class":154}," name\n",[144,149810,149811,149813,149816,149818],{"class":146,"line":1225},[144,149812,30858],{"class":203},[144,149814,149815],{"class":154},".age ",[144,149817,200],{"class":150},[144,149819,149820],{"class":154}," age\n",[144,149822,149823,149825,149828,149830],{"class":146,"line":1231},[144,149824,30858],{"class":203},[144,149826,149827],{"class":154},".score ",[144,149829,200],{"class":150},[144,149831,1609],{"class":154},[144,149833,149834],{"class":146,"line":1245},[144,149835,2430],{"emptyLinePlaceholder":72},[144,149837,149838,149840,149842],{"class":146,"line":1251},[144,149839,30814],{"class":150},[144,149841,149385],{"class":1993},[144,149843,30820],{"class":154},[144,149845,149846,149848,149850,149852,149854,149856,149858,149860,149862,149864,149866,149868,149871,149873,149876,149878,149880],{"class":146,"line":1342},[144,149847,32464],{"class":203},[144,149849,155],{"class":154},[144,149851,207],{"class":150},[144,149853,149399],{"class":259},[144,149855,149465],{"class":203},[144,149857,80314],{"class":154},[144,149859,1101],{"class":203},[144,149861,149408],{"class":259},[144,149863,149465],{"class":203},[144,149865,80326],{"class":154},[144,149867,1101],{"class":203},[144,149869,149870],{"class":259},"岁，成绩",[144,149872,149465],{"class":203},[144,149874,149875],{"class":154},".score",[144,149877,1101],{"class":203},[144,149879,406],{"class":259},[144,149881,161],{"class":154},[144,149883,149884],{"class":146,"line":1348},[144,149885,2430],{"emptyLinePlaceholder":72},[144,149887,149888],{"class":146,"line":1360},[144,149889,2430],{"emptyLinePlaceholder":72},[144,149891,149892,149894,149896,149899,149902,149904,149906,149908,149910],{"class":146,"line":1642},[144,149893,149494],{"class":154},[144,149895,200],{"class":150},[144,149897,149898],{"class":154}," Student(",[144,149900,149901],{"class":259},"\"小明\"",[144,149903,12466],{"class":154},[144,149905,805],{"class":203},[144,149907,12466],{"class":154},[144,149909,1144],{"class":203},[144,149911,161],{"class":154},[144,149913,149914],{"class":146,"line":1647},[144,149915,149522],{"class":154},[14,149917,149918],{},"构造方法的好处：",[98,149920,149921,149924,149927],{},[101,149922,149923],{},"创建对象时必须提供必要数据。",[101,149925,149926],{},"属性初始化集中，不容易漏。",[101,149928,149929],{},"对象状态更完整。",[18,149931,149933,149934],{"id":149932},"_116-str","11.6 ",[304,149935,1330],{},[14,149937,149938,149939,28398],{},"直接打印对象时，默认输出不直观。可以定义 ",[141,149940,149941],{},"__str__",[135,149943,149945],{"className":30391,"code":149944,"language":30393,"meta":30,"style":30},"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",[141,149946,149947,149955,149964,149974,149984,149988,149997,150025,150029,150033,150049],{"__ignoreMap":30},[144,149948,149949,149951,149953],{"class":146,"line":147},[144,149950,14725],{"class":150},[144,149952,7929],{"class":1993},[144,149954,3769],{"class":154},[144,149956,149957,149959,149961],{"class":146,"line":66},[144,149958,30814],{"class":150},[144,149960,30817],{"class":203},[144,149962,149963],{"class":154},"(self, name, age):\n",[144,149965,149966,149968,149970,149972],{"class":146,"line":1210},[144,149967,30858],{"class":203},[144,149969,149803],{"class":154},[144,149971,200],{"class":150},[144,149973,149808],{"class":154},[144,149975,149976,149978,149980,149982],{"class":146,"line":1225},[144,149977,30858],{"class":203},[144,149979,149815],{"class":154},[144,149981,200],{"class":150},[144,149983,149820],{"class":154},[144,149985,149986],{"class":146,"line":1231},[144,149987,2430],{"emptyLinePlaceholder":72},[144,149989,149990,149992,149995],{"class":146,"line":1245},[144,149991,30814],{"class":150},[144,149993,149994],{"class":203}," __str__",[144,149996,30820],{"class":154},[144,149998,149999,150001,150004,150007,150009,150011,150013,150016,150018,150020,150022],{"class":146,"line":1251},[144,150000,14783],{"class":150},[144,150002,150003],{"class":150}," f",[144,150005,150006],{"class":259},"\"Student(name=",[144,150008,149465],{"class":203},[144,150010,80314],{"class":154},[144,150012,1101],{"class":203},[144,150014,150015],{"class":259},", age=",[144,150017,149465],{"class":203},[144,150019,80326],{"class":154},[144,150021,1101],{"class":203},[144,150023,150024],{"class":259},")\"\n",[144,150026,150027],{"class":146,"line":1342},[144,150028,2430],{"emptyLinePlaceholder":72},[144,150030,150031],{"class":146,"line":1348},[144,150032,2430],{"emptyLinePlaceholder":72},[144,150034,150035,150037,150039,150041,150043,150045,150047],{"class":146,"line":1360},[144,150036,149494],{"class":154},[144,150038,200],{"class":150},[144,150040,149898],{"class":154},[144,150042,149901],{"class":259},[144,150044,12466],{"class":154},[144,150046,805],{"class":203},[144,150048,161],{"class":154},[144,150050,150051,150053],{"class":146,"line":1642},[144,150052,30428],{"class":203},[144,150054,150055],{"class":154},"(student)\n",[18,150057,150059],{"id":150058},"_117-封装","11.7 封装",[14,150061,150062],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150064,150065],{},"Python 中以双下划线开头的属性通常视为私有属性。",[135,150067,150069],{"className":30391,"code":150068,"language":30393,"meta":30,"style":30},"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",[141,150070,150071,150080,150089,150101,150113,150117,150126,150135,150139,150149,150162,150173,150178,150189,150193,150202,150214,150225,150229,150242,150253,150257,150268,150272,150276,150294,150303,150312],{"__ignoreMap":30},[144,150072,150073,150075,150078],{"class":146,"line":147},[144,150074,14725],{"class":150},[144,150076,150077],{"class":1993}," Account",[144,150079,3769],{"class":154},[144,150081,150082,150084,150086],{"class":146,"line":66},[144,150083,30814],{"class":150},[144,150085,30817],{"class":203},[144,150087,150088],{"class":154},"(self, owner, balance):\n",[144,150090,150091,150093,150096,150098],{"class":146,"line":1210},[144,150092,30858],{"class":203},[144,150094,150095],{"class":154},".owner ",[144,150097,200],{"class":150},[144,150099,150100],{"class":154}," owner\n",[144,150102,150103,150105,150108,150110],{"class":146,"line":1225},[144,150104,30858],{"class":203},[144,150106,150107],{"class":154},".__balance ",[144,150109,200],{"class":150},[144,150111,150112],{"class":154}," balance\n",[144,150114,150115],{"class":146,"line":1231},[144,150116,2430],{"emptyLinePlaceholder":72},[144,150118,150119,150121,150124],{"class":146,"line":1245},[144,150120,30814],{"class":150},[144,150122,150123],{"class":1993}," get_balance",[144,150125,30820],{"class":154},[144,150127,150128,150130,150132],{"class":146,"line":1251},[144,150129,14783],{"class":150},[144,150131,38886],{"class":203},[144,150133,150134],{"class":154},".__balance\n",[144,150136,150137],{"class":146,"line":1342},[144,150138,2430],{"emptyLinePlaceholder":72},[144,150140,150141,150143,150146],{"class":146,"line":1348},[144,150142,30814],{"class":150},[144,150144,150145],{"class":1993}," deposit",[144,150147,150148],{"class":154},"(self, money):\n",[144,150150,150151,150153,150156,150158,150160],{"class":146,"line":1360},[144,150152,2527],{"class":150},[144,150154,150155],{"class":154}," money ",[144,150157,1618],{"class":150},[144,150159,4123],{"class":203},[144,150161,3769],{"class":154},[144,150163,150164,150166,150168,150171],{"class":146,"line":1642},[144,150165,34663],{"class":203},[144,150167,155],{"class":154},[144,150169,150170],{"class":259},"\"存款金额必须大于0\"",[144,150172,161],{"class":154},[144,150174,150175],{"class":146,"line":1647},[144,150176,150177],{"class":150},"            return\n",[144,150179,150180,150182,150184,150186],{"class":146,"line":1653},[144,150181,30858],{"class":203},[144,150183,150107],{"class":154},[144,150185,9508],{"class":150},[144,150187,150188],{"class":154}," money\n",[144,150190,150191],{"class":146,"line":1658},[144,150192,2430],{"emptyLinePlaceholder":72},[144,150194,150195,150197,150200],{"class":146,"line":1672},[144,150196,30814],{"class":150},[144,150198,150199],{"class":1993}," withdraw",[144,150201,150148],{"class":154},[144,150203,150204,150206,150208,150210,150212],{"class":146,"line":1677},[144,150205,2527],{"class":150},[144,150207,150155],{"class":154},[144,150209,1618],{"class":150},[144,150211,4123],{"class":203},[144,150213,3769],{"class":154},[144,150215,150216,150218,150220,150223],{"class":146,"line":1683},[144,150217,34663],{"class":203},[144,150219,155],{"class":154},[144,150221,150222],{"class":259},"\"取款金额必须大于0\"",[144,150224,161],{"class":154},[144,150226,150227],{"class":146,"line":1704},[144,150228,150177],{"class":150},[144,150230,150231,150233,150235,150237,150239],{"class":146,"line":1709},[144,150232,2527],{"class":150},[144,150234,150155],{"class":154},[144,150236,1115],{"class":150},[144,150238,38886],{"class":203},[144,150240,150241],{"class":154},".__balance:\n",[144,150243,150244,150246,150248,150251],{"class":146,"line":1723},[144,150245,34663],{"class":203},[144,150247,155],{"class":154},[144,150249,150250],{"class":259},"\"余额不足\"",[144,150252,161],{"class":154},[144,150254,150255],{"class":146,"line":1728},[144,150256,150177],{"class":150},[144,150258,150259,150261,150263,150266],{"class":146,"line":1757},[144,150260,30858],{"class":203},[144,150262,150107],{"class":154},[144,150264,150265],{"class":150},"-=",[144,150267,150188],{"class":154},[144,150269,150270],{"class":146,"line":1762},[144,150271,2430],{"emptyLinePlaceholder":72},[144,150273,150274],{"class":146,"line":1779},[144,150275,2430],{"emptyLinePlaceholder":72},[144,150277,150278,150281,150283,150286,150288,150290,150292],{"class":146,"line":1784},[144,150279,150280],{"class":154},"account ",[144,150282,200],{"class":150},[144,150284,150285],{"class":154}," Account(",[144,150287,149901],{"class":259},[144,150289,12466],{"class":154},[144,150291,6441],{"class":203},[144,150293,161],{"class":154},[144,150295,150296,150299,150301],{"class":146,"line":1789},[144,150297,150298],{"class":154},"account.deposit(",[144,150300,1752],{"class":203},[144,150302,161],{"class":154},[144,150304,150305,150308,150310],{"class":146,"line":1794},[144,150306,150307],{"class":154},"account.withdraw(",[144,150309,466],{"class":203},[144,150311,161],{"class":154},[144,150313,150314,150316],{"class":146,"line":1808},[144,150315,30428],{"class":203},[144,150317,150318],{"class":154},"(account.get_balance())\n",[14,150320,150321],{},"封装的意义是避免外部随意修改内部状态。",[18,150323,150325],{"id":150324},"_118-继承","11.8 继承",[14,150327,150328],{},"继承可以让子类复用父类的属性和方法。",[135,150330,150332],{"className":30391,"code":150331,"language":30393,"meta":30,"style":30},"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",[141,150333,150334,150343,150352,150363,150367,150371,150385,150394,150405,150409,150413,150423,150428],{"__ignoreMap":30},[144,150335,150336,150338,150341],{"class":146,"line":147},[144,150337,14725],{"class":150},[144,150339,150340],{"class":1993}," Animal",[144,150342,3769],{"class":154},[144,150344,150345,150347,150350],{"class":146,"line":66},[144,150346,30814],{"class":150},[144,150348,150349],{"class":1993}," eat",[144,150351,30820],{"class":154},[144,150353,150354,150356,150358,150361],{"class":146,"line":1210},[144,150355,32464],{"class":203},[144,150357,155],{"class":154},[144,150359,150360],{"class":259},"\"吃东西\"",[144,150362,161],{"class":154},[144,150364,150365],{"class":146,"line":1225},[144,150366,2430],{"emptyLinePlaceholder":72},[144,150368,150369],{"class":146,"line":1231},[144,150370,2430],{"emptyLinePlaceholder":72},[144,150372,150373,150375,150378,150380,150383],{"class":146,"line":1245},[144,150374,14725],{"class":150},[144,150376,150377],{"class":1993}," Dog",[144,150379,155],{"class":154},[144,150381,150382],{"class":1993},"Animal",[144,150384,30799],{"class":154},[144,150386,150387,150389,150392],{"class":146,"line":1251},[144,150388,30814],{"class":150},[144,150390,150391],{"class":1993}," bark",[144,150393,30820],{"class":154},[144,150395,150396,150398,150400,150403],{"class":146,"line":1342},[144,150397,32464],{"class":203},[144,150399,155],{"class":154},[144,150401,150402],{"class":259},"\"汪汪\"",[144,150404,161],{"class":154},[144,150406,150407],{"class":146,"line":1348},[144,150408,2430],{"emptyLinePlaceholder":72},[144,150410,150411],{"class":146,"line":1360},[144,150412,2430],{"emptyLinePlaceholder":72},[144,150414,150415,150418,150420],{"class":146,"line":1642},[144,150416,150417],{"class":154},"dog ",[144,150419,200],{"class":150},[144,150421,150422],{"class":154}," Dog()\n",[144,150424,150425],{"class":146,"line":1647},[144,150426,150427],{"class":154},"dog.eat()\n",[144,150429,150430],{"class":146,"line":1653},[144,150431,150432],{"class":154},"dog.bark()\n",[14,150434,150435],{},"子类可以扩展新方法，也可以重写父类方法。",[18,150437,150439],{"id":150438},"_119-方法重写","11.9 方法重写",[135,150441,150443],{"className":30391,"code":150442,"language":30393,"meta":30,"style":30},"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",[141,150444,150445,150453,150462,150473,150477,150481,150493,150501,150511,150515,150519,150532,150540,150551,150555,150559,150567,150577,150581,150586],{"__ignoreMap":30},[144,150446,150447,150449,150451],{"class":146,"line":147},[144,150448,14725],{"class":150},[144,150450,150340],{"class":1993},[144,150452,3769],{"class":154},[144,150454,150455,150457,150460],{"class":146,"line":66},[144,150456,30814],{"class":150},[144,150458,150459],{"class":1993}," speak",[144,150461,30820],{"class":154},[144,150463,150464,150466,150468,150471],{"class":146,"line":1210},[144,150465,32464],{"class":203},[144,150467,155],{"class":154},[144,150469,150470],{"class":259},"\"动物叫\"",[144,150472,161],{"class":154},[144,150474,150475],{"class":146,"line":1225},[144,150476,2430],{"emptyLinePlaceholder":72},[144,150478,150479],{"class":146,"line":1231},[144,150480,2430],{"emptyLinePlaceholder":72},[144,150482,150483,150485,150487,150489,150491],{"class":146,"line":1245},[144,150484,14725],{"class":150},[144,150486,150377],{"class":1993},[144,150488,155],{"class":154},[144,150490,150382],{"class":1993},[144,150492,30799],{"class":154},[144,150494,150495,150497,150499],{"class":146,"line":1251},[144,150496,30814],{"class":150},[144,150498,150459],{"class":1993},[144,150500,30820],{"class":154},[144,150502,150503,150505,150507,150509],{"class":146,"line":1342},[144,150504,32464],{"class":203},[144,150506,155],{"class":154},[144,150508,150402],{"class":259},[144,150510,161],{"class":154},[144,150512,150513],{"class":146,"line":1348},[144,150514,2430],{"emptyLinePlaceholder":72},[144,150516,150517],{"class":146,"line":1360},[144,150518,2430],{"emptyLinePlaceholder":72},[144,150520,150521,150523,150526,150528,150530],{"class":146,"line":1642},[144,150522,14725],{"class":150},[144,150524,150525],{"class":1993}," Cat",[144,150527,155],{"class":154},[144,150529,150382],{"class":1993},[144,150531,30799],{"class":154},[144,150533,150534,150536,150538],{"class":146,"line":1647},[144,150535,30814],{"class":150},[144,150537,150459],{"class":1993},[144,150539,30820],{"class":154},[144,150541,150542,150544,150546,150549],{"class":146,"line":1653},[144,150543,32464],{"class":203},[144,150545,155],{"class":154},[144,150547,150548],{"class":259},"\"喵喵\"",[144,150550,161],{"class":154},[144,150552,150553],{"class":146,"line":1658},[144,150554,2430],{"emptyLinePlaceholder":72},[144,150556,150557],{"class":146,"line":1672},[144,150558,2430],{"emptyLinePlaceholder":72},[144,150560,150561,150563,150565],{"class":146,"line":1677},[144,150562,150417],{"class":154},[144,150564,200],{"class":150},[144,150566,150422],{"class":154},[144,150568,150569,150572,150574],{"class":146,"line":1683},[144,150570,150571],{"class":154},"cat ",[144,150573,200],{"class":150},[144,150575,150576],{"class":154}," Cat()\n",[144,150578,150579],{"class":146,"line":1704},[144,150580,2430],{"emptyLinePlaceholder":72},[144,150582,150583],{"class":146,"line":1709},[144,150584,150585],{"class":154},"dog.speak()\n",[144,150587,150588],{"class":146,"line":1723},[144,150589,150590],{"class":154},"cat.speak()\n",[18,150592,150594],{"id":150593},"_1110-super","11.10 super",[14,150596,150597,150598,150601],{},"子类可以通过 ",[141,150599,150600],{},"super()"," 调用父类方法。",[135,150603,150605],{"className":30391,"code":150604,"language":30393,"meta":30,"style":30},"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",[141,150606,150607,150615,150624,150634,150638,150642,150654,150663,150674,150684,150688,150692,150708],{"__ignoreMap":30},[144,150608,150609,150611,150613],{"class":146,"line":147},[144,150610,14725],{"class":150},[144,150612,15600],{"class":1993},[144,150614,3769],{"class":154},[144,150616,150617,150619,150621],{"class":146,"line":66},[144,150618,30814],{"class":150},[144,150620,30817],{"class":203},[144,150622,150623],{"class":154},"(self, name):\n",[144,150625,150626,150628,150630,150632],{"class":146,"line":1210},[144,150627,30858],{"class":203},[144,150629,149803],{"class":154},[144,150631,200],{"class":150},[144,150633,149808],{"class":154},[144,150635,150636],{"class":146,"line":1225},[144,150637,2430],{"emptyLinePlaceholder":72},[144,150639,150640],{"class":146,"line":1231},[144,150641,2430],{"emptyLinePlaceholder":72},[144,150643,150644,150646,150648,150650,150652],{"class":146,"line":1245},[144,150645,14725],{"class":150},[144,150647,7929],{"class":1993},[144,150649,155],{"class":154},[144,150651,19077],{"class":1993},[144,150653,30799],{"class":154},[144,150655,150656,150658,150660],{"class":146,"line":1251},[144,150657,30814],{"class":150},[144,150659,30817],{"class":203},[144,150661,150662],{"class":154},"(self, name, score):\n",[144,150664,150665,150667,150669,150671],{"class":146,"line":1342},[144,150666,30830],{"class":203},[144,150668,17292],{"class":154},[144,150670,30842],{"class":203},[144,150672,150673],{"class":154},"(name)\n",[144,150675,150676,150678,150680,150682],{"class":146,"line":1348},[144,150677,30858],{"class":203},[144,150679,149827],{"class":154},[144,150681,200],{"class":150},[144,150683,1609],{"class":154},[144,150685,150686],{"class":146,"line":1360},[144,150687,2430],{"emptyLinePlaceholder":72},[144,150689,150690],{"class":146,"line":1642},[144,150691,2430],{"emptyLinePlaceholder":72},[144,150693,150694,150696,150698,150700,150702,150704,150706],{"class":146,"line":1647},[144,150695,149494],{"class":154},[144,150697,200],{"class":150},[144,150699,149898],{"class":154},[144,150701,149901],{"class":259},[144,150703,12466],{"class":154},[144,150705,1144],{"class":203},[144,150707,161],{"class":154},[144,150709,150710,150712],{"class":146,"line":1653},[144,150711,30428],{"class":203},[144,150713,150714],{"class":154},"(student.name, student.score)\n",[18,150716,150718],{"id":150717},"_1111-多态","11.11 多态",[14,150720,150721],{},"多态指不同对象响应同一个方法，表现出不同结果。",[135,150723,150725],{"className":30391,"code":150724,"language":30393,"meta":30,"style":30},"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",[141,150726,150727,150735,150743,150753,150757,150761,150769,150777,150787,150791,150795,150805,150810,150814,150818,150823],{"__ignoreMap":30},[144,150728,150729,150731,150733],{"class":146,"line":147},[144,150730,14725],{"class":150},[144,150732,150377],{"class":1993},[144,150734,3769],{"class":154},[144,150736,150737,150739,150741],{"class":146,"line":66},[144,150738,30814],{"class":150},[144,150740,150459],{"class":1993},[144,150742,30820],{"class":154},[144,150744,150745,150747,150749,150751],{"class":146,"line":1210},[144,150746,32464],{"class":203},[144,150748,155],{"class":154},[144,150750,150402],{"class":259},[144,150752,161],{"class":154},[144,150754,150755],{"class":146,"line":1225},[144,150756,2430],{"emptyLinePlaceholder":72},[144,150758,150759],{"class":146,"line":1231},[144,150760,2430],{"emptyLinePlaceholder":72},[144,150762,150763,150765,150767],{"class":146,"line":1245},[144,150764,14725],{"class":150},[144,150766,150525],{"class":1993},[144,150768,3769],{"class":154},[144,150770,150771,150773,150775],{"class":146,"line":1251},[144,150772,30814],{"class":150},[144,150774,150459],{"class":1993},[144,150776,30820],{"class":154},[144,150778,150779,150781,150783,150785],{"class":146,"line":1342},[144,150780,32464],{"class":203},[144,150782,155],{"class":154},[144,150784,150548],{"class":259},[144,150786,161],{"class":154},[144,150788,150789],{"class":146,"line":1348},[144,150790,2430],{"emptyLinePlaceholder":72},[144,150792,150793],{"class":146,"line":1360},[144,150794,2430],{"emptyLinePlaceholder":72},[144,150796,150797,150799,150802],{"class":146,"line":1642},[144,150798,31960],{"class":150},[144,150800,150801],{"class":1993}," make_sound",[144,150803,150804],{"class":154},"(animal):\n",[144,150806,150807],{"class":146,"line":1647},[144,150808,150809],{"class":154},"    animal.speak()\n",[144,150811,150812],{"class":146,"line":1653},[144,150813,2430],{"emptyLinePlaceholder":72},[144,150815,150816],{"class":146,"line":1658},[144,150817,2430],{"emptyLinePlaceholder":72},[144,150819,150820],{"class":146,"line":1672},[144,150821,150822],{"class":154},"make_sound(Dog())\n",[144,150824,150825],{"class":146,"line":1677},[144,150826,150827],{"class":154},"make_sound(Cat())\n",[14,150829,150830],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[18,150832,150834],{"id":150833},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,150836,150837],{},"实例属性属于对象：",[135,150839,150841],{"className":30391,"code":150840,"language":30393,"meta":30,"style":30},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[141,150842,150843,150851,150859],{"__ignoreMap":30},[144,150844,150845,150847,150849],{"class":146,"line":147},[144,150846,14725],{"class":150},[144,150848,7929],{"class":1993},[144,150850,3769],{"class":154},[144,150852,150853,150855,150857],{"class":146,"line":66},[144,150854,30814],{"class":150},[144,150856,30817],{"class":203},[144,150858,150623],{"class":154},[144,150860,150861,150863,150865,150867],{"class":146,"line":1210},[144,150862,30858],{"class":203},[144,150864,149803],{"class":154},[144,150866,200],{"class":150},[144,150868,149808],{"class":154},[14,150870,150871],{},"类属性属于类，所有对象共享：",[135,150873,150875],{"className":30391,"code":150874,"language":30393,"meta":30,"style":30},"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",[141,150876,150877,150885,150895,150899,150907,150917,150921,150925,150938,150952,150956,150963,150970],{"__ignoreMap":30},[144,150878,150879,150881,150883],{"class":146,"line":147},[144,150880,14725],{"class":150},[144,150882,7929],{"class":1993},[144,150884,3769],{"class":154},[144,150886,150887,150890,150892],{"class":146,"line":66},[144,150888,150889],{"class":154},"    school ",[144,150891,200],{"class":150},[144,150893,150894],{"class":259}," \"黑马学校\"\n",[144,150896,150897],{"class":146,"line":1210},[144,150898,2430],{"emptyLinePlaceholder":72},[144,150900,150901,150903,150905],{"class":146,"line":1225},[144,150902,30814],{"class":150},[144,150904,30817],{"class":203},[144,150906,150623],{"class":154},[144,150908,150909,150911,150913,150915],{"class":146,"line":1231},[144,150910,30858],{"class":203},[144,150912,149803],{"class":154},[144,150914,200],{"class":150},[144,150916,149808],{"class":154},[144,150918,150919],{"class":146,"line":1245},[144,150920,2430],{"emptyLinePlaceholder":72},[144,150922,150923],{"class":146,"line":1251},[144,150924,2430],{"emptyLinePlaceholder":72},[144,150926,150927,150930,150932,150934,150936],{"class":146,"line":1342},[144,150928,150929],{"class":154},"s1 ",[144,150931,200],{"class":150},[144,150933,149898],{"class":154},[144,150935,149901],{"class":259},[144,150937,161],{"class":154},[144,150939,150940,150943,150945,150947,150950],{"class":146,"line":1348},[144,150941,150942],{"class":154},"s2 ",[144,150944,200],{"class":150},[144,150946,149898],{"class":154},[144,150948,150949],{"class":259},"\"小红\"",[144,150951,161],{"class":154},[144,150953,150954],{"class":146,"line":1360},[144,150955,2430],{"emptyLinePlaceholder":72},[144,150957,150958,150960],{"class":146,"line":1642},[144,150959,30428],{"class":203},[144,150961,150962],{"class":154},"(s1.school)\n",[144,150964,150965,150967],{"class":146,"line":1647},[144,150966,30428],{"class":203},[144,150968,150969],{"class":154},"(s2.school)\n",[144,150971,150972,150974],{"class":146,"line":1653},[144,150973,30428],{"class":203},[144,150975,150976],{"class":154},"(Student.school)\n",[14,150978,150979],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[18,150981,150983],{"id":150982},"_1113-类方法和静态方法","11.13 类方法和静态方法",[115,150985,150987],{"id":150986},"_11131-类方法","11.13.1 类方法",[14,150989,150990,150991,150994,150995,28398],{},"类方法使用 ",[141,150992,150993],{},"@classmethod","，第一个参数通常是 ",[141,150996,150997],{},"cls",[135,150999,151001],{"className":30391,"code":151000,"language":30393,"meta":30,"style":30},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[141,151002,151003,151011,151019,151023,151031,151041,151051,151055,151059],{"__ignoreMap":30},[144,151004,151005,151007,151009],{"class":146,"line":147},[144,151006,14725],{"class":150},[144,151008,7929],{"class":1993},[144,151010,3769],{"class":154},[144,151012,151013,151015,151017],{"class":146,"line":66},[144,151014,150889],{"class":154},[144,151016,200],{"class":150},[144,151018,150894],{"class":259},[144,151020,151021],{"class":146,"line":1210},[144,151022,2430],{"emptyLinePlaceholder":72},[144,151024,151025,151028],{"class":146,"line":1225},[144,151026,151027],{"class":1993},"    @",[144,151029,151030],{"class":203},"classmethod\n",[144,151032,151033,151035,151038],{"class":146,"line":1231},[144,151034,30814],{"class":150},[144,151036,151037],{"class":1993}," get_school",[144,151039,151040],{"class":154},"(cls):\n",[144,151042,151043,151045,151048],{"class":146,"line":1245},[144,151044,14783],{"class":150},[144,151046,151047],{"class":203}," cls",[144,151049,151050],{"class":154},".school\n",[144,151052,151053],{"class":146,"line":1251},[144,151054,2430],{"emptyLinePlaceholder":72},[144,151056,151057],{"class":146,"line":1342},[144,151058,2430],{"emptyLinePlaceholder":72},[144,151060,151061,151063],{"class":146,"line":1348},[144,151062,30428],{"class":203},[144,151064,151065],{"class":154},"(Student.get_school())\n",[115,151067,151069],{"id":151068},"_11132-静态方法","11.13.2 静态方法",[14,151071,151072,151073,151076],{},"静态方法使用 ",[141,151074,151075],{},"@staticmethod","，不需要访问实例和类。",[135,151078,151080],{"className":30391,"code":151079,"language":30393,"meta":30,"style":30},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[141,151081,151082,151091,151098,151107,151118,151122,151126],{"__ignoreMap":30},[144,151083,151084,151086,151089],{"class":146,"line":147},[144,151085,14725],{"class":150},[144,151087,151088],{"class":1993}," MathUtils",[144,151090,3769],{"class":154},[144,151092,151093,151095],{"class":146,"line":66},[144,151094,151027],{"class":1993},[144,151096,151097],{"class":203},"staticmethod\n",[144,151099,151100,151102,151104],{"class":146,"line":1210},[144,151101,30814],{"class":150},[144,151103,5240],{"class":1993},[144,151105,151106],{"class":154},"(a, b):\n",[144,151108,151109,151111,151113,151115],{"class":146,"line":1225},[144,151110,14783],{"class":150},[144,151112,10900],{"class":154},[144,151114,636],{"class":150},[144,151116,151117],{"class":154}," b\n",[144,151119,151120],{"class":146,"line":1231},[144,151121,2430],{"emptyLinePlaceholder":72},[144,151123,151124],{"class":146,"line":1245},[144,151125,2430],{"emptyLinePlaceholder":72},[144,151127,151128,151130,151133,151135,151137,151139],{"class":146,"line":1251},[144,151129,30428],{"class":203},[144,151131,151132],{"class":154},"(MathUtils.add(",[144,151134,372],{"class":203},[144,151136,12466],{"class":154},[144,151138,232],{"class":203},[144,151140,30510],{"class":154},[14,151142,151143],{},"静态方法本质上是放在类命名空间里的普通函数。",[18,151145,151147],{"id":151146},"_1114-dataclass","11.14 dataclass",[14,151149,151150,151153],{},[141,151151,151152],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[135,151155,151157],{"className":30391,"code":151156,"language":30393,"meta":30,"style":30},"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",[141,151158,151159,151171,151175,151179,151184,151192,151200,151208,151216,151220,151224,151244],{"__ignoreMap":30},[144,151160,151161,151163,151166,151168],{"class":146,"line":147},[144,151162,30750],{"class":150},[144,151164,151165],{"class":154}," dataclasses ",[144,151167,30405],{"class":150},[144,151169,151170],{"class":154}," dataclass\n",[144,151172,151173],{"class":146,"line":66},[144,151174,2430],{"emptyLinePlaceholder":72},[144,151176,151177],{"class":146,"line":1210},[144,151178,2430],{"emptyLinePlaceholder":72},[144,151180,151181],{"class":146,"line":1225},[144,151182,151183],{"class":1993},"@dataclass\n",[144,151185,151186,151188,151190],{"class":146,"line":1231},[144,151187,14725],{"class":150},[144,151189,7929],{"class":1993},[144,151191,3769],{"class":154},[144,151193,151194,151197],{"class":146,"line":1245},[144,151195,151196],{"class":154},"    name: ",[144,151198,151199],{"class":203},"str\n",[144,151201,151202,151205],{"class":146,"line":1251},[144,151203,151204],{"class":154},"    age: ",[144,151206,151207],{"class":203},"int\n",[144,151209,151210,151213],{"class":146,"line":1342},[144,151211,151212],{"class":154},"    score: ",[144,151214,151215],{"class":203},"float\n",[144,151217,151218],{"class":146,"line":1348},[144,151219,2430],{"emptyLinePlaceholder":72},[144,151221,151222],{"class":146,"line":1360},[144,151223,2430],{"emptyLinePlaceholder":72},[144,151225,151226,151228,151230,151232,151234,151236,151238,151240,151242],{"class":146,"line":1642},[144,151227,149494],{"class":154},[144,151229,200],{"class":150},[144,151231,149898],{"class":154},[144,151233,149901],{"class":259},[144,151235,12466],{"class":154},[144,151237,805],{"class":203},[144,151239,12466],{"class":154},[144,151241,1144],{"class":203},[144,151243,161],{"class":154},[144,151245,151246,151248],{"class":146,"line":1647},[144,151247,30428],{"class":203},[144,151249,150055],{"class":154},[14,151251,151252,151253,367,151255,151258],{},"它会自动生成 ",[141,151254,30842],{},[141,151256,151257],{},"__repr__"," 等方法。适合数据模型类。",[18,151260,151262],{"id":151261},"_1115-小案例学生类","11.15 小案例：学生类",[135,151264,151266],{"className":30391,"code":151265,"language":30393,"meta":30,"style":30},"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",[141,151267,151268,151276,151285,151297,151307,151317,151327,151331,151340,151353,151357,151366,151372,151384,151396,151408,151420,151424,151428,151434,151444,151453,151463,151471,151479,151488,151492,151496,151504,151540,151544,151548,151573,151580],{"__ignoreMap":30},[144,151269,151270,151272,151274],{"class":146,"line":147},[144,151271,14725],{"class":150},[144,151273,7929],{"class":1993},[144,151275,3769],{"class":154},[144,151277,151278,151280,151282],{"class":146,"line":66},[144,151279,30814],{"class":150},[144,151281,30817],{"class":203},[144,151283,151284],{"class":154},"(self, student_id, name, age, score):\n",[144,151286,151287,151289,151292,151294],{"class":146,"line":1210},[144,151288,30858],{"class":203},[144,151290,151291],{"class":154},".student_id ",[144,151293,200],{"class":150},[144,151295,151296],{"class":154}," student_id\n",[144,151298,151299,151301,151303,151305],{"class":146,"line":1225},[144,151300,30858],{"class":203},[144,151302,149803],{"class":154},[144,151304,200],{"class":150},[144,151306,149808],{"class":154},[144,151308,151309,151311,151313,151315],{"class":146,"line":1231},[144,151310,30858],{"class":203},[144,151312,149815],{"class":154},[144,151314,200],{"class":150},[144,151316,149820],{"class":154},[144,151318,151319,151321,151323,151325],{"class":146,"line":1245},[144,151320,30858],{"class":203},[144,151322,149827],{"class":154},[144,151324,200],{"class":150},[144,151326,1609],{"class":154},[144,151328,151329],{"class":146,"line":1251},[144,151330,2430],{"emptyLinePlaceholder":72},[144,151332,151333,151335,151338],{"class":146,"line":1342},[144,151334,30814],{"class":150},[144,151336,151337],{"class":1993}," is_passed",[144,151339,30820],{"class":154},[144,151341,151342,151344,151346,151348,151350],{"class":146,"line":1348},[144,151343,14783],{"class":150},[144,151345,38886],{"class":203},[144,151347,149827],{"class":154},[144,151349,1740],{"class":150},[144,151351,151352],{"class":203}," 60\n",[144,151354,151355],{"class":146,"line":1360},[144,151356,2430],{"emptyLinePlaceholder":72},[144,151358,151359,151361,151364],{"class":146,"line":1642},[144,151360,30814],{"class":150},[144,151362,151363],{"class":1993}," to_dict",[144,151365,30820],{"class":154},[144,151367,151368,151370],{"class":146,"line":1647},[144,151369,14783],{"class":150},[144,151371,15603],{"class":154},[144,151373,151374,151377,151379,151381],{"class":146,"line":1653},[144,151375,151376],{"class":259},"            \"student_id\"",[144,151378,51450],{"class":154},[144,151380,30836],{"class":203},[144,151382,151383],{"class":154},".student_id,\n",[144,151385,151386,151389,151391,151393],{"class":146,"line":1658},[144,151387,151388],{"class":259},"            \"name\"",[144,151390,51450],{"class":154},[144,151392,30836],{"class":203},[144,151394,151395],{"class":154},".name,\n",[144,151397,151398,151401,151403,151405],{"class":146,"line":1672},[144,151399,151400],{"class":259},"            \"age\"",[144,151402,51450],{"class":154},[144,151404,30836],{"class":203},[144,151406,151407],{"class":154},".age,\n",[144,151409,151410,151413,151415,151417],{"class":146,"line":1677},[144,151411,151412],{"class":259},"            \"score\"",[144,151414,51450],{"class":154},[144,151416,30836],{"class":203},[144,151418,151419],{"class":154},".score,\n",[144,151421,151422],{"class":146,"line":1683},[144,151423,2559],{"class":154},[144,151425,151426],{"class":146,"line":1704},[144,151427,2430],{"emptyLinePlaceholder":72},[144,151429,151430,151432],{"class":146,"line":1709},[144,151431,151027],{"class":1993},[144,151433,151030],{"class":203},[144,151435,151436,151438,151441],{"class":146,"line":1723},[144,151437,30814],{"class":150},[144,151439,151440],{"class":1993}," from_dict",[144,151442,151443],{"class":154},"(cls, data):\n",[144,151445,151446,151448,151450],{"class":146,"line":1728},[144,151447,14783],{"class":150},[144,151449,151047],{"class":203},[144,151451,151452],{"class":154},"(\n",[144,151454,151455,151458,151461],{"class":146,"line":1757},[144,151456,151457],{"class":154},"            data[",[144,151459,151460],{"class":259},"\"student_id\"",[144,151462,87849],{"class":154},[144,151464,151465,151467,151469],{"class":146,"line":1762},[144,151466,151457],{"class":154},[144,151468,62692],{"class":259},[144,151470,87849],{"class":154},[144,151472,151473,151475,151477],{"class":146,"line":1779},[144,151474,151457],{"class":154},[144,151476,69137],{"class":259},[144,151478,87849],{"class":154},[144,151480,151481,151483,151486],{"class":146,"line":1784},[144,151482,151457],{"class":154},[144,151484,151485],{"class":259},"\"score\"",[144,151487,87849],{"class":154},[144,151489,151490],{"class":146,"line":1789},[144,151491,38139],{"class":154},[144,151493,151494],{"class":146,"line":1794},[144,151495,2430],{"emptyLinePlaceholder":72},[144,151497,151498,151500,151502],{"class":146,"line":1808},[144,151499,30814],{"class":150},[144,151501,149994],{"class":203},[144,151503,30820],{"class":154},[144,151505,151506,151508,151510,151512,151514,151517,151519,151522,151524,151526,151528,151530,151532,151534,151536,151538],{"class":146,"line":1813},[144,151507,14783],{"class":150},[144,151509,150003],{"class":150},[144,151511,406],{"class":259},[144,151513,149465],{"class":203},[144,151515,151516],{"class":154},".student_id",[144,151518,1101],{"class":203},[144,151520,151521],{"class":203}," {self",[144,151523,80314],{"class":154},[144,151525,1101],{"class":203},[144,151527,151521],{"class":203},[144,151529,80326],{"class":154},[144,151531,1101],{"class":203},[144,151533,151521],{"class":203},[144,151535,149875],{"class":154},[144,151537,1101],{"class":203},[144,151539,25146],{"class":259},[144,151541,151542],{"class":146,"line":2607},[144,151543,2430],{"emptyLinePlaceholder":72},[144,151545,151546],{"class":146,"line":2621},[144,151547,2430],{"emptyLinePlaceholder":72},[144,151549,151550,151552,151554,151556,151559,151561,151563,151565,151567,151569,151571],{"class":146,"line":2629},[144,151551,149494],{"class":154},[144,151553,200],{"class":150},[144,151555,149898],{"class":154},[144,151557,151558],{"class":259},"\"001\"",[144,151560,12466],{"class":154},[144,151562,149901],{"class":259},[144,151564,12466],{"class":154},[144,151566,805],{"class":203},[144,151568,12466],{"class":154},[144,151570,1144],{"class":203},[144,151572,161],{"class":154},[144,151574,151575,151577],{"class":146,"line":2634},[144,151576,30428],{"class":203},[144,151578,151579],{"class":154},"(student.is_passed())\n",[144,151581,151582,151584],{"class":146,"line":2640},[144,151583,30428],{"class":203},[144,151585,151586],{"class":154},"(student.to_dict())\n",[14,151588,151589,101031,151592,151595],{},[141,151590,151591],{},"to_dict()",[141,151593,151594],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[18,151597,151599],{"id":151598},"_1116-易错点","11.16 易错点",[98,151601,151602,151608,151614,151619,151622,151625],{},[101,151603,151604,151605,28398],{},"类名推荐使用大驼峰，如 ",[141,151606,151607],{},"StudentManager",[101,151609,151610,151611,151613],{},"方法第一个参数必须写 ",[141,151612,30836],{},"，调用时不用传。",[101,151615,151616,151618],{},[141,151617,30842],{}," 不是普通方法，它在创建对象时自动执行。",[101,151620,151621],{},"私有属性不是绝对安全，只是约定和名称改写。",[101,151623,151624],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[101,151626,151627],{},"类中方法太多时，说明职责可能过重。",[18,151629,151631],{"id":151630},"_1117-本章练习","11.17 本章练习",[98,151633,151634,151640,151646,151651,151664],{},[101,151635,151636,151637,151639],{},"定义 ",[141,151638,149581],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[101,151641,151636,151642,151645],{},[141,151643,151644],{},"Account"," 类，实现存款、取款、查询余额。",[101,151647,151636,151648,151650],{},[141,151649,17257],{}," 类，计算圆的周长和面积。",[101,151652,151636,151653,367,151656,151659,151660,151663],{},[141,151654,151655],{},"Dog",[141,151657,151658],{},"Cat"," 类，并用同一个函数调用它们的 ",[141,151661,151662],{},"speak()"," 方法。",[101,151665,104379,151666,151668,151669,28398],{},[141,151667,151152],{}," 定义一个商品类 ",[141,151670,151671],{},"Product",[5157,151673,151674],{},"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":30,"searchDepth":66,"depth":66,"links":151676},[151677,151678,151679,151680,151681,151682,151684,151685,151686,151687,151688,151689,151690,151694,151695,151696,151697],{"id":149345,"depth":66,"text":149346},{"id":149528,"depth":66,"text":149529},{"id":149592,"depth":66,"text":149593},{"id":149669,"depth":66,"text":149670},{"id":149768,"depth":66,"text":149769},{"id":149932,"depth":66,"text":151683},"11.6 str",{"id":150058,"depth":66,"text":150059},{"id":150324,"depth":66,"text":150325},{"id":150438,"depth":66,"text":150439},{"id":150593,"depth":66,"text":150594},{"id":150717,"depth":66,"text":150718},{"id":150833,"depth":66,"text":150834},{"id":150982,"depth":66,"text":150983,"children":151691},[151692,151693],{"id":150986,"depth":1210,"text":150987},{"id":151068,"depth":1210,"text":151069},{"id":151146,"depth":66,"text":151147},{"id":151261,"depth":66,"text":151262},{"id":151598,"depth":66,"text":151599},{"id":151630,"depth":66,"text":151631},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149337,"description":23408},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151704,"title":151705,"body":151706,"description":23408,"extension":70,"meta":155019,"navigation":72,"path":155020,"seo":155021,"stem":155022,"__hash__":155023},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151707,"toc":154995},[151708,151711,151715,151718,151721,151750,151753,151761,151765,151769,151772,151795,151798,151804,151808,153254,153257,153278,153282,153285,153297,153300,153484,153487,153613,153616,153620,153624,153760,153764,153850,153854,153936,153940,153977,153981,154170,154174,154177,154407,154411,154414,154595,154598,154602,154605,154611,154614,154640,154644,154647,154661,154664,154689,154692,154706,154709,154726,154729,154746,154749,154766,154770,154796,154800,154823,154827,154830,154832,154838,154840,154861,154864,154870,154876,154880,154883,154959,154962,154966,154992],[10,151709,151705],{"id":151710},"_12-综合案例与复习路线",[18,151712,151714],{"id":151713},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,151716,151717],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,151719,151720],{},"一个合格的入门综合项目最好覆盖：",[98,151722,151723,151726,151729,151732,151735,151738,151741,151744,151747],{},[101,151724,151725],{},"输入输出。",[101,151727,151728],{},"判断和循环。",[101,151730,151731],{},"函数拆分。",[101,151733,151734],{},"列表、字典等容器。",[101,151736,151737],{},"文件持久化。",[101,151739,151740],{},"异常处理。",[101,151742,151743],{},"模块拆分。",[101,151745,151746],{},"可选：面向对象。",[101,151748,151749],{},"可选：数据可视化。",[14,151751,151752],{},"本章整理两个方向：",[98,151754,151755,151758],{},[101,151756,151757],{},"学生管理系统。",[101,151759,151760],{},"销售数据统计和可视化。",[18,151762,151764],{"id":151763},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[115,151766,151768],{"id":151767},"_1221-需求","12.2.1 需求",[14,151770,151771],{},"实现一个命令行学生管理系统：",[98,151773,151774,151777,151780,151783,151786,151789,151792],{},[101,151775,151776],{},"添加学生。",[101,151778,151779],{},"删除学生。",[101,151781,151782],{},"修改学生。",[101,151784,151785],{},"查询学生。",[101,151787,151788],{},"显示所有学生。",[101,151790,151791],{},"保存到 JSON 文件。",[101,151793,151794],{},"程序启动时自动读取 JSON 文件。",[14,151796,151797],{},"学生字段：",[135,151799,151802],{"className":151800,"code":151801,"language":5218,"meta":30},[5216],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[141,151803,151801],{"__ignoreMap":30},[18,151805,151807],{"id":151806},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[135,151809,151811],{"className":30391,"code":151810,"language":30393,"meta":30,"style":30},"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",[141,151812,151813,151819,151829,151833,151847,151851,151855,151864,151876,151882,151886,151892,151923,151933,151940,151951,151957,151961,151965,151975,152006,152032,152036,152040,152049,152060,152071,152082,152093,152104,152115,152126,152130,152134,152144,152156,152172,152179,152186,152190,152194,152204,152212,152219,152232,152242,152253,152257,152261,152270,152278,152284,152296,152304,152315,152319,152323,152332,152348,152352,152359,152370,152375,152379,152395,152410,152425,152429,152434,152442,152450,152458,152466,152470,152475,152486,152490,152494,152503,152518,152528,152532,152544,152555,152559,152563,152568,152572,152583,152587,152591,152600,152615,152623,152627,152639,152649,152653,152657,152672,152685,152698,152702,152715,152727,152739,152743,152747,152758,152762,152766,152775,152790,152798,152802,152814,152824,152828,152832,152837,152841,152845,152855,152861,152883,152902,152921,152940,152945,152949,152953,152962,152970,152981,152985,152989,153015,153025,153030,153034,153038,153046,153056,153060,153068,153073,153089,153093,153107,153112,153126,153131,153144,153149,153162,153167,153180,153185,153198,153209,153213,153219,153230,153234,153238,153250],{"__ignoreMap":30},[144,151814,151815,151817],{"class":146,"line":147},[144,151816,30405],{"class":150},[144,151818,147104],{"class":154},[144,151820,151821,151823,151825,151827],{"class":146,"line":66},[144,151822,30750],{"class":150},[144,151824,108324],{"class":154},[144,151826,30405],{"class":150},[144,151828,108329],{"class":154},[144,151830,151831],{"class":146,"line":1210},[144,151832,2430],{"emptyLinePlaceholder":72},[144,151834,151835,151838,151840,151842,151845],{"class":146,"line":1225},[144,151836,151837],{"class":203},"DATA_FILE",[144,151839,13595],{"class":150},[144,151841,108558],{"class":154},[144,151843,151844],{"class":259},"\"students.json\"",[144,151846,161],{"class":154},[144,151848,151849],{"class":146,"line":1231},[144,151850,2430],{"emptyLinePlaceholder":72},[144,151852,151853],{"class":146,"line":1245},[144,151854,2430],{"emptyLinePlaceholder":72},[144,151856,151857,151859,151862],{"class":146,"line":1251},[144,151858,31960],{"class":150},[144,151860,151861],{"class":1993}," load_students",[144,151863,31966],{"class":154},[144,151865,151866,151868,151870,151873],{"class":146,"line":1342},[144,151867,3131],{"class":150},[144,151869,38943],{"class":150},[144,151871,151872],{"class":203}," DATA_FILE",[144,151874,151875],{"class":154},".exists():\n",[144,151877,151878,151880],{"class":146,"line":1348},[144,151879,14783],{"class":150},[144,151881,51851],{"class":154},[144,151883,151884],{"class":146,"line":1360},[144,151885,2430],{"emptyLinePlaceholder":72},[144,151887,151888,151890],{"class":146,"line":1642},[144,151889,125797],{"class":150},[144,151891,3769],{"class":154},[144,151893,151894,151897,151899,151901,151903,151905,151907,151909,151911,151913,151915,151917,151919,151921],{"class":146,"line":1647},[144,151895,151896],{"class":150},"        with",[144,151898,146804],{"class":203},[144,151900,155],{"class":154},[144,151902,151837],{"class":203},[144,151904,12466],{"class":154},[144,151906,146814],{"class":259},[144,151908,12466],{"class":154},[144,151910,146819],{"class":5247},[144,151912,200],{"class":150},[144,151914,146824],{"class":259},[144,151916,13745],{"class":154},[144,151918,31396],{"class":150},[144,151920,148166],{"class":5247},[144,151922,3769],{"class":154},[144,151924,151925,151927,151929,151931],{"class":146,"line":1653},[144,151926,15763],{"class":150},[144,151928,148177],{"class":154},[144,151930,45367],{"class":5247},[144,151932,161],{"class":154},[144,151934,151935,151937],{"class":146,"line":1658},[144,151936,125825],{"class":150},[144,151938,151939],{"class":154}," json.JSONDecodeError:\n",[144,151941,151942,151944,151946,151949],{"class":146,"line":1672},[144,151943,32464],{"class":203},[144,151945,155],{"class":154},[144,151947,151948],{"class":259},"\"数据文件格式错误，已使用空数据启动\"",[144,151950,161],{"class":154},[144,151952,151953,151955],{"class":146,"line":1677},[144,151954,14783],{"class":150},[144,151956,51851],{"class":154},[144,151958,151959],{"class":146,"line":1683},[144,151960,2430],{"emptyLinePlaceholder":72},[144,151962,151963],{"class":146,"line":1704},[144,151964,2430],{"emptyLinePlaceholder":72},[144,151966,151967,151969,151972],{"class":146,"line":1709},[144,151968,31960],{"class":150},[144,151970,151971],{"class":1993}," save_students",[144,151973,151974],{"class":154},"(students):\n",[144,151976,151977,151979,151981,151983,151985,151987,151990,151992,151994,151996,151998,152000,152002,152004],{"class":146,"line":1723},[144,151978,34191],{"class":150},[144,151980,146804],{"class":203},[144,151982,155],{"class":154},[144,151984,151837],{"class":203},[144,151986,12466],{"class":154},[144,151988,151989],{"class":259},"\"w\"",[144,151991,12466],{"class":154},[144,151993,146819],{"class":5247},[144,151995,200],{"class":150},[144,151997,146824],{"class":259},[144,151999,13745],{"class":154},[144,152001,31396],{"class":150},[144,152003,148166],{"class":5247},[144,152005,3769],{"class":154},[144,152007,152008,152011,152013,152015,152017,152019,152021,152023,152026,152028,152030],{"class":146,"line":1728},[144,152009,152010],{"class":154},"        json.dump(students, ",[144,152012,45367],{"class":5247},[144,152014,12466],{"class":154},[144,152016,147150],{"class":5247},[144,152018,200],{"class":150},[144,152020,34000],{"class":203},[144,152022,12466],{"class":154},[144,152024,152025],{"class":5247},"indent",[144,152027,200],{"class":150},[144,152029,232],{"class":203},[144,152031,161],{"class":154},[144,152033,152034],{"class":146,"line":1757},[144,152035,2430],{"emptyLinePlaceholder":72},[144,152037,152038],{"class":146,"line":1762},[144,152039,2430],{"emptyLinePlaceholder":72},[144,152041,152042,152044,152047],{"class":146,"line":1779},[144,152043,31960],{"class":150},[144,152045,152046],{"class":1993}," show_menu",[144,152048,31966],{"class":154},[144,152050,152051,152053,152055,152058],{"class":146,"line":1784},[144,152052,31312],{"class":203},[144,152054,155],{"class":154},[144,152056,152057],{"class":259},"\"====== 学生管理系统 ======\"",[144,152059,161],{"class":154},[144,152061,152062,152064,152066,152069],{"class":146,"line":1789},[144,152063,31312],{"class":203},[144,152065,155],{"class":154},[144,152067,152068],{"class":259},"\"1. 添加学生\"",[144,152070,161],{"class":154},[144,152072,152073,152075,152077,152080],{"class":146,"line":1794},[144,152074,31312],{"class":203},[144,152076,155],{"class":154},[144,152078,152079],{"class":259},"\"2. 删除学生\"",[144,152081,161],{"class":154},[144,152083,152084,152086,152088,152091],{"class":146,"line":1808},[144,152085,31312],{"class":203},[144,152087,155],{"class":154},[144,152089,152090],{"class":259},"\"3. 修改学生\"",[144,152092,161],{"class":154},[144,152094,152095,152097,152099,152102],{"class":146,"line":1813},[144,152096,31312],{"class":203},[144,152098,155],{"class":154},[144,152100,152101],{"class":259},"\"4. 查询学生\"",[144,152103,161],{"class":154},[144,152105,152106,152108,152110,152113],{"class":146,"line":2607},[144,152107,31312],{"class":203},[144,152109,155],{"class":154},[144,152111,152112],{"class":259},"\"5. 显示所有学生\"",[144,152114,161],{"class":154},[144,152116,152117,152119,152121,152124],{"class":146,"line":2621},[144,152118,31312],{"class":203},[144,152120,155],{"class":154},[144,152122,152123],{"class":259},"\"0. 退出系统\"",[144,152125,161],{"class":154},[144,152127,152128],{"class":146,"line":2629},[144,152129,2430],{"emptyLinePlaceholder":72},[144,152131,152132],{"class":146,"line":2634},[144,152133,2430],{"emptyLinePlaceholder":72},[144,152135,152136,152138,152141],{"class":146,"line":2640},[144,152137,31960],{"class":150},[144,152139,152140],{"class":1993}," find_student",[144,152142,152143],{"class":154},"(students, student_id):\n",[144,152145,152146,152148,152151,152153],{"class":146,"line":2646},[144,152147,3231],{"class":150},[144,152149,152150],{"class":154}," student ",[144,152152,26056],{"class":150},[144,152154,152155],{"class":154}," students:\n",[144,152157,152158,152160,152163,152165,152167,152169],{"class":146,"line":2651},[144,152159,2527],{"class":150},[144,152161,152162],{"class":154}," student[",[144,152164,151460],{"class":259},[144,152166,4473],{"class":154},[144,152168,2979],{"class":150},[144,152170,152171],{"class":154}," student_id:\n",[144,152173,152174,152176],{"class":146,"line":7979},[144,152175,15763],{"class":150},[144,152177,152178],{"class":154}," student\n",[144,152180,152181,152183],{"class":146,"line":8003},[144,152182,4120],{"class":150},[144,152184,152185],{"class":203}," None\n",[144,152187,152188],{"class":146,"line":8008},[144,152189,2430],{"emptyLinePlaceholder":72},[144,152191,152192],{"class":146,"line":8014},[144,152193,2430],{"emptyLinePlaceholder":72},[144,152195,152196,152198,152201],{"class":146,"line":8041},[144,152197,31960],{"class":150},[144,152199,152200],{"class":1993}," input_int",[144,152202,152203],{"class":154},"(prompt):\n",[144,152205,152206,152208,152210],{"class":146,"line":8046},[144,152207,2281],{"class":150},[144,152209,95305],{"class":203},[144,152211,3769],{"class":154},[144,152213,152214,152217],{"class":146,"line":8052},[144,152215,152216],{"class":150},"        try",[144,152218,3769],{"class":154},[144,152220,152221,152223,152225,152227,152229],{"class":146,"line":8064},[144,152222,15763],{"class":150},[144,152224,2412],{"class":203},[144,152226,155],{"class":154},[144,152228,53834],{"class":203},[144,152230,152231],{"class":154},"(prompt))\n",[144,152233,152234,152237,152240],{"class":146,"line":8076},[144,152235,152236],{"class":150},"        except",[144,152238,152239],{"class":203}," ValueError",[144,152241,3769],{"class":154},[144,152243,152244,152246,152248,152251],{"class":146,"line":8088},[144,152245,34663],{"class":203},[144,152247,155],{"class":154},[144,152249,152250],{"class":259},"\"请输入整数\"",[144,152252,161],{"class":154},[144,152254,152255],{"class":146,"line":9747},[144,152256,2430],{"emptyLinePlaceholder":72},[144,152258,152259],{"class":146,"line":9772},[144,152260,2430],{"emptyLinePlaceholder":72},[144,152262,152263,152265,152268],{"class":146,"line":9795},[144,152264,31960],{"class":150},[144,152266,152267],{"class":1993}," input_float",[144,152269,152203],{"class":154},[144,152271,152272,152274,152276],{"class":146,"line":9819},[144,152273,2281],{"class":150},[144,152275,95305],{"class":203},[144,152277,3769],{"class":154},[144,152279,152280,152282],{"class":146,"line":9824},[144,152281,152216],{"class":150},[144,152283,3769],{"class":154},[144,152285,152286,152288,152290,152292,152294],{"class":146,"line":9829},[144,152287,15763],{"class":150},[144,152289,109810],{"class":203},[144,152291,155],{"class":154},[144,152293,53834],{"class":203},[144,152295,152231],{"class":154},[144,152297,152298,152300,152302],{"class":146,"line":9834},[144,152299,152236],{"class":150},[144,152301,152239],{"class":203},[144,152303,3769],{"class":154},[144,152305,152306,152308,152310,152313],{"class":146,"line":9843},[144,152307,34663],{"class":203},[144,152309,155],{"class":154},[144,152311,152312],{"class":259},"\"请输入数字\"",[144,152314,161],{"class":154},[144,152316,152317],{"class":146,"line":9848},[144,152318,2430],{"emptyLinePlaceholder":72},[144,152320,152321],{"class":146,"line":9854},[144,152322,2430],{"emptyLinePlaceholder":72},[144,152324,152325,152327,152330],{"class":146,"line":9875},[144,152326,31960],{"class":150},[144,152328,152329],{"class":1993}," add_student",[144,152331,151974],{"class":154},[144,152333,152334,152337,152339,152341,152343,152346],{"class":146,"line":9881},[144,152335,152336],{"class":154},"    student_id ",[144,152338,200],{"class":150},[144,152340,60618],{"class":203},[144,152342,155],{"class":154},[144,152344,152345],{"class":259},"\"请输入学号:\"",[144,152347,161],{"class":154},[144,152349,152350],{"class":146,"line":9895},[144,152351,2430],{"emptyLinePlaceholder":72},[144,152353,152354,152356],{"class":146,"line":9901},[144,152355,3131],{"class":150},[144,152357,152358],{"class":154}," find_student(students, student_id):\n",[144,152360,152361,152363,152365,152368],{"class":146,"line":9928},[144,152362,32464],{"class":203},[144,152364,155],{"class":154},[144,152366,152367],{"class":259},"\"学号已存在\"",[144,152369,161],{"class":154},[144,152371,152372],{"class":146,"line":9937},[144,152373,152374],{"class":150},"        return\n",[144,152376,152377],{"class":146,"line":9943},[144,152378,2430],{"emptyLinePlaceholder":72},[144,152380,152381,152384,152386,152388,152390,152393],{"class":146,"line":9951},[144,152382,152383],{"class":154},"    name ",[144,152385,200],{"class":150},[144,152387,60618],{"class":203},[144,152389,155],{"class":154},[144,152391,152392],{"class":259},"\"请输入姓名:\"",[144,152394,161],{"class":154},[144,152396,152397,152400,152402,152405,152408],{"class":146,"line":9956},[144,152398,152399],{"class":154},"    age ",[144,152401,200],{"class":150},[144,152403,152404],{"class":154}," input_int(",[144,152406,152407],{"class":259},"\"请输入年龄:\"",[144,152409,161],{"class":154},[144,152411,152412,152415,152417,152420,152423],{"class":146,"line":16635},[144,152413,152414],{"class":154},"    score ",[144,152416,200],{"class":150},[144,152418,152419],{"class":154}," input_float(",[144,152421,152422],{"class":259},"\"请输入成绩:\"",[144,152424,161],{"class":154},[144,152426,152427],{"class":146,"line":16641},[144,152428,2430],{"emptyLinePlaceholder":72},[144,152430,152431],{"class":146,"line":16664},[144,152432,152433],{"class":154},"    students.append({\n",[144,152435,152436,152439],{"class":146,"line":16670},[144,152437,152438],{"class":259},"        \"student_id\"",[144,152440,152441],{"class":154},": student_id,\n",[144,152443,152444,152447],{"class":146,"line":16693},[144,152445,152446],{"class":259},"        \"name\"",[144,152448,152449],{"class":154},": name,\n",[144,152451,152452,152455],{"class":146,"line":16707},[144,152453,152454],{"class":259},"        \"age\"",[144,152456,152457],{"class":154},": age,\n",[144,152459,152460,152463],{"class":146,"line":16727},[144,152461,152462],{"class":259},"        \"score\"",[144,152464,152465],{"class":154},": score,\n",[144,152467,152468],{"class":146,"line":16733},[144,152469,33474],{"class":154},[144,152471,152472],{"class":146,"line":16744},[144,152473,152474],{"class":154},"    save_students(students)\n",[144,152476,152477,152479,152481,152484],{"class":146,"line":16767},[144,152478,31312],{"class":203},[144,152480,155],{"class":154},[144,152482,152483],{"class":259},"\"添加成功\"",[144,152485,161],{"class":154},[144,152487,152488],{"class":146,"line":16789},[144,152489,2430],{"emptyLinePlaceholder":72},[144,152491,152492],{"class":146,"line":16794},[144,152493,2430],{"emptyLinePlaceholder":72},[144,152495,152496,152498,152501],{"class":146,"line":16800},[144,152497,31960],{"class":150},[144,152499,152500],{"class":1993}," delete_student",[144,152502,151974],{"class":154},[144,152504,152505,152507,152509,152511,152513,152516],{"class":146,"line":16814},[144,152506,152336],{"class":154},[144,152508,200],{"class":150},[144,152510,60618],{"class":203},[144,152512,155],{"class":154},[144,152514,152515],{"class":259},"\"请输入要删除的学号:\"",[144,152517,161],{"class":154},[144,152519,152520,152523,152525],{"class":146,"line":16827},[144,152521,152522],{"class":154},"    student ",[144,152524,200],{"class":150},[144,152526,152527],{"class":154}," find_student(students, student_id)\n",[144,152529,152530],{"class":146,"line":16832},[144,152531,2430],{"emptyLinePlaceholder":72},[144,152533,152534,152536,152538,152540,152542],{"class":146,"line":16846},[144,152535,3131],{"class":150},[144,152537,152150],{"class":154},[144,152539,38940],{"class":150},[144,152541,38946],{"class":203},[144,152543,3769],{"class":154},[144,152545,152546,152548,152550,152553],{"class":146,"line":16851},[144,152547,32464],{"class":203},[144,152549,155],{"class":154},[144,152551,152552],{"class":259},"\"学生不存在\"",[144,152554,161],{"class":154},[144,152556,152557],{"class":146,"line":16857},[144,152558,152374],{"class":150},[144,152560,152561],{"class":146,"line":16862},[144,152562,2430],{"emptyLinePlaceholder":72},[144,152564,152565],{"class":146,"line":16876},[144,152566,152567],{"class":154},"    students.remove(student)\n",[144,152569,152570],{"class":146,"line":16881},[144,152571,152474],{"class":154},[144,152573,152574,152576,152578,152581],{"class":146,"line":16886},[144,152575,31312],{"class":203},[144,152577,155],{"class":154},[144,152579,152580],{"class":259},"\"删除成功\"",[144,152582,161],{"class":154},[144,152584,152585],{"class":146,"line":16900},[144,152586,2430],{"emptyLinePlaceholder":72},[144,152588,152589],{"class":146,"line":16912},[144,152590,2430],{"emptyLinePlaceholder":72},[144,152592,152593,152595,152598],{"class":146,"line":16917},[144,152594,31960],{"class":150},[144,152596,152597],{"class":1993}," update_student",[144,152599,151974],{"class":154},[144,152601,152602,152604,152606,152608,152610,152613],{"class":146,"line":16930},[144,152603,152336],{"class":154},[144,152605,200],{"class":150},[144,152607,60618],{"class":203},[144,152609,155],{"class":154},[144,152611,152612],{"class":259},"\"请输入要修改的学号:\"",[144,152614,161],{"class":154},[144,152616,152617,152619,152621],{"class":146,"line":16935},[144,152618,152522],{"class":154},[144,152620,200],{"class":150},[144,152622,152527],{"class":154},[144,152624,152625],{"class":146,"line":16940},[144,152626,2430],{"emptyLinePlaceholder":72},[144,152628,152629,152631,152633,152635,152637],{"class":146,"line":16945},[144,152630,3131],{"class":150},[144,152632,152150],{"class":154},[144,152634,38940],{"class":150},[144,152636,38946],{"class":203},[144,152638,3769],{"class":154},[144,152640,152641,152643,152645,152647],{"class":146,"line":16958},[144,152642,32464],{"class":203},[144,152644,155],{"class":154},[144,152646,152552],{"class":259},[144,152648,161],{"class":154},[144,152650,152651],{"class":146,"line":16963},[144,152652,152374],{"class":150},[144,152654,152655],{"class":146,"line":32646},[144,152656,2430],{"emptyLinePlaceholder":72},[144,152658,152659,152661,152663,152665,152667,152670],{"class":146,"line":32652},[144,152660,152383],{"class":154},[144,152662,200],{"class":150},[144,152664,60618],{"class":203},[144,152666,155],{"class":154},[144,152668,152669],{"class":259},"\"请输入新姓名:\"",[144,152671,161],{"class":154},[144,152673,152674,152676,152678,152680,152683],{"class":146,"line":32658},[144,152675,152399],{"class":154},[144,152677,200],{"class":150},[144,152679,152404],{"class":154},[144,152681,152682],{"class":259},"\"请输入新年龄:\"",[144,152684,161],{"class":154},[144,152686,152687,152689,152691,152693,152696],{"class":146,"line":32664},[144,152688,152414],{"class":154},[144,152690,200],{"class":150},[144,152692,152419],{"class":154},[144,152694,152695],{"class":259},"\"请输入新成绩:\"",[144,152697,161],{"class":154},[144,152699,152700],{"class":146,"line":32670},[144,152701,2430],{"emptyLinePlaceholder":72},[144,152703,152704,152707,152709,152711,152713],{"class":146,"line":32681},[144,152705,152706],{"class":154},"    student[",[144,152708,62692],{"class":259},[144,152710,4473],{"class":154},[144,152712,200],{"class":150},[144,152714,149808],{"class":154},[144,152716,152717,152719,152721,152723,152725],{"class":146,"line":32687},[144,152718,152706],{"class":154},[144,152720,69137],{"class":259},[144,152722,4473],{"class":154},[144,152724,200],{"class":150},[144,152726,149820],{"class":154},[144,152728,152729,152731,152733,152735,152737],{"class":146,"line":32707},[144,152730,152706],{"class":154},[144,152732,151485],{"class":259},[144,152734,4473],{"class":154},[144,152736,200],{"class":150},[144,152738,1609],{"class":154},[144,152740,152741],{"class":146,"line":32713},[144,152742,2430],{"emptyLinePlaceholder":72},[144,152744,152745],{"class":146,"line":32724},[144,152746,152474],{"class":154},[144,152748,152749,152751,152753,152756],{"class":146,"line":32730},[144,152750,31312],{"class":203},[144,152752,155],{"class":154},[144,152754,152755],{"class":259},"\"修改成功\"",[144,152757,161],{"class":154},[144,152759,152760],{"class":146,"line":32736},[144,152761,2430],{"emptyLinePlaceholder":72},[144,152763,152764],{"class":146,"line":32742},[144,152765,2430],{"emptyLinePlaceholder":72},[144,152767,152768,152770,152773],{"class":146,"line":32748},[144,152769,31960],{"class":150},[144,152771,152772],{"class":1993}," query_student",[144,152774,151974],{"class":154},[144,152776,152777,152779,152781,152783,152785,152788],{"class":146,"line":32754},[144,152778,152336],{"class":154},[144,152780,200],{"class":150},[144,152782,60618],{"class":203},[144,152784,155],{"class":154},[144,152786,152787],{"class":259},"\"请输入要查询的学号:\"",[144,152789,161],{"class":154},[144,152791,152792,152794,152796],{"class":146,"line":32760},[144,152793,152522],{"class":154},[144,152795,200],{"class":150},[144,152797,152527],{"class":154},[144,152799,152800],{"class":146,"line":32766},[144,152801,2430],{"emptyLinePlaceholder":72},[144,152803,152804,152806,152808,152810,152812],{"class":146,"line":32786},[144,152805,3131],{"class":150},[144,152807,152150],{"class":154},[144,152809,38940],{"class":150},[144,152811,38946],{"class":203},[144,152813,3769],{"class":154},[144,152815,152816,152818,152820,152822],{"class":146,"line":32792},[144,152817,32464],{"class":203},[144,152819,155],{"class":154},[144,152821,152552],{"class":259},[144,152823,161],{"class":154},[144,152825,152826],{"class":146,"line":32808},[144,152827,152374],{"class":150},[144,152829,152830],{"class":146,"line":32814},[144,152831,2430],{"emptyLinePlaceholder":72},[144,152833,152834],{"class":146,"line":32828},[144,152835,152836],{"class":154},"    print_student(student)\n",[144,152838,152839],{"class":146,"line":32834},[144,152840,2430],{"emptyLinePlaceholder":72},[144,152842,152843],{"class":146,"line":32849},[144,152844,2430],{"emptyLinePlaceholder":72},[144,152846,152847,152849,152852],{"class":146,"line":32855},[144,152848,31960],{"class":150},[144,152850,152851],{"class":1993}," print_student",[144,152853,152854],{"class":154},"(student):\n",[144,152856,152857,152859],{"class":146,"line":32864},[144,152858,31312],{"class":203},[144,152860,151452],{"class":154},[144,152862,152863,152866,152868,152870,152873,152876,152878,152881],{"class":146,"line":32870},[144,152864,152865],{"class":150},"        f",[144,152867,406],{"class":259},[144,152869,1051],{"class":203},[144,152871,152872],{"class":154},"student[",[144,152874,152875],{"class":259},"'student_id'",[144,152877,1095],{"class":154},[144,152879,152880],{"class":203},"}\\t",[144,152882,25146],{"class":259},[144,152884,152885,152887,152889,152891,152893,152896,152898,152900],{"class":146,"line":32879},[144,152886,152865],{"class":150},[144,152888,406],{"class":259},[144,152890,1051],{"class":203},[144,152892,152872],{"class":154},[144,152894,152895],{"class":259},"'name'",[144,152897,1095],{"class":154},[144,152899,152880],{"class":203},[144,152901,25146],{"class":259},[144,152903,152904,152906,152908,152910,152912,152915,152917,152919],{"class":146,"line":32885},[144,152905,152865],{"class":150},[144,152907,406],{"class":259},[144,152909,1051],{"class":203},[144,152911,152872],{"class":154},[144,152913,152914],{"class":259},"'age'",[144,152916,1095],{"class":154},[144,152918,152880],{"class":203},[144,152920,25146],{"class":259},[144,152922,152923,152925,152927,152929,152931,152934,152936,152938],{"class":146,"line":32891},[144,152924,152865],{"class":150},[144,152926,406],{"class":259},[144,152928,1051],{"class":203},[144,152930,152872],{"class":154},[144,152932,152933],{"class":259},"'score'",[144,152935,1095],{"class":154},[144,152937,1101],{"class":203},[144,152939,25146],{"class":259},[144,152941,152942],{"class":146,"line":32900},[144,152943,152944],{"class":154},"    )\n",[144,152946,152947],{"class":146,"line":32906},[144,152948,2430],{"emptyLinePlaceholder":72},[144,152950,152951],{"class":146,"line":32917},[144,152952,2430],{"emptyLinePlaceholder":72},[144,152954,152955,152957,152960],{"class":146,"line":32923},[144,152956,31960],{"class":150},[144,152958,152959],{"class":1993}," show_all_students",[144,152961,151974],{"class":154},[144,152963,152964,152966,152968],{"class":146,"line":32942},[144,152965,3131],{"class":150},[144,152967,38943],{"class":150},[144,152969,152155],{"class":154},[144,152971,152972,152974,152976,152979],{"class":146,"line":32948},[144,152973,32464],{"class":203},[144,152975,155],{"class":154},[144,152977,152978],{"class":259},"\"暂无学生\"",[144,152980,161],{"class":154},[144,152982,152983],{"class":146,"line":32959},[144,152984,152374],{"class":150},[144,152986,152987],{"class":146,"line":32965},[144,152988,2430],{"emptyLinePlaceholder":72},[144,152990,152991,152993,152995,152998,153000,153003,153005,153008,153010,153013],{"class":146,"line":32985},[144,152992,31312],{"class":203},[144,152994,155],{"class":154},[144,152996,152997],{"class":259},"\"学号",[144,152999,1261],{"class":203},[144,153001,153002],{"class":259},"姓名",[144,153004,1261],{"class":203},[144,153006,153007],{"class":259},"年龄",[144,153009,1261],{"class":203},[144,153011,153012],{"class":259},"成绩\"",[144,153014,161],{"class":154},[144,153016,153017,153019,153021,153023],{"class":146,"line":33001},[144,153018,3231],{"class":150},[144,153020,152150],{"class":154},[144,153022,26056],{"class":150},[144,153024,152155],{"class":154},[144,153026,153027],{"class":146,"line":33007},[144,153028,153029],{"class":154},"        print_student(student)\n",[144,153031,153032],{"class":146,"line":33021},[144,153033,2430],{"emptyLinePlaceholder":72},[144,153035,153036],{"class":146,"line":33027},[144,153037,2430],{"emptyLinePlaceholder":72},[144,153039,153040,153042,153044],{"class":146,"line":33033},[144,153041,31960],{"class":150},[144,153043,2003],{"class":1993},[144,153045,31966],{"class":154},[144,153047,153048,153051,153053],{"class":146,"line":33044},[144,153049,153050],{"class":154},"    students ",[144,153052,200],{"class":150},[144,153054,153055],{"class":154}," load_students()\n",[144,153057,153058],{"class":146,"line":33050},[144,153059,2430],{"emptyLinePlaceholder":72},[144,153061,153062,153064,153066],{"class":146,"line":33056},[144,153063,2281],{"class":150},[144,153065,95305],{"class":203},[144,153067,3769],{"class":154},[144,153069,153070],{"class":146,"line":33066},[144,153071,153072],{"class":154},"        show_menu()\n",[144,153074,153075,153078,153080,153082,153084,153087],{"class":146,"line":33072},[144,153076,153077],{"class":154},"        choice ",[144,153079,200],{"class":150},[144,153081,60618],{"class":203},[144,153083,155],{"class":154},[144,153085,153086],{"class":259},"\"请输入操作:\"",[144,153088,161],{"class":154},[144,153090,153091],{"class":146,"line":33083},[144,153092,2430],{"emptyLinePlaceholder":72},[144,153094,153095,153097,153100,153102,153105],{"class":146,"line":33089},[144,153096,2527],{"class":150},[144,153098,153099],{"class":154}," choice ",[144,153101,2979],{"class":150},[144,153103,153104],{"class":259}," \"1\"",[144,153106,3769],{"class":154},[144,153108,153109],{"class":146,"line":33099},[144,153110,153111],{"class":154},"            add_student(students)\n",[144,153113,153114,153117,153119,153121,153124],{"class":146,"line":33104},[144,153115,153116],{"class":150},"        elif",[144,153118,153099],{"class":154},[144,153120,2979],{"class":150},[144,153122,153123],{"class":259}," \"2\"",[144,153125,3769],{"class":154},[144,153127,153128],{"class":146,"line":33110},[144,153129,153130],{"class":154},"            delete_student(students)\n",[144,153132,153133,153135,153137,153139,153142],{"class":146,"line":33159},[144,153134,153116],{"class":150},[144,153136,153099],{"class":154},[144,153138,2979],{"class":150},[144,153140,153141],{"class":259}," \"3\"",[144,153143,3769],{"class":154},[144,153145,153146],{"class":146,"line":33206},[144,153147,153148],{"class":154},"            update_student(students)\n",[144,153150,153151,153153,153155,153157,153160],{"class":146,"line":33211},[144,153152,153116],{"class":150},[144,153154,153099],{"class":154},[144,153156,2979],{"class":150},[144,153158,153159],{"class":259}," \"4\"",[144,153161,3769],{"class":154},[144,153163,153164],{"class":146,"line":33217},[144,153165,153166],{"class":154},"            query_student(students)\n",[144,153168,153169,153171,153173,153175,153178],{"class":146,"line":33236},[144,153170,153116],{"class":150},[144,153172,153099],{"class":154},[144,153174,2979],{"class":150},[144,153176,153177],{"class":259}," \"5\"",[144,153179,3769],{"class":154},[144,153181,153182],{"class":146,"line":33242},[144,153183,153184],{"class":154},"            show_all_students(students)\n",[144,153186,153187,153189,153191,153193,153196],{"class":146,"line":33262},[144,153188,153116],{"class":150},[144,153190,153099],{"class":154},[144,153192,2979],{"class":150},[144,153194,153195],{"class":259}," \"0\"",[144,153197,3769],{"class":154},[144,153199,153200,153202,153204,153207],{"class":146,"line":33268},[144,153201,34663],{"class":203},[144,153203,155],{"class":154},[144,153205,153206],{"class":259},"\"退出系统\"",[144,153208,161],{"class":154},[144,153210,153211],{"class":146,"line":33274},[144,153212,115111],{"class":150},[144,153214,153215,153217],{"class":146,"line":33284},[144,153216,2564],{"class":150},[144,153218,3769],{"class":154},[144,153220,153221,153223,153225,153228],{"class":146,"line":33289},[144,153222,34663],{"class":203},[144,153224,155],{"class":154},[144,153226,153227],{"class":259},"\"输入错误\"",[144,153229,161],{"class":154},[144,153231,153232],{"class":146,"line":33295},[144,153233,2430],{"emptyLinePlaceholder":72},[144,153235,153236],{"class":146,"line":33311},[144,153237,2430],{"emptyLinePlaceholder":72},[144,153239,153240,153242,153244,153246,153248],{"class":146,"line":33356},[144,153241,1561],{"class":150},[144,153243,31233],{"class":203},[144,153245,101572],{"class":150},[144,153247,101575],{"class":259},[144,153249,3769],{"class":154},[144,153251,153252],{"class":146,"line":33362},[144,153253,101582],{"class":154},[14,153255,153256],{},"这个项目串联了：",[98,153258,153259,153262,153265,153268,153271,153273],{},[101,153260,153261],{},"菜单循环。",[101,153263,153264],{},"函数封装。",[101,153266,153267],{},"列表字典。",[101,153269,153270],{},"JSON 读写。",[101,153272,151740],{},[101,153274,153275,28398],{},[141,153276,153277],{},"if __name__ == \"__main__\"",[18,153279,153281],{"id":153280},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153283,153284],{},"可以进一步拆成两个类：",[98,153286,153287,153292],{},[101,153288,153289,153291],{},[141,153290,149581],{},"：表示单个学生。",[101,153293,153294,153296],{},[141,153295,151607],{},"：负责学生增删改查和文件保存。",[14,153298,153299],{},"示意代码：",[135,153301,153303],{"className":30391,"code":153302,"language":30393,"meta":30,"style":30},"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",[141,153304,153305,153315,153319,153323,153327,153335,153342,153348,153354,153360,153364,153372,153378,153388,153398,153408,153418,153422,153426,153432,153440,153448,153456,153464,153472,153480],{"__ignoreMap":30},[144,153306,153307,153309,153311,153313],{"class":146,"line":147},[144,153308,30750],{"class":150},[144,153310,151165],{"class":154},[144,153312,30405],{"class":150},[144,153314,151170],{"class":154},[144,153316,153317],{"class":146,"line":66},[144,153318,2430],{"emptyLinePlaceholder":72},[144,153320,153321],{"class":146,"line":1210},[144,153322,2430],{"emptyLinePlaceholder":72},[144,153324,153325],{"class":146,"line":1225},[144,153326,151183],{"class":1993},[144,153328,153329,153331,153333],{"class":146,"line":1231},[144,153330,14725],{"class":150},[144,153332,7929],{"class":1993},[144,153334,3769],{"class":154},[144,153336,153337,153340],{"class":146,"line":1245},[144,153338,153339],{"class":154},"    student_id: ",[144,153341,151199],{"class":203},[144,153343,153344,153346],{"class":146,"line":1251},[144,153345,151196],{"class":154},[144,153347,151199],{"class":203},[144,153349,153350,153352],{"class":146,"line":1342},[144,153351,151204],{"class":154},[144,153353,151207],{"class":203},[144,153355,153356,153358],{"class":146,"line":1348},[144,153357,151212],{"class":154},[144,153359,151215],{"class":203},[144,153361,153362],{"class":146,"line":1360},[144,153363,2430],{"emptyLinePlaceholder":72},[144,153365,153366,153368,153370],{"class":146,"line":1642},[144,153367,30814],{"class":150},[144,153369,151363],{"class":1993},[144,153371,30820],{"class":154},[144,153373,153374,153376],{"class":146,"line":1647},[144,153375,14783],{"class":150},[144,153377,15603],{"class":154},[144,153379,153380,153382,153384,153386],{"class":146,"line":1653},[144,153381,151376],{"class":259},[144,153383,51450],{"class":154},[144,153385,30836],{"class":203},[144,153387,151383],{"class":154},[144,153389,153390,153392,153394,153396],{"class":146,"line":1658},[144,153391,151388],{"class":259},[144,153393,51450],{"class":154},[144,153395,30836],{"class":203},[144,153397,151395],{"class":154},[144,153399,153400,153402,153404,153406],{"class":146,"line":1672},[144,153401,151400],{"class":259},[144,153403,51450],{"class":154},[144,153405,30836],{"class":203},[144,153407,151407],{"class":154},[144,153409,153410,153412,153414,153416],{"class":146,"line":1677},[144,153411,151412],{"class":259},[144,153413,51450],{"class":154},[144,153415,30836],{"class":203},[144,153417,151419],{"class":154},[144,153419,153420],{"class":146,"line":1683},[144,153421,2559],{"class":154},[144,153423,153424],{"class":146,"line":1704},[144,153425,2430],{"emptyLinePlaceholder":72},[144,153427,153428,153430],{"class":146,"line":1709},[144,153429,151027],{"class":1993},[144,153431,151030],{"class":203},[144,153433,153434,153436,153438],{"class":146,"line":1723},[144,153435,30814],{"class":150},[144,153437,151440],{"class":1993},[144,153439,151443],{"class":154},[144,153441,153442,153444,153446],{"class":146,"line":1728},[144,153443,14783],{"class":150},[144,153445,151047],{"class":203},[144,153447,151452],{"class":154},[144,153449,153450,153452,153454],{"class":146,"line":1757},[144,153451,151457],{"class":154},[144,153453,151460],{"class":259},[144,153455,87849],{"class":154},[144,153457,153458,153460,153462],{"class":146,"line":1762},[144,153459,151457],{"class":154},[144,153461,62692],{"class":259},[144,153463,87849],{"class":154},[144,153465,153466,153468,153470],{"class":146,"line":1779},[144,153467,151457],{"class":154},[144,153469,69137],{"class":259},[144,153471,87849],{"class":154},[144,153473,153474,153476,153478],{"class":146,"line":1784},[144,153475,151457],{"class":154},[144,153477,151485],{"class":259},[144,153479,87849],{"class":154},[144,153481,153482],{"class":146,"line":1789},[144,153483,38139],{"class":154},[14,153485,153486],{},"管理器示意：",[135,153488,153490],{"className":30391,"code":153489,"language":30393,"meta":30,"style":30},"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",[141,153491,153492,153501,153509,153520,153524,153534,153547,153558,153565,153571,153575,153584,153593,153599,153606],{"__ignoreMap":30},[144,153493,153494,153496,153499],{"class":146,"line":147},[144,153495,14725],{"class":150},[144,153497,153498],{"class":1993}," StudentManager",[144,153500,3769],{"class":154},[144,153502,153503,153505,153507],{"class":146,"line":66},[144,153504,30814],{"class":150},[144,153506,30817],{"class":203},[144,153508,30820],{"class":154},[144,153510,153511,153513,153516,153518],{"class":146,"line":1210},[144,153512,30858],{"class":203},[144,153514,153515],{"class":154},".students ",[144,153517,200],{"class":150},[144,153519,51851],{"class":154},[144,153521,153522],{"class":146,"line":1225},[144,153523,2430],{"emptyLinePlaceholder":72},[144,153525,153526,153528,153531],{"class":146,"line":1231},[144,153527,30814],{"class":150},[144,153529,153530],{"class":1993}," find_by_id",[144,153532,153533],{"class":154},"(self, student_id):\n",[144,153535,153536,153538,153540,153542,153544],{"class":146,"line":1245},[144,153537,3433],{"class":150},[144,153539,152150],{"class":154},[144,153541,26056],{"class":150},[144,153543,38886],{"class":203},[144,153545,153546],{"class":154},".students:\n",[144,153548,153549,153551,153554,153556],{"class":146,"line":1251},[144,153550,4672],{"class":150},[144,153552,153553],{"class":154}," student.student_id ",[144,153555,2979],{"class":150},[144,153557,152171],{"class":154},[144,153559,153560,153563],{"class":146,"line":1342},[144,153561,153562],{"class":150},"                return",[144,153564,152178],{"class":154},[144,153566,153567,153569],{"class":146,"line":1348},[144,153568,14783],{"class":150},[144,153570,152185],{"class":203},[144,153572,153573],{"class":146,"line":1360},[144,153574,2430],{"emptyLinePlaceholder":72},[144,153576,153577,153579,153581],{"class":146,"line":1642},[144,153578,30814],{"class":150},[144,153580,5240],{"class":1993},[144,153582,153583],{"class":154},"(self, student):\n",[144,153585,153586,153588,153590],{"class":146,"line":1647},[144,153587,2527],{"class":150},[144,153589,38886],{"class":203},[144,153591,153592],{"class":154},".find_by_id(student.student_id):\n",[144,153594,153595,153597],{"class":146,"line":1653},[144,153596,15763],{"class":150},[144,153598,125820],{"class":203},[144,153600,153601,153603],{"class":146,"line":1658},[144,153602,30858],{"class":203},[144,153604,153605],{"class":154},".students.append(student)\n",[144,153607,153608,153610],{"class":146,"line":1672},[144,153609,14783],{"class":150},[144,153611,153612],{"class":203}," True\n",[14,153614,153615],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[18,153617,153619],{"id":153618},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[115,153621,153623],{"id":153622},"_1251-数据结构","12.5.1 数据结构",[135,153625,153627],{"className":30391,"code":153626,"language":30393,"meta":30,"style":30},"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",[141,153628,153629,153637,153668,153698,153727,153756],{"__ignoreMap":30},[144,153630,153631,153633,153635],{"class":146,"line":147},[144,153632,148478],{"class":154},[144,153634,200],{"class":150},[144,153636,55460],{"class":154},[144,153638,153639,153641,153643,153645,153647,153649,153652,153654,153657,153659,153661,153663,153666],{"class":146,"line":66},[144,153640,148398],{"class":154},[144,153642,148010],{"class":259},[144,153644,51450],{"class":154},[144,153646,148621],{"class":259},[144,153648,12466],{"class":154},[144,153650,153651],{"class":259},"\"category\"",[144,153653,51450],{"class":154},[144,153655,153656],{"class":259},"\"手机\"",[144,153658,12466],{"class":154},[144,153660,84097],{"class":259},[144,153662,51450],{"class":154},[144,153664,153665],{"class":203},"12000",[144,153667,4960],{"class":154},[144,153669,153670,153672,153674,153676,153678,153680,153682,153684,153687,153689,153691,153693,153696],{"class":146,"line":1210},[144,153671,148398],{"class":154},[144,153673,148010],{"class":259},[144,153675,51450],{"class":154},[144,153677,148621],{"class":259},[144,153679,12466],{"class":154},[144,153681,153651],{"class":259},[144,153683,51450],{"class":154},[144,153685,153686],{"class":259},"\"电脑\"",[144,153688,12466],{"class":154},[144,153690,84097],{"class":259},[144,153692,51450],{"class":154},[144,153694,153695],{"class":203},"18000",[144,153697,4960],{"class":154},[144,153699,153700,153702,153704,153706,153708,153710,153712,153714,153716,153718,153720,153722,153725],{"class":146,"line":1225},[144,153701,148398],{"class":154},[144,153703,148010],{"class":259},[144,153705,51450],{"class":154},[144,153707,148642],{"class":259},[144,153709,12466],{"class":154},[144,153711,153651],{"class":259},[144,153713,51450],{"class":154},[144,153715,153656],{"class":259},[144,153717,12466],{"class":154},[144,153719,84097],{"class":259},[144,153721,51450],{"class":154},[144,153723,153724],{"class":203},"15000",[144,153726,4960],{"class":154},[144,153728,153729,153731,153733,153735,153737,153739,153741,153743,153745,153747,153749,153751,153754],{"class":146,"line":1231},[144,153730,148398],{"class":154},[144,153732,148010],{"class":259},[144,153734,51450],{"class":154},[144,153736,148642],{"class":259},[144,153738,12466],{"class":154},[144,153740,153651],{"class":259},[144,153742,51450],{"class":154},[144,153744,153686],{"class":259},[144,153746,12466],{"class":154},[144,153748,84097],{"class":259},[144,153750,51450],{"class":154},[144,153752,153753],{"class":203},"16000",[144,153755,4960],{"class":154},[144,153757,153758],{"class":146,"line":1245},[144,153759,33259],{"class":154},[115,153761,153763],{"id":153762},"_1252-按日期统计","12.5.2 按日期统计",[135,153765,153767],{"className":30391,"code":153766,"language":30393,"meta":30,"style":30},"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",[141,153768,153769,153778,153782,153793,153807,153820,153839,153843],{"__ignoreMap":30},[144,153770,153771,153774,153776],{"class":146,"line":147},[144,153772,153773],{"class":154},"daily_total ",[144,153775,200],{"class":150},[144,153777,87881],{"class":154},[144,153779,153780],{"class":146,"line":66},[144,153781,2430],{"emptyLinePlaceholder":72},[144,153783,153784,153786,153788,153790],{"class":146,"line":1210},[144,153785,3055],{"class":150},[144,153787,148222],{"class":154},[144,153789,26056],{"class":150},[144,153791,153792],{"class":154}," sales:\n",[144,153794,153795,153798,153800,153803,153805],{"class":146,"line":1225},[144,153796,153797],{"class":154},"    date ",[144,153799,200],{"class":150},[144,153801,153802],{"class":154}," item[",[144,153804,148010],{"class":259},[144,153806,33259],{"class":154},[144,153808,153809,153812,153814,153816,153818],{"class":146,"line":1231},[144,153810,153811],{"class":154},"    amount ",[144,153813,200],{"class":150},[144,153815,153802],{"class":154},[144,153817,84097],{"class":259},[144,153819,33259],{"class":154},[144,153821,153822,153825,153827,153830,153832,153834,153836],{"class":146,"line":1245},[144,153823,153824],{"class":154},"    daily_total[date] ",[144,153826,200],{"class":150},[144,153828,153829],{"class":154}," daily_total.get(date, ",[144,153831,346],{"class":203},[144,153833,13745],{"class":154},[144,153835,636],{"class":150},[144,153837,153838],{"class":154}," amount\n",[144,153840,153841],{"class":146,"line":1251},[144,153842,2430],{"emptyLinePlaceholder":72},[144,153844,153845,153847],{"class":146,"line":1342},[144,153846,30428],{"class":203},[144,153848,153849],{"class":154},"(daily_total)\n",[115,153851,153853],{"id":153852},"_1253-按类别统计","12.5.3 按类别统计",[135,153855,153857],{"className":30391,"code":153856,"language":30393,"meta":30,"style":30},"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",[141,153858,153859,153868,153872,153882,153895,153907,153925,153929],{"__ignoreMap":30},[144,153860,153861,153864,153866],{"class":146,"line":147},[144,153862,153863],{"class":154},"category_total ",[144,153865,200],{"class":150},[144,153867,87881],{"class":154},[144,153869,153870],{"class":146,"line":66},[144,153871,2430],{"emptyLinePlaceholder":72},[144,153873,153874,153876,153878,153880],{"class":146,"line":1210},[144,153875,3055],{"class":150},[144,153877,148222],{"class":154},[144,153879,26056],{"class":150},[144,153881,153792],{"class":154},[144,153883,153884,153887,153889,153891,153893],{"class":146,"line":1225},[144,153885,153886],{"class":154},"    category ",[144,153888,200],{"class":150},[144,153890,153802],{"class":154},[144,153892,153651],{"class":259},[144,153894,33259],{"class":154},[144,153896,153897,153899,153901,153903,153905],{"class":146,"line":1231},[144,153898,153811],{"class":154},[144,153900,200],{"class":150},[144,153902,153802],{"class":154},[144,153904,84097],{"class":259},[144,153906,33259],{"class":154},[144,153908,153909,153912,153914,153917,153919,153921,153923],{"class":146,"line":1245},[144,153910,153911],{"class":154},"    category_total[category] ",[144,153913,200],{"class":150},[144,153915,153916],{"class":154}," category_total.get(category, ",[144,153918,346],{"class":203},[144,153920,13745],{"class":154},[144,153922,636],{"class":150},[144,153924,153838],{"class":154},[144,153926,153927],{"class":146,"line":1251},[144,153928,2430],{"emptyLinePlaceholder":72},[144,153930,153931,153933],{"class":146,"line":1342},[144,153932,30428],{"class":203},[144,153934,153935],{"class":154},"(category_total)\n",[115,153937,153939],{"id":153938},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[135,153941,153943],{"className":30391,"code":153942,"language":30393,"meta":30,"style":30},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[141,153944,153945,153970],{"__ignoreMap":30},[144,153946,153947,153950,153952,153954,153957,153960,153963,153966,153968],{"class":146,"line":147},[144,153948,153949],{"class":154},"top_date, top_amount ",[144,153951,200],{"class":150},[144,153953,5982],{"class":203},[144,153955,153956],{"class":154},"(daily_total.items(), ",[144,153958,153959],{"class":5247},"key",[144,153961,153962],{"class":150},"=lambda",[144,153964,153965],{"class":154}," item: item[",[144,153967,372],{"class":203},[144,153969,4687],{"class":154},[144,153971,153972,153974],{"class":146,"line":66},[144,153973,30428],{"class":203},[144,153975,153976],{"class":154},"(top_date, top_amount)\n",[18,153978,153980],{"id":153979},"_126-绘制柱状图","12.6 绘制柱状图",[135,153982,153984],{"className":30391,"code":153983,"language":30393,"meta":30,"style":30},"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",[141,153985,153986,154000,154011,154015,154023,154035,154047,154058,154062,154066,154076,154087,154101,154106,154123,154140,154156,154160],{"__ignoreMap":30},[144,153987,153988,153990,153992,153994,153996,153998],{"class":146,"line":147},[144,153989,30750],{"class":150},[144,153991,147392],{"class":154},[144,153993,30405],{"class":150},[144,153995,147397],{"class":154},[144,153997,31396],{"class":150},[144,153999,147402],{"class":154},[144,154001,154002,154004,154006,154008],{"class":146,"line":66},[144,154003,30750],{"class":150},[144,154005,147251],{"class":154},[144,154007,30405],{"class":150},[144,154009,154010],{"class":154}," Bar\n",[144,154012,154013],{"class":146,"line":1210},[144,154014,2430],{"emptyLinePlaceholder":72},[144,154016,154017,154019,154021],{"class":146,"line":1225},[144,154018,153863],{"class":154},[144,154020,200],{"class":150},[144,154022,15603],{"class":154},[144,154024,154025,154028,154030,154033],{"class":146,"line":1231},[144,154026,154027],{"class":259},"    \"手机\"",[144,154029,51450],{"class":154},[144,154031,154032],{"class":203},"27000",[144,154034,31479],{"class":154},[144,154036,154037,154040,154042,154045],{"class":146,"line":1245},[144,154038,154039],{"class":259},"    \"电脑\"",[144,154041,51450],{"class":154},[144,154043,154044],{"class":203},"34000",[144,154046,31479],{"class":154},[144,154048,154049,154052,154054,154056],{"class":146,"line":1251},[144,154050,154051],{"class":259},"    \"耳机\"",[144,154053,51450],{"class":154},[144,154055,124412],{"class":203},[144,154057,31479],{"class":154},[144,154059,154060],{"class":146,"line":1342},[144,154061,1595],{"class":154},[144,154063,154064],{"class":146,"line":1348},[144,154065,2430],{"emptyLinePlaceholder":72},[144,154067,154068,154071,154073],{"class":146,"line":1360},[144,154069,154070],{"class":154},"bar ",[144,154072,200],{"class":150},[144,154074,154075],{"class":154}," Bar()\n",[144,154077,154078,154081,154084],{"class":146,"line":1642},[144,154079,154080],{"class":154},"bar.add_xaxis(",[144,154082,154083],{"class":203},"list",[144,154085,154086],{"class":154},"(category_total.keys()))\n",[144,154088,154089,154092,154094,154096,154098],{"class":146,"line":1647},[144,154090,154091],{"class":154},"bar.add_yaxis(",[144,154093,147308],{"class":259},[144,154095,12466],{"class":154},[144,154097,154083],{"class":203},[144,154099,154100],{"class":154},"(category_total.values()))\n",[144,154102,154103],{"class":146,"line":1653},[144,154104,154105],{"class":154},"bar.set_global_opts(\n",[144,154107,154108,154110,154112,154114,154116,154118,154121],{"class":146,"line":1658},[144,154109,147486],{"class":5247},[144,154111,200],{"class":150},[144,154113,147491],{"class":154},[144,154115,51420],{"class":5247},[144,154117,200],{"class":150},[144,154119,154120],{"class":259},"\"品类销售额\"",[144,154122,38060],{"class":154},[144,154124,154125,154127,154129,154131,154133,154135,154138],{"class":146,"line":1672},[144,154126,147505],{"class":5247},[144,154128,200],{"class":150},[144,154130,147510],{"class":154},[144,154132,79823],{"class":5247},[144,154134,200],{"class":150},[144,154136,154137],{"class":259},"\"品类\"",[144,154139,38060],{"class":154},[144,154141,154142,154144,154146,154148,154150,154152,154154],{"class":146,"line":1677},[144,154143,147524],{"class":5247},[144,154145,200],{"class":150},[144,154147,147510],{"class":154},[144,154149,79823],{"class":5247},[144,154151,200],{"class":150},[144,154153,147308],{"class":259},[144,154155,38060],{"class":154},[144,154157,154158],{"class":146,"line":1683},[144,154159,161],{"class":154},[144,154161,154162,154165,154168],{"class":146,"line":1704},[144,154163,154164],{"class":154},"bar.render(",[144,154166,154167],{"class":259},"\"category_sales.html\"",[144,154169,161],{"class":154},[18,154171,154173],{"id":154172},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154175,154176],{},"时间线适合展示不同日期、月份、年份的数据变化。",[135,154178,154180],{"className":30391,"code":154179,"language":30393,"meta":30,"style":30},"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",[141,154181,154182,154196,154207,154211,154219,154243,154266,154291,154295,154299,154309,154313,154324,154333,154343,154357,154388,154393,154397],{"__ignoreMap":30},[144,154183,154184,154186,154188,154190,154192,154194],{"class":146,"line":147},[144,154185,30750],{"class":150},[144,154187,147392],{"class":154},[144,154189,30405],{"class":150},[144,154191,147397],{"class":154},[144,154193,31396],{"class":150},[144,154195,147402],{"class":154},[144,154197,154198,154200,154202,154204],{"class":146,"line":66},[144,154199,30750],{"class":150},[144,154201,147251],{"class":154},[144,154203,30405],{"class":150},[144,154205,154206],{"class":154}," Bar, Timeline\n",[144,154208,154209],{"class":146,"line":1210},[144,154210,2430],{"emptyLinePlaceholder":72},[144,154212,154213,154215,154217],{"class":146,"line":1225},[144,154214,101671],{"class":154},[144,154216,200],{"class":150},[144,154218,15603],{"class":154},[144,154220,154221,154224,154227,154229,154231,154233,154235,154237,154239,154241],{"class":146,"line":1231},[144,154222,154223],{"class":259},"    \"2024-10-01\"",[144,154225,154226],{"class":154},": {",[144,154228,153656],{"class":259},[144,154230,51450],{"class":154},[144,154232,153665],{"class":203},[144,154234,12466],{"class":154},[144,154236,153686],{"class":259},[144,154238,51450],{"class":154},[144,154240,153695],{"class":203},[144,154242,4960],{"class":154},[144,154244,154245,154248,154250,154252,154254,154256,154258,154260,154262,154264],{"class":146,"line":1245},[144,154246,154247],{"class":259},"    \"2024-10-02\"",[144,154249,154226],{"class":154},[144,154251,153656],{"class":259},[144,154253,51450],{"class":154},[144,154255,153724],{"class":203},[144,154257,12466],{"class":154},[144,154259,153686],{"class":259},[144,154261,51450],{"class":154},[144,154263,153753],{"class":203},[144,154265,4960],{"class":154},[144,154267,154268,154271,154273,154275,154277,154280,154282,154284,154286,154289],{"class":146,"line":1251},[144,154269,154270],{"class":259},"    \"2024-10-03\"",[144,154272,154226],{"class":154},[144,154274,153656],{"class":259},[144,154276,51450],{"class":154},[144,154278,154279],{"class":203},"17000",[144,154281,12466],{"class":154},[144,154283,153686],{"class":259},[144,154285,51450],{"class":154},[144,154287,154288],{"class":203},"19000",[144,154290,4960],{"class":154},[144,154292,154293],{"class":146,"line":1342},[144,154294,1595],{"class":154},[144,154296,154297],{"class":146,"line":1348},[144,154298,2430],{"emptyLinePlaceholder":72},[144,154300,154301,154304,154306],{"class":146,"line":1360},[144,154302,154303],{"class":154},"timeline ",[144,154305,200],{"class":150},[144,154307,154308],{"class":154}," Timeline()\n",[144,154310,154311],{"class":146,"line":1642},[144,154312,2430],{"emptyLinePlaceholder":72},[144,154314,154315,154317,154320,154322],{"class":146,"line":1647},[144,154316,3055],{"class":150},[144,154318,154319],{"class":154}," date, category_data ",[144,154321,26056],{"class":150},[144,154323,149161],{"class":154},[144,154325,154326,154329,154331],{"class":146,"line":1653},[144,154327,154328],{"class":154},"    bar ",[144,154330,200],{"class":150},[144,154332,154075],{"class":154},[144,154334,154335,154338,154340],{"class":146,"line":1658},[144,154336,154337],{"class":154},"    bar.add_xaxis(",[144,154339,154083],{"class":203},[144,154341,154342],{"class":154},"(category_data.keys()))\n",[144,154344,154345,154348,154350,154352,154354],{"class":146,"line":1672},[144,154346,154347],{"class":154},"    bar.add_yaxis(",[144,154349,147308],{"class":259},[144,154351,12466],{"class":154},[144,154353,154083],{"class":203},[144,154355,154356],{"class":154},"(category_data.values()))\n",[144,154358,154359,154362,154365,154367,154369,154371,154373,154375,154377,154379,154381,154383,154386],{"class":146,"line":1677},[144,154360,154361],{"class":154},"    bar.set_global_opts(",[144,154363,154364],{"class":5247},"title_opts",[144,154366,200],{"class":150},[144,154368,147491],{"class":154},[144,154370,51420],{"class":5247},[144,154372,200],{"class":150},[144,154374,207],{"class":150},[144,154376,406],{"class":259},[144,154378,1051],{"class":203},[144,154380,73939],{"class":154},[144,154382,1101],{"class":203},[144,154384,154385],{"class":259},"销售额\"",[144,154387,30510],{"class":154},[144,154389,154390],{"class":146,"line":1683},[144,154391,154392],{"class":154},"    timeline.add(bar, date)\n",[144,154394,154395],{"class":146,"line":1704},[144,154396,2430],{"emptyLinePlaceholder":72},[144,154398,154399,154402,154405],{"class":146,"line":1709},[144,154400,154401],{"class":154},"timeline.render(",[144,154403,154404],{"class":259},"\"timeline_sales.html\"",[144,154406,161],{"class":154},[18,154408,154410],{"id":154409},"_128-绘制地图","12.8 绘制地图",[14,154412,154413],{},"地图适合展示地区数据。",[135,154415,154417],{"className":30391,"code":154416,"language":30393,"meta":30,"style":30},"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",[141,154418,154419,154433,154444,154448,154456,154469,154481,154494,154507,154511,154515,154525,154540,154545,154562,154581,154585],{"__ignoreMap":30},[144,154420,154421,154423,154425,154427,154429,154431],{"class":146,"line":147},[144,154422,30750],{"class":150},[144,154424,147392],{"class":154},[144,154426,30405],{"class":150},[144,154428,147397],{"class":154},[144,154430,31396],{"class":150},[144,154432,147402],{"class":154},[144,154434,154435,154437,154439,154441],{"class":146,"line":66},[144,154436,30750],{"class":150},[144,154438,147251],{"class":154},[144,154440,30405],{"class":150},[144,154442,154443],{"class":154}," Map\n",[144,154445,154446],{"class":146,"line":1210},[144,154447,2430],{"emptyLinePlaceholder":72},[144,154449,154450,154452,154454],{"class":146,"line":1225},[144,154451,101671],{"class":154},[144,154453,200],{"class":150},[144,154455,55460],{"class":154},[144,154457,154458,154461,154463,154465,154467],{"class":146,"line":1231},[144,154459,154460],{"class":154},"    (",[144,154462,69282],{"class":259},[144,154464,12466],{"class":154},[144,154466,972],{"class":203},[144,154468,38060],{"class":154},[144,154470,154471,154473,154475,154477,154479],{"class":146,"line":1245},[144,154472,154460],{"class":154},[144,154474,69302],{"class":259},[144,154476,12466],{"class":154},[144,154478,147325],{"class":203},[144,154480,38060],{"class":154},[144,154482,154483,154485,154488,154490,154492],{"class":146,"line":1251},[144,154484,154460],{"class":154},[144,154486,154487],{"class":259},"\"广东\"",[144,154489,12466],{"class":154},[144,154491,1752],{"class":203},[144,154493,38060],{"class":154},[144,154495,154496,154498,154501,154503,154505],{"class":146,"line":1342},[144,154497,154460],{"class":154},[144,154499,154500],{"class":259},"\"浙江\"",[144,154502,12466],{"class":154},[144,154504,147330],{"class":203},[144,154506,38060],{"class":154},[144,154508,154509],{"class":146,"line":1348},[144,154510,33259],{"class":154},[144,154512,154513],{"class":146,"line":1360},[144,154514,2430],{"emptyLinePlaceholder":72},[144,154516,154517,154520,154522],{"class":146,"line":1642},[144,154518,154519],{"class":154},"map_chart ",[144,154521,200],{"class":150},[144,154523,154524],{"class":154}," Map()\n",[144,154526,154527,154530,154532,154535,154538],{"class":146,"line":1647},[144,154528,154529],{"class":154},"map_chart.add(",[144,154531,147308],{"class":259},[144,154533,154534],{"class":154},", data, ",[144,154536,154537],{"class":259},"\"china\"",[144,154539,161],{"class":154},[144,154541,154542],{"class":146,"line":1653},[144,154543,154544],{"class":154},"map_chart.set_global_opts(\n",[144,154546,154547,154549,154551,154553,154555,154557,154560],{"class":146,"line":1658},[144,154548,147486],{"class":5247},[144,154550,200],{"class":150},[144,154552,147491],{"class":154},[144,154554,51420],{"class":5247},[144,154556,200],{"class":150},[144,154558,154559],{"class":259},"\"地区销售额\"",[144,154561,38060],{"class":154},[144,154563,154564,154567,154569,154572,154575,154577,154579],{"class":146,"line":1672},[144,154565,154566],{"class":5247},"    visualmap_opts",[144,154568,200],{"class":150},[144,154570,154571],{"class":154},"opts.VisualMapOpts(",[144,154573,154574],{"class":5247},"max_",[144,154576,200],{"class":150},[144,154578,1752],{"class":203},[144,154580,38060],{"class":154},[144,154582,154583],{"class":146,"line":1677},[144,154584,161],{"class":154},[144,154586,154587,154590,154593],{"class":146,"line":1683},[144,154588,154589],{"class":154},"map_chart.render(",[144,154591,154592],{"class":259},"\"map_sales.html\"",[144,154594,161],{"class":154},[14,154596,154597],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[18,154599,154601],{"id":154600},"_129-项目拆分建议","12.9 项目拆分建议",[14,154603,154604],{},"当代码超过一个文件时，可以这样组织：",[135,154606,154609],{"className":154607,"code":154608,"language":5218,"meta":30},[5216],"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",[141,154610,154608],{"__ignoreMap":30},[14,154612,154613],{},"职责：",[98,154615,154616,154622,154628,154634],{},[101,154617,154618,154621],{},[141,154619,154620],{},"main.py","：程序入口。",[101,154623,154624,154627],{},[141,154625,154626],{},"file_utils.py","：读写 JSON。",[101,154629,154630,154633],{},[141,154631,154632],{},"sales_service.py","：统计销售数据。",[101,154635,154636,154639],{},[141,154637,154638],{},"chart_builder.py","：生成图表。",[18,154641,154643],{"id":154642},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,154645,154646],{},"语法基础：",[98,154648,154649,154652,154655,154658],{},[101,154650,154651],{},"会写变量、注释、输入输出。",[101,154653,154654],{},"会使用 int、float、str、bool。",[101,154656,154657],{},"会做类型转换。",[101,154659,154660],{},"会使用 f-string 格式化输出。",[14,154662,154663],{},"流程控制：",[98,154665,154666,154672,154678,154686],{},[101,154667,154668,154669,28398],{},"会写 ",[141,154670,154671],{},"if elif else",[101,154673,154668,154674,101031,154676,28398],{},[141,154675,108676],{},[141,154677,3055],{},[101,154679,154680,154681,101031,154683,28398],{},"理解 ",[141,154682,2083],{},[141,154684,154685],{},"continue",[101,154687,154688],{},"能写嵌套循环。",[14,154690,154691],{},"函数：",[98,154693,154694,154697,154700,154703],{},[101,154695,154696],{},"会定义和调用函数。",[101,154698,154699],{},"理解参数和返回值。",[101,154701,154702],{},"知道局部变量和全局变量。",[101,154704,154705],{},"会使用默认参数、关键字参数、不定长参数。",[14,154707,154708],{},"容器：",[98,154710,154711,154714,154717,154720,154723],{},[101,154712,154713],{},"会使用列表增删改查。",[101,154715,154716],{},"会遍历列表、字典。",[101,154718,154719],{},"会使用切片。",[101,154721,154722],{},"会用集合去重。",[101,154724,154725],{},"会处理列表嵌套字典。",[14,154727,154728],{},"文件和模块：",[98,154730,154731,154734,154737,154740,154743],{},[101,154732,154733],{},"会读写文本文件。",[101,154735,154736],{},"会读写 JSON。",[101,154738,154739],{},"会捕获常见异常。",[101,154741,154742],{},"会导入模块和第三方包。",[101,154744,154745],{},"会创建简单包结构。",[14,154747,154748],{},"项目能力：",[98,154750,154751,154754,154757,154760,154763],{},[101,154752,154753],{},"能把代码拆成函数。",[101,154755,154756],{},"能把数据保存到文件。",[101,154758,154759],{},"能处理用户输入错误。",[101,154761,154762],{},"能写一个完整菜单程序。",[101,154764,154765],{},"能用 pyecharts 生成图表。",[18,154767,154769],{"id":154768},"_1211-推荐练习顺序","12.11 推荐练习顺序",[98,154771,154772,154775,154778,154781,154784,154787,154790,154793],{},[101,154773,154774],{},"猜数字游戏。",[101,154776,154777],{},"ATM 菜单程序。",[101,154779,154780],{},"学生成绩统计。",[101,154782,154783],{},"学生管理系统函数版。",[101,154785,154786],{},"学生管理系统文件持久化版。",[101,154788,154789],{},"学生管理系统面向对象版。",[101,154791,154792],{},"销售数据统计。",[101,154794,154795],{},"销售数据可视化。",[18,154797,154799],{"id":154798},"_1212-常见学习误区","12.12 常见学习误区",[98,154801,154802,154805,154808,154811,154814,154817,154820],{},[101,154803,154804],{},"只看视频不敲代码。",[101,154806,154807],{},"一报错就复制错误去搜，不先读报错位置。",[101,154809,154810],{},"变量名随便写，后续自己看不懂。",[101,154812,154813],{},"所有代码都写在一个文件一个函数里。",[101,154815,154816],{},"不保存练习代码，复习时没有材料。",[101,154818,154819],{},"还没掌握列表字典就急着学框架。",[101,154821,154822],{},"不会读官方文档，只依赖教程。",[18,154824,154826],{"id":154825},"_1213-如何读报错","12.13 如何读报错",[14,154828,154829],{},"报错通常从下往上看最后几行。",[14,154831,15166],{},[135,154833,154836],{"className":154834,"code":154835,"language":5218,"meta":30},[5216],"ValueError: invalid literal for int() with base 10: 'abc'\n",[141,154837,154835],{"__ignoreMap":30},[14,154839,24612],{},[98,154841,154842,154848,154858],{},[101,154843,154844,154845,28398],{},"异常类型是 ",[141,154846,154847],{},"ValueError",[101,154849,107358,154850,154853,154854,154857],{},[141,154851,154852],{},"int()"," 无法把 ",[141,154855,154856],{},"'abc'"," 转成整数。",[101,154859,154860],{},"应该检查输入内容或增加异常处理。",[14,154862,154863],{},"再看文件名和行号：",[135,154865,154868],{"className":154866,"code":154867,"language":5218,"meta":30},[5216],"File \"main.py\", line 10, in \u003Cmodule>\n",[141,154869,154867],{"__ignoreMap":30},[14,154871,154872,154873,154875],{},"表示错误发生在 ",[141,154874,154620],{}," 第 10 行。",[18,154877,154879],{"id":154878},"_1214-后续学习方向","12.14 后续学习方向",[14,154881,154882],{},"Python 基础完成后，可以按兴趣选择方向：",[98,154884,154885,154897,154906,154918,154929,154938,154948],{},[101,154886,154887,154888,367,154891,367,154894,28398],{},"自动化办公：",[141,154889,154890],{},"openpyxl",[141,154892,154893],{},"python-docx",[141,154895,154896],{},"pdfplumber",[101,154898,154899,154900,367,154902,367,154904,28398],{},"数据分析：",[141,154901,100639],{},[141,154903,146198],{},[141,154905,146206],{},[101,154907,154908,154909,367,154912,367,154915,28398],{},"Web 后端：",[141,154910,154911],{},"Flask",[141,154913,154914],{},"FastAPI",[141,154916,154917],{},"Django",[101,154919,154920,154921,367,154923,367,154926,28398],{},"爬虫：",[141,154922,146183],{},[141,154924,154925],{},"BeautifulSoup",[141,154927,154928],{},"Scrapy",[101,154930,154931,154932,367,154934,154937],{},"测试开发：",[141,154933,146230],{},[141,154935,154936],{},"selenium","、接口测试。",[101,154939,154940,154941,367,154943,367,154945,28398],{},"人工智能：",[141,154942,100639],{},[141,154944,146198],{},[141,154946,154947],{},"pytorch",[101,154949,154950,154951,367,154953,367,154956,28398],{},"运维脚本：",[141,154952,145799],{},[141,154954,154955],{},"subprocess",[141,154957,154958],{},"paramiko",[14,154960,154961],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[18,154963,154965],{"id":154964},"_1215-结课练习","12.15 结课练习",[98,154967,154968,154971,154974,154977,154980,154983,154986,154989],{},[101,154969,154970],{},"完成函数版学生管理系统。",[101,154972,154973],{},"给学生管理系统增加 JSON 持久化。",[101,154975,154976],{},"给学生管理系统增加异常处理。",[101,154978,154979],{},"把学生管理系统改成面向对象版。",[101,154981,154982],{},"使用 pyecharts 绘制学生成绩柱状图。",[101,154984,154985],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[101,154987,154988],{},"按品类统计销售额并绘制柱状图。",[101,154990,154991],{},"写一份自己的 Python 学习路线图。",[5157,154993,154994],{},"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":30,"searchDepth":66,"depth":66,"links":154996},[154997,154998,155001,155002,155003,155009,155010,155011,155012,155013,155014,155015,155016,155017,155018],{"id":151713,"depth":66,"text":151714},{"id":151763,"depth":66,"text":151764,"children":154999},[155000],{"id":151767,"depth":1210,"text":151768},{"id":151806,"depth":66,"text":151807},{"id":153280,"depth":66,"text":153281},{"id":153618,"depth":66,"text":153619,"children":155004},[155005,155006,155007,155008],{"id":153622,"depth":1210,"text":153623},{"id":153762,"depth":1210,"text":153763},{"id":153852,"depth":1210,"text":153853},{"id":153938,"depth":1210,"text":153939},{"id":153979,"depth":66,"text":153980},{"id":154172,"depth":66,"text":154173},{"id":154409,"depth":66,"text":154410},{"id":154600,"depth":66,"text":154601},{"id":154642,"depth":66,"text":154643},{"id":154768,"depth":66,"text":154769},{"id":154798,"depth":66,"text":154799},{"id":154825,"depth":66,"text":154826},{"id":154878,"depth":66,"text":154879},{"id":154964,"depth":66,"text":154965},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151705,"description":23408},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155025,"title":155026,"body":155027,"description":23408,"extension":70,"meta":157496,"navigation":72,"path":157497,"seo":157498,"stem":157499,"__hash__":157500},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155028,"toc":157471},[155029,155032,155036,155039,155042,155062,155065,155088,155091,155094,155116,155119,155141,155145,155148,155188,155191,155312,155316,155319,155359,155362,155386,155389,155393,155396,155410,155443,155446,155481,155484,155507,155510,155543,155546,155548,155554,155629,155632,155638,155655,155695,155699,155702,155748,155750,155788,155791,155826,155829,155864,155867,155899,155902,155921,155925,155929,156042,156044,156119,156123,156169,156172,156198,156207,156211,156214,156277,156285,156313,156317,156357,156422,156426,156429,156468,156471,156516,156519,156580,156584,156611,156614,156642,156645,156649,156653,156718,156721,156759,156762,156794,156798,156897,156901,156904,156977,156980,157028,157032,157038,157078,157081,157128,157131,157180,157184,157186,157200,157202,157383,157387,157414,157434,157441,157445,157462,157468],[10,155030,155026],{"id":155031},"_2-基础语法变量与字符串",[18,155033,155035],{"id":155034},"_21-注释","2.1 注释",[14,155037,155038],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155040,155041],{},"单行注释：",[135,155043,155045],{"className":30391,"code":155044,"language":30393,"meta":30,"style":30},"# 这是单行注释\nprint(\"hello\")\n",[141,155046,155047,155052],{"__ignoreMap":30},[144,155048,155049],{"class":146,"line":147},[144,155050,155051],{"class":213},"# 这是单行注释\n",[144,155053,155054,155056,155058,155060],{"class":146,"line":66},[144,155055,30428],{"class":203},[144,155057,155],{"class":154},[144,155059,5875],{"class":259},[144,155061,161],{"class":154},[14,155063,155064],{},"多行说明常用三引号：",[135,155066,155068],{"className":30391,"code":155067,"language":30393,"meta":30,"style":30},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[141,155069,155070,155074,155079,155084],{"__ignoreMap":30},[144,155071,155072],{"class":146,"line":147},[144,155073,95711],{"class":259},[144,155075,155076],{"class":146,"line":66},[144,155077,155078],{"class":259},"这是多行说明。\n",[144,155080,155081],{"class":146,"line":1210},[144,155082,155083],{"class":259},"常用于文件顶部说明、函数说明等。\n",[144,155085,155086],{"class":146,"line":1225},[144,155087,95711],{"class":259},[14,155089,155090],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155092,155093],{},"不好：",[135,155095,155097],{"className":30391,"code":155096,"language":30393,"meta":30,"style":30},"# age 加 1\nage = age + 1\n",[141,155098,155099,155104],{"__ignoreMap":30},[144,155100,155101],{"class":146,"line":147},[144,155102,155103],{"class":213},"# age 加 1\n",[144,155105,155106,155108,155110,155112,155114],{"class":146,"line":66},[144,155107,146559],{"class":154},[144,155109,200],{"class":150},[144,155111,15738],{"class":154},[144,155113,636],{"class":150},[144,155115,55712],{"class":203},[14,155117,155118],{},"较好：",[135,155120,155122],{"className":30391,"code":155121,"language":30393,"meta":30,"style":30},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[141,155123,155124,155129],{"__ignoreMap":30},[144,155125,155126],{"class":146,"line":147},[144,155127,155128],{"class":213},"# 用户过完生日后，年龄增加一岁\n",[144,155130,155131,155133,155135,155137,155139],{"class":146,"line":66},[144,155132,146559],{"class":154},[144,155134,200],{"class":150},[144,155136,15738],{"class":154},[144,155138,636],{"class":150},[144,155140,55712],{"class":203},[18,155142,155144],{"id":155143},"_22-字面量","2.2 字面量",[14,155146,155147],{},"字面量就是代码中直接写出来的数据。",[135,155149,155151],{"className":30391,"code":155150,"language":30393,"meta":30,"style":30},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[141,155152,155153,155160,155167,155174,155181],{"__ignoreMap":30},[144,155154,155155,155157],{"class":146,"line":147},[144,155156,466],{"class":203},[144,155158,155159],{"class":213},"          # 整数\n",[144,155161,155162,155164],{"class":146,"line":66},[144,155163,204],{"class":203},[144,155165,155166],{"class":213},"         # 小数\n",[144,155168,155169,155171],{"class":146,"line":1210},[144,155170,5875],{"class":259},[144,155172,155173],{"class":213},"      # 字符串\n",[144,155175,155176,155178],{"class":146,"line":1225},[144,155177,31489],{"class":203},[144,155179,155180],{"class":213},"         # 布尔值\n",[144,155182,155183,155185],{"class":146,"line":1231},[144,155184,95699],{"class":203},[144,155186,155187],{"class":213},"         # 空值\n",[14,155189,155190],{},"常见字面量类型：",[292,155192,155193,155203],{},[295,155194,155195],{},[298,155196,155197,155199,155201],{},[301,155198,23769],{},[301,155200,27505],{},[301,155202,25882],{},[339,155204,155205,155216,155227,155238,155250,155262,155274,155287,155299],{},[298,155206,155207,155209,155213],{},[344,155208,158],{},[344,155210,155211],{},[141,155212,466],{},[344,155214,155215],{},"整数",[298,155217,155218,155220,155224],{},[344,155219,194],{},[344,155221,155222],{},[141,155223,204],{},[344,155225,155226],{},"浮点数",[298,155228,155229,155231,155235],{},[344,155230,1330],{},[344,155232,155233],{},[141,155234,5875],{},[344,155236,155237],{},"字符串",[298,155239,155240,155242,155248],{},[344,155241,1385],{},[344,155243,155244,367,155246],{},[141,155245,31489],{},[141,155247,34000],{},[344,155249,66028],{},[298,155251,155252,155255,155259],{},[344,155253,155254],{},"NoneType",[344,155256,155257],{},[141,155258,95699],{},[344,155260,155261],{},"空值",[298,155263,155264,155266,155271],{},[344,155265,154083],{},[344,155267,155268],{},[141,155269,155270],{},"[1, 2, 3]",[344,155272,155273],{},"列表",[298,155275,155276,155279,155284],{},[344,155277,155278],{},"tuple",[344,155280,155281],{},[141,155282,155283],{},"(1, 2, 3)",[344,155285,155286],{},"元组",[298,155288,155289,155291,155296],{},[344,155290,114559],{},[344,155292,155293],{},[141,155294,155295],{},"{\"name\": \"张三\"}",[344,155297,155298],{},"字典",[298,155300,155301,155304,155309],{},[344,155302,155303],{},"set",[344,155305,155306],{},[141,155307,155308],{},"{1, 2, 3}",[344,155310,155311],{},"集合",[18,155313,155315],{"id":155314},"_23-变量","2.3 变量",[14,155317,155318],{},"变量是保存数据的名字。",[135,155320,155322],{"className":30391,"code":155321,"language":30393,"meta":30,"style":30},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[141,155323,155324,155332,155340,155350],{"__ignoreMap":30},[144,155325,155326,155328,155330],{"class":146,"line":147},[144,155327,146549],{"class":154},[144,155329,200],{"class":150},[144,155331,149366],{"class":259},[144,155333,155334,155336,155338],{"class":146,"line":66},[144,155335,146559],{"class":154},[144,155337,200],{"class":150},[144,155339,146564],{"class":203},[144,155341,155342,155345,155347],{"class":146,"line":1210},[144,155343,155344],{"class":154},"height ",[144,155346,200],{"class":150},[144,155348,155349],{"class":203}," 1.75\n",[144,155351,155352,155355,155357],{"class":146,"line":1225},[144,155353,155354],{"class":154},"is_student ",[144,155356,200],{"class":150},[144,155358,153612],{"class":203},[14,155360,155361],{},"Python 的变量不需要提前声明类型：",[135,155363,155365],{"className":30391,"code":155364,"language":30393,"meta":30,"style":30},"score = 100\nscore = \"满分\"\n",[141,155366,155367,155377],{"__ignoreMap":30},[144,155368,155369,155372,155374],{"class":146,"line":147},[144,155370,155371],{"class":154},"score ",[144,155373,200],{"class":150},[144,155375,155376],{"class":203}," 100\n",[144,155378,155379,155381,155383],{"class":146,"line":66},[144,155380,155371],{"class":154},[144,155382,200],{"class":150},[144,155384,155385],{"class":259}," \"满分\"\n",[14,155387,155388],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[18,155390,155392],{"id":155391},"_24-变量命名规则","2.4 变量命名规则",[14,155394,155395],{},"硬性规则：",[98,155397,155398,155401,155404,155407],{},[101,155399,155400],{},"只能由字母、数字、下划线组成。",[101,155402,155403],{},"不能以数字开头。",[101,155405,155406],{},"不能使用 Python 关键字。",[101,155408,155409],{},"区分大小写。",[135,155411,155413],{"className":30391,"code":155412,"language":30393,"meta":30,"style":30},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[141,155414,155415,155424,155433],{"__ignoreMap":30},[144,155416,155417,155420,155422],{"class":146,"line":147},[144,155418,155419],{"class":154},"user_name ",[144,155421,200],{"class":150},[144,155423,146554],{"class":259},[144,155425,155426,155429,155431],{"class":146,"line":66},[144,155427,155428],{"class":154},"age2 ",[144,155430,200],{"class":150},[144,155432,146564],{"class":203},[144,155434,155435,155438,155440],{"class":146,"line":1210},[144,155436,155437],{"class":154},"_token ",[144,155439,200],{"class":150},[144,155441,155442],{"class":259}," \"abc\"\n",[14,155444,155445],{},"错误写法：",[135,155447,155449],{"className":30391,"code":155448,"language":30393,"meta":30,"style":30},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[141,155450,155451,155460,155472],{"__ignoreMap":30},[144,155452,155453,155456,155458],{"class":146,"line":147},[144,155454,155455],{"class":77416},"2age",[144,155457,13595],{"class":150},[144,155459,146564],{"class":203},[144,155461,155462,155464,155466,155468,155470],{"class":146,"line":66},[144,155463,131597],{"class":154},[144,155465,687],{"class":150},[144,155467,146549],{"class":154},[144,155469,200],{"class":150},[144,155471,146554],{"class":259},[144,155473,155474,155476,155478],{"class":146,"line":1210},[144,155475,14725],{"class":150},[144,155477,13595],{"class":150},[144,155479,155480],{"class":259}," \"一班\"\n",[14,155482,155483],{},"查看关键字：",[135,155485,155487],{"className":30391,"code":155486,"language":30393,"meta":30,"style":30},"import keyword\n\nprint(keyword.kwlist)\n",[141,155488,155489,155496,155500],{"__ignoreMap":30},[144,155490,155491,155493],{"class":146,"line":147},[144,155492,30405],{"class":150},[144,155494,155495],{"class":154}," keyword\n",[144,155497,155498],{"class":146,"line":66},[144,155499,2430],{"emptyLinePlaceholder":72},[144,155501,155502,155504],{"class":146,"line":1210},[144,155503,30428],{"class":203},[144,155505,155506],{"class":154},"(keyword.kwlist)\n",[14,155508,155509],{},"推荐命名风格：",[135,155511,155513],{"className":30391,"code":155512,"language":30393,"meta":30,"style":30},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[141,155514,155515,155524,155534],{"__ignoreMap":30},[144,155516,155517,155520,155522],{"class":146,"line":147},[144,155518,155519],{"class":154},"student_name ",[144,155521,200],{"class":150},[144,155523,149366],{"class":259},[144,155525,155526,155529,155531],{"class":146,"line":66},[144,155527,155528],{"class":154},"total_price ",[144,155530,200],{"class":150},[144,155532,155533],{"class":203}," 99.8\n",[144,155535,155536,155539,155541],{"class":146,"line":1210},[144,155537,155538],{"class":154},"is_finished ",[144,155540,200],{"class":150},[144,155542,125820],{"class":203},[14,155544,155545],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[18,155547,50745],{"id":50744},[14,155549,104379,155550,155553],{},[141,155551,155552],{},"type()"," 查看数据类型：",[135,155555,155557],{"className":30391,"code":155556,"language":30393,"meta":30,"style":30},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[141,155558,155559,155573,155587,155601,155615],{"__ignoreMap":30},[144,155560,155561,155563,155565,155567,155569,155571],{"class":146,"line":147},[144,155562,30428],{"class":203},[144,155564,155],{"class":154},[144,155566,103120],{"class":203},[144,155568,155],{"class":154},[144,155570,466],{"class":203},[144,155572,30510],{"class":154},[144,155574,155575,155577,155579,155581,155583,155585],{"class":146,"line":66},[144,155576,30428],{"class":203},[144,155578,155],{"class":154},[144,155580,103120],{"class":203},[144,155582,155],{"class":154},[144,155584,204],{"class":203},[144,155586,30510],{"class":154},[144,155588,155589,155591,155593,155595,155597,155599],{"class":146,"line":1210},[144,155590,30428],{"class":203},[144,155592,155],{"class":154},[144,155594,103120],{"class":203},[144,155596,155],{"class":154},[144,155598,5875],{"class":259},[144,155600,30510],{"class":154},[144,155602,155603,155605,155607,155609,155611,155613],{"class":146,"line":1225},[144,155604,30428],{"class":203},[144,155606,155],{"class":154},[144,155608,103120],{"class":203},[144,155610,155],{"class":154},[144,155612,31489],{"class":203},[144,155614,30510],{"class":154},[144,155616,155617,155619,155621,155623,155625,155627],{"class":146,"line":1231},[144,155618,30428],{"class":203},[144,155620,155],{"class":154},[144,155622,103120],{"class":203},[144,155624,155],{"class":154},[144,155626,95699],{"class":203},[144,155628,30510],{"class":154},[14,155630,155631],{},"输出类似：",[135,155633,155636],{"className":155634,"code":155635,"language":5218,"meta":30},[5216],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[141,155637,155635],{"__ignoreMap":30},[14,155639,9056,155640,107296,155642,155644,155645,155647,155648,21531,155650,155647,155652,155654],{},[141,155641,1385],{},[141,155643,158],{}," 的子类，",[141,155646,31489],{}," 可以当作 ",[141,155649,372],{},[141,155651,34000],{},[141,155653,346],{},"，但业务代码中不要滥用。",[135,155656,155658],{"className":30391,"code":155657,"language":30393,"meta":30,"style":30},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[141,155659,155660,155678],{"__ignoreMap":30},[144,155661,155662,155664,155666,155668,155670,155672,155675],{"class":146,"line":147},[144,155663,30428],{"class":203},[144,155665,155],{"class":154},[144,155667,31489],{"class":203},[144,155669,45579],{"class":150},[144,155671,25131],{"class":203},[144,155673,155674],{"class":154},")   ",[144,155676,155677],{"class":213},"# 2\n",[144,155679,155680,155682,155684,155686,155688,155690,155692],{"class":146,"line":66},[144,155681,30428],{"class":203},[144,155683,155],{"class":154},[144,155685,34000],{"class":203},[144,155687,45579],{"class":150},[144,155689,25131],{"class":203},[144,155691,45821],{"class":154},[144,155693,155694],{"class":213},"# 1\n",[18,155696,155698],{"id":155697},"_26-类型转换","2.6 类型转换",[14,155700,155701],{},"常用转换函数：",[135,155703,155705],{"className":30391,"code":155704,"language":30393,"meta":30,"style":30},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[141,155706,155707,155717,155728,155738],{"__ignoreMap":30},[144,155708,155709,155711,155713,155715],{"class":146,"line":147},[144,155710,158],{"class":203},[144,155712,155],{"class":154},[144,155714,54329],{"class":259},[144,155716,161],{"class":154},[144,155718,155719,155721,155723,155726],{"class":146,"line":66},[144,155720,194],{"class":203},[144,155722,155],{"class":154},[144,155724,155725],{"class":259},"\"3.14\"",[144,155727,161],{"class":154},[144,155729,155730,155732,155734,155736],{"class":146,"line":1210},[144,155731,1330],{"class":203},[144,155733,155],{"class":154},[144,155735,466],{"class":203},[144,155737,161],{"class":154},[144,155739,155740,155742,155744,155746],{"class":146,"line":1225},[144,155741,1385],{"class":203},[144,155743,155],{"class":154},[144,155745,372],{"class":203},[144,155747,161],{"class":154},[14,155749,15166],{},[135,155751,155753],{"className":30391,"code":155752,"language":30393,"meta":30,"style":30},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[141,155754,155755,155764,155775],{"__ignoreMap":30},[144,155756,155757,155759,155761],{"class":146,"line":147},[144,155758,146559],{"class":154},[144,155760,200],{"class":150},[144,155762,155763],{"class":259}," \"18\"\n",[144,155765,155766,155768,155770,155772],{"class":146,"line":66},[144,155767,146559],{"class":154},[144,155769,200],{"class":150},[144,155771,2412],{"class":203},[144,155773,155774],{"class":154},"(age)\n",[144,155776,155777,155779,155782,155784,155786],{"class":146,"line":1210},[144,155778,30428],{"class":203},[144,155780,155781],{"class":154},"(age ",[144,155783,636],{"class":150},[144,155785,25131],{"class":203},[144,155787,161],{"class":154},[14,155789,155790],{},"输入得到的内容永远是字符串：",[135,155792,155794],{"className":30391,"code":155793,"language":30393,"meta":30,"style":30},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[141,155795,155796,155812],{"__ignoreMap":30},[144,155797,155798,155801,155803,155805,155807,155810],{"class":146,"line":147},[144,155799,155800],{"class":154},"num ",[144,155802,200],{"class":150},[144,155804,60618],{"class":203},[144,155806,155],{"class":154},[144,155808,155809],{"class":259},"\"请输入数字:\"",[144,155811,161],{"class":154},[144,155813,155814,155816,155818,155820,155823],{"class":146,"line":66},[144,155815,30428],{"class":203},[144,155817,155],{"class":154},[144,155819,103120],{"class":203},[144,155821,155822],{"class":154},"(num))  ",[144,155824,155825],{"class":213},"# str\n",[14,155827,155828],{},"如果要做数学运算，必须转换：",[135,155830,155832],{"className":30391,"code":155831,"language":30393,"meta":30,"style":30},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[141,155833,155834,155852],{"__ignoreMap":30},[144,155835,155836,155838,155840,155842,155844,155846,155848,155850],{"class":146,"line":147},[144,155837,155800],{"class":154},[144,155839,200],{"class":150},[144,155841,2412],{"class":203},[144,155843,155],{"class":154},[144,155845,53834],{"class":203},[144,155847,155],{"class":154},[144,155849,155809],{"class":259},[144,155851,30510],{"class":154},[144,155853,155854,155856,155858,155860,155862],{"class":146,"line":66},[144,155855,30428],{"class":203},[144,155857,45632],{"class":154},[144,155859,636],{"class":150},[144,155861,2068],{"class":203},[144,155863,161],{"class":154},[14,155865,155866],{},"常见错误：",[135,155868,155870],{"className":30391,"code":155869,"language":30393,"meta":30,"style":30},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[141,155871,155872,155885],{"__ignoreMap":30},[144,155873,155874,155876,155878,155880,155882],{"class":146,"line":147},[144,155875,158],{"class":203},[144,155877,155],{"class":154},[144,155879,155725],{"class":259},[144,155881,155674],{"class":154},[144,155883,155884],{"class":213},"# 错误\n",[144,155886,155887,155889,155891,155894,155897],{"class":146,"line":66},[144,155888,158],{"class":203},[144,155890,155],{"class":154},[144,155892,155893],{"class":259},"\"abc\"",[144,155895,155896],{"class":154},")    ",[144,155898,155884],{"class":213},[14,155900,155901],{},"正确写法：",[135,155903,155905],{"className":30391,"code":155904,"language":30393,"meta":30,"style":30},"num = float(\"3.14\")\n",[141,155906,155907],{"__ignoreMap":30},[144,155908,155909,155911,155913,155915,155917,155919],{"class":146,"line":147},[144,155910,155800],{"class":154},[144,155912,200],{"class":150},[144,155914,109810],{"class":203},[144,155916,155],{"class":154},[144,155918,155725],{"class":259},[144,155920,161],{"class":154},[18,155922,155924],{"id":155923},"_27-运算符","2.7 运算符",[115,155926,155928],{"id":155927},"_271-算术运算符","2.7.1 算术运算符",[292,155930,155931,155942],{},[295,155932,155933],{},[298,155934,155935,155938,155940],{},[301,155936,155937],{},"运算符",[301,155939,25882],{},[301,155941,27505],{},[339,155943,155944,155958,155972,155986,156000,156014,156028],{},[298,155945,155946,155950,155953],{},[344,155947,155948],{},[141,155949,636],{},[344,155951,155952],{},"加法",[344,155954,155955],{},[141,155956,155957],{},"1 + 2",[298,155959,155960,155964,155967],{},[344,155961,155962],{},[141,155963,687],{},[344,155965,155966],{},"减法",[344,155968,155969],{},[141,155970,155971],{},"5 - 3",[298,155973,155974,155978,155981],{},[344,155975,155976],{},[141,155977,610],{},[344,155979,155980],{},"乘法",[344,155982,155983],{},[141,155984,155985],{},"2 * 3",[298,155987,155988,155992,155995],{},[344,155989,155990],{},[141,155991,739],{},[344,155993,155994],{},"除法，结果是浮点数",[344,155996,155997],{},[141,155998,155999],{},"5 \u002F 2",[298,156001,156002,156006,156009],{},[344,156003,156004],{},[141,156005,33342],{},[344,156007,156008],{},"整除",[344,156010,156011],{},[141,156012,156013],{},"5 \u002F\u002F 2",[298,156015,156016,156020,156023],{},[344,156017,156018],{},[141,156019,483],{},[344,156021,156022],{},"取余",[344,156024,156025],{},[141,156026,156027],{},"5 % 2",[298,156029,156030,156034,156037],{},[344,156031,156032],{},[141,156033,10692],{},[344,156035,156036],{},"幂运算",[344,156038,156039],{},[141,156040,156041],{},"2 ** 3",[14,156043,15166],{},[135,156045,156047],{"className":30391,"code":156046,"language":30393,"meta":30,"style":30},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[141,156048,156049,156067,156084,156101],{"__ignoreMap":30},[144,156050,156051,156053,156055,156057,156060,156062,156064],{"class":146,"line":147},[144,156052,30428],{"class":203},[144,156054,155],{"class":154},[144,156056,474],{"class":203},[144,156058,156059],{"class":150}," \u002F",[144,156061,14786],{"class":203},[144,156063,155674],{"class":154},[144,156065,156066],{"class":213},"# 2.5\n",[144,156068,156069,156071,156073,156075,156078,156080,156082],{"class":146,"line":66},[144,156070,30428],{"class":203},[144,156072,155],{"class":154},[144,156074,474],{"class":203},[144,156076,156077],{"class":150}," \u002F\u002F",[144,156079,14786],{"class":203},[144,156081,45821],{"class":154},[144,156083,155677],{"class":213},[144,156085,156086,156088,156090,156092,156095,156097,156099],{"class":146,"line":1210},[144,156087,30428],{"class":203},[144,156089,155],{"class":154},[144,156091,474],{"class":203},[144,156093,156094],{"class":150}," %",[144,156096,14786],{"class":203},[144,156098,155674],{"class":154},[144,156100,155694],{"class":213},[144,156102,156103,156105,156107,156109,156112,156114,156116],{"class":146,"line":1225},[144,156104,30428],{"class":203},[144,156106,155],{"class":154},[144,156108,232],{"class":203},[144,156110,156111],{"class":150}," **",[144,156113,78083],{"class":203},[144,156115,45821],{"class":154},[144,156117,156118],{"class":213},"# 8\n",[115,156120,156122],{"id":156121},"_272-赋值运算符","2.7.2 赋值运算符",[135,156124,156126],{"className":30391,"code":156125,"language":30393,"meta":30,"style":30},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[141,156127,156128,156136,156144,156152,156160],{"__ignoreMap":30},[144,156129,156130,156132,156134],{"class":146,"line":147},[144,156131,155800],{"class":154},[144,156133,200],{"class":150},[144,156135,58441],{"class":203},[144,156137,156138,156140,156142],{"class":146,"line":66},[144,156139,155800],{"class":154},[144,156141,9508],{"class":150},[144,156143,54440],{"class":203},[144,156145,156146,156148,156150],{"class":146,"line":1210},[144,156147,155800],{"class":154},[144,156149,150265],{"class":150},[144,156151,47736],{"class":203},[144,156153,156154,156156,156158],{"class":146,"line":1225},[144,156155,155800],{"class":154},[144,156157,137161],{"class":150},[144,156159,120049],{"class":203},[144,156161,156162,156164,156167],{"class":146,"line":1231},[144,156163,155800],{"class":154},[144,156165,156166],{"class":150},"\u002F=",[144,156168,47736],{"class":203},[14,156170,156171],{},"等价关系：",[135,156173,156175],{"className":30391,"code":156174,"language":30393,"meta":30,"style":30},"num += 1\nnum = num + 1\n",[141,156176,156177,156185],{"__ignoreMap":30},[144,156178,156179,156181,156183],{"class":146,"line":147},[144,156180,155800],{"class":154},[144,156182,9508],{"class":150},[144,156184,55712],{"class":203},[144,156186,156187,156189,156191,156194,156196],{"class":146,"line":66},[144,156188,155800],{"class":154},[144,156190,200],{"class":150},[144,156192,156193],{"class":154}," num ",[144,156195,636],{"class":150},[144,156197,55712],{"class":203},[14,156199,156200,156201,101031,156204,28398],{},"Python 没有 ",[141,156202,156203],{},"num++",[141,156205,156206],{},"num--",[115,156208,156210],{"id":156209},"_273-比较运算符","2.7.3 比较运算符",[14,156212,156213],{},"比较运算结果是布尔值。",[135,156215,156217],{"className":30391,"code":156216,"language":30393,"meta":30,"style":30},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[141,156218,156219,156233,156248,156262],{"__ignoreMap":30},[144,156220,156221,156223,156225,156227,156229,156231],{"class":146,"line":147},[144,156222,30428],{"class":203},[144,156224,155],{"class":154},[144,156226,601],{"class":203},[144,156228,26235],{"class":150},[144,156230,2178],{"class":203},[144,156232,161],{"class":154},[144,156234,156235,156237,156239,156241,156244,156246],{"class":146,"line":66},[144,156236,30428],{"class":203},[144,156238,155],{"class":154},[144,156240,601],{"class":203},[144,156242,156243],{"class":150}," >=",[144,156245,2068],{"class":203},[144,156247,161],{"class":154},[144,156249,156250,156252,156254,156256,156258,156260],{"class":146,"line":1210},[144,156251,30428],{"class":203},[144,156253,155],{"class":154},[144,156255,601],{"class":203},[144,156257,101572],{"class":150},[144,156259,2113],{"class":203},[144,156261,161],{"class":154},[144,156263,156264,156266,156268,156270,156273,156275],{"class":146,"line":1225},[144,156265,30428],{"class":203},[144,156267,155],{"class":154},[144,156269,601],{"class":203},[144,156271,156272],{"class":150}," !=",[144,156274,2113],{"class":203},[144,156276,161],{"class":154},[14,156278,156279,156280,156282,156283,28398],{},"注意：判断相等用 ",[141,156281,2979],{},"，赋值用 ",[141,156284,200],{},[135,156286,156288],{"className":30391,"code":156287,"language":30393,"meta":30,"style":30},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[141,156289,156290,156302],{"__ignoreMap":30},[144,156291,156292,156294,156296,156299],{"class":146,"line":147},[144,156293,146559],{"class":154},[144,156295,200],{"class":150},[144,156297,156298],{"class":203}," 18",[144,156300,156301],{"class":213},"       # 赋值\n",[144,156303,156304,156306,156308,156310],{"class":146,"line":66},[144,156305,146559],{"class":154},[144,156307,2979],{"class":150},[144,156309,156298],{"class":203},[144,156311,156312],{"class":213},"      # 判断是否相等\n",[115,156314,156316],{"id":156315},"_274-逻辑运算符","2.7.4 逻辑运算符",[292,156318,156319,156327],{},[295,156320,156321],{},[298,156322,156323,156325],{},[301,156324,155937],{},[301,156326,25882],{},[339,156328,156329,156338,156347],{},[298,156330,156331,156335],{},[344,156332,156333],{},[141,156334,30475],{},[344,156336,156337],{},"并且",[298,156339,156340,156344],{},[344,156341,156342],{},[141,156343,115103],{},[344,156345,156346],{},"或者",[298,156348,156349,156354],{},[344,156350,156351],{},[141,156352,156353],{},"not",[344,156355,156356],{},"取反",[135,156358,156360],{"className":30391,"code":156359,"language":30393,"meta":30,"style":30},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[141,156361,156362,156370,156379,156383,156398,156412],{"__ignoreMap":30},[144,156363,156364,156366,156368],{"class":146,"line":147},[144,156365,146559],{"class":154},[144,156367,200],{"class":150},[144,156369,88078],{"class":203},[144,156371,156372,156375,156377],{"class":146,"line":66},[144,156373,156374],{"class":154},"has_ticket ",[144,156376,200],{"class":150},[144,156378,153612],{"class":203},[144,156380,156381],{"class":146,"line":1210},[144,156382,2430],{"emptyLinePlaceholder":72},[144,156384,156385,156387,156389,156391,156393,156395],{"class":146,"line":1225},[144,156386,30428],{"class":203},[144,156388,155781],{"class":154},[144,156390,1740],{"class":150},[144,156392,156298],{"class":203},[144,156394,120442],{"class":150},[144,156396,156397],{"class":154}," has_ticket)\n",[144,156399,156400,156402,156404,156406,156408,156410],{"class":146,"line":1231},[144,156401,30428],{"class":203},[144,156403,155781],{"class":154},[144,156405,1065],{"class":150},[144,156407,156298],{"class":203},[144,156409,114214],{"class":150},[144,156411,156397],{"class":154},[144,156413,156414,156416,156418,156420],{"class":146,"line":1245},[144,156415,30428],{"class":203},[144,156417,155],{"class":154},[144,156419,156353],{"class":150},[144,156421,156397],{"class":154},[18,156423,156425],{"id":156424},"_28-字符串定义","2.8 字符串定义",[14,156427,156428],{},"三种常见写法：",[135,156430,156432],{"className":30391,"code":156431,"language":30393,"meta":30,"style":30},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[141,156433,156434,156444,156453,156463],{"__ignoreMap":30},[144,156435,156436,156439,156441],{"class":146,"line":147},[144,156437,156438],{"class":154},"name1 ",[144,156440,200],{"class":150},[144,156442,156443],{"class":259}," '小明'\n",[144,156445,156446,156449,156451],{"class":146,"line":66},[144,156447,156448],{"class":154},"name2 ",[144,156450,200],{"class":150},[144,156452,149366],{"class":259},[144,156454,156455,156458,156460],{"class":146,"line":1210},[144,156456,156457],{"class":154},"text ",[144,156459,200],{"class":150},[144,156461,156462],{"class":259}," \"\"\"这是多行字符串\n",[144,156464,156465],{"class":146,"line":1225},[144,156466,156467],{"class":259},"可以换行\"\"\"\n",[14,156469,156470],{},"字符串中包含引号：",[135,156472,156474],{"className":30391,"code":156473,"language":30393,"meta":30,"style":30},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[141,156475,156476,156486,156496],{"__ignoreMap":30},[144,156477,156478,156481,156483],{"class":146,"line":147},[144,156479,156480],{"class":154},"msg ",[144,156482,200],{"class":150},[144,156484,156485],{"class":259}," \"他说:'你好'\"\n",[144,156487,156488,156491,156493],{"class":146,"line":66},[144,156489,156490],{"class":154},"msg2 ",[144,156492,200],{"class":150},[144,156494,156495],{"class":259}," '他说:\"你好\"'\n",[144,156497,156498,156501,156503,156506,156509,156512,156514],{"class":146,"line":1210},[144,156499,156500],{"class":154},"msg3 ",[144,156502,200],{"class":150},[144,156504,156505],{"class":259}," \"他说:",[144,156507,156508],{"class":203},"\\\"",[144,156510,156511],{"class":259},"你好",[144,156513,156508],{"class":203},[144,156515,25146],{"class":259},[14,156517,156518],{},"常见转义字符：",[292,156520,156521,156530],{},[295,156522,156523],{},[298,156524,156525,156528],{},[301,156526,156527],{},"写法",[301,156529,100713],{},[339,156531,156532,156542,156551,156561,156570],{},[298,156533,156534,156539],{},[344,156535,156536],{},[141,156537,156538],{},"\\n",[344,156540,156541],{},"换行",[298,156543,156544,156548],{},[344,156545,156546],{},[141,156547,1261],{},[344,156549,156550],{},"制表符",[298,156552,156553,156558],{},[344,156554,156555],{},[141,156556,156557],{},"\\\\",[344,156559,156560],{},"反斜杠",[298,156562,156563,156567],{},[344,156564,156565],{},[141,156566,156508],{},[344,156568,156569],{},"双引号",[298,156571,156572,156577],{},[344,156573,156574],{},[141,156575,156576],{},"\\'",[344,156578,156579],{},"单引号",[18,156581,156583],{"id":156582},"_29-字符串拼接","2.9 字符串拼接",[135,156585,156587],{"className":30391,"code":156586,"language":30393,"meta":30,"style":30},"name = \"小明\"\nprint(\"你好，\" + name)\n",[141,156588,156589,156597],{"__ignoreMap":30},[144,156590,156591,156593,156595],{"class":146,"line":147},[144,156592,146549],{"class":154},[144,156594,200],{"class":150},[144,156596,149366],{"class":259},[144,156598,156599,156601,156603,156606,156608],{"class":146,"line":66},[144,156600,30428],{"class":203},[144,156602,155],{"class":154},[144,156604,156605],{"class":259},"\"你好，\"",[144,156607,45579],{"class":150},[144,156609,156610],{"class":154}," name)\n",[14,156612,156613],{},"字符串只能和字符串拼接：",[135,156615,156617],{"className":30391,"code":156616,"language":30393,"meta":30,"style":30},"age = 18\nprint(\"年龄:\" + str(age))\n",[141,156618,156619,156627],{"__ignoreMap":30},[144,156620,156621,156623,156625],{"class":146,"line":147},[144,156622,146559],{"class":154},[144,156624,200],{"class":150},[144,156626,146564],{"class":203},[144,156628,156629,156631,156633,156635,156637,156639],{"class":146,"line":66},[144,156630,30428],{"class":203},[144,156632,155],{"class":154},[144,156634,146530],{"class":259},[144,156636,45579],{"class":150},[144,156638,73932],{"class":203},[144,156640,156641],{"class":154},"(age))\n",[14,156643,156644],{},"更推荐使用格式化字符串。",[18,156646,156648],{"id":156647},"_210-字符串格式化","2.10 字符串格式化",[115,156650,156652],{"id":156651},"_2101-百分号格式化","2.10.1 百分号格式化",[135,156654,156656],{"className":30391,"code":156655,"language":30393,"meta":30,"style":30},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[141,156657,156658,156666,156674,156683,156687],{"__ignoreMap":30},[144,156659,156660,156662,156664],{"class":146,"line":147},[144,156661,146549],{"class":154},[144,156663,200],{"class":150},[144,156665,149366],{"class":259},[144,156667,156668,156670,156672],{"class":146,"line":66},[144,156669,146559],{"class":154},[144,156671,200],{"class":150},[144,156673,146564],{"class":203},[144,156675,156676,156678,156680],{"class":146,"line":1210},[144,156677,155371],{"class":154},[144,156679,200],{"class":150},[144,156681,156682],{"class":203}," 95.5\n",[144,156684,156685],{"class":146,"line":1225},[144,156686,2430],{"emptyLinePlaceholder":72},[144,156688,156689,156691,156693,156696,156699,156702,156705,156708,156711,156713,156715],{"class":146,"line":1231},[144,156690,30428],{"class":203},[144,156692,155],{"class":154},[144,156694,156695],{"class":259},"\"姓名:",[144,156697,156698],{"class":203},"%s",[144,156700,156701],{"class":259}," 年龄:",[144,156703,156704],{"class":203},"%d",[144,156706,156707],{"class":259}," 分数:",[144,156709,156710],{"class":203},"%.1f",[144,156712,406],{"class":259},[144,156714,156094],{"class":150},[144,156716,156717],{"class":154}," (name, age, score))\n",[14,156719,156720],{},"常用占位符：",[292,156722,156723,156732],{},[295,156724,156725],{},[298,156726,156727,156730],{},[301,156728,156729],{},"占位符",[301,156731,25882],{},[339,156733,156734,156742,156750],{},[298,156735,156736,156740],{},[344,156737,156738],{},[141,156739,156698],{},[344,156741,155237],{},[298,156743,156744,156748],{},[344,156745,156746],{},[141,156747,156704],{},[344,156749,155215],{},[298,156751,156752,156757],{},[344,156753,156754],{},[141,156755,156756],{},"%f",[344,156758,155226],{},[14,156760,156761],{},"精度控制：",[135,156763,156765],{"className":30391,"code":156764,"language":30393,"meta":30,"style":30},"price = 12.3456\nprint(\"%.2f\" % price)\n",[141,156766,156767,156776],{"__ignoreMap":30},[144,156768,156769,156771,156773],{"class":146,"line":147},[144,156770,146694],{"class":154},[144,156772,200],{"class":150},[144,156774,156775],{"class":203}," 12.3456\n",[144,156777,156778,156780,156782,156784,156787,156789,156791],{"class":146,"line":66},[144,156779,30428],{"class":203},[144,156781,155],{"class":154},[144,156783,406],{"class":259},[144,156785,156786],{"class":203},"%.2f",[144,156788,406],{"class":259},[144,156790,156094],{"class":150},[144,156792,156793],{"class":154}," price)\n",[115,156795,156797],{"id":156796},"_2102-format方法","2.10.2 format方法",[135,156799,156801],{"className":30391,"code":156800,"language":30393,"meta":30,"style":30},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[141,156802,156803,156811,156819,156823,156842,156862],{"__ignoreMap":30},[144,156804,156805,156807,156809],{"class":146,"line":147},[144,156806,146549],{"class":154},[144,156808,200],{"class":150},[144,156810,149366],{"class":259},[144,156812,156813,156815,156817],{"class":146,"line":66},[144,156814,146559],{"class":154},[144,156816,200],{"class":150},[144,156818,146564],{"class":203},[144,156820,156821],{"class":146,"line":1210},[144,156822,2430],{"emptyLinePlaceholder":72},[144,156824,156825,156827,156829,156831,156833,156835,156837,156839],{"class":146,"line":1225},[144,156826,30428],{"class":203},[144,156828,155],{"class":154},[144,156830,156695],{"class":259},[144,156832,32472],{"class":203},[144,156834,156701],{"class":259},[144,156836,32472],{"class":203},[144,156838,406],{"class":259},[144,156840,156841],{"class":154},".format(name, age))\n",[144,156843,156844,156846,156848,156850,156853,156855,156858,156860],{"class":146,"line":1231},[144,156845,30428],{"class":203},[144,156847,155],{"class":154},[144,156849,156695],{"class":259},[144,156851,156852],{"class":203},"{0}",[144,156854,156701],{"class":259},[144,156856,156857],{"class":203},"{1}",[144,156859,406],{"class":259},[144,156861,156841],{"class":154},[144,156863,156864,156866,156868,156870,156873,156875,156878,156880,156883,156885,156887,156890,156892,156894],{"class":146,"line":1245},[144,156865,30428],{"class":203},[144,156867,155],{"class":154},[144,156869,156695],{"class":259},[144,156871,156872],{"class":203},"{name}",[144,156874,156701],{"class":259},[144,156876,156877],{"class":203},"{age}",[144,156879,406],{"class":259},[144,156881,156882],{"class":154},".format(",[144,156884,79823],{"class":5247},[144,156886,200],{"class":150},[144,156888,156889],{"class":154},"name, ",[144,156891,70234],{"class":5247},[144,156893,200],{"class":150},[144,156895,156896],{"class":154},"age))\n",[115,156898,156900],{"id":156899},"_2103-f-string","2.10.3 f-string",[14,156902,156903],{},"推荐写法：",[135,156905,156907],{"className":30391,"code":156906,"language":30393,"meta":30,"style":30},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[141,156908,156909,156917,156925,156933,156937],{"__ignoreMap":30},[144,156910,156911,156913,156915],{"class":146,"line":147},[144,156912,146549],{"class":154},[144,156914,200],{"class":150},[144,156916,149366],{"class":259},[144,156918,156919,156921,156923],{"class":146,"line":66},[144,156920,146559],{"class":154},[144,156922,200],{"class":150},[144,156924,146564],{"class":203},[144,156926,156927,156929,156931],{"class":146,"line":1210},[144,156928,155371],{"class":154},[144,156930,200],{"class":150},[144,156932,156682],{"class":203},[144,156934,156935],{"class":146,"line":1225},[144,156936,2430],{"emptyLinePlaceholder":72},[144,156938,156939,156941,156943,156945,156947,156949,156951,156953,156955,156957,156959,156961,156963,156965,156968,156971,156973,156975],{"class":146,"line":1231},[144,156940,30428],{"class":203},[144,156942,155],{"class":154},[144,156944,207],{"class":150},[144,156946,156695],{"class":259},[144,156948,1051],{"class":203},[144,156950,79823],{"class":154},[144,156952,1101],{"class":203},[144,156954,156701],{"class":259},[144,156956,1051],{"class":203},[144,156958,70234],{"class":154},[144,156960,1101],{"class":203},[144,156962,156707],{"class":259},[144,156964,1051],{"class":203},[144,156966,156967],{"class":154},"score",[144,156969,156970],{"class":150},":.1f",[144,156972,1101],{"class":203},[144,156974,406],{"class":259},[144,156976,161],{"class":154},[14,156978,156979],{},"表达式也可以放进去：",[135,156981,156983],{"className":30391,"code":156982,"language":30393,"meta":30,"style":30},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[141,156984,156985,156993,157001],{"__ignoreMap":30},[144,156986,156987,156989,156991],{"class":146,"line":147},[144,156988,146694],{"class":154},[144,156990,200],{"class":150},[144,156992,146699],{"class":203},[144,156994,156995,156997,156999],{"class":146,"line":66},[144,156996,146704],{"class":154},[144,156998,200],{"class":150},[144,157000,54440],{"class":203},[144,157002,157003,157005,157007,157009,157012,157014,157016,157018,157021,157023,157026],{"class":146,"line":1210},[144,157004,30428],{"class":203},[144,157006,155],{"class":154},[144,157008,207],{"class":150},[144,157010,157011],{"class":259},"\"总价:",[144,157013,1051],{"class":203},[144,157015,146694],{"class":154},[144,157017,610],{"class":150},[144,157019,157020],{"class":154}," count",[144,157022,1101],{"class":203},[144,157024,157025],{"class":259},"元\"",[144,157027,161],{"class":154},[18,157029,157031],{"id":157030},"_211-input输入","2.11 input输入",[14,157033,157034,157037],{},[141,157035,157036],{},"input()"," 会暂停程序，等待用户输入。",[135,157039,157041],{"className":30391,"code":157040,"language":30393,"meta":30,"style":30},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[141,157042,157043,157057],{"__ignoreMap":30},[144,157044,157045,157047,157049,157051,157053,157055],{"class":146,"line":147},[144,157046,146549],{"class":154},[144,157048,200],{"class":150},[144,157050,60618],{"class":203},[144,157052,155],{"class":154},[144,157054,152392],{"class":259},[144,157056,161],{"class":154},[144,157058,157059,157061,157063,157065,157068,157070,157072,157074,157076],{"class":146,"line":66},[144,157060,30428],{"class":203},[144,157062,155],{"class":154},[144,157064,207],{"class":150},[144,157066,157067],{"class":259},"\"你好，",[144,157069,1051],{"class":203},[144,157071,79823],{"class":154},[144,157073,1101],{"class":203},[144,157075,406],{"class":259},[144,157077,161],{"class":154},[14,157079,157080],{},"输入整数：",[135,157082,157084],{"className":30391,"code":157083,"language":30393,"meta":30,"style":30},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[141,157085,157086,157104],{"__ignoreMap":30},[144,157087,157088,157090,157092,157094,157096,157098,157100,157102],{"class":146,"line":147},[144,157089,146559],{"class":154},[144,157091,200],{"class":150},[144,157093,2412],{"class":203},[144,157095,155],{"class":154},[144,157097,53834],{"class":203},[144,157099,155],{"class":154},[144,157101,152407],{"class":259},[144,157103,30510],{"class":154},[144,157105,157106,157108,157110,157112,157115,157117,157119,157121,157124,157126],{"class":146,"line":66},[144,157107,30428],{"class":203},[144,157109,155],{"class":154},[144,157111,207],{"class":150},[144,157113,157114],{"class":259},"\"明年你",[144,157116,1051],{"class":203},[144,157118,146559],{"class":154},[144,157120,636],{"class":150},[144,157122,157123],{"class":203}," 1}",[144,157125,149417],{"class":259},[144,157127,161],{"class":154},[14,157129,157130],{},"输入小数：",[135,157132,157134],{"className":30391,"code":157133,"language":30393,"meta":30,"style":30},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[141,157135,157136,157155],{"__ignoreMap":30},[144,157137,157138,157140,157142,157144,157146,157148,157150,157153],{"class":146,"line":147},[144,157139,155344],{"class":154},[144,157141,200],{"class":150},[144,157143,109810],{"class":203},[144,157145,155],{"class":154},[144,157147,53834],{"class":203},[144,157149,155],{"class":154},[144,157151,157152],{"class":259},"\"请输入身高:\"",[144,157154,30510],{"class":154},[144,157156,157157,157159,157161,157163,157166,157168,157170,157173,157175,157178],{"class":146,"line":66},[144,157158,30428],{"class":203},[144,157160,155],{"class":154},[144,157162,207],{"class":150},[144,157164,157165],{"class":259},"\"身高:",[144,157167,1051],{"class":203},[144,157169,24994],{"class":154},[144,157171,157172],{"class":150},":.2f",[144,157174,1101],{"class":203},[144,157176,157177],{"class":259},"米\"",[144,157179,161],{"class":154},[18,157181,157183],{"id":157182},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157185,123305],{},[98,157187,157188,157191,157194,157197],{},[101,157189,157190],{},"输入商品单价。",[101,157192,157193],{},"输入购买数量。",[101,157195,157196],{},"输入折扣，例如 0.8 表示八折。",[101,157198,157199],{},"输出最终金额，保留两位小数。",[14,157201,10066],{},[135,157203,157205],{"className":30391,"code":157204,"language":30393,"meta":30,"style":30},"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",[141,157206,157207,157226,157245,157265,157269,157289,157293,157316,157337,157359],{"__ignoreMap":30},[144,157208,157209,157211,157213,157215,157217,157219,157221,157224],{"class":146,"line":147},[144,157210,146694],{"class":154},[144,157212,200],{"class":150},[144,157214,109810],{"class":203},[144,157216,155],{"class":154},[144,157218,53834],{"class":203},[144,157220,155],{"class":154},[144,157222,157223],{"class":259},"\"请输入商品单价:\"",[144,157225,30510],{"class":154},[144,157227,157228,157230,157232,157234,157236,157238,157240,157243],{"class":146,"line":66},[144,157229,146704],{"class":154},[144,157231,200],{"class":150},[144,157233,2412],{"class":203},[144,157235,155],{"class":154},[144,157237,53834],{"class":203},[144,157239,155],{"class":154},[144,157241,157242],{"class":259},"\"请输入购买数量:\"",[144,157244,30510],{"class":154},[144,157246,157247,157250,157252,157254,157256,157258,157260,157263],{"class":146,"line":1210},[144,157248,157249],{"class":154},"discount ",[144,157251,200],{"class":150},[144,157253,109810],{"class":203},[144,157255,155],{"class":154},[144,157257,53834],{"class":203},[144,157259,155],{"class":154},[144,157261,157262],{"class":259},"\"请输入折扣:\"",[144,157264,30510],{"class":154},[144,157266,157267],{"class":146,"line":1225},[144,157268,2430],{"emptyLinePlaceholder":72},[144,157270,157271,157274,157276,157279,157281,157284,157286],{"class":146,"line":1231},[144,157272,157273],{"class":154},"total ",[144,157275,200],{"class":150},[144,157277,157278],{"class":154}," price ",[144,157280,610],{"class":150},[144,157282,157283],{"class":154}," count ",[144,157285,610],{"class":150},[144,157287,157288],{"class":154}," discount\n",[144,157290,157291],{"class":146,"line":1245},[144,157292,2430],{"emptyLinePlaceholder":72},[144,157294,157295,157297,157299,157301,157304,157306,157308,157310,157312,157314],{"class":146,"line":1251},[144,157296,30428],{"class":203},[144,157298,155],{"class":154},[144,157300,207],{"class":150},[144,157302,157303],{"class":259},"\"商品单价:",[144,157305,1051],{"class":203},[144,157307,79828],{"class":154},[144,157309,157172],{"class":150},[144,157311,1101],{"class":203},[144,157313,406],{"class":259},[144,157315,161],{"class":154},[144,157317,157318,157320,157322,157324,157327,157329,157331,157333,157335],{"class":146,"line":1342},[144,157319,30428],{"class":203},[144,157321,155],{"class":154},[144,157323,207],{"class":150},[144,157325,157326],{"class":259},"\"购买数量:",[144,157328,1051],{"class":203},[144,157330,84447],{"class":154},[144,157332,1101],{"class":203},[144,157334,406],{"class":259},[144,157336,161],{"class":154},[144,157338,157339,157341,157343,157345,157348,157350,157353,157355,157357],{"class":146,"line":1348},[144,157340,30428],{"class":203},[144,157342,155],{"class":154},[144,157344,207],{"class":150},[144,157346,157347],{"class":259},"\"折扣:",[144,157349,1051],{"class":203},[144,157351,157352],{"class":154},"discount",[144,157354,1101],{"class":203},[144,157356,406],{"class":259},[144,157358,161],{"class":154},[144,157360,157361,157363,157365,157367,157370,157372,157375,157377,157379,157381],{"class":146,"line":1360},[144,157362,30428],{"class":203},[144,157364,155],{"class":154},[144,157366,207],{"class":150},[144,157368,157369],{"class":259},"\"应付金额:",[144,157371,1051],{"class":203},[144,157373,157374],{"class":154},"total",[144,157376,157172],{"class":150},[144,157378,1101],{"class":203},[144,157380,157025],{"class":259},[144,157382,161],{"class":154},[18,157384,157386],{"id":157385},"_213-易错点","2.13 易错点",[98,157388,157389,157394,157400,157408,157411],{},[101,157390,157391,157393],{},[141,157392,157036],{}," 的结果是字符串，做运算前要转换。",[101,157395,157396,157397,28398],{},"字符串拼接时，数字要先 ",[141,157398,157399],{},"str()",[101,157401,157402,157404,157405,157407],{},[141,157403,200],{}," 是赋值，",[141,157406,2979],{}," 是比较。",[101,157409,157410],{},"Python 没有自增自减运算符。",[101,157412,157413],{},"浮点数计算可能有精度误差：",[135,157415,157417],{"className":30391,"code":157416,"language":30393,"meta":30,"style":30},"print(0.1 + 0.2)\n",[141,157418,157419],{"__ignoreMap":30},[144,157420,157421,157423,157425,157427,157429,157432],{"class":146,"line":147},[144,157422,30428],{"class":203},[144,157424,155],{"class":154},[144,157426,86223],{"class":203},[144,157428,45579],{"class":150},[144,157430,157431],{"class":203}," 0.2",[144,157433,161],{"class":154},[14,157435,157436,157437,157440],{},"金额计算如果要求严格，可以后续学习 ",[141,157438,157439],{},"decimal"," 模块。",[18,157442,157444],{"id":157443},"_214-本章练习","2.14 本章练习",[98,157446,157447,157450,157453,157456,157459],{},[101,157448,157449],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[101,157451,157452],{},"输入圆的半径，计算面积，保留两位小数。",[101,157454,157455],{},"输入工资和奖金，计算总收入。",[101,157457,157458],{},"输入摄氏温度，转换为华氏温度。",[101,157460,157461],{},"写一个 BMI 计算程序：",[135,157463,157466],{"className":157464,"code":157465,"language":5218,"meta":30},[5216],"BMI = 体重kg \u002F 身高m ** 2\n",[141,157467,157465],{"__ignoreMap":30},[5157,157469,157470],{},"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":30,"searchDepth":66,"depth":66,"links":157472},[157473,157474,157475,157476,157477,157478,157479,157485,157486,157487,157492,157493,157494,157495],{"id":155034,"depth":66,"text":155035},{"id":155143,"depth":66,"text":155144},{"id":155314,"depth":66,"text":155315},{"id":155391,"depth":66,"text":155392},{"id":50744,"depth":66,"text":50745},{"id":155697,"depth":66,"text":155698},{"id":155923,"depth":66,"text":155924,"children":157480},[157481,157482,157483,157484],{"id":155927,"depth":1210,"text":155928},{"id":156121,"depth":1210,"text":156122},{"id":156209,"depth":1210,"text":156210},{"id":156315,"depth":1210,"text":156316},{"id":156424,"depth":66,"text":156425},{"id":156582,"depth":66,"text":156583},{"id":156647,"depth":66,"text":156648,"children":157488},[157489,157490,157491],{"id":156651,"depth":1210,"text":156652},{"id":156796,"depth":1210,"text":156797},{"id":156899,"depth":1210,"text":156900},{"id":157030,"depth":66,"text":157031},{"id":157182,"depth":66,"text":157183},{"id":157385,"depth":66,"text":157386},{"id":157443,"depth":66,"text":157444},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155026,"description":23408},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157502,"title":157503,"body":157504,"description":23408,"extension":70,"meta":159140,"navigation":72,"path":159141,"seo":159142,"stem":159143,"__hash__":159144},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157505,"toc":159121},[157506,157509,157513,157516,157531,157534,157562,157566,157616,157618,157634,157637,157663,157666,157670,157737,157740,157756,157760,157763,157881,157884,157891,157940,157946,157950,157953,158066,158069,158073,158077,158080,158130,158134,158137,158187,158191,158194,158232,158236,158239,158285,158288,158323,158327,158332,158335,158381,158383,158450,158454,158460,158571,158580,158584,158586,158597,158599,158765,158769,158771,158785,158787,159001,159005,159024,159041,159044,159090,159094,159118],[10,157507,157503],{"id":157508},"_3-判断语句",[18,157510,157512],{"id":157511},"_31-布尔值","3.1 布尔值",[14,157514,157515],{},"判断语句依赖布尔值：",[135,157517,157519],{"className":30391,"code":157518,"language":30393,"meta":30,"style":30},"True\nFalse\n",[141,157520,157521,157526],{"__ignoreMap":30},[144,157522,157523],{"class":146,"line":147},[144,157524,157525],{"class":203},"True\n",[144,157527,157528],{"class":146,"line":66},[144,157529,157530],{"class":203},"False\n",[14,157532,157533],{},"比较表达式会产生布尔值：",[135,157535,157537],{"className":30391,"code":157536,"language":30393,"meta":30,"style":30},"age = 18\nprint(age >= 18)  # True\n",[141,157538,157539,157547],{"__ignoreMap":30},[144,157540,157541,157543,157545],{"class":146,"line":147},[144,157542,146559],{"class":154},[144,157544,200],{"class":150},[144,157546,146564],{"class":203},[144,157548,157549,157551,157553,157555,157557,157559],{"class":146,"line":66},[144,157550,30428],{"class":203},[144,157552,155781],{"class":154},[144,157554,1740],{"class":150},[144,157556,156298],{"class":203},[144,157558,45821],{"class":154},[144,157560,157561],{"class":213},"# True\n",[18,157563,157565],{"id":157564},"_32-if基础语法","3.2 if基础语法",[135,157567,157569],{"className":30391,"code":157568,"language":30393,"meta":30,"style":30},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[141,157570,157571,157589,157593,157605],{"__ignoreMap":30},[144,157572,157573,157575,157577,157579,157581,157583,157585,157587],{"class":146,"line":147},[144,157574,146559],{"class":154},[144,157576,200],{"class":150},[144,157578,2412],{"class":203},[144,157580,155],{"class":154},[144,157582,53834],{"class":203},[144,157584,155],{"class":154},[144,157586,152407],{"class":259},[144,157588,30510],{"class":154},[144,157590,157591],{"class":146,"line":66},[144,157592,2430],{"emptyLinePlaceholder":72},[144,157594,157595,157597,157599,157601,157603],{"class":146,"line":1210},[144,157596,1561],{"class":150},[144,157598,15738],{"class":154},[144,157600,1740],{"class":150},[144,157602,156298],{"class":203},[144,157604,3769],{"class":154},[144,157606,157607,157609,157611,157614],{"class":146,"line":1225},[144,157608,31312],{"class":203},[144,157610,155],{"class":154},[144,157612,157613],{"class":259},"\"可以进入网吧\"",[144,157615,161],{"class":154},[14,157617,9056],{},[98,157619,157620,157625,157628,157631],{},[101,157621,157622,157624],{},[141,157623,1561],{}," 后面是条件表达式。",[101,157626,157627],{},"条件后面必须写冒号。",[101,157629,157630],{},"条件成立时执行缩进代码块。",[101,157632,157633],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,157635,157636],{},"错误示例：",[135,157638,157640],{"className":30391,"code":157639,"language":30393,"meta":30,"style":30},"if age >= 18\n    print(\"可以进入\")\n",[141,157641,157642,157652],{"__ignoreMap":30},[144,157643,157644,157646,157648,157650],{"class":146,"line":147},[144,157645,1561],{"class":150},[144,157647,15738],{"class":154},[144,157649,1740],{"class":150},[144,157651,146564],{"class":203},[144,157653,157654,157656,157658,157661],{"class":146,"line":66},[144,157655,31312],{"class":203},[144,157657,155],{"class":154},[144,157659,157660],{"class":259},"\"可以进入\"",[144,157662,161],{"class":154},[14,157664,157665],{},"缺少冒号。",[18,157667,157669],{"id":157668},"_33-if-else","3.3 if else",[135,157671,157673],{"className":30391,"code":157672,"language":30393,"meta":30,"style":30},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[141,157674,157675,157693,157697,157709,157720,157726],{"__ignoreMap":30},[144,157676,157677,157679,157681,157683,157685,157687,157689,157691],{"class":146,"line":147},[144,157678,146559],{"class":154},[144,157680,200],{"class":150},[144,157682,2412],{"class":203},[144,157684,155],{"class":154},[144,157686,53834],{"class":203},[144,157688,155],{"class":154},[144,157690,152407],{"class":259},[144,157692,30510],{"class":154},[144,157694,157695],{"class":146,"line":66},[144,157696,2430],{"emptyLinePlaceholder":72},[144,157698,157699,157701,157703,157705,157707],{"class":146,"line":1210},[144,157700,1561],{"class":150},[144,157702,15738],{"class":154},[144,157704,1740],{"class":150},[144,157706,156298],{"class":203},[144,157708,3769],{"class":154},[144,157710,157711,157713,157715,157718],{"class":146,"line":1225},[144,157712,31312],{"class":203},[144,157714,155],{"class":154},[144,157716,157717],{"class":259},"\"成年人\"",[144,157719,161],{"class":154},[144,157721,157722,157724],{"class":146,"line":1231},[144,157723,1731],{"class":150},[144,157725,3769],{"class":154},[144,157727,157728,157730,157732,157735],{"class":146,"line":1245},[144,157729,31312],{"class":203},[144,157731,155],{"class":154},[144,157733,157734],{"class":259},"\"未成年人\"",[144,157736,161],{"class":154},[14,157738,157739],{},"执行逻辑：",[98,157741,157742,157748,157753],{},[101,157743,157744,157745,157747],{},"条件成立，执行 ",[141,157746,1561],{}," 代码块。",[101,157749,157750,157751,157747],{},"条件不成立，执行 ",[141,157752,1731],{},[101,157754,157755],{},"两个代码块只会执行其中一个。",[18,157757,157759],{"id":157758},"_34-if-elif-else","3.4 if elif else",[14,157761,157762],{},"多条件判断：",[135,157764,157766],{"className":30391,"code":157765,"language":30393,"meta":30,"style":30},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[141,157767,157768,157786,157790,157804,157815,157829,157840,157853,157864,157870],{"__ignoreMap":30},[144,157769,157770,157772,157774,157776,157778,157780,157782,157784],{"class":146,"line":147},[144,157771,155371],{"class":154},[144,157773,200],{"class":150},[144,157775,2412],{"class":203},[144,157777,155],{"class":154},[144,157779,53834],{"class":203},[144,157781,155],{"class":154},[144,157783,152422],{"class":259},[144,157785,30510],{"class":154},[144,157787,157788],{"class":146,"line":66},[144,157789,2430],{"emptyLinePlaceholder":72},[144,157791,157792,157794,157797,157799,157802],{"class":146,"line":1210},[144,157793,1561],{"class":150},[144,157795,157796],{"class":154}," score ",[144,157798,1740],{"class":150},[144,157800,157801],{"class":203}," 90",[144,157803,3769],{"class":154},[144,157805,157806,157808,157810,157813],{"class":146,"line":1225},[144,157807,31312],{"class":203},[144,157809,155],{"class":154},[144,157811,157812],{"class":259},"\"优秀\"",[144,157814,161],{"class":154},[144,157816,157817,157820,157822,157824,157827],{"class":146,"line":1231},[144,157818,157819],{"class":150},"elif",[144,157821,157796],{"class":154},[144,157823,1740],{"class":150},[144,157825,157826],{"class":203}," 80",[144,157828,3769],{"class":154},[144,157830,157831,157833,157835,157838],{"class":146,"line":1245},[144,157832,31312],{"class":203},[144,157834,155],{"class":154},[144,157836,157837],{"class":259},"\"良好\"",[144,157839,161],{"class":154},[144,157841,157842,157844,157846,157848,157851],{"class":146,"line":1251},[144,157843,157819],{"class":150},[144,157845,157796],{"class":154},[144,157847,1740],{"class":150},[144,157849,157850],{"class":203}," 60",[144,157852,3769],{"class":154},[144,157854,157855,157857,157859,157862],{"class":146,"line":1342},[144,157856,31312],{"class":203},[144,157858,155],{"class":154},[144,157860,157861],{"class":259},"\"及格\"",[144,157863,161],{"class":154},[144,157865,157866,157868],{"class":146,"line":1348},[144,157867,1731],{"class":150},[144,157869,3769],{"class":154},[144,157871,157872,157874,157876,157879],{"class":146,"line":1360},[144,157873,31312],{"class":203},[144,157875,155],{"class":154},[144,157877,157878],{"class":259},"\"不及格\"",[144,157880,161],{"class":154},[14,157882,157883],{},"注意判断顺序很重要。",[14,157885,157886,157887,157890],{},"如果把 ",[141,157888,157889],{},"score >= 60"," 放在最前面：",[135,157892,157894],{"className":30391,"code":157893,"language":30393,"meta":30,"style":30},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[141,157895,157896,157908,157918,157930],{"__ignoreMap":30},[144,157897,157898,157900,157902,157904,157906],{"class":146,"line":147},[144,157899,1561],{"class":150},[144,157901,157796],{"class":154},[144,157903,1740],{"class":150},[144,157905,157850],{"class":203},[144,157907,3769],{"class":154},[144,157909,157910,157912,157914,157916],{"class":146,"line":66},[144,157911,31312],{"class":203},[144,157913,155],{"class":154},[144,157915,157861],{"class":259},[144,157917,161],{"class":154},[144,157919,157920,157922,157924,157926,157928],{"class":146,"line":1210},[144,157921,157819],{"class":150},[144,157923,157796],{"class":154},[144,157925,1740],{"class":150},[144,157927,157801],{"class":203},[144,157929,3769],{"class":154},[144,157931,157932,157934,157936,157938],{"class":146,"line":1225},[144,157933,31312],{"class":203},[144,157935,155],{"class":154},[144,157937,157812],{"class":259},[144,157939,161],{"class":154},[14,157941,157942,157943,157945],{},"成绩 95 会先满足 ",[141,157944,157889],{},"，后面的优秀分支就不会执行。",[18,157947,157949],{"id":157948},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,157951,157952],{},"嵌套判断就是在一个判断内部再写判断。",[135,157954,157956],{"className":30391,"code":157955,"language":30393,"meta":30,"style":30},"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",[141,157957,157958,157976,157991,157995,158007,158021,158031,158038,158049,158055],{"__ignoreMap":30},[144,157959,157960,157962,157964,157966,157968,157970,157972,157974],{"class":146,"line":147},[144,157961,146559],{"class":154},[144,157963,200],{"class":150},[144,157965,2412],{"class":203},[144,157967,155],{"class":154},[144,157969,53834],{"class":203},[144,157971,155],{"class":154},[144,157973,152407],{"class":259},[144,157975,30510],{"class":154},[144,157977,157978,157980,157982,157984,157986,157989],{"class":146,"line":66},[144,157979,156374],{"class":154},[144,157981,200],{"class":150},[144,157983,60618],{"class":203},[144,157985,155],{"class":154},[144,157987,157988],{"class":259},"\"是否有票(y\u002Fn):\"",[144,157990,161],{"class":154},[144,157992,157993],{"class":146,"line":1210},[144,157994,2430],{"emptyLinePlaceholder":72},[144,157996,157997,157999,158001,158003,158005],{"class":146,"line":1225},[144,157998,1561],{"class":150},[144,158000,15738],{"class":154},[144,158002,1740],{"class":150},[144,158004,156298],{"class":203},[144,158006,3769],{"class":154},[144,158008,158009,158011,158014,158016,158019],{"class":146,"line":1231},[144,158010,3131],{"class":150},[144,158012,158013],{"class":154}," has_ticket ",[144,158015,2979],{"class":150},[144,158017,158018],{"class":259}," \"y\"",[144,158020,3769],{"class":154},[144,158022,158023,158025,158027,158029],{"class":146,"line":1245},[144,158024,32464],{"class":203},[144,158026,155],{"class":154},[144,158028,157660],{"class":259},[144,158030,161],{"class":154},[144,158032,158033,158036],{"class":146,"line":1251},[144,158034,158035],{"class":150},"    else",[144,158037,3769],{"class":154},[144,158039,158040,158042,158044,158047],{"class":146,"line":1342},[144,158041,32464],{"class":203},[144,158043,155],{"class":154},[144,158045,158046],{"class":259},"\"请先买票\"",[144,158048,161],{"class":154},[144,158050,158051,158053],{"class":146,"line":1348},[144,158052,1731],{"class":150},[144,158054,3769],{"class":154},[144,158056,158057,158059,158061,158064],{"class":146,"line":1360},[144,158058,31312],{"class":203},[144,158060,155],{"class":154},[144,158062,158063],{"class":259},"\"未成年人禁止进入\"",[144,158065,161],{"class":154},[14,158067,158068],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[18,158070,158072],{"id":158071},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[115,158074,158076],{"id":158075},"_361-and","3.6.1 and",[14,158078,158079],{},"两个条件都成立才成立。",[135,158081,158083],{"className":30391,"code":158082,"language":30393,"meta":30,"style":30},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[141,158084,158085,158093,158101,158105,158120],{"__ignoreMap":30},[144,158086,158087,158089,158091],{"class":146,"line":147},[144,158088,146559],{"class":154},[144,158090,200],{"class":150},[144,158092,88078],{"class":203},[144,158094,158095,158097,158099],{"class":146,"line":66},[144,158096,156374],{"class":154},[144,158098,200],{"class":150},[144,158100,153612],{"class":203},[144,158102,158103],{"class":146,"line":1210},[144,158104,2430],{"emptyLinePlaceholder":72},[144,158106,158107,158109,158111,158113,158115,158117],{"class":146,"line":1225},[144,158108,1561],{"class":150},[144,158110,15738],{"class":154},[144,158112,1740],{"class":150},[144,158114,156298],{"class":203},[144,158116,120442],{"class":150},[144,158118,158119],{"class":154}," has_ticket:\n",[144,158121,158122,158124,158126,158128],{"class":146,"line":1231},[144,158123,31312],{"class":203},[144,158125,155],{"class":154},[144,158127,157660],{"class":259},[144,158129,161],{"class":154},[115,158131,158133],{"id":158132},"_362-or","3.6.2 or",[14,158135,158136],{},"只要一个条件成立就成立。",[135,158138,158140],{"className":30391,"code":158139,"language":30393,"meta":30,"style":30},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[141,158141,158142,158151,158160,158164,158176],{"__ignoreMap":30},[144,158143,158144,158147,158149],{"class":146,"line":147},[144,158145,158146],{"class":154},"is_vip ",[144,158148,200],{"class":150},[144,158150,125820],{"class":203},[144,158152,158153,158156,158158],{"class":146,"line":66},[144,158154,158155],{"class":154},"coupon ",[144,158157,200],{"class":150},[144,158159,153612],{"class":203},[144,158161,158162],{"class":146,"line":1210},[144,158163,2430],{"emptyLinePlaceholder":72},[144,158165,158166,158168,158171,158173],{"class":146,"line":1225},[144,158167,1561],{"class":150},[144,158169,158170],{"class":154}," is_vip ",[144,158172,115103],{"class":150},[144,158174,158175],{"class":154}," coupon:\n",[144,158177,158178,158180,158182,158185],{"class":146,"line":1231},[144,158179,31312],{"class":203},[144,158181,155],{"class":154},[144,158183,158184],{"class":259},"\"可以享受优惠\"",[144,158186,161],{"class":154},[115,158188,158190],{"id":158189},"_363-not","3.6.3 not",[14,158192,158193],{},"取反。",[135,158195,158197],{"className":30391,"code":158196,"language":30393,"meta":30,"style":30},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[141,158198,158199,158208,158212,158221],{"__ignoreMap":30},[144,158200,158201,158204,158206],{"class":146,"line":147},[144,158202,158203],{"class":154},"is_closed ",[144,158205,200],{"class":150},[144,158207,125820],{"class":203},[144,158209,158210],{"class":146,"line":66},[144,158211,2430],{"emptyLinePlaceholder":72},[144,158213,158214,158216,158218],{"class":146,"line":1210},[144,158215,1561],{"class":150},[144,158217,38943],{"class":150},[144,158219,158220],{"class":154}," is_closed:\n",[144,158222,158223,158225,158227,158230],{"class":146,"line":1225},[144,158224,31312],{"class":203},[144,158226,155],{"class":154},[144,158228,158229],{"class":259},"\"店铺营业中\"",[144,158231,161],{"class":154},[18,158233,158235],{"id":158234},"_37-链式比较","3.7 链式比较",[14,158237,158238],{},"Python 支持链式比较：",[135,158240,158242],{"className":30391,"code":158241,"language":30393,"meta":30,"style":30},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[141,158243,158244,158253,158257,158274],{"__ignoreMap":30},[144,158245,158246,158248,158250],{"class":146,"line":147},[144,158247,155371],{"class":154},[144,158249,200],{"class":150},[144,158251,158252],{"class":203}," 85\n",[144,158254,158255],{"class":146,"line":66},[144,158256,2430],{"emptyLinePlaceholder":72},[144,158258,158259,158261,158263,158266,158268,158270,158272],{"class":146,"line":1210},[144,158260,1561],{"class":150},[144,158262,4123],{"class":203},[144,158264,158265],{"class":150}," \u003C=",[144,158267,157796],{"class":154},[144,158269,1618],{"class":150},[144,158271,5785],{"class":203},[144,158273,3769],{"class":154},[144,158275,158276,158278,158280,158283],{"class":146,"line":1225},[144,158277,31312],{"class":203},[144,158279,155],{"class":154},[144,158281,158282],{"class":259},"\"成绩合法\"",[144,158284,161],{"class":154},[14,158286,158287],{},"等价于：",[135,158289,158291],{"className":30391,"code":158290,"language":30393,"meta":30,"style":30},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[141,158292,158293,158313],{"__ignoreMap":30},[144,158294,158295,158297,158299,158301,158303,158305,158307,158309,158311],{"class":146,"line":147},[144,158296,1561],{"class":150},[144,158298,157796],{"class":154},[144,158300,1740],{"class":150},[144,158302,4123],{"class":203},[144,158304,120442],{"class":150},[144,158306,157796],{"class":154},[144,158308,1618],{"class":150},[144,158310,5785],{"class":203},[144,158312,3769],{"class":154},[144,158314,158315,158317,158319,158321],{"class":146,"line":66},[144,158316,31312],{"class":203},[144,158318,155],{"class":154},[144,158320,158282],{"class":259},[144,158322,161],{"class":154},[18,158324,158326],{"id":158325},"_38-真值和假值","3.8 真值和假值",[14,158328,116480,158329,158331],{},[141,158330,1561],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158333,158334],{},"假值：",[135,158336,158338],{"className":30391,"code":158337,"language":30393,"meta":30,"style":30},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[141,158339,158340,158344,158349,158353,158357,158362,158366,158370,158375],{"__ignoreMap":30},[144,158341,158342],{"class":146,"line":147},[144,158343,157530],{"class":203},[144,158345,158346],{"class":146,"line":66},[144,158347,158348],{"class":203},"None\n",[144,158350,158351],{"class":146,"line":1210},[144,158352,3115],{"class":203},[144,158354,158355],{"class":146,"line":1225},[144,158356,32355],{"class":203},[144,158358,158359],{"class":146,"line":1231},[144,158360,158361],{"class":259},"\"\"\n",[144,158363,158364],{"class":146,"line":1245},[144,158365,32370],{"class":154},[144,158367,158368],{"class":146,"line":1251},[144,158369,2006],{"class":154},[144,158371,158372],{"class":146,"line":1342},[144,158373,158374],{"class":154},"{}\n",[144,158376,158377,158379],{"class":146,"line":1348},[144,158378,155303],{"class":203},[144,158380,2006],{"class":154},[14,158382,15166],{},[135,158384,158386],{"className":30391,"code":158385,"language":30393,"meta":30,"style":30},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[141,158387,158388,158402,158406,158413,158433,158439],{"__ignoreMap":30},[144,158389,158390,158392,158394,158396,158398,158400],{"class":146,"line":147},[144,158391,146549],{"class":154},[144,158393,200],{"class":150},[144,158395,60618],{"class":203},[144,158397,155],{"class":154},[144,158399,152392],{"class":259},[144,158401,161],{"class":154},[144,158403,158404],{"class":146,"line":66},[144,158405,2430],{"emptyLinePlaceholder":72},[144,158407,158408,158410],{"class":146,"line":1210},[144,158409,1561],{"class":150},[144,158411,158412],{"class":154}," name:\n",[144,158414,158415,158417,158419,158421,158423,158425,158427,158429,158431],{"class":146,"line":1225},[144,158416,31312],{"class":203},[144,158418,155],{"class":154},[144,158420,207],{"class":150},[144,158422,157067],{"class":259},[144,158424,1051],{"class":203},[144,158426,79823],{"class":154},[144,158428,1101],{"class":203},[144,158430,406],{"class":259},[144,158432,161],{"class":154},[144,158434,158435,158437],{"class":146,"line":1231},[144,158436,1731],{"class":150},[144,158438,3769],{"class":154},[144,158440,158441,158443,158445,158448],{"class":146,"line":1245},[144,158442,31312],{"class":203},[144,158444,155],{"class":154},[144,158446,158447],{"class":259},"\"姓名不能为空\"",[144,158449,161],{"class":154},[18,158451,158453],{"id":158452},"_39-match语句","3.9 match语句",[14,158455,158456,158457,158459],{},"Python 3.10 开始支持 ",[141,158458,71278],{},"。它适合处理固定选项。",[135,158461,158463],{"className":30391,"code":158462,"language":30393,"meta":30,"style":30},"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",[141,158464,158465,158481,158485,158492,158502,158513,158522,158533,158542,158553,158560],{"__ignoreMap":30},[144,158466,158467,158470,158472,158474,158476,158479],{"class":146,"line":147},[144,158468,158469],{"class":154},"command ",[144,158471,200],{"class":150},[144,158473,60618],{"class":203},[144,158475,155],{"class":154},[144,158477,158478],{"class":259},"\"请输入命令:\"",[144,158480,161],{"class":154},[144,158482,158483],{"class":146,"line":66},[144,158484,2430],{"emptyLinePlaceholder":72},[144,158486,158487,158489],{"class":146,"line":1210},[144,158488,71278],{"class":150},[144,158490,158491],{"class":154}," command:\n",[144,158493,158494,158497,158500],{"class":146,"line":1225},[144,158495,158496],{"class":150},"    case",[144,158498,158499],{"class":259}," \"start\"",[144,158501,3769],{"class":154},[144,158503,158504,158506,158508,158511],{"class":146,"line":1231},[144,158505,32464],{"class":203},[144,158507,155],{"class":154},[144,158509,158510],{"class":259},"\"启动\"",[144,158512,161],{"class":154},[144,158514,158515,158517,158520],{"class":146,"line":1245},[144,158516,158496],{"class":150},[144,158518,158519],{"class":259}," \"stop\"",[144,158521,3769],{"class":154},[144,158523,158524,158526,158528,158531],{"class":146,"line":1251},[144,158525,32464],{"class":203},[144,158527,155],{"class":154},[144,158529,158530],{"class":259},"\"停止\"",[144,158532,161],{"class":154},[144,158534,158535,158537,158540],{"class":146,"line":1342},[144,158536,158496],{"class":150},[144,158538,158539],{"class":259}," \"restart\"",[144,158541,3769],{"class":154},[144,158543,158544,158546,158548,158551],{"class":146,"line":1348},[144,158545,32464],{"class":203},[144,158547,155],{"class":154},[144,158549,158550],{"class":259},"\"重启\"",[144,158552,161],{"class":154},[144,158554,158555,158557],{"class":146,"line":1360},[144,158556,158496],{"class":150},[144,158558,158559],{"class":154}," _:\n",[144,158561,158562,158564,158566,158569],{"class":146,"line":1642},[144,158563,32464],{"class":203},[144,158565,155],{"class":154},[144,158567,158568],{"class":259},"\"未知命令\"",[144,158570,161],{"class":154},[14,158572,158573,158574,158576,158577,158579],{},"入门阶段掌握 ",[141,158575,154671],{}," 更重要，",[141,158578,71278],{}," 可以作为补充。",[18,158581,158583],{"id":158582},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,158585,123305],{},[98,158587,158588,158591,158594],{},[101,158589,158590],{},"输入成绩。",[101,158592,158593],{},"判断成绩是否合法。",[101,158595,158596],{},"输出等级。",[14,158598,10066],{},[135,158600,158602],{"className":30391,"code":158601,"language":30393,"meta":30,"style":30},"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",[141,158603,158604,158622,158626,158644,158655,158667,158678,158690,158701,158714,158725,158737,158748,158754],{"__ignoreMap":30},[144,158605,158606,158608,158610,158612,158614,158616,158618,158620],{"class":146,"line":147},[144,158607,155371],{"class":154},[144,158609,200],{"class":150},[144,158611,109810],{"class":203},[144,158613,155],{"class":154},[144,158615,53834],{"class":203},[144,158617,155],{"class":154},[144,158619,152422],{"class":259},[144,158621,30510],{"class":154},[144,158623,158624],{"class":146,"line":66},[144,158625,2430],{"emptyLinePlaceholder":72},[144,158627,158628,158630,158632,158634,158636,158638,158640,158642],{"class":146,"line":1210},[144,158629,1561],{"class":150},[144,158631,38943],{"class":150},[144,158633,4123],{"class":203},[144,158635,158265],{"class":150},[144,158637,157796],{"class":154},[144,158639,1618],{"class":150},[144,158641,5785],{"class":203},[144,158643,3769],{"class":154},[144,158645,158646,158648,158650,158653],{"class":146,"line":1225},[144,158647,31312],{"class":203},[144,158649,155],{"class":154},[144,158651,158652],{"class":259},"\"成绩不合法\"",[144,158654,161],{"class":154},[144,158656,158657,158659,158661,158663,158665],{"class":146,"line":1231},[144,158658,157819],{"class":150},[144,158660,157796],{"class":154},[144,158662,1740],{"class":150},[144,158664,157801],{"class":203},[144,158666,3769],{"class":154},[144,158668,158669,158671,158673,158676],{"class":146,"line":1245},[144,158670,31312],{"class":203},[144,158672,155],{"class":154},[144,158674,158675],{"class":259},"\"等级:A\"",[144,158677,161],{"class":154},[144,158679,158680,158682,158684,158686,158688],{"class":146,"line":1251},[144,158681,157819],{"class":150},[144,158683,157796],{"class":154},[144,158685,1740],{"class":150},[144,158687,157826],{"class":203},[144,158689,3769],{"class":154},[144,158691,158692,158694,158696,158699],{"class":146,"line":1342},[144,158693,31312],{"class":203},[144,158695,155],{"class":154},[144,158697,158698],{"class":259},"\"等级:B\"",[144,158700,161],{"class":154},[144,158702,158703,158705,158707,158709,158712],{"class":146,"line":1348},[144,158704,157819],{"class":150},[144,158706,157796],{"class":154},[144,158708,1740],{"class":150},[144,158710,158711],{"class":203}," 70",[144,158713,3769],{"class":154},[144,158715,158716,158718,158720,158723],{"class":146,"line":1360},[144,158717,31312],{"class":203},[144,158719,155],{"class":154},[144,158721,158722],{"class":259},"\"等级:C\"",[144,158724,161],{"class":154},[144,158726,158727,158729,158731,158733,158735],{"class":146,"line":1642},[144,158728,157819],{"class":150},[144,158730,157796],{"class":154},[144,158732,1740],{"class":150},[144,158734,157850],{"class":203},[144,158736,3769],{"class":154},[144,158738,158739,158741,158743,158746],{"class":146,"line":1647},[144,158740,31312],{"class":203},[144,158742,155],{"class":154},[144,158744,158745],{"class":259},"\"等级:D\"",[144,158747,161],{"class":154},[144,158749,158750,158752],{"class":146,"line":1653},[144,158751,1731],{"class":150},[144,158753,3769],{"class":154},[144,158755,158756,158758,158760,158763],{"class":146,"line":1658},[144,158757,31312],{"class":203},[144,158759,155],{"class":154},[144,158761,158762],{"class":259},"\"等级:E\"",[144,158764,161],{"class":154},[18,158766,158768],{"id":158767},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,158770,123305],{},[98,158772,158773,158776,158779,158782],{},[101,158774,158775],{},"输入消费金额。",[101,158777,158778],{},"输入会员等级，普通、银卡、金卡。",[101,158780,158781],{},"普通不打折，银卡 9 折，金卡 8 折。",[101,158783,158784],{},"满 500 再减 50。",[14,158786,10066],{},[135,158788,158790],{"className":30391,"code":158789,"language":30393,"meta":30,"style":30},"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",[141,158791,158792,158812,158828,158832,158840,158844,158858,158868,158881,158890,158903,158911,158917,158928,158932,158946,158950,158964,158974,158978],{"__ignoreMap":30},[144,158793,158794,158797,158799,158801,158803,158805,158807,158810],{"class":146,"line":147},[144,158795,158796],{"class":154},"amount ",[144,158798,200],{"class":150},[144,158800,109810],{"class":203},[144,158802,155],{"class":154},[144,158804,53834],{"class":203},[144,158806,155],{"class":154},[144,158808,158809],{"class":259},"\"请输入消费金额:\"",[144,158811,30510],{"class":154},[144,158813,158814,158817,158819,158821,158823,158826],{"class":146,"line":66},[144,158815,158816],{"class":154},"level ",[144,158818,200],{"class":150},[144,158820,60618],{"class":203},[144,158822,155],{"class":154},[144,158824,158825],{"class":259},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[144,158827,161],{"class":154},[144,158829,158830],{"class":146,"line":1210},[144,158831,2430],{"emptyLinePlaceholder":72},[144,158833,158834,158836,158838],{"class":146,"line":1225},[144,158835,157249],{"class":154},[144,158837,200],{"class":150},[144,158839,55712],{"class":203},[144,158841,158842],{"class":146,"line":1231},[144,158843,2430],{"emptyLinePlaceholder":72},[144,158845,158846,158848,158851,158853,158856],{"class":146,"line":1245},[144,158847,1561],{"class":150},[144,158849,158850],{"class":154}," level ",[144,158852,2979],{"class":150},[144,158854,158855],{"class":259}," \"银卡\"",[144,158857,3769],{"class":154},[144,158859,158860,158863,158865],{"class":146,"line":1251},[144,158861,158862],{"class":154},"    discount ",[144,158864,200],{"class":150},[144,158866,158867],{"class":203}," 0.9\n",[144,158869,158870,158872,158874,158876,158879],{"class":146,"line":1342},[144,158871,157819],{"class":150},[144,158873,158850],{"class":154},[144,158875,2979],{"class":150},[144,158877,158878],{"class":259}," \"金卡\"",[144,158880,3769],{"class":154},[144,158882,158883,158885,158887],{"class":146,"line":1348},[144,158884,158862],{"class":154},[144,158886,200],{"class":150},[144,158888,158889],{"class":203}," 0.8\n",[144,158891,158892,158894,158896,158898,158901],{"class":146,"line":1360},[144,158893,157819],{"class":150},[144,158895,158850],{"class":154},[144,158897,2979],{"class":150},[144,158899,158900],{"class":259}," \"普通\"",[144,158902,3769],{"class":154},[144,158904,158905,158907,158909],{"class":146,"line":1642},[144,158906,158862],{"class":154},[144,158908,200],{"class":150},[144,158910,55712],{"class":203},[144,158912,158913,158915],{"class":146,"line":1647},[144,158914,1731],{"class":150},[144,158916,3769],{"class":154},[144,158918,158919,158921,158923,158926],{"class":146,"line":1653},[144,158920,31312],{"class":203},[144,158922,155],{"class":154},[144,158924,158925],{"class":259},"\"会员等级输入错误，按普通会员计算\"",[144,158927,161],{"class":154},[144,158929,158930],{"class":146,"line":1658},[144,158931,2430],{"emptyLinePlaceholder":72},[144,158933,158934,158937,158939,158942,158944],{"class":146,"line":1672},[144,158935,158936],{"class":154},"pay ",[144,158938,200],{"class":150},[144,158940,158941],{"class":154}," amount ",[144,158943,610],{"class":150},[144,158945,157288],{"class":154},[144,158947,158948],{"class":146,"line":1677},[144,158949,2430],{"emptyLinePlaceholder":72},[144,158951,158952,158954,158957,158959,158962],{"class":146,"line":1683},[144,158953,1561],{"class":150},[144,158955,158956],{"class":154}," pay ",[144,158958,1740],{"class":150},[144,158960,158961],{"class":203}," 500",[144,158963,3769],{"class":154},[144,158965,158966,158969,158971],{"class":146,"line":1704},[144,158967,158968],{"class":154},"    pay ",[144,158970,150265],{"class":150},[144,158972,158973],{"class":203}," 50\n",[144,158975,158976],{"class":146,"line":1709},[144,158977,2430],{"emptyLinePlaceholder":72},[144,158979,158980,158982,158984,158986,158988,158990,158993,158995,158997,158999],{"class":146,"line":1723},[144,158981,30428],{"class":203},[144,158983,155],{"class":154},[144,158985,207],{"class":150},[144,158987,157369],{"class":259},[144,158989,1051],{"class":203},[144,158991,158992],{"class":154},"pay",[144,158994,157172],{"class":150},[144,158996,1101],{"class":203},[144,158998,157025],{"class":259},[144,159000,161],{"class":154},[18,159002,159004],{"id":159003},"_312-易错点","3.12 易错点",[98,159006,159007,159010,159013,159016,159021],{},[101,159008,159009],{},"冒号不能漏。",[101,159011,159012],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[101,159014,159015],{},"多分支判断要注意顺序。",[101,159017,159018,159019,28398],{},"判断相等用 ",[141,159020,2979],{},[101,159022,159023],{},"字符串比较区分大小写：",[135,159025,159027],{"className":30391,"code":159026,"language":30393,"meta":30,"style":30},"\"Y\" == \"y\"  # False\n",[141,159028,159029],{"__ignoreMap":30},[144,159030,159031,159034,159036,159038],{"class":146,"line":147},[144,159032,159033],{"class":259},"\"Y\"",[144,159035,101572],{"class":150},[144,159037,158018],{"class":259},[144,159039,159040],{"class":213},"  # False\n",[14,159042,159043],{},"可转换后再判断：",[135,159045,159047],{"className":30391,"code":159046,"language":30393,"meta":30,"style":30},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[141,159048,159049,159066,159079],{"__ignoreMap":30},[144,159050,159051,159054,159056,159058,159060,159063],{"class":146,"line":147},[144,159052,159053],{"class":154},"answer ",[144,159055,200],{"class":150},[144,159057,60618],{"class":203},[144,159059,155],{"class":154},[144,159061,159062],{"class":259},"\"是否继续(y\u002Fn):\"",[144,159064,159065],{"class":154},").lower()\n",[144,159067,159068,159070,159073,159075,159077],{"class":146,"line":66},[144,159069,1561],{"class":150},[144,159071,159072],{"class":154}," answer ",[144,159074,2979],{"class":150},[144,159076,158018],{"class":259},[144,159078,3769],{"class":154},[144,159080,159081,159083,159085,159088],{"class":146,"line":1210},[144,159082,31312],{"class":203},[144,159084,155],{"class":154},[144,159086,159087],{"class":259},"\"继续\"",[144,159089,161],{"class":154},[18,159091,159093],{"id":159092},"_313-本章练习","3.13 本章练习",[98,159095,159096,159099,159102,159105,159115],{},[101,159097,159098],{},"输入年龄，判断是否成年。",[101,159100,159101],{},"输入年份，判断是否为闰年。",[101,159103,159104],{},"输入三个数字，输出最大值。",[101,159106,159107,159108,159111,159112,159114],{},"写登录判断：用户名是 ",[141,159109,159110],{},"admin"," 且密码是 ",[141,159113,15115],{}," 才登录成功。",[101,159116,159117],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5157,159119,159120],{},"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":30,"searchDepth":66,"depth":66,"links":159122},[159123,159124,159125,159126,159127,159128,159133,159134,159135,159136,159137,159138,159139],{"id":157511,"depth":66,"text":157512},{"id":157564,"depth":66,"text":157565},{"id":157668,"depth":66,"text":157669},{"id":157758,"depth":66,"text":157759},{"id":157948,"depth":66,"text":157949},{"id":158071,"depth":66,"text":158072,"children":159129},[159130,159131,159132],{"id":158075,"depth":1210,"text":158076},{"id":158132,"depth":1210,"text":158133},{"id":158189,"depth":1210,"text":158190},{"id":158234,"depth":66,"text":158235},{"id":158325,"depth":66,"text":158326},{"id":158452,"depth":66,"text":158453},{"id":158582,"depth":66,"text":158583},{"id":158767,"depth":66,"text":158768},{"id":159003,"depth":66,"text":159004},{"id":159092,"depth":66,"text":159093},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157503,"description":23408},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159146,"title":159147,"body":159148,"description":23408,"extension":70,"meta":160917,"navigation":72,"path":160918,"seo":160919,"stem":160920,"__hash__":160921},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159149,"toc":160897},[159150,159153,159157,159163,159166,159183,159187,159189,159206,159208,159253,159255,159272,159276,159279,159345,159348,159366,159370,159531,159540,159544,159548,159553,159600,159602,159608,159612,159617,159664,159666,159672,159676,159681,159717,159720,159767,159771,159777,159835,159840,159871,159876,159880,159935,159938,160010,160013,160072,160076,160079,160154,160157,160161,160267,160270,160296,160300,160312,160381,160384,160476,160480,160482,160493,160495,160625,160629,160831,160839,160843,160873,160877,160894],[10,159151,159147],{"id":159152},"_4-循环语句",[18,159154,159156],{"id":159155},"_41-为什么需要循环","4.1 为什么需要循环",[14,159158,159159,159160,159162],{},"如果要输出 1 到 100，不应该写 100 行 ",[141,159161,146485],{},"，而应该用循环。",[14,159164,159165],{},"循环适合处理重复任务：",[98,159167,159168,159171,159174,159177,159180],{},[101,159169,159170],{},"重复输出。",[101,159172,159173],{},"重复输入。",[101,159175,159176],{},"遍历数据。",[101,159178,159179],{},"持续执行菜单。",[101,159181,159182],{},"批量处理文件或数据。",[18,159184,159186],{"id":159185},"_42-while循环","4.2 while循环",[14,159188,5212],{},[135,159190,159192],{"className":30391,"code":159191,"language":30393,"meta":30,"style":30},"while 条件:\n    循环体\n",[141,159193,159194,159201],{"__ignoreMap":30},[144,159195,159196,159198],{"class":146,"line":147},[144,159197,108676],{"class":150},[144,159199,159200],{"class":154}," 条件:\n",[144,159202,159203],{"class":146,"line":66},[144,159204,159205],{"class":154},"    循环体\n",[14,159207,15166],{},[135,159209,159211],{"className":30391,"code":159210,"language":30393,"meta":30,"style":30},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[141,159212,159213,159221,159225,159237,159244],{"__ignoreMap":30},[144,159214,159215,159217,159219],{"class":146,"line":147},[144,159216,100161],{"class":154},[144,159218,200],{"class":150},[144,159220,55712],{"class":203},[144,159222,159223],{"class":146,"line":66},[144,159224,2430],{"emptyLinePlaceholder":72},[144,159226,159227,159229,159231,159233,159235],{"class":146,"line":1210},[144,159228,108676],{"class":150},[144,159230,9469],{"class":154},[144,159232,1618],{"class":150},[144,159234,2178],{"class":203},[144,159236,3769],{"class":154},[144,159238,159239,159241],{"class":146,"line":1225},[144,159240,31312],{"class":203},[144,159242,159243],{"class":154},"(i)\n",[144,159245,159246,159249,159251],{"class":146,"line":1231},[144,159247,159248],{"class":154},"    i ",[144,159250,9508],{"class":150},[144,159252,55712],{"class":203},[14,159254,80942],{},[98,159256,159257,159263,159266,159269],{},[101,159258,159259,159260,28398],{},"判断条件 ",[141,159261,159262],{},"i \u003C= 5",[101,159264,159265],{},"条件成立，执行循环体。",[101,159267,159268],{},"执行完后回到条件判断。",[101,159270,159271],{},"条件不成立，退出循环。",[18,159273,159275],{"id":159274},"_43-while累加","4.3 while累加",[14,159277,159278],{},"计算 1 到 100 的和：",[135,159280,159282],{"className":30391,"code":159281,"language":30393,"meta":30,"style":30},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[141,159283,159284,159292,159300,159304,159316,159326,159334,159338],{"__ignoreMap":30},[144,159285,159286,159288,159290],{"class":146,"line":147},[144,159287,100161],{"class":154},[144,159289,200],{"class":150},[144,159291,55712],{"class":203},[144,159293,159294,159296,159298],{"class":146,"line":66},[144,159295,157273],{"class":154},[144,159297,200],{"class":150},[144,159299,47346],{"class":203},[144,159301,159302],{"class":146,"line":1210},[144,159303,2430],{"emptyLinePlaceholder":72},[144,159305,159306,159308,159310,159312,159314],{"class":146,"line":1225},[144,159307,108676],{"class":150},[144,159309,9469],{"class":154},[144,159311,1618],{"class":150},[144,159313,5785],{"class":203},[144,159315,3769],{"class":154},[144,159317,159318,159321,159323],{"class":146,"line":1231},[144,159319,159320],{"class":154},"    total ",[144,159322,9508],{"class":150},[144,159324,159325],{"class":154}," i\n",[144,159327,159328,159330,159332],{"class":146,"line":1245},[144,159329,159248],{"class":154},[144,159331,9508],{"class":150},[144,159333,55712],{"class":203},[144,159335,159336],{"class":146,"line":1251},[144,159337,2430],{"emptyLinePlaceholder":72},[144,159339,159340,159342],{"class":146,"line":1342},[144,159341,30428],{"class":203},[144,159343,159344],{"class":154},"(total)\n",[14,159346,159347],{},"核心思想：",[98,159349,159350,159355,159360],{},[101,159351,159352,159354],{},[141,159353,596],{}," 控制循环次数。",[101,159356,159357,159359],{},[141,159358,157374],{}," 保存累加结果。",[101,159361,159362,159363,159365],{},"每轮循环都要更新 ",[141,159364,596],{},"，否则可能死循环。",[18,159367,159369],{"id":159368},"_44-while猜数字","4.4 while猜数字",[135,159371,159373],{"className":30391,"code":159372,"language":30393,"meta":30,"style":30},"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",[141,159374,159375,159381,159385,159402,159410,159414,159422,159442,159451,159455,159467,159478,159488,159499,159505,159527],{"__ignoreMap":30},[144,159376,159377,159379],{"class":146,"line":147},[144,159378,30405],{"class":150},[144,159380,45341],{"class":154},[144,159382,159383],{"class":146,"line":66},[144,159384,2430],{"emptyLinePlaceholder":72},[144,159386,159387,159389,159391,159394,159396,159398,159400],{"class":146,"line":1210},[144,159388,159053],{"class":154},[144,159390,200],{"class":150},[144,159392,159393],{"class":154}," random.randint(",[144,159395,372],{"class":203},[144,159397,12466],{"class":154},[144,159399,466],{"class":203},[144,159401,161],{"class":154},[144,159403,159404,159406,159408],{"class":146,"line":1225},[144,159405,146704],{"class":154},[144,159407,200],{"class":150},[144,159409,47346],{"class":203},[144,159411,159412],{"class":146,"line":1231},[144,159413,2430],{"emptyLinePlaceholder":72},[144,159415,159416,159418,159420],{"class":146,"line":1245},[144,159417,108676],{"class":150},[144,159419,95305],{"class":203},[144,159421,3769],{"class":154},[144,159423,159424,159427,159429,159431,159433,159435,159437,159440],{"class":146,"line":1251},[144,159425,159426],{"class":154},"    guess ",[144,159428,200],{"class":150},[144,159430,2412],{"class":203},[144,159432,155],{"class":154},[144,159434,53834],{"class":203},[144,159436,155],{"class":154},[144,159438,159439],{"class":259},"\"请输入1到100之间的数字:\"",[144,159441,30510],{"class":154},[144,159443,159444,159447,159449],{"class":146,"line":1342},[144,159445,159446],{"class":154},"    count ",[144,159448,9508],{"class":150},[144,159450,55712],{"class":203},[144,159452,159453],{"class":146,"line":1348},[144,159454,2430],{"emptyLinePlaceholder":72},[144,159456,159457,159459,159462,159464],{"class":146,"line":1360},[144,159458,3131],{"class":150},[144,159460,159461],{"class":154}," guess ",[144,159463,1115],{"class":150},[144,159465,159466],{"class":154}," answer:\n",[144,159468,159469,159471,159473,159476],{"class":146,"line":1642},[144,159470,32464],{"class":203},[144,159472,155],{"class":154},[144,159474,159475],{"class":259},"\"猜大了\"",[144,159477,161],{"class":154},[144,159479,159480,159482,159484,159486],{"class":146,"line":1647},[144,159481,39306],{"class":150},[144,159483,159461],{"class":154},[144,159485,1065],{"class":150},[144,159487,159466],{"class":154},[144,159489,159490,159492,159494,159497],{"class":146,"line":1653},[144,159491,32464],{"class":203},[144,159493,155],{"class":154},[144,159495,159496],{"class":259},"\"猜小了\"",[144,159498,161],{"class":154},[144,159500,159501,159503],{"class":146,"line":1658},[144,159502,158035],{"class":150},[144,159504,3769],{"class":154},[144,159506,159507,159509,159511,159513,159516,159518,159520,159522,159525],{"class":146,"line":1672},[144,159508,32464],{"class":203},[144,159510,155],{"class":154},[144,159512,207],{"class":150},[144,159514,159515],{"class":259},"\"猜对了，一共猜了",[144,159517,1051],{"class":203},[144,159519,84447],{"class":154},[144,159521,1101],{"class":203},[144,159523,159524],{"class":259},"次\"",[144,159526,161],{"class":154},[144,159528,159529],{"class":146,"line":1677},[144,159530,31640],{"class":150},[14,159532,159533,159536,159537,159539],{},[141,159534,159535],{},"while True"," 表示无限循环，通常配合 ",[141,159538,2083],{}," 使用。",[18,159541,159543],{"id":159542},"_45-break和continue","4.5 break和continue",[115,159545,159547],{"id":159546},"_451-break","4.5.1 break",[14,159549,159550,159552],{},[141,159551,2083],{}," 直接结束整个循环。",[135,159554,159556],{"className":30391,"code":159555,"language":30393,"meta":30,"style":30},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[141,159557,159558,159578,159590,159594],{"__ignoreMap":30},[144,159559,159560,159562,159564,159566,159568,159570,159572,159574,159576],{"class":146,"line":147},[144,159561,3055],{"class":150},[144,159563,9469],{"class":154},[144,159565,26056],{"class":150},[144,159567,32456],{"class":203},[144,159569,155],{"class":154},[144,159571,372],{"class":203},[144,159573,12466],{"class":154},[144,159575,499],{"class":203},[144,159577,30799],{"class":154},[144,159579,159580,159582,159584,159586,159588],{"class":146,"line":66},[144,159581,3131],{"class":150},[144,159583,9469],{"class":154},[144,159585,2979],{"class":150},[144,159587,78083],{"class":203},[144,159589,3769],{"class":154},[144,159591,159592],{"class":146,"line":1210},[144,159593,31640],{"class":150},[144,159595,159596,159598],{"class":146,"line":1225},[144,159597,31312],{"class":203},[144,159599,159243],{"class":154},[14,159601,146470],{},[135,159603,159606],{"className":159604,"code":159605,"language":5218,"meta":30},[5216],"1\n2\n",[141,159607,159605],{"__ignoreMap":30},[115,159609,159611],{"id":159610},"_452-continue","4.5.2 continue",[14,159613,159614,159616],{},[141,159615,154685],{}," 跳过本轮剩余代码，进入下一轮循环。",[135,159618,159620],{"className":30391,"code":159619,"language":30393,"meta":30,"style":30},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[141,159621,159622,159642,159654,159658],{"__ignoreMap":30},[144,159623,159624,159626,159628,159630,159632,159634,159636,159638,159640],{"class":146,"line":147},[144,159625,3055],{"class":150},[144,159627,9469],{"class":154},[144,159629,26056],{"class":150},[144,159631,32456],{"class":203},[144,159633,155],{"class":154},[144,159635,372],{"class":203},[144,159637,12466],{"class":154},[144,159639,499],{"class":203},[144,159641,30799],{"class":154},[144,159643,159644,159646,159648,159650,159652],{"class":146,"line":66},[144,159645,3131],{"class":150},[144,159647,9469],{"class":154},[144,159649,2979],{"class":150},[144,159651,78083],{"class":203},[144,159653,3769],{"class":154},[144,159655,159656],{"class":146,"line":1210},[144,159657,148525],{"class":150},[144,159659,159660,159662],{"class":146,"line":1225},[144,159661,31312],{"class":203},[144,159663,159243],{"class":154},[14,159665,146470],{},[135,159667,159670],{"className":159668,"code":159669,"language":5218,"meta":30},[5216],"1\n2\n4\n5\n",[141,159671,159669],{"__ignoreMap":30},[18,159673,159675],{"id":159674},"_46-for循环","4.6 for循环",[14,159677,159678,159680],{},[141,159679,3055],{}," 常用于遍历序列。",[135,159682,159684],{"className":30391,"code":159683,"language":30393,"meta":30,"style":30},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[141,159685,159686,159695,159699,159710],{"__ignoreMap":30},[144,159687,159688,159690,159692],{"class":146,"line":147},[144,159689,146549],{"class":154},[144,159691,200],{"class":150},[144,159693,159694],{"class":259}," \"python\"\n",[144,159696,159697],{"class":146,"line":66},[144,159698,2430],{"emptyLinePlaceholder":72},[144,159700,159701,159703,159706,159708],{"class":146,"line":1210},[144,159702,3055],{"class":150},[144,159704,159705],{"class":154}," ch ",[144,159707,26056],{"class":150},[144,159709,158412],{"class":154},[144,159711,159712,159714],{"class":146,"line":1225},[144,159713,31312],{"class":203},[144,159715,159716],{"class":154},"(ch)\n",[14,159718,159719],{},"遍历列表：",[135,159721,159723],{"className":30391,"code":159722,"language":30393,"meta":30,"style":30},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[141,159724,159725,159747,159751,159761],{"__ignoreMap":30},[144,159726,159727,159730,159732,159734,159736,159738,159740,159742,159745],{"class":146,"line":147},[144,159728,159729],{"class":154},"students ",[144,159731,200],{"class":150},[144,159733,52239],{"class":154},[144,159735,149901],{"class":259},[144,159737,12466],{"class":154},[144,159739,150949],{"class":259},[144,159741,12466],{"class":154},[144,159743,159744],{"class":259},"\"小刚\"",[144,159746,33259],{"class":154},[144,159748,159749],{"class":146,"line":66},[144,159750,2430],{"emptyLinePlaceholder":72},[144,159752,159753,159755,159757,159759],{"class":146,"line":1210},[144,159754,3055],{"class":150},[144,159756,152150],{"class":154},[144,159758,26056],{"class":150},[144,159760,152155],{"class":154},[144,159762,159763,159765],{"class":146,"line":1225},[144,159764,31312],{"class":203},[144,159766,150055],{"class":154},[18,159768,159770],{"id":159769},"_47-range函数","4.7 range函数",[14,159772,159773,159776],{},[141,159774,159775],{},"range()"," 用于生成整数序列。",[135,159778,159780],{"className":30391,"code":159779,"language":30393,"meta":30,"style":30},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[141,159781,159782,159796,159814],{"__ignoreMap":30},[144,159783,159784,159786,159788,159790,159793],{"class":146,"line":147},[144,159785,33429],{"class":203},[144,159787,155],{"class":154},[144,159789,474],{"class":203},[144,159791,159792],{"class":154},")          ",[144,159794,159795],{"class":213},"# 0,1,2,3,4\n",[144,159797,159798,159800,159802,159804,159806,159808,159811],{"class":146,"line":66},[144,159799,33429],{"class":203},[144,159801,155],{"class":154},[144,159803,372],{"class":203},[144,159805,12466],{"class":154},[144,159807,474],{"class":203},[144,159809,159810],{"class":154},")       ",[144,159812,159813],{"class":213},"# 1,2,3,4\n",[144,159815,159816,159818,159820,159822,159824,159826,159828,159830,159832],{"class":146,"line":1210},[144,159817,33429],{"class":203},[144,159819,155],{"class":154},[144,159821,372],{"class":203},[144,159823,12466],{"class":154},[144,159825,601],{"class":203},[144,159827,12466],{"class":154},[144,159829,232],{"class":203},[144,159831,155674],{"class":154},[144,159833,159834],{"class":213},"# 1,3,5,7,9\n",[14,159836,159837,159838,24631],{},"配合 ",[141,159839,3055],{},[135,159841,159843],{"className":30391,"code":159842,"language":30393,"meta":30,"style":30},"for i in range(1, 6):\n    print(i)\n",[141,159844,159845,159865],{"__ignoreMap":30},[144,159846,159847,159849,159851,159853,159855,159857,159859,159861,159863],{"class":146,"line":147},[144,159848,3055],{"class":150},[144,159850,9469],{"class":154},[144,159852,26056],{"class":150},[144,159854,32456],{"class":203},[144,159856,155],{"class":154},[144,159858,372],{"class":203},[144,159860,12466],{"class":154},[144,159862,499],{"class":203},[144,159864,30799],{"class":154},[144,159866,159867,159869],{"class":146,"line":66},[144,159868,31312],{"class":203},[144,159870,159243],{"class":154},[14,159872,9056,159873,159875],{},[141,159874,33429],{}," 的结束值不包含在内。",[18,159877,159879],{"id":159878},"_48-for循环求和","4.8 for循环求和",[135,159881,159883],{"className":30391,"code":159882,"language":30393,"meta":30,"style":30},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[141,159884,159885,159893,159897,159917,159925,159929],{"__ignoreMap":30},[144,159886,159887,159889,159891],{"class":146,"line":147},[144,159888,157273],{"class":154},[144,159890,200],{"class":150},[144,159892,47346],{"class":203},[144,159894,159895],{"class":146,"line":66},[144,159896,2430],{"emptyLinePlaceholder":72},[144,159898,159899,159901,159903,159905,159907,159909,159911,159913,159915],{"class":146,"line":1210},[144,159900,3055],{"class":150},[144,159902,9469],{"class":154},[144,159904,26056],{"class":150},[144,159906,32456],{"class":203},[144,159908,155],{"class":154},[144,159910,372],{"class":203},[144,159912,12466],{"class":154},[144,159914,492],{"class":203},[144,159916,30799],{"class":154},[144,159918,159919,159921,159923],{"class":146,"line":1225},[144,159920,159320],{"class":154},[144,159922,9508],{"class":150},[144,159924,159325],{"class":154},[144,159926,159927],{"class":146,"line":1231},[144,159928,2430],{"emptyLinePlaceholder":72},[144,159930,159931,159933],{"class":146,"line":1245},[144,159932,30428],{"class":203},[144,159934,159344],{"class":154},[14,159936,159937],{},"求偶数和：",[135,159939,159941],{"className":30391,"code":159940,"language":30393,"meta":30,"style":30},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[141,159942,159943,159951,159955,159975,159991,160000,160004],{"__ignoreMap":30},[144,159944,159945,159947,159949],{"class":146,"line":147},[144,159946,157273],{"class":154},[144,159948,200],{"class":150},[144,159950,47346],{"class":203},[144,159952,159953],{"class":146,"line":66},[144,159954,2430],{"emptyLinePlaceholder":72},[144,159956,159957,159959,159961,159963,159965,159967,159969,159971,159973],{"class":146,"line":1210},[144,159958,3055],{"class":150},[144,159960,9469],{"class":154},[144,159962,26056],{"class":150},[144,159964,32456],{"class":203},[144,159966,155],{"class":154},[144,159968,372],{"class":203},[144,159970,12466],{"class":154},[144,159972,492],{"class":203},[144,159974,30799],{"class":154},[144,159976,159977,159979,159981,159983,159985,159987,159989],{"class":146,"line":1225},[144,159978,3131],{"class":150},[144,159980,9469],{"class":154},[144,159982,483],{"class":150},[144,159984,14786],{"class":203},[144,159986,101572],{"class":150},[144,159988,4123],{"class":203},[144,159990,3769],{"class":154},[144,159992,159993,159996,159998],{"class":146,"line":1231},[144,159994,159995],{"class":154},"        total ",[144,159997,9508],{"class":150},[144,159999,159325],{"class":154},[144,160001,160002],{"class":146,"line":1245},[144,160003,2430],{"emptyLinePlaceholder":72},[144,160005,160006,160008],{"class":146,"line":1251},[144,160007,30428],{"class":203},[144,160009,159344],{"class":154},[14,160011,160012],{},"也可以：",[135,160014,160016],{"className":30391,"code":160015,"language":30393,"meta":30,"style":30},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[141,160017,160018,160026,160030,160054,160062,160066],{"__ignoreMap":30},[144,160019,160020,160022,160024],{"class":146,"line":147},[144,160021,157273],{"class":154},[144,160023,200],{"class":150},[144,160025,47346],{"class":203},[144,160027,160028],{"class":146,"line":66},[144,160029,2430],{"emptyLinePlaceholder":72},[144,160031,160032,160034,160036,160038,160040,160042,160044,160046,160048,160050,160052],{"class":146,"line":1210},[144,160033,3055],{"class":150},[144,160035,9469],{"class":154},[144,160037,26056],{"class":150},[144,160039,32456],{"class":203},[144,160041,155],{"class":154},[144,160043,232],{"class":203},[144,160045,12466],{"class":154},[144,160047,492],{"class":203},[144,160049,12466],{"class":154},[144,160051,232],{"class":203},[144,160053,30799],{"class":154},[144,160055,160056,160058,160060],{"class":146,"line":1225},[144,160057,159320],{"class":154},[144,160059,9508],{"class":150},[144,160061,159325],{"class":154},[144,160063,160064],{"class":146,"line":1231},[144,160065,2430],{"emptyLinePlaceholder":72},[144,160067,160068,160070],{"class":146,"line":1245},[144,160069,30428],{"class":203},[144,160071,159344],{"class":154},[18,160073,160075],{"id":160074},"_49-循环嵌套","4.9 循环嵌套",[14,160077,160078],{},"嵌套循环就是循环里面再写循环。",[135,160080,160082],{"className":30391,"code":160081,"language":30393,"meta":30,"style":30},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[141,160083,160084,160104,160124],{"__ignoreMap":30},[144,160085,160086,160088,160090,160092,160094,160096,160098,160100,160102],{"class":146,"line":147},[144,160087,3055],{"class":150},[144,160089,9469],{"class":154},[144,160091,26056],{"class":150},[144,160093,32456],{"class":203},[144,160095,155],{"class":154},[144,160097,372],{"class":203},[144,160099,12466],{"class":154},[144,160101,448],{"class":203},[144,160103,30799],{"class":154},[144,160105,160106,160108,160110,160112,160114,160116,160118,160120,160122],{"class":146,"line":66},[144,160107,3231],{"class":150},[144,160109,9531],{"class":154},[144,160111,26056],{"class":150},[144,160113,32456],{"class":203},[144,160115,155],{"class":154},[144,160117,372],{"class":203},[144,160119,12466],{"class":154},[144,160121,448],{"class":203},[144,160123,30799],{"class":154},[144,160125,160126,160128,160130,160132,160135,160137,160139,160141,160144,160146,160148,160150,160152],{"class":146,"line":1210},[144,160127,32464],{"class":203},[144,160129,155],{"class":154},[144,160131,207],{"class":150},[144,160133,160134],{"class":259},"\"i=",[144,160136,1051],{"class":203},[144,160138,596],{"class":154},[144,160140,1101],{"class":203},[144,160142,160143],{"class":259},", j=",[144,160145,1051],{"class":203},[144,160147,622],{"class":154},[144,160149,1101],{"class":203},[144,160151,406],{"class":259},[144,160153,161],{"class":154},[14,160155,160156],{},"外层循环执行一次，内层循环执行完整一轮。",[18,160158,160160],{"id":160159},"_410-九九乘法表","4.10 九九乘法表",[135,160162,160164],{"className":30391,"code":160163,"language":30393,"meta":30,"style":30},"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",[141,160165,160166,160186,160209,160261],{"__ignoreMap":30},[144,160167,160168,160170,160172,160174,160176,160178,160180,160182,160184],{"class":146,"line":147},[144,160169,3055],{"class":150},[144,160171,9469],{"class":154},[144,160173,26056],{"class":150},[144,160175,32456],{"class":203},[144,160177,155],{"class":154},[144,160179,372],{"class":203},[144,160181,12466],{"class":154},[144,160183,601],{"class":203},[144,160185,30799],{"class":154},[144,160187,160188,160190,160192,160194,160196,160198,160200,160203,160205,160207],{"class":146,"line":66},[144,160189,3231],{"class":150},[144,160191,9531],{"class":154},[144,160193,26056],{"class":150},[144,160195,32456],{"class":203},[144,160197,155],{"class":154},[144,160199,372],{"class":203},[144,160201,160202],{"class":154},", i ",[144,160204,636],{"class":150},[144,160206,25131],{"class":203},[144,160208,30799],{"class":154},[144,160210,160211,160213,160215,160217,160219,160221,160223,160225,160227,160229,160231,160233,160235,160237,160239,160241,160243,160245,160247,160249,160251,160253,160255,160257,160259],{"class":146,"line":1210},[144,160212,32464],{"class":203},[144,160214,155],{"class":154},[144,160216,207],{"class":150},[144,160218,406],{"class":259},[144,160220,1051],{"class":203},[144,160222,622],{"class":154},[144,160224,1101],{"class":203},[144,160226,610],{"class":259},[144,160228,1051],{"class":203},[144,160230,596],{"class":154},[144,160232,1101],{"class":203},[144,160234,200],{"class":259},[144,160236,1051],{"class":203},[144,160238,100161],{"class":154},[144,160240,610],{"class":150},[144,160242,3440],{"class":154},[144,160244,1101],{"class":203},[144,160246,406],{"class":259},[144,160248,12466],{"class":154},[144,160250,45814],{"class":5247},[144,160252,200],{"class":150},[144,160254,406],{"class":259},[144,160256,1261],{"class":203},[144,160258,406],{"class":259},[144,160260,161],{"class":154},[144,160262,160263,160265],{"class":146,"line":1225},[144,160264,31312],{"class":203},[144,160266,2006],{"class":154},[14,160268,160269],{},"关键点：",[98,160271,160272,160278,160284,160290],{},[101,160273,160274,160275,160277],{},"外层 ",[141,160276,596],{}," 控制行。",[101,160279,160280,160281,160283],{},"内层 ",[141,160282,622],{}," 控制列。",[101,160285,160286,160287,160289],{},"每行结束后用 ",[141,160288,146485],{}," 换行。",[101,160291,160292,160295],{},[141,160293,160294],{},"end=\"\\t\""," 让同一行的内容横向排列。",[18,160297,160299],{"id":160298},"_411-循环else","4.11 循环else",[14,160301,160302,160303,160305,160306,160308,160309,160311],{},"Python 的循环可以带 ",[141,160304,1731],{},"。当循环正常结束时执行 ",[141,160307,1731],{},"，如果被 ",[141,160310,2083],{}," 打断，则不执行。",[135,160313,160315],{"className":30391,"code":160314,"language":30393,"meta":30,"style":30},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[141,160316,160317,160337,160349,160360,160364,160370],{"__ignoreMap":30},[144,160318,160319,160321,160323,160325,160327,160329,160331,160333,160335],{"class":146,"line":147},[144,160320,3055],{"class":150},[144,160322,9469],{"class":154},[144,160324,26056],{"class":150},[144,160326,32456],{"class":203},[144,160328,155],{"class":154},[144,160330,372],{"class":203},[144,160332,12466],{"class":154},[144,160334,499],{"class":203},[144,160336,30799],{"class":154},[144,160338,160339,160341,160343,160345,160347],{"class":146,"line":66},[144,160340,3131],{"class":150},[144,160342,9469],{"class":154},[144,160344,2979],{"class":150},[144,160346,2068],{"class":203},[144,160348,3769],{"class":154},[144,160350,160351,160353,160355,160358],{"class":146,"line":1210},[144,160352,32464],{"class":203},[144,160354,155],{"class":154},[144,160356,160357],{"class":259},"\"找到了\"",[144,160359,161],{"class":154},[144,160361,160362],{"class":146,"line":1225},[144,160363,31640],{"class":150},[144,160365,160366,160368],{"class":146,"line":1231},[144,160367,1731],{"class":150},[144,160369,3769],{"class":154},[144,160371,160372,160374,160376,160379],{"class":146,"line":1245},[144,160373,31312],{"class":203},[144,160375,155],{"class":154},[144,160377,160378],{"class":259},"\"没找到\"",[144,160380,161],{"class":154},[14,160382,160383],{},"常用于搜索。",[135,160385,160387],{"className":30391,"code":160386,"language":30393,"meta":30,"style":30},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[141,160388,160389,160410,160419,160423,160435,160446,160456,160460,160466],{"__ignoreMap":30},[144,160390,160391,160394,160396,160398,160400,160402,160404,160406,160408],{"class":146,"line":147},[144,160392,160393],{"class":154},"names ",[144,160395,200],{"class":150},[144,160397,52239],{"class":154},[144,160399,149901],{"class":259},[144,160401,12466],{"class":154},[144,160403,150949],{"class":259},[144,160405,12466],{"class":154},[144,160407,159744],{"class":259},[144,160409,33259],{"class":154},[144,160411,160412,160414,160416],{"class":146,"line":66},[144,160413,111591],{"class":154},[144,160415,200],{"class":150},[144,160417,160418],{"class":259}," \"小李\"\n",[144,160420,160421],{"class":146,"line":1210},[144,160422,2430],{"emptyLinePlaceholder":72},[144,160424,160425,160427,160430,160432],{"class":146,"line":1225},[144,160426,3055],{"class":150},[144,160428,160429],{"class":154}," name ",[144,160431,26056],{"class":150},[144,160433,160434],{"class":154}," names:\n",[144,160436,160437,160439,160441,160443],{"class":146,"line":1231},[144,160438,3131],{"class":150},[144,160440,160429],{"class":154},[144,160442,2979],{"class":150},[144,160444,160445],{"class":154}," target:\n",[144,160447,160448,160450,160452,160454],{"class":146,"line":1245},[144,160449,32464],{"class":203},[144,160451,155],{"class":154},[144,160453,160357],{"class":259},[144,160455,161],{"class":154},[144,160457,160458],{"class":146,"line":1251},[144,160459,31640],{"class":150},[144,160461,160462,160464],{"class":146,"line":1342},[144,160463,1731],{"class":150},[144,160465,3769],{"class":154},[144,160467,160468,160470,160472,160474],{"class":146,"line":1348},[144,160469,31312],{"class":203},[144,160471,155],{"class":154},[144,160473,160378],{"class":259},[144,160475,161],{"class":154},[18,160477,160479],{"id":160478},"_412-小案例登录重试","4.12 小案例：登录重试",[14,160481,123305],{},[98,160483,160484,160487,160490],{},[101,160485,160486],{},"用户最多输入 3 次密码。",[101,160488,160489],{},"密码正确则登录成功。",[101,160491,160492],{},"3 次都错误则锁定账号。",[14,160494,10066],{},[135,160496,160498],{"className":30391,"code":160497,"language":30393,"meta":30,"style":30},"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",[141,160499,160500,160510,160514,160530,160546,160550,160562,160573,160577,160583,160608,160614],{"__ignoreMap":30},[144,160501,160502,160505,160507],{"class":146,"line":147},[144,160503,160504],{"class":154},"password ",[144,160506,200],{"class":150},[144,160508,160509],{"class":259}," \"123456\"\n",[144,160511,160512],{"class":146,"line":66},[144,160513,2430],{"emptyLinePlaceholder":72},[144,160515,160516,160518,160520,160522,160524,160526,160528],{"class":146,"line":1210},[144,160517,3055],{"class":150},[144,160519,9469],{"class":154},[144,160521,26056],{"class":150},[144,160523,32456],{"class":203},[144,160525,155],{"class":154},[144,160527,226],{"class":203},[144,160529,30799],{"class":154},[144,160531,160532,160535,160537,160539,160541,160544],{"class":146,"line":1225},[144,160533,160534],{"class":154},"    user_password ",[144,160536,200],{"class":150},[144,160538,60618],{"class":203},[144,160540,155],{"class":154},[144,160542,160543],{"class":259},"\"请输入密码:\"",[144,160545,161],{"class":154},[144,160547,160548],{"class":146,"line":1231},[144,160549,2430],{"emptyLinePlaceholder":72},[144,160551,160552,160554,160557,160559],{"class":146,"line":1245},[144,160553,3131],{"class":150},[144,160555,160556],{"class":154}," user_password ",[144,160558,2979],{"class":150},[144,160560,160561],{"class":154}," password:\n",[144,160563,160564,160566,160568,160571],{"class":146,"line":1251},[144,160565,32464],{"class":203},[144,160567,155],{"class":154},[144,160569,160570],{"class":259},"\"登录成功\"",[144,160572,161],{"class":154},[144,160574,160575],{"class":146,"line":1342},[144,160576,31640],{"class":150},[144,160578,160579,160581],{"class":146,"line":1348},[144,160580,158035],{"class":150},[144,160582,3769],{"class":154},[144,160584,160585,160587,160589,160591,160594,160597,160599,160601,160603,160606],{"class":146,"line":1360},[144,160586,32464],{"class":203},[144,160588,155],{"class":154},[144,160590,207],{"class":150},[144,160592,160593],{"class":259},"\"密码错误，还剩",[144,160595,160596],{"class":203},"{2",[144,160598,52284],{"class":150},[144,160600,3062],{"class":154},[144,160602,1101],{"class":203},[144,160604,160605],{"class":259},"次机会\"",[144,160607,161],{"class":154},[144,160609,160610,160612],{"class":146,"line":1642},[144,160611,1731],{"class":150},[144,160613,3769],{"class":154},[144,160615,160616,160618,160620,160623],{"class":146,"line":1647},[144,160617,31312],{"class":203},[144,160619,155],{"class":154},[144,160621,160622],{"class":259},"\"账号已锁定\"",[144,160624,161],{"class":154},[18,160626,160628],{"id":160627},"_413-小案例菜单程序","4.13 小案例：菜单程序",[135,160630,160632],{"className":30391,"code":160631,"language":30393,"meta":30,"style":30},"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",[141,160633,160634,160642,160653,160664,160675,160686,160697,160701,160716,160720,160732,160743,160755,160766,160778,160789,160801,160811,160815,160821],{"__ignoreMap":30},[144,160635,160636,160638,160640],{"class":146,"line":147},[144,160637,108676],{"class":150},[144,160639,95305],{"class":203},[144,160641,3769],{"class":154},[144,160643,160644,160646,160648,160651],{"class":146,"line":66},[144,160645,31312],{"class":203},[144,160647,155],{"class":154},[144,160649,160650],{"class":259},"\"====== 菜单 ======\"",[144,160652,161],{"class":154},[144,160654,160655,160657,160659,160662],{"class":146,"line":1210},[144,160656,31312],{"class":203},[144,160658,155],{"class":154},[144,160660,160661],{"class":259},"\"1. 查询余额\"",[144,160663,161],{"class":154},[144,160665,160666,160668,160670,160673],{"class":146,"line":1225},[144,160667,31312],{"class":203},[144,160669,155],{"class":154},[144,160671,160672],{"class":259},"\"2. 存款\"",[144,160674,161],{"class":154},[144,160676,160677,160679,160681,160684],{"class":146,"line":1231},[144,160678,31312],{"class":203},[144,160680,155],{"class":154},[144,160682,160683],{"class":259},"\"3. 取款\"",[144,160685,161],{"class":154},[144,160687,160688,160690,160692,160695],{"class":146,"line":1245},[144,160689,31312],{"class":203},[144,160691,155],{"class":154},[144,160693,160694],{"class":259},"\"0. 退出\"",[144,160696,161],{"class":154},[144,160698,160699],{"class":146,"line":1251},[144,160700,2430],{"emptyLinePlaceholder":72},[144,160702,160703,160706,160708,160710,160712,160714],{"class":146,"line":1342},[144,160704,160705],{"class":154},"    choice ",[144,160707,200],{"class":150},[144,160709,60618],{"class":203},[144,160711,155],{"class":154},[144,160713,153086],{"class":259},[144,160715,161],{"class":154},[144,160717,160718],{"class":146,"line":1348},[144,160719,2430],{"emptyLinePlaceholder":72},[144,160721,160722,160724,160726,160728,160730],{"class":146,"line":1360},[144,160723,3131],{"class":150},[144,160725,153099],{"class":154},[144,160727,2979],{"class":150},[144,160729,153104],{"class":259},[144,160731,3769],{"class":154},[144,160733,160734,160736,160738,160741],{"class":146,"line":1642},[144,160735,32464],{"class":203},[144,160737,155],{"class":154},[144,160739,160740],{"class":259},"\"余额为1000元\"",[144,160742,161],{"class":154},[144,160744,160745,160747,160749,160751,160753],{"class":146,"line":1647},[144,160746,39306],{"class":150},[144,160748,153099],{"class":154},[144,160750,2979],{"class":150},[144,160752,153123],{"class":259},[144,160754,3769],{"class":154},[144,160756,160757,160759,160761,160764],{"class":146,"line":1653},[144,160758,32464],{"class":203},[144,160760,155],{"class":154},[144,160762,160763],{"class":259},"\"存款功能\"",[144,160765,161],{"class":154},[144,160767,160768,160770,160772,160774,160776],{"class":146,"line":1658},[144,160769,39306],{"class":150},[144,160771,153099],{"class":154},[144,160773,2979],{"class":150},[144,160775,153141],{"class":259},[144,160777,3769],{"class":154},[144,160779,160780,160782,160784,160787],{"class":146,"line":1672},[144,160781,32464],{"class":203},[144,160783,155],{"class":154},[144,160785,160786],{"class":259},"\"取款功能\"",[144,160788,161],{"class":154},[144,160790,160791,160793,160795,160797,160799],{"class":146,"line":1677},[144,160792,39306],{"class":150},[144,160794,153099],{"class":154},[144,160796,2979],{"class":150},[144,160798,153195],{"class":259},[144,160800,3769],{"class":154},[144,160802,160803,160805,160807,160809],{"class":146,"line":1683},[144,160804,32464],{"class":203},[144,160806,155],{"class":154},[144,160808,153206],{"class":259},[144,160810,161],{"class":154},[144,160812,160813],{"class":146,"line":1704},[144,160814,31640],{"class":150},[144,160816,160817,160819],{"class":146,"line":1709},[144,160818,158035],{"class":150},[144,160820,3769],{"class":154},[144,160822,160823,160825,160827,160829],{"class":146,"line":1723},[144,160824,32464],{"class":203},[144,160826,155],{"class":154},[144,160828,153227],{"class":259},[144,160830,161],{"class":154},[14,160832,160833,160834,160836,160837,28398],{},"菜单类程序通常使用 ",[141,160835,159535],{},"，用户选择退出时 ",[141,160838,2083],{},[18,160840,160842],{"id":160841},"_414-易错点","4.14 易错点",[98,160844,160845,160850,160856,160864,160870],{},[101,160846,160847,160849],{},[141,160848,108676],{}," 循环必须更新控制变量。",[101,160851,160852,160855],{},[141,160853,160854],{},"range(1, 10)"," 不包含 10。",[101,160857,160858,160860,160861,160863],{},[141,160859,2083],{}," 结束整个循环，",[141,160862,154685],{}," 只跳过本轮。",[101,160865,160866,160867,160869],{},"嵌套循环中，",[141,160868,2083],{}," 只跳出当前所在的一层循环。",[101,160871,160872],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[18,160874,160876],{"id":160875},"_415-本章练习","4.15 本章练习",[98,160878,160879,160882,160885,160888,160891],{},[101,160880,160881],{},"输出 1 到 100。",[101,160883,160884],{},"计算 1 到 100 的偶数和。",[101,160886,160887],{},"输出 100 以内能被 3 和 5 同时整除的数。",[101,160889,160890],{},"编写猜数字游戏，限制最多猜 7 次。",[101,160892,160893],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5157,160895,160896],{},"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":30,"searchDepth":66,"depth":66,"links":160898},[160899,160900,160901,160902,160903,160907,160908,160909,160910,160911,160912,160913,160914,160915,160916],{"id":159155,"depth":66,"text":159156},{"id":159185,"depth":66,"text":159186},{"id":159274,"depth":66,"text":159275},{"id":159368,"depth":66,"text":159369},{"id":159542,"depth":66,"text":159543,"children":160904},[160905,160906],{"id":159546,"depth":1210,"text":159547},{"id":159610,"depth":1210,"text":159611},{"id":159674,"depth":66,"text":159675},{"id":159769,"depth":66,"text":159770},{"id":159878,"depth":66,"text":159879},{"id":160074,"depth":66,"text":160075},{"id":160159,"depth":66,"text":160160},{"id":160298,"depth":66,"text":160299},{"id":160478,"depth":66,"text":160479},{"id":160627,"depth":66,"text":160628},{"id":160841,"depth":66,"text":160842},{"id":160875,"depth":66,"text":160876},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159147,"description":23408},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160923,"title":160924,"body":160925,"description":23408,"extension":70,"meta":162930,"navigation":72,"path":162931,"seo":162932,"stem":162933,"__hash__":162934},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160926,"toc":162910},[160927,160930,160934,160937,160940,160954,160957,160971,160975,160977,160996,160998,161045,161047,161061,161065,161139,161142,161146,161149,161208,161216,161219,161272,161275,161279,161284,161339,161347,161397,161401,161406,161414,161513,161519,161523,161528,161531,161542,161583,161596,161600,161603,161639,161642,161655,161658,161718,161722,161726,161729,161780,161784,161787,161834,161840,161906,161909,161913,161916,162032,162035,162039,162042,162148,162152,162155,162193,162196,162238,162241,162301,162304,162308,162772,162775,162779,162806,162812,162873,162877,162907],[10,160928,160924],{"id":160929},"_5-函数基础",[18,160931,160933],{"id":160932},"_51-为什么需要函数","5.1 为什么需要函数",[14,160935,160936],{},"函数用于封装一段可以重复使用的代码。",[14,160938,160939],{},"不使用函数的问题：",[98,160941,160942,160945,160948,160951],{},[101,160943,160944],{},"重复代码多。",[101,160946,160947],{},"修改逻辑时容易漏改。",[101,160949,160950],{},"主流程不清晰。",[101,160952,160953],{},"程序越写越长，难以维护。",[14,160955,160956],{},"使用函数后的好处：",[98,160958,160959,160962,160965,160968],{},[101,160960,160961],{},"提高复用性。",[101,160963,160964],{},"提高可读性。",[101,160966,160967],{},"便于调试。",[101,160969,160970],{},"便于分工。",[18,160972,160974],{"id":160973},"_52-函数定义","5.2 函数定义",[14,160976,5212],{},[135,160978,160980],{"className":30391,"code":160979,"language":30393,"meta":30,"style":30},"def 函数名():\n    函数体\n",[141,160981,160982,160991],{"__ignoreMap":30},[144,160983,160984,160986,160989],{"class":146,"line":147},[144,160985,31960],{"class":150},[144,160987,160988],{"class":1993}," 函数名",[144,160990,31966],{"class":154},[144,160992,160993],{"class":146,"line":66},[144,160994,160995],{"class":154},"    函数体\n",[14,160997,15166],{},[135,160999,161001],{"className":30391,"code":161000,"language":30393,"meta":30,"style":30},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[141,161002,161003,161012,161022,161032,161036,161040],{"__ignoreMap":30},[144,161004,161005,161007,161010],{"class":146,"line":147},[144,161006,31960],{"class":150},[144,161008,161009],{"class":1993}," say_hello",[144,161011,31966],{"class":154},[144,161013,161014,161016,161018,161020],{"class":146,"line":66},[144,161015,31312],{"class":203},[144,161017,155],{"class":154},[144,161019,5875],{"class":259},[144,161021,161],{"class":154},[144,161023,161024,161026,161028,161030],{"class":146,"line":1210},[144,161025,31312],{"class":203},[144,161027,155],{"class":154},[144,161029,146652],{"class":259},[144,161031,161],{"class":154},[144,161033,161034],{"class":146,"line":1225},[144,161035,2430],{"emptyLinePlaceholder":72},[144,161037,161038],{"class":146,"line":1231},[144,161039,2430],{"emptyLinePlaceholder":72},[144,161041,161042],{"class":146,"line":1245},[144,161043,161044],{"class":154},"say_hello()\n",[14,161046,9056],{},[98,161048,161049,161052,161055,161058],{},[101,161050,161051],{},"函数必须先定义，再调用。",[101,161053,161054],{},"函数名遵循变量命名规则。",[101,161056,161057],{},"函数体需要缩进。",[101,161059,161060],{},"函数不调用就不会执行。",[18,161062,161064],{"id":161063},"_53-函数调用","5.3 函数调用",[135,161066,161068],{"className":30391,"code":161067,"language":30393,"meta":30,"style":30},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[141,161069,161070,161079,161090,161101,161112,161122,161126,161130,161135],{"__ignoreMap":30},[144,161071,161072,161074,161077],{"class":146,"line":147},[144,161073,31960],{"class":150},[144,161075,161076],{"class":1993}," print_menu",[144,161078,31966],{"class":154},[144,161080,161081,161083,161085,161088],{"class":146,"line":66},[144,161082,31312],{"class":203},[144,161084,155],{"class":154},[144,161086,161087],{"class":259},"\"1. 查询\"",[144,161089,161],{"class":154},[144,161091,161092,161094,161096,161099],{"class":146,"line":1210},[144,161093,31312],{"class":203},[144,161095,155],{"class":154},[144,161097,161098],{"class":259},"\"2. 添加\"",[144,161100,161],{"class":154},[144,161102,161103,161105,161107,161110],{"class":146,"line":1225},[144,161104,31312],{"class":203},[144,161106,155],{"class":154},[144,161108,161109],{"class":259},"\"3. 删除\"",[144,161111,161],{"class":154},[144,161113,161114,161116,161118,161120],{"class":146,"line":1231},[144,161115,31312],{"class":203},[144,161117,155],{"class":154},[144,161119,160694],{"class":259},[144,161121,161],{"class":154},[144,161123,161124],{"class":146,"line":1245},[144,161125,2430],{"emptyLinePlaceholder":72},[144,161127,161128],{"class":146,"line":1251},[144,161129,2430],{"emptyLinePlaceholder":72},[144,161131,161132],{"class":146,"line":1342},[144,161133,161134],{"class":154},"print_menu()\n",[144,161136,161137],{"class":146,"line":1348},[144,161138,161134],{"class":154},[14,161140,161141],{},"函数可以多次调用，每次调用都会执行函数体。",[18,161143,161145],{"id":161144},"_54-参数","5.4 参数",[14,161147,161148],{},"参数用于向函数传递数据。",[135,161150,161152],{"className":30391,"code":161151,"language":30393,"meta":30,"style":30},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[141,161153,161154,161163,161183,161187,161191,161200],{"__ignoreMap":30},[144,161155,161156,161158,161160],{"class":146,"line":147},[144,161157,31960],{"class":150},[144,161159,161009],{"class":1993},[144,161161,161162],{"class":154},"(name):\n",[144,161164,161165,161167,161169,161171,161173,161175,161177,161179,161181],{"class":146,"line":66},[144,161166,31312],{"class":203},[144,161168,155],{"class":154},[144,161170,207],{"class":150},[144,161172,157067],{"class":259},[144,161174,1051],{"class":203},[144,161176,79823],{"class":154},[144,161178,1101],{"class":203},[144,161180,406],{"class":259},[144,161182,161],{"class":154},[144,161184,161185],{"class":146,"line":1210},[144,161186,2430],{"emptyLinePlaceholder":72},[144,161188,161189],{"class":146,"line":1225},[144,161190,2430],{"emptyLinePlaceholder":72},[144,161192,161193,161196,161198],{"class":146,"line":1231},[144,161194,161195],{"class":154},"say_hello(",[144,161197,149901],{"class":259},[144,161199,161],{"class":154},[144,161201,161202,161204,161206],{"class":146,"line":1245},[144,161203,161195],{"class":154},[144,161205,150949],{"class":259},[144,161207,161],{"class":154},[14,161209,161210,161212,161213,161215],{},[141,161211,79823],{}," 是形参，",[141,161214,149901],{}," 是实参。",[14,161217,161218],{},"多个参数：",[135,161220,161222],{"className":30391,"code":161221,"language":30393,"meta":30,"style":30},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[141,161223,161224,161232,161245,161251,161255,161259],{"__ignoreMap":30},[144,161225,161226,161228,161230],{"class":146,"line":147},[144,161227,31960],{"class":150},[144,161229,5240],{"class":1993},[144,161231,151106],{"class":154},[144,161233,161234,161237,161239,161241,161243],{"class":146,"line":66},[144,161235,161236],{"class":154},"    result ",[144,161238,200],{"class":150},[144,161240,10900],{"class":154},[144,161242,636],{"class":150},[144,161244,151117],{"class":154},[144,161246,161247,161249],{"class":146,"line":1210},[144,161248,31312],{"class":203},[144,161250,76598],{"class":154},[144,161252,161253],{"class":146,"line":1225},[144,161254,2430],{"emptyLinePlaceholder":72},[144,161256,161257],{"class":146,"line":1231},[144,161258,2430],{"emptyLinePlaceholder":72},[144,161260,161261,161264,161266,161268,161270],{"class":146,"line":1245},[144,161262,161263],{"class":154},"add(",[144,161265,601],{"class":203},[144,161267,12466],{"class":154},[144,161269,855],{"class":203},[144,161271,161],{"class":154},[14,161273,161274],{},"调用时参数数量必须匹配。",[18,161276,161278],{"id":161277},"_55-返回值","5.5 返回值",[14,161280,161281,161283],{},[141,161282,17077],{}," 用于把函数内部的结果返回给调用者。",[135,161285,161287],{"className":30391,"code":161286,"language":30393,"meta":30,"style":30},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[141,161288,161289,161297,161307,161311,161315,161333],{"__ignoreMap":30},[144,161290,161291,161293,161295],{"class":146,"line":147},[144,161292,31960],{"class":150},[144,161294,5240],{"class":1993},[144,161296,151106],{"class":154},[144,161298,161299,161301,161303,161305],{"class":146,"line":66},[144,161300,4120],{"class":150},[144,161302,10900],{"class":154},[144,161304,636],{"class":150},[144,161306,151117],{"class":154},[144,161308,161309],{"class":146,"line":1210},[144,161310,2430],{"emptyLinePlaceholder":72},[144,161312,161313],{"class":146,"line":1225},[144,161314,2430],{"emptyLinePlaceholder":72},[144,161316,161317,161320,161322,161325,161327,161329,161331],{"class":146,"line":1231},[144,161318,161319],{"class":154},"result ",[144,161321,200],{"class":150},[144,161323,161324],{"class":154}," add(",[144,161326,601],{"class":203},[144,161328,12466],{"class":154},[144,161330,855],{"class":203},[144,161332,161],{"class":154},[144,161334,161335,161337],{"class":146,"line":1245},[144,161336,30428],{"class":203},[144,161338,76598],{"class":154},[14,161340,161341,161342,161344,161345,28398],{},"如果函数没有写 ",[141,161343,17077],{},"，默认返回 ",[141,161346,95699],{},[135,161348,161350],{"className":30391,"code":161349,"language":30393,"meta":30,"style":30},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[141,161351,161352,161360,161370,161374,161378,161387],{"__ignoreMap":30},[144,161353,161354,161356,161358],{"class":146,"line":147},[144,161355,31960],{"class":150},[144,161357,161009],{"class":1993},[144,161359,31966],{"class":154},[144,161361,161362,161364,161366,161368],{"class":146,"line":66},[144,161363,31312],{"class":203},[144,161365,155],{"class":154},[144,161367,5875],{"class":259},[144,161369,161],{"class":154},[144,161371,161372],{"class":146,"line":1210},[144,161373,2430],{"emptyLinePlaceholder":72},[144,161375,161376],{"class":146,"line":1225},[144,161377,2430],{"emptyLinePlaceholder":72},[144,161379,161380,161382,161384],{"class":146,"line":1231},[144,161381,161319],{"class":154},[144,161383,200],{"class":150},[144,161385,161386],{"class":154}," say_hello()\n",[144,161388,161389,161391,161394],{"class":146,"line":1245},[144,161390,30428],{"class":203},[144,161392,161393],{"class":154},"(result)  ",[144,161395,161396],{"class":213},"# None\n",[18,161398,161400],{"id":161399},"_56-return的作用","5.6 return的作用",[14,161402,161403,161405],{},[141,161404,17077],{}," 有两个作用：",[98,161407,161408,161411],{},[101,161409,161410],{},"返回结果。",[101,161412,161413],{},"结束函数。",[135,161415,161417],{"className":30391,"code":161416,"language":30393,"meta":30,"style":30},"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",[141,161418,161419,161429,161441,161448,161452,161464,161471,161475,161482,161486,161490,161501],{"__ignoreMap":30},[144,161420,161421,161423,161426],{"class":146,"line":147},[144,161422,31960],{"class":150},[144,161424,161425],{"class":1993}," check_age",[144,161427,161428],{"class":154},"(age):\n",[144,161430,161431,161433,161435,161437,161439],{"class":146,"line":66},[144,161432,3131],{"class":150},[144,161434,15738],{"class":154},[144,161436,1065],{"class":150},[144,161438,4123],{"class":203},[144,161440,3769],{"class":154},[144,161442,161443,161445],{"class":146,"line":1210},[144,161444,14783],{"class":150},[144,161446,161447],{"class":259}," \"年龄不合法\"\n",[144,161449,161450],{"class":146,"line":1225},[144,161451,2430],{"emptyLinePlaceholder":72},[144,161453,161454,161456,161458,161460,161462],{"class":146,"line":1231},[144,161455,3131],{"class":150},[144,161457,15738],{"class":154},[144,161459,1740],{"class":150},[144,161461,156298],{"class":203},[144,161463,3769],{"class":154},[144,161465,161466,161468],{"class":146,"line":1245},[144,161467,14783],{"class":150},[144,161469,161470],{"class":259}," \"成年人\"\n",[144,161472,161473],{"class":146,"line":1251},[144,161474,2430],{"emptyLinePlaceholder":72},[144,161476,161477,161479],{"class":146,"line":1342},[144,161478,4120],{"class":150},[144,161480,161481],{"class":259}," \"未成年人\"\n",[144,161483,161484],{"class":146,"line":1348},[144,161485,2430],{"emptyLinePlaceholder":72},[144,161487,161488],{"class":146,"line":1360},[144,161489,2430],{"emptyLinePlaceholder":72},[144,161491,161492,161494,161497,161499],{"class":146,"line":1642},[144,161493,30428],{"class":203},[144,161495,161496],{"class":154},"(check_age(",[144,161498,855],{"class":203},[144,161500,30510],{"class":154},[144,161502,161503,161505,161507,161509,161511],{"class":146,"line":1647},[144,161504,30428],{"class":203},[144,161506,161496],{"class":154},[144,161508,687],{"class":150},[144,161510,372],{"class":203},[144,161512,30510],{"class":154},[14,161514,161515,161516,161518],{},"函数执行到 ",[141,161517,17077],{}," 后，后面的代码不会继续执行。",[18,161520,161522],{"id":161521},"_57-none","5.7 None",[14,161524,161525,161527],{},[141,161526,95699],{}," 表示空值或没有结果。",[14,161529,161530],{},"常见使用场景：",[98,161532,161533,161536,161539],{},[101,161534,161535],{},"函数没有返回值。",[101,161537,161538],{},"变量暂时没有具体值。",[101,161540,161541],{},"表示查询不到结果。",[135,161543,161545],{"className":30391,"code":161544,"language":30393,"meta":30,"style":30},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[141,161546,161547,161555,161559,161572],{"__ignoreMap":30},[144,161548,161549,161551,161553],{"class":146,"line":147},[144,161550,161319],{"class":154},[144,161552,200],{"class":150},[144,161554,152185],{"class":203},[144,161556,161557],{"class":146,"line":66},[144,161558,2430],{"emptyLinePlaceholder":72},[144,161560,161561,161563,161566,161568,161570],{"class":146,"line":1210},[144,161562,1561],{"class":150},[144,161564,161565],{"class":154}," result ",[144,161567,38940],{"class":150},[144,161569,38946],{"class":203},[144,161571,3769],{"class":154},[144,161573,161574,161576,161578,161581],{"class":146,"line":1225},[144,161575,31312],{"class":203},[144,161577,155],{"class":154},[144,161579,161580],{"class":259},"\"没有数据\"",[144,161582,161],{"class":154},[14,161584,161585,161586,161588,161589,161592,161593,28398],{},"判断 ",[141,161587,95699],{}," 推荐使用 ",[141,161590,161591],{},"is None","，不要写成 ",[141,161594,161595],{},"== None",[18,161597,161599],{"id":161598},"_58-函数文档字符串","5.8 函数文档字符串",[14,161601,161602],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[135,161604,161606],{"className":30391,"code":161605,"language":30393,"meta":30,"style":30},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[141,161607,161608,161618,161623],{"__ignoreMap":30},[144,161609,161610,161612,161615],{"class":146,"line":147},[144,161611,31960],{"class":150},[144,161613,161614],{"class":1993}," calculate_bmi",[144,161616,161617],{"class":154},"(weight, height):\n",[144,161619,161620],{"class":146,"line":66},[144,161621,161622],{"class":259},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[144,161624,161625,161627,161630,161632,161635,161637],{"class":146,"line":1210},[144,161626,4120],{"class":150},[144,161628,161629],{"class":154}," weight ",[144,161631,739],{"class":150},[144,161633,161634],{"class":154}," height ",[144,161636,10692],{"class":150},[144,161638,47736],{"class":203},[14,161640,161641],{},"查看说明：",[135,161643,161645],{"className":30391,"code":161644,"language":30393,"meta":30,"style":30},"help(calculate_bmi)\n",[141,161646,161647],{"__ignoreMap":30},[144,161648,161649,161652],{"class":146,"line":147},[144,161650,161651],{"class":203},"help",[144,161653,161654],{"class":154},"(calculate_bmi)\n",[14,161656,161657],{},"较完整的写法：",[135,161659,161661],{"className":30391,"code":161660,"language":30393,"meta":30,"style":30},"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",[141,161662,161663,161671,161676,161681,161685,161690,161695,161700,161704],{"__ignoreMap":30},[144,161664,161665,161667,161669],{"class":146,"line":147},[144,161666,31960],{"class":150},[144,161668,161614],{"class":1993},[144,161670,161617],{"class":154},[144,161672,161673],{"class":146,"line":66},[144,161674,161675],{"class":259},"    \"\"\"\n",[144,161677,161678],{"class":146,"line":1210},[144,161679,161680],{"class":259},"    计算BMI。\n",[144,161682,161683],{"class":146,"line":1225},[144,161684,2430],{"emptyLinePlaceholder":72},[144,161686,161687],{"class":146,"line":1231},[144,161688,161689],{"class":259},"    :param weight: 体重，单位kg\n",[144,161691,161692],{"class":146,"line":1245},[144,161693,161694],{"class":259},"    :param height: 身高，单位m\n",[144,161696,161697],{"class":146,"line":1251},[144,161698,161699],{"class":259},"    :return: BMI数值\n",[144,161701,161702],{"class":146,"line":1342},[144,161703,161675],{"class":259},[144,161705,161706,161708,161710,161712,161714,161716],{"class":146,"line":1348},[144,161707,4120],{"class":150},[144,161709,161629],{"class":154},[144,161711,739],{"class":150},[144,161713,161634],{"class":154},[144,161715,10692],{"class":150},[144,161717,47736],{"class":203},[18,161719,161721],{"id":161720},"_59-变量作用域","5.9 变量作用域",[115,161723,161725],{"id":161724},"_591-局部变量","5.9.1 局部变量",[14,161727,161728],{},"在函数内部定义的变量，只能在函数内部使用。",[135,161730,161732],{"className":30391,"code":161731,"language":30393,"meta":30,"style":30},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[141,161733,161734,161743,161751,161757,161761,161765,161770],{"__ignoreMap":30},[144,161735,161736,161738,161741],{"class":146,"line":147},[144,161737,31960],{"class":150},[144,161739,161740],{"class":1993}," test",[144,161742,31966],{"class":154},[144,161744,161745,161747,161749],{"class":146,"line":66},[144,161746,45606],{"class":154},[144,161748,200],{"class":150},[144,161750,58441],{"class":203},[144,161752,161753,161755],{"class":146,"line":1210},[144,161754,31312],{"class":203},[144,161756,168],{"class":154},[144,161758,161759],{"class":146,"line":1225},[144,161760,2430],{"emptyLinePlaceholder":72},[144,161762,161763],{"class":146,"line":1231},[144,161764,2430],{"emptyLinePlaceholder":72},[144,161766,161767],{"class":146,"line":1245},[144,161768,161769],{"class":154},"test()\n",[144,161771,161772,161774,161777],{"class":146,"line":1251},[144,161773,30428],{"class":203},[144,161775,161776],{"class":154},"(num)  ",[144,161778,161779],{"class":213},"# 报错\n",[115,161781,161783],{"id":161782},"_592-全局变量","5.9.2 全局变量",[14,161785,161786],{},"在函数外部定义的变量，可以在函数内部读取。",[135,161788,161790],{"className":30391,"code":161789,"language":30393,"meta":30,"style":30},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[141,161791,161792,161800,161804,161808,161816,161822,161826,161830],{"__ignoreMap":30},[144,161793,161794,161796,161798],{"class":146,"line":147},[144,161795,146549],{"class":154},[144,161797,200],{"class":150},[144,161799,149366],{"class":259},[144,161801,161802],{"class":146,"line":66},[144,161803,2430],{"emptyLinePlaceholder":72},[144,161805,161806],{"class":146,"line":1210},[144,161807,2430],{"emptyLinePlaceholder":72},[144,161809,161810,161812,161814],{"class":146,"line":1225},[144,161811,31960],{"class":150},[144,161813,161009],{"class":1993},[144,161815,31966],{"class":154},[144,161817,161818,161820],{"class":146,"line":1231},[144,161819,31312],{"class":203},[144,161821,150673],{"class":154},[144,161823,161824],{"class":146,"line":1245},[144,161825,2430],{"emptyLinePlaceholder":72},[144,161827,161828],{"class":146,"line":1251},[144,161829,2430],{"emptyLinePlaceholder":72},[144,161831,161832],{"class":146,"line":1342},[144,161833,161044],{"class":154},[14,161835,161836,161837,28398],{},"如果要在函数内部修改全局变量，需要 ",[141,161838,161839],{},"global",[135,161841,161843],{"className":30391,"code":161842,"language":30393,"meta":30,"style":30},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[141,161844,161845,161853,161857,161861,161870,161878,161886,161890,161894,161899],{"__ignoreMap":30},[144,161846,161847,161849,161851],{"class":146,"line":147},[144,161848,146704],{"class":154},[144,161850,200],{"class":150},[144,161852,47346],{"class":203},[144,161854,161855],{"class":146,"line":66},[144,161856,2430],{"emptyLinePlaceholder":72},[144,161858,161859],{"class":146,"line":1210},[144,161860,2430],{"emptyLinePlaceholder":72},[144,161862,161863,161865,161868],{"class":146,"line":1225},[144,161864,31960],{"class":150},[144,161866,161867],{"class":1993}," add_count",[144,161869,31966],{"class":154},[144,161871,161872,161875],{"class":146,"line":1231},[144,161873,161874],{"class":150},"    global",[144,161876,161877],{"class":154}," count\n",[144,161879,161880,161882,161884],{"class":146,"line":1245},[144,161881,159446],{"class":154},[144,161883,9508],{"class":150},[144,161885,55712],{"class":203},[144,161887,161888],{"class":146,"line":1251},[144,161889,2430],{"emptyLinePlaceholder":72},[144,161891,161892],{"class":146,"line":1342},[144,161893,2430],{"emptyLinePlaceholder":72},[144,161895,161896],{"class":146,"line":1348},[144,161897,161898],{"class":154},"add_count()\n",[144,161900,161901,161903],{"class":146,"line":1360},[144,161902,30428],{"class":203},[144,161904,161905],{"class":154},"(count)\n",[14,161907,161908],{},"不建议大量使用全局变量，项目变大后很难维护。",[18,161910,161912],{"id":161911},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,161914,161915],{},"一个函数中可以调用另一个函数。",[135,161917,161919],{"className":30391,"code":161918,"language":30393,"meta":30,"style":30},"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",[141,161920,161921,161930,161944,161948,161952,161961,161966,161986,162007,162011,162015,162019],{"__ignoreMap":30},[144,161922,161923,161925,161928],{"class":146,"line":147},[144,161924,31960],{"class":150},[144,161926,161927],{"class":1993}," print_line",[144,161929,31966],{"class":154},[144,161931,161932,161934,161936,161938,161940,161942],{"class":146,"line":66},[144,161933,31312],{"class":203},[144,161935,155],{"class":154},[144,161937,32496],{"class":259},[144,161939,6549],{"class":150},[144,161941,78678],{"class":203},[144,161943,161],{"class":154},[144,161945,161946],{"class":146,"line":1210},[144,161947,2430],{"emptyLinePlaceholder":72},[144,161949,161950],{"class":146,"line":1225},[144,161951,2430],{"emptyLinePlaceholder":72},[144,161953,161954,161956,161959],{"class":146,"line":1231},[144,161955,31960],{"class":150},[144,161957,161958],{"class":1993}," print_info",[144,161960,149388],{"class":154},[144,161962,161963],{"class":146,"line":1245},[144,161964,161965],{"class":154},"    print_line()\n",[144,161967,161968,161970,161972,161974,161976,161978,161980,161982,161984],{"class":146,"line":1251},[144,161969,31312],{"class":203},[144,161971,155],{"class":154},[144,161973,207],{"class":150},[144,161975,156695],{"class":259},[144,161977,1051],{"class":203},[144,161979,79823],{"class":154},[144,161981,1101],{"class":203},[144,161983,406],{"class":259},[144,161985,161],{"class":154},[144,161987,161988,161990,161992,161994,161997,161999,162001,162003,162005],{"class":146,"line":1342},[144,161989,31312],{"class":203},[144,161991,155],{"class":154},[144,161993,207],{"class":150},[144,161995,161996],{"class":259},"\"年龄:",[144,161998,1051],{"class":203},[144,162000,70234],{"class":154},[144,162002,1101],{"class":203},[144,162004,406],{"class":259},[144,162006,161],{"class":154},[144,162008,162009],{"class":146,"line":1348},[144,162010,161965],{"class":154},[144,162012,162013],{"class":146,"line":1360},[144,162014,2430],{"emptyLinePlaceholder":72},[144,162016,162017],{"class":146,"line":1642},[144,162018,2430],{"emptyLinePlaceholder":72},[144,162020,162021,162024,162026,162028,162030],{"class":146,"line":1647},[144,162022,162023],{"class":154},"print_info(",[144,162025,149901],{"class":259},[144,162027,12466],{"class":154},[144,162029,805],{"class":203},[144,162031,161],{"class":154},[14,162033,162034],{},"这种方式可以把小功能组合成大功能。",[18,162036,162038],{"id":162037},"_511-参数检查","5.11 参数检查",[14,162040,162041],{},"函数内部可以检查参数是否合法。",[135,162043,162045],{"className":30391,"code":162044,"language":30393,"meta":30,"style":30},"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",[141,162046,162047,162056,162068,162074,162084,162088,162092,162109,162113,162125,162136,162142],{"__ignoreMap":30},[144,162048,162049,162051,162054],{"class":146,"line":147},[144,162050,31960],{"class":150},[144,162052,162053],{"class":1993}," divide",[144,162055,151106],{"class":154},[144,162057,162058,162060,162062,162064,162066],{"class":146,"line":66},[144,162059,3131],{"class":150},[144,162061,10913],{"class":154},[144,162063,2979],{"class":150},[144,162065,4123],{"class":203},[144,162067,3769],{"class":154},[144,162069,162070,162072],{"class":146,"line":1210},[144,162071,14783],{"class":150},[144,162073,152185],{"class":203},[144,162075,162076,162078,162080,162082],{"class":146,"line":1225},[144,162077,4120],{"class":150},[144,162079,10900],{"class":154},[144,162081,739],{"class":150},[144,162083,151117],{"class":154},[144,162085,162086],{"class":146,"line":1231},[144,162087,2430],{"emptyLinePlaceholder":72},[144,162089,162090],{"class":146,"line":1245},[144,162091,2430],{"emptyLinePlaceholder":72},[144,162093,162094,162096,162098,162101,162103,162105,162107],{"class":146,"line":1251},[144,162095,161319],{"class":154},[144,162097,200],{"class":150},[144,162099,162100],{"class":154}," divide(",[144,162102,601],{"class":203},[144,162104,12466],{"class":154},[144,162106,346],{"class":203},[144,162108,161],{"class":154},[144,162110,162111],{"class":146,"line":1342},[144,162112,2430],{"emptyLinePlaceholder":72},[144,162114,162115,162117,162119,162121,162123],{"class":146,"line":1348},[144,162116,1561],{"class":150},[144,162118,161565],{"class":154},[144,162120,38940],{"class":150},[144,162122,38946],{"class":203},[144,162124,3769],{"class":154},[144,162126,162127,162129,162131,162134],{"class":146,"line":1360},[144,162128,31312],{"class":203},[144,162130,155],{"class":154},[144,162132,162133],{"class":259},"\"除数不能为0\"",[144,162135,161],{"class":154},[144,162137,162138,162140],{"class":146,"line":1642},[144,162139,1731],{"class":150},[144,162141,3769],{"class":154},[144,162143,162144,162146],{"class":146,"line":1647},[144,162145,31312],{"class":203},[144,162147,76598],{"class":154},[18,162149,162151],{"id":162150},"_512-类型提示","5.12 类型提示",[14,162153,162154],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[135,162156,162158],{"className":30391,"code":162157,"language":30393,"meta":30,"style":30},"def add(a: int, b: int) -> int:\n    return a + b\n",[141,162159,162160,162183],{"__ignoreMap":30},[144,162161,162162,162164,162166,162169,162171,162174,162176,162179,162181],{"class":146,"line":147},[144,162163,31960],{"class":150},[144,162165,5240],{"class":1993},[144,162167,162168],{"class":154},"(a: ",[144,162170,158],{"class":203},[144,162172,162173],{"class":154},", b: ",[144,162175,158],{"class":203},[144,162177,162178],{"class":154},") -> ",[144,162180,158],{"class":203},[144,162182,3769],{"class":154},[144,162184,162185,162187,162189,162191],{"class":146,"line":66},[144,162186,4120],{"class":150},[144,162188,10900],{"class":154},[144,162190,636],{"class":150},[144,162192,151117],{"class":154},[14,162194,162195],{},"字符串参数：",[135,162197,162199],{"className":30391,"code":162198,"language":30393,"meta":30,"style":30},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[141,162200,162201,162218],{"__ignoreMap":30},[144,162202,162203,162205,162207,162210,162212,162214,162216],{"class":146,"line":147},[144,162204,31960],{"class":150},[144,162206,161009],{"class":1993},[144,162208,162209],{"class":154},"(name: ",[144,162211,1330],{"class":203},[144,162213,162178],{"class":154},[144,162215,95699],{"class":203},[144,162217,3769],{"class":154},[144,162219,162220,162222,162224,162226,162228,162230,162232,162234,162236],{"class":146,"line":66},[144,162221,31312],{"class":203},[144,162223,155],{"class":154},[144,162225,207],{"class":150},[144,162227,157067],{"class":259},[144,162229,1051],{"class":203},[144,162231,79823],{"class":154},[144,162233,1101],{"class":203},[144,162235,406],{"class":259},[144,162237,161],{"class":154},[14,162239,162240],{},"列表参数：",[135,162242,162244],{"className":30391,"code":162243,"language":30393,"meta":30,"style":30},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[141,162245,162246,162265,162273,162285,162294],{"__ignoreMap":30},[144,162247,162248,162250,162253,162256,162258,162261,162263],{"class":146,"line":147},[144,162249,31960],{"class":150},[144,162251,162252],{"class":1993}," get_total",[144,162254,162255],{"class":154},"(numbers: list[",[144,162257,158],{"class":203},[144,162259,162260],{"class":154},"]) -> ",[144,162262,158],{"class":203},[144,162264,3769],{"class":154},[144,162266,162267,162269,162271],{"class":146,"line":66},[144,162268,159320],{"class":154},[144,162270,200],{"class":150},[144,162272,47346],{"class":203},[144,162274,162275,162277,162280,162282],{"class":146,"line":1210},[144,162276,3231],{"class":150},[144,162278,162279],{"class":154}," number ",[144,162281,26056],{"class":150},[144,162283,162284],{"class":154}," numbers:\n",[144,162286,162287,162289,162291],{"class":146,"line":1225},[144,162288,159995],{"class":154},[144,162290,9508],{"class":150},[144,162292,162293],{"class":154}," number\n",[144,162295,162296,162298],{"class":146,"line":1231},[144,162297,4120],{"class":150},[144,162299,162300],{"class":154}," total\n",[14,162302,162303],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[18,162305,162307],{"id":162306},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[135,162309,162311],{"className":30391,"code":162310,"language":30393,"meta":30,"style":30},"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",[141,162312,162313,162323,162327,162331,162339,162350,162360,162370,162380,162390,162394,162398,162407,162429,162433,162437,162446,162452,162472,162484,162495,162499,162508,162519,162524,162528,162532,162541,162547,162566,162578,162588,162592,162603,162613,162617,162625,162636,162640,162644,162648,162656,162661,162675,162679,162691,162696,162708,162713,162725,162730,162742,162752,162756,162762],{"__ignoreMap":30},[144,162314,162315,162318,162320],{"class":146,"line":147},[144,162316,162317],{"class":154},"balance ",[144,162319,200],{"class":150},[144,162321,162322],{"class":203}," 1000\n",[144,162324,162325],{"class":146,"line":66},[144,162326,2430],{"emptyLinePlaceholder":72},[144,162328,162329],{"class":146,"line":1210},[144,162330,2430],{"emptyLinePlaceholder":72},[144,162332,162333,162335,162337],{"class":146,"line":1225},[144,162334,31960],{"class":150},[144,162336,152046],{"class":1993},[144,162338,31966],{"class":154},[144,162340,162341,162343,162345,162348],{"class":146,"line":1231},[144,162342,31312],{"class":203},[144,162344,155],{"class":154},[144,162346,162347],{"class":259},"\"====== ATM ======\"",[144,162349,161],{"class":154},[144,162351,162352,162354,162356,162358],{"class":146,"line":1245},[144,162353,31312],{"class":203},[144,162355,155],{"class":154},[144,162357,160661],{"class":259},[144,162359,161],{"class":154},[144,162361,162362,162364,162366,162368],{"class":146,"line":1251},[144,162363,31312],{"class":203},[144,162365,155],{"class":154},[144,162367,160672],{"class":259},[144,162369,161],{"class":154},[144,162371,162372,162374,162376,162378],{"class":146,"line":1342},[144,162373,31312],{"class":203},[144,162375,155],{"class":154},[144,162377,160683],{"class":259},[144,162379,161],{"class":154},[144,162381,162382,162384,162386,162388],{"class":146,"line":1348},[144,162383,31312],{"class":203},[144,162385,155],{"class":154},[144,162387,160694],{"class":259},[144,162389,161],{"class":154},[144,162391,162392],{"class":146,"line":1360},[144,162393,2430],{"emptyLinePlaceholder":72},[144,162395,162396],{"class":146,"line":1642},[144,162397,2430],{"emptyLinePlaceholder":72},[144,162399,162400,162402,162405],{"class":146,"line":1647},[144,162401,31960],{"class":150},[144,162403,162404],{"class":1993}," show_balance",[144,162406,31966],{"class":154},[144,162408,162409,162411,162413,162415,162418,162420,162423,162425,162427],{"class":146,"line":1653},[144,162410,31312],{"class":203},[144,162412,155],{"class":154},[144,162414,207],{"class":150},[144,162416,162417],{"class":259},"\"当前余额:",[144,162419,1051],{"class":203},[144,162421,162422],{"class":154},"balance",[144,162424,1101],{"class":203},[144,162426,157025],{"class":259},[144,162428,161],{"class":154},[144,162430,162431],{"class":146,"line":1658},[144,162432,2430],{"emptyLinePlaceholder":72},[144,162434,162435],{"class":146,"line":1672},[144,162436,2430],{"emptyLinePlaceholder":72},[144,162438,162439,162441,162444],{"class":146,"line":1677},[144,162440,31960],{"class":150},[144,162442,162443],{"class":1993}," save_money",[144,162445,31966],{"class":154},[144,162447,162448,162450],{"class":146,"line":1683},[144,162449,161874],{"class":150},[144,162451,150112],{"class":154},[144,162453,162454,162457,162459,162461,162463,162465,162467,162470],{"class":146,"line":1704},[144,162455,162456],{"class":154},"    money ",[144,162458,200],{"class":150},[144,162460,109810],{"class":203},[144,162462,155],{"class":154},[144,162464,53834],{"class":203},[144,162466,155],{"class":154},[144,162468,162469],{"class":259},"\"请输入存款金额:\"",[144,162471,30510],{"class":154},[144,162473,162474,162476,162478,162480,162482],{"class":146,"line":1709},[144,162475,3131],{"class":150},[144,162477,150155],{"class":154},[144,162479,1618],{"class":150},[144,162481,4123],{"class":203},[144,162483,3769],{"class":154},[144,162485,162486,162488,162490,162493],{"class":146,"line":1723},[144,162487,32464],{"class":203},[144,162489,155],{"class":154},[144,162491,162492],{"class":259},"\"金额必须大于0\"",[144,162494,161],{"class":154},[144,162496,162497],{"class":146,"line":1728},[144,162498,152374],{"class":150},[144,162500,162501,162504,162506],{"class":146,"line":1757},[144,162502,162503],{"class":154},"    balance ",[144,162505,9508],{"class":150},[144,162507,150188],{"class":154},[144,162509,162510,162512,162514,162517],{"class":146,"line":1762},[144,162511,31312],{"class":203},[144,162513,155],{"class":154},[144,162515,162516],{"class":259},"\"存款成功\"",[144,162518,161],{"class":154},[144,162520,162521],{"class":146,"line":1779},[144,162522,162523],{"class":154},"    show_balance()\n",[144,162525,162526],{"class":146,"line":1784},[144,162527,2430],{"emptyLinePlaceholder":72},[144,162529,162530],{"class":146,"line":1789},[144,162531,2430],{"emptyLinePlaceholder":72},[144,162533,162534,162536,162539],{"class":146,"line":1794},[144,162535,31960],{"class":150},[144,162537,162538],{"class":1993}," withdraw_money",[144,162540,31966],{"class":154},[144,162542,162543,162545],{"class":146,"line":1808},[144,162544,161874],{"class":150},[144,162546,150112],{"class":154},[144,162548,162549,162551,162553,162555,162557,162559,162561,162564],{"class":146,"line":1813},[144,162550,162456],{"class":154},[144,162552,200],{"class":150},[144,162554,109810],{"class":203},[144,162556,155],{"class":154},[144,162558,53834],{"class":203},[144,162560,155],{"class":154},[144,162562,162563],{"class":259},"\"请输入取款金额:\"",[144,162565,30510],{"class":154},[144,162567,162568,162570,162572,162574,162576],{"class":146,"line":2607},[144,162569,3131],{"class":150},[144,162571,150155],{"class":154},[144,162573,1618],{"class":150},[144,162575,4123],{"class":203},[144,162577,3769],{"class":154},[144,162579,162580,162582,162584,162586],{"class":146,"line":2621},[144,162581,32464],{"class":203},[144,162583,155],{"class":154},[144,162585,162492],{"class":259},[144,162587,161],{"class":154},[144,162589,162590],{"class":146,"line":2629},[144,162591,152374],{"class":150},[144,162593,162594,162596,162598,162600],{"class":146,"line":2634},[144,162595,3131],{"class":150},[144,162597,150155],{"class":154},[144,162599,1115],{"class":150},[144,162601,162602],{"class":154}," balance:\n",[144,162604,162605,162607,162609,162611],{"class":146,"line":2640},[144,162606,32464],{"class":203},[144,162608,155],{"class":154},[144,162610,150250],{"class":259},[144,162612,161],{"class":154},[144,162614,162615],{"class":146,"line":2646},[144,162616,152374],{"class":150},[144,162618,162619,162621,162623],{"class":146,"line":2651},[144,162620,162503],{"class":154},[144,162622,150265],{"class":150},[144,162624,150188],{"class":154},[144,162626,162627,162629,162631,162634],{"class":146,"line":7979},[144,162628,31312],{"class":203},[144,162630,155],{"class":154},[144,162632,162633],{"class":259},"\"取款成功\"",[144,162635,161],{"class":154},[144,162637,162638],{"class":146,"line":8003},[144,162639,162523],{"class":154},[144,162641,162642],{"class":146,"line":8008},[144,162643,2430],{"emptyLinePlaceholder":72},[144,162645,162646],{"class":146,"line":8014},[144,162647,2430],{"emptyLinePlaceholder":72},[144,162649,162650,162652,162654],{"class":146,"line":8041},[144,162651,108676],{"class":150},[144,162653,95305],{"class":203},[144,162655,3769],{"class":154},[144,162657,162658],{"class":146,"line":8046},[144,162659,162660],{"class":154},"    show_menu()\n",[144,162662,162663,162665,162667,162669,162671,162673],{"class":146,"line":8052},[144,162664,160705],{"class":154},[144,162666,200],{"class":150},[144,162668,60618],{"class":203},[144,162670,155],{"class":154},[144,162672,153086],{"class":259},[144,162674,161],{"class":154},[144,162676,162677],{"class":146,"line":8064},[144,162678,2430],{"emptyLinePlaceholder":72},[144,162680,162681,162683,162685,162687,162689],{"class":146,"line":8076},[144,162682,3131],{"class":150},[144,162684,153099],{"class":154},[144,162686,2979],{"class":150},[144,162688,153104],{"class":259},[144,162690,3769],{"class":154},[144,162692,162693],{"class":146,"line":8088},[144,162694,162695],{"class":154},"        show_balance()\n",[144,162697,162698,162700,162702,162704,162706],{"class":146,"line":9747},[144,162699,39306],{"class":150},[144,162701,153099],{"class":154},[144,162703,2979],{"class":150},[144,162705,153123],{"class":259},[144,162707,3769],{"class":154},[144,162709,162710],{"class":146,"line":9772},[144,162711,162712],{"class":154},"        save_money()\n",[144,162714,162715,162717,162719,162721,162723],{"class":146,"line":9795},[144,162716,39306],{"class":150},[144,162718,153099],{"class":154},[144,162720,2979],{"class":150},[144,162722,153141],{"class":259},[144,162724,3769],{"class":154},[144,162726,162727],{"class":146,"line":9819},[144,162728,162729],{"class":154},"        withdraw_money()\n",[144,162731,162732,162734,162736,162738,162740],{"class":146,"line":9824},[144,162733,39306],{"class":150},[144,162735,153099],{"class":154},[144,162737,2979],{"class":150},[144,162739,153195],{"class":259},[144,162741,3769],{"class":154},[144,162743,162744,162746,162748,162750],{"class":146,"line":9829},[144,162745,32464],{"class":203},[144,162747,155],{"class":154},[144,162749,153206],{"class":259},[144,162751,161],{"class":154},[144,162753,162754],{"class":146,"line":9834},[144,162755,31640],{"class":150},[144,162757,162758,162760],{"class":146,"line":9843},[144,162759,158035],{"class":150},[144,162761,3769],{"class":154},[144,162763,162764,162766,162768,162770],{"class":146,"line":9848},[144,162765,32464],{"class":203},[144,162767,155],{"class":154},[144,162769,153227],{"class":259},[144,162771,161],{"class":154},[14,162773,162774],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[18,162776,162778],{"id":162777},"_514-易错点","5.14 易错点",[98,162780,162781,162784,162787,162792,162797,162800],{},[101,162782,162783],{},"函数定义后必须调用才会执行。",[101,162785,162786],{},"函数名后面有括号才是调用。",[101,162788,162789,162791],{},[141,162790,17077],{}," 后面的代码不会执行。",[101,162793,162794,162795,28398],{},"没有返回值的函数默认返回 ",[141,162796,95699],{},[101,162798,162799],{},"局部变量不能在函数外部访问。",[101,162801,162802,162803,162805],{},"不要滥用 ",[141,162804,161839],{},"，更好的方式是让函数返回新值。",[14,162807,162808,162809,162811],{},"例如不用 ",[141,162810,161839],{}," 改写存款：",[135,162813,162815],{"className":30391,"code":162814,"language":30393,"meta":30,"style":30},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[141,162816,162817,162826,162837,162841,162845,162853,162866],{"__ignoreMap":30},[144,162818,162819,162821,162823],{"class":146,"line":147},[144,162820,31960],{"class":150},[144,162822,162443],{"class":1993},[144,162824,162825],{"class":154},"(balance, money):\n",[144,162827,162828,162830,162833,162835],{"class":146,"line":66},[144,162829,4120],{"class":150},[144,162831,162832],{"class":154}," balance ",[144,162834,636],{"class":150},[144,162836,150188],{"class":154},[144,162838,162839],{"class":146,"line":1210},[144,162840,2430],{"emptyLinePlaceholder":72},[144,162842,162843],{"class":146,"line":1225},[144,162844,2430],{"emptyLinePlaceholder":72},[144,162846,162847,162849,162851],{"class":146,"line":1231},[144,162848,162317],{"class":154},[144,162850,200],{"class":150},[144,162852,162322],{"class":203},[144,162854,162855,162857,162859,162862,162864],{"class":146,"line":1245},[144,162856,162317],{"class":154},[144,162858,200],{"class":150},[144,162860,162861],{"class":154}," save_money(balance, ",[144,162863,1752],{"class":203},[144,162865,161],{"class":154},[144,162867,162868,162870],{"class":146,"line":1251},[144,162869,30428],{"class":203},[144,162871,162872],{"class":154},"(balance)\n",[18,162874,162876],{"id":162875},"_515-本章练习","5.15 本章练习",[98,162878,162879,162886,162892,162898,162904],{},[101,162880,162881,162882,162885],{},"定义函数 ",[141,162883,162884],{},"print_student(name, age)","，输出学生信息。",[101,162887,162881,162888,162891],{},[141,162889,162890],{},"get_max(a, b, c)","，返回三个数中的最大值。",[101,162893,162881,162894,162897],{},[141,162895,162896],{},"is_even(num)","，判断一个数是否为偶数。",[101,162899,162881,162900,162903],{},[141,162901,162902],{},"calculate_bmi(weight, height)","，返回 BMI。",[101,162905,162906],{},"把第 4 章的菜单程序拆分成多个函数。",[5157,162908,162909],{},"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":30,"searchDepth":66,"depth":66,"links":162911},[162912,162913,162914,162915,162916,162917,162918,162919,162920,162924,162925,162926,162927,162928,162929],{"id":160932,"depth":66,"text":160933},{"id":160973,"depth":66,"text":160974},{"id":161063,"depth":66,"text":161064},{"id":161144,"depth":66,"text":161145},{"id":161277,"depth":66,"text":161278},{"id":161399,"depth":66,"text":161400},{"id":161521,"depth":66,"text":161522},{"id":161598,"depth":66,"text":161599},{"id":161720,"depth":66,"text":161721,"children":162921},[162922,162923],{"id":161724,"depth":1210,"text":161725},{"id":161782,"depth":1210,"text":161783},{"id":161911,"depth":66,"text":161912},{"id":162037,"depth":66,"text":162038},{"id":162150,"depth":66,"text":162151},{"id":162306,"depth":66,"text":162307},{"id":162777,"depth":66,"text":162778},{"id":162875,"depth":66,"text":162876},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160924,"description":23408},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162936,"title":162937,"body":162938,"description":23408,"extension":70,"meta":165982,"navigation":72,"path":165983,"seo":165984,"stem":165985,"__hash__":165986},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162939,"toc":165963},[162940,162943,162947,162950,162953,163057,163060,163064,163067,163147,163150,163154,163157,163217,163220,163256,163259,163274,163278,163351,163354,163409,163412,163482,163485,163569,163579,163637,163641,163686,163689,163715,163718,163824,163828,163831,163873,163876,163940,163943,163947,163950,164011,164014,164044,164047,164085,164089,164092,164101,164104,164228,164231,164272,164276,164279,164290,164330,164333,164348,164353,164356,164423,164426,164516,164520,164523,164571,164574,164601,164603,164633,164636,164656,164659,164690,164693,164726,164730,164733,164757,164760,164784,164787,164811,164815,164818,164948,164951,165031,165034,165109,165113,165116,165166,165169,165211,165214,165238,165240,165264,165267,165322,165325,165391,165395,165398,165401,165439,165442,165495,165498,165544,165547,165580,165583,165587,165906,165910,165939,165943,165960],[10,162941,162937],{"id":162942},"_6-数据容器",[18,162944,162946],{"id":162945},"_61-什么是数据容器","6.1 什么是数据容器",[14,162948,162949],{},"数据容器用于一次保存多个数据。",[14,162951,162952],{},"常见容器：",[292,162954,162955,162972],{},[295,162956,162957],{},[298,162958,162959,162961,162964,162967,162970],{},[301,162960,25784],{},[301,162962,162963],{},"是否有序",[301,162965,162966],{},"是否可变",[301,162968,162969],{},"是否允许重复",[301,162971,27505],{},[339,162973,162974,162992,163008,163023,163040],{},[298,162975,162976,162979,162982,162985,162988],{},[344,162977,162978],{},"list列表",[344,162980,162981],{},"有序",[344,162983,162984],{},"可变",[344,162986,162987],{},"允许",[344,162989,162990],{},[141,162991,155270],{},[298,162993,162994,162997,162999,163002,163004],{},[344,162995,162996],{},"tuple元组",[344,162998,162981],{},[344,163000,163001],{},"不可变",[344,163003,162987],{},[344,163005,163006],{},[141,163007,155283],{},[298,163009,163010,163013,163015,163017,163019],{},[344,163011,163012],{},"str字符串",[344,163014,162981],{},[344,163016,163001],{},[344,163018,162987],{},[344,163020,163021],{},[141,163022,155893],{},[298,163024,163025,163028,163031,163033,163036],{},[344,163026,163027],{},"set集合",[344,163029,163030],{},"无序",[344,163032,162984],{},[344,163034,163035],{},"不允许",[344,163037,163038],{},[141,163039,155308],{},[298,163041,163042,163045,163047,163049,163052],{},[344,163043,163044],{},"dict字典",[344,163046,162981],{},[344,163048,162984],{},[344,163050,163051],{},"key不允许重复",[344,163053,163054],{},[141,163055,163056],{},"{\"name\": \"小明\"}",[14,163058,163059],{},"Python 3.7 之后，字典保持插入顺序。",[18,163061,163063],{"id":163062},"_62-列表list","6.2 列表list",[14,163065,163066],{},"列表用于保存一组有顺序的数据。",[135,163068,163070],{"className":30391,"code":163069,"language":30393,"meta":30,"style":30},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[141,163071,163072,163092,163117,163138],{"__ignoreMap":30},[144,163073,163074,163076,163078,163080,163082,163084,163086,163088,163090],{"class":146,"line":147},[144,163075,160393],{"class":154},[144,163077,200],{"class":150},[144,163079,52239],{"class":154},[144,163081,149901],{"class":259},[144,163083,12466],{"class":154},[144,163085,150949],{"class":259},[144,163087,12466],{"class":154},[144,163089,159744],{"class":259},[144,163091,33259],{"class":154},[144,163093,163094,163097,163099,163101,163103,163105,163107,163109,163111,163113,163115],{"class":146,"line":66},[144,163095,163096],{"class":154},"numbers ",[144,163098,200],{"class":150},[144,163100,52239],{"class":154},[144,163102,372],{"class":203},[144,163104,12466],{"class":154},[144,163106,232],{"class":203},[144,163108,12466],{"class":154},[144,163110,226],{"class":203},[144,163112,12466],{"class":154},[144,163114,448],{"class":203},[144,163116,33259],{"class":154},[144,163118,163119,163122,163124,163126,163128,163130,163132,163134,163136],{"class":146,"line":1210},[144,163120,163121],{"class":154},"mixed ",[144,163123,200],{"class":150},[144,163125,52239],{"class":154},[144,163127,149901],{"class":259},[144,163129,12466],{"class":154},[144,163131,805],{"class":203},[144,163133,12466],{"class":154},[144,163135,31489],{"class":203},[144,163137,33259],{"class":154},[144,163139,163140,163143,163145],{"class":146,"line":1225},[144,163141,163142],{"class":154},"empty ",[144,163144,200],{"class":150},[144,163146,51851],{"class":154},[14,163148,163149],{},"推荐一个列表中保存同类数据，代码更清晰。",[18,163151,163153],{"id":163152},"_63-列表索引","6.3 列表索引",[14,163155,163156],{},"正向索引从 0 开始：",[135,163158,163160],{"className":30391,"code":163159,"language":30393,"meta":30,"style":30},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[141,163161,163162,163182,163186,163197,163207],{"__ignoreMap":30},[144,163163,163164,163166,163168,163170,163172,163174,163176,163178,163180],{"class":146,"line":147},[144,163165,160393],{"class":154},[144,163167,200],{"class":150},[144,163169,52239],{"class":154},[144,163171,149901],{"class":259},[144,163173,12466],{"class":154},[144,163175,150949],{"class":259},[144,163177,12466],{"class":154},[144,163179,159744],{"class":259},[144,163181,33259],{"class":154},[144,163183,163184],{"class":146,"line":66},[144,163185,2430],{"emptyLinePlaceholder":72},[144,163187,163188,163190,163193,163195],{"class":146,"line":1210},[144,163189,30428],{"class":203},[144,163191,163192],{"class":154},"(names[",[144,163194,346],{"class":203},[144,163196,4687],{"class":154},[144,163198,163199,163201,163203,163205],{"class":146,"line":1225},[144,163200,30428],{"class":203},[144,163202,163192],{"class":154},[144,163204,372],{"class":203},[144,163206,4687],{"class":154},[144,163208,163209,163211,163213,163215],{"class":146,"line":1231},[144,163210,30428],{"class":203},[144,163212,163192],{"class":154},[144,163214,232],{"class":203},[144,163216,4687],{"class":154},[14,163218,163219],{},"反向索引从 -1 开始：",[135,163221,163223],{"className":30391,"code":163222,"language":30393,"meta":30,"style":30},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[141,163224,163225,163241],{"__ignoreMap":30},[144,163226,163227,163229,163231,163233,163235,163238],{"class":146,"line":147},[144,163228,30428],{"class":203},[144,163230,163192],{"class":154},[144,163232,687],{"class":150},[144,163234,372],{"class":203},[144,163236,163237],{"class":154},"])  ",[144,163239,163240],{"class":213},"# 小刚\n",[144,163242,163243,163245,163247,163249,163251,163253],{"class":146,"line":66},[144,163244,30428],{"class":203},[144,163246,163192],{"class":154},[144,163248,687],{"class":150},[144,163250,232],{"class":203},[144,163252,163237],{"class":154},[144,163254,163255],{"class":213},"# 小红\n",[14,163257,163258],{},"索引越界会报错：",[135,163260,163262],{"className":30391,"code":163261,"language":30393,"meta":30,"style":30},"print(names[3])\n",[141,163263,163264],{"__ignoreMap":30},[144,163265,163266,163268,163270,163272],{"class":146,"line":147},[144,163267,30428],{"class":203},[144,163269,163192],{"class":154},[144,163271,226],{"class":203},[144,163273,4687],{"class":154},[18,163275,163277],{"id":163276},"_64-列表常用方法","6.4 列表常用方法",[135,163279,163281],{"className":30391,"code":163280,"language":30393,"meta":30,"style":30},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[141,163282,163283,163299,163303,163312,163326,163340,163344],{"__ignoreMap":30},[144,163284,163285,163287,163289,163291,163293,163295,163297],{"class":146,"line":147},[144,163286,160393],{"class":154},[144,163288,200],{"class":150},[144,163290,52239],{"class":154},[144,163292,149901],{"class":259},[144,163294,12466],{"class":154},[144,163296,150949],{"class":259},[144,163298,33259],{"class":154},[144,163300,163301],{"class":146,"line":66},[144,163302,2430],{"emptyLinePlaceholder":72},[144,163304,163305,163308,163310],{"class":146,"line":1210},[144,163306,163307],{"class":154},"names.append(",[144,163309,159744],{"class":259},[144,163311,161],{"class":154},[144,163313,163314,163317,163319,163321,163324],{"class":146,"line":1225},[144,163315,163316],{"class":154},"names.insert(",[144,163318,372],{"class":203},[144,163320,12466],{"class":154},[144,163322,163323],{"class":259},"\"小李\"",[144,163325,161],{"class":154},[144,163327,163328,163331,163333,163335,163338],{"class":146,"line":1231},[144,163329,163330],{"class":154},"names.extend([",[144,163332,8714],{"class":259},[144,163334,12466],{"class":154},[144,163336,163337],{"class":259},"\"小赵\"",[144,163339,4687],{"class":154},[144,163341,163342],{"class":146,"line":1245},[144,163343,2430],{"emptyLinePlaceholder":72},[144,163345,163346,163348],{"class":146,"line":1251},[144,163347,30428],{"class":203},[144,163349,163350],{"class":154},"(names)\n",[14,163352,163353],{},"删除元素：",[135,163355,163357],{"className":30391,"code":163356,"language":30393,"meta":30,"style":30},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[141,163358,163359,163368,163378,163392,163404],{"__ignoreMap":30},[144,163360,163361,163364,163366],{"class":146,"line":147},[144,163362,163363],{"class":154},"names.remove(",[144,163365,150949],{"class":259},[144,163367,161],{"class":154},[144,163369,163370,163373,163375],{"class":146,"line":66},[144,163371,163372],{"class":154},"last ",[144,163374,200],{"class":150},[144,163376,163377],{"class":154}," names.pop()\n",[144,163379,163380,163383,163385,163388,163390],{"class":146,"line":1210},[144,163381,163382],{"class":154},"first ",[144,163384,200],{"class":150},[144,163386,163387],{"class":154}," names.pop(",[144,163389,346],{"class":203},[144,163391,161],{"class":154},[144,163393,163394,163397,163400,163402],{"class":146,"line":1225},[144,163395,163396],{"class":150},"del",[144,163398,163399],{"class":154}," names[",[144,163401,346],{"class":203},[144,163403,33259],{"class":154},[144,163405,163406],{"class":146,"line":1231},[144,163407,163408],{"class":154},"names.clear()\n",[14,163410,163411],{},"查询和统计：",[135,163413,163415],{"className":30391,"code":163414,"language":30393,"meta":30,"style":30},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[141,163416,163417,163445,163449,163460,163471],{"__ignoreMap":30},[144,163418,163419,163421,163423,163425,163427,163429,163431,163433,163435,163437,163439,163441,163443],{"class":146,"line":147},[144,163420,163096],{"class":154},[144,163422,200],{"class":150},[144,163424,52239],{"class":154},[144,163426,372],{"class":203},[144,163428,12466],{"class":154},[144,163430,232],{"class":203},[144,163432,12466],{"class":154},[144,163434,226],{"class":203},[144,163436,12466],{"class":154},[144,163438,232],{"class":203},[144,163440,12466],{"class":154},[144,163442,448],{"class":203},[144,163444,33259],{"class":154},[144,163446,163447],{"class":146,"line":66},[144,163448,2430],{"emptyLinePlaceholder":72},[144,163450,163451,163453,163456,163458],{"class":146,"line":1210},[144,163452,30428],{"class":203},[144,163454,163455],{"class":154},"(numbers.index(",[144,163457,226],{"class":203},[144,163459,30510],{"class":154},[144,163461,163462,163464,163467,163469],{"class":146,"line":1225},[144,163463,30428],{"class":203},[144,163465,163466],{"class":154},"(numbers.count(",[144,163468,232],{"class":203},[144,163470,30510],{"class":154},[144,163472,163473,163475,163477,163479],{"class":146,"line":1231},[144,163474,30428],{"class":203},[144,163476,155],{"class":154},[144,163478,7389],{"class":203},[144,163480,163481],{"class":154},"(numbers))\n",[14,163483,163484],{},"排序：",[135,163486,163488],{"className":30391,"code":163487,"language":30393,"meta":30,"style":30},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[141,163489,163490,163514,163518,163523,163530,163534,163548,163554,163558,163563],{"__ignoreMap":30},[144,163491,163492,163494,163496,163498,163500,163502,163504,163506,163508,163510,163512],{"class":146,"line":147},[144,163493,163096],{"class":154},[144,163495,200],{"class":150},[144,163497,52239],{"class":154},[144,163499,226],{"class":203},[144,163501,12466],{"class":154},[144,163503,372],{"class":203},[144,163505,12466],{"class":154},[144,163507,474],{"class":203},[144,163509,12466],{"class":154},[144,163511,232],{"class":203},[144,163513,33259],{"class":154},[144,163515,163516],{"class":146,"line":66},[144,163517,2430],{"emptyLinePlaceholder":72},[144,163519,163520],{"class":146,"line":1210},[144,163521,163522],{"class":154},"numbers.sort()\n",[144,163524,163525,163527],{"class":146,"line":1225},[144,163526,30428],{"class":203},[144,163528,163529],{"class":154},"(numbers)\n",[144,163531,163532],{"class":146,"line":1231},[144,163533,2430],{"emptyLinePlaceholder":72},[144,163535,163536,163539,163542,163544,163546],{"class":146,"line":1245},[144,163537,163538],{"class":154},"numbers.sort(",[144,163540,163541],{"class":5247},"reverse",[144,163543,200],{"class":150},[144,163545,31489],{"class":203},[144,163547,161],{"class":154},[144,163549,163550,163552],{"class":146,"line":1251},[144,163551,30428],{"class":203},[144,163553,163529],{"class":154},[144,163555,163556],{"class":146,"line":1342},[144,163557,2430],{"emptyLinePlaceholder":72},[144,163559,163560],{"class":146,"line":1348},[144,163561,163562],{"class":154},"numbers.reverse()\n",[144,163564,163565,163567],{"class":146,"line":1360},[144,163566,30428],{"class":203},[144,163568,163529],{"class":154},[14,163570,163571,163574,163575,163578],{},[141,163572,163573],{},"sort()"," 会修改原列表，",[141,163576,163577],{},"sorted()"," 返回新列表。",[135,163580,163582],{"className":30391,"code":163581,"language":30393,"meta":30,"style":30},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[141,163583,163584,163608,163620,163624,163630],{"__ignoreMap":30},[144,163585,163586,163588,163590,163592,163594,163596,163598,163600,163602,163604,163606],{"class":146,"line":147},[144,163587,163096],{"class":154},[144,163589,200],{"class":150},[144,163591,52239],{"class":154},[144,163593,226],{"class":203},[144,163595,12466],{"class":154},[144,163597,372],{"class":203},[144,163599,12466],{"class":154},[144,163601,474],{"class":203},[144,163603,12466],{"class":154},[144,163605,232],{"class":203},[144,163607,33259],{"class":154},[144,163609,163610,163613,163615,163618],{"class":146,"line":66},[144,163611,163612],{"class":154},"new_numbers ",[144,163614,200],{"class":150},[144,163616,163617],{"class":203}," sorted",[144,163619,163529],{"class":154},[144,163621,163622],{"class":146,"line":1210},[144,163623,2430],{"emptyLinePlaceholder":72},[144,163625,163626,163628],{"class":146,"line":1225},[144,163627,30428],{"class":203},[144,163629,163529],{"class":154},[144,163631,163632,163634],{"class":146,"line":1231},[144,163633,30428],{"class":203},[144,163635,163636],{"class":154},"(new_numbers)\n",[18,163638,163640],{"id":163639},"_65-列表遍历","6.5 列表遍历",[135,163642,163644],{"className":30391,"code":163643,"language":30393,"meta":30,"style":30},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[141,163645,163646,163666,163670,163680],{"__ignoreMap":30},[144,163647,163648,163650,163652,163654,163656,163658,163660,163662,163664],{"class":146,"line":147},[144,163649,160393],{"class":154},[144,163651,200],{"class":150},[144,163653,52239],{"class":154},[144,163655,149901],{"class":259},[144,163657,12466],{"class":154},[144,163659,150949],{"class":259},[144,163661,12466],{"class":154},[144,163663,159744],{"class":259},[144,163665,33259],{"class":154},[144,163667,163668],{"class":146,"line":66},[144,163669,2430],{"emptyLinePlaceholder":72},[144,163671,163672,163674,163676,163678],{"class":146,"line":1210},[144,163673,3055],{"class":150},[144,163675,160429],{"class":154},[144,163677,26056],{"class":150},[144,163679,160434],{"class":154},[144,163681,163682,163684],{"class":146,"line":1225},[144,163683,31312],{"class":203},[144,163685,150673],{"class":154},[14,163687,163688],{},"需要索引时：",[135,163690,163692],{"className":30391,"code":163691,"language":30393,"meta":30,"style":30},"for index, name in enumerate(names):\n    print(index, name)\n",[141,163693,163694,163708],{"__ignoreMap":30},[144,163695,163696,163698,163701,163703,163705],{"class":146,"line":147},[144,163697,3055],{"class":150},[144,163699,163700],{"class":154}," index, name ",[144,163702,26056],{"class":150},[144,163704,31619],{"class":203},[144,163706,163707],{"class":154},"(names):\n",[144,163709,163710,163712],{"class":146,"line":66},[144,163711,31312],{"class":203},[144,163713,163714],{"class":154},"(index, name)\n",[14,163716,163717],{},"统计总分：",[135,163719,163721],{"className":30391,"code":163720,"language":30393,"meta":30,"style":30},"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",[141,163722,163723,163748,163756,163760,163771,163779,163783,163800],{"__ignoreMap":30},[144,163724,163725,163728,163730,163732,163734,163736,163738,163740,163742,163744,163746],{"class":146,"line":147},[144,163726,163727],{"class":154},"scores ",[144,163729,200],{"class":150},[144,163731,52239],{"class":154},[144,163733,1017],{"class":203},[144,163735,12466],{"class":154},[144,163737,891],{"class":203},[144,163739,12466],{"class":154},[144,163741,409],{"class":203},[144,163743,12466],{"class":154},[144,163745,716],{"class":203},[144,163747,33259],{"class":154},[144,163749,163750,163752,163754],{"class":146,"line":66},[144,163751,157273],{"class":154},[144,163753,200],{"class":150},[144,163755,47346],{"class":203},[144,163757,163758],{"class":146,"line":1210},[144,163759,2430],{"emptyLinePlaceholder":72},[144,163761,163762,163764,163766,163768],{"class":146,"line":1225},[144,163763,3055],{"class":150},[144,163765,157796],{"class":154},[144,163767,26056],{"class":150},[144,163769,163770],{"class":154}," scores:\n",[144,163772,163773,163775,163777],{"class":146,"line":1231},[144,163774,159320],{"class":154},[144,163776,9508],{"class":150},[144,163778,1609],{"class":154},[144,163780,163781],{"class":146,"line":1245},[144,163782,2430],{"emptyLinePlaceholder":72},[144,163784,163785,163788,163790,163793,163795,163797],{"class":146,"line":1251},[144,163786,163787],{"class":154},"avg ",[144,163789,200],{"class":150},[144,163791,163792],{"class":154}," total ",[144,163794,739],{"class":150},[144,163796,7362],{"class":203},[144,163798,163799],{"class":154},"(scores)\n",[144,163801,163802,163804,163806,163808,163811,163813,163816,163818,163820,163822],{"class":146,"line":1342},[144,163803,30428],{"class":203},[144,163805,155],{"class":154},[144,163807,207],{"class":150},[144,163809,163810],{"class":259},"\"平均分:",[144,163812,1051],{"class":203},[144,163814,163815],{"class":154},"avg",[144,163817,157172],{"class":150},[144,163819,1101],{"class":203},[144,163821,406],{"class":259},[144,163823,161],{"class":154},[18,163825,163827],{"id":163826},"_66-元组tuple","6.6 元组tuple",[14,163829,163830],{},"元组和列表类似，但不可修改。",[135,163832,163834],{"className":30391,"code":163833,"language":30393,"meta":30,"style":30},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[141,163835,163836,163853],{"__ignoreMap":30},[144,163837,163838,163841,163843,163845,163847,163849,163851],{"class":146,"line":147},[144,163839,163840],{"class":154},"point ",[144,163842,200],{"class":150},[144,163844,1688],{"class":154},[144,163846,601],{"class":203},[144,163848,12466],{"class":154},[144,163850,855],{"class":203},[144,163852,161],{"class":154},[144,163854,163855,163857,163859,163861,163863,163865,163867,163869,163871],{"class":146,"line":66},[144,163856,116327],{"class":154},[144,163858,200],{"class":150},[144,163860,1688],{"class":154},[144,163862,149901],{"class":259},[144,163864,12466],{"class":154},[144,163866,805],{"class":203},[144,163868,12466],{"class":154},[144,163870,69282],{"class":259},[144,163872,161],{"class":154},[14,163874,163875],{},"单元素元组必须加逗号：",[135,163877,163879],{"className":30391,"code":163878,"language":30393,"meta":30,"style":30},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[141,163880,163881,163895,163908,163912,163926],{"__ignoreMap":30},[144,163882,163883,163886,163888,163890,163892],{"class":146,"line":147},[144,163884,163885],{"class":154},"t1 ",[144,163887,200],{"class":150},[144,163889,1688],{"class":154},[144,163891,601],{"class":203},[144,163893,163894],{"class":154},",)\n",[144,163896,163897,163900,163902,163904,163906],{"class":146,"line":66},[144,163898,163899],{"class":154},"t2 ",[144,163901,200],{"class":150},[144,163903,1688],{"class":154},[144,163905,601],{"class":203},[144,163907,161],{"class":154},[144,163909,163910],{"class":146,"line":1210},[144,163911,2430],{"emptyLinePlaceholder":72},[144,163913,163914,163916,163918,163920,163923],{"class":146,"line":1225},[144,163915,30428],{"class":203},[144,163917,155],{"class":154},[144,163919,103120],{"class":203},[144,163921,163922],{"class":154},"(t1))  ",[144,163924,163925],{"class":213},"# tuple\n",[144,163927,163928,163930,163932,163934,163937],{"class":146,"line":1231},[144,163929,30428],{"class":203},[144,163931,155],{"class":154},[144,163933,103120],{"class":203},[144,163935,163936],{"class":154},"(t2))  ",[144,163938,163939],{"class":213},"# int\n",[14,163941,163942],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[18,163944,163946],{"id":163945},"_67-字符串str","6.7 字符串str",[14,163948,163949],{},"字符串也是序列，可以索引、切片和遍历。",[135,163951,163953],{"className":30391,"code":163952,"language":30393,"meta":30,"style":30},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[141,163954,163955,163963,163967,163978,163990,163994,164005],{"__ignoreMap":30},[144,163956,163957,163959,163961],{"class":146,"line":147},[144,163958,156457],{"class":154},[144,163960,200],{"class":150},[144,163962,159694],{"class":259},[144,163964,163965],{"class":146,"line":66},[144,163966,2430],{"emptyLinePlaceholder":72},[144,163968,163969,163971,163974,163976],{"class":146,"line":1210},[144,163970,30428],{"class":203},[144,163972,163973],{"class":154},"(text[",[144,163975,346],{"class":203},[144,163977,4687],{"class":154},[144,163979,163980,163982,163984,163986,163988],{"class":146,"line":1225},[144,163981,30428],{"class":203},[144,163983,163973],{"class":154},[144,163985,687],{"class":150},[144,163987,372],{"class":203},[144,163989,4687],{"class":154},[144,163991,163992],{"class":146,"line":1231},[144,163993,2430],{"emptyLinePlaceholder":72},[144,163995,163996,163998,164000,164002],{"class":146,"line":1245},[144,163997,3055],{"class":150},[144,163999,159705],{"class":154},[144,164001,26056],{"class":150},[144,164003,164004],{"class":154}," text:\n",[144,164006,164007,164009],{"class":146,"line":1251},[144,164008,31312],{"class":203},[144,164010,159716],{"class":154},[14,164012,164013],{},"字符串不可变：",[135,164015,164017],{"className":30391,"code":164016,"language":30393,"meta":30,"style":30},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[141,164018,164019,164027],{"__ignoreMap":30},[144,164020,164021,164023,164025],{"class":146,"line":147},[144,164022,156457],{"class":154},[144,164024,200],{"class":150},[144,164026,159694],{"class":259},[144,164028,164029,164032,164034,164036,164038,164041],{"class":146,"line":66},[144,164030,164031],{"class":154},"text[",[144,164033,346],{"class":203},[144,164035,4473],{"class":154},[144,164037,200],{"class":150},[144,164039,164040],{"class":259}," \"P\"",[144,164042,164043],{"class":213},"  # 报错\n",[14,164045,164046],{},"如果要得到新字符串：",[135,164048,164050],{"className":30391,"code":164049,"language":30393,"meta":30,"style":30},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[141,164051,164052,164060,164078],{"__ignoreMap":30},[144,164053,164054,164056,164058],{"class":146,"line":147},[144,164055,156457],{"class":154},[144,164057,200],{"class":150},[144,164059,159694],{"class":259},[144,164061,164062,164064,164066,164068,164070,164073,164075],{"class":146,"line":66},[144,164063,156457],{"class":154},[144,164065,200],{"class":150},[144,164067,164040],{"class":259},[144,164069,45579],{"class":150},[144,164071,164072],{"class":154}," text[",[144,164074,372],{"class":203},[144,164076,164077],{"class":154},":]\n",[144,164079,164080,164082],{"class":146,"line":1210},[144,164081,30428],{"class":203},[144,164083,164084],{"class":154},"(text)\n",[18,164086,164088],{"id":164087},"_68-切片","6.8 切片",[14,164090,164091],{},"切片用于从序列中取一部分。",[135,164093,164095],{"className":30391,"code":164094,"language":30393,"meta":30,"style":30},"序列[开始:结束:步长]\n",[141,164096,164097],{"__ignoreMap":30},[144,164098,164099],{"class":146,"line":147},[144,164100,164094],{"class":154},[14,164102,164103],{},"结束位置不包含。",[135,164105,164107],{"className":30391,"code":164106,"language":30393,"meta":30,"style":30},"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",[141,164108,164109,164146,164150,164169,164184,164198,164212],{"__ignoreMap":30},[144,164110,164111,164114,164116,164118,164120,164122,164124,164126,164128,164130,164132,164134,164136,164138,164140,164142,164144],{"class":146,"line":147},[144,164112,164113],{"class":154},"nums ",[144,164115,200],{"class":150},[144,164117,52239],{"class":154},[144,164119,346],{"class":203},[144,164121,12466],{"class":154},[144,164123,372],{"class":203},[144,164125,12466],{"class":154},[144,164127,232],{"class":203},[144,164129,12466],{"class":154},[144,164131,226],{"class":203},[144,164133,12466],{"class":154},[144,164135,448],{"class":203},[144,164137,12466],{"class":154},[144,164139,474],{"class":203},[144,164141,12466],{"class":154},[144,164143,499],{"class":203},[144,164145,33259],{"class":154},[144,164147,164148],{"class":146,"line":66},[144,164149,2430],{"emptyLinePlaceholder":72},[144,164151,164152,164154,164157,164159,164161,164163,164166],{"class":146,"line":1210},[144,164153,30428],{"class":203},[144,164155,164156],{"class":154},"(nums[",[144,164158,372],{"class":203},[144,164160,1014],{"class":154},[144,164162,448],{"class":203},[144,164164,164165],{"class":154},"])    ",[144,164167,164168],{"class":213},"# [1, 2, 3]\n",[144,164170,164171,164173,164176,164178,164181],{"class":146,"line":1225},[144,164172,30428],{"class":203},[144,164174,164175],{"class":154},"(nums[:",[144,164177,226],{"class":203},[144,164179,164180],{"class":154},"])     ",[144,164182,164183],{"class":213},"# [0, 1, 2]\n",[144,164185,164186,164188,164190,164192,164195],{"class":146,"line":1231},[144,164187,30428],{"class":203},[144,164189,164156],{"class":154},[144,164191,226],{"class":203},[144,164193,164194],{"class":154},":])     ",[144,164196,164197],{"class":213},"# [3, 4, 5, 6]\n",[144,164199,164200,164202,164205,164207,164209],{"class":146,"line":1245},[144,164201,30428],{"class":203},[144,164203,164204],{"class":154},"(nums[::",[144,164206,232],{"class":203},[144,164208,164165],{"class":154},[144,164210,164211],{"class":213},"# [0, 2, 4, 6]\n",[144,164213,164214,164216,164218,164220,164222,164225],{"class":146,"line":1251},[144,164215,30428],{"class":203},[144,164217,164204],{"class":154},[144,164219,687],{"class":150},[144,164221,372],{"class":203},[144,164223,164224],{"class":154},"])   ",[144,164226,164227],{"class":213},"# 反转\n",[14,164229,164230],{},"字符串切片：",[135,164232,164234],{"className":30391,"code":164233,"language":30393,"meta":30,"style":30},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[141,164235,164236,164245,164259],{"__ignoreMap":30},[144,164237,164238,164240,164242],{"class":146,"line":147},[144,164239,156457],{"class":154},[144,164241,200],{"class":150},[144,164243,164244],{"class":259}," \"abcdef\"\n",[144,164246,164247,164249,164251,164253,164255,164257],{"class":146,"line":66},[144,164248,30428],{"class":203},[144,164250,163973],{"class":154},[144,164252,372],{"class":203},[144,164254,1014],{"class":154},[144,164256,448],{"class":203},[144,164258,4687],{"class":154},[144,164260,164261,164263,164266,164268,164270],{"class":146,"line":1210},[144,164262,30428],{"class":203},[144,164264,164265],{"class":154},"(text[::",[144,164267,687],{"class":150},[144,164269,372],{"class":203},[144,164271,4687],{"class":154},[18,164273,164275],{"id":164274},"_69-集合set","6.9 集合set",[14,164277,164278],{},"集合特点：",[98,164280,164281,164284,164287],{},[101,164282,164283],{},"无序。",[101,164285,164286],{},"元素不重复。",[101,164288,164289],{},"可以做交集、并集、差集。",[135,164291,164293],{"className":30391,"code":164292,"language":30393,"meta":30,"style":30},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[141,164294,164295,164323],{"__ignoreMap":30},[144,164296,164297,164299,164301,164303,164305,164307,164309,164311,164313,164315,164317,164319,164321],{"class":146,"line":147},[144,164298,164113],{"class":154},[144,164300,200],{"class":150},[144,164302,4478],{"class":154},[144,164304,372],{"class":203},[144,164306,12466],{"class":154},[144,164308,232],{"class":203},[144,164310,12466],{"class":154},[144,164312,226],{"class":203},[144,164314,12466],{"class":154},[144,164316,226],{"class":203},[144,164318,12466],{"class":154},[144,164320,448],{"class":203},[144,164322,1595],{"class":154},[144,164324,164325,164327],{"class":146,"line":66},[144,164326,30428],{"class":203},[144,164328,164329],{"class":154},"(nums)\n",[14,164331,164332],{},"创建空集合：",[135,164334,164336],{"className":30391,"code":164335,"language":30393,"meta":30,"style":30},"s = set()\n",[141,164337,164338],{"__ignoreMap":30},[144,164339,164340,164342,164344,164346],{"class":146,"line":147},[144,164341,10610],{"class":154},[144,164343,200],{"class":150},[144,164345,119735],{"class":203},[144,164347,2006],{"class":154},[14,164349,9056,164350,164352],{},[141,164351,32472],{}," 是空字典，不是空集合。",[14,164354,164355],{},"集合常用操作：",[135,164357,164359],{"className":30391,"code":164358,"language":30393,"meta":30,"style":30},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[141,164360,164361,164381,164385,164394,164403,164412],{"__ignoreMap":30},[144,164362,164363,164365,164367,164369,164371,164373,164375,164377,164379],{"class":146,"line":147},[144,164364,10610],{"class":154},[144,164366,200],{"class":150},[144,164368,4478],{"class":154},[144,164370,372],{"class":203},[144,164372,12466],{"class":154},[144,164374,232],{"class":203},[144,164376,12466],{"class":154},[144,164378,226],{"class":203},[144,164380,1595],{"class":154},[144,164382,164383],{"class":146,"line":66},[144,164384,2430],{"emptyLinePlaceholder":72},[144,164386,164387,164390,164392],{"class":146,"line":1210},[144,164388,164389],{"class":154},"s.add(",[144,164391,448],{"class":203},[144,164393,161],{"class":154},[144,164395,164396,164399,164401],{"class":146,"line":1225},[144,164397,164398],{"class":154},"s.remove(",[144,164400,232],{"class":203},[144,164402,161],{"class":154},[144,164404,164405,164408,164410],{"class":146,"line":1231},[144,164406,164407],{"class":154},"s.discard(",[144,164409,601],{"class":203},[144,164411,161],{"class":154},[144,164413,164414,164416,164418,164420],{"class":146,"line":1245},[144,164415,30428],{"class":203},[144,164417,155],{"class":154},[144,164419,7389],{"class":203},[144,164421,164422],{"class":154},"(s))\n",[14,164424,164425],{},"交并差：",[135,164427,164429],{"className":30391,"code":164428,"language":30393,"meta":30,"style":30},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[141,164430,164431,164451,164471,164475,164490,164503],{"__ignoreMap":30},[144,164432,164433,164435,164437,164439,164441,164443,164445,164447,164449],{"class":146,"line":147},[144,164434,10950],{"class":154},[144,164436,200],{"class":150},[144,164438,4478],{"class":154},[144,164440,372],{"class":203},[144,164442,12466],{"class":154},[144,164444,232],{"class":203},[144,164446,12466],{"class":154},[144,164448,226],{"class":203},[144,164450,1595],{"class":154},[144,164452,164453,164455,164457,164459,164461,164463,164465,164467,164469],{"class":146,"line":66},[144,164454,10976],{"class":154},[144,164456,200],{"class":150},[144,164458,4478],{"class":154},[144,164460,226],{"class":203},[144,164462,12466],{"class":154},[144,164464,448],{"class":203},[144,164466,12466],{"class":154},[144,164468,474],{"class":203},[144,164470,1595],{"class":154},[144,164472,164473],{"class":146,"line":1210},[144,164474,2430],{"emptyLinePlaceholder":72},[144,164476,164477,164479,164482,164484,164487],{"class":146,"line":1225},[144,164478,30428],{"class":203},[144,164480,164481],{"class":154},"(a ",[144,164483,508],{"class":150},[144,164485,164486],{"class":154}," b)  ",[144,164488,164489],{"class":213},"# 交集\n",[144,164491,164492,164494,164496,164498,164500],{"class":146,"line":1231},[144,164493,30428],{"class":203},[144,164495,164481],{"class":154},[144,164497,1076],{"class":150},[144,164499,164486],{"class":154},[144,164501,164502],{"class":213},"# 并集\n",[144,164504,164505,164507,164509,164511,164513],{"class":146,"line":1245},[144,164506,30428],{"class":203},[144,164508,164481],{"class":154},[144,164510,687],{"class":150},[144,164512,164486],{"class":154},[144,164514,164515],{"class":213},"# 差集\n",[18,164517,164519],{"id":164518},"_610-字典dict","6.10 字典dict",[14,164521,164522],{},"字典通过 key-value 保存数据。",[135,164524,164526],{"className":30391,"code":164525,"language":30393,"meta":30,"style":30},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[141,164527,164528,164536,164546,164557,164567],{"__ignoreMap":30},[144,164529,164530,164532,164534],{"class":146,"line":147},[144,164531,149494],{"class":154},[144,164533,200],{"class":150},[144,164535,15603],{"class":154},[144,164537,164538,164540,164542,164544],{"class":146,"line":66},[144,164539,147033],{"class":259},[144,164541,51450],{"class":154},[144,164543,149901],{"class":259},[144,164545,31479],{"class":154},[144,164547,164548,164551,164553,164555],{"class":146,"line":1210},[144,164549,164550],{"class":259},"    \"age\"",[144,164552,51450],{"class":154},[144,164554,805],{"class":203},[144,164556,31479],{"class":154},[144,164558,164559,164562,164564],{"class":146,"line":1225},[144,164560,164561],{"class":259},"    \"score\"",[144,164563,51450],{"class":154},[144,164565,164566],{"class":203},"95\n",[144,164568,164569],{"class":146,"line":1231},[144,164570,1595],{"class":154},[14,164572,164573],{},"获取值：",[135,164575,164577],{"className":30391,"code":164576,"language":30393,"meta":30,"style":30},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[141,164578,164579,164590],{"__ignoreMap":30},[144,164580,164581,164583,164586,164588],{"class":146,"line":147},[144,164582,30428],{"class":203},[144,164584,164585],{"class":154},"(student[",[144,164587,62692],{"class":259},[144,164589,4687],{"class":154},[144,164591,164592,164594,164597,164599],{"class":146,"line":66},[144,164593,30428],{"class":203},[144,164595,164596],{"class":154},"(student.get(",[144,164598,62692],{"class":259},[144,164600,30510],{"class":154},[14,164602,15419],{},[135,164604,164606],{"className":30391,"code":164605,"language":30393,"meta":30,"style":30},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[141,164607,164608,164621],{"__ignoreMap":30},[144,164609,164610,164612,164615,164618],{"class":146,"line":147},[144,164611,152872],{"class":154},[144,164613,164614],{"class":259},"\"address\"",[144,164616,164617],{"class":154},"]     ",[144,164619,164620],{"class":213},"# key不存在会报错\n",[144,164622,164623,164626,164628,164630],{"class":146,"line":66},[144,164624,164625],{"class":154},"student.get(",[144,164627,164614],{"class":259},[144,164629,13745],{"class":154},[144,164631,164632],{"class":213},"# key不存在返回None\n",[14,164634,164635],{},"设置默认值：",[135,164637,164639],{"className":30391,"code":164638,"language":30393,"meta":30,"style":30},"print(student.get(\"address\", \"未知\"))\n",[141,164640,164641],{"__ignoreMap":30},[144,164642,164643,164645,164647,164649,164651,164654],{"class":146,"line":147},[144,164644,30428],{"class":203},[144,164646,164596],{"class":154},[144,164648,164614],{"class":259},[144,164650,12466],{"class":154},[144,164652,164653],{"class":259},"\"未知\"",[144,164655,30510],{"class":154},[14,164657,164658],{},"新增和修改：",[135,164660,164662],{"className":30391,"code":164661,"language":30393,"meta":30,"style":30},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[141,164663,164664,164677],{"__ignoreMap":30},[144,164665,164666,164668,164670,164672,164674],{"class":146,"line":147},[144,164667,152872],{"class":154},[144,164669,69137],{"class":259},[144,164671,4473],{"class":154},[144,164673,200],{"class":150},[144,164675,164676],{"class":203}," 19\n",[144,164678,164679,164681,164683,164685,164687],{"class":146,"line":66},[144,164680,152872],{"class":154},[144,164682,164614],{"class":259},[144,164684,4473],{"class":154},[144,164686,200],{"class":150},[144,164688,164689],{"class":259}," \"北京\"\n",[14,164691,164692],{},"删除：",[135,164694,164696],{"className":30391,"code":164695,"language":30393,"meta":30,"style":30},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[141,164697,164698,164711,164721],{"__ignoreMap":30},[144,164699,164700,164702,164704,164707,164709],{"class":146,"line":147},[144,164701,155371],{"class":154},[144,164703,200],{"class":150},[144,164705,164706],{"class":154}," student.pop(",[144,164708,151485],{"class":259},[144,164710,161],{"class":154},[144,164712,164713,164715,164717,164719],{"class":146,"line":66},[144,164714,163396],{"class":150},[144,164716,152162],{"class":154},[144,164718,69137],{"class":259},[144,164720,33259],{"class":154},[144,164722,164723],{"class":146,"line":1210},[144,164724,164725],{"class":154},"student.clear()\n",[18,164727,164729],{"id":164728},"_611-字典遍历","6.11 字典遍历",[14,164731,164732],{},"遍历 key：",[135,164734,164736],{"className":30391,"code":164735,"language":30393,"meta":30,"style":30},"for key in student:\n    print(key, student[key])\n",[141,164737,164738,164750],{"__ignoreMap":30},[144,164739,164740,164742,164745,164747],{"class":146,"line":147},[144,164741,3055],{"class":150},[144,164743,164744],{"class":154}," key ",[144,164746,26056],{"class":150},[144,164748,164749],{"class":154}," student:\n",[144,164751,164752,164754],{"class":146,"line":66},[144,164753,31312],{"class":203},[144,164755,164756],{"class":154},"(key, student[key])\n",[14,164758,164759],{},"遍历 value：",[135,164761,164763],{"className":30391,"code":164762,"language":30393,"meta":30,"style":30},"for value in student.values():\n    print(value)\n",[141,164764,164765,164777],{"__ignoreMap":30},[144,164766,164767,164769,164772,164774],{"class":146,"line":147},[144,164768,3055],{"class":150},[144,164770,164771],{"class":154}," value ",[144,164773,26056],{"class":150},[144,164775,164776],{"class":154}," student.values():\n",[144,164778,164779,164781],{"class":146,"line":66},[144,164780,31312],{"class":203},[144,164782,164783],{"class":154},"(value)\n",[14,164785,164786],{},"遍历 key 和 value：",[135,164788,164790],{"className":30391,"code":164789,"language":30393,"meta":30,"style":30},"for key, value in student.items():\n    print(key, value)\n",[141,164791,164792,164804],{"__ignoreMap":30},[144,164793,164794,164796,164799,164801],{"class":146,"line":147},[144,164795,3055],{"class":150},[144,164797,164798],{"class":154}," key, value ",[144,164800,26056],{"class":150},[144,164802,164803],{"class":154}," student.items():\n",[144,164805,164806,164808],{"class":146,"line":66},[144,164807,31312],{"class":203},[144,164809,164810],{"class":154},"(key, value)\n",[18,164812,164814],{"id":164813},"_612-嵌套容器","6.12 嵌套容器",[14,164816,164817],{},"列表中保存字典，是项目中最常见的结构之一。",[135,164819,164821],{"className":30391,"code":164820,"language":30393,"meta":30,"style":30},"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",[141,164822,164823,164831,164859,164887,164915,164919,164923,164933],{"__ignoreMap":30},[144,164824,164825,164827,164829],{"class":146,"line":147},[144,164826,159729],{"class":154},[144,164828,200],{"class":150},[144,164830,55460],{"class":154},[144,164832,164833,164835,164837,164839,164841,164843,164845,164847,164849,164851,164853,164855,164857],{"class":146,"line":66},[144,164834,148398],{"class":154},[144,164836,62692],{"class":259},[144,164838,51450],{"class":154},[144,164840,149901],{"class":259},[144,164842,12466],{"class":154},[144,164844,69137],{"class":259},[144,164846,51450],{"class":154},[144,164848,805],{"class":203},[144,164850,12466],{"class":154},[144,164852,151485],{"class":259},[144,164854,51450],{"class":154},[144,164856,1144],{"class":203},[144,164858,4960],{"class":154},[144,164860,164861,164863,164865,164867,164869,164871,164873,164875,164877,164879,164881,164883,164885],{"class":146,"line":1210},[144,164862,148398],{"class":154},[144,164864,62692],{"class":259},[144,164866,51450],{"class":154},[144,164868,150949],{"class":259},[144,164870,12466],{"class":154},[144,164872,69137],{"class":259},[144,164874,51450],{"class":154},[144,164876,780],{"class":203},[144,164878,12466],{"class":154},[144,164880,151485],{"class":259},[144,164882,51450],{"class":154},[144,164884,966],{"class":203},[144,164886,4960],{"class":154},[144,164888,164889,164891,164893,164895,164897,164899,164901,164903,164905,164907,164909,164911,164913],{"class":146,"line":1225},[144,164890,148398],{"class":154},[144,164892,62692],{"class":259},[144,164894,51450],{"class":154},[144,164896,159744],{"class":259},[144,164898,12466],{"class":154},[144,164900,69137],{"class":259},[144,164902,51450],{"class":154},[144,164904,830],{"class":203},[144,164906,12466],{"class":154},[144,164908,151485],{"class":259},[144,164910,51450],{"class":154},[144,164912,561],{"class":203},[144,164914,4960],{"class":154},[144,164916,164917],{"class":146,"line":1231},[144,164918,33259],{"class":154},[144,164920,164921],{"class":146,"line":1245},[144,164922,2430],{"emptyLinePlaceholder":72},[144,164924,164925,164927,164929,164931],{"class":146,"line":1251},[144,164926,3055],{"class":150},[144,164928,152150],{"class":154},[144,164930,26056],{"class":150},[144,164932,152155],{"class":154},[144,164934,164935,164937,164939,164941,164944,164946],{"class":146,"line":1342},[144,164936,31312],{"class":203},[144,164938,164585],{"class":154},[144,164940,62692],{"class":259},[144,164942,164943],{"class":154},"], student[",[144,164945,151485],{"class":259},[144,164947,4687],{"class":154},[14,164949,164950],{},"统计平均分：",[135,164952,164954],{"className":30391,"code":164953,"language":30393,"meta":30,"style":30},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[141,164955,164956,164964,164968,164978,164990,164994,165009],{"__ignoreMap":30},[144,164957,164958,164960,164962],{"class":146,"line":147},[144,164959,157273],{"class":154},[144,164961,200],{"class":150},[144,164963,47346],{"class":203},[144,164965,164966],{"class":146,"line":66},[144,164967,2430],{"emptyLinePlaceholder":72},[144,164969,164970,164972,164974,164976],{"class":146,"line":1210},[144,164971,3055],{"class":150},[144,164973,152150],{"class":154},[144,164975,26056],{"class":150},[144,164977,152155],{"class":154},[144,164979,164980,164982,164984,164986,164988],{"class":146,"line":1225},[144,164981,159320],{"class":154},[144,164983,9508],{"class":150},[144,164985,152162],{"class":154},[144,164987,151485],{"class":259},[144,164989,33259],{"class":154},[144,164991,164992],{"class":146,"line":1231},[144,164993,2430],{"emptyLinePlaceholder":72},[144,164995,164996,164998,165000,165002,165004,165006],{"class":146,"line":1245},[144,164997,163787],{"class":154},[144,164999,200],{"class":150},[144,165001,163792],{"class":154},[144,165003,739],{"class":150},[144,165005,7362],{"class":203},[144,165007,165008],{"class":154},"(students)\n",[144,165010,165011,165013,165015,165017,165019,165021,165023,165025,165027,165029],{"class":146,"line":1251},[144,165012,30428],{"class":203},[144,165014,155],{"class":154},[144,165016,207],{"class":150},[144,165018,163810],{"class":259},[144,165020,1051],{"class":203},[144,165022,163815],{"class":154},[144,165024,157172],{"class":150},[144,165026,1101],{"class":203},[144,165028,406],{"class":259},[144,165030,161],{"class":154},[14,165032,165033],{},"查找学生：",[135,165035,165037],{"className":30391,"code":165036,"language":30393,"meta":30,"style":30},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[141,165038,165039,165054,165058,165068,165082,165088,165092,165098],{"__ignoreMap":30},[144,165040,165041,165043,165045,165047,165049,165052],{"class":146,"line":147},[144,165042,111591],{"class":154},[144,165044,200],{"class":150},[144,165046,60618],{"class":203},[144,165048,155],{"class":154},[144,165050,165051],{"class":259},"\"请输入学生姓名:\"",[144,165053,161],{"class":154},[144,165055,165056],{"class":146,"line":66},[144,165057,2430],{"emptyLinePlaceholder":72},[144,165059,165060,165062,165064,165066],{"class":146,"line":1210},[144,165061,3055],{"class":150},[144,165063,152150],{"class":154},[144,165065,26056],{"class":150},[144,165067,152155],{"class":154},[144,165069,165070,165072,165074,165076,165078,165080],{"class":146,"line":1225},[144,165071,3131],{"class":150},[144,165073,152162],{"class":154},[144,165075,62692],{"class":259},[144,165077,4473],{"class":154},[144,165079,2979],{"class":150},[144,165081,160445],{"class":154},[144,165083,165084,165086],{"class":146,"line":1231},[144,165085,32464],{"class":203},[144,165087,150055],{"class":154},[144,165089,165090],{"class":146,"line":1245},[144,165091,31640],{"class":150},[144,165093,165094,165096],{"class":146,"line":1251},[144,165095,1731],{"class":150},[144,165097,3769],{"class":154},[144,165099,165100,165102,165104,165107],{"class":146,"line":1342},[144,165101,31312],{"class":203},[144,165103,155],{"class":154},[144,165105,165106],{"class":259},"\"没有找到\"",[144,165108,161],{"class":154},[18,165110,165112],{"id":165111},"_613-容器通用操作","6.13 容器通用操作",[14,165114,165115],{},"长度：",[135,165117,165119],{"className":30391,"code":165118,"language":30393,"meta":30,"style":30},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[141,165120,165121,165140,165150],{"__ignoreMap":30},[144,165122,165123,165125,165128,165130,165132,165134,165136,165138],{"class":146,"line":147},[144,165124,7389],{"class":203},[144,165126,165127],{"class":154},"([",[144,165129,372],{"class":203},[144,165131,12466],{"class":154},[144,165133,232],{"class":203},[144,165135,12466],{"class":154},[144,165137,226],{"class":203},[144,165139,4687],{"class":154},[144,165141,165142,165144,165146,165148],{"class":146,"line":66},[144,165143,7389],{"class":203},[144,165145,155],{"class":154},[144,165147,155893],{"class":259},[144,165149,161],{"class":154},[144,165151,165152,165154,165157,165159,165161,165163],{"class":146,"line":1210},[144,165153,7389],{"class":203},[144,165155,165156],{"class":154},"({",[144,165158,62692],{"class":259},[144,165160,51450],{"class":154},[144,165162,149901],{"class":259},[144,165164,165165],{"class":154},"})\n",[14,165167,165168],{},"最大最小：",[135,165170,165172],{"className":30391,"code":165171,"language":30393,"meta":30,"style":30},"max([1, 2, 3])\nmin([1, 2, 3])\n",[141,165173,165174,165192],{"__ignoreMap":30},[144,165175,165176,165178,165180,165182,165184,165186,165188,165190],{"class":146,"line":147},[144,165177,6046],{"class":203},[144,165179,165127],{"class":154},[144,165181,372],{"class":203},[144,165183,12466],{"class":154},[144,165185,232],{"class":203},[144,165187,12466],{"class":154},[144,165189,226],{"class":203},[144,165191,4687],{"class":154},[144,165193,165194,165197,165199,165201,165203,165205,165207,165209],{"class":146,"line":66},[144,165195,165196],{"class":203},"min",[144,165198,165127],{"class":154},[144,165200,372],{"class":203},[144,165202,12466],{"class":154},[144,165204,232],{"class":203},[144,165206,12466],{"class":154},[144,165208,226],{"class":203},[144,165210,4687],{"class":154},[14,165212,165213],{},"求和：",[135,165215,165217],{"className":30391,"code":165216,"language":30393,"meta":30,"style":30},"sum([1, 2, 3])\n",[141,165218,165219],{"__ignoreMap":30},[144,165220,165221,165224,165226,165228,165230,165232,165234,165236],{"class":146,"line":147},[144,165222,165223],{"class":203},"sum",[144,165225,165127],{"class":154},[144,165227,372],{"class":203},[144,165229,12466],{"class":154},[144,165231,232],{"class":203},[144,165233,12466],{"class":154},[144,165235,226],{"class":203},[144,165237,4687],{"class":154},[14,165239,163484],{},[135,165241,165243],{"className":30391,"code":165242,"language":30393,"meta":30,"style":30},"sorted([3, 1, 2])\n",[141,165244,165245],{"__ignoreMap":30},[144,165246,165247,165250,165252,165254,165256,165258,165260,165262],{"class":146,"line":147},[144,165248,165249],{"class":203},"sorted",[144,165251,165127],{"class":154},[144,165253,226],{"class":203},[144,165255,12466],{"class":154},[144,165257,372],{"class":203},[144,165259,12466],{"class":154},[144,165261,232],{"class":203},[144,165263,4687],{"class":154},[14,165265,165266],{},"类型转换：",[135,165268,165270],{"className":30391,"code":165269,"language":30393,"meta":30,"style":30},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[141,165271,165272,165282,165300],{"__ignoreMap":30},[144,165273,165274,165276,165278,165280],{"class":146,"line":147},[144,165275,154083],{"class":203},[144,165277,155],{"class":154},[144,165279,155893],{"class":259},[144,165281,161],{"class":154},[144,165283,165284,165286,165288,165290,165292,165294,165296,165298],{"class":146,"line":66},[144,165285,155278],{"class":203},[144,165287,165127],{"class":154},[144,165289,372],{"class":203},[144,165291,12466],{"class":154},[144,165293,232],{"class":203},[144,165295,12466],{"class":154},[144,165297,226],{"class":203},[144,165299,4687],{"class":154},[144,165301,165302,165304,165306,165308,165310,165312,165314,165316,165318,165320],{"class":146,"line":1210},[144,165303,155303],{"class":203},[144,165305,165127],{"class":154},[144,165307,372],{"class":203},[144,165309,12466],{"class":154},[144,165311,372],{"class":203},[144,165313,12466],{"class":154},[144,165315,232],{"class":203},[144,165317,12466],{"class":154},[144,165319,226],{"class":203},[144,165321,4687],{"class":154},[14,165323,165324],{},"成员判断：",[135,165326,165328],{"className":30391,"code":165327,"language":30393,"meta":30,"style":30},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[141,165329,165330,165347,165371],{"__ignoreMap":30},[144,165331,165332,165334,165336,165339,165342,165345],{"class":146,"line":147},[144,165333,30428],{"class":203},[144,165335,155],{"class":154},[144,165337,165338],{"class":259},"\"a\"",[144,165340,165341],{"class":150}," in",[144,165343,165344],{"class":259}," \"abc\"",[144,165346,161],{"class":154},[144,165348,165349,165351,165353,165355,165357,165359,165361,165363,165365,165367,165369],{"class":146,"line":66},[144,165350,30428],{"class":203},[144,165352,155],{"class":154},[144,165354,372],{"class":203},[144,165356,165341],{"class":150},[144,165358,52239],{"class":154},[144,165360,372],{"class":203},[144,165362,12466],{"class":154},[144,165364,232],{"class":203},[144,165366,12466],{"class":154},[144,165368,226],{"class":203},[144,165370,4687],{"class":154},[144,165372,165373,165375,165377,165379,165381,165383,165385,165387,165389],{"class":146,"line":1210},[144,165374,30428],{"class":203},[144,165376,155],{"class":154},[144,165378,62692],{"class":259},[144,165380,165341],{"class":150},[144,165382,4478],{"class":154},[144,165384,62692],{"class":259},[144,165386,51450],{"class":154},[144,165388,149901],{"class":259},[144,165390,165165],{"class":154},[18,165392,165394],{"id":165393},"_614-推导式","6.14 推导式",[14,165396,165397],{},"推导式用于快速生成容器。",[14,165399,165400],{},"列表推导式：",[135,165402,165404],{"className":30391,"code":165403,"language":30393,"meta":30,"style":30},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[141,165405,165406,165433],{"__ignoreMap":30},[144,165407,165408,165410,165412,165415,165417,165419,165421,165423,165425,165427,165429,165431],{"class":146,"line":147},[144,165409,164113],{"class":154},[144,165411,200],{"class":150},[144,165413,165414],{"class":154}," [i ",[144,165416,3055],{"class":150},[144,165418,9469],{"class":154},[144,165420,26056],{"class":150},[144,165422,32456],{"class":203},[144,165424,155],{"class":154},[144,165426,372],{"class":203},[144,165428,12466],{"class":154},[144,165430,499],{"class":203},[144,165432,97313],{"class":154},[144,165434,165435,165437],{"class":146,"line":66},[144,165436,30428],{"class":203},[144,165438,164329],{"class":154},[14,165440,165441],{},"带条件：",[135,165443,165445],{"className":30391,"code":165444,"language":30393,"meta":30,"style":30},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[141,165446,165447,165488],{"__ignoreMap":30},[144,165448,165449,165452,165454,165456,165458,165460,165462,165464,165466,165468,165470,165472,165474,165476,165478,165480,165482,165484,165486],{"class":146,"line":147},[144,165450,165451],{"class":154},"even_nums ",[144,165453,200],{"class":150},[144,165455,165414],{"class":154},[144,165457,3055],{"class":150},[144,165459,9469],{"class":154},[144,165461,26056],{"class":150},[144,165463,32456],{"class":203},[144,165465,155],{"class":154},[144,165467,372],{"class":203},[144,165469,12466],{"class":154},[144,165471,492],{"class":203},[144,165473,13745],{"class":154},[144,165475,1561],{"class":150},[144,165477,9469],{"class":154},[144,165479,483],{"class":150},[144,165481,14786],{"class":203},[144,165483,101572],{"class":150},[144,165485,4123],{"class":203},[144,165487,33259],{"class":154},[144,165489,165490,165492],{"class":146,"line":66},[144,165491,30428],{"class":203},[144,165493,165494],{"class":154},"(even_nums)\n",[14,165496,165497],{},"字典推导式：",[135,165499,165501],{"className":30391,"code":165500,"language":30393,"meta":30,"style":30},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[141,165502,165503,165537],{"__ignoreMap":30},[144,165504,165505,165508,165510,165513,165515,165517,165520,165522,165524,165526,165528,165530,165532,165534],{"class":146,"line":147},[144,165506,165507],{"class":154},"squares ",[144,165509,200],{"class":150},[144,165511,165512],{"class":154}," {i: i ",[144,165514,10692],{"class":150},[144,165516,14786],{"class":203},[144,165518,165519],{"class":150}," for",[144,165521,9469],{"class":154},[144,165523,26056],{"class":150},[144,165525,32456],{"class":203},[144,165527,155],{"class":154},[144,165529,372],{"class":203},[144,165531,12466],{"class":154},[144,165533,499],{"class":203},[144,165535,165536],{"class":154},")}\n",[144,165538,165539,165541],{"class":146,"line":66},[144,165540,30428],{"class":203},[144,165542,165543],{"class":154},"(squares)\n",[14,165545,165546],{},"集合推导式：",[135,165548,165550],{"className":30391,"code":165549,"language":30393,"meta":30,"style":30},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[141,165551,165552,165573],{"__ignoreMap":30},[144,165553,165554,165557,165559,165562,165564,165566,165568,165571],{"class":146,"line":147},[144,165555,165556],{"class":154},"chars ",[144,165558,200],{"class":150},[144,165560,165561],{"class":154}," {ch ",[144,165563,3055],{"class":150},[144,165565,159705],{"class":154},[144,165567,26056],{"class":150},[144,165569,165570],{"class":259}," \"hello\"",[144,165572,1595],{"class":154},[144,165574,165575,165577],{"class":146,"line":66},[144,165576,30428],{"class":203},[144,165578,165579],{"class":154},"(chars)\n",[14,165581,165582],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[18,165584,165586],{"id":165585},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[135,165588,165590],{"className":30391,"code":165589,"language":30393,"meta":30,"style":30},"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",[141,165591,165592,165600,165620,165640,165660,165680,165684,165688,165696,165710,165719,165723,165733,165745,165749,165769,165778,165782,165798,165803,165807,165821,165825,165847,165883],{"__ignoreMap":30},[144,165593,165594,165596,165598],{"class":146,"line":147},[144,165595,159729],{"class":154},[144,165597,200],{"class":150},[144,165599,55460],{"class":154},[144,165601,165602,165604,165606,165608,165610,165612,165614,165616,165618],{"class":146,"line":66},[144,165603,148398],{"class":154},[144,165605,62692],{"class":259},[144,165607,51450],{"class":154},[144,165609,149901],{"class":259},[144,165611,12466],{"class":154},[144,165613,151485],{"class":259},[144,165615,51450],{"class":154},[144,165617,1144],{"class":203},[144,165619,4960],{"class":154},[144,165621,165622,165624,165626,165628,165630,165632,165634,165636,165638],{"class":146,"line":1210},[144,165623,148398],{"class":154},[144,165625,62692],{"class":259},[144,165627,51450],{"class":154},[144,165629,150949],{"class":259},[144,165631,12466],{"class":154},[144,165633,151485],{"class":259},[144,165635,51450],{"class":154},[144,165637,966],{"class":203},[144,165639,4960],{"class":154},[144,165641,165642,165644,165646,165648,165650,165652,165654,165656,165658],{"class":146,"line":1225},[144,165643,148398],{"class":154},[144,165645,62692],{"class":259},[144,165647,51450],{"class":154},[144,165649,159744],{"class":259},[144,165651,12466],{"class":154},[144,165653,151485],{"class":259},[144,165655,51450],{"class":154},[144,165657,561],{"class":203},[144,165659,4960],{"class":154},[144,165661,165662,165664,165666,165668,165670,165672,165674,165676,165678],{"class":146,"line":1231},[144,165663,148398],{"class":154},[144,165665,62692],{"class":259},[144,165667,51450],{"class":154},[144,165669,163323],{"class":259},[144,165671,12466],{"class":154},[144,165673,151485],{"class":259},[144,165675,51450],{"class":154},[144,165677,1037],{"class":203},[144,165679,4960],{"class":154},[144,165681,165682],{"class":146,"line":1245},[144,165683,33259],{"class":154},[144,165685,165686],{"class":146,"line":1251},[144,165687,2430],{"emptyLinePlaceholder":72},[144,165689,165690,165692,165694],{"class":146,"line":1342},[144,165691,157273],{"class":154},[144,165693,200],{"class":150},[144,165695,47346],{"class":203},[144,165697,165698,165701,165703,165706,165708],{"class":146,"line":1348},[144,165699,165700],{"class":154},"max_student ",[144,165702,200],{"class":150},[144,165704,165705],{"class":154}," students[",[144,165707,346],{"class":203},[144,165709,33259],{"class":154},[144,165711,165712,165715,165717],{"class":146,"line":1360},[144,165713,165714],{"class":154},"passed ",[144,165716,200],{"class":150},[144,165718,51851],{"class":154},[144,165720,165721],{"class":146,"line":1642},[144,165722,2430],{"emptyLinePlaceholder":72},[144,165724,165725,165727,165729,165731],{"class":146,"line":1647},[144,165726,3055],{"class":150},[144,165728,152150],{"class":154},[144,165730,26056],{"class":150},[144,165732,152155],{"class":154},[144,165734,165735,165737,165739,165741,165743],{"class":146,"line":1653},[144,165736,159320],{"class":154},[144,165738,9508],{"class":150},[144,165740,152162],{"class":154},[144,165742,151485],{"class":259},[144,165744,33259],{"class":154},[144,165746,165747],{"class":146,"line":1658},[144,165748,2430],{"emptyLinePlaceholder":72},[144,165750,165751,165753,165755,165757,165759,165761,165764,165766],{"class":146,"line":1672},[144,165752,3131],{"class":150},[144,165754,152162],{"class":154},[144,165756,151485],{"class":259},[144,165758,4473],{"class":154},[144,165760,1115],{"class":150},[144,165762,165763],{"class":154}," max_student[",[144,165765,151485],{"class":259},[144,165767,165768],{"class":154},"]:\n",[144,165770,165771,165774,165776],{"class":146,"line":1677},[144,165772,165773],{"class":154},"        max_student ",[144,165775,200],{"class":150},[144,165777,152178],{"class":154},[144,165779,165780],{"class":146,"line":1683},[144,165781,2430],{"emptyLinePlaceholder":72},[144,165783,165784,165786,165788,165790,165792,165794,165796],{"class":146,"line":1704},[144,165785,3131],{"class":150},[144,165787,152162],{"class":154},[144,165789,151485],{"class":259},[144,165791,4473],{"class":154},[144,165793,1740],{"class":150},[144,165795,157850],{"class":203},[144,165797,3769],{"class":154},[144,165799,165800],{"class":146,"line":1709},[144,165801,165802],{"class":154},"        passed.append(student)\n",[144,165804,165805],{"class":146,"line":1723},[144,165806,2430],{"emptyLinePlaceholder":72},[144,165808,165809,165811,165813,165815,165817,165819],{"class":146,"line":1728},[144,165810,163787],{"class":154},[144,165812,200],{"class":150},[144,165814,163792],{"class":154},[144,165816,739],{"class":150},[144,165818,7362],{"class":203},[144,165820,165008],{"class":154},[144,165822,165823],{"class":146,"line":1757},[144,165824,2430],{"emptyLinePlaceholder":72},[144,165826,165827,165829,165831,165833,165835,165837,165839,165841,165843,165845],{"class":146,"line":1762},[144,165828,30428],{"class":203},[144,165830,155],{"class":154},[144,165832,207],{"class":150},[144,165834,163810],{"class":259},[144,165836,1051],{"class":203},[144,165838,163815],{"class":154},[144,165840,157172],{"class":150},[144,165842,1101],{"class":203},[144,165844,406],{"class":259},[144,165846,161],{"class":154},[144,165848,165849,165851,165853,165855,165858,165860,165863,165865,165867,165869,165871,165873,165875,165877,165879,165881],{"class":146,"line":1779},[144,165850,30428],{"class":203},[144,165852,155],{"class":154},[144,165854,207],{"class":150},[144,165856,165857],{"class":259},"\"最高分学生:",[144,165859,1051],{"class":203},[144,165861,165862],{"class":154},"max_student[",[144,165864,152895],{"class":259},[144,165866,1095],{"class":154},[144,165868,1101],{"class":203},[144,165870,4478],{"class":203},[144,165872,165862],{"class":154},[144,165874,152933],{"class":259},[144,165876,1095],{"class":154},[144,165878,1101],{"class":203},[144,165880,406],{"class":259},[144,165882,161],{"class":154},[144,165884,165885,165887,165889,165891,165894,165897,165900,165902,165904],{"class":146,"line":1784},[144,165886,30428],{"class":203},[144,165888,155],{"class":154},[144,165890,207],{"class":150},[144,165892,165893],{"class":259},"\"及格人数:",[144,165895,165896],{"class":203},"{len",[144,165898,165899],{"class":154},"(passed)",[144,165901,1101],{"class":203},[144,165903,406],{"class":259},[144,165905,161],{"class":154},[18,165907,165909],{"id":165908},"_616-易错点","6.16 易错点",[98,165911,165912,165915,165918,165921,165927,165936],{},[101,165913,165914],{},"列表可变，元组和字符串不可变。",[101,165916,165917],{},"切片结束位置不包含。",[101,165919,165920],{},"字典通过 key 取值，不是通过索引。",[101,165922,165923,165924,28398],{},"空集合要用 ",[141,165925,165926],{},"set()",[101,165928,104379,165929,165932,165933,28398],{},[141,165930,165931],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[141,165934,165935],{},"get()",[101,165937,165938],{},"嵌套容器要先看清楚每一层是什么类型。",[18,165940,165942],{"id":165941},"_617-本章练习","6.17 本章练习",[98,165944,165945,165948,165951,165954,165957],{},[101,165946,165947],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[101,165949,165950],{},"输入一句话，统计每个字符出现次数。",[101,165952,165953],{},"使用集合去除列表中的重复元素。",[101,165955,165956],{},"使用字典保存一个学生的信息，并实现修改成绩。",[101,165958,165959],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5157,165961,165962],{},"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":30,"searchDepth":66,"depth":66,"links":165964},[165965,165966,165967,165968,165969,165970,165971,165972,165973,165974,165975,165976,165977,165978,165979,165980,165981],{"id":162945,"depth":66,"text":162946},{"id":163062,"depth":66,"text":163063},{"id":163152,"depth":66,"text":163153},{"id":163276,"depth":66,"text":163277},{"id":163639,"depth":66,"text":163640},{"id":163826,"depth":66,"text":163827},{"id":163945,"depth":66,"text":163946},{"id":164087,"depth":66,"text":164088},{"id":164274,"depth":66,"text":164275},{"id":164518,"depth":66,"text":164519},{"id":164728,"depth":66,"text":164729},{"id":164813,"depth":66,"text":164814},{"id":165111,"depth":66,"text":165112},{"id":165393,"depth":66,"text":165394},{"id":165585,"depth":66,"text":165586},{"id":165908,"depth":66,"text":165909},{"id":165941,"depth":66,"text":165942},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162937,"description":23408},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":165988,"title":165989,"body":165990,"description":23408,"extension":70,"meta":168162,"navigation":72,"path":168163,"seo":168164,"stem":168165,"__hash__":168166},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":165991,"toc":168137},[165992,165995,165999,166002,166082,166085,166106,166109,166113,166116,166178,166181,166198,166202,166205,166250,166252,166260,166264,166267,166349,166352,166355,166380,166383,166406,166410,166413,166415,166477,166480,166482,166533,166537,166541,166547,166652,166656,166662,166733,166737,166740,166808,166811,166891,166895,166901,166937,166940,166943,167053,167059,167063,167066,167138,167141,167145,167149,167154,167216,167220,167225,167293,167297,167302,167418,167422,167425,167505,167508,167512,167515,167619,167621,167636,167639,167643,167781,167789,167793,167795,167806,167808,168066,168070,168102,168106,168134],[10,165993,165989],{"id":165994},"_7-函数进阶",[18,165996,165998],{"id":165997},"_71-多返回值","7.1 多返回值",[14,166000,166001],{},"Python 函数可以返回多个值，本质上返回的是元组。",[135,166003,166005],{"className":30391,"code":166004,"language":30393,"meta":30,"style":30},"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",[141,166006,166007,166016,166024,166032,166041,166048,166052,166056,166065,166071],{"__ignoreMap":30},[144,166008,166009,166011,166014],{"class":146,"line":147},[144,166010,31960],{"class":150},[144,166012,166013],{"class":1993}," get_info",[144,166015,31966],{"class":154},[144,166017,166018,166020,166022],{"class":146,"line":66},[144,166019,152383],{"class":154},[144,166021,200],{"class":150},[144,166023,149366],{"class":259},[144,166025,166026,166028,166030],{"class":146,"line":1210},[144,166027,152399],{"class":154},[144,166029,200],{"class":150},[144,166031,146564],{"class":203},[144,166033,166034,166036,166038],{"class":146,"line":1225},[144,166035,152414],{"class":154},[144,166037,200],{"class":150},[144,166039,166040],{"class":203}," 95\n",[144,166042,166043,166045],{"class":146,"line":1231},[144,166044,4120],{"class":150},[144,166046,166047],{"class":154}," name, age, score\n",[144,166049,166050],{"class":146,"line":1245},[144,166051,2430],{"emptyLinePlaceholder":72},[144,166053,166054],{"class":146,"line":1251},[144,166055,2430],{"emptyLinePlaceholder":72},[144,166057,166058,166060,166062],{"class":146,"line":1342},[144,166059,161319],{"class":154},[144,166061,200],{"class":150},[144,166063,166064],{"class":154}," get_info()\n",[144,166066,166067,166069],{"class":146,"line":1348},[144,166068,30428],{"class":203},[144,166070,76598],{"class":154},[144,166072,166073,166075,166077,166079],{"class":146,"line":1360},[144,166074,30428],{"class":203},[144,166076,155],{"class":154},[144,166078,103120],{"class":203},[144,166080,166081],{"class":154},"(result))\n",[14,166083,166084],{},"可以直接解包：",[135,166086,166088],{"className":30391,"code":166087,"language":30393,"meta":30,"style":30},"name, age, score = get_info()\nprint(name, age, score)\n",[141,166089,166090,166099],{"__ignoreMap":30},[144,166091,166092,166095,166097],{"class":146,"line":147},[144,166093,166094],{"class":154},"name, age, score ",[144,166096,200],{"class":150},[144,166098,166064],{"class":154},[144,166100,166101,166103],{"class":146,"line":66},[144,166102,30428],{"class":203},[144,166104,166105],{"class":154},"(name, age, score)\n",[14,166107,166108],{},"返回多个值适合函数需要同时给出多个结果时使用。",[18,166110,166112],{"id":166111},"_72-位置参数","7.2 位置参数",[14,166114,166115],{},"位置参数按顺序传递。",[135,166117,166119],{"className":30391,"code":166118,"language":30393,"meta":30,"style":30},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[141,166120,166121,166129,166157,166161,166165],{"__ignoreMap":30},[144,166122,166123,166125,166127],{"class":146,"line":147},[144,166124,31960],{"class":150},[144,166126,149385],{"class":1993},[144,166128,149388],{"class":154},[144,166130,166131,166133,166135,166137,166139,166141,166143,166145,166147,166149,166151,166153,166155],{"class":146,"line":66},[144,166132,31312],{"class":203},[144,166134,155],{"class":154},[144,166136,207],{"class":150},[144,166138,149399],{"class":259},[144,166140,1051],{"class":203},[144,166142,79823],{"class":154},[144,166144,1101],{"class":203},[144,166146,149408],{"class":259},[144,166148,1051],{"class":203},[144,166150,70234],{"class":154},[144,166152,1101],{"class":203},[144,166154,149417],{"class":259},[144,166156,161],{"class":154},[144,166158,166159],{"class":146,"line":1210},[144,166160,2430],{"emptyLinePlaceholder":72},[144,166162,166163],{"class":146,"line":1225},[144,166164,2430],{"emptyLinePlaceholder":72},[144,166166,166167,166170,166172,166174,166176],{"class":146,"line":1231},[144,166168,166169],{"class":154},"introduce(",[144,166171,149901],{"class":259},[144,166173,12466],{"class":154},[144,166175,805],{"class":203},[144,166177,161],{"class":154},[14,166179,166180],{},"顺序错了就会得到错误含义：",[135,166182,166184],{"className":30391,"code":166183,"language":30393,"meta":30,"style":30},"introduce(18, \"小明\")\n",[141,166185,166186],{"__ignoreMap":30},[144,166187,166188,166190,166192,166194,166196],{"class":146,"line":147},[144,166189,166169],{"class":154},[144,166191,805],{"class":203},[144,166193,12466],{"class":154},[144,166195,149901],{"class":259},[144,166197,161],{"class":154},[18,166199,166201],{"id":166200},"_73-关键字参数","7.3 关键字参数",[14,166203,166204],{},"关键字参数按参数名传递。",[135,166206,166208],{"className":30391,"code":166207,"language":30393,"meta":30,"style":30},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[141,166209,166210,166230],{"__ignoreMap":30},[144,166211,166212,166214,166216,166218,166220,166222,166224,166226,166228],{"class":146,"line":147},[144,166213,166169],{"class":154},[144,166215,79823],{"class":5247},[144,166217,200],{"class":150},[144,166219,149901],{"class":259},[144,166221,12466],{"class":154},[144,166223,70234],{"class":5247},[144,166225,200],{"class":150},[144,166227,805],{"class":203},[144,166229,161],{"class":154},[144,166231,166232,166234,166236,166238,166240,166242,166244,166246,166248],{"class":146,"line":66},[144,166233,166169],{"class":154},[144,166235,70234],{"class":5247},[144,166237,200],{"class":150},[144,166239,805],{"class":203},[144,166241,12466],{"class":154},[144,166243,79823],{"class":5247},[144,166245,200],{"class":150},[144,166247,149901],{"class":259},[144,166249,161],{"class":154},[14,166251,117947],{},[98,166253,166254,166257],{},[101,166255,166256],{},"顺序不容易错。",[101,166258,166259],{},"调用时可读性更强。",[18,166261,166263],{"id":166262},"_74-默认参数","7.4 默认参数",[14,166265,166266],{},"默认参数给参数设置默认值。",[135,166268,166270],{"className":30391,"code":166269,"language":30393,"meta":30,"style":30},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[141,166271,166272,166288,166318,166322,166326,166336],{"__ignoreMap":30},[144,166273,166274,166276,166278,166281,166283,166286],{"class":146,"line":147},[144,166275,31960],{"class":150},[144,166277,122106],{"class":1993},[144,166279,166280],{"class":154},"(host, port",[144,166282,200],{"class":150},[144,166284,166285],{"class":203},"3306",[144,166287,30799],{"class":154},[144,166289,166290,166292,166294,166296,166299,166301,166303,166305,166307,166309,166312,166314,166316],{"class":146,"line":66},[144,166291,31312],{"class":203},[144,166293,155],{"class":154},[144,166295,207],{"class":150},[144,166297,166298],{"class":259},"\"连接",[144,166300,1051],{"class":203},[144,166302,27408],{"class":154},[144,166304,1101],{"class":203},[144,166306,1014],{"class":259},[144,166308,1051],{"class":203},[144,166310,166311],{"class":154},"port",[144,166313,1101],{"class":203},[144,166315,406],{"class":259},[144,166317,161],{"class":154},[144,166319,166320],{"class":146,"line":1210},[144,166321,2430],{"emptyLinePlaceholder":72},[144,166323,166324],{"class":146,"line":1225},[144,166325,2430],{"emptyLinePlaceholder":72},[144,166327,166328,166331,166334],{"class":146,"line":1231},[144,166329,166330],{"class":154},"connect(",[144,166332,166333],{"class":259},"\"localhost\"",[144,166335,161],{"class":154},[144,166337,166338,166340,166342,166344,166347],{"class":146,"line":1245},[144,166339,166330],{"class":154},[144,166341,166333],{"class":259},[144,166343,12466],{"class":154},[144,166345,166346],{"class":203},"6379",[144,166348,161],{"class":154},[14,166350,166351],{},"注意：默认参数必须放在非默认参数后面。",[14,166353,166354],{},"错误：",[135,166356,166358],{"className":30391,"code":166357,"language":30393,"meta":30,"style":30},"def connect(port=3306, host):\n    pass\n",[141,166359,166360,166376],{"__ignoreMap":30},[144,166361,166362,166364,166366,166369,166371,166373],{"class":146,"line":147},[144,166363,31960],{"class":150},[144,166365,122106],{"class":1993},[144,166367,166368],{"class":154},"(port",[144,166370,200],{"class":150},[144,166372,166285],{"class":203},[144,166374,166375],{"class":154},", host):\n",[144,166377,166378],{"class":146,"line":66},[144,166379,149550],{"class":150},[14,166381,166382],{},"正确：",[135,166384,166386],{"className":30391,"code":166385,"language":30393,"meta":30,"style":30},"def connect(host, port=3306):\n    pass\n",[141,166387,166388,166402],{"__ignoreMap":30},[144,166389,166390,166392,166394,166396,166398,166400],{"class":146,"line":147},[144,166391,31960],{"class":150},[144,166393,122106],{"class":1993},[144,166395,166280],{"class":154},[144,166397,200],{"class":150},[144,166399,166285],{"class":203},[144,166401,30799],{"class":154},[144,166403,166404],{"class":146,"line":66},[144,166405,149550],{"class":150},[18,166407,166409],{"id":166408},"_75-默认参数的坑","7.5 默认参数的坑",[14,166411,166412],{},"不要使用可变对象作为默认参数。",[14,166414,157636],{},[135,166416,166418],{"className":30391,"code":166417,"language":30393,"meta":30,"style":30},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[141,166419,166420,166435,166440,166447,166451,166455,166466],{"__ignoreMap":30},[144,166421,166422,166424,166427,166430,166432],{"class":146,"line":147},[144,166423,31960],{"class":150},[144,166425,166426],{"class":1993}," add_item",[144,166428,166429],{"class":154},"(item, items",[144,166431,200],{"class":150},[144,166433,166434],{"class":154},"[]):\n",[144,166436,166437],{"class":146,"line":66},[144,166438,166439],{"class":154},"    items.append(item)\n",[144,166441,166442,166444],{"class":146,"line":1210},[144,166443,4120],{"class":150},[144,166445,166446],{"class":154}," items\n",[144,166448,166449],{"class":146,"line":1225},[144,166450,2430],{"emptyLinePlaceholder":72},[144,166452,166453],{"class":146,"line":1231},[144,166454,2430],{"emptyLinePlaceholder":72},[144,166456,166457,166459,166462,166464],{"class":146,"line":1245},[144,166458,30428],{"class":203},[144,166460,166461],{"class":154},"(add_item(",[144,166463,165338],{"class":259},[144,166465,30510],{"class":154},[144,166467,166468,166470,166472,166475],{"class":146,"line":1251},[144,166469,30428],{"class":203},[144,166471,166461],{"class":154},[144,166473,166474],{"class":259},"\"b\"",[144,166476,30510],{"class":154},[14,166478,166479],{},"第二次调用会复用第一次的列表。",[14,166481,155901],{},[135,166483,166485],{"className":30391,"code":166484,"language":30393,"meta":30,"style":30},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[141,166486,166487,166501,166514,166523,166527],{"__ignoreMap":30},[144,166488,166489,166491,166493,166495,166497,166499],{"class":146,"line":147},[144,166490,31960],{"class":150},[144,166492,166426],{"class":1993},[144,166494,166429],{"class":154},[144,166496,200],{"class":150},[144,166498,95699],{"class":203},[144,166500,30799],{"class":154},[144,166502,166503,166505,166508,166510,166512],{"class":146,"line":66},[144,166504,3131],{"class":150},[144,166506,166507],{"class":154}," items ",[144,166509,38940],{"class":150},[144,166511,38946],{"class":203},[144,166513,3769],{"class":154},[144,166515,166516,166519,166521],{"class":146,"line":1210},[144,166517,166518],{"class":154},"        items ",[144,166520,200],{"class":150},[144,166522,51851],{"class":154},[144,166524,166525],{"class":146,"line":1225},[144,166526,166439],{"class":154},[144,166528,166529,166531],{"class":146,"line":1231},[144,166530,4120],{"class":150},[144,166532,166446],{"class":154},[18,166534,166536],{"id":166535},"_76-不定长参数","7.6 不定长参数",[115,166538,166540],{"id":166539},"_761-args","7.6.1 *args",[14,166542,166543,166546],{},[141,166544,166545],{},"*args"," 接收任意数量的位置参数，得到元组。",[135,166548,166550],{"className":30391,"code":166549,"language":30393,"meta":30,"style":30},"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",[141,166551,166552,166565,166573,166584,166593,166599,166603,166607,166626],{"__ignoreMap":30},[144,166553,166554,166556,166558,166560,166562],{"class":146,"line":147},[144,166555,31960],{"class":150},[144,166557,5240],{"class":1993},[144,166559,155],{"class":154},[144,166561,610],{"class":150},[144,166563,166564],{"class":154},"args):\n",[144,166566,166567,166569,166571],{"class":146,"line":66},[144,166568,159320],{"class":154},[144,166570,200],{"class":150},[144,166572,47346],{"class":203},[144,166574,166575,166577,166579,166581],{"class":146,"line":1210},[144,166576,3231],{"class":150},[144,166578,156193],{"class":154},[144,166580,26056],{"class":150},[144,166582,166583],{"class":154}," args:\n",[144,166585,166586,166588,166590],{"class":146,"line":1225},[144,166587,159995],{"class":154},[144,166589,9508],{"class":150},[144,166591,166592],{"class":154}," num\n",[144,166594,166595,166597],{"class":146,"line":1231},[144,166596,4120],{"class":150},[144,166598,162300],{"class":154},[144,166600,166601],{"class":146,"line":1245},[144,166602,2430],{"emptyLinePlaceholder":72},[144,166604,166605],{"class":146,"line":1251},[144,166606,2430],{"emptyLinePlaceholder":72},[144,166608,166609,166611,166614,166616,166618,166620,166622,166624],{"class":146,"line":1342},[144,166610,30428],{"class":203},[144,166612,166613],{"class":154},"(add(",[144,166615,372],{"class":203},[144,166617,12466],{"class":154},[144,166619,232],{"class":203},[144,166621,12466],{"class":154},[144,166623,226],{"class":203},[144,166625,30510],{"class":154},[144,166627,166628,166630,166632,166634,166636,166638,166640,166642,166644,166646,166648,166650],{"class":146,"line":1348},[144,166629,30428],{"class":203},[144,166631,166613],{"class":154},[144,166633,372],{"class":203},[144,166635,12466],{"class":154},[144,166637,232],{"class":203},[144,166639,12466],{"class":154},[144,166641,226],{"class":203},[144,166643,12466],{"class":154},[144,166645,448],{"class":203},[144,166647,12466],{"class":154},[144,166649,474],{"class":203},[144,166651,30510],{"class":154},[115,166653,166655],{"id":166654},"_762-kwargs","7.6.2 **kwargs",[14,166657,166658,166661],{},[141,166659,166660],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[135,166663,166665],{"className":30391,"code":166664,"language":30393,"meta":30,"style":30},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[141,166666,166667,166680,166691,166697,166701,166705],{"__ignoreMap":30},[144,166668,166669,166671,166673,166675,166677],{"class":146,"line":147},[144,166670,31960],{"class":150},[144,166672,161958],{"class":1993},[144,166674,155],{"class":154},[144,166676,10692],{"class":150},[144,166678,166679],{"class":154},"kwargs):\n",[144,166681,166682,166684,166686,166688],{"class":146,"line":66},[144,166683,3231],{"class":150},[144,166685,164798],{"class":154},[144,166687,26056],{"class":150},[144,166689,166690],{"class":154}," kwargs.items():\n",[144,166692,166693,166695],{"class":146,"line":1210},[144,166694,32464],{"class":203},[144,166696,164810],{"class":154},[144,166698,166699],{"class":146,"line":1225},[144,166700,2430],{"emptyLinePlaceholder":72},[144,166702,166703],{"class":146,"line":1231},[144,166704,2430],{"emptyLinePlaceholder":72},[144,166706,166707,166709,166711,166713,166715,166717,166719,166721,166723,166725,166727,166729,166731],{"class":146,"line":1245},[144,166708,162023],{"class":154},[144,166710,79823],{"class":5247},[144,166712,200],{"class":150},[144,166714,149901],{"class":259},[144,166716,12466],{"class":154},[144,166718,70234],{"class":5247},[144,166720,200],{"class":150},[144,166722,805],{"class":203},[144,166724,12466],{"class":154},[144,166726,70285],{"class":5247},[144,166728,200],{"class":150},[144,166730,69282],{"class":259},[144,166732,161],{"class":154},[18,166734,166736],{"id":166735},"_77-参数解包","7.7 参数解包",[14,166738,166739],{},"列表或元组解包为位置参数：",[135,166741,166743],{"className":30391,"code":166742,"language":30393,"meta":30,"style":30},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[141,166744,166745,166754,166769,166773,166777,166797],{"__ignoreMap":30},[144,166746,166747,166749,166751],{"class":146,"line":147},[144,166748,31960],{"class":150},[144,166750,5240],{"class":1993},[144,166752,166753],{"class":154},"(a, b, c):\n",[144,166755,166756,166758,166760,166762,166764,166766],{"class":146,"line":66},[144,166757,4120],{"class":150},[144,166759,10900],{"class":154},[144,166761,636],{"class":150},[144,166763,10913],{"class":154},[144,166765,636],{"class":150},[144,166767,166768],{"class":154}," c\n",[144,166770,166771],{"class":146,"line":1210},[144,166772,2430],{"emptyLinePlaceholder":72},[144,166774,166775],{"class":146,"line":1225},[144,166776,2430],{"emptyLinePlaceholder":72},[144,166778,166779,166781,166783,166785,166787,166789,166791,166793,166795],{"class":146,"line":1231},[144,166780,164113],{"class":154},[144,166782,200],{"class":150},[144,166784,52239],{"class":154},[144,166786,372],{"class":203},[144,166788,12466],{"class":154},[144,166790,232],{"class":203},[144,166792,12466],{"class":154},[144,166794,226],{"class":203},[144,166796,33259],{"class":154},[144,166798,166799,166801,166803,166805],{"class":146,"line":1245},[144,166800,30428],{"class":203},[144,166802,166613],{"class":154},[144,166804,610],{"class":150},[144,166806,166807],{"class":154},"nums))\n",[14,166809,166810],{},"字典解包为关键字参数：",[135,166812,166814],{"className":30391,"code":166813,"language":30393,"meta":30,"style":30},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[141,166815,166816,166824,166850,166854,166858,166882],{"__ignoreMap":30},[144,166817,166818,166820,166822],{"class":146,"line":147},[144,166819,31960],{"class":150},[144,166821,149385],{"class":1993},[144,166823,149388],{"class":154},[144,166825,166826,166828,166830,166832,166834,166836,166838,166840,166842,166844,166846,166848],{"class":146,"line":66},[144,166827,31312],{"class":203},[144,166829,155],{"class":154},[144,166831,207],{"class":150},[144,166833,406],{"class":259},[144,166835,1051],{"class":203},[144,166837,79823],{"class":154},[144,166839,1101],{"class":203},[144,166841,4478],{"class":203},[144,166843,70234],{"class":154},[144,166845,1101],{"class":203},[144,166847,406],{"class":259},[144,166849,161],{"class":154},[144,166851,166852],{"class":146,"line":1210},[144,166853,2430],{"emptyLinePlaceholder":72},[144,166855,166856],{"class":146,"line":1225},[144,166857,2430],{"emptyLinePlaceholder":72},[144,166859,166860,166862,166864,166866,166868,166870,166872,166874,166876,166878,166880],{"class":146,"line":1231},[144,166861,116327],{"class":154},[144,166863,200],{"class":150},[144,166865,4478],{"class":154},[144,166867,62692],{"class":259},[144,166869,51450],{"class":154},[144,166871,149901],{"class":259},[144,166873,12466],{"class":154},[144,166875,69137],{"class":259},[144,166877,51450],{"class":154},[144,166879,805],{"class":203},[144,166881,1595],{"class":154},[144,166883,166884,166886,166888],{"class":146,"line":1245},[144,166885,166169],{"class":154},[144,166887,10692],{"class":150},[144,166889,166890],{"class":154},"info)\n",[18,166892,166894],{"id":166893},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,166896,166897,166900],{},[141,166898,166899],{},"lambda"," 用于定义简单匿名函数。",[135,166902,166904],{"className":30391,"code":166903,"language":30393,"meta":30,"style":30},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[141,166905,166906,166923],{"__ignoreMap":30},[144,166907,166908,166911,166913,166916,166919,166921],{"class":146,"line":147},[144,166909,166910],{"class":154},"add ",[144,166912,200],{"class":150},[144,166914,166915],{"class":150}," lambda",[144,166917,166918],{"class":154}," a, b: a ",[144,166920,636],{"class":150},[144,166922,151117],{"class":154},[144,166924,166925,166927,166929,166931,166933,166935],{"class":146,"line":66},[144,166926,30428],{"class":203},[144,166928,166613],{"class":154},[144,166930,372],{"class":203},[144,166932,12466],{"class":154},[144,166934,232],{"class":203},[144,166936,30510],{"class":154},[14,166938,166939],{},"常和排序、过滤等函数一起使用。",[14,166941,166942],{},"按分数排序：",[135,166944,166946],{"className":30391,"code":166945,"language":30393,"meta":30,"style":30},"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",[141,166947,166948,166956,166976,166996,167016,167020,167024,167047],{"__ignoreMap":30},[144,166949,166950,166952,166954],{"class":146,"line":147},[144,166951,159729],{"class":154},[144,166953,200],{"class":150},[144,166955,55460],{"class":154},[144,166957,166958,166960,166962,166964,166966,166968,166970,166972,166974],{"class":146,"line":66},[144,166959,148398],{"class":154},[144,166961,62692],{"class":259},[144,166963,51450],{"class":154},[144,166965,149901],{"class":259},[144,166967,12466],{"class":154},[144,166969,151485],{"class":259},[144,166971,51450],{"class":154},[144,166973,1144],{"class":203},[144,166975,4960],{"class":154},[144,166977,166978,166980,166982,166984,166986,166988,166990,166992,166994],{"class":146,"line":1210},[144,166979,148398],{"class":154},[144,166981,62692],{"class":259},[144,166983,51450],{"class":154},[144,166985,150949],{"class":259},[144,166987,12466],{"class":154},[144,166989,151485],{"class":259},[144,166991,51450],{"class":154},[144,166993,966],{"class":203},[144,166995,4960],{"class":154},[144,166997,166998,167000,167002,167004,167006,167008,167010,167012,167014],{"class":146,"line":1225},[144,166999,148398],{"class":154},[144,167001,62692],{"class":259},[144,167003,51450],{"class":154},[144,167005,159744],{"class":259},[144,167007,12466],{"class":154},[144,167009,151485],{"class":259},[144,167011,51450],{"class":154},[144,167013,561],{"class":203},[144,167015,4960],{"class":154},[144,167017,167018],{"class":146,"line":1231},[144,167019,33259],{"class":154},[144,167021,167022],{"class":146,"line":1245},[144,167023,2430],{"emptyLinePlaceholder":72},[144,167025,167026,167029,167031,167033,167035,167037,167039,167041,167043,167045],{"class":146,"line":1251},[144,167027,167028],{"class":154},"students.sort(",[144,167030,153959],{"class":5247},[144,167032,153962],{"class":150},[144,167034,153965],{"class":154},[144,167036,151485],{"class":259},[144,167038,112215],{"class":154},[144,167040,163541],{"class":5247},[144,167042,200],{"class":150},[144,167044,31489],{"class":203},[144,167046,161],{"class":154},[144,167048,167049,167051],{"class":146,"line":1342},[144,167050,30428],{"class":203},[144,167052,165008],{"class":154},[14,167054,167055,167056,167058],{},"如果逻辑复杂，不要硬写 ",[141,167057,166899],{},"，定义普通函数更清晰。",[18,167060,167062],{"id":167061},"_79-函数作为参数","7.9 函数作为参数",[14,167064,167065],{},"函数可以作为参数传给另一个函数。",[135,167067,167069],{"className":30391,"code":167068,"language":30393,"meta":30,"style":30},"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",[141,167070,167071,167079,167089,167093,167097,167107,167114,167118,167122],{"__ignoreMap":30},[144,167072,167073,167075,167077],{"class":146,"line":147},[144,167074,31960],{"class":150},[144,167076,5240],{"class":1993},[144,167078,151106],{"class":154},[144,167080,167081,167083,167085,167087],{"class":146,"line":66},[144,167082,4120],{"class":150},[144,167084,10900],{"class":154},[144,167086,636],{"class":150},[144,167088,151117],{"class":154},[144,167090,167091],{"class":146,"line":1210},[144,167092,2430],{"emptyLinePlaceholder":72},[144,167094,167095],{"class":146,"line":1225},[144,167096,2430],{"emptyLinePlaceholder":72},[144,167098,167099,167101,167104],{"class":146,"line":1231},[144,167100,31960],{"class":150},[144,167102,167103],{"class":1993}," calculate",[144,167105,167106],{"class":154},"(a, b, func):\n",[144,167108,167109,167111],{"class":146,"line":1245},[144,167110,4120],{"class":150},[144,167112,167113],{"class":154}," func(a, b)\n",[144,167115,167116],{"class":146,"line":1251},[144,167117,2430],{"emptyLinePlaceholder":72},[144,167119,167120],{"class":146,"line":1342},[144,167121,2430],{"emptyLinePlaceholder":72},[144,167123,167124,167126,167129,167131,167133,167135],{"class":146,"line":1348},[144,167125,30428],{"class":203},[144,167127,167128],{"class":154},"(calculate(",[144,167130,601],{"class":203},[144,167132,12466],{"class":154},[144,167134,855],{"class":203},[144,167136,167137],{"class":154},", add))\n",[14,167139,167140],{},"这种思想在排序、回调、框架中经常出现。",[18,167142,167144],{"id":167143},"_710-mapfiltersorted","7.10 map、filter、sorted",[115,167146,167148],{"id":167147},"_7101-map","7.10.1 map",[14,167150,167151,167153],{},[141,167152,74057],{}," 对每个元素执行函数。",[135,167155,167157],{"className":30391,"code":167156,"language":30393,"meta":30,"style":30},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[141,167158,167159,167183,167206],{"__ignoreMap":30},[144,167160,167161,167163,167165,167167,167169,167171,167173,167175,167177,167179,167181],{"class":146,"line":147},[144,167162,164113],{"class":154},[144,167164,200],{"class":150},[144,167166,52239],{"class":154},[144,167168,372],{"class":203},[144,167170,12466],{"class":154},[144,167172,232],{"class":203},[144,167174,12466],{"class":154},[144,167176,226],{"class":203},[144,167178,12466],{"class":154},[144,167180,448],{"class":203},[144,167182,33259],{"class":154},[144,167184,167185,167187,167189,167192,167194,167196,167199,167201,167203],{"class":146,"line":66},[144,167186,161319],{"class":154},[144,167188,200],{"class":150},[144,167190,167191],{"class":203}," map",[144,167193,155],{"class":154},[144,167195,166899],{"class":150},[144,167197,167198],{"class":154}," x: x ",[144,167200,610],{"class":150},[144,167202,14786],{"class":203},[144,167204,167205],{"class":154},", nums)\n",[144,167207,167208,167210,167212,167214],{"class":146,"line":1210},[144,167209,30428],{"class":203},[144,167211,155],{"class":154},[144,167213,154083],{"class":203},[144,167215,166081],{"class":154},[115,167217,167219],{"id":167218},"_7102-filter","7.10.2 filter",[14,167221,167222,167224],{},[141,167223,80064],{}," 保留满足条件的元素。",[135,167226,167228],{"className":30391,"code":167227,"language":30393,"meta":30,"style":30},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[141,167229,167230,167258,167283],{"__ignoreMap":30},[144,167231,167232,167234,167236,167238,167240,167242,167244,167246,167248,167250,167252,167254,167256],{"class":146,"line":147},[144,167233,164113],{"class":154},[144,167235,200],{"class":150},[144,167237,52239],{"class":154},[144,167239,372],{"class":203},[144,167241,12466],{"class":154},[144,167243,232],{"class":203},[144,167245,12466],{"class":154},[144,167247,226],{"class":203},[144,167249,12466],{"class":154},[144,167251,448],{"class":203},[144,167253,12466],{"class":154},[144,167255,474],{"class":203},[144,167257,33259],{"class":154},[144,167259,167260,167262,167264,167267,167269,167271,167273,167275,167277,167279,167281],{"class":146,"line":66},[144,167261,161319],{"class":154},[144,167263,200],{"class":150},[144,167265,167266],{"class":203}," filter",[144,167268,155],{"class":154},[144,167270,166899],{"class":150},[144,167272,167198],{"class":154},[144,167274,483],{"class":150},[144,167276,14786],{"class":203},[144,167278,101572],{"class":150},[144,167280,4123],{"class":203},[144,167282,167205],{"class":154},[144,167284,167285,167287,167289,167291],{"class":146,"line":1210},[144,167286,30428],{"class":203},[144,167288,155],{"class":154},[144,167290,154083],{"class":203},[144,167292,166081],{"class":154},[115,167294,167296],{"id":167295},"_7103-sorted","7.10.3 sorted",[14,167298,167299,167301],{},[141,167300,165249],{}," 返回排序后的新列表。",[135,167303,167305],{"className":30391,"code":167304,"language":30393,"meta":30,"style":30},"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",[141,167306,167307,167315,167335,167355,167375,167379,167383,167412],{"__ignoreMap":30},[144,167308,167309,167311,167313],{"class":146,"line":147},[144,167310,159729],{"class":154},[144,167312,200],{"class":150},[144,167314,55460],{"class":154},[144,167316,167317,167319,167321,167323,167325,167327,167329,167331,167333],{"class":146,"line":66},[144,167318,148398],{"class":154},[144,167320,62692],{"class":259},[144,167322,51450],{"class":154},[144,167324,149901],{"class":259},[144,167326,12466],{"class":154},[144,167328,151485],{"class":259},[144,167330,51450],{"class":154},[144,167332,1144],{"class":203},[144,167334,4960],{"class":154},[144,167336,167337,167339,167341,167343,167345,167347,167349,167351,167353],{"class":146,"line":1210},[144,167338,148398],{"class":154},[144,167340,62692],{"class":259},[144,167342,51450],{"class":154},[144,167344,150949],{"class":259},[144,167346,12466],{"class":154},[144,167348,151485],{"class":259},[144,167350,51450],{"class":154},[144,167352,966],{"class":203},[144,167354,4960],{"class":154},[144,167356,167357,167359,167361,167363,167365,167367,167369,167371,167373],{"class":146,"line":1225},[144,167358,148398],{"class":154},[144,167360,62692],{"class":259},[144,167362,51450],{"class":154},[144,167364,159744],{"class":259},[144,167366,12466],{"class":154},[144,167368,151485],{"class":259},[144,167370,51450],{"class":154},[144,167372,561],{"class":203},[144,167374,4960],{"class":154},[144,167376,167377],{"class":146,"line":1231},[144,167378,33259],{"class":154},[144,167380,167381],{"class":146,"line":1245},[144,167382,2430],{"emptyLinePlaceholder":72},[144,167384,167385,167387,167389,167391,167394,167396,167398,167400,167402,167404,167406,167408,167410],{"class":146,"line":1251},[144,167386,161319],{"class":154},[144,167388,200],{"class":150},[144,167390,163617],{"class":203},[144,167392,167393],{"class":154},"(students, ",[144,167395,153959],{"class":5247},[144,167397,153962],{"class":150},[144,167399,153965],{"class":154},[144,167401,151485],{"class":259},[144,167403,112215],{"class":154},[144,167405,163541],{"class":5247},[144,167407,200],{"class":150},[144,167409,31489],{"class":203},[144,167411,161],{"class":154},[144,167413,167414,167416],{"class":146,"line":1342},[144,167415,30428],{"class":203},[144,167417,76598],{"class":154},[18,167419,167421],{"id":167420},"_711-闭包入门","7.11 闭包入门",[14,167423,167424],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[135,167426,167428],{"className":30391,"code":167427,"language":30393,"meta":30,"style":30},"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",[141,167429,167430,167440,167450,167461,167465,167472,167476,167480,167494],{"__ignoreMap":30},[144,167431,167432,167434,167437],{"class":146,"line":147},[144,167433,31960],{"class":150},[144,167435,167436],{"class":1993}," outer",[144,167438,167439],{"class":154},"(base):\n",[144,167441,167442,167444,167447],{"class":146,"line":66},[144,167443,30814],{"class":150},[144,167445,167446],{"class":1993}," inner",[144,167448,167449],{"class":154},"(num):\n",[144,167451,167452,167454,167457,167459],{"class":146,"line":1210},[144,167453,14783],{"class":150},[144,167455,167456],{"class":154}," base ",[144,167458,636],{"class":150},[144,167460,166592],{"class":154},[144,167462,167463],{"class":146,"line":1225},[144,167464,2430],{"emptyLinePlaceholder":72},[144,167466,167467,167469],{"class":146,"line":1231},[144,167468,4120],{"class":150},[144,167470,167471],{"class":154}," inner\n",[144,167473,167474],{"class":146,"line":1245},[144,167475,2430],{"emptyLinePlaceholder":72},[144,167477,167478],{"class":146,"line":1251},[144,167479,2430],{"emptyLinePlaceholder":72},[144,167481,167482,167485,167487,167490,167492],{"class":146,"line":1342},[144,167483,167484],{"class":154},"add_10 ",[144,167486,200],{"class":150},[144,167488,167489],{"class":154}," outer(",[144,167491,601],{"class":203},[144,167493,161],{"class":154},[144,167495,167496,167498,167501,167503],{"class":146,"line":1348},[144,167497,30428],{"class":203},[144,167499,167500],{"class":154},"(add_10(",[144,167502,474],{"class":203},[144,167504,30510],{"class":154},[14,167506,167507],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[18,167509,167511],{"id":167510},"_712-装饰器入门","7.12 装饰器入门",[14,167513,167514],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[135,167516,167518],{"className":30391,"code":167517,"language":30393,"meta":30,"style":30},"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",[141,167519,167520,167529,167538,167549,167554,167565,167569,167576,167580,167584,167589,167597,167607,167611,167615],{"__ignoreMap":30},[144,167521,167522,167524,167526],{"class":146,"line":147},[144,167523,31960],{"class":150},[144,167525,87204],{"class":1993},[144,167527,167528],{"class":154},"(func):\n",[144,167530,167531,167533,167536],{"class":146,"line":66},[144,167532,30814],{"class":150},[144,167534,167535],{"class":1993}," wrapper",[144,167537,31966],{"class":154},[144,167539,167540,167542,167544,167547],{"class":146,"line":1210},[144,167541,32464],{"class":203},[144,167543,155],{"class":154},[144,167545,167546],{"class":259},"\"函数开始执行\"",[144,167548,161],{"class":154},[144,167550,167551],{"class":146,"line":1225},[144,167552,167553],{"class":154},"        func()\n",[144,167555,167556,167558,167560,167563],{"class":146,"line":1231},[144,167557,32464],{"class":203},[144,167559,155],{"class":154},[144,167561,167562],{"class":259},"\"函数执行结束\"",[144,167564,161],{"class":154},[144,167566,167567],{"class":146,"line":1245},[144,167568,2430],{"emptyLinePlaceholder":72},[144,167570,167571,167573],{"class":146,"line":1251},[144,167572,4120],{"class":150},[144,167574,167575],{"class":154}," wrapper\n",[144,167577,167578],{"class":146,"line":1342},[144,167579,2430],{"emptyLinePlaceholder":72},[144,167581,167582],{"class":146,"line":1348},[144,167583,2430],{"emptyLinePlaceholder":72},[144,167585,167586],{"class":146,"line":1360},[144,167587,167588],{"class":1993},"@log\n",[144,167590,167591,167593,167595],{"class":146,"line":1642},[144,167592,31960],{"class":150},[144,167594,161009],{"class":1993},[144,167596,31966],{"class":154},[144,167598,167599,167601,167603,167605],{"class":146,"line":1647},[144,167600,31312],{"class":203},[144,167602,155],{"class":154},[144,167604,5875],{"class":259},[144,167606,161],{"class":154},[144,167608,167609],{"class":146,"line":1653},[144,167610,2430],{"emptyLinePlaceholder":72},[144,167612,167613],{"class":146,"line":1658},[144,167614,2430],{"emptyLinePlaceholder":72},[144,167616,167617],{"class":146,"line":1672},[144,167618,161044],{"class":154},[14,167620,158287],{},[135,167622,167624],{"className":30391,"code":167623,"language":30393,"meta":30,"style":30},"say_hello = log(say_hello)\n",[141,167625,167626],{"__ignoreMap":30},[144,167627,167628,167631,167633],{"class":146,"line":147},[144,167629,167630],{"class":154},"say_hello ",[144,167632,200],{"class":150},[144,167634,167635],{"class":154}," log(say_hello)\n",[14,167637,167638],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[18,167640,167642],{"id":167641},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[135,167644,167646],{"className":30391,"code":167645,"language":30393,"meta":30,"style":30},"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",[141,167647,167648,167656,167673,167683,167702,167712,167719,167723,167729,167733,167737,167741,167749,167759,167763,167767],{"__ignoreMap":30},[144,167649,167650,167652,167654],{"class":146,"line":147},[144,167651,31960],{"class":150},[144,167653,87204],{"class":1993},[144,167655,167528],{"class":154},[144,167657,167658,167660,167662,167664,167666,167669,167671],{"class":146,"line":66},[144,167659,30814],{"class":150},[144,167661,167535],{"class":1993},[144,167663,155],{"class":154},[144,167665,610],{"class":150},[144,167667,167668],{"class":154},"args, ",[144,167670,10692],{"class":150},[144,167672,166679],{"class":154},[144,167674,167675,167677,167679,167681],{"class":146,"line":1210},[144,167676,32464],{"class":203},[144,167678,155],{"class":154},[144,167680,167546],{"class":259},[144,167682,161],{"class":154},[144,167684,167685,167688,167690,167693,167695,167697,167699],{"class":146,"line":1225},[144,167686,167687],{"class":154},"        result ",[144,167689,200],{"class":150},[144,167691,167692],{"class":154}," func(",[144,167694,610],{"class":150},[144,167696,167668],{"class":154},[144,167698,10692],{"class":150},[144,167700,167701],{"class":154},"kwargs)\n",[144,167703,167704,167706,167708,167710],{"class":146,"line":1231},[144,167705,32464],{"class":203},[144,167707,155],{"class":154},[144,167709,167562],{"class":259},[144,167711,161],{"class":154},[144,167713,167714,167716],{"class":146,"line":1245},[144,167715,14783],{"class":150},[144,167717,167718],{"class":154}," result\n",[144,167720,167721],{"class":146,"line":1251},[144,167722,2430],{"emptyLinePlaceholder":72},[144,167724,167725,167727],{"class":146,"line":1342},[144,167726,4120],{"class":150},[144,167728,167575],{"class":154},[144,167730,167731],{"class":146,"line":1348},[144,167732,2430],{"emptyLinePlaceholder":72},[144,167734,167735],{"class":146,"line":1360},[144,167736,2430],{"emptyLinePlaceholder":72},[144,167738,167739],{"class":146,"line":1642},[144,167740,167588],{"class":1993},[144,167742,167743,167745,167747],{"class":146,"line":1647},[144,167744,31960],{"class":150},[144,167746,5240],{"class":1993},[144,167748,151106],{"class":154},[144,167750,167751,167753,167755,167757],{"class":146,"line":1653},[144,167752,4120],{"class":150},[144,167754,10900],{"class":154},[144,167756,636],{"class":150},[144,167758,151117],{"class":154},[144,167760,167761],{"class":146,"line":1658},[144,167762,2430],{"emptyLinePlaceholder":72},[144,167764,167765],{"class":146,"line":1672},[144,167766,2430],{"emptyLinePlaceholder":72},[144,167768,167769,167771,167773,167775,167777,167779],{"class":146,"line":1677},[144,167770,30428],{"class":203},[144,167772,166613],{"class":154},[144,167774,601],{"class":203},[144,167776,12466],{"class":154},[144,167778,855],{"class":203},[144,167780,30510],{"class":154},[14,167782,167783,167784,101031,167786,167788],{},"这个写法使用 ",[141,167785,166545],{},[141,167787,166660],{}," 接收原函数的所有参数。",[18,167790,167792],{"id":167791},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,167794,123305],{},[98,167796,167797,167800,167803],{},[101,167798,167799],{},"给定一组学生数据。",[101,167801,167802],{},"封装函数，根据传入规则筛选学生。",[101,167804,167805],{},"筛选及格、优秀、未成年学生。",[14,167807,10066],{},[135,167809,167811],{"className":30391,"code":167810,"language":30393,"meta":30,"style":30},"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",[141,167812,167813,167821,167849,167877,167905,167909,167913,167917,167927,167935,167945,167952,167957,167963,167967,167971,167995,168018,168041,168045,168052,168059],{"__ignoreMap":30},[144,167814,167815,167817,167819],{"class":146,"line":147},[144,167816,159729],{"class":154},[144,167818,200],{"class":150},[144,167820,55460],{"class":154},[144,167822,167823,167825,167827,167829,167831,167833,167835,167837,167839,167841,167843,167845,167847],{"class":146,"line":66},[144,167824,148398],{"class":154},[144,167826,62692],{"class":259},[144,167828,51450],{"class":154},[144,167830,149901],{"class":259},[144,167832,12466],{"class":154},[144,167834,69137],{"class":259},[144,167836,51450],{"class":154},[144,167838,805],{"class":203},[144,167840,12466],{"class":154},[144,167842,151485],{"class":259},[144,167844,51450],{"class":154},[144,167846,1144],{"class":203},[144,167848,4960],{"class":154},[144,167850,167851,167853,167855,167857,167859,167861,167863,167865,167867,167869,167871,167873,167875],{"class":146,"line":1210},[144,167852,148398],{"class":154},[144,167854,62692],{"class":259},[144,167856,51450],{"class":154},[144,167858,150949],{"class":259},[144,167860,12466],{"class":154},[144,167862,69137],{"class":259},[144,167864,51450],{"class":154},[144,167866,780],{"class":203},[144,167868,12466],{"class":154},[144,167870,151485],{"class":259},[144,167872,51450],{"class":154},[144,167874,966],{"class":203},[144,167876,4960],{"class":154},[144,167878,167879,167881,167883,167885,167887,167889,167891,167893,167895,167897,167899,167901,167903],{"class":146,"line":1225},[144,167880,148398],{"class":154},[144,167882,62692],{"class":259},[144,167884,51450],{"class":154},[144,167886,159744],{"class":259},[144,167888,12466],{"class":154},[144,167890,69137],{"class":259},[144,167892,51450],{"class":154},[144,167894,830],{"class":203},[144,167896,12466],{"class":154},[144,167898,151485],{"class":259},[144,167900,51450],{"class":154},[144,167902,1037],{"class":203},[144,167904,4960],{"class":154},[144,167906,167907],{"class":146,"line":1231},[144,167908,33259],{"class":154},[144,167910,167911],{"class":146,"line":1245},[144,167912,2430],{"emptyLinePlaceholder":72},[144,167914,167915],{"class":146,"line":1251},[144,167916,2430],{"emptyLinePlaceholder":72},[144,167918,167919,167921,167924],{"class":146,"line":1342},[144,167920,31960],{"class":150},[144,167922,167923],{"class":1993}," filter_students",[144,167925,167926],{"class":154},"(students, condition):\n",[144,167928,167929,167931,167933],{"class":146,"line":1348},[144,167930,161236],{"class":154},[144,167932,200],{"class":150},[144,167934,51851],{"class":154},[144,167936,167937,167939,167941,167943],{"class":146,"line":1360},[144,167938,3231],{"class":150},[144,167940,152150],{"class":154},[144,167942,26056],{"class":150},[144,167944,152155],{"class":154},[144,167946,167947,167949],{"class":146,"line":1642},[144,167948,2527],{"class":150},[144,167950,167951],{"class":154}," condition(student):\n",[144,167953,167954],{"class":146,"line":1647},[144,167955,167956],{"class":154},"            result.append(student)\n",[144,167958,167959,167961],{"class":146,"line":1653},[144,167960,4120],{"class":150},[144,167962,167718],{"class":154},[144,167964,167965],{"class":146,"line":1658},[144,167966,2430],{"emptyLinePlaceholder":72},[144,167968,167969],{"class":146,"line":1672},[144,167970,2430],{"emptyLinePlaceholder":72},[144,167972,167973,167975,167977,167980,167982,167985,167987,167989,167991,167993],{"class":146,"line":1677},[144,167974,165714],{"class":154},[144,167976,200],{"class":150},[144,167978,167979],{"class":154}," filter_students(students, ",[144,167981,166899],{"class":150},[144,167983,167984],{"class":154}," s: s[",[144,167986,151485],{"class":259},[144,167988,4473],{"class":154},[144,167990,1740],{"class":150},[144,167992,157850],{"class":203},[144,167994,161],{"class":154},[144,167996,167997,168000,168002,168004,168006,168008,168010,168012,168014,168016],{"class":146,"line":1683},[144,167998,167999],{"class":154},"excellent ",[144,168001,200],{"class":150},[144,168003,167979],{"class":154},[144,168005,166899],{"class":150},[144,168007,167984],{"class":154},[144,168009,151485],{"class":259},[144,168011,4473],{"class":154},[144,168013,1740],{"class":150},[144,168015,157801],{"class":203},[144,168017,161],{"class":154},[144,168019,168020,168023,168025,168027,168029,168031,168033,168035,168037,168039],{"class":146,"line":1704},[144,168021,168022],{"class":154},"under_age ",[144,168024,200],{"class":150},[144,168026,167979],{"class":154},[144,168028,166899],{"class":150},[144,168030,167984],{"class":154},[144,168032,69137],{"class":259},[144,168034,4473],{"class":154},[144,168036,1065],{"class":150},[144,168038,156298],{"class":203},[144,168040,161],{"class":154},[144,168042,168043],{"class":146,"line":1709},[144,168044,2430],{"emptyLinePlaceholder":72},[144,168046,168047,168049],{"class":146,"line":1723},[144,168048,30428],{"class":203},[144,168050,168051],{"class":154},"(passed)\n",[144,168053,168054,168056],{"class":146,"line":1728},[144,168055,30428],{"class":203},[144,168057,168058],{"class":154},"(excellent)\n",[144,168060,168061,168063],{"class":146,"line":1757},[144,168062,30428],{"class":203},[144,168064,168065],{"class":154},"(under_age)\n",[18,168067,168069],{"id":168068},"_715-易错点","7.15 易错点",[98,168071,168072,168075,168083,168088,168099],{},[101,168073,168074],{},"默认参数不要写可变对象。",[101,168076,168077,168079,168080,168082],{},[141,168078,166545],{}," 是元组，",[141,168081,166660],{}," 是字典。",[101,168084,168085,168087],{},[141,168086,166899],{}," 只适合简单表达式。",[101,168089,168090,101031,168092,168094,168095,168098],{},[141,168091,74057],{},[141,168093,80064],{}," 的结果是迭代器，常用 ",[141,168096,168097],{},"list()"," 转换查看。",[101,168100,168101],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[18,168103,168105],{"id":168104},"_716-本章练习","7.16 本章练习",[98,168107,168108,168115,168121,168126,168131],{},[101,168109,168110,168111,168114],{},"写函数 ",[141,168112,168113],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[101,168116,168110,168117,168120],{},[141,168118,168119],{},"print_user(**kwargs)","，输出用户所有字段。",[101,168122,104379,168123,168125],{},[141,168124,166899],{}," 对学生列表按年龄排序。",[101,168127,104379,168128,168130],{},[141,168129,80064],{}," 找出成绩不及格的学生。",[101,168132,168133],{},"写一个装饰器，统计函数执行前后的提示信息。",[5157,168135,168136],{},"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":30,"searchDepth":66,"depth":66,"links":168138},[168139,168140,168141,168142,168143,168144,168148,168149,168150,168151,168156,168157,168158,168159,168160,168161],{"id":165997,"depth":66,"text":165998},{"id":166111,"depth":66,"text":166112},{"id":166200,"depth":66,"text":166201},{"id":166262,"depth":66,"text":166263},{"id":166408,"depth":66,"text":166409},{"id":166535,"depth":66,"text":166536,"children":168145},[168146,168147],{"id":166539,"depth":1210,"text":166540},{"id":166654,"depth":1210,"text":166655},{"id":166735,"depth":66,"text":166736},{"id":166893,"depth":66,"text":166894},{"id":167061,"depth":66,"text":167062},{"id":167143,"depth":66,"text":167144,"children":168152},[168153,168154,168155],{"id":167147,"depth":1210,"text":167148},{"id":167218,"depth":1210,"text":167219},{"id":167295,"depth":1210,"text":167296},{"id":167420,"depth":66,"text":167421},{"id":167510,"depth":66,"text":167511},{"id":167641,"depth":66,"text":167642},{"id":167791,"depth":66,"text":167792},{"id":168068,"depth":66,"text":168069},{"id":168104,"depth":66,"text":168105},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":165989,"description":23408},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168168,"title":168169,"body":168170,"description":23408,"extension":70,"meta":170689,"navigation":72,"path":170690,"seo":170691,"stem":170692,"__hash__":170693},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168171,"toc":170664},[168172,168175,168179,168182,168185,168216,168220,168224,168227,168254,168258,168261,168312,168315,168330,168333,168368,168372,168374,168398,168401,168461,168465,168469,168472,168529,168532,168552,168556,168559,168622,168626,168629,168685,168692,168716,168720,168723,168786,168790,168795,168846,168849,168853,168858,168925,168928,169010,169014,169019,169070,169073,169077,169080,169083,169091,169094,169140,169143,169189,169193,169199,169243,169246,169292,169295,169335,169338,169399,169403,169406,169496,169499,169641,169644,169711,169715,169718,169721,169862,169865,169943,169946,170122,170126,170128,170139,170141,170340,170344,170588,170592,170626,170630,170661],[10,168173,168169],{"id":168174},"_8-文件操作",[18,168176,168178],{"id":168177},"_81-文件操作的意义","8.1 文件操作的意义",[14,168180,168181],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168183,168184],{},"常见文件类型：",[98,168186,168187,168193,168199,168205,168211],{},[101,168188,168189,168192],{},[141,168190,168191],{},".txt","：普通文本。",[101,168194,168195,168198],{},[141,168196,168197],{},".csv","：表格文本。",[101,168200,168201,168204],{},[141,168202,168203],{},".json","：结构化数据。",[101,168206,168207,168210],{},[141,168208,168209],{},".log","：日志文件。",[101,168212,168213,168215],{},[141,168214,146365],{},"：Python 源代码。",[18,168217,168219],{"id":168218},"_82-路径","8.2 路径",[115,168221,168223],{"id":168222},"_821-相对路径","8.2.1 相对路径",[14,168225,168226],{},"相对当前运行目录：",[135,168228,168230],{"className":30391,"code":168229,"language":30393,"meta":30,"style":30},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[141,168231,168232],{"__ignoreMap":30},[144,168233,168234,168236,168238,168240,168242,168244,168246,168248,168250,168252],{"class":146,"line":147},[144,168235,86928],{"class":203},[144,168237,155],{"class":154},[144,168239,146809],{"class":259},[144,168241,12466],{"class":154},[144,168243,146814],{"class":259},[144,168245,12466],{"class":154},[144,168247,146819],{"class":5247},[144,168249,200],{"class":150},[144,168251,146824],{"class":259},[144,168253,161],{"class":154},[115,168255,168257],{"id":168256},"_822-绝对路径","8.2.2 绝对路径",[14,168259,168260],{},"从根目录或盘符开始：",[135,168262,168264],{"className":30391,"code":168263,"language":30393,"meta":30,"style":30},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[141,168265,168266,168289],{"__ignoreMap":30},[144,168267,168268,168270,168272,168275,168277,168279,168281,168283,168285,168287],{"class":146,"line":147},[144,168269,86928],{"class":203},[144,168271,155],{"class":154},[144,168273,168274],{"class":259},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[144,168276,12466],{"class":154},[144,168278,146814],{"class":259},[144,168280,12466],{"class":154},[144,168282,146819],{"class":5247},[144,168284,200],{"class":150},[144,168286,146824],{"class":259},[144,168288,161],{"class":154},[144,168290,168291,168293,168295,168298,168300,168302,168304,168306,168308,168310],{"class":146,"line":66},[144,168292,86928],{"class":203},[144,168294,155],{"class":154},[144,168296,168297],{"class":259},"\"D:\u002Fdata\u002Fdata.txt\"",[144,168299,12466],{"class":154},[144,168301,146814],{"class":259},[144,168303,12466],{"class":154},[144,168305,146819],{"class":5247},[144,168307,200],{"class":150},[144,168309,146824],{"class":259},[144,168311,161],{"class":154},[14,168313,168314],{},"Windows 路径建议写成：",[135,168316,168318],{"className":30391,"code":168317,"language":30393,"meta":30,"style":30},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[141,168319,168320],{"__ignoreMap":30},[144,168321,168322,168325,168327],{"class":146,"line":147},[144,168323,168324],{"class":154},"path ",[144,168326,200],{"class":150},[144,168328,168329],{"class":259}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168331,168332],{},"或原始字符串：",[135,168334,168336],{"className":30391,"code":168335,"language":30393,"meta":30,"style":30},"path = r\"D:\\data\\data.txt\"\n",[141,168337,168338],{"__ignoreMap":30},[144,168339,168340,168342,168344,168346,168348,168351,168354,168357,168359,168361,168363,168366],{"class":146,"line":147},[144,168341,168324],{"class":154},[144,168343,200],{"class":150},[144,168345,17152],{"class":150},[144,168347,406],{"class":259},[144,168349,168350],{"class":47990},"D:",[144,168352,168353],{"class":203},"\\d",[144,168355,168356],{"class":47990},"ata",[144,168358,168353],{"class":203},[144,168360,168356],{"class":47990},[144,168362,713],{"class":203},[144,168364,168365],{"class":47990},"txt",[144,168367,25146],{"class":259},[18,168369,168371],{"id":168370},"_83-open函数","8.3 open函数",[14,168373,5212],{},[135,168375,168377],{"className":30391,"code":168376,"language":30393,"meta":30,"style":30},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[141,168378,168379],{"__ignoreMap":30},[144,168380,168381,168383,168385,168387,168390,168392,168394,168396],{"class":146,"line":147},[144,168382,45367],{"class":5247},[144,168384,13595],{"class":150},[144,168386,146804],{"class":203},[144,168388,168389],{"class":154},"(文件路径, 打开模式, ",[144,168391,146819],{"class":5247},[144,168393,200],{"class":150},[144,168395,146824],{"class":259},[144,168397,161],{"class":154},[14,168399,168400],{},"常见模式：",[292,168402,168403,168412],{},[295,168404,168405],{},[298,168406,168407,168410],{},[301,168408,168409],{},"模式",[301,168411,25882],{},[339,168413,168414,168423,168432,168441,168451],{},[298,168415,168416,168420],{},[344,168417,168418],{},[141,168419,825],{},[344,168421,168422],{},"只读，文件不存在会报错",[298,168424,168425,168429],{},[344,168426,168427],{},[141,168428,950],{},[344,168430,168431],{},"只写，文件不存在会创建，存在会清空",[298,168433,168434,168438],{},[344,168435,168436],{},[141,168437,393],{},[344,168439,168440],{},"追加，文件不存在会创建",[298,168442,168443,168448],{},[344,168444,168445],{},[141,168446,168447],{},"rb",[344,168449,168450],{},"二进制只读",[298,168452,168453,168458],{},[344,168454,168455],{},[141,168456,168457],{},"wb",[344,168459,168460],{},"二进制只写",[18,168462,168464],{"id":168463},"_84-读取文件","8.4 读取文件",[115,168466,168468],{"id":168467},"_841-read","8.4.1 read",[14,168470,168471],{},"一次读取全部内容：",[135,168473,168475],{"className":30391,"code":168474,"language":30393,"meta":30,"style":30},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[141,168476,168477,168503,168515,168522],{"__ignoreMap":30},[144,168478,168479,168481,168483,168485,168487,168489,168491,168493,168495,168497,168499,168501],{"class":146,"line":147},[144,168480,45367],{"class":5247},[144,168482,13595],{"class":150},[144,168484,146804],{"class":203},[144,168486,155],{"class":154},[144,168488,146809],{"class":259},[144,168490,12466],{"class":154},[144,168492,146814],{"class":259},[144,168494,12466],{"class":154},[144,168496,146819],{"class":5247},[144,168498,200],{"class":150},[144,168500,146824],{"class":259},[144,168502,161],{"class":154},[144,168504,168505,168508,168510,168512],{"class":146,"line":66},[144,168506,168507],{"class":154},"content ",[144,168509,200],{"class":150},[144,168511,148166],{"class":5247},[144,168513,168514],{"class":154},".read()\n",[144,168516,168517,168519],{"class":146,"line":1210},[144,168518,30428],{"class":203},[144,168520,168521],{"class":154},"(content)\n",[144,168523,168524,168526],{"class":146,"line":1225},[144,168525,45367],{"class":5247},[144,168527,168528],{"class":154},".close()\n",[14,168530,168531],{},"可以指定读取字符数：",[135,168533,168535],{"className":30391,"code":168534,"language":30393,"meta":30,"style":30},"content = file.read(10)\n",[141,168536,168537],{"__ignoreMap":30},[144,168538,168539,168541,168543,168545,168548,168550],{"class":146,"line":147},[144,168540,168507],{"class":154},[144,168542,200],{"class":150},[144,168544,148166],{"class":5247},[144,168546,168547],{"class":154},".read(",[144,168549,601],{"class":203},[144,168551,161],{"class":154},[115,168553,168555],{"id":168554},"_842-readline","8.4.2 readline",[14,168557,168558],{},"一次读取一行：",[135,168560,168562],{"className":30391,"code":168561,"language":30393,"meta":30,"style":30},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[141,168563,168564,168590,168594,168605,168612,168616],{"__ignoreMap":30},[144,168565,168566,168568,168570,168572,168574,168576,168578,168580,168582,168584,168586,168588],{"class":146,"line":147},[144,168567,45367],{"class":5247},[144,168569,13595],{"class":150},[144,168571,146804],{"class":203},[144,168573,155],{"class":154},[144,168575,146809],{"class":259},[144,168577,12466],{"class":154},[144,168579,146814],{"class":259},[144,168581,12466],{"class":154},[144,168583,146819],{"class":5247},[144,168585,200],{"class":150},[144,168587,146824],{"class":259},[144,168589,161],{"class":154},[144,168591,168592],{"class":146,"line":66},[144,168593,2430],{"emptyLinePlaceholder":72},[144,168595,168596,168598,168600,168602],{"class":146,"line":1210},[144,168597,147265],{"class":154},[144,168599,200],{"class":150},[144,168601,148166],{"class":5247},[144,168603,168604],{"class":154},".readline()\n",[144,168606,168607,168609],{"class":146,"line":1225},[144,168608,30428],{"class":203},[144,168610,168611],{"class":154},"(line)\n",[144,168613,168614],{"class":146,"line":1231},[144,168615,2430],{"emptyLinePlaceholder":72},[144,168617,168618,168620],{"class":146,"line":1245},[144,168619,45367],{"class":5247},[144,168621,168528],{"class":154},[115,168623,168625],{"id":168624},"_843-readlines","8.4.3 readlines",[14,168627,168628],{},"读取所有行，返回列表：",[135,168630,168632],{"className":30391,"code":168631,"language":30393,"meta":30,"style":30},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[141,168633,168634,168660,168672,168679],{"__ignoreMap":30},[144,168635,168636,168638,168640,168642,168644,168646,168648,168650,168652,168654,168656,168658],{"class":146,"line":147},[144,168637,45367],{"class":5247},[144,168639,13595],{"class":150},[144,168641,146804],{"class":203},[144,168643,155],{"class":154},[144,168645,146809],{"class":259},[144,168647,12466],{"class":154},[144,168649,146814],{"class":259},[144,168651,12466],{"class":154},[144,168653,146819],{"class":5247},[144,168655,200],{"class":150},[144,168657,146824],{"class":259},[144,168659,161],{"class":154},[144,168661,168662,168665,168667,168669],{"class":146,"line":66},[144,168663,168664],{"class":154},"lines ",[144,168666,200],{"class":150},[144,168668,148166],{"class":5247},[144,168670,168671],{"class":154},".readlines()\n",[144,168673,168674,168676],{"class":146,"line":1210},[144,168675,30428],{"class":203},[144,168677,168678],{"class":154},"(lines)\n",[144,168680,168681,168683],{"class":146,"line":1225},[144,168682,45367],{"class":5247},[144,168684,168528],{"class":154},[14,168686,168687,168688,168691],{},"每一行通常带有换行符，可以用 ",[141,168689,168690],{},"strip()"," 去掉：",[135,168693,168695],{"className":30391,"code":168694,"language":30393,"meta":30,"style":30},"for line in lines:\n    print(line.strip())\n",[141,168696,168697,168709],{"__ignoreMap":30},[144,168698,168699,168701,168704,168706],{"class":146,"line":147},[144,168700,3055],{"class":150},[144,168702,168703],{"class":154}," line ",[144,168705,26056],{"class":150},[144,168707,168708],{"class":154}," lines:\n",[144,168710,168711,168713],{"class":146,"line":66},[144,168712,31312],{"class":203},[144,168714,168715],{"class":154},"(line.strip())\n",[115,168717,168719],{"id":168718},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,168721,168722],{},"推荐读取大文件时使用：",[135,168724,168726],{"className":30391,"code":168725,"language":30393,"meta":30,"style":30},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[141,168727,168728,168754,168758,168770,168776,168780],{"__ignoreMap":30},[144,168729,168730,168732,168734,168736,168738,168740,168742,168744,168746,168748,168750,168752],{"class":146,"line":147},[144,168731,45367],{"class":5247},[144,168733,13595],{"class":150},[144,168735,146804],{"class":203},[144,168737,155],{"class":154},[144,168739,146809],{"class":259},[144,168741,12466],{"class":154},[144,168743,146814],{"class":259},[144,168745,12466],{"class":154},[144,168747,146819],{"class":5247},[144,168749,200],{"class":150},[144,168751,146824],{"class":259},[144,168753,161],{"class":154},[144,168755,168756],{"class":146,"line":66},[144,168757,2430],{"emptyLinePlaceholder":72},[144,168759,168760,168762,168764,168766,168768],{"class":146,"line":1210},[144,168761,3055],{"class":150},[144,168763,168703],{"class":154},[144,168765,26056],{"class":150},[144,168767,148166],{"class":5247},[144,168769,3769],{"class":154},[144,168771,168772,168774],{"class":146,"line":1225},[144,168773,31312],{"class":203},[144,168775,168715],{"class":154},[144,168777,168778],{"class":146,"line":1231},[144,168779,2430],{"emptyLinePlaceholder":72},[144,168781,168782,168784],{"class":146,"line":1245},[144,168783,45367],{"class":5247},[144,168785,168528],{"class":154},[18,168787,168789],{"id":168788},"_85-with语句","8.5 with语句",[14,168791,168792,168794],{},[141,168793,107846],{}," 会自动关闭文件，推荐使用。",[135,168796,168798],{"className":30391,"code":168797,"language":30393,"meta":30,"style":30},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[141,168799,168800,168830,168840],{"__ignoreMap":30},[144,168801,168802,168804,168806,168808,168810,168812,168814,168816,168818,168820,168822,168824,168826,168828],{"class":146,"line":147},[144,168803,107846],{"class":150},[144,168805,146804],{"class":203},[144,168807,155],{"class":154},[144,168809,146809],{"class":259},[144,168811,12466],{"class":154},[144,168813,146814],{"class":259},[144,168815,12466],{"class":154},[144,168817,146819],{"class":5247},[144,168819,200],{"class":150},[144,168821,146824],{"class":259},[144,168823,13745],{"class":154},[144,168825,31396],{"class":150},[144,168827,148166],{"class":5247},[144,168829,3769],{"class":154},[144,168831,168832,168834,168836,168838],{"class":146,"line":66},[144,168833,146836],{"class":154},[144,168835,200],{"class":150},[144,168837,148166],{"class":5247},[144,168839,168514],{"class":154},[144,168841,168842,168844],{"class":146,"line":1210},[144,168843,31312],{"class":203},[144,168845,168521],{"class":154},[14,168847,168848],{},"等价于打开文件、读取、最后关闭，但更安全。",[18,168850,168852],{"id":168851},"_86-写入文件","8.6 写入文件",[14,168854,168855,168857],{},[141,168856,950],{}," 模式会清空原文件。",[135,168859,168861],{"className":30391,"code":168860,"language":30393,"meta":30,"style":30},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[141,168862,168863,168893,168910],{"__ignoreMap":30},[144,168864,168865,168867,168869,168871,168873,168875,168877,168879,168881,168883,168885,168887,168889,168891],{"class":146,"line":147},[144,168866,107846],{"class":150},[144,168868,146804],{"class":203},[144,168870,155],{"class":154},[144,168872,146809],{"class":259},[144,168874,12466],{"class":154},[144,168876,151989],{"class":259},[144,168878,12466],{"class":154},[144,168880,146819],{"class":5247},[144,168882,200],{"class":150},[144,168884,146824],{"class":259},[144,168886,13745],{"class":154},[144,168888,31396],{"class":150},[144,168890,148166],{"class":5247},[144,168892,3769],{"class":154},[144,168894,168895,168898,168901,168904,168906,168908],{"class":146,"line":66},[144,168896,168897],{"class":5247},"    file",[144,168899,168900],{"class":154},".write(",[144,168902,168903],{"class":259},"\"hello",[144,168905,156538],{"class":203},[144,168907,406],{"class":259},[144,168909,161],{"class":154},[144,168911,168912,168914,168916,168919,168921,168923],{"class":146,"line":1210},[144,168913,168897],{"class":5247},[144,168915,168900],{"class":154},[144,168917,168918],{"class":259},"\"python",[144,168920,156538],{"class":203},[144,168922,406],{"class":259},[144,168924,161],{"class":154},[14,168926,168927],{},"写入多行：",[135,168929,168931],{"className":30391,"code":168930,"language":30393,"meta":30,"style":30},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[141,168932,168933,168968,168972,169003],{"__ignoreMap":30},[144,168934,168935,168937,168939,168941,168944,168946,168948,168950,168953,168955,168957,168959,168962,168964,168966],{"class":146,"line":147},[144,168936,168664],{"class":154},[144,168938,200],{"class":150},[144,168940,52239],{"class":154},[144,168942,168943],{"class":259},"\"小明,18",[144,168945,156538],{"class":203},[144,168947,406],{"class":259},[144,168949,12466],{"class":154},[144,168951,168952],{"class":259},"\"小红,17",[144,168954,156538],{"class":203},[144,168956,406],{"class":259},[144,168958,12466],{"class":154},[144,168960,168961],{"class":259},"\"小刚,19",[144,168963,156538],{"class":203},[144,168965,406],{"class":259},[144,168967,33259],{"class":154},[144,168969,168970],{"class":146,"line":66},[144,168971,2430],{"emptyLinePlaceholder":72},[144,168973,168974,168976,168978,168980,168983,168985,168987,168989,168991,168993,168995,168997,168999,169001],{"class":146,"line":1210},[144,168975,107846],{"class":150},[144,168977,146804],{"class":203},[144,168979,155],{"class":154},[144,168981,168982],{"class":259},"\"students.txt\"",[144,168984,12466],{"class":154},[144,168986,151989],{"class":259},[144,168988,12466],{"class":154},[144,168990,146819],{"class":5247},[144,168992,200],{"class":150},[144,168994,146824],{"class":259},[144,168996,13745],{"class":154},[144,168998,31396],{"class":150},[144,169000,148166],{"class":5247},[144,169002,3769],{"class":154},[144,169004,169005,169007],{"class":146,"line":1225},[144,169006,168897],{"class":5247},[144,169008,169009],{"class":154},".writelines(lines)\n",[18,169011,169013],{"id":169012},"_87-追加文件","8.7 追加文件",[14,169015,169016,169018],{},[141,169017,393],{}," 模式不会清空原内容，而是在末尾追加。",[135,169020,169022],{"className":30391,"code":169021,"language":30393,"meta":30,"style":30},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[141,169023,169024,169055],{"__ignoreMap":30},[144,169025,169026,169028,169030,169032,169035,169037,169039,169041,169043,169045,169047,169049,169051,169053],{"class":146,"line":147},[144,169027,107846],{"class":150},[144,169029,146804],{"class":203},[144,169031,155],{"class":154},[144,169033,169034],{"class":259},"\"log.txt\"",[144,169036,12466],{"class":154},[144,169038,165338],{"class":259},[144,169040,12466],{"class":154},[144,169042,146819],{"class":5247},[144,169044,200],{"class":150},[144,169046,146824],{"class":259},[144,169048,13745],{"class":154},[144,169050,31396],{"class":150},[144,169052,148166],{"class":5247},[144,169054,3769],{"class":154},[144,169056,169057,169059,169061,169064,169066,169068],{"class":146,"line":66},[144,169058,168897],{"class":5247},[144,169060,168900],{"class":154},[144,169062,169063],{"class":259},"\"程序启动",[144,169065,156538],{"class":203},[144,169067,406],{"class":259},[144,169069,161],{"class":154},[14,169071,169072],{},"日志类文件常用追加模式。",[18,169074,169076],{"id":169075},"_88-文件编码","8.8 文件编码",[14,169078,169079],{},"编码决定文字如何保存为字节。",[14,169081,169082],{},"常见编码：",[98,169084,169085,169088],{},[101,169086,169087],{},"UTF-8：推荐。",[101,169089,169090],{},"GBK：部分 Windows 中文文件常见。",[14,169092,169093],{},"读取文件乱码时，可以尝试：",[135,169095,169097],{"className":30391,"code":169096,"language":30393,"meta":30,"style":30},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[141,169098,169099,169130],{"__ignoreMap":30},[144,169100,169101,169103,169105,169107,169109,169111,169113,169115,169117,169119,169122,169124,169126,169128],{"class":146,"line":147},[144,169102,107846],{"class":150},[144,169104,146804],{"class":203},[144,169106,155],{"class":154},[144,169108,146809],{"class":259},[144,169110,12466],{"class":154},[144,169112,146814],{"class":259},[144,169114,12466],{"class":154},[144,169116,146819],{"class":5247},[144,169118,200],{"class":150},[144,169120,169121],{"class":259},"\"gbk\"",[144,169123,13745],{"class":154},[144,169125,31396],{"class":150},[144,169127,148166],{"class":5247},[144,169129,3769],{"class":154},[144,169131,169132,169134,169136,169138],{"class":146,"line":66},[144,169133,146836],{"class":154},[144,169135,200],{"class":150},[144,169137,148166],{"class":5247},[144,169139,168514],{"class":154},[14,169141,169142],{},"写文件时建议统一 UTF-8：",[135,169144,169146],{"className":30391,"code":169145,"language":30393,"meta":30,"style":30},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[141,169147,169148,169178],{"__ignoreMap":30},[144,169149,169150,169152,169154,169156,169158,169160,169162,169164,169166,169168,169170,169172,169174,169176],{"class":146,"line":147},[144,169151,107846],{"class":150},[144,169153,146804],{"class":203},[144,169155,155],{"class":154},[144,169157,146809],{"class":259},[144,169159,12466],{"class":154},[144,169161,151989],{"class":259},[144,169163,12466],{"class":154},[144,169165,146819],{"class":5247},[144,169167,200],{"class":150},[144,169169,146824],{"class":259},[144,169171,13745],{"class":154},[144,169173,31396],{"class":150},[144,169175,148166],{"class":5247},[144,169177,3769],{"class":154},[144,169179,169180,169182,169184,169187],{"class":146,"line":66},[144,169181,168897],{"class":5247},[144,169183,168900],{"class":154},[144,169185,169186],{"class":259},"\"中文内容\"",[144,169188,161],{"class":154},[18,169190,169192],{"id":169191},"_89-pathlib","8.9 pathlib",[14,169194,169195,169198],{},[141,169196,169197],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[135,169200,169202],{"className":30391,"code":169201,"language":30393,"meta":30,"style":30},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[141,169203,169204,169214,169218,169236],{"__ignoreMap":30},[144,169205,169206,169208,169210,169212],{"class":146,"line":147},[144,169207,30750],{"class":150},[144,169209,108324],{"class":154},[144,169211,30405],{"class":150},[144,169213,108329],{"class":154},[144,169215,169216],{"class":146,"line":66},[144,169217,2430],{"emptyLinePlaceholder":72},[144,169219,169220,169222,169224,169226,169229,169231,169233],{"class":146,"line":1210},[144,169221,168324],{"class":154},[144,169223,200],{"class":150},[144,169225,108558],{"class":154},[144,169227,169228],{"class":259},"\"data\"",[144,169230,13745],{"class":154},[144,169232,739],{"class":150},[144,169234,169235],{"class":259}," \"students.txt\"\n",[144,169237,169238,169240],{"class":146,"line":1225},[144,169239,30428],{"class":203},[144,169241,169242],{"class":154},"(path)\n",[14,169244,169245],{},"创建目录：",[135,169247,169249],{"className":30391,"code":169248,"language":30393,"meta":30,"style":30},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[141,169250,169251,169261,169265,169278],{"__ignoreMap":30},[144,169252,169253,169255,169257,169259],{"class":146,"line":147},[144,169254,30750],{"class":150},[144,169256,108324],{"class":154},[144,169258,30405],{"class":150},[144,169260,108329],{"class":154},[144,169262,169263],{"class":146,"line":66},[144,169264,2430],{"emptyLinePlaceholder":72},[144,169266,169267,169270,169272,169274,169276],{"class":146,"line":1210},[144,169268,169269],{"class":154},"data_dir ",[144,169271,200],{"class":150},[144,169273,108558],{"class":154},[144,169275,169228],{"class":259},[144,169277,161],{"class":154},[144,169279,169280,169283,169286,169288,169290],{"class":146,"line":1225},[144,169281,169282],{"class":154},"data_dir.mkdir(",[144,169284,169285],{"class":5247},"exist_ok",[144,169287,200],{"class":150},[144,169289,31489],{"class":203},[144,169291,161],{"class":154},[14,169293,169294],{},"判断文件是否存在：",[135,169296,169298],{"className":30391,"code":169297,"language":30393,"meta":30,"style":30},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[141,169299,169300,169313,169317,169324],{"__ignoreMap":30},[144,169301,169302,169304,169306,169308,169311],{"class":146,"line":147},[144,169303,168324],{"class":154},[144,169305,200],{"class":150},[144,169307,108558],{"class":154},[144,169309,169310],{"class":259},"\"data\u002Fstudents.txt\"",[144,169312,161],{"class":154},[144,169314,169315],{"class":146,"line":66},[144,169316,2430],{"emptyLinePlaceholder":72},[144,169318,169319,169321],{"class":146,"line":1210},[144,169320,1561],{"class":150},[144,169322,169323],{"class":154}," path.exists():\n",[144,169325,169326,169328,169330,169333],{"class":146,"line":1225},[144,169327,31312],{"class":203},[144,169329,155],{"class":154},[144,169331,169332],{"class":259},"\"文件存在\"",[144,169334,161],{"class":154},[14,169336,169337],{},"读写文本：",[135,169339,169341],{"className":30391,"code":169340,"language":30393,"meta":30,"style":30},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[141,169342,169343,169355,169359,169376,169393],{"__ignoreMap":30},[144,169344,169345,169347,169349,169351,169353],{"class":146,"line":147},[144,169346,168324],{"class":154},[144,169348,200],{"class":150},[144,169350,108558],{"class":154},[144,169352,146809],{"class":259},[144,169354,161],{"class":154},[144,169356,169357],{"class":146,"line":66},[144,169358,2430],{"emptyLinePlaceholder":72},[144,169360,169361,169364,169366,169368,169370,169372,169374],{"class":146,"line":1210},[144,169362,169363],{"class":154},"path.write_text(",[144,169365,145889],{"class":259},[144,169367,12466],{"class":154},[144,169369,146819],{"class":5247},[144,169371,200],{"class":150},[144,169373,146824],{"class":259},[144,169375,161],{"class":154},[144,169377,169378,169380,169382,169385,169387,169389,169391],{"class":146,"line":1225},[144,169379,168507],{"class":154},[144,169381,200],{"class":150},[144,169383,169384],{"class":154}," path.read_text(",[144,169386,146819],{"class":5247},[144,169388,200],{"class":150},[144,169390,146824],{"class":259},[144,169392,161],{"class":154},[144,169394,169395,169397],{"class":146,"line":1231},[144,169396,30428],{"class":203},[144,169398,168521],{"class":154},[18,169400,169402],{"id":169401},"_810-json文件","8.10 JSON文件",[14,169404,169405],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[135,169407,169409],{"className":30391,"code":169408,"language":30393,"meta":30,"style":30},"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",[141,169410,169411,169417,169421,169429,169439,169449,169457,169461,169465,169490],{"__ignoreMap":30},[144,169412,169413,169415],{"class":146,"line":147},[144,169414,30405],{"class":150},[144,169416,147104],{"class":154},[144,169418,169419],{"class":146,"line":66},[144,169420,2430],{"emptyLinePlaceholder":72},[144,169422,169423,169425,169427],{"class":146,"line":1210},[144,169424,149494],{"class":154},[144,169426,200],{"class":150},[144,169428,15603],{"class":154},[144,169430,169431,169433,169435,169437],{"class":146,"line":1225},[144,169432,147033],{"class":259},[144,169434,51450],{"class":154},[144,169436,149901],{"class":259},[144,169438,31479],{"class":154},[144,169440,169441,169443,169445,169447],{"class":146,"line":1231},[144,169442,164550],{"class":259},[144,169444,51450],{"class":154},[144,169446,805],{"class":203},[144,169448,31479],{"class":154},[144,169450,169451,169453,169455],{"class":146,"line":1245},[144,169452,164561],{"class":259},[144,169454,51450],{"class":154},[144,169456,164566],{"class":203},[144,169458,169459],{"class":146,"line":1251},[144,169460,1595],{"class":154},[144,169462,169463],{"class":146,"line":1342},[144,169464,2430],{"emptyLinePlaceholder":72},[144,169466,169467,169469,169471,169474,169476,169478,169480,169482,169484,169486,169488],{"class":146,"line":1348},[144,169468,156457],{"class":154},[144,169470,200],{"class":150},[144,169472,169473],{"class":154}," json.dumps(student, ",[144,169475,147150],{"class":5247},[144,169477,200],{"class":150},[144,169479,34000],{"class":203},[144,169481,12466],{"class":154},[144,169483,152025],{"class":5247},[144,169485,200],{"class":150},[144,169487,232],{"class":203},[144,169489,161],{"class":154},[144,169491,169492,169494],{"class":146,"line":1360},[144,169493,30428],{"class":203},[144,169495,164084],{"class":154},[14,169497,169498],{},"写入 JSON 文件：",[135,169500,169502],{"className":30391,"code":169501,"language":30393,"meta":30,"style":30},"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",[141,169503,169504,169510,169514,169522,169550,169578,169582,169586,169616],{"__ignoreMap":30},[144,169505,169506,169508],{"class":146,"line":147},[144,169507,30405],{"class":150},[144,169509,147104],{"class":154},[144,169511,169512],{"class":146,"line":66},[144,169513,2430],{"emptyLinePlaceholder":72},[144,169515,169516,169518,169520],{"class":146,"line":1210},[144,169517,159729],{"class":154},[144,169519,200],{"class":150},[144,169521,55460],{"class":154},[144,169523,169524,169526,169528,169530,169532,169534,169536,169538,169540,169542,169544,169546,169548],{"class":146,"line":1225},[144,169525,148398],{"class":154},[144,169527,62692],{"class":259},[144,169529,51450],{"class":154},[144,169531,149901],{"class":259},[144,169533,12466],{"class":154},[144,169535,69137],{"class":259},[144,169537,51450],{"class":154},[144,169539,805],{"class":203},[144,169541,12466],{"class":154},[144,169543,151485],{"class":259},[144,169545,51450],{"class":154},[144,169547,1144],{"class":203},[144,169549,4960],{"class":154},[144,169551,169552,169554,169556,169558,169560,169562,169564,169566,169568,169570,169572,169574,169576],{"class":146,"line":1231},[144,169553,148398],{"class":154},[144,169555,62692],{"class":259},[144,169557,51450],{"class":154},[144,169559,150949],{"class":259},[144,169561,12466],{"class":154},[144,169563,69137],{"class":259},[144,169565,51450],{"class":154},[144,169567,780],{"class":203},[144,169569,12466],{"class":154},[144,169571,151485],{"class":259},[144,169573,51450],{"class":154},[144,169575,966],{"class":203},[144,169577,4960],{"class":154},[144,169579,169580],{"class":146,"line":1245},[144,169581,33259],{"class":154},[144,169583,169584],{"class":146,"line":1251},[144,169585,2430],{"emptyLinePlaceholder":72},[144,169587,169588,169590,169592,169594,169596,169598,169600,169602,169604,169606,169608,169610,169612,169614],{"class":146,"line":1342},[144,169589,107846],{"class":150},[144,169591,146804],{"class":203},[144,169593,155],{"class":154},[144,169595,151844],{"class":259},[144,169597,12466],{"class":154},[144,169599,151989],{"class":259},[144,169601,12466],{"class":154},[144,169603,146819],{"class":5247},[144,169605,200],{"class":150},[144,169607,146824],{"class":259},[144,169609,13745],{"class":154},[144,169611,31396],{"class":150},[144,169613,148166],{"class":5247},[144,169615,3769],{"class":154},[144,169617,169618,169621,169623,169625,169627,169629,169631,169633,169635,169637,169639],{"class":146,"line":1348},[144,169619,169620],{"class":154},"    json.dump(students, ",[144,169622,45367],{"class":5247},[144,169624,12466],{"class":154},[144,169626,147150],{"class":5247},[144,169628,200],{"class":150},[144,169630,34000],{"class":203},[144,169632,12466],{"class":154},[144,169634,152025],{"class":5247},[144,169636,200],{"class":150},[144,169638,232],{"class":203},[144,169640,161],{"class":154},[14,169642,169643],{},"读取 JSON 文件：",[135,169645,169647],{"className":30391,"code":169646,"language":30393,"meta":30,"style":30},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[141,169648,169649,169655,169659,169689,169701,169705],{"__ignoreMap":30},[144,169650,169651,169653],{"class":146,"line":147},[144,169652,30405],{"class":150},[144,169654,147104],{"class":154},[144,169656,169657],{"class":146,"line":66},[144,169658,2430],{"emptyLinePlaceholder":72},[144,169660,169661,169663,169665,169667,169669,169671,169673,169675,169677,169679,169681,169683,169685,169687],{"class":146,"line":1210},[144,169662,107846],{"class":150},[144,169664,146804],{"class":203},[144,169666,155],{"class":154},[144,169668,151844],{"class":259},[144,169670,12466],{"class":154},[144,169672,146814],{"class":259},[144,169674,12466],{"class":154},[144,169676,146819],{"class":5247},[144,169678,200],{"class":150},[144,169680,146824],{"class":259},[144,169682,13745],{"class":154},[144,169684,31396],{"class":150},[144,169686,148166],{"class":5247},[144,169688,3769],{"class":154},[144,169690,169691,169693,169695,169697,169699],{"class":146,"line":1225},[144,169692,153050],{"class":154},[144,169694,200],{"class":150},[144,169696,148177],{"class":154},[144,169698,45367],{"class":5247},[144,169700,161],{"class":154},[144,169702,169703],{"class":146,"line":1231},[144,169704,2430],{"emptyLinePlaceholder":72},[144,169706,169707,169709],{"class":146,"line":1245},[144,169708,30428],{"class":203},[144,169710,165008],{"class":154},[18,169712,169714],{"id":169713},"_811-csv文件","8.11 CSV文件",[14,169716,169717],{},"CSV 是逗号分隔值，常用于表格数据。",[14,169719,169720],{},"写入 CSV：",[135,169722,169724],{"className":30391,"code":169723,"language":30393,"meta":30,"style":30},"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",[141,169725,169726,169733,169737,169745,169763,169779,169795,169799,169803,169843,169857],{"__ignoreMap":30},[144,169727,169728,169730],{"class":146,"line":147},[144,169729,30405],{"class":150},[144,169731,169732],{"class":154}," csv\n",[144,169734,169735],{"class":146,"line":66},[144,169736,2430],{"emptyLinePlaceholder":72},[144,169738,169739,169741,169743],{"class":146,"line":1210},[144,169740,159729],{"class":154},[144,169742,200],{"class":150},[144,169744,55460],{"class":154},[144,169746,169747,169750,169752,169754,169756,169758,169761],{"class":146,"line":1225},[144,169748,169749],{"class":154},"    [",[144,169751,73112],{"class":259},[144,169753,12466],{"class":154},[144,169755,73145],{"class":259},[144,169757,12466],{"class":154},[144,169759,169760],{"class":259},"\"成绩\"",[144,169762,87849],{"class":154},[144,169764,169765,169767,169769,169771,169773,169775,169777],{"class":146,"line":1231},[144,169766,169749],{"class":154},[144,169768,149901],{"class":259},[144,169770,12466],{"class":154},[144,169772,805],{"class":203},[144,169774,12466],{"class":154},[144,169776,1144],{"class":203},[144,169778,87849],{"class":154},[144,169780,169781,169783,169785,169787,169789,169791,169793],{"class":146,"line":1245},[144,169782,169749],{"class":154},[144,169784,150949],{"class":259},[144,169786,12466],{"class":154},[144,169788,780],{"class":203},[144,169790,12466],{"class":154},[144,169792,966],{"class":203},[144,169794,87849],{"class":154},[144,169796,169797],{"class":146,"line":1251},[144,169798,33259],{"class":154},[144,169800,169801],{"class":146,"line":1342},[144,169802,2430],{"emptyLinePlaceholder":72},[144,169804,169805,169807,169809,169811,169814,169816,169818,169820,169822,169824,169826,169828,169831,169833,169835,169837,169839,169841],{"class":146,"line":1348},[144,169806,107846],{"class":150},[144,169808,146804],{"class":203},[144,169810,155],{"class":154},[144,169812,169813],{"class":259},"\"students.csv\"",[144,169815,12466],{"class":154},[144,169817,151989],{"class":259},[144,169819,12466],{"class":154},[144,169821,146819],{"class":5247},[144,169823,200],{"class":150},[144,169825,146824],{"class":259},[144,169827,12466],{"class":154},[144,169829,169830],{"class":5247},"newline",[144,169832,200],{"class":150},[144,169834,7683],{"class":259},[144,169836,13745],{"class":154},[144,169838,31396],{"class":150},[144,169840,148166],{"class":5247},[144,169842,3769],{"class":154},[144,169844,169845,169848,169850,169853,169855],{"class":146,"line":1360},[144,169846,169847],{"class":154},"    writer ",[144,169849,200],{"class":150},[144,169851,169852],{"class":154}," csv.writer(",[144,169854,45367],{"class":5247},[144,169856,161],{"class":154},[144,169858,169859],{"class":146,"line":1642},[144,169860,169861],{"class":154},"    writer.writerows(students)\n",[14,169863,169864],{},"读取 CSV：",[135,169866,169868],{"className":30391,"code":169867,"language":30393,"meta":30,"style":30},"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",[141,169869,169870,169876,169880,169910,169924,169936],{"__ignoreMap":30},[144,169871,169872,169874],{"class":146,"line":147},[144,169873,30405],{"class":150},[144,169875,169732],{"class":154},[144,169877,169878],{"class":146,"line":66},[144,169879,2430],{"emptyLinePlaceholder":72},[144,169881,169882,169884,169886,169888,169890,169892,169894,169896,169898,169900,169902,169904,169906,169908],{"class":146,"line":1210},[144,169883,107846],{"class":150},[144,169885,146804],{"class":203},[144,169887,155],{"class":154},[144,169889,169813],{"class":259},[144,169891,12466],{"class":154},[144,169893,146814],{"class":259},[144,169895,12466],{"class":154},[144,169897,146819],{"class":5247},[144,169899,200],{"class":150},[144,169901,146824],{"class":259},[144,169903,13745],{"class":154},[144,169905,31396],{"class":150},[144,169907,148166],{"class":5247},[144,169909,3769],{"class":154},[144,169911,169912,169915,169917,169920,169922],{"class":146,"line":1225},[144,169913,169914],{"class":154},"    reader ",[144,169916,200],{"class":150},[144,169918,169919],{"class":154}," csv.reader(",[144,169921,45367],{"class":5247},[144,169923,161],{"class":154},[144,169925,169926,169928,169931,169933],{"class":146,"line":1231},[144,169927,3231],{"class":150},[144,169929,169930],{"class":154}," row ",[144,169932,26056],{"class":150},[144,169934,169935],{"class":154}," reader:\n",[144,169937,169938,169940],{"class":146,"line":1245},[144,169939,32464],{"class":203},[144,169941,169942],{"class":154},"(row)\n",[14,169944,169945],{},"使用字典写入：",[135,169947,169949],{"className":30391,"code":169948,"language":30393,"meta":30,"style":30},"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",[141,169950,169951,169957,169961,169969,169997,170025,170029,170033,170071,170092,170113,170118],{"__ignoreMap":30},[144,169952,169953,169955],{"class":146,"line":147},[144,169954,30405],{"class":150},[144,169956,169732],{"class":154},[144,169958,169959],{"class":146,"line":66},[144,169960,2430],{"emptyLinePlaceholder":72},[144,169962,169963,169965,169967],{"class":146,"line":1210},[144,169964,159729],{"class":154},[144,169966,200],{"class":150},[144,169968,55460],{"class":154},[144,169970,169971,169973,169975,169977,169979,169981,169983,169985,169987,169989,169991,169993,169995],{"class":146,"line":1225},[144,169972,148398],{"class":154},[144,169974,62692],{"class":259},[144,169976,51450],{"class":154},[144,169978,149901],{"class":259},[144,169980,12466],{"class":154},[144,169982,69137],{"class":259},[144,169984,51450],{"class":154},[144,169986,805],{"class":203},[144,169988,12466],{"class":154},[144,169990,151485],{"class":259},[144,169992,51450],{"class":154},[144,169994,1144],{"class":203},[144,169996,4960],{"class":154},[144,169998,169999,170001,170003,170005,170007,170009,170011,170013,170015,170017,170019,170021,170023],{"class":146,"line":1231},[144,170000,148398],{"class":154},[144,170002,62692],{"class":259},[144,170004,51450],{"class":154},[144,170006,150949],{"class":259},[144,170008,12466],{"class":154},[144,170010,69137],{"class":259},[144,170012,51450],{"class":154},[144,170014,780],{"class":203},[144,170016,12466],{"class":154},[144,170018,151485],{"class":259},[144,170020,51450],{"class":154},[144,170022,966],{"class":203},[144,170024,4960],{"class":154},[144,170026,170027],{"class":146,"line":1245},[144,170028,33259],{"class":154},[144,170030,170031],{"class":146,"line":1251},[144,170032,2430],{"emptyLinePlaceholder":72},[144,170034,170035,170037,170039,170041,170043,170045,170047,170049,170051,170053,170055,170057,170059,170061,170063,170065,170067,170069],{"class":146,"line":1342},[144,170036,107846],{"class":150},[144,170038,146804],{"class":203},[144,170040,155],{"class":154},[144,170042,169813],{"class":259},[144,170044,12466],{"class":154},[144,170046,151989],{"class":259},[144,170048,12466],{"class":154},[144,170050,146819],{"class":5247},[144,170052,200],{"class":150},[144,170054,146824],{"class":259},[144,170056,12466],{"class":154},[144,170058,169830],{"class":5247},[144,170060,200],{"class":150},[144,170062,7683],{"class":259},[144,170064,13745],{"class":154},[144,170066,31396],{"class":150},[144,170068,148166],{"class":5247},[144,170070,3769],{"class":154},[144,170072,170073,170076,170078,170080,170082,170084,170086,170088,170090],{"class":146,"line":1348},[144,170074,170075],{"class":154},"    fieldnames ",[144,170077,200],{"class":150},[144,170079,52239],{"class":154},[144,170081,62692],{"class":259},[144,170083,12466],{"class":154},[144,170085,69137],{"class":259},[144,170087,12466],{"class":154},[144,170089,151485],{"class":259},[144,170091,33259],{"class":154},[144,170093,170094,170096,170098,170101,170103,170105,170108,170110],{"class":146,"line":1360},[144,170095,169847],{"class":154},[144,170097,200],{"class":150},[144,170099,170100],{"class":154}," csv.DictWriter(",[144,170102,45367],{"class":5247},[144,170104,12466],{"class":154},[144,170106,170107],{"class":5247},"fieldnames",[144,170109,200],{"class":150},[144,170111,170112],{"class":154},"fieldnames)\n",[144,170114,170115],{"class":146,"line":1642},[144,170116,170117],{"class":154},"    writer.writeheader()\n",[144,170119,170120],{"class":146,"line":1647},[144,170121,169861],{"class":154},[18,170123,170125],{"id":170124},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170127,123305],{},[98,170129,170130,170133,170136],{},[101,170131,170132],{},"读取文本文件。",[101,170134,170135],{},"统计每个单词出现次数。",[101,170137,170138],{},"输出出现次数最多的前 10 个单词。",[14,170140,10066],{},[135,170142,170144],{"className":30391,"code":170143,"language":30393,"meta":30,"style":30},"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",[141,170145,170146,170156,170160,170173,170189,170193,170203,170212,170216,170228,170248,170257,170261,170279,170283,170313,170317,170333],{"__ignoreMap":30},[144,170147,170148,170150,170152,170154],{"class":146,"line":147},[144,170149,30750],{"class":150},[144,170151,108324],{"class":154},[144,170153,30405],{"class":150},[144,170155,108329],{"class":154},[144,170157,170158],{"class":146,"line":66},[144,170159,2430],{"emptyLinePlaceholder":72},[144,170161,170162,170164,170166,170168,170171],{"class":146,"line":1210},[144,170163,168324],{"class":154},[144,170165,200],{"class":150},[144,170167,108558],{"class":154},[144,170169,170170],{"class":259},"\"article.txt\"",[144,170172,161],{"class":154},[144,170174,170175,170177,170179,170181,170183,170185,170187],{"class":146,"line":1225},[144,170176,168507],{"class":154},[144,170178,200],{"class":150},[144,170180,169384],{"class":154},[144,170182,146819],{"class":5247},[144,170184,200],{"class":150},[144,170186,146824],{"class":259},[144,170188,161],{"class":154},[144,170190,170191],{"class":146,"line":1231},[144,170192,2430],{"emptyLinePlaceholder":72},[144,170194,170195,170198,170200],{"class":146,"line":1245},[144,170196,170197],{"class":154},"words ",[144,170199,200],{"class":150},[144,170201,170202],{"class":154}," content.lower().split()\n",[144,170204,170205,170208,170210],{"class":146,"line":1251},[144,170206,170207],{"class":154},"counter ",[144,170209,200],{"class":150},[144,170211,87881],{"class":154},[144,170213,170214],{"class":146,"line":1342},[144,170215,2430],{"emptyLinePlaceholder":72},[144,170217,170218,170220,170223,170225],{"class":146,"line":1348},[144,170219,3055],{"class":150},[144,170221,170222],{"class":154}," word ",[144,170224,26056],{"class":150},[144,170226,170227],{"class":154}," words:\n",[144,170229,170230,170233,170235,170238,170241,170243,170246],{"class":146,"line":1360},[144,170231,170232],{"class":154},"    word ",[144,170234,200],{"class":150},[144,170236,170237],{"class":154}," word.strip(",[144,170239,170240],{"class":259},"\".,!?;:",[144,170242,156508],{"class":203},[144,170244,170245],{"class":259},"'()[]\"",[144,170247,161],{"class":154},[144,170249,170250,170252,170254],{"class":146,"line":1642},[144,170251,3131],{"class":150},[144,170253,38943],{"class":150},[144,170255,170256],{"class":154}," word:\n",[144,170258,170259],{"class":146,"line":1647},[144,170260,148525],{"class":150},[144,170262,170263,170266,170268,170271,170273,170275,170277],{"class":146,"line":1653},[144,170264,170265],{"class":154},"    counter[word] ",[144,170267,200],{"class":150},[144,170269,170270],{"class":154}," counter.get(word, ",[144,170272,346],{"class":203},[144,170274,13745],{"class":154},[144,170276,636],{"class":150},[144,170278,55712],{"class":203},[144,170280,170281],{"class":146,"line":1658},[144,170282,2430],{"emptyLinePlaceholder":72},[144,170284,170285,170288,170290,170292,170295,170297,170299,170301,170303,170305,170307,170309,170311],{"class":146,"line":1672},[144,170286,170287],{"class":154},"items ",[144,170289,200],{"class":150},[144,170291,163617],{"class":203},[144,170293,170294],{"class":154},"(counter.items(), ",[144,170296,153959],{"class":5247},[144,170298,153962],{"class":150},[144,170300,153965],{"class":154},[144,170302,372],{"class":203},[144,170304,112215],{"class":154},[144,170306,163541],{"class":5247},[144,170308,200],{"class":150},[144,170310,31489],{"class":203},[144,170312,161],{"class":154},[144,170314,170315],{"class":146,"line":1677},[144,170316,2430],{"emptyLinePlaceholder":72},[144,170318,170319,170321,170324,170326,170329,170331],{"class":146,"line":1683},[144,170320,3055],{"class":150},[144,170322,170323],{"class":154}," word, count ",[144,170325,26056],{"class":150},[144,170327,170328],{"class":154}," items[:",[144,170330,601],{"class":203},[144,170332,165768],{"class":154},[144,170334,170335,170337],{"class":146,"line":1704},[144,170336,31312],{"class":203},[144,170338,170339],{"class":154},"(word, count)\n",[18,170341,170343],{"id":170342},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[135,170345,170347],{"className":30391,"code":170346,"language":30393,"meta":30,"style":30},"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",[141,170348,170349,170355,170365,170369,170381,170385,170389,170397,170407,170413,170417,170447,170457,170461,170465,170473,170503,170527,170531,170535,170543,170572,170577],{"__ignoreMap":30},[144,170350,170351,170353],{"class":146,"line":147},[144,170352,30405],{"class":150},[144,170354,147104],{"class":154},[144,170356,170357,170359,170361,170363],{"class":146,"line":66},[144,170358,30750],{"class":150},[144,170360,108324],{"class":154},[144,170362,30405],{"class":150},[144,170364,108329],{"class":154},[144,170366,170367],{"class":146,"line":1210},[144,170368,2430],{"emptyLinePlaceholder":72},[144,170370,170371,170373,170375,170377,170379],{"class":146,"line":1225},[144,170372,151837],{"class":203},[144,170374,13595],{"class":150},[144,170376,108558],{"class":154},[144,170378,151844],{"class":259},[144,170380,161],{"class":154},[144,170382,170383],{"class":146,"line":1231},[144,170384,2430],{"emptyLinePlaceholder":72},[144,170386,170387],{"class":146,"line":1245},[144,170388,2430],{"emptyLinePlaceholder":72},[144,170390,170391,170393,170395],{"class":146,"line":1251},[144,170392,31960],{"class":150},[144,170394,151861],{"class":1993},[144,170396,31966],{"class":154},[144,170398,170399,170401,170403,170405],{"class":146,"line":1342},[144,170400,3131],{"class":150},[144,170402,38943],{"class":150},[144,170404,151872],{"class":203},[144,170406,151875],{"class":154},[144,170408,170409,170411],{"class":146,"line":1348},[144,170410,14783],{"class":150},[144,170412,51851],{"class":154},[144,170414,170415],{"class":146,"line":1360},[144,170416,2430],{"emptyLinePlaceholder":72},[144,170418,170419,170421,170423,170425,170427,170429,170431,170433,170435,170437,170439,170441,170443,170445],{"class":146,"line":1642},[144,170420,34191],{"class":150},[144,170422,146804],{"class":203},[144,170424,155],{"class":154},[144,170426,151837],{"class":203},[144,170428,12466],{"class":154},[144,170430,146814],{"class":259},[144,170432,12466],{"class":154},[144,170434,146819],{"class":5247},[144,170436,200],{"class":150},[144,170438,146824],{"class":259},[144,170440,13745],{"class":154},[144,170442,31396],{"class":150},[144,170444,148166],{"class":5247},[144,170446,3769],{"class":154},[144,170448,170449,170451,170453,170455],{"class":146,"line":1647},[144,170450,14783],{"class":150},[144,170452,148177],{"class":154},[144,170454,45367],{"class":5247},[144,170456,161],{"class":154},[144,170458,170459],{"class":146,"line":1653},[144,170460,2430],{"emptyLinePlaceholder":72},[144,170462,170463],{"class":146,"line":1658},[144,170464,2430],{"emptyLinePlaceholder":72},[144,170466,170467,170469,170471],{"class":146,"line":1672},[144,170468,31960],{"class":150},[144,170470,151971],{"class":1993},[144,170472,151974],{"class":154},[144,170474,170475,170477,170479,170481,170483,170485,170487,170489,170491,170493,170495,170497,170499,170501],{"class":146,"line":1677},[144,170476,34191],{"class":150},[144,170478,146804],{"class":203},[144,170480,155],{"class":154},[144,170482,151837],{"class":203},[144,170484,12466],{"class":154},[144,170486,151989],{"class":259},[144,170488,12466],{"class":154},[144,170490,146819],{"class":5247},[144,170492,200],{"class":150},[144,170494,146824],{"class":259},[144,170496,13745],{"class":154},[144,170498,31396],{"class":150},[144,170500,148166],{"class":5247},[144,170502,3769],{"class":154},[144,170504,170505,170507,170509,170511,170513,170515,170517,170519,170521,170523,170525],{"class":146,"line":1683},[144,170506,152010],{"class":154},[144,170508,45367],{"class":5247},[144,170510,12466],{"class":154},[144,170512,147150],{"class":5247},[144,170514,200],{"class":150},[144,170516,34000],{"class":203},[144,170518,12466],{"class":154},[144,170520,152025],{"class":5247},[144,170522,200],{"class":150},[144,170524,232],{"class":203},[144,170526,161],{"class":154},[144,170528,170529],{"class":146,"line":1704},[144,170530,2430],{"emptyLinePlaceholder":72},[144,170532,170533],{"class":146,"line":1709},[144,170534,2430],{"emptyLinePlaceholder":72},[144,170536,170537,170539,170541],{"class":146,"line":1723},[144,170538,159729],{"class":154},[144,170540,200],{"class":150},[144,170542,153055],{"class":154},[144,170544,170545,170548,170550,170552,170554,170556,170558,170560,170562,170564,170566,170568,170570],{"class":146,"line":1728},[144,170546,170547],{"class":154},"students.append({",[144,170549,62692],{"class":259},[144,170551,51450],{"class":154},[144,170553,149901],{"class":259},[144,170555,12466],{"class":154},[144,170557,69137],{"class":259},[144,170559,51450],{"class":154},[144,170561,805],{"class":203},[144,170563,12466],{"class":154},[144,170565,151485],{"class":259},[144,170567,51450],{"class":154},[144,170569,1144],{"class":203},[144,170571,165165],{"class":154},[144,170573,170574],{"class":146,"line":1757},[144,170575,170576],{"class":154},"save_students(students)\n",[144,170578,170579,170581,170583,170586],{"class":146,"line":1762},[144,170580,30428],{"class":203},[144,170582,155],{"class":154},[144,170584,170585],{"class":259},"\"保存成功\"",[144,170587,161],{"class":154},[18,170589,170591],{"id":170590},"_814-易错点","8.14 易错点",[98,170593,170594,170598,170604,170609,170616,170623],{},[101,170595,170596,168857],{},[141,170597,950],{},[101,170599,170600,170601,28398],{},"读写中文要指定 ",[141,170602,170603],{},"encoding=\"utf-8\"",[101,170605,170606,170607,28398],{},"打开文件后要关闭，推荐使用 ",[141,170608,107846],{},[101,170610,170611,170612,170615],{},"读取大文件不要直接 ",[141,170613,170614],{},"read()"," 全部内容。",[101,170617,170618,170619,170622],{},"Windows 写 CSV 时建议加 ",[141,170620,170621],{},"newline=\"\"","，避免空行。",[101,170624,170625],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[18,170627,170629],{"id":170628},"_815-本章练习","8.15 本章练习",[98,170631,170632,170639,170644,170647,170650],{},[101,170633,170634,170635,170638],{},"写入一个 ",[141,170636,170637],{},"students.txt","，每行保存一个学生姓名。",[101,170640,104368,170641,170643],{},[141,170642,170637],{}," 并输出所有学生。",[101,170645,170646],{},"把学生列表保存为 JSON 文件。",[101,170648,170649],{},"从 JSON 文件读取学生数据，计算平均分。",[101,170651,170652,170653,170656,170657,170660],{},"写一个日志函数 ",[141,170654,170655],{},"write_log(message)","，每次调用向 ",[141,170658,170659],{},"app.log"," 追加一行。",[5157,170662,170663],{},"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":30,"searchDepth":66,"depth":66,"links":170665},[170666,170667,170671,170672,170678,170679,170680,170681,170682,170683,170684,170685,170686,170687,170688],{"id":168177,"depth":66,"text":168178},{"id":168218,"depth":66,"text":168219,"children":170668},[170669,170670],{"id":168222,"depth":1210,"text":168223},{"id":168256,"depth":1210,"text":168257},{"id":168370,"depth":66,"text":168371},{"id":168463,"depth":66,"text":168464,"children":170673},[170674,170675,170676,170677],{"id":168467,"depth":1210,"text":168468},{"id":168554,"depth":1210,"text":168555},{"id":168624,"depth":1210,"text":168625},{"id":168718,"depth":1210,"text":168719},{"id":168788,"depth":66,"text":168789},{"id":168851,"depth":66,"text":168852},{"id":169012,"depth":66,"text":169013},{"id":169075,"depth":66,"text":169076},{"id":169191,"depth":66,"text":169192},{"id":169401,"depth":66,"text":169402},{"id":169713,"depth":66,"text":169714},{"id":170124,"depth":66,"text":170125},{"id":170342,"depth":66,"text":170343},{"id":170590,"depth":66,"text":170591},{"id":170628,"depth":66,"text":170629},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168169,"description":23408},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170695,"title":170696,"body":170697,"description":23408,"extension":70,"meta":172883,"navigation":72,"path":172884,"seo":172885,"stem":172886,"__hash__":172887},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170698,"toc":172850},[170699,170702,170706,170709,170712,170804,170806,170825,170830,170834,170837,170840,170869,170876,170879,170883,170886,170915,170917,170969,170975,171028,171032,171130,171133,171200,171204,171261,171263,171269,171273,171278,171284,171375,171380,171384,171387,171465,171468,171506,171510,171628,171631,171635,171638,171683,171686,171690,171695,171701,171751,171754,171785,171789,171793,171823,171827,171862,171866,171901,171941,171945,171961,171964,171968,171972,172051,172055,172096,172100,172155,172159,172193,172197,172227,172236,172243,172249,172306,172309,172317,172320,172324,172331,172334,172340,172343,172360,172365,172369,172375,172388,172391,172428,172431,172442,172445,172459,172462,172476,172480,172487,172520,172523,172525,172531,172534,172538,172540,172546,172551,172724,172728,172791,172795,172819,172823,172847],[10,170700,170696],{"id":170701},"_9-异常模块与包",[18,170703,170705],{"id":170704},"_91-什么是异常","9.1 什么是异常",[14,170707,170708],{},"异常是程序运行过程中出现的错误。",[14,170710,170711],{},"常见异常：",[292,170713,170714,170723],{},[295,170715,170716],{},[298,170717,170718,170721],{},[301,170719,170720],{},"异常",[301,170722,25882],{},[339,170724,170725,170735,170745,170754,170764,170774,170784,170794],{},[298,170726,170727,170732],{},[344,170728,170729],{},[141,170730,170731],{},"NameError",[344,170733,170734],{},"使用了未定义变量",[298,170736,170737,170742],{},[344,170738,170739],{},[141,170740,170741],{},"TypeError",[344,170743,170744],{},"类型不匹配",[298,170746,170747,170751],{},[344,170748,170749],{},[141,170750,154847],{},[344,170752,170753],{},"值不合法",[298,170755,170756,170761],{},[344,170757,170758],{},[141,170759,170760],{},"IndexError",[344,170762,170763],{},"列表索引越界",[298,170765,170766,170771],{},[344,170767,170768],{},[141,170769,170770],{},"KeyError",[344,170772,170773],{},"字典 key 不存在",[298,170775,170776,170781],{},[344,170777,170778],{},[141,170779,170780],{},"FileNotFoundError",[344,170782,170783],{},"文件不存在",[298,170785,170786,170791],{},[344,170787,170788],{},[141,170789,170790],{},"ZeroDivisionError",[344,170792,170793],{},"除数为 0",[298,170795,170796,170801],{},[344,170797,170798],{},[141,170799,170800],{},"ImportError",[344,170802,170803],{},"导入失败",[14,170805,15166],{},[135,170807,170809],{"className":30391,"code":170808,"language":30393,"meta":30,"style":30},"num = int(\"abc\")\n",[141,170810,170811],{"__ignoreMap":30},[144,170812,170813,170815,170817,170819,170821,170823],{"class":146,"line":147},[144,170814,155800],{"class":154},[144,170816,200],{"class":150},[144,170818,2412],{"class":203},[144,170820,155],{"class":154},[144,170822,155893],{"class":259},[144,170824,161],{"class":154},[14,170826,170827,170828,28398],{},"会触发 ",[141,170829,154847],{},[18,170831,170833],{"id":170832},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,170835,170836],{},"如果不处理异常，程序会直接终止。",[14,170838,170839],{},"例如用户输入年龄：",[135,170841,170843],{"className":30391,"code":170842,"language":30393,"meta":30,"style":30},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[141,170844,170845,170863],{"__ignoreMap":30},[144,170846,170847,170849,170851,170853,170855,170857,170859,170861],{"class":146,"line":147},[144,170848,146559],{"class":154},[144,170850,200],{"class":150},[144,170852,2412],{"class":203},[144,170854,155],{"class":154},[144,170856,53834],{"class":203},[144,170858,155],{"class":154},[144,170860,152407],{"class":259},[144,170862,30510],{"class":154},[144,170864,170865,170867],{"class":146,"line":66},[144,170866,30428],{"class":203},[144,170868,155774],{"class":154},[14,170870,170871,170872,170875],{},"用户输入 ",[141,170873,170874],{},"abc","，程序就会报错退出。",[14,170877,170878],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[18,170880,170882],{"id":170881},"_93-try-except","9.3 try except",[14,170884,170885],{},"基础语法：",[135,170887,170889],{"className":30391,"code":170888,"language":30393,"meta":30,"style":30},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[141,170890,170891,170898,170903,170910],{"__ignoreMap":30},[144,170892,170893,170896],{"class":146,"line":147},[144,170894,170895],{"class":150},"try",[144,170897,3769],{"class":154},[144,170899,170900],{"class":146,"line":66},[144,170901,170902],{"class":154},"    可能出错的代码\n",[144,170904,170905,170908],{"class":146,"line":1210},[144,170906,170907],{"class":150},"except",[144,170909,3769],{"class":154},[144,170911,170912],{"class":146,"line":1225},[144,170913,170914],{"class":154},"    出错后的处理代码\n",[14,170916,15166],{},[135,170918,170920],{"className":30391,"code":170919,"language":30393,"meta":30,"style":30},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[141,170921,170922,170928,170946,170952,170958],{"__ignoreMap":30},[144,170923,170924,170926],{"class":146,"line":147},[144,170925,170895],{"class":150},[144,170927,3769],{"class":154},[144,170929,170930,170932,170934,170936,170938,170940,170942,170944],{"class":146,"line":66},[144,170931,152399],{"class":154},[144,170933,200],{"class":150},[144,170935,2412],{"class":203},[144,170937,155],{"class":154},[144,170939,53834],{"class":203},[144,170941,155],{"class":154},[144,170943,152407],{"class":259},[144,170945,30510],{"class":154},[144,170947,170948,170950],{"class":146,"line":1210},[144,170949,31312],{"class":203},[144,170951,155774],{"class":154},[144,170953,170954,170956],{"class":146,"line":1225},[144,170955,170907],{"class":150},[144,170957,3769],{"class":154},[144,170959,170960,170962,170964,170967],{"class":146,"line":1231},[144,170961,31312],{"class":203},[144,170963,155],{"class":154},[144,170965,170966],{"class":259},"\"年龄必须是数字\"",[144,170968,161],{"class":154},[14,170970,170971,170972,170974],{},"不建议裸写 ",[141,170973,170907],{},"，最好指定异常类型。",[135,170976,170978],{"className":30391,"code":170977,"language":30393,"meta":30,"style":30},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[141,170979,170980,170986,171004,171010,171018],{"__ignoreMap":30},[144,170981,170982,170984],{"class":146,"line":147},[144,170983,170895],{"class":150},[144,170985,3769],{"class":154},[144,170987,170988,170990,170992,170994,170996,170998,171000,171002],{"class":146,"line":66},[144,170989,152399],{"class":154},[144,170991,200],{"class":150},[144,170993,2412],{"class":203},[144,170995,155],{"class":154},[144,170997,53834],{"class":203},[144,170999,155],{"class":154},[144,171001,152407],{"class":259},[144,171003,30510],{"class":154},[144,171005,171006,171008],{"class":146,"line":1210},[144,171007,31312],{"class":203},[144,171009,155774],{"class":154},[144,171011,171012,171014,171016],{"class":146,"line":1225},[144,171013,170907],{"class":150},[144,171015,152239],{"class":203},[144,171017,3769],{"class":154},[144,171019,171020,171022,171024,171026],{"class":146,"line":1231},[144,171021,31312],{"class":203},[144,171023,155],{"class":154},[144,171025,170966],{"class":259},[144,171027,161],{"class":154},[18,171029,171031],{"id":171030},"_94-捕获多个异常","9.4 捕获多个异常",[135,171033,171035],{"className":30391,"code":171034,"language":30393,"meta":30,"style":30},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[141,171036,171037,171043,171064,171084,171091,171099,171110,171119],{"__ignoreMap":30},[144,171038,171039,171041],{"class":146,"line":147},[144,171040,170895],{"class":150},[144,171042,3769],{"class":154},[144,171044,171045,171048,171050,171052,171054,171056,171058,171060,171062],{"class":146,"line":66},[144,171046,171047],{"class":154},"    nums ",[144,171049,200],{"class":150},[144,171051,52239],{"class":154},[144,171053,372],{"class":203},[144,171055,12466],{"class":154},[144,171057,232],{"class":203},[144,171059,12466],{"class":154},[144,171061,226],{"class":203},[144,171063,33259],{"class":154},[144,171065,171066,171069,171071,171073,171075,171077,171079,171082],{"class":146,"line":1210},[144,171067,171068],{"class":154},"    index ",[144,171070,200],{"class":150},[144,171072,2412],{"class":203},[144,171074,155],{"class":154},[144,171076,53834],{"class":203},[144,171078,155],{"class":154},[144,171080,171081],{"class":259},"\"请输入索引:\"",[144,171083,30510],{"class":154},[144,171085,171086,171088],{"class":146,"line":1225},[144,171087,31312],{"class":203},[144,171089,171090],{"class":154},"(nums[index])\n",[144,171092,171093,171095,171097],{"class":146,"line":1231},[144,171094,170907],{"class":150},[144,171096,152239],{"class":203},[144,171098,3769],{"class":154},[144,171100,171101,171103,171105,171108],{"class":146,"line":1245},[144,171102,31312],{"class":203},[144,171104,155],{"class":154},[144,171106,171107],{"class":259},"\"索引必须是整数\"",[144,171109,161],{"class":154},[144,171111,171112,171114,171117],{"class":146,"line":1251},[144,171113,170907],{"class":150},[144,171115,171116],{"class":203}," IndexError",[144,171118,3769],{"class":154},[144,171120,171121,171123,171125,171128],{"class":146,"line":1342},[144,171122,31312],{"class":203},[144,171124,155],{"class":154},[144,171126,171127],{"class":259},"\"索引越界\"",[144,171129,161],{"class":154},[14,171131,171132],{},"多个异常使用相同处理逻辑：",[135,171134,171136],{"className":30391,"code":171135,"language":30393,"meta":30,"style":30},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[141,171137,171138,171144,171162,171175,171189],{"__ignoreMap":30},[144,171139,171140,171142],{"class":146,"line":147},[144,171141,170895],{"class":150},[144,171143,3769],{"class":154},[144,171145,171146,171148,171150,171152,171154,171156,171158,171160],{"class":146,"line":66},[144,171147,45606],{"class":154},[144,171149,200],{"class":150},[144,171151,2412],{"class":203},[144,171153,155],{"class":154},[144,171155,53834],{"class":203},[144,171157,155],{"class":154},[144,171159,155809],{"class":259},[144,171161,30510],{"class":154},[144,171163,171164,171166,171168,171170,171172],{"class":146,"line":1210},[144,171165,31312],{"class":203},[144,171167,155],{"class":154},[144,171169,601],{"class":203},[144,171171,156059],{"class":150},[144,171173,171174],{"class":154}," num)\n",[144,171176,171177,171179,171181,171183,171185,171187],{"class":146,"line":1225},[144,171178,170907],{"class":150},[144,171180,1688],{"class":154},[144,171182,154847],{"class":203},[144,171184,12466],{"class":154},[144,171186,170790],{"class":203},[144,171188,30799],{"class":154},[144,171190,171191,171193,171195,171198],{"class":146,"line":1231},[144,171192,31312],{"class":203},[144,171194,155],{"class":154},[144,171196,171197],{"class":259},"\"输入不合法\"",[144,171199,161],{"class":154},[18,171201,171203],{"id":171202},"_95-获取异常信息","9.5 获取异常信息",[135,171205,171207],{"className":30391,"code":171206,"language":30393,"meta":30,"style":30},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[141,171208,171209,171215,171229,171240],{"__ignoreMap":30},[144,171210,171211,171213],{"class":146,"line":147},[144,171212,170895],{"class":150},[144,171214,3769],{"class":154},[144,171216,171217,171219,171221,171223,171225,171227],{"class":146,"line":66},[144,171218,45606],{"class":154},[144,171220,200],{"class":150},[144,171222,2412],{"class":203},[144,171224,155],{"class":154},[144,171226,155893],{"class":259},[144,171228,161],{"class":154},[144,171230,171231,171233,171235,171237],{"class":146,"line":1210},[144,171232,170907],{"class":150},[144,171234,152239],{"class":203},[144,171236,64617],{"class":150},[144,171238,171239],{"class":154}," e:\n",[144,171241,171242,171244,171246,171248,171251,171253,171255,171257,171259],{"class":146,"line":1225},[144,171243,31312],{"class":203},[144,171245,155],{"class":154},[144,171247,207],{"class":150},[144,171249,171250],{"class":259},"\"出错了:",[144,171252,1051],{"class":203},[144,171254,229],{"class":154},[144,171256,1101],{"class":203},[144,171258,406],{"class":259},[144,171260,161],{"class":154},[14,171262,146470],{},[135,171264,171267],{"className":171265,"code":171266,"language":5218,"meta":30},[5216],"出错了:invalid literal for int() with base 10: 'abc'\n",[141,171268,171266],{"__ignoreMap":30},[18,171270,171272],{"id":171271},"_96-else和finally","9.6 else和finally",[14,171274,171275,171277],{},[141,171276,1731],{},"：没有异常时执行。",[14,171279,171280,171283],{},[141,171281,171282],{},"finally","：无论是否异常都会执行。",[135,171285,171287],{"className":30391,"code":171286,"language":30393,"meta":30,"style":30},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[141,171288,171289,171295,171313,171321,171331,171337,171358,171364],{"__ignoreMap":30},[144,171290,171291,171293],{"class":146,"line":147},[144,171292,170895],{"class":150},[144,171294,3769],{"class":154},[144,171296,171297,171299,171301,171303,171305,171307,171309,171311],{"class":146,"line":66},[144,171298,45606],{"class":154},[144,171300,200],{"class":150},[144,171302,2412],{"class":203},[144,171304,155],{"class":154},[144,171306,53834],{"class":203},[144,171308,155],{"class":154},[144,171310,155809],{"class":259},[144,171312,30510],{"class":154},[144,171314,171315,171317,171319],{"class":146,"line":1210},[144,171316,170907],{"class":150},[144,171318,152239],{"class":203},[144,171320,3769],{"class":154},[144,171322,171323,171325,171327,171329],{"class":146,"line":1225},[144,171324,31312],{"class":203},[144,171326,155],{"class":154},[144,171328,153227],{"class":259},[144,171330,161],{"class":154},[144,171332,171333,171335],{"class":146,"line":1231},[144,171334,1731],{"class":150},[144,171336,3769],{"class":154},[144,171338,171339,171341,171343,171345,171348,171350,171352,171354,171356],{"class":146,"line":1245},[144,171340,31312],{"class":203},[144,171342,155],{"class":154},[144,171344,207],{"class":150},[144,171346,171347],{"class":259},"\"输入正确:",[144,171349,1051],{"class":203},[144,171351,1695],{"class":154},[144,171353,1101],{"class":203},[144,171355,406],{"class":259},[144,171357,161],{"class":154},[144,171359,171360,171362],{"class":146,"line":1251},[144,171361,171282],{"class":150},[144,171363,3769],{"class":154},[144,171365,171366,171368,171370,171373],{"class":146,"line":1342},[144,171367,31312],{"class":203},[144,171369,155],{"class":154},[144,171371,171372],{"class":259},"\"程序结束\"",[144,171374,161],{"class":154},[14,171376,171377,171379],{},[141,171378,171282],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[18,171381,171383],{"id":171382},"_97-抛出异常","9.7 抛出异常",[14,171385,171386],{},"程序可以主动抛出异常。",[135,171388,171390],{"className":30391,"code":171389,"language":30393,"meta":30,"style":30},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[141,171391,171392,171401,171413,171426,171446,171450,171454],{"__ignoreMap":30},[144,171393,171394,171396,171399],{"class":146,"line":147},[144,171395,31960],{"class":150},[144,171397,171398],{"class":1993}," set_age",[144,171400,161428],{"class":154},[144,171402,171403,171405,171407,171409,171411],{"class":146,"line":66},[144,171404,3131],{"class":150},[144,171406,15738],{"class":154},[144,171408,1065],{"class":150},[144,171410,4123],{"class":203},[144,171412,3769],{"class":154},[144,171414,171415,171417,171419,171421,171424],{"class":146,"line":1210},[144,171416,103445],{"class":150},[144,171418,152239],{"class":203},[144,171420,155],{"class":154},[144,171422,171423],{"class":259},"\"年龄不能为负数\"",[144,171425,161],{"class":154},[144,171427,171428,171430,171432,171434,171436,171438,171440,171442,171444],{"class":146,"line":1225},[144,171429,31312],{"class":203},[144,171431,155],{"class":154},[144,171433,207],{"class":150},[144,171435,161996],{"class":259},[144,171437,1051],{"class":203},[144,171439,70234],{"class":154},[144,171441,1101],{"class":203},[144,171443,406],{"class":259},[144,171445,161],{"class":154},[144,171447,171448],{"class":146,"line":1231},[144,171449,2430],{"emptyLinePlaceholder":72},[144,171451,171452],{"class":146,"line":1245},[144,171453,2430],{"emptyLinePlaceholder":72},[144,171455,171456,171459,171461,171463],{"class":146,"line":1251},[144,171457,171458],{"class":154},"set_age(",[144,171460,687],{"class":150},[144,171462,372],{"class":203},[144,171464,161],{"class":154},[14,171466,171467],{},"调用者可以捕获：",[135,171469,171471],{"className":30391,"code":171470,"language":30393,"meta":30,"style":30},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[141,171472,171473,171479,171490,171500],{"__ignoreMap":30},[144,171474,171475,171477],{"class":146,"line":147},[144,171476,170895],{"class":150},[144,171478,3769],{"class":154},[144,171480,171481,171484,171486,171488],{"class":146,"line":66},[144,171482,171483],{"class":154},"    set_age(",[144,171485,687],{"class":150},[144,171487,372],{"class":203},[144,171489,161],{"class":154},[144,171491,171492,171494,171496,171498],{"class":146,"line":1210},[144,171493,170907],{"class":150},[144,171495,152239],{"class":203},[144,171497,64617],{"class":150},[144,171499,171239],{"class":154},[144,171501,171502,171504],{"class":146,"line":1225},[144,171503,31312],{"class":203},[144,171505,67012],{"class":154},[18,171507,171509],{"id":171508},"_98-自定义异常","9.8 自定义异常",[135,171511,171513],{"className":30391,"code":171512,"language":30393,"meta":30,"style":30},"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",[141,171514,171515,171529,171533,171537,171541,171549,171559,171570,171580,171584,171588,171594,171611,171622],{"__ignoreMap":30},[144,171516,171517,171519,171522,171524,171527],{"class":146,"line":147},[144,171518,14725],{"class":150},[144,171520,171521],{"class":1993}," BalanceNotEnoughError",[144,171523,155],{"class":154},[144,171525,171526],{"class":203},"Exception",[144,171528,30799],{"class":154},[144,171530,171531],{"class":146,"line":66},[144,171532,149550],{"class":150},[144,171534,171535],{"class":146,"line":1210},[144,171536,2430],{"emptyLinePlaceholder":72},[144,171538,171539],{"class":146,"line":1225},[144,171540,2430],{"emptyLinePlaceholder":72},[144,171542,171543,171545,171547],{"class":146,"line":1231},[144,171544,31960],{"class":150},[144,171546,150199],{"class":1993},[144,171548,162825],{"class":154},[144,171550,171551,171553,171555,171557],{"class":146,"line":1245},[144,171552,3131],{"class":150},[144,171554,150155],{"class":154},[144,171556,1115],{"class":150},[144,171558,162602],{"class":154},[144,171560,171561,171563,171566,171568],{"class":146,"line":1251},[144,171562,103445],{"class":150},[144,171564,171565],{"class":154}," BalanceNotEnoughError(",[144,171567,150250],{"class":259},[144,171569,161],{"class":154},[144,171571,171572,171574,171576,171578],{"class":146,"line":1342},[144,171573,4120],{"class":150},[144,171575,162832],{"class":154},[144,171577,687],{"class":150},[144,171579,150188],{"class":154},[144,171581,171582],{"class":146,"line":1348},[144,171583,2430],{"emptyLinePlaceholder":72},[144,171585,171586],{"class":146,"line":1360},[144,171587,2430],{"emptyLinePlaceholder":72},[144,171589,171590,171592],{"class":146,"line":1642},[144,171591,170895],{"class":150},[144,171593,3769],{"class":154},[144,171595,171596,171598,171600,171603,171605,171607,171609],{"class":146,"line":1647},[144,171597,162503],{"class":154},[144,171599,200],{"class":150},[144,171601,171602],{"class":154}," withdraw(",[144,171604,466],{"class":203},[144,171606,12466],{"class":154},[144,171608,1752],{"class":203},[144,171610,161],{"class":154},[144,171612,171613,171615,171618,171620],{"class":146,"line":1653},[144,171614,170907],{"class":150},[144,171616,171617],{"class":154}," BalanceNotEnoughError ",[144,171619,31396],{"class":150},[144,171621,171239],{"class":154},[144,171623,171624,171626],{"class":146,"line":1658},[144,171625,31312],{"class":203},[144,171627,67012],{"class":154},[14,171629,171630],{},"入门阶段大多数情况使用内置异常即可。",[18,171632,171634],{"id":171633},"_99-traceback","9.9 traceback",[14,171636,171637],{},"调试时可以输出完整异常堆栈。",[135,171639,171641],{"className":30391,"code":171640,"language":30393,"meta":30,"style":30},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[141,171642,171643,171650,171654,171660,171670,171678],{"__ignoreMap":30},[144,171644,171645,171647],{"class":146,"line":147},[144,171646,30405],{"class":150},[144,171648,171649],{"class":154}," traceback\n",[144,171651,171652],{"class":146,"line":66},[144,171653,2430],{"emptyLinePlaceholder":72},[144,171655,171656,171658],{"class":146,"line":1210},[144,171657,170895],{"class":150},[144,171659,3769],{"class":154},[144,171661,171662,171664,171666,171668],{"class":146,"line":1225},[144,171663,2015],{"class":203},[144,171665,155],{"class":154},[144,171667,155893],{"class":259},[144,171669,161],{"class":154},[144,171671,171672,171674,171676],{"class":146,"line":1231},[144,171673,170907],{"class":150},[144,171675,152239],{"class":203},[144,171677,3769],{"class":154},[144,171679,171680],{"class":146,"line":1245},[144,171681,171682],{"class":154},"    traceback.print_exc()\n",[14,171684,171685],{},"日志系统中常把异常堆栈记录到文件。",[18,171687,171689],{"id":171688},"_910-什么是模块","9.10 什么是模块",[14,171691,171692,171693,125996],{},"模块就是一个 ",[141,171694,146365],{},[14,171696,171697,171698,24631],{},"例如创建 ",[141,171699,171700],{},"my_math.py",[135,171702,171704],{"className":30391,"code":171703,"language":30393,"meta":30,"style":30},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[141,171705,171706,171714,171724,171728,171732,171741],{"__ignoreMap":30},[144,171707,171708,171710,171712],{"class":146,"line":147},[144,171709,31960],{"class":150},[144,171711,5240],{"class":1993},[144,171713,151106],{"class":154},[144,171715,171716,171718,171720,171722],{"class":146,"line":66},[144,171717,4120],{"class":150},[144,171719,10900],{"class":154},[144,171721,636],{"class":150},[144,171723,151117],{"class":154},[144,171725,171726],{"class":146,"line":1210},[144,171727,2430],{"emptyLinePlaceholder":72},[144,171729,171730],{"class":146,"line":1225},[144,171731,2430],{"emptyLinePlaceholder":72},[144,171733,171734,171736,171739],{"class":146,"line":1231},[144,171735,31960],{"class":150},[144,171737,171738],{"class":1993}," sub",[144,171740,151106],{"class":154},[144,171742,171743,171745,171747,171749],{"class":146,"line":1245},[144,171744,4120],{"class":150},[144,171746,10900],{"class":154},[144,171748,687],{"class":150},[144,171750,151117],{"class":154},[14,171752,171753],{},"在另一个文件中导入：",[135,171755,171757],{"className":30391,"code":171756,"language":30393,"meta":30,"style":30},"import my_math\n\nprint(my_math.add(1, 2))\n",[141,171758,171759,171766,171770],{"__ignoreMap":30},[144,171760,171761,171763],{"class":146,"line":147},[144,171762,30405],{"class":150},[144,171764,171765],{"class":154}," my_math\n",[144,171767,171768],{"class":146,"line":66},[144,171769,2430],{"emptyLinePlaceholder":72},[144,171771,171772,171774,171777,171779,171781,171783],{"class":146,"line":1210},[144,171773,30428],{"class":203},[144,171775,171776],{"class":154},"(my_math.add(",[144,171778,372],{"class":203},[144,171780,12466],{"class":154},[144,171782,232],{"class":203},[144,171784,30510],{"class":154},[18,171786,171788],{"id":171787},"_911-import导入","9.11 import导入",[115,171790,171792],{"id":171791},"_9111-导入模块","9.11.1 导入模块",[135,171794,171796],{"className":30391,"code":171795,"language":30393,"meta":30,"style":30},"import random\n\nprint(random.randint(1, 10))\n",[141,171797,171798,171804,171808],{"__ignoreMap":30},[144,171799,171800,171802],{"class":146,"line":147},[144,171801,30405],{"class":150},[144,171803,45341],{"class":154},[144,171805,171806],{"class":146,"line":66},[144,171807,2430],{"emptyLinePlaceholder":72},[144,171809,171810,171812,171815,171817,171819,171821],{"class":146,"line":1210},[144,171811,30428],{"class":203},[144,171813,171814],{"class":154},"(random.randint(",[144,171816,372],{"class":203},[144,171818,12466],{"class":154},[144,171820,601],{"class":203},[144,171822,30510],{"class":154},[115,171824,171826],{"id":171825},"_9112-导入指定内容","9.11.2 导入指定内容",[135,171828,171830],{"className":30391,"code":171829,"language":30393,"meta":30,"style":30},"from random import randint\n\nprint(randint(1, 10))\n",[141,171831,171832,171843,171847],{"__ignoreMap":30},[144,171833,171834,171836,171838,171840],{"class":146,"line":147},[144,171835,30750],{"class":150},[144,171837,57809],{"class":154},[144,171839,30405],{"class":150},[144,171841,171842],{"class":154}," randint\n",[144,171844,171845],{"class":146,"line":66},[144,171846,2430],{"emptyLinePlaceholder":72},[144,171848,171849,171851,171854,171856,171858,171860],{"class":146,"line":1210},[144,171850,30428],{"class":203},[144,171852,171853],{"class":154},"(randint(",[144,171855,372],{"class":203},[144,171857,12466],{"class":154},[144,171859,601],{"class":203},[144,171861,30510],{"class":154},[115,171863,171865],{"id":171864},"_9113-起别名","9.11.3 起别名",[135,171867,171869],{"className":30391,"code":171868,"language":30393,"meta":30,"style":30},"import random as rd\n\nprint(rd.randint(1, 10))\n",[141,171870,171871,171882,171886],{"__ignoreMap":30},[144,171872,171873,171875,171877,171879],{"class":146,"line":147},[144,171874,30405],{"class":150},[144,171876,57809],{"class":154},[144,171878,31396],{"class":150},[144,171880,171881],{"class":154}," rd\n",[144,171883,171884],{"class":146,"line":66},[144,171885,2430],{"emptyLinePlaceholder":72},[144,171887,171888,171890,171893,171895,171897,171899],{"class":146,"line":1210},[144,171889,30428],{"class":203},[144,171891,171892],{"class":154},"(rd.randint(",[144,171894,372],{"class":203},[144,171896,12466],{"class":154},[144,171898,601],{"class":203},[144,171900,30510],{"class":154},[135,171902,171904],{"className":30391,"code":171903,"language":30393,"meta":30,"style":30},"from random import randint as rint\n\nprint(rint(1, 10))\n",[141,171905,171906,171922,171926],{"__ignoreMap":30},[144,171907,171908,171910,171912,171914,171917,171919],{"class":146,"line":147},[144,171909,30750],{"class":150},[144,171911,57809],{"class":154},[144,171913,30405],{"class":150},[144,171915,171916],{"class":154}," randint ",[144,171918,31396],{"class":150},[144,171920,171921],{"class":154}," rint\n",[144,171923,171924],{"class":146,"line":66},[144,171925,2430],{"emptyLinePlaceholder":72},[144,171927,171928,171930,171933,171935,171937,171939],{"class":146,"line":1210},[144,171929,30428],{"class":203},[144,171931,171932],{"class":154},"(rint(",[144,171934,372],{"class":203},[144,171936,12466],{"class":154},[144,171938,601],{"class":203},[144,171940,30510],{"class":154},[115,171942,171944],{"id":171943},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[135,171946,171948],{"className":30391,"code":171947,"language":30393,"meta":30,"style":30},"from random import *\n",[141,171949,171950],{"__ignoreMap":30},[144,171951,171952,171954,171956,171958],{"class":146,"line":147},[144,171953,30750],{"class":150},[144,171955,57809],{"class":154},[144,171957,30405],{"class":150},[144,171959,171960],{"class":150}," *\n",[14,171962,171963],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[18,171965,171967],{"id":171966},"_912-常用内置模块","9.12 常用内置模块",[115,171969,171971],{"id":171970},"_9121-random","9.12.1 random",[135,171973,171975],{"className":30391,"code":171974,"language":30393,"meta":30,"style":30},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[141,171976,171977,171983,171987,172001,172020],{"__ignoreMap":30},[144,171978,171979,171981],{"class":146,"line":147},[144,171980,30405],{"class":150},[144,171982,45341],{"class":154},[144,171984,171985],{"class":146,"line":66},[144,171986,2430],{"emptyLinePlaceholder":72},[144,171988,171989,171991,171993,171995,171997,171999],{"class":146,"line":1210},[144,171990,30428],{"class":203},[144,171992,171814],{"class":154},[144,171994,372],{"class":203},[144,171996,12466],{"class":154},[144,171998,601],{"class":203},[144,172000,30510],{"class":154},[144,172002,172003,172005,172008,172010,172012,172014,172016,172018],{"class":146,"line":1225},[144,172004,30428],{"class":203},[144,172006,172007],{"class":154},"(random.choice([",[144,172009,149901],{"class":259},[144,172011,12466],{"class":154},[144,172013,150949],{"class":259},[144,172015,12466],{"class":154},[144,172017,159744],{"class":259},[144,172019,33156],{"class":154},[144,172021,172022,172024,172027,172029,172031,172033,172035,172037,172039,172041,172043,172045,172047,172049],{"class":146,"line":1231},[144,172023,30428],{"class":203},[144,172025,172026],{"class":154},"(random.sample([",[144,172028,372],{"class":203},[144,172030,12466],{"class":154},[144,172032,232],{"class":203},[144,172034,12466],{"class":154},[144,172036,226],{"class":203},[144,172038,12466],{"class":154},[144,172040,448],{"class":203},[144,172042,12466],{"class":154},[144,172044,474],{"class":203},[144,172046,112215],{"class":154},[144,172048,232],{"class":203},[144,172050,30510],{"class":154},[115,172052,172054],{"id":172053},"_9122-time","9.12.2 time",[135,172056,172058],{"className":30391,"code":172057,"language":30393,"meta":30,"style":30},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[141,172059,172060,172066,172070,172077,172085],{"__ignoreMap":30},[144,172061,172062,172064],{"class":146,"line":147},[144,172063,30405],{"class":150},[144,172065,31842],{"class":154},[144,172067,172068],{"class":146,"line":66},[144,172069,2430],{"emptyLinePlaceholder":72},[144,172071,172072,172074],{"class":146,"line":1210},[144,172073,30428],{"class":203},[144,172075,172076],{"class":154},"(time.time())\n",[144,172078,172079,172081,172083],{"class":146,"line":1225},[144,172080,95084],{"class":154},[144,172082,372],{"class":203},[144,172084,161],{"class":154},[144,172086,172087,172089,172091,172094],{"class":146,"line":1231},[144,172088,30428],{"class":203},[144,172090,155],{"class":154},[144,172092,172093],{"class":259},"\"1秒后执行\"",[144,172095,161],{"class":154},[115,172097,172099],{"id":172098},"_9123-datetime","9.12.3 datetime",[135,172101,172103],{"className":30391,"code":172102,"language":30393,"meta":30,"style":30},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[141,172104,172105,172117,172121,172131,172138],{"__ignoreMap":30},[144,172106,172107,172109,172112,172114],{"class":146,"line":147},[144,172108,30750],{"class":150},[144,172110,172111],{"class":154}," datetime ",[144,172113,30405],{"class":150},[144,172115,172116],{"class":154}," datetime\n",[144,172118,172119],{"class":146,"line":66},[144,172120,2430],{"emptyLinePlaceholder":72},[144,172122,172123,172126,172128],{"class":146,"line":1210},[144,172124,172125],{"class":154},"now ",[144,172127,200],{"class":150},[144,172129,172130],{"class":154}," datetime.now()\n",[144,172132,172133,172135],{"class":146,"line":1225},[144,172134,30428],{"class":203},[144,172136,172137],{"class":154},"(now)\n",[144,172139,172140,172142,172145,172148,172150,172153],{"class":146,"line":1231},[144,172141,30428],{"class":203},[144,172143,172144],{"class":154},"(now.strftime(",[144,172146,172147],{"class":259},"\"%Y-%m-",[144,172149,156704],{"class":203},[144,172151,172152],{"class":259}," %H:%M:%S\"",[144,172154,30510],{"class":154},[115,172156,172158],{"id":172157},"_9124-os","9.12.4 os",[135,172160,172162],{"className":30391,"code":172161,"language":30393,"meta":30,"style":30},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[141,172163,172164,172170,172174,172181],{"__ignoreMap":30},[144,172165,172166,172168],{"class":146,"line":147},[144,172167,30405],{"class":150},[144,172169,45318],{"class":154},[144,172171,172172],{"class":146,"line":66},[144,172173,2430],{"emptyLinePlaceholder":72},[144,172175,172176,172178],{"class":146,"line":1210},[144,172177,30428],{"class":203},[144,172179,172180],{"class":154},"(os.getcwd())\n",[144,172182,172183,172185,172188,172191],{"class":146,"line":1225},[144,172184,30428],{"class":203},[144,172186,172187],{"class":154},"(os.listdir(",[144,172189,172190],{"class":259},"\".\"",[144,172192,30510],{"class":154},[115,172194,172196],{"id":172195},"_9125-sys","9.12.5 sys",[135,172198,172200],{"className":30391,"code":172199,"language":30393,"meta":30,"style":30},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[141,172201,172202,172209,172213,172220],{"__ignoreMap":30},[144,172203,172204,172206],{"class":146,"line":147},[144,172205,30405],{"class":150},[144,172207,172208],{"class":154}," sys\n",[144,172210,172211],{"class":146,"line":66},[144,172212,2430],{"emptyLinePlaceholder":72},[144,172214,172215,172217],{"class":146,"line":1210},[144,172216,30428],{"class":203},[144,172218,172219],{"class":154},"(sys.version)\n",[144,172221,172222,172224],{"class":146,"line":1225},[144,172223,30428],{"class":203},[144,172225,172226],{"class":154},"(sys.path)\n",[18,172228,172230,172231,172233,172234,406],{"id":172229},"_913-if-name-main","9.13 if ",[304,172232,79823],{}," == \"",[304,172235,102071],{},[14,172237,172238,172239,172242],{},"模块被直接运行和被导入时，",[141,172240,172241],{},"__name__"," 的值不同。",[14,172244,172245,172246,24631],{},"创建 ",[141,172247,172248],{},"my_module.py",[135,172250,172252],{"className":30391,"code":172251,"language":30393,"meta":30,"style":30},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[141,172253,172254,172262,172272,172276,172280,172292],{"__ignoreMap":30},[144,172255,172256,172258,172260],{"class":146,"line":147},[144,172257,31960],{"class":150},[144,172259,5240],{"class":1993},[144,172261,151106],{"class":154},[144,172263,172264,172266,172268,172270],{"class":146,"line":66},[144,172265,4120],{"class":150},[144,172267,10900],{"class":154},[144,172269,636],{"class":150},[144,172271,151117],{"class":154},[144,172273,172274],{"class":146,"line":1210},[144,172275,2430],{"emptyLinePlaceholder":72},[144,172277,172278],{"class":146,"line":1225},[144,172279,2430],{"emptyLinePlaceholder":72},[144,172281,172282,172284,172286,172288,172290],{"class":146,"line":1231},[144,172283,1561],{"class":150},[144,172285,31233],{"class":203},[144,172287,101572],{"class":150},[144,172289,101575],{"class":259},[144,172291,3769],{"class":154},[144,172293,172294,172296,172298,172300,172302,172304],{"class":146,"line":1245},[144,172295,31312],{"class":203},[144,172297,166613],{"class":154},[144,172299,372],{"class":203},[144,172301,12466],{"class":154},[144,172303,232],{"class":203},[144,172305,30510],{"class":154},[14,172307,172308],{},"作用：",[98,172310,172311,172314],{},[101,172312,172313],{},"直接运行该文件时，执行测试代码。",[101,172315,172316],{},"被其他文件导入时，不执行测试代码。",[14,172318,172319],{},"这是写模块时很常用的习惯。",[18,172321,172323],{"id":172322},"_914-包","9.14 包",[14,172325,172326,172327,172330],{},"包是包含 ",[141,172328,172329],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172332,172333],{},"目录结构：",[135,172335,172338],{"className":172336,"code":172337,"language":5218,"meta":30},[5216],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[141,172339,172337],{"__ignoreMap":30},[14,172341,172342],{},"导入：",[135,172344,172346],{"className":30391,"code":172345,"language":30393,"meta":30,"style":30},"from utils.file_utils import read_file\n",[141,172347,172348],{"__ignoreMap":30},[144,172349,172350,172352,172355,172357],{"class":146,"line":147},[144,172351,30750],{"class":150},[144,172353,172354],{"class":154}," utils.file_utils ",[144,172356,30405],{"class":150},[144,172358,172359],{"class":154}," read_file\n",[14,172361,172362,172364],{},[141,172363,172329],{}," 可以为空，也可以写包初始化逻辑。",[18,172366,172368],{"id":172367},"_915-第三方包","9.15 第三方包",[14,172370,172371,172372,172374],{},"第三方包通过 ",[141,172373,23863],{}," 安装。",[135,172376,172378],{"className":23854,"code":172377,"language":23856,"meta":30,"style":30},"pip install requests\n",[141,172379,172380],{"__ignoreMap":30},[144,172381,172382,172384,172386],{"class":146,"line":147},[144,172383,23863],{"class":1993},[144,172385,23866],{"class":259},[144,172387,146111],{"class":259},[14,172389,172390],{},"使用：",[135,172392,172394],{"className":30391,"code":172393,"language":30393,"meta":30,"style":30},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[141,172395,172396,172402,172406,172421],{"__ignoreMap":30},[144,172397,172398,172400],{"class":146,"line":147},[144,172399,30405],{"class":150},[144,172401,146111],{"class":154},[144,172403,172404],{"class":146,"line":66},[144,172405,2430],{"emptyLinePlaceholder":72},[144,172407,172408,172411,172413,172416,172419],{"class":146,"line":1210},[144,172409,172410],{"class":154},"response ",[144,172412,200],{"class":150},[144,172414,172415],{"class":154}," requests.get(",[144,172417,172418],{"class":259},"\"https:\u002F\u002Fwww.example.com\"",[144,172420,161],{"class":154},[144,172422,172423,172425],{"class":146,"line":1225},[144,172424,30428],{"class":203},[144,172426,172427],{"class":154},"(response.status_code)\n",[14,172429,172430],{},"查看已安装包：",[135,172432,172434],{"className":23854,"code":172433,"language":23856,"meta":30,"style":30},"pip list\n",[141,172435,172436],{"__ignoreMap":30},[144,172437,172438,172440],{"class":146,"line":147},[144,172439,23863],{"class":1993},[144,172441,118968],{"class":259},[14,172443,172444],{},"导出项目依赖：",[135,172446,172447],{"className":23854,"code":146306,"language":23856,"meta":30,"style":30},[141,172448,172449],{"__ignoreMap":30},[144,172450,172451,172453,172455,172457],{"class":146,"line":147},[144,172452,23863],{"class":1993},[144,172454,146315],{"class":259},[144,172456,26235],{"class":150},[144,172458,146320],{"class":259},[14,172460,172461],{},"安装项目依赖：",[135,172463,172464],{"className":23854,"code":146326,"language":23856,"meta":30,"style":30},[141,172465,172466],{"__ignoreMap":30},[144,172467,172468,172470,172472,172474],{"class":146,"line":147},[144,172469,23863],{"class":1993},[144,172471,23866],{"class":259},[144,172473,119652],{"class":203},[144,172475,146320],{"class":259},[18,172477,172479],{"id":172478},"_916-模块搜索路径","9.16 模块搜索路径",[14,172481,172482,172483,172486],{},"Python 导入模块时会在 ",[141,172484,172485],{},"sys.path"," 中查找。",[135,172488,172490],{"className":30391,"code":172489,"language":30393,"meta":30,"style":30},"import sys\n\nfor path in sys.path:\n    print(path)\n",[141,172491,172492,172498,172502,172514],{"__ignoreMap":30},[144,172493,172494,172496],{"class":146,"line":147},[144,172495,30405],{"class":150},[144,172497,172208],{"class":154},[144,172499,172500],{"class":146,"line":66},[144,172501,2430],{"emptyLinePlaceholder":72},[144,172503,172504,172506,172509,172511],{"class":146,"line":1210},[144,172505,3055],{"class":150},[144,172507,172508],{"class":154}," path ",[144,172510,26056],{"class":150},[144,172512,172513],{"class":154}," sys.path:\n",[144,172515,172516,172518],{"class":146,"line":1225},[144,172517,31312],{"class":203},[144,172519,169242],{"class":154},[14,172521,172522],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,172524,157636],{},[135,172526,172529],{"className":172527,"code":172528,"language":5218,"meta":30},[5216],"random.py\njson.py\ntime.py\n",[141,172530,172528],{"__ignoreMap":30},[14,172532,172533],{},"这些文件名可能导致导入异常。",[18,172535,172537],{"id":172536},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,172539,172333],{},[135,172541,172544],{"className":172542,"code":172543,"language":5218,"meta":30},[5216],"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",[141,172545,172543],{"__ignoreMap":30},[14,172547,172548,24631],{},[141,172549,172550],{},"utils\u002Ffile_utils.py",[135,172552,172554],{"className":30391,"code":172553,"language":30393,"meta":30,"style":30},"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",[141,172555,172556,172562,172572,172576,172580,172590,172600,172608,172614,172618,172645,172655,172659,172663,172673,172699],{"__ignoreMap":30},[144,172557,172558,172560],{"class":146,"line":147},[144,172559,30405],{"class":150},[144,172561,147104],{"class":154},[144,172563,172564,172566,172568,172570],{"class":146,"line":66},[144,172565,30750],{"class":150},[144,172567,108324],{"class":154},[144,172569,30405],{"class":150},[144,172571,108329],{"class":154},[144,172573,172574],{"class":146,"line":1210},[144,172575,2430],{"emptyLinePlaceholder":72},[144,172577,172578],{"class":146,"line":1225},[144,172579,2430],{"emptyLinePlaceholder":72},[144,172581,172582,172584,172587],{"class":146,"line":1231},[144,172583,31960],{"class":150},[144,172585,172586],{"class":1993}," read_json",[144,172588,172589],{"class":154},"(path):\n",[144,172591,172592,172595,172597],{"class":146,"line":1245},[144,172593,172594],{"class":154},"    path ",[144,172596,200],{"class":150},[144,172598,172599],{"class":154}," Path(path)\n",[144,172601,172602,172604,172606],{"class":146,"line":1251},[144,172603,3131],{"class":150},[144,172605,38943],{"class":150},[144,172607,169323],{"class":154},[144,172609,172610,172612],{"class":146,"line":1342},[144,172611,14783],{"class":150},[144,172613,51851],{"class":154},[144,172615,172616],{"class":146,"line":1348},[144,172617,2430],{"emptyLinePlaceholder":72},[144,172619,172620,172622,172624,172627,172629,172631,172633,172635,172637,172639,172641,172643],{"class":146,"line":1360},[144,172621,34191],{"class":150},[144,172623,146804],{"class":203},[144,172625,172626],{"class":154},"(path, ",[144,172628,146814],{"class":259},[144,172630,12466],{"class":154},[144,172632,146819],{"class":5247},[144,172634,200],{"class":150},[144,172636,146824],{"class":259},[144,172638,13745],{"class":154},[144,172640,31396],{"class":150},[144,172642,148166],{"class":5247},[144,172644,3769],{"class":154},[144,172646,172647,172649,172651,172653],{"class":146,"line":1642},[144,172648,14783],{"class":150},[144,172650,148177],{"class":154},[144,172652,45367],{"class":5247},[144,172654,161],{"class":154},[144,172656,172657],{"class":146,"line":1647},[144,172658,2430],{"emptyLinePlaceholder":72},[144,172660,172661],{"class":146,"line":1653},[144,172662,2430],{"emptyLinePlaceholder":72},[144,172664,172665,172667,172670],{"class":146,"line":1658},[144,172666,31960],{"class":150},[144,172668,172669],{"class":1993}," write_json",[144,172671,172672],{"class":154},"(path, data):\n",[144,172674,172675,172677,172679,172681,172683,172685,172687,172689,172691,172693,172695,172697],{"class":146,"line":1672},[144,172676,34191],{"class":150},[144,172678,146804],{"class":203},[144,172680,172626],{"class":154},[144,172682,151989],{"class":259},[144,172684,12466],{"class":154},[144,172686,146819],{"class":5247},[144,172688,200],{"class":150},[144,172690,146824],{"class":259},[144,172692,13745],{"class":154},[144,172694,31396],{"class":150},[144,172696,148166],{"class":5247},[144,172698,3769],{"class":154},[144,172700,172701,172704,172706,172708,172710,172712,172714,172716,172718,172720,172722],{"class":146,"line":1677},[144,172702,172703],{"class":154},"        json.dump(data, ",[144,172705,45367],{"class":5247},[144,172707,12466],{"class":154},[144,172709,147150],{"class":5247},[144,172711,200],{"class":150},[144,172713,34000],{"class":203},[144,172715,12466],{"class":154},[144,172717,152025],{"class":5247},[144,172719,200],{"class":150},[144,172721,232],{"class":203},[144,172723,161],{"class":154},[14,172725,172726,24631],{},[141,172727,154620],{},[135,172729,172731],{"className":30391,"code":172730,"language":30393,"meta":30,"style":30},"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",[141,172732,172733,172744,172748,172761,172781],{"__ignoreMap":30},[144,172734,172735,172737,172739,172741],{"class":146,"line":147},[144,172736,30750],{"class":150},[144,172738,172354],{"class":154},[144,172740,30405],{"class":150},[144,172742,172743],{"class":154}," read_json, write_json\n",[144,172745,172746],{"class":146,"line":66},[144,172747,2430],{"emptyLinePlaceholder":72},[144,172749,172750,172752,172754,172757,172759],{"class":146,"line":1210},[144,172751,159729],{"class":154},[144,172753,200],{"class":150},[144,172755,172756],{"class":154}," read_json(",[144,172758,151844],{"class":259},[144,172760,161],{"class":154},[144,172762,172763,172765,172767,172769,172771,172773,172775,172777,172779],{"class":146,"line":1225},[144,172764,170547],{"class":154},[144,172766,62692],{"class":259},[144,172768,51450],{"class":154},[144,172770,149901],{"class":259},[144,172772,12466],{"class":154},[144,172774,151485],{"class":259},[144,172776,51450],{"class":154},[144,172778,1144],{"class":203},[144,172780,165165],{"class":154},[144,172782,172783,172786,172788],{"class":146,"line":1231},[144,172784,172785],{"class":154},"write_json(",[144,172787,151844],{"class":259},[144,172789,172790],{"class":154},", students)\n",[18,172792,172794],{"id":172793},"_918-易错点","9.18 易错点",[98,172796,172797,172800,172805,172810,172813,172816],{},[101,172798,172799],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[101,172801,172802,172803,28398],{},"能指定异常类型就不要裸写 ",[141,172804,170907],{},[101,172806,172807,172809],{},[141,172808,171282],{}," 无论是否出错都会执行。",[101,172811,172812],{},"模块文件名不要和标准库重名。",[101,172814,172815],{},"导入自己写的模块时，要注意运行目录。",[101,172817,172818],{},"第三方包要安装到当前解释器或虚拟环境中。",[18,172820,172822],{"id":172821},"_919-本章练习","9.19 本章练习",[98,172824,172825,172828,172831,172837,172844],{},[101,172826,172827],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[101,172829,172830],{},"写函数读取文件，如果文件不存在则返回空字符串。",[101,172832,172245,172833,172836],{},[141,172834,172835],{},"math_utils.py","，实现加减乘除函数并导入使用。",[101,172838,172839,172840,172843],{},"创建一个 ",[141,172841,172842],{},"utils"," 包，把 JSON 读写函数放进去。",[101,172845,172846],{},"写一个程序，捕获除零异常和输入格式异常。",[5157,172848,172849],{},"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":30,"searchDepth":66,"depth":66,"links":172851},[172852,172853,172854,172855,172856,172857,172858,172859,172860,172861,172862,172868,172875,172877,172878,172879,172880,172881,172882],{"id":170704,"depth":66,"text":170705},{"id":170832,"depth":66,"text":170833},{"id":170881,"depth":66,"text":170882},{"id":171030,"depth":66,"text":171031},{"id":171202,"depth":66,"text":171203},{"id":171271,"depth":66,"text":171272},{"id":171382,"depth":66,"text":171383},{"id":171508,"depth":66,"text":171509},{"id":171633,"depth":66,"text":171634},{"id":171688,"depth":66,"text":171689},{"id":171787,"depth":66,"text":171788,"children":172863},[172864,172865,172866,172867],{"id":171791,"depth":1210,"text":171792},{"id":171825,"depth":1210,"text":171826},{"id":171864,"depth":1210,"text":171865},{"id":171943,"depth":1210,"text":171944},{"id":171966,"depth":66,"text":171967,"children":172869},[172870,172871,172872,172873,172874],{"id":171970,"depth":1210,"text":171971},{"id":172053,"depth":1210,"text":172054},{"id":172098,"depth":1210,"text":172099},{"id":172157,"depth":1210,"text":172158},{"id":172195,"depth":1210,"text":172196},{"id":172229,"depth":66,"text":172876},"9.13 if name == \"main\"",{"id":172322,"depth":66,"text":172323},{"id":172367,"depth":66,"text":172368},{"id":172478,"depth":66,"text":172479},{"id":172536,"depth":66,"text":172537},{"id":172793,"depth":66,"text":172794},{"id":172821,"depth":66,"text":172822},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170696,"description":23408},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172889,"title":172890,"body":172891,"description":173054,"extension":70,"meta":173055,"navigation":72,"path":173056,"seo":173057,"stem":173058,"__hash__":173059},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172892,"toc":173049},[172893,172896,172899,172902,172913,172915,172989,172992,172995,172998,173001,173004,173007,173010,173013,173016,173019],[10,172894,172890],{"id":172895},"python教程",[14,172897,172898],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,172900,172901],{},"建议学习环境：",[98,172903,172904,172907,172910],{},[101,172905,172906],{},"Python 版本：Python 3.10 及以上。",[101,172908,172909],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[101,172911,172912],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[18,172914,117091],{"id":117091},[98,172916,172917,172923,172929,172935,172941,172947,172953,172959,172965,172971,172977,172983],{},[101,172918,172919],{},[393,172920,172922],{"href":172921},".\u002Fch1-Python","Python环境与第一个程序",[101,172924,172925],{},[393,172926,172928],{"href":172927},".\u002Fch2","基础语法、变量与字符串",[101,172930,172931],{},[393,172932,172934],{"href":172933},".\u002Fch3","判断语句",[101,172936,172937],{},[393,172938,172940],{"href":172939},".\u002Fch4","循环语句",[101,172942,172943],{},[393,172944,172946],{"href":172945},".\u002Fch5","函数基础",[101,172948,172949],{},[393,172950,172952],{"href":172951},".\u002Fch6","数据容器",[101,172954,172955],{},[393,172956,172958],{"href":172957},".\u002Fch7","函数进阶",[101,172960,172961],{},[393,172962,172964],{"href":172963},".\u002Fch8","文件操作",[101,172966,172967],{},[393,172968,172970],{"href":172969},".\u002Fch9","异常、模块与包",[101,172972,172973],{},[393,172974,172976],{"href":172975},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[101,172978,172979],{},[393,172980,172982],{"href":172981},".\u002Fch11","面向对象基础",[101,172984,172985],{},[393,172986,172988],{"href":172987},".\u002Fch12","综合案例与复习路线",[18,172990,172991],{"id":172991},"学习路线",[14,172993,172994],{},"第一阶段：能运行程序。",[14,172996,172997],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,172999,173000],{},"第二阶段：能组织数据。",[14,173002,173003],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,173005,173006],{},"第三阶段：能封装逻辑。",[14,173008,173009],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,173011,173012],{},"第四阶段：能做小项目。",[14,173014,173015],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[18,173017,173018],{"id":173018},"参考资料",[98,173020,173021,173028,173035,173042],{},[101,173022,173023,173024],{},"黑马程序员 Python 入门教程推荐：",[393,173025,173026],{"href":173026,"rel":173027},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[23897],[101,173029,173030,173031],{},"Python 官方中文教程：",[393,173032,173033],{"href":173033,"rel":173034},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23897],[101,173036,173037,173038],{},"Python 标准库文档：",[393,173039,173040],{"href":173040,"rel":173041},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23897],[101,173043,173044,173045],{},"pyecharts 文档：",[393,173046,173047],{"href":173047,"rel":173048},"https:\u002F\u002Fpyecharts.org\u002F",[23897],{"title":30,"searchDepth":66,"depth":66,"links":173050},[173051,173052,173053],{"id":117091,"depth":66,"text":117091},{"id":172991,"depth":66,"text":172991},{"id":173018,"depth":66,"text":173018},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23410},"\u002Fwiki\u002F2024-10-10-python",{"title":172890,"description":173054},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331402617]